TargetPartyClan.java 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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.L2Character;
  13. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  14. import com.l2jserver.gameserver.model.entity.TvTEvent;
  15. /**
  16. * @author UnAfraid
  17. *
  18. */
  19. public class TargetPartyClan implements ISkillTargetTypeHandler
  20. {
  21. @Override
  22. public L2Object[] getTargetList(L2Skill skill, L2Character activeChar, boolean onlyFirst, L2Character target)
  23. {
  24. List<L2Character> targetList = new FastList<L2Character>();
  25. if (onlyFirst)
  26. return new L2Character[] { activeChar };
  27. final L2PcInstance player = activeChar.getActingPlayer();
  28. if (player == null)
  29. return _emptyTargetList;
  30. targetList.add(player);
  31. final int radius = skill.getSkillRadius();
  32. final boolean hasClan = player.getClan() != null;
  33. final boolean hasParty = player.isInParty();
  34. if (L2Skill.addSummon(activeChar, player, radius, false))
  35. targetList.add(player.getPet());
  36. // if player in clan and not in party
  37. if (!(hasClan || hasParty))
  38. return targetList.toArray(new L2Character[targetList.size()]);
  39. // Get all visible objects in a spherical area near the L2Character
  40. final Collection<L2PcInstance> objs = activeChar.getKnownList().getKnownPlayersInRadius(radius);
  41. for (L2PcInstance obj : objs)
  42. {
  43. if (obj == null)
  44. continue;
  45. // olympiad mode - adding only own side
  46. if (player.isInOlympiadMode())
  47. {
  48. if (!obj.isInOlympiadMode())
  49. continue;
  50. if (player.getOlympiadGameId() != obj.getOlympiadGameId())
  51. continue;
  52. if (player.getOlympiadSide() != obj.getOlympiadSide())
  53. continue;
  54. }
  55. if (player.isInDuel())
  56. {
  57. if (player.getDuelId() != obj.getDuelId())
  58. continue;
  59. if (hasParty && obj.isInParty() && player.getParty().getPartyLeaderOID() != obj.getParty().getPartyLeaderOID())
  60. continue;
  61. }
  62. if (!((hasClan && obj.getClanId() == player.getClanId()) || (hasParty && obj.isInParty() && player.getParty().getPartyLeaderOID() == obj.getParty().getPartyLeaderOID())))
  63. continue;
  64. // Don't add this target if this is a Pc->Pc pvp
  65. // casting and pvp condition not met
  66. if (!player.checkPvpSkill(obj, skill))
  67. continue;
  68. if (!TvTEvent.checkForTvTSkill(player, obj, skill))
  69. continue;
  70. if (!onlyFirst && L2Skill.addSummon(activeChar, obj, radius, false))
  71. targetList.add(obj.getPet());
  72. if (!L2Skill.addCharacter(activeChar, obj, radius, false))
  73. continue;
  74. if (onlyFirst)
  75. return new L2Character[] { obj };
  76. if (skill.getMaxTargets() > -1 && targetList.size() >= skill.getMaxTargets())
  77. break;
  78. targetList.add(obj);
  79. }
  80. return targetList.toArray(new L2Character[targetList.size()]);
  81. }
  82. @Override
  83. public Enum<SkillTargetType> getTargetType()
  84. {
  85. return SkillTargetType.TARGET_PARTY_CLAN;
  86. }
  87. }