/** * Return True if a siege is in progress and the L2Character attacker isn't a Defender. * * @param attacker The L2Character that the L2SiegeGuardInstance try to attack */ @Override public boolean isAutoAttackable(L2Character attacker) { // Attackable during siege by all except defenders if (!(attacker instanceof L2Playable)) { return false; } L2PcInstance player = attacker.getActingPlayer(); // Check if siege is in progress if (((_fort != null) && _fort.getZone().isActive()) || ((_castle != null) && _castle.getZone().isActive()) || ((_hall != null) && _hall.getSiegeZone().isActive())) { int activeSiegeId = (_fort != null ? _fort.getResidenceId() : (_castle != null ? _castle.getResidenceId() : (_hall != null ? _hall.getId() : 0))); // Check if player is an enemy of this defender npc if ((player != null) && (((player.getSiegeState() == 2) && !player.isRegisteredOnThisSiegeField(activeSiegeId)) || ((player.getSiegeState() == 1) && !TerritoryWarManager.getInstance().isAllyField(player, activeSiegeId)) || (player.getSiegeState() == 0))) { return true; } } return false; }
@Override public void addDamageHate(L2Character attacker, int damage, int aggro) { if (attacker == null) { return; } if (!(attacker instanceof L2DefenderInstance)) { if ((damage == 0) && (aggro <= 1) && (attacker instanceof L2Playable)) { L2PcInstance player = attacker.getActingPlayer(); // Check if siege is in progress if (((_fort != null) && _fort.getZone().isActive()) || ((_castle != null) && _castle.getZone().isActive()) || ((_hall != null) && _hall.getSiegeZone().isActive())) { int activeSiegeId = (_fort != null ? _fort.getResidenceId() : (_castle != null ? _castle.getResidenceId() : (_hall != null ? _hall.getId() : 0))); if ((player != null) && (((player.getSiegeState() == 2) && player.isRegisteredOnThisSiegeField(activeSiegeId)) || ((player.getSiegeState() == 1) && TerritoryWarManager.getInstance().isAllyField(player, activeSiegeId)))) { return; } } } super.addDamageHate(attacker, damage, aggro); } }