package com.l2dc.gameserver.skills;import java.util.logging.Logger;import com.l2dc.gameserver.model.L2Object;import com.l2dc.gameserver.model.actor.L2Character;import com.l2dc.gameserver.skills.structure.L2Skill;import com.l2dc.gameserver.skills.structure.L2Skill.AffectScope;import com.l2dc.gameserver.skills.structure.L2Skill.TargetType;import com.l2dc.util.GArray;public class SkillTargetChooser{ private static final Logger _log = Logger.getLogger(SkillUsageManager.class.getName()); //private static final L2Object[] _emptyTargetList = new L2Object[0]; public static final L2Object[] getTargetList(final L2Character caster, final L2Skill skill) { final GArray<L2Object> targetList; final TargetType _targetType = skill.getTargetType(); switch (_targetType) { case NONE: return new L2Character[] { caster }; case ENEMY: case ENEMY_ONLY: case ENEMY_NOT: case SELF: case HOLYTHING: case TARGET: case SUMMON: case DOOR_TREASURE: case PC_BODY: case NPC_BODY: case OTHERS: case GROUND: case ADVANCE_BASE: case ITEM: case FORTRESS_FLAGPOLE: case WYVERN_TARGET: case ARTILLERY: } final AffectScope _affectScope = skill.getAffectScope(); switch (_affectScope) { case NONE: { _log.warning("Using affectScope none. This should not happen! Skill: " + skill.getName()); return new L2Object[] { caster }; } case SINGLE: targetList = getSingleScope(caster, skill); break; case POINT_BLANK: case RANGE: case RING_RANGE: case PARTY: case PLEDGE: case PARTY_PLEDGE: case DEAD_PLEDGE: case FAN: case SQUARE: case SQUARE_PB: case STATIC_OBJECT_SCOPE: case WYVERN_SCOPE: case BALAKAS_SCOPE: default: targetList = new GArray<L2Object>(); } return targetList.toNativeArray(); } private static final GArray<L2Object> getSingleScope(final L2Character caster, final L2Skill skill) { final GArray<L2Object> _tmpArray = new GArray<L2Object>(); switch (skill.getTargetType()) { case ENEMY: { } case ENEMY_ONLY: case ENEMY_NOT: case SELF: _tmpArray.add(caster); break; case HOLYTHING: { final L2Object target = caster.getTarget(); if (target != null && target.isArtefact()) _tmpArray.add(target); } case TARGET: { final L2Object target = caster.getTarget(); if (target != null) _tmpArray.add(target); } case SUMMON: { final L2Object target = caster.getTarget(); if (target != null && target.isSummon()) _tmpArray.add(target); } case DOOR_TREASURE: { final L2Object target = caster.getTarget(); if (target != null && target.isSummon()) _tmpArray.add(target); } case PC_BODY: case NPC_BODY: case OTHERS: case GROUND: case ADVANCE_BASE: case ITEM: case FORTRESS_FLAGPOLE: case WYVERN_TARGET: case ARTILLERY: } return _tmpArray; }}