Пример #1
0
    protected void init(L2Character actor) {
      switch (((L2NpcTemplate) actor.getTemplate()).getAI()) {
        case FIGHTER:
          isFighter = true;
          break;
        case MAGE:
          isMage = true;
          break;
        case CORPSE:
        case BALANCED:
          isBalanced = true;
          break;
        case ARCHER:
          isArcher = true;
          break;
        case HEALER:
          isHealer = true;
          break;
        default:
          isFighter = true;
          break;
      }
      // water movement analysis
      if (actor instanceof L2Npc) {
        switch (((L2Npc) actor).getNpcId()) {
          case 20314: // Great White Shark
          case 20849: // Light Worm
            cannotMoveOnLand = true;
            break;
          default:
            cannotMoveOnLand = false;
            break;
        }
      }

      final ArrayList<L2Skill> generalSkills0 = L2Collections.newArrayList();
      final ArrayList<L2Skill> buffSkills0 = L2Collections.newArrayList();
      final ArrayList<L2Skill> debuffSkills0 = L2Collections.newArrayList();
      final ArrayList<L2Skill> cancelSkills0 = L2Collections.newArrayList();
      final ArrayList<L2Skill> healSkills0 = L2Collections.newArrayList();
      // final ArrayList<L2Skill> trickSkills0 = L2Collections.newArrayList();
      final ArrayList<L2Skill> generalDisablers0 = L2Collections.newArrayList();
      final ArrayList<L2Skill> sleepSkills0 = L2Collections.newArrayList();
      final ArrayList<L2Skill> rootSkills0 = L2Collections.newArrayList();
      final ArrayList<L2Skill> muteSkills0 = L2Collections.newArrayList();
      final ArrayList<L2Skill> resurrectSkills0 = L2Collections.newArrayList();

      // skill analysis
      for (L2Skill sk : actor.getAllSkills()) {
        if (sk.isPassive()) continue;
        int castRange = sk.getCastRange();
        boolean hasLongRangeDamageSkill = false;
        switch (sk.getSkillType()) {
          case HEAL:
          case HEAL_PERCENT:
          case HEAL_STATIC:
          case BALANCE_LIFE:
          case HOT:
            healSkills0.add(sk);
            hasHealOrResurrect = true;
            continue; // won't be considered something for fighting
          case BUFF:
            buffSkills0.add(sk);
            continue; // won't be considered something for fighting
          case PARALYZE:
          case STUN:
            // hardcoding petrification until improvements are made to
            // EffectTemplate... petrification is totally different for
            // AI than paralyze
            switch (sk.getId()) {
              case 367:
              case 4111:
              case 4383:
              case 4616:
              case 4578:
                sleepSkills0.add(sk);
                break;
              default:
                generalDisablers0.add(sk);
                break;
            }
            break;
          case MUTE:
            muteSkills0.add(sk);
            break;
          case SLEEP:
            sleepSkills0.add(sk);
            break;
          case ROOT:
            rootSkills0.add(sk);
            break;
          case FEAR: // could be used as an alternative for healing?
          case CONFUSION:
            //  trickSkills.add(sk);
          case DEBUFF:
            debuffSkills0.add(sk);
            break;
          case CANCEL:
          case MAGE_BANE:
          case WARRIOR_BANE:
          case NEGATE:
            cancelSkills0.add(sk);
            break;
          case RESURRECT:
            resurrectSkills0.add(sk);
            hasHealOrResurrect = true;
            break;
          case NOTDONE:
          case COREDONE:
            continue; // won't be considered something for fighting
          default:
            generalSkills0.add(sk);
            hasLongRangeDamageSkill = true;
            break;
        }
        if (castRange > 70) {
          hasLongRangeSkills = true;
          if (hasLongRangeDamageSkill) hasLongRangeDamageSkills = true;
        }
        if (castRange > maxCastRange) maxCastRange = castRange;
      }
      // Because of missing skills, some mages/balanced cannot play like mages
      if (!hasLongRangeDamageSkills && isMage) {
        isBalanced = true;
        isMage = false;
        isFighter = false;
      }
      if (!hasLongRangeSkills && (isMage || isBalanced)) {
        isBalanced = false;
        isMage = false;
        isFighter = true;
      }
      if (generalSkills0.isEmpty() && isMage) {
        isBalanced = true;
        isMage = false;
      }

      generalSkills = convert(generalSkills0);
      buffSkills = convert(buffSkills0);
      debuffSkills = convert(debuffSkills0);
      cancelSkills = convert(cancelSkills0);
      healSkills = convert(healSkills0);
      // this.trickSkills = convert(trickSkills0);
      generalDisablers = convert(generalDisablers0);
      sleepSkills = convert(sleepSkills0);
      rootSkills = convert(rootSkills0);
      muteSkills = convert(muteSkills0);
      resurrectSkills = convert(resurrectSkills0);
    }