Package com.l2jfrozen.gameserver.model.actor.instance

Examples of com.l2jfrozen.gameserver.model.actor.instance.L2FortSiegeGuardInstance


  {
    // Get all information needed to choose between physical or magical attack
    L2Skill[] skills = null;
    double dist_2 = 0;
    int range = 0;
    L2FortSiegeGuardInstance sGuard;
    sGuard = (L2FortSiegeGuardInstance) _actor;
    L2Character attackTarget = getAttackTarget();

    try
    {
      _actor.setTarget(attackTarget);
      skills = _actor.getAllSkills();
      dist_2 = _actor.getPlanDistanceSq(attackTarget.getX(), attackTarget.getY());
      range = _actor.getPhysicalAttackRange() + _actor.getTemplate().collisionRadius + attackTarget.getTemplate().collisionRadius;
      if(attackTarget.isMoving())
      {
        range += 50;
      }
    }
    catch(NullPointerException e)
    {
      if(Config.ENABLE_ALL_EXCEPTIONS)
        e.printStackTrace();
     
      //_log.warning("AttackableAI: Attack target is NULL.");
      _actor.setTarget(null);
      setIntention(AI_INTENTION_IDLE, null, null);
      return;
    }

    // never attack defenders
    if(attackTarget instanceof L2PcInstance && sGuard.getFort().getSiege().checkIsDefender(((L2PcInstance) attackTarget).getClan()))
    {
      // Cancel the target
      sGuard.stopHating(attackTarget);
      _actor.setTarget(null);
      setIntention(AI_INTENTION_IDLE, null, null);
      return;
    }

    if(!GeoData.getInstance().canSeeTarget(_actor, attackTarget))
    {
      // Siege guards differ from normal mobs currently:
      // If target cannot seen, don't attack any more
      sGuard.stopHating(attackTarget);
      _actor.setTarget(null);
      setIntention(AI_INTENTION_IDLE, null, null);
      return;
    }

    // Check if the actor isn't muted and if it is far from target
    if(!_actor.isMuted() && dist_2 > range * range)
    {
      // check for long ranged skills and heal/buff skills
      for(L2Skill sk : skills)
      {
        int castRange = sk.getCastRange();

        if(dist_2 <= castRange * castRange && castRange > 70 && !_actor.isSkillDisabled(sk.getId()) && _actor.getCurrentMp() >= _actor.getStat().getMpConsume(sk) && !sk.isPassive())
        {

          L2Object OldTarget = _actor.getTarget();
          if(sk.getSkillType() == SkillType.BUFF || sk.getSkillType() == SkillType.HEAL)
          {
            boolean useSkillSelf = true;
            if(sk.getSkillType() == SkillType.HEAL && _actor.getCurrentHp() > (int) (_actor.getMaxHp() / 1.5))
            {
              useSkillSelf = false;
              break;
            }
            if(sk.getSkillType() == SkillType.BUFF)
            {
              L2Effect[] effects = _actor.getAllEffects();
              for(int i = 0; effects != null && i < effects.length; i++)
              {
                L2Effect effect = effects[i];
                if(effect.getSkill() == sk)
                {
                  useSkillSelf = false;
                  break;
                }
              }
            }
            if(useSkillSelf)
            {
              _actor.setTarget(_actor);
            }
          }

          clientStopMoving(null);
          _accessor.doCast(sk);
          _actor.setTarget(OldTarget);
          return;
        }
      }

      // Check if the L2SiegeGuardInstance is attacking, knows the target and can't run
      if(!_actor.isAttackingNow() && _actor.getRunSpeed() == 0 && _actor.getKnownList().knowsObject(attackTarget))
      {
        // Cancel the target
        _actor.getKnownList().removeKnownObject(attackTarget);
        _actor.setTarget(null);
        setIntention(AI_INTENTION_IDLE, null, null);
      }
      else
      {
        double dx = _actor.getX() - attackTarget.getX();
        double dy = _actor.getY() - attackTarget.getY();
        double dz = _actor.getZ() - attackTarget.getZ();
        double homeX = attackTarget.getX() - sGuard.getSpawn().getLocx();
        double homeY = attackTarget.getY() - sGuard.getSpawn().getLocy();

        // Check if the L2SiegeGuardInstance isn't too far from it's home location
        if(dx * dx + dy * dy > 10000 && homeX * homeX + homeY * homeY > 3240000 && _actor.getKnownList().knowsObject(attackTarget))
        {
          // Cancel the target
View Full Code Here


        if(!_actor.isRunning())
        {
          _actor.setRunning();
        }

        L2FortSiegeGuardInstance sGuard;
        sGuard = (L2FortSiegeGuardInstance) _actor;
        double homeX = target.getX() - sGuard.getSpawn().getLocx();
        double homeY = target.getY() - sGuard.getSpawn().getLocy();

        // Check if the L2SiegeGuardInstance is not too far from its home location
        if(homeX * homeX + homeY * homeY < 3240000)
        {
          setIntention(CtrlIntention.AI_INTENTION_ATTACK, target, null);
View Full Code Here

TOP

Related Classes of com.l2jfrozen.gameserver.model.actor.instance.L2FortSiegeGuardInstance

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.