Advertisement
Deedlit

sample 2

Aug 8th, 2014
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.19 KB | None | 0 0
  1. /*
  2.  * This program is free software: you can redistribute it and/or modify it under
  3.  * the terms of the GNU General Public License as published by the Free Software
  4.  * Foundation, either version 3 of the License, or (at your option) any later
  5.  * version.
  6.  *
  7.  * This program is distributed in the hope that it will be useful, but WITHOUT
  8.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9.  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10.  * details.
  11.  *
  12.  * You should have received a copy of the GNU General Public License along with
  13.  * this program. If not, see <http://www.gnu.org/licenses/>.
  14.  */
  15. package com.l2jserver.gameserver.ai.ext.tasks;
  16.  
  17. import com.l2jserver.gameserver.ai.ext.AI_TaskQueue;
  18. import com.l2jserver.gameserver.ai.ext.struct.task.AITaskSimpleVar;
  19. import com.l2jserver.gameserver.model.L2Object;
  20. import com.l2jserver.gameserver.model.L2Skill;
  21. import com.l2jserver.gameserver.model.actor.L2Attackable;
  22. import com.l2jserver.gameserver.model.actor.L2Character;
  23. import com.l2jserver.util.Rnd;
  24.  
  25. /**
  26.  * ==============================================<br>
  27.  * UseAtkSkillTask - Insert description...<br>
  28.  * ==============================================<br>
  29.  */
  30. public class UseAtkSkillTask extends AbstractAITask
  31. {
  32.     private final L2Character target;
  33.  
  34.     public UseAtkSkillTask(L2Character actor, L2Character target)
  35.     {
  36.         super(actor.getTaskQueue(), 0, true, true, 1, actor);
  37.         this.target = target;
  38.         setWeights();
  39.     }
  40.  
  41.     protected void setWeights()
  42.     {
  43.         int chance = 1 + Rnd.qget(getActor().getMinSkillChance(), getActor().getMaxSkillChance());
  44.         setWeight(calculateWeightForPercentage(chance), true);
  45.         setWeight(calculateWeightForPercentage(chance), false);
  46.     }
  47.  
  48.     @Override
  49.     protected void initTaskTypeName()
  50.     {
  51.         _name = "UseAtkSkillTask";
  52.     }
  53.  
  54.     @Override
  55.     public L2Attackable getActor()
  56.     {
  57.         return (L2Attackable)super.getActor();
  58.     }
  59.  
  60.     public L2Character getTarget()
  61.     {
  62.         return target;
  63.     }
  64.  
  65.     @Override
  66.     public boolean valid()
  67.     {
  68.         return hasAI() && !getActor().isAlikeDead() && !getActor().getCombatData().getSelfAnalysis().getSkillRender().getAtkSkills().isEmpty()
  69.                 && getAI().getIntention().isAttackingMode() && target != null && getAI().getRangesCalc().isPawnRangeInfoRegistered(target) && !target.isAlikeDead();
  70.     }
  71.  
  72.     @Override
  73.     public boolean ready()
  74.     {
  75.         return getActor().getRangesCalc().canSee(target) && getActor().getCurrentMPPercentage() > 5;
  76.     }
  77.  
  78.     @Override
  79.     public boolean waiting(int cycle)
  80.     {
  81.         return super.waiting(cycle) || getActor().isCastingNow() || !getAI().canTryCast(null);
  82.     }
  83.  
  84.     @Override
  85.     public boolean run()
  86.     {
  87.         L2Attackable npc = (L2Attackable)getActor();
  88.         if (target == null || target.isAlikeDead() || target.isSleeping())
  89.             return false;
  90.         if (!npc.getCombatData().getSelfAnalysis().getSkillRender().getAtkSkills().isEmpty())
  91.         {
  92.             L2Object oldTarget = npc.getTarget();
  93.             double distance = getActor().getRangesCalc().getPawnRangeInfo(target).getDistance(true);
  94.             int retry = npc.getCombatData().getSelfAnalysis().getSkillRender().getAtkSkills().size();
  95.             L2Skill skill = null;
  96.             while(retry > 0)
  97.             {
  98.                 retry--;
  99.  
  100.                 //--------------------------------------------------------------------------------
  101.                 //Long/Short Range skill Usage
  102.                 if ((npc.getLSkillChance() > 0 && npc.getCombatData().getSelfAnalysis().getSkillRender().hasLrangeSkill()) || (npc.getSSkillChance() > 0 && npc.getCombatData().getSelfAnalysis().getSkillRender().hasSrangeSkill()))
  103.                 {
  104.                     // short range
  105.                     if (npc.getCombatData().getSelfAnalysis().getSkillRender().hasSrangeSkill() && distance <= 150 && Rnd.qchance(npc.getSSkillChance()))
  106.                     {
  107.                         if (!getAI().getSelfAnalysis().getSkillRender().getShortRangeSkills().isEmpty())
  108.                             skill = npc.getCombatData().getSelfAnalysis().getSkillRender().selectTopSkillByDamage(target, distance, false, npc.getCombatData().getSelfAnalysis().getSkillRender().getShortRangeSkills());
  109.                     }
  110.                     // long range
  111.                     if (npc.getCombatData().getSelfAnalysis().getSkillRender().hasLrangeSkill() && distance > 150 && Rnd.qchance(npc.getLSkillChance()))
  112.                     {
  113.                         if (!getAI().getSelfAnalysis().getSkillRender().getLongRangeSkills().isEmpty())
  114.                             skill = npc.getCombatData().getSelfAnalysis().getSkillRender().selectTopSkillByDamage(target, distance, false, npc.getCombatData().getSelfAnalysis().getSkillRender().getLongRangeSkills());
  115.                     }
  116.                 }
  117.  
  118.                 //--------------------------------------------------------------------------------
  119.                 //Try other attack skill if none selected yet
  120.                 if (skill == null)
  121.                     skill = npc.getCombatData().getSelfAnalysis().getSkillRender().selectTopSkillByDamage(target, distance, false, npc.getCombatData().getSelfAnalysis().getSkillRender().getAtkSkills());
  122.  
  123.                 if (skill != null)
  124.                 {
  125.                     npc.setTarget(target);
  126.                     if (npc.doCast(skill))
  127.                     {
  128.                         npc.setTarget(oldTarget);
  129.                         setWeight(weight(true), false);
  130.                         return true;
  131.                     }
  132.                     else
  133.                         skill = null;
  134.                 }
  135.             }
  136.             npc.setTarget(oldTarget);
  137.         }
  138.         return false;
  139.     }
  140.  
  141.     @Override
  142.     public boolean block_think_after_run()
  143.     {
  144.         return true;
  145.     }
  146.  
  147.     @Override
  148.     public int update_weight()
  149.     {
  150.         return weight(false) + calculateWeightForPercentage(1);
  151.     }
  152.  
  153.     @Override
  154.     public boolean valid_update_weight_delay()
  155.     {
  156.         return getLastWeightUpdateTimestamp() <= 0 || System.currentTimeMillis() - getLastWeightUpdateTimestamp() > 15000;
  157.     }
  158.  
  159.     @Override
  160.     public boolean removeable()
  161.     {
  162.         return !valid();
  163.     }
  164.  
  165.     @Override
  166.     public boolean valid_run_delay()
  167.     {
  168.         return getTaskLastExecTimestamp(false) <= 0 || System.currentTimeMillis() - getTaskLastExecTimestamp(false) > (getActor().getCombatData().getSelfAnalysis().isMage() || getActor().getCombatData().getSelfAnalysis().isHealer() || getActor().getCombatData().getSelfAnalysis().isBalanced() ? 7500 : 15000);
  169.     }
  170.  
  171.     @Override
  172.     public int max_task_instances()
  173.     {
  174.         return 1;
  175.     }
  176.  
  177.     @Override
  178.     public void on_variable_listener(AITaskSimpleVar.LISTENER_EVENTS event, AITaskSimpleVar variable)
  179.     {
  180.         // ignored
  181.     }
  182.  
  183.     @Override
  184.     public void on_added_to_queue(AI_TaskQueue queue)
  185.     {
  186.         // ignored
  187.     }
  188.  
  189.     @Override
  190.     public void on_remove_from_queue(AI_TaskQueue queue)
  191.     {
  192.         // ignored
  193.     }
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement