TargetAreaSummon.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /**
  2. *
  3. */
  4. package handlers.targethandlers;
  5. import java.util.Collection;
  6. import java.util.List;
  7. import javolution.util.FastList;
  8. import com.l2jserver.gameserver.handler.ISkillTargetTypeHandler;
  9. import com.l2jserver.gameserver.model.L2Object;
  10. import com.l2jserver.gameserver.model.L2Skill;
  11. import com.l2jserver.gameserver.model.L2Skill.SkillTargetType;
  12. import com.l2jserver.gameserver.model.actor.L2Attackable;
  13. import com.l2jserver.gameserver.model.actor.L2Character;
  14. import com.l2jserver.gameserver.model.actor.L2Playable;
  15. import com.l2jserver.gameserver.model.actor.instance.L2SummonInstance;
  16. import com.l2jserver.gameserver.util.Util;
  17. /**
  18. * @author UnAfraid
  19. *
  20. */
  21. public class TargetAreaSummon implements ISkillTargetTypeHandler
  22. {
  23. @Override
  24. public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
  25. {
  26. List<L2Character> targetList = new FastList<L2Character>();
  27. target = activeChar.getPet();
  28. if (target == null || !(target instanceof L2SummonInstance) || target.isDead())
  29. return _emptyTargetList;
  30. if (onlyFirst)
  31. return new L2Character[] { target };
  32. final boolean srcInArena = (activeChar.isInsideZone(L2Character.ZONE_PVP) && !activeChar.isInsideZone(L2Character.ZONE_SIEGE));
  33. final Collection<L2Character> objs = target.getKnownList().getKnownCharacters();
  34. final int radius = skill.getSkillRadius();
  35. for (L2Character obj : objs)
  36. {
  37. if (obj == null || obj == target || obj == activeChar)
  38. continue;
  39. if (!Util.checkIfInRange(radius, target, obj, true))
  40. continue;
  41. if (!(obj instanceof L2Attackable || obj instanceof L2Playable))
  42. continue;
  43. if (!L2Skill.checkForAreaOffensiveSkills(activeChar, obj, skill, srcInArena))
  44. continue;
  45. if (skill.getMaxTargets() > -1 && targetList.size() >= skill.getMaxTargets())
  46. break;
  47. targetList.add(obj);
  48. }
  49. if (targetList.isEmpty())
  50. return _emptyTargetList;
  51. return targetList.toArray(new L2Character[targetList.size()]);
  52. }
  53. @Override
  54. public Enum<SkillTargetType> getTargetType()
  55. {
  56. return SkillTargetType.TARGET_AREA_SUMMON;
  57. }
  58. }