Advertisement
Guest User

Untitled

a guest
May 12th, 2018
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.16 KB | None | 0 0
  1. /*
  2.  * Copyright (C) 2004-2016 L2J DataPack
  3.  *
  4.  * This file is part of L2J DataPack.
  5.  *
  6.  * L2J DataPack is free software: you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation, either version 3 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * L2J DataPack is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14.  * General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18.  */
  19. package ai.npc.NpcBuffers;
  20.  
  21. import com.l2jserver.gameserver.ThreadPoolManager;
  22. import com.l2jserver.gameserver.model.actor.L2Character;
  23. import com.l2jserver.gameserver.model.actor.L2Npc;
  24. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  25. import com.l2jserver.gameserver.model.actor.instance.L2TamedBeastInstance;
  26. import com.l2jserver.gameserver.model.skills.Skill;
  27. import com.l2jserver.gameserver.model.zone.ZoneId;
  28. import com.l2jserver.gameserver.util.Util;
  29.  
  30. /**
  31.  * @author UnAfraid
  32.  */
  33. public class NpcBufferAI implements Runnable
  34. {
  35.     private final L2Npc _npc;
  36.     private final NpcBufferSkillData _skillData;
  37.    
  38.     protected NpcBufferAI(L2Npc npc, NpcBufferSkillData skill)
  39.     {
  40.         _npc = npc;
  41.         _skillData = skill;
  42.     }
  43.    
  44.     @Override
  45.     public void run()
  46.     {
  47.         if ((_npc == null) || !_npc.isVisible() || _npc.isDecayed() || _npc.isDead() || (_skillData == null) || (_skillData.getSkill() == null))
  48.         {
  49.             return;
  50.         }
  51.        
  52.         if ((_npc.getSummoner() == null) || !_npc.getSummoner().isPlayer())
  53.         {
  54.             return;
  55.         }
  56.        
  57.         final Skill skill = _skillData.getSkill();
  58.         final L2PcInstance player = _npc.getSummoner().getActingPlayer();
  59.        
  60.         switch (_skillData.getAffectScope())
  61.         {
  62.             case PARTY:
  63.             {
  64.                 if (player.isInParty())
  65.                 {
  66.                     for (L2PcInstance member : player.getParty().getMembers())
  67.                     {
  68.                         if (Util.checkIfInRange(skill.getAffectRange(), _npc, member, true) && !member.isDead())
  69.                         {
  70.                             skill.applyEffects(player, member);
  71.                         }
  72.                     }
  73.                 }
  74.                 else
  75.                 {
  76.                     if (Util.checkIfInRange(skill.getAffectRange(), _npc, player, true) && !player.isDead())
  77.                     {
  78.                         skill.applyEffects(player, player);
  79.                     }
  80.                 }
  81.                 break;
  82.             }
  83.             case RANGE:
  84.             {
  85.                 for (L2Character target : _npc.getKnownList().getKnownCharactersInRadius(skill.getAffectRange()))
  86.                 {
  87.                     switch (_skillData.getAffectObject())
  88.                     {
  89.                         case FRIEND:
  90.                         {
  91.                             if (isFriendly(player, target) && !target.isDead())
  92.                             {
  93.                                 skill.applyEffects(target, target);
  94.                             }
  95.                             break;
  96.                         }
  97.                         case NOT_FRIEND:
  98.                         {
  99.                             if (isEnemy(player, target) && !target.isDead())
  100.                             {
  101.                                 // Update PvP status
  102.                                 if (target.isPlayable())
  103.                                 {
  104.                                     player.updatePvPStatus(target);
  105.                                 }
  106.                                 skill.applyEffects(target, target);
  107.                             }
  108.                             break;
  109.                         }
  110.                     }
  111.                 }
  112.                 break;
  113.             }
  114.         }
  115.         ThreadPoolManager.getInstance().scheduleGeneral(this, _skillData.getDelay());
  116.     }
  117.    
  118.     /**
  119.      * Verifies if the character is an friend and can be affected by positive effect.
  120.      * @param player the player
  121.      * @param target the target
  122.      * @return {@code true} if target can be affected by positive effect, {@code false} otherwise
  123.      */
  124.     private boolean isFriendly(L2PcInstance player, L2Character target)
  125.     {
  126.         if (target.isPlayable())
  127.         {
  128.             final L2PcInstance targetPlayer = target.getActingPlayer();
  129.            
  130.             if (player == targetPlayer)
  131.             {
  132.                 return true;
  133.             }
  134.            
  135.             if (player.isInPartyWith(targetPlayer))
  136.             {
  137.                 return true;
  138.             }
  139.            
  140.             if (player.isInCommandChannelWith(targetPlayer))
  141.             {
  142.                 return true;
  143.             }
  144.            
  145.             if (player.isInClanWith(targetPlayer))
  146.             {
  147.                 return true;
  148.             }
  149.            
  150.             if (player.isInAllyWith(targetPlayer))
  151.             {
  152.                 return true;
  153.             }
  154.            
  155.             if (player.isOnSameSiegeSideWith(targetPlayer))
  156.             {
  157.                 return true;
  158.             }
  159.         }
  160.         return false;
  161.     }
  162.    
  163.     /**
  164.      * Verifies if the character is an enemy and can be affected by negative effect.
  165.      * @param player the player
  166.      * @param target the target
  167.      * @return {@code true} if target can be affected by negative effect, {@code false} otherwise
  168.      */
  169.     private boolean isEnemy(L2PcInstance player, L2Character target)
  170.     {
  171.         if (isFriendly(player, target))
  172.         {
  173.             return false;
  174.         }
  175.        
  176.         if (target instanceof L2TamedBeastInstance)
  177.         {
  178.             return isEnemy(player, ((L2TamedBeastInstance) target).getOwner());
  179.         }
  180.        
  181.         if (target.isMonster())
  182.         {
  183.             return true;
  184.         }
  185.        
  186.         if (target.isPlayable())
  187.         {
  188.             final L2PcInstance targetPlayer = target.getActingPlayer();
  189.            
  190.             if (!isFriendly(player, targetPlayer))
  191.             {
  192.                 if (targetPlayer.getPvpFlag() != 0)
  193.                 {
  194.                     return true;
  195.                 }
  196.                
  197.                 if (targetPlayer.getKarma() != 0)
  198.                 {
  199.                     return true;
  200.                 }
  201.                
  202.                 if (player.isAtWarWith(targetPlayer))
  203.                 {
  204.                     return true;
  205.                 }
  206.                
  207.                 if (targetPlayer.isInsideZone(ZoneId.PVP))
  208.                 {
  209.                     return true;
  210.                 }
  211.             }
  212.         }
  213.         return false;
  214.     }
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement