예제 #1
0
  /**
   * Method isAttackable.
   *
   * @param attacker Creature
   * @return boolean
   */
  @Override
  public boolean isAttackable(Creature attacker) {
    if ((attacker == null) || isOpen()) {
      return false;
    }

    SiegeEvent<?, ?> siegeEvent = getEvent(SiegeEvent.class);

    switch (getDoorType()) {
      case WALL:
        if (!attacker.isSummon()
            || (siegeEvent == null)
            || !siegeEvent.containsSiegeSummon((SummonInstance) attacker)) {
          return false;
        }
        break;

      case DOOR:
        Player player = attacker.getPlayer();

        if (player == null) {
          return false;
        }

        if (siegeEvent != null) {
          if (siegeEvent.getSiegeClan(SiegeEvent.DEFENDERS, player.getClan()) != null) {
            return false;
          }
        }
        break;
    }

    return !isInvul();
  }