/**
   * 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);
    }
  }