TargetAreaUndead.java 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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.Config;
  9. import com.l2jserver.gameserver.GeoData;
  10. import com.l2jserver.gameserver.handler.ISkillTargetTypeHandler;
  11. import com.l2jserver.gameserver.model.L2Object;
  12. import com.l2jserver.gameserver.model.L2Skill;
  13. import com.l2jserver.gameserver.model.L2Skill.SkillTargetType;
  14. import com.l2jserver.gameserver.model.actor.L2Character;
  15. import com.l2jserver.gameserver.model.actor.L2Npc;
  16. import com.l2jserver.gameserver.model.actor.instance.L2SummonInstance;
  17. import com.l2jserver.gameserver.util.Util;
  18. /**
  19. * @author UnAfraid
  20. *
  21. */
  22. public class TargetAreaUndead implements ISkillTargetTypeHandler
  23. {
  24. @Override
  25. public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
  26. {
  27. List<L2Character> targetList = new FastList<L2Character>();
  28. final L2Character cha;
  29. final int radius = skill.getSkillRadius();
  30. if (skill.getCastRange() >= 0 && (target instanceof L2Npc || target instanceof L2SummonInstance) && target.isUndead() && !target.isAlikeDead())
  31. {
  32. cha = target;
  33. if (!onlyFirst)
  34. targetList.add(cha);
  35. else
  36. return new L2Character[] { cha };
  37. }
  38. else
  39. cha = activeChar;
  40. final Collection<L2Character> objs = activeChar.getKnownList().getKnownCharacters();
  41. for (L2Character obj : objs)
  42. {
  43. if (!Util.checkIfInRange(radius, cha, obj, true))
  44. continue;
  45. else if (obj instanceof L2Npc)
  46. target = obj;
  47. else if (obj instanceof L2SummonInstance)
  48. target = obj;
  49. else
  50. continue;
  51. if (!target.isAlikeDead())
  52. {
  53. if (!target.isUndead())
  54. continue;
  55. else if (Config.GEODATA > 0 && !GeoData.getInstance().canSeeTarget(activeChar, target))
  56. continue;
  57. else if (skill.getMaxTargets() > -1 && targetList.size() >= skill.getMaxTargets())
  58. break;
  59. else if (!onlyFirst)
  60. targetList.add(obj);
  61. else
  62. return new L2Character[] { obj };
  63. }
  64. }
  65. if (targetList.isEmpty())
  66. return _emptyTargetList;
  67. return targetList.toArray(new L2Character[targetList.size()]);
  68. }
  69. @Override
  70. public Enum<SkillTargetType> getTargetType()
  71. {
  72. return SkillTargetType.TARGET_AREA_UNDEAD;
  73. }
  74. }