Skill target related improvements.

This commit is contained in:
MobiusDevelopment 2020-08-15 16:46:56 +00:00
parent 08d72b1ec8
commit c67e5f29e2
110 changed files with 957 additions and 980 deletions

View File

@ -17,10 +17,10 @@
package org.l2jmobius.gameserver.handler; package org.l2jmobius.gameserver.handler;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
public interface ISkillHandler public interface ISkillHandler
@ -32,7 +32,7 @@ public interface ISkillHandler
* @param targets * @param targets
* @throws IOException * @throws IOException
*/ */
void useSkill(Creature creature, Skill skill, WorldObject[] targets) throws IOException; void useSkill(Creature creature, Skill skill, List<Creature> targets) throws IOException;
/** /**
* this method is called at initialization to register all the item ids automatically * this method is called at initialization to register all the item ids automatically

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.handler.SkillHandler; import org.l2jmobius.gameserver.handler.SkillHandler;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
@ -37,7 +39,7 @@ public class BalanceLife implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
// check for other effects // check for other effects
try try

View File

@ -16,10 +16,11 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -34,14 +35,14 @@ public class BeastFeed implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {
return; return;
} }
final WorldObject[] targetList = skill.getTargetList(creature); final List<Creature> targetList = skill.getTargetList(creature);
if (targetList == null) if (targetList == null)
{ {
return; return;

View File

@ -16,13 +16,14 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Effect; import org.l2jmobius.gameserver.model.Effect;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -49,7 +50,7 @@ public class Blow implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (creature.isAlikeDead()) if (creature.isAlikeDead())
{ {
@ -61,7 +62,7 @@ public class Blow implements ISkillHandler
final boolean ss = creature.checkSs(); final boolean ss = creature.checkSs();
Formulas.getInstance(); Formulas.getInstance();
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if (target.isAlikeDead()) if (target.isAlikeDead())
{ {

View File

@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
@ -36,7 +37,7 @@ public class Charge implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
for (WorldObject target1 : targets) for (WorldObject target1 : targets)
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
@ -23,7 +25,6 @@ import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
import org.l2jmobius.gameserver.model.Effect; import org.l2jmobius.gameserver.model.Effect;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
@ -40,7 +41,7 @@ public class ClanGate implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
PlayerInstance player = null; PlayerInstance player = null;
if (creature instanceof PlayerInstance) if (creature instanceof PlayerInstance)

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.handler.SkillHandler; import org.l2jmobius.gameserver.handler.SkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -35,7 +37,7 @@ public class CombatPointHeal implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature actChar, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
// check for other effects // check for other effects
try try
@ -43,7 +45,7 @@ public class CombatPointHeal implements ISkillHandler
final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(SkillType.BUFF); final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(SkillType.BUFF);
if (handler != null) if (handler != null)
{ {
handler.useSkill(actChar, skill, targets); handler.useSkill(creature, skill, targets);
} }
} }
catch (Exception e) catch (Exception e)

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
// //
@ -64,7 +66,7 @@ public class Continuous implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skillValue, WorldObject[] targets) public void useSkill(Creature creature, Skill skillValue, List<Creature> targets)
{ {
if (creature == null) if (creature == null)
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
@ -36,7 +38,7 @@ public class CpDam implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof Playable)) if (!(creature instanceof Playable))
{ {

View File

@ -16,11 +16,12 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.RecipeController; import org.l2jmobius.gameserver.RecipeController;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -34,7 +35,7 @@ public class Craft implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,12 +16,12 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -38,14 +38,14 @@ public class DeluxeKey implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {
return; return;
} }
final WorldObject[] targetList = skill.getTargetList(creature); final List<Creature> targetList = skill.getTargetList(creature);
if (targetList == null) if (targetList == null)
{ {
return; return;

View File

@ -80,7 +80,7 @@ public class Disablers implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
final SkillType type = skill.getSkillType(); final SkillType type = skill.getSkillType();
final boolean bss = creature.checkBss(); final boolean bss = creature.checkBss();
@ -671,10 +671,10 @@ public class Disablers implements ISkillHandler
LOGGER.warning("Couldn't find skill handler for HEAL."); LOGGER.warning("Couldn't find skill handler for HEAL.");
continue; continue;
} }
final WorldObject[] tgts = new WorldObject[]
{ final List<Creature> tgts = new ArrayList<>();
target tgts.add(target);
};
try try
{ {
healhandler.useSkill(creature, skill, tgts); healhandler.useSkill(creature, skill, tgts);

View File

@ -16,12 +16,12 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -37,14 +37,14 @@ public class DrainSoul implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {
return; return;
} }
final WorldObject[] targetList = skill.getTargetList(creature); final List<Creature> targetList = skill.getTargetList(creature);
if (targetList == null) if (targetList == null)
{ {
return; return;

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.datatables.xml.ZoneData; import org.l2jmobius.gameserver.datatables.xml.ZoneData;
@ -24,7 +26,6 @@ import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory; import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
@ -46,7 +47,7 @@ public class Fishing implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,11 +16,12 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Fishing; import org.l2jmobius.gameserver.model.Fishing;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.items.Weapon; import org.l2jmobius.gameserver.model.items.Weapon;
@ -39,7 +40,7 @@ public class FishingSkill implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -33,7 +35,7 @@ public class GetPlayer implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (creature.isAlikeDead()) if (creature.isAlikeDead())
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
@ -33,7 +35,7 @@ public class GiveSp implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
for (WorldObject obj : targets) for (WorldObject obj : targets)
{ {

View File

@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.Config; import org.l2jmobius.Config;
@ -49,7 +50,7 @@ public class Harvest implements ISkillHandler
private MonsterInstance _target; private MonsterInstance _target;
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {
@ -58,7 +59,7 @@ public class Harvest implements ISkillHandler
_player = (PlayerInstance) creature; _player = (PlayerInstance) creature;
final WorldObject[] targetList = skill.getTargetList(creature); final List<Creature> targetList = skill.getTargetList(creature);
final InventoryUpdate iu = Config.FORCE_INVENTORY_UPDATE ? null : new InventoryUpdate(); final InventoryUpdate iu = Config.FORCE_INVENTORY_UPDATE ? null : new InventoryUpdate();
if (targetList == null) if (targetList == null)
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.handler.SkillHandler; import org.l2jmobius.gameserver.handler.SkillHandler;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
@ -43,7 +45,7 @@ public class Heal implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
PlayerInstance player = null; PlayerInstance player = null;
if (creature instanceof PlayerInstance) if (creature instanceof PlayerInstance)

View File

@ -16,10 +16,11 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.skills.Stat; import org.l2jmobius.gameserver.model.skills.Stat;
@ -37,9 +38,9 @@ public class ManaHeal implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature actChar, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if ((target == null) || target.isDead() || target.isInvul()) if ((target == null) || target.isDead() || target.isInvul())
{ {
@ -62,10 +63,10 @@ public class ManaHeal implements ISkillHandler
sump.addAttribute(StatusUpdate.CUR_MP, (int) target.getCurrentMp()); sump.addAttribute(StatusUpdate.CUR_MP, (int) target.getCurrentMp());
target.sendPacket(sump); target.sendPacket(sump);
if ((actChar instanceof PlayerInstance) && (actChar != target)) if ((creature instanceof PlayerInstance) && (creature != target))
{ {
final SystemMessage sm = new SystemMessage(SystemMessageId.S2_MP_HAS_BEEN_RESTORED_BY_S1); final SystemMessage sm = new SystemMessage(SystemMessageId.S2_MP_HAS_BEEN_RESTORED_BY_S1);
sm.addString(actChar.getName()); sm.addString(creature.getName());
sm.addNumber((int) mp); sm.addNumber((int) mp);
target.sendPacket(sm); target.sendPacket(sm);
} }
@ -79,20 +80,20 @@ public class ManaHeal implements ISkillHandler
if (skill.isMagic() && skill.useSpiritShot()) if (skill.isMagic() && skill.useSpiritShot())
{ {
if (actChar.checkBss()) if (creature.checkBss())
{ {
actChar.removeBss(); creature.removeBss();
} }
if (actChar.checkSps()) if (creature.checkSps())
{ {
actChar.removeSps(); creature.removeSps();
} }
} }
else if (skill.useSoulShot()) else if (skill.useSoulShot())
{ {
if (actChar.checkSs()) if (creature.checkSs())
{ {
actChar.removeSs(); creature.removeSs();
} }
} }
} }

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
@ -41,7 +43,7 @@ public class Manadam implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
Creature target = null; Creature target = null;
if (creature.isAlikeDead()) if (creature.isAlikeDead())

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Effect; import org.l2jmobius.gameserver.model.Effect;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -37,7 +39,7 @@ public class Mdam implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (creature.isAlikeDead()) if (creature.isAlikeDead())
{ {

View File

@ -50,7 +50,7 @@ public class Pdam implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (creature.isAlikeDead()) if (creature.isAlikeDead())
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
@ -40,7 +42,7 @@ public class Recall implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
try try
{ {

View File

@ -39,7 +39,7 @@ public class Resurrect implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
PlayerInstance player = null; PlayerInstance player = null;
if (creature instanceof PlayerInstance) if (creature instanceof PlayerInstance)

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
@ -25,7 +27,6 @@ import org.l2jmobius.gameserver.instancemanager.IdManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.actor.instance.SiegeFlagInstance; import org.l2jmobius.gameserver.model.actor.instance.SiegeFlagInstance;
@ -44,7 +45,7 @@ public class SiegeFlag implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
@ -24,7 +25,6 @@ import org.l2jmobius.gameserver.datatables.xml.ManorSeedData;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance; import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -50,7 +50,7 @@ public class Sow implements ISkillHandler
private int _seedId; private int _seedId;
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {
@ -59,20 +59,21 @@ public class Sow implements ISkillHandler
_player = (PlayerInstance) creature; _player = (PlayerInstance) creature;
final WorldObject[] targetList = skill.getTargetList(creature); final List<Creature> targetList = skill.getTargetList(creature);
if (targetList == null) if (targetList == null)
{ {
return; return;
} }
for (int index = 0; index < targetList.length; index++) for (@SuppressWarnings("unused")
Creature element : targetList)
{ {
if (!(targetList[0] instanceof MonsterInstance)) if (!(targetList.get(0) instanceof MonsterInstance))
{ {
continue; continue;
} }
_target = (MonsterInstance) targetList[0]; _target = (MonsterInstance) targetList.get(0);
if (_target.isSeeded()) if (_target.isSeeded())
{ {
_player.sendPacket(ActionFailed.STATIC_PACKET); _player.sendPacket(ActionFailed.STATIC_PACKET);
@ -104,6 +105,7 @@ public class Sow implements ISkillHandler
_player.sendPacket(ActionFailed.STATIC_PACKET); _player.sendPacket(ActionFailed.STATIC_PACKET);
break; break;
} }
// Consuming used seed // Consuming used seed
_player.destroyItem("Consume", item.getObjectId(), 1, null, false); _player.destroyItem("Consume", item.getObjectId(), 1, null, false);
SystemMessage sm = null; SystemMessage sm = null;
@ -126,7 +128,8 @@ public class Sow implements ISkillHandler
{ {
_player.getParty().broadcastToPartyMembers(sm); _player.getParty().broadcastToPartyMembers(sm);
} }
// TODO: Mob should not agro on player, this way doesn't work really nice
// TODO: Mob should not aggro on player, this way doesn't work really nice
_target.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); _target.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
} }
} }

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.ai.CtrlEvent; import org.l2jmobius.gameserver.ai.CtrlEvent;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -39,7 +41,7 @@ public class Spoil implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
@ -43,7 +45,7 @@ public class StrSiegeAssault implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -41,7 +43,7 @@ public class SummonFriend implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,13 +16,13 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -38,7 +38,7 @@ public class SummonTreasureKey implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -41,7 +43,7 @@ public class Sweep implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,12 +16,13 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance; import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -40,7 +41,7 @@ public class TakeCastle implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {
@ -77,9 +78,9 @@ public class TakeCastle implements ISkillHandler
try try
{ {
if ((castle != null) && (targets[0] instanceof ArtefactInstance)) if ((castle != null) && (targets.get(0) instanceof ArtefactInstance))
{ {
castle.Engrave(player.getClan(), targets[0].getObjectId()); castle.Engrave(player.getClan(), targets.get(0).getObjectId());
} }
else if (fort != null) else if (fort != null)
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
@ -39,9 +41,9 @@ public class Unlock implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
final WorldObject[] targetList = skill.getTargetList(creature); final List<Creature> targetList = skill.getTargetList(creature);
if (targetList == null) if (targetList == null)
{ {
return; return;

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -31,7 +33,7 @@ public class ZakenPlayer implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
try try
{ {
@ -41,59 +43,75 @@ public class ZakenPlayer implements ISkillHandler
{ {
continue; continue;
} }
final Creature target = (Creature) target1; final Creature target = (Creature) target1;
final int ch = (Rnd.get(14) + 1); switch (Rnd.get(14) + 1)
if (ch == 1)
{ {
target.teleToLocation(55299, 219120, -2952, true); case 1:
} {
else if (ch == 2) target.teleToLocation(55299, 219120, -2952, true);
{ break;
target.teleToLocation(56363, 218043, -2952, true); }
} case 2:
else if (ch == 3) {
{ target.teleToLocation(56363, 218043, -2952, true);
target.teleToLocation(54245, 220162, -2952, true); break;
} }
else if (ch == 4) case 3:
{ {
target.teleToLocation(56289, 220126, -2952, true); target.teleToLocation(54245, 220162, -2952, true);
} break;
else if (ch == 5) }
{ case 4:
target.teleToLocation(55299, 219120, -3224, true); {
} target.teleToLocation(56289, 220126, -2952, true);
else if (ch == 6) break;
{ }
target.teleToLocation(56363, 218043, -3224, true); case 5:
} {
else if (ch == 7) target.teleToLocation(55299, 219120, -3224, true);
{ break;
target.teleToLocation(54245, 220162, -3224, true); }
} case 6:
else if (ch == 8) {
{ target.teleToLocation(56363, 218043, -3224, true);
target.teleToLocation(56289, 220126, -3224, true); break;
} }
else if (ch == 9) case 7:
{ {
target.teleToLocation(55299, 219120, -3496, true); target.teleToLocation(54245, 220162, -3224, true);
} break;
else if (ch == 10) }
{ case 8:
target.teleToLocation(56363, 218043, -3496, true); {
} target.teleToLocation(56289, 220126, -3224, true);
else if (ch == 11) break;
{ }
target.teleToLocation(54245, 220162, -3496, true); case 9:
} {
else if (ch == 12) target.teleToLocation(55299, 219120, -3496, true);
{ break;
target.teleToLocation(56289, 220126, -3496, true); }
} case 10:
else {
{ target.teleToLocation(56363, 218043, -3496, true);
target.teleToLocation(53930, 217760, -2944, true); break;
}
case 11:
{
target.teleToLocation(54245, 220162, -3496, true);
break;
}
case 12:
{
target.teleToLocation(56289, 220126, -3496, true);
break;
}
default:
{
target.teleToLocation(53930, 217760, -2944, true);
break;
}
} }
} }
} }

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -31,7 +33,7 @@ public class ZakenSelf implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
try try
{ {
@ -41,59 +43,75 @@ public class ZakenSelf implements ISkillHandler
{ {
continue; continue;
} }
final Creature target = (Creature) target1; final Creature target = (Creature) target1;
final int ch = (Rnd.get(14) + 1); switch (Rnd.get(14) + 1)
if (ch == 1)
{ {
target.teleToLocation(55299, 219120, -2952, true); case 1:
} {
else if (ch == 2) target.teleToLocation(55299, 219120, -2952, true);
{ break;
target.teleToLocation(56363, 218043, -2952, true); }
} case 2:
else if (ch == 3) {
{ target.teleToLocation(56363, 218043, -2952, true);
target.teleToLocation(54245, 220162, -2952, true); break;
} }
else if (ch == 4) case 3:
{ {
target.teleToLocation(56289, 220126, -2952, true); target.teleToLocation(54245, 220162, -2952, true);
} break;
else if (ch == 5) }
{ case 4:
target.teleToLocation(55299, 219120, -3224, true); {
} target.teleToLocation(56289, 220126, -2952, true);
else if (ch == 6) break;
{ }
target.teleToLocation(56363, 218043, -3224, true); case 5:
} {
else if (ch == 7) target.teleToLocation(55299, 219120, -3224, true);
{ break;
target.teleToLocation(54245, 220162, -3224, true); }
} case 6:
else if (ch == 8) {
{ target.teleToLocation(56363, 218043, -3224, true);
target.teleToLocation(56289, 220126, -3224, true); break;
} }
else if (ch == 9) case 7:
{ {
target.teleToLocation(55299, 219120, -3496, true); target.teleToLocation(54245, 220162, -3224, true);
} break;
else if (ch == 10) }
{ case 8:
target.teleToLocation(56363, 218043, -3496, true); {
} target.teleToLocation(56289, 220126, -3224, true);
else if (ch == 11) break;
{ }
target.teleToLocation(54245, 220162, -3496, true); case 9:
} {
else if (ch == 12) target.teleToLocation(55299, 219120, -3496, true);
{ break;
target.teleToLocation(56289, 220126, -3496, true); }
} case 10:
else {
{ target.teleToLocation(56363, 218043, -3496, true);
target.teleToLocation(53930, 217760, -2944, true); break;
}
case 11:
{
target.teleToLocation(54245, 220162, -3496, true);
break;
}
case 12:
{
target.teleToLocation(56289, 220126, -3496, true);
break;
}
default:
{
target.teleToLocation(53930, 217760, -2944, true);
break;
}
} }
} }
} }

View File

@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model; package org.l2jmobius.gameserver.model;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
@ -156,9 +157,9 @@ public class ChanceSkillList extends ConcurrentHashMap<Skill, ChanceCondition>
} }
final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(castedSkill.getSkillType()); final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(castedSkill.getSkillType());
final WorldObject[] targets = castedSkill.getTargetList(_owner, false, target); final List<Creature> targets = castedSkill.getTargetList(_owner, false, target);
_owner.broadcastPacket(new MagicSkillLaunched(_owner, castedSkill.getDisplayId(), castedSkill.getLevel(), targets)); _owner.broadcastPacket(new MagicSkillLaunched(_owner, castedSkill.getDisplayId(), castedSkill.getLevel(), targets));
_owner.broadcastPacket(new MagicSkillUse(_owner, (Creature) targets[0], castedSkill.getDisplayId(), castedSkill.getLevel(), 0, 0)); _owner.broadcastPacket(new MagicSkillUse(_owner, targets.get(0), castedSkill.getDisplayId(), castedSkill.getLevel(), 0, 0));
// Launch the magic skill and calculate its effects // Launch the magic skill and calculate its effects
if (handler != null) if (handler != null)

View File

@ -648,7 +648,7 @@ public abstract class Skill
_isDebuff = set.getBoolean("isDebuff", false); _isDebuff = set.getBoolean("isDebuff", false);
} }
public abstract void useSkill(Creature caster, WorldObject[] targets); public abstract void useSkill(Creature caster, List<Creature> targets);
public boolean isSingleEffect() public boolean isSingleEffect()
{ {
@ -1373,7 +1373,7 @@ public abstract class Skill
return true; return true;
} }
public WorldObject[] getTargetList(Creature creature, boolean onlyFirst) public List<Creature> getTargetList(Creature creature, boolean onlyFirst)
{ {
// Init to null the target of the skill // Init to null the target of the skill
Creature target = null; Creature target = null;
@ -1408,7 +1408,7 @@ public abstract class Skill
* @param targetCreature * @param targetCreature
* @return * @return
*/ */
public WorldObject[] getTargetList(Creature creature, boolean onlyFirst, Creature targetCreature) public List<Creature> getTargetList(Creature creature, boolean onlyFirst, Creature targetCreature)
{ {
// to avoid attacks during oly start period // to avoid attacks during oly start period
if ((creature instanceof PlayerInstance) && _isOffensive && (((PlayerInstance) creature).isInOlympiadMode() && !((PlayerInstance) creature).isOlympiadStart())) if ((creature instanceof PlayerInstance) && _isOffensive && (((PlayerInstance) creature).isInOlympiadMode() && !((PlayerInstance) creature).isOlympiadStart()))
@ -1420,10 +1420,8 @@ public abstract class Skill
final List<Creature> targetList = new ArrayList<>(); final List<Creature> targetList = new ArrayList<>();
if (_ispotion) if (_ispotion)
{ {
return new Creature[] targetList.add(creature);
{ return targetList;
creature
};
} }
Creature target = targetCreature; Creature target = targetCreature;
@ -1528,27 +1526,21 @@ public abstract class Skill
} }
// If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT // If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
case TARGET_SELF: case TARGET_SELF:
case TARGET_GROUND: case TARGET_GROUND:
{ {
return new Creature[] targetList.add(creature);
{ return targetList;
creature
};
} }
case TARGET_HOLY: case TARGET_HOLY:
{ {
if ((creature instanceof PlayerInstance) && (creature.getTarget() instanceof ArtefactInstance)) if ((creature instanceof PlayerInstance) && (creature.getTarget() instanceof ArtefactInstance))
{ {
return new Creature[] targetList.add((ArtefactInstance) creature.getTarget());
{ return targetList;
(ArtefactInstance) creature.getTarget()
};
} }
return null; return null;
} }
@ -1558,10 +1550,8 @@ public abstract class Skill
target = creature.getPet(); target = creature.getPet();
if ((target != null) && !target.isDead()) if ((target != null) && !target.isDead())
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
return null; return null;
} }
@ -1572,10 +1562,8 @@ public abstract class Skill
target = ((Summon) creature).getOwner(); target = ((Summon) creature).getOwner();
if ((target != null) && !target.isDead()) if ((target != null) && !target.isDead())
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
} }
return null; return null;
@ -1587,10 +1575,8 @@ public abstract class Skill
target = creature.getPet(); target = creature.getPet();
if ((target != null) && target.isDead()) if ((target != null) && target.isDead())
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
} }
return null; return null;
@ -1694,19 +1680,14 @@ public abstract class Skill
{ {
continue; continue;
} }
if (!onlyFirst)
targetList.add(nearby);
if (onlyFirst)
{ {
targetList.add(nearby); return targetList;
}
else
{
return new Creature[]
{
nearby
};
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_AREA: case TARGET_AREA:
{ {
@ -1717,27 +1698,22 @@ public abstract class Skill
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
} }
Creature cha; Creature cha;
if (_castRange >= 0) if (_castRange >= 0)
{ {
cha = target; cha = target;
if (!onlyFirst) targetList.add(cha);
if (onlyFirst)
{ {
targetList.add(cha); // Add target to target list return targetList;
}
else
{
return new Creature[]
{
cha
};
} }
} }
else else
{ {
cha = creature; cha = creature;
} }
final boolean effectOriginIsPlayableInstance = cha instanceof Playable;
PlayerInstance src = null; PlayerInstance src = null;
if (creature instanceof PlayerInstance) if (creature instanceof PlayerInstance)
{ {
@ -1747,6 +1723,7 @@ public abstract class Skill
{ {
src = ((Summon) creature).getOwner(); src = ((Summon) creature).getOwner();
} }
final int radius = _skillRadius; final int radius = _skillRadius;
final boolean srcInArena = creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE); final boolean srcInArena = creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE);
for (WorldObject obj : creature.getKnownList().getKnownObjects().values()) for (WorldObject obj : creature.getKnownList().getKnownObjects().values())
@ -1767,22 +1744,24 @@ public abstract class Skill
{ {
continue; continue;
} }
if (_isOffensive && Creature.isInsidePeaceZone(creature, obj))
{
continue;
}
if (!GeoEngine.getInstance().canSeeTarget(creature, obj))
{
continue;
}
target = (Creature) obj; target = (Creature) obj;
if (!GeoEngine.getInstance().canSeeTarget(creature, target))
{
continue;
}
if (_isOffensive && Creature.isInsidePeaceZone(creature, target))
{
continue;
}
if (!target.isAlikeDead() && (target != creature)) if (!target.isAlikeDead() && (target != creature))
{ {
if (!Util.checkIfInRange(radius, obj, cha, true)) if (!Util.checkIfInRange(radius, obj, cha, true))
{ {
continue; continue;
} }
if (src != null) // caster is l2playableinstance and exists
if (src != null) // caster is a playable instance and exists
{ {
// check for Events // check for Events
if (obj instanceof PlayerInstance) if (obj instanceof PlayerInstance)
@ -1813,6 +1792,13 @@ public abstract class Skill
continue; continue;
} }
} }
// Summon AOE skills should not target non attackable players.
if (obj.isPlayable() && !creature.isPlayer() && !obj.isAutoAttackable(creature))
{
continue;
}
if (obj instanceof PlayerInstance) if (obj instanceof PlayerInstance)
{ {
final PlayerInstance trg = (PlayerInstance) obj; final PlayerInstance trg = (PlayerInstance) obj;
@ -1844,7 +1830,7 @@ public abstract class Skill
} }
} }
} }
if (obj instanceof Summon) else if (obj instanceof Summon)
{ {
final PlayerInstance trg = ((Summon) obj).getOwner(); final PlayerInstance trg = ((Summon) obj).getOwner();
if (trg == null) if (trg == null)
@ -1876,11 +1862,7 @@ public abstract class Skill
} }
} }
} }
else if (effectOriginIsPlayableInstance && // If effect starts at PlayableInstance and
!(obj instanceof Playable))
{
continue;
}
targetList.add((Creature) obj); targetList.add((Creature) obj);
} }
} }
@ -1888,7 +1870,7 @@ public abstract class Skill
{ {
return null; return null;
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_MULTIFACE: case TARGET_MULTIFACE:
{ {
@ -1897,17 +1879,13 @@ public abstract class Skill
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
} }
if (!onlyFirst)
targetList.add(target);
if (onlyFirst)
{ {
targetList.add(target); return targetList;
}
else
{
return new Creature[]
{
target
};
} }
final int radius = _skillRadius; final int radius = _skillRadius;
PlayerInstance src = null; PlayerInstance src = null;
if (creature instanceof PlayerInstance) if (creature instanceof PlayerInstance)
@ -1970,26 +1948,22 @@ public abstract class Skill
return null; return null;
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
// TODO multiface targets all around right now. need it to just get targets the character is facing. // TODO multiface targets all around right now. need it to just get targets the character is facing.
} }
case TARGET_PARTY: case TARGET_PARTY:
{ {
targetList.add(creature);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
creature
};
} }
targetList.add(creature);
final PlayerInstance player = creature.getActingPlayer(); final PlayerInstance player = creature.getActingPlayer();
if (player == null) if (player == null)
{ {
return new Creature[] targetList.add(creature);
{ return targetList;
creature
};
} }
if (creature instanceof Summon) if (creature instanceof Summon)
{ {
@ -2059,17 +2033,15 @@ public abstract class Skill
} }
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_PARTY_MEMBER: case TARGET_PARTY_MEMBER:
{ {
if ((target != null) && !target.isDead() && ((target == creature) || ((creature.getParty() != null) && (target.getParty() != null) && (creature.getParty().getPartyLeaderOID() == target.getParty().getPartyLeaderOID())) || (creature.getPet() == target) || (creature == target.getPet()))) if ((target != null) && !target.isDead() && ((target == creature) || ((creature.getParty() != null) && (target.getParty() != null) && (creature.getParty().getPartyLeaderOID() == target.getParty().getPartyLeaderOID())) || (creature.getPet() == target) || (creature == target.getPet())))
{ {
// If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT // If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
@ -2079,10 +2051,8 @@ public abstract class Skill
if ((target != creature) && (target != null) && !target.isDead() && (creature.getParty() != null) && (target.getParty() != null) && (creature.getParty().getPartyLeaderOID() == target.getParty().getPartyLeaderOID())) if ((target != creature) && (target != null) && !target.isDead() && (creature.getParty() != null) && (target.getParty() != null) && (creature.getParty().getPartyLeaderOID() == target.getParty().getPartyLeaderOID()))
{ {
// If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT // If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
@ -2098,22 +2068,15 @@ public abstract class Skill
if (_targetType != SkillTargetType.TARGET_CORPSE_ALLY) // if corpose, the caster is not included if (_targetType != SkillTargetType.TARGET_CORPSE_ALLY) // if corpose, the caster is not included
{ {
if (player.isInOlympiadMode()) if (player.isInOlympiadMode())
{
return new Creature[]
{
player
};
}
if (!onlyFirst)
{ {
targetList.add(player); targetList.add(player);
return targetList;
} }
else
targetList.add(player);
if (onlyFirst)
{ {
return new Creature[] return targetList;
{
player
};
} }
} }
PlayerInstance src = null; PlayerInstance src = null;
@ -2191,21 +2154,16 @@ public abstract class Skill
{ {
continue; continue;
} }
if (!onlyFirst)
targetList.add((Creature) newTarget);
if (onlyFirst)
{ {
targetList.add((Creature) newTarget); return targetList;
}
else
{
return new Creature[]
{
(Creature) newTarget
};
} }
} }
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_CORPSE_CLAN: case TARGET_CORPSE_CLAN:
case TARGET_CLAN: case TARGET_CLAN:
@ -2218,22 +2176,15 @@ public abstract class Skill
if (_targetType != SkillTargetType.TARGET_CORPSE_CLAN) if (_targetType != SkillTargetType.TARGET_CORPSE_CLAN)
{ {
if (player.isInOlympiadMode()) if (player.isInOlympiadMode())
{
return new Creature[]
{
player
};
}
if (!onlyFirst)
{ {
targetList.add(player); targetList.add(player);
return targetList;
} }
else
targetList.add(player);
if (onlyFirst)
{ {
return new Creature[] return targetList;
{
player
};
} }
} }
if (clan != null) if (clan != null)
@ -2286,16 +2237,11 @@ public abstract class Skill
{ {
continue; continue;
} }
if (!onlyFirst)
targetList.add(newTarget);
if (onlyFirst)
{ {
targetList.add(newTarget); return targetList;
}
else
{
return new Creature[]
{
newTarget
};
} }
} }
} }
@ -2306,10 +2252,8 @@ public abstract class Skill
final NpcInstance npc = (NpcInstance) creature; final NpcInstance npc = (NpcInstance) creature;
if ((npc.getFactionId() == null) || npc.getFactionId().isEmpty()) if ((npc.getFactionId() == null) || npc.getFactionId().isEmpty())
{ {
return new Creature[] targetList.add(creature);
{ return targetList;
creature
};
} }
targetList.add(creature); targetList.add(creature);
final Collection<WorldObject> objs = creature.getKnownList().getKnownObjects().values(); final Collection<WorldObject> objs = creature.getKnownList().getKnownObjects().values();
@ -2328,7 +2272,7 @@ public abstract class Skill
} }
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_CORPSE_PLAYER: case TARGET_CORPSE_PLAYER:
{ {
@ -2386,15 +2330,8 @@ public abstract class Skill
} }
if (condGood) if (condGood)
{ {
if (!onlyFirst) targetList.add(target);
{ return targetList;
targetList.add(target);
return targetList.toArray(new WorldObject[targetList.size()]);
}
return new Creature[]
{
target
};
} }
} }
} }
@ -2408,15 +2345,9 @@ public abstract class Skill
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
} }
if (!onlyFirst)
{ targetList.add(target);
targetList.add(target); return targetList;
return targetList.toArray(new WorldObject[targetList.size()]);
}
return new Creature[]
{
target
};
} }
case TARGET_AREA_CORPSE_MOB: case TARGET_AREA_CORPSE_MOB:
{ {
@ -2425,17 +2356,13 @@ public abstract class Skill
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
} }
if (!onlyFirst)
targetList.add(target);
if (onlyFirst)
{ {
targetList.add(target); return targetList;
}
else
{
return new Creature[]
{
target
};
} }
final boolean srcInArena = creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE); final boolean srcInArena = creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE);
PlayerInstance src = null; PlayerInstance src = null;
if (creature instanceof PlayerInstance) if (creature instanceof PlayerInstance)
@ -2536,7 +2463,7 @@ public abstract class Skill
{ {
return null; return null;
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_UNLOCKABLE: case TARGET_UNLOCKABLE:
{ {
@ -2546,15 +2473,9 @@ public abstract class Skill
creature.sendPacket(new SystemMessage(SystemMessageId.INVALID_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.INVALID_TARGET));
return null; return null;
} }
if (!onlyFirst)
{ targetList.add(target);
targetList.add(target); return targetList;
return targetList.toArray(new WorldObject[targetList.size()]);
}
return new Creature[]
{
target
};
} }
case TARGET_ITEM: case TARGET_ITEM:
{ {
@ -2570,18 +2491,9 @@ public abstract class Skill
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
} }
if (!onlyFirst)
{ targetList.add(target);
targetList.add(target); return targetList;
}
else
{
return new Creature[]
{
target
};
}
return targetList.toArray(new WorldObject[targetList.size()]);
} }
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
@ -2593,16 +2505,10 @@ public abstract class Skill
if ((_castRange >= 0) && ((target instanceof NpcInstance) || (target instanceof SummonInstance)) && target.isUndead() && !target.isAlikeDead()) if ((_castRange >= 0) && ((target instanceof NpcInstance) || (target instanceof SummonInstance)) && target.isUndead() && !target.isAlikeDead())
{ {
cha = target; cha = target;
if (!onlyFirst) targetList.add(cha);
if (onlyFirst)
{ {
targetList.add(cha); // Add target to target list return targetList;
}
else
{
return new Creature[]
{
cha
};
} }
} }
else else
@ -2643,16 +2549,11 @@ public abstract class Skill
{ {
continue; continue;
} }
if (!onlyFirst)
targetList.add((Creature) obj);
if (onlyFirst)
{ {
targetList.add((Creature) obj); // Add obj to target lists return targetList;
}
else
{
return new Creature[]
{
(Creature) obj
};
} }
} }
} }
@ -2661,7 +2562,7 @@ public abstract class Skill
{ {
return null; return null;
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_ENEMY_SUMMON: case TARGET_ENEMY_SUMMON:
{ {
@ -2670,10 +2571,8 @@ public abstract class Skill
final Summon targetSummon = (Summon) target; final Summon targetSummon = (Summon) target;
if (((creature instanceof PlayerInstance) && (creature.getPet() != targetSummon) && !targetSummon.isDead() && ((targetSummon.getOwner().getPvpFlag() != 0) || (targetSummon.getOwner().getKarma() > 0))) || (targetSummon.getOwner().isInsideZone(ZoneId.PVP) && ((PlayerInstance) creature).isInsideZone(ZoneId.PVP))) if (((creature instanceof PlayerInstance) && (creature.getPet() != targetSummon) && !targetSummon.isDead() && ((targetSummon.getOwner().getPvpFlag() != 0) || (targetSummon.getOwner().getKarma() > 0))) || (targetSummon.getOwner().isInsideZone(ZoneId.PVP) && ((PlayerInstance) creature).isInsideZone(ZoneId.PVP)))
{ {
return new Creature[] targetList.add(targetSummon);
{ return targetList;
targetSummon
};
} }
} }
return null; return null;
@ -2682,10 +2581,8 @@ public abstract class Skill
{ {
if ((target != null) && !target.isDead() && ((target instanceof DoorInstance) || (target instanceof ControlTowerInstance))) if ((target != null) && !target.isDead() && ((target instanceof DoorInstance) || (target instanceof ControlTowerInstance)))
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
return null; return null;
} }
@ -2698,10 +2595,8 @@ public abstract class Skill
} }
if ((target instanceof MonsterInstance) && ((((MonsterInstance) target).getNpcId() == 22217) || (((MonsterInstance) target).getNpcId() == 22216) || (((MonsterInstance) target).getNpcId() == 22215))) if ((target instanceof MonsterInstance) && ((((MonsterInstance) target).getNpcId() == 22217) || (((MonsterInstance) target).getNpcId() == 22216) || (((MonsterInstance) target).getNpcId() == 22215)))
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
return null; return null;
} }
@ -2709,10 +2604,8 @@ public abstract class Skill
{ {
if ((target != null) && target.isDead()) if ((target != null) && target.isDead())
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
return null; return null;
} }
@ -2725,10 +2618,8 @@ public abstract class Skill
final NpcInstance npc = (NpcInstance) creature; final NpcInstance npc = (NpcInstance) creature;
if ((npc.getFactionId() == null) || npc.getFactionId().isEmpty()) if ((npc.getFactionId() == null) || npc.getFactionId().isEmpty())
{ {
return new Creature[] targetList.add(creature);
{ return targetList;
creature
};
} }
final Collection<WorldObject> objs = creature.getKnownList().getKnownObjects().values(); final Collection<WorldObject> objs = creature.getKnownList().getKnownObjects().values();
for (WorldObject newTarget : objs) for (WorldObject newTarget : objs)
@ -2762,20 +2653,19 @@ public abstract class Skill
} }
} }
public WorldObject[] getTargetList(Creature creature) public List<Creature> getTargetList(Creature creature)
{ {
return getTargetList(creature, false); return getTargetList(creature, false);
} }
public WorldObject getFirstOfTargetList(Creature creature) public WorldObject getFirstOfTargetList(Creature creature)
{ {
WorldObject[] targets; final List<Creature> targets = getTargetList(creature, true);
targets = getTargetList(creature, true); if ((targets == null) || (targets.isEmpty()))
if ((targets == null) || (targets.length == 0))
{ {
return null; return null;
} }
return targets[0]; return targets.get(0);
} }
public Func[] getStatFuncs(Effect effect, Creature creature) public Func[] getStatFuncs(Effect effect, Creature creature)

View File

@ -1500,21 +1500,21 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
} }
// Get all possible targets of the skill in a table in function of the skill target type // Get all possible targets of the skill in a table in function of the skill target type
final WorldObject[] targets = skill.getTargetList(creature); final List<Creature> targets = skill.getTargetList(creature);
// Set the target of the skill in function of Skill Type and Target Type // Set the target of the skill in function of Skill Type and Target Type
Creature target = null; Creature target = null;
if ((skill.getTargetType() == SkillTargetType.TARGET_AURA) || (skill.getTargetType() == SkillTargetType.TARGET_GROUND) || skill.isPotion()) if ((skill.getTargetType() == SkillTargetType.TARGET_AURA) || (skill.getTargetType() == SkillTargetType.TARGET_GROUND) || skill.isPotion())
{ {
target = this; target = this;
} }
else if ((targets == null) || (targets.length == 0)) else if ((targets == null) || targets.isEmpty())
{ {
getAI().notifyEvent(CtrlEvent.EVT_CANCEL); getAI().notifyEvent(CtrlEvent.EVT_CANCEL);
return; return;
} }
else if (((skill.getSkillType() == SkillType.BUFF) || (skill.getSkillType() == SkillType.HEAL) || (skill.getSkillType() == SkillType.COMBATPOINTHEAL) || (skill.getSkillType() == SkillType.COMBATPOINTPERCENTHEAL) || (skill.getSkillType() == SkillType.MANAHEAL) || (skill.getSkillType() == SkillType.REFLECT) || (skill.getSkillType() == SkillType.SEED) || (skill.getTargetType() == SkillTargetType.TARGET_SELF) || (skill.getTargetType() == SkillTargetType.TARGET_PET) || (skill.getTargetType() == SkillTargetType.TARGET_PARTY) || (skill.getTargetType() == SkillTargetType.TARGET_CLAN) || (skill.getTargetType() == SkillTargetType.TARGET_ALLY)) && !skill.isPotion()) else if (((skill.getSkillType() == SkillType.BUFF) || (skill.getSkillType() == SkillType.HEAL) || (skill.getSkillType() == SkillType.COMBATPOINTHEAL) || (skill.getSkillType() == SkillType.COMBATPOINTPERCENTHEAL) || (skill.getSkillType() == SkillType.MANAHEAL) || (skill.getSkillType() == SkillType.REFLECT) || (skill.getSkillType() == SkillType.SEED) || (skill.getTargetType() == SkillTargetType.TARGET_SELF) || (skill.getTargetType() == SkillTargetType.TARGET_PET) || (skill.getTargetType() == SkillTargetType.TARGET_PARTY) || (skill.getTargetType() == SkillTargetType.TARGET_CLAN) || (skill.getTargetType() == SkillTargetType.TARGET_ALLY)) && !skill.isPotion())
{ {
target = (Creature) targets[0]; target = targets.get(0);
} }
else else
{ {
@ -2910,7 +2910,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
class MagicUseTask implements Runnable class MagicUseTask implements Runnable
{ {
WorldObject[] _targets; List<Creature> _targets;
Skill _skill; Skill _skill;
int _coolTime; int _coolTime;
int _phase; int _phase;
@ -2922,7 +2922,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* @param coolTime the cool time * @param coolTime the cool time
* @param phase the phase * @param phase the phase
*/ */
public MagicUseTask(WorldObject[] targets, Skill skill, int coolTime, int phase) public MagicUseTask(List<Creature> targets, Skill skill, int coolTime, int phase)
{ {
_targets = targets; _targets = targets;
_skill = skill; _skill = skill;
@ -7261,9 +7261,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* @param coolTime the cool time * @param coolTime the cool time
* @param instant the instant * @param instant the instant
*/ */
public void onMagicLaunchedTimer(WorldObject[] targets, Skill skill, int coolTime, boolean instant) public void onMagicLaunchedTimer(List<Creature> targets, Skill skill, int coolTime, boolean instant)
{ {
if ((skill == null) || (((targets == null) || (targets.length <= 0)) && (skill.getTargetType() != SkillTargetType.TARGET_AURA))) if ((skill == null) || (((targets == null) || targets.isEmpty()) && (skill.getTargetType() != SkillTargetType.TARGET_AURA)))
{ {
_skillCast = null; _skillCast = null;
enableAllSkills(); enableAllSkills();
@ -7282,22 +7282,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
escapeRange = skill.getSkillRadius(); escapeRange = skill.getSkillRadius();
} }
WorldObject[] finalTargets = null; List<Creature> finalTargets = null;
int skipped = 0; int skipped = 0;
if (escapeRange > 0) if (escapeRange > 0)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<Creature> targetList = new ArrayList<>();
for (int i = 0; (targets != null) && (i < targets.length); i++) if (targets != null)
{ {
if (targets[i] instanceof Creature) for (Creature target : targets)
{ {
if (!Util.checkIfInRange(escapeRange, this, targets[i], true)) if (!Util.checkIfInRange(escapeRange, this, target, true))
{ {
continue; continue;
} }
// Check if the target is behind a wall // Check if the target is behind a wall
if ((skill.getSkillRadius() > 0) && skill.isOffensive() && Config.PATHFINDING && !GeoEngine.getInstance().canSeeTarget(this, targets[i])) if ((skill.getSkillRadius() > 0) && skill.isOffensive() && Config.PATHFINDING && !GeoEngine.getInstance().canSeeTarget(this, target))
{ {
skipped++; skipped++;
continue; continue;
@ -7307,19 +7307,20 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
{ {
if (this instanceof PlayerInstance) if (this instanceof PlayerInstance)
{ {
if (((Creature) targets[i]).isInsidePeaceZone((PlayerInstance) this)) if (target.isInsidePeaceZone((PlayerInstance) this))
{ {
continue; continue;
} }
} }
else if (isInsidePeaceZone(this, targets[i])) else if (isInsidePeaceZone(this, target))
{ {
continue; continue;
} }
} }
targetList.add((Creature) targets[i]); targetList.add(target);
} }
} }
if (targetList.isEmpty() && (skill.getTargetType() != SkillTargetType.TARGET_AURA)) if (targetList.isEmpty() && (skill.getTargetType() != SkillTargetType.TARGET_AURA))
{ {
if (this instanceof PlayerInstance) if (this instanceof PlayerInstance)
@ -7333,7 +7334,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
abortCast(); abortCast();
return; return;
} }
finalTargets = targetList.toArray(new Creature[targetList.size()]); finalTargets = targetList;
} }
else else
{ {
@ -7389,9 +7390,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* @param coolTime the cool time * @param coolTime the cool time
* @param instant the instant * @param instant the instant
*/ */
public void onMagicHitTimer(WorldObject[] targets, Skill skill, int coolTime, boolean instant) public void onMagicHitTimer(List<Creature> targets, Skill skill, int coolTime, boolean instant)
{ {
if ((skill == null) || (((targets == null) || (targets.length <= 0)) && (skill.getTargetType() != SkillTargetType.TARGET_AURA))) if ((skill == null) || (((targets == null) || targets.isEmpty()) && (skill.getTargetType() != SkillTargetType.TARGET_AURA)))
{ {
_skillCast = null; _skillCast = null;
enableAllSkills(); enableAllSkills();
@ -7422,7 +7423,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
mog.exit(true); mog.exit(true);
} }
final WorldObject target = targets == null ? null : targets[0]; final WorldObject target = targets == null ? null : targets.get(0);
if (target != null) if (target != null)
{ {
notifyQuestEventSkillFinished(skill, target); notifyQuestEventSkillFinished(skill, target);
@ -7430,10 +7431,10 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
return; return;
} }
final WorldObject[] targets2 = targets; final List<Creature> targets2 = targets;
try try
{ {
if ((targets2 != null) && (targets2.length != 0)) if ((targets2 != null) && !targets2.isEmpty())
{ {
// Go through targets table // Go through targets table
for (WorldObject target2 : targets2) for (WorldObject target2 : targets2)
@ -7561,7 +7562,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* @param targets the targets * @param targets the targets
* @param skill the skill * @param skill the skill
*/ */
public void onMagicFinalizer(WorldObject[] targets, Skill skill) public void onMagicFinalizer(List<Creature> targets, Skill skill)
{ {
if (skill.isPotion()) if (skill.isPotion())
{ {
@ -7660,7 +7661,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
{ {
try try
{ {
if ((targets != null) && (targets.length > 0)) if (targets != null)
{ {
for (WorldObject target : targets) for (WorldObject target : targets)
{ {
@ -7851,7 +7852,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* @param skill The Skill to use * @param skill The Skill to use
* @param targets The table of WorldObject targets * @param targets The table of WorldObject targets
*/ */
public void callSkill(Skill skill, WorldObject[] targets) public void callSkill(Skill skill, List<Creature> targets)
{ {
try try
{ {
@ -7860,7 +7861,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
return; return;
} }
if ((targets == null) || (targets.length == 0)) if ((targets == null) || targets.isEmpty())
{ {
getAI().notifyEvent(CtrlEvent.EVT_CANCEL); getAI().notifyEvent(CtrlEvent.EVT_CANCEL);
return; return;

View File

@ -573,10 +573,8 @@ public class CubicInstance
final SkillType type = skill.getSkillType(); final SkillType type = skill.getSkillType();
final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getSkillType()); final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getSkillType());
final Creature[] targets = final List<Creature> targets = new ArrayList<>();
{ targets.add(target);
target
};
if ((type == SkillType.PARALYZE) || (type == SkillType.STUN) || (type == SkillType.ROOT) || (type == SkillType.AGGDAMAGE)) if ((type == SkillType.PARALYZE) || (type == SkillType.STUN) || (type == SkillType.ROOT) || (type == SkillType.AGGDAMAGE))
{ {
@ -615,9 +613,9 @@ public class CubicInstance
* @param skill the skill * @param skill the skill
* @param targets the targets * @param targets the targets
*/ */
public void useCubicContinuous(CubicInstance activeCubic, Skill skill, WorldObject[] targets) public void useCubicContinuous(CubicInstance activeCubic, Skill skill, List<Creature> targets)
{ {
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if ((target == null) || target.isDead()) if ((target == null) || target.isDead())
{ {
@ -644,9 +642,9 @@ public class CubicInstance
* @param skill the skill * @param skill the skill
* @param targets the targets * @param targets the targets
*/ */
public void useCubicMdam(CubicInstance activeCubic, Skill skill, WorldObject[] targets) public void useCubicMdam(CubicInstance activeCubic, Skill skill, List<Creature> targets)
{ {
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if (target == null) if (target == null)
{ {
@ -703,9 +701,9 @@ public class CubicInstance
* @param skill the skill * @param skill the skill
* @param targets the targets * @param targets the targets
*/ */
public void useCubicDisabler(SkillType type, CubicInstance activeCubic, Skill skill, WorldObject[] targets) public void useCubicDisabler(SkillType type, CubicInstance activeCubic, Skill skill, List<Creature> targets)
{ {
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if ((target == null) || target.isDead()) if ((target == null) || target.isDead())
{ {
@ -905,10 +903,9 @@ public class CubicInstance
final Creature target = _target; final Creature target = _target;
if ((target != null) && !target.isDead() && ((target.getMaxHp() - target.getCurrentHp()) > skill.getPower())) if ((target != null) && !target.isDead() && ((target.getMaxHp() - target.getCurrentHp()) > skill.getPower()))
{ {
final Creature[] targets = final List<Creature> targets = new ArrayList<>();
{ targets.add(target);
target
};
final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getSkillType()); final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getSkillType());
if (handler != null) if (handler != null)
{ {

View File

@ -18,6 +18,8 @@ package org.l2jmobius.gameserver.model.actor.instance;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.concurrent.ThreadPool;
@ -424,10 +426,8 @@ public class TamedBeastInstance extends FeedableBeastInstance
{ {
final WorldObject oldTarget = owner.getTarget(); final WorldObject oldTarget = owner.getTarget();
owner.setTarget(_tamedBeast); owner.setTarget(_tamedBeast);
final WorldObject[] targets = final List<Creature> targets = new ArrayList<>();
{ targets.add(_tamedBeast);
_tamedBeast
};
// emulate a call to the owner using food, but bypass all checks for range, etc // emulate a call to the owner using food, but bypass all checks for range, etc
// this also causes a call to the AI tasks handling feeding, which may call onReceiveFood as required. // this also causes a call to the AI tasks handling feeding, which may call onReceiveFood as required.

View File

@ -408,8 +408,8 @@ public class Weapon extends Item
{ {
// Get the skill handler corresponding to the skill type // Get the skill handler corresponding to the skill type
final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getSkillType()); final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getSkillType());
final Creature[] targets = new Creature[1]; final List<Creature> targets = new ArrayList<>();
targets[0] = target; targets.add(target);
// Launch the magic skill and calculate its effects // Launch the magic skill and calculate its effects
if (handler != null) if (handler != null)

View File

@ -143,7 +143,7 @@ public class EffectSignetMDam extends Effect
if (!targets.isEmpty()) if (!targets.isEmpty())
{ {
caster.broadcastPacket(new MagicSkillLaunched(caster, getSkill().getDisplayId(), getSkill().getLevel(), targets.toArray(new Creature[targets.size()]))); caster.broadcastPacket(new MagicSkillLaunched(caster, getSkill().getDisplayId(), getSkill().getLevel(), targets));
for (Creature target : targets) for (Creature target : targets)
{ {
final boolean mcrit = Formulas.calcMCrit(caster.getMCriticalHit(target, getSkill())); final boolean mcrit = Formulas.calcMCrit(caster.getMCriticalHit(target, getSkill()));

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.skills.handlers; package org.l2jmobius.gameserver.model.skills.handlers;
import java.util.List;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
@ -51,7 +53,7 @@ public class SkillCharge extends Skill
} }
@Override @Override
public void useSkill(Creature caster, WorldObject[] targets) public void useSkill(Creature caster, List<Creature> targets)
{ {
if (caster.isAlikeDead()) if (caster.isAlikeDead())
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.skills.handlers; package org.l2jmobius.gameserver.model.skills.handlers;
import java.util.List;
import org.l2jmobius.gameserver.model.Effect; import org.l2jmobius.gameserver.model.Effect;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@ -59,7 +61,7 @@ public class SkillChargeDmg extends Skill
} }
@Override @Override
public void useSkill(Creature caster, WorldObject[] targets) public void useSkill(Creature caster, List<Creature> targets)
{ {
if (caster.isAlikeDead()) if (caster.isAlikeDead())
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.skills.handlers; package org.l2jmobius.gameserver.model.skills.handlers;
import java.util.List;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
@ -54,7 +56,7 @@ public class SkillChargeEffect extends Skill
} }
@Override @Override
public void useSkill(Creature creature, WorldObject[] targets) public void useSkill(Creature creature, List<Creature> targets)
{ {
if (creature.isAlikeDead()) if (creature.isAlikeDead())
{ {

View File

@ -16,10 +16,11 @@
*/ */
package org.l2jmobius.gameserver.model.skills.handlers; package org.l2jmobius.gameserver.model.skills.handlers;
import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
/** /**
@ -40,7 +41,7 @@ public class SkillCreateItem extends Skill
} }
@Override @Override
public void useSkill(Creature creature, WorldObject[] targets) public void useSkill(Creature creature, List<Creature> targets)
{ {
if (creature.isAlikeDead() || (_createItemId == 0) || (_createItemCount == 0)) if (creature.isAlikeDead() || (_createItemId == 0) || (_createItemCount == 0))
{ {

View File

@ -16,9 +16,10 @@
*/ */
package org.l2jmobius.gameserver.model.skills.handlers; package org.l2jmobius.gameserver.model.skills.handlers;
import java.util.List;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed; import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
@ -30,7 +31,7 @@ public class SkillDefault extends Skill
} }
@Override @Override
public void useSkill(Creature caster, WorldObject[] targets) public void useSkill(Creature caster, List<Creature> targets)
{ {
caster.sendPacket(ActionFailed.STATIC_PACKET); caster.sendPacket(ActionFailed.STATIC_PACKET);
caster.sendMessage("Skill not implemented. Skill ID: " + getId() + " " + getSkillType()); caster.sendMessage("Skill not implemented. Skill ID: " + getId() + " " + getSkillType());

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.skills.handlers; package org.l2jmobius.gameserver.model.skills.handlers;
import java.util.List;
import org.l2jmobius.gameserver.model.Effect; import org.l2jmobius.gameserver.model.Effect;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@ -43,7 +45,7 @@ public class SkillDrain extends Skill
} }
@Override @Override
public void useSkill(Creature creature, WorldObject[] targets) public void useSkill(Creature creature, List<Creature> targets)
{ {
if (creature.isAlikeDead()) if (creature.isAlikeDead())
{ {
@ -168,9 +170,9 @@ public class SkillDrain extends Skill
getEffectsSelf(creature); getEffectsSelf(creature);
} }
public void useCubicSkill(CubicInstance activeCubic, WorldObject[] targets) public void useCubicSkill(CubicInstance activeCubic, List<Creature> targets)
{ {
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if (target.isAlikeDead() && (getTargetType() != SkillTargetType.TARGET_CORPSE_MOB)) if (target.isAlikeDead() && (getTargetType() != SkillTargetType.TARGET_CORPSE_MOB))
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.skills.handlers; package org.l2jmobius.gameserver.model.skills.handlers;
import java.util.List;
import org.l2jmobius.gameserver.model.Effect; import org.l2jmobius.gameserver.model.Effect;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@ -47,7 +49,7 @@ public class SkillElemental extends Skill
} }
@Override @Override
public void useSkill(Creature creature, WorldObject[] targets) public void useSkill(Creature creature, List<Creature> targets)
{ {
if (creature.isAlikeDead()) if (creature.isAlikeDead())
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.skills.handlers; package org.l2jmobius.gameserver.model.skills.handlers;
import java.util.List;
import org.l2jmobius.gameserver.model.Effect; import org.l2jmobius.gameserver.model.Effect;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@ -31,7 +33,7 @@ public class SkillSeed extends Skill
} }
@Override @Override
public void useSkill(Creature caster, WorldObject[] targets) public void useSkill(Creature caster, List<Creature> targets)
{ {
if (caster.isAlikeDead()) if (caster.isAlikeDead())
{ {

View File

@ -16,13 +16,14 @@
*/ */
package org.l2jmobius.gameserver.model.skills.handlers; package org.l2jmobius.gameserver.model.skills.handlers;
import java.util.List;
import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable;
import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.IdManager;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.EffectPointInstance; import org.l2jmobius.gameserver.model.actor.instance.EffectPointInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -41,7 +42,7 @@ public class SkillSignet extends Skill
} }
@Override @Override
public void useSkill(Creature caster, WorldObject[] targets) public void useSkill(Creature caster, List<Creature> targets)
{ {
if (caster.isAlikeDead()) if (caster.isAlikeDead())
{ {

View File

@ -16,9 +16,10 @@
*/ */
package org.l2jmobius.gameserver.model.skills.handlers; package org.l2jmobius.gameserver.model.skills.handlers;
import java.util.List;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
public class SkillSignetCasttime extends Skill public class SkillSignetCasttime extends Skill
@ -34,7 +35,7 @@ public class SkillSignetCasttime extends Skill
} }
@Override @Override
public void useSkill(Creature caster, WorldObject[] targets) public void useSkill(Creature caster, List<Creature> targets)
{ {
if (caster.isAlikeDead()) if (caster.isAlikeDead())
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.skills.handlers; package org.l2jmobius.gameserver.model.skills.handlers;
import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable;
import org.l2jmobius.gameserver.datatables.xml.ExperienceData; import org.l2jmobius.gameserver.datatables.xml.ExperienceData;
@ -106,7 +108,7 @@ public class SkillSummon extends Skill
} }
@Override @Override
public void useSkill(Creature caster, WorldObject[] targets) public void useSkill(Creature caster, List<Creature> targets)
{ {
if (caster.isAlikeDead() || !(caster instanceof PlayerInstance)) if (caster.isAlikeDead() || !(caster instanceof PlayerInstance))
{ {
@ -141,7 +143,7 @@ public class SkillSummon extends Skill
cubicSkillLevel = ((getLevel() - 100) / 7) + 8; cubicSkillLevel = ((getLevel() - 100) / 7) + 8;
} }
if (targets.length > 1) // Mass cubic skill if (targets.size() > 1) // Mass cubic skill
{ {
for (WorldObject obj : targets) for (WorldObject obj : targets)
{ {
@ -236,7 +238,7 @@ public class SkillSummon extends Skill
// Check to see if we should do the decay right after the cast // Check to see if we should do the decay right after the cast
if (getTargetType() == SkillTargetType.TARGET_CORPSE_MOB) if (getTargetType() == SkillTargetType.TARGET_CORPSE_MOB)
{ {
final Creature target = (Creature) targets[0]; final Creature target = targets.get(0);
if (target.isDead() && (target instanceof NpcInstance)) if (target.isDead() && (target instanceof NpcInstance))
{ {
summon.spawnMe(target.getX(), target.getY(), target.getZ() + 5); summon.spawnMe(target.getX(), target.getY(), target.getZ() + 5);

View File

@ -16,6 +16,9 @@
*/ */
package org.l2jmobius.gameserver.network.serverpackets; package org.l2jmobius.gameserver.network.serverpackets;
import java.util.ArrayList;
import java.util.List;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
@ -29,27 +32,25 @@ public class MagicSkillLaunched extends GameServerPacket
private final int _skillId; private final int _skillId;
private final int _skillLevel; private final int _skillLevel;
private int _numberOfTargets; private int _numberOfTargets;
private WorldObject[] _targets; private List<Creature> _targets;
private final int _singleTargetId; private final int _singleTargetId;
public MagicSkillLaunched(Creature creature, int skillId, int skillLevel, WorldObject[] targets) public MagicSkillLaunched(Creature creature, int skillId, int skillLevel, List<Creature> targets)
{ {
_objectId = creature.getObjectId(); _objectId = creature.getObjectId();
_skillId = skillId; _skillId = skillId;
_skillLevel = skillLevel; _skillLevel = skillLevel;
if (targets != null) if (targets != null)
{ {
_numberOfTargets = targets.length; _numberOfTargets = targets.size();
_targets = targets; _targets = targets;
} }
else else
{ {
_numberOfTargets = 1; _numberOfTargets = 1;
final WorldObject[] objs = _targets = new ArrayList<>();
{ _targets.add(creature);
creature
};
_targets = objs;
} }
_singleTargetId = 0; _singleTargetId = 0;

View File

@ -17,10 +17,10 @@
package org.l2jmobius.gameserver.handler; package org.l2jmobius.gameserver.handler;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
public interface ISkillHandler public interface ISkillHandler
@ -32,7 +32,7 @@ public interface ISkillHandler
* @param targets * @param targets
* @throws IOException * @throws IOException
*/ */
void useSkill(Creature creature, Skill skill, WorldObject[] targets) throws IOException; void useSkill(Creature creature, Skill skill, List<Creature> targets) throws IOException;
/** /**
* this method is called at initialization to register all the item ids automatically * this method is called at initialization to register all the item ids automatically

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.handler.SkillHandler; import org.l2jmobius.gameserver.handler.SkillHandler;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
@ -38,7 +40,7 @@ public class BalanceLife implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
// check for other effects // check for other effects
try try

View File

@ -16,10 +16,11 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -34,14 +35,14 @@ public class BeastFeed implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {
return; return;
} }
final WorldObject[] targetList = skill.getTargetList(creature); final List<Creature> targetList = skill.getTargetList(creature);
if (targetList == null) if (targetList == null)
{ {
return; return;

View File

@ -16,13 +16,14 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Effect; import org.l2jmobius.gameserver.model.Effect;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -49,7 +50,7 @@ public class Blow implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (creature.isAlikeDead()) if (creature.isAlikeDead())
{ {
@ -61,7 +62,7 @@ public class Blow implements ISkillHandler
final boolean ss = creature.checkSs(); final boolean ss = creature.checkSs();
Formulas.getInstance(); Formulas.getInstance();
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if (target.isAlikeDead()) if (target.isAlikeDead())
{ {

View File

@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
@ -36,7 +37,7 @@ public class Charge implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
for (WorldObject target1 : targets) for (WorldObject target1 : targets)
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
@ -23,7 +25,6 @@ import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
import org.l2jmobius.gameserver.model.Effect; import org.l2jmobius.gameserver.model.Effect;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
@ -40,7 +41,7 @@ public class ClanGate implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
PlayerInstance player = null; PlayerInstance player = null;
if (creature instanceof PlayerInstance) if (creature instanceof PlayerInstance)

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.handler.SkillHandler; import org.l2jmobius.gameserver.handler.SkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -35,7 +37,7 @@ public class CombatPointHeal implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature actChar, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
// check for other effects // check for other effects
try try
@ -43,7 +45,7 @@ public class CombatPointHeal implements ISkillHandler
final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(SkillType.BUFF); final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(SkillType.BUFF);
if (handler != null) if (handler != null)
{ {
handler.useSkill(actChar, skill, targets); handler.useSkill(creature, skill, targets);
} }
} }
catch (Exception e) catch (Exception e)

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
// //
@ -65,7 +67,7 @@ public class Continuous implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skillValue, WorldObject[] targets) public void useSkill(Creature creature, Skill skillValue, List<Creature> targets)
{ {
if (creature == null) if (creature == null)
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
@ -36,7 +38,7 @@ public class CpDam implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof Playable)) if (!(creature instanceof Playable))
{ {

View File

@ -16,11 +16,12 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.RecipeController; import org.l2jmobius.gameserver.RecipeController;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -34,7 +35,7 @@ public class Craft implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,12 +16,12 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -38,14 +38,14 @@ public class DeluxeKey implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {
return; return;
} }
final WorldObject[] targetList = skill.getTargetList(creature); final List<Creature> targetList = skill.getTargetList(creature);
if (targetList == null) if (targetList == null)
{ {
return; return;

View File

@ -80,7 +80,7 @@ public class Disablers implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
final SkillType type = skill.getSkillType(); final SkillType type = skill.getSkillType();
final boolean bss = creature.checkBss(); final boolean bss = creature.checkBss();
@ -671,10 +671,10 @@ public class Disablers implements ISkillHandler
LOGGER.warning("Couldn't find skill handler for HEAL."); LOGGER.warning("Couldn't find skill handler for HEAL.");
continue; continue;
} }
final WorldObject[] tgts = new WorldObject[]
{ final List<Creature> tgts = new ArrayList<>();
target tgts.add(target);
};
try try
{ {
healhandler.useSkill(creature, skill, tgts); healhandler.useSkill(creature, skill, tgts);

View File

@ -16,12 +16,12 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -37,14 +37,14 @@ public class DrainSoul implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {
return; return;
} }
final WorldObject[] targetList = skill.getTargetList(creature); final List<Creature> targetList = skill.getTargetList(creature);
if (targetList == null) if (targetList == null)
{ {
return; return;

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.datatables.xml.ZoneData; import org.l2jmobius.gameserver.datatables.xml.ZoneData;
@ -24,7 +26,6 @@ import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory; import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
@ -46,7 +47,7 @@ public class Fishing implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,11 +16,12 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Fishing; import org.l2jmobius.gameserver.model.Fishing;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.items.Weapon; import org.l2jmobius.gameserver.model.items.Weapon;
@ -39,7 +40,7 @@ public class FishingSkill implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -33,7 +35,7 @@ public class GetPlayer implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (creature.isAlikeDead()) if (creature.isAlikeDead())
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
@ -33,7 +35,7 @@ public class GiveSp implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
for (WorldObject obj : targets) for (WorldObject obj : targets)
{ {

View File

@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.Config; import org.l2jmobius.Config;
@ -49,7 +50,7 @@ public class Harvest implements ISkillHandler
private MonsterInstance _target; private MonsterInstance _target;
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {
@ -58,7 +59,7 @@ public class Harvest implements ISkillHandler
_player = (PlayerInstance) creature; _player = (PlayerInstance) creature;
final WorldObject[] targetList = skill.getTargetList(creature); final List<Creature> targetList = skill.getTargetList(creature);
final InventoryUpdate iu = Config.FORCE_INVENTORY_UPDATE ? null : new InventoryUpdate(); final InventoryUpdate iu = Config.FORCE_INVENTORY_UPDATE ? null : new InventoryUpdate();
if (targetList == null) if (targetList == null)
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.handler.SkillHandler; import org.l2jmobius.gameserver.handler.SkillHandler;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
@ -43,7 +45,7 @@ public class Heal implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
PlayerInstance player = null; PlayerInstance player = null;
if (creature instanceof PlayerInstance) if (creature instanceof PlayerInstance)

View File

@ -16,10 +16,11 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.skills.Stat; import org.l2jmobius.gameserver.model.skills.Stat;
@ -37,9 +38,9 @@ public class ManaHeal implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature actChar, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if ((target == null) || target.isDead() || target.isInvul()) if ((target == null) || target.isDead() || target.isInvul())
{ {
@ -62,10 +63,10 @@ public class ManaHeal implements ISkillHandler
sump.addAttribute(StatusUpdate.CUR_MP, (int) target.getCurrentMp()); sump.addAttribute(StatusUpdate.CUR_MP, (int) target.getCurrentMp());
target.sendPacket(sump); target.sendPacket(sump);
if ((actChar instanceof PlayerInstance) && (actChar != target)) if ((creature instanceof PlayerInstance) && (creature != target))
{ {
final SystemMessage sm = new SystemMessage(SystemMessageId.S2_MP_HAS_BEEN_RESTORED_BY_S1); final SystemMessage sm = new SystemMessage(SystemMessageId.S2_MP_HAS_BEEN_RESTORED_BY_S1);
sm.addString(actChar.getName()); sm.addString(creature.getName());
sm.addNumber((int) mp); sm.addNumber((int) mp);
target.sendPacket(sm); target.sendPacket(sm);
} }
@ -79,20 +80,20 @@ public class ManaHeal implements ISkillHandler
if (skill.isMagic() && skill.useSpiritShot()) if (skill.isMagic() && skill.useSpiritShot())
{ {
if (actChar.checkBss()) if (creature.checkBss())
{ {
actChar.removeBss(); creature.removeBss();
} }
if (actChar.checkSps()) if (creature.checkSps())
{ {
actChar.removeSps(); creature.removeSps();
} }
} }
else if (skill.useSoulShot()) else if (skill.useSoulShot())
{ {
if (actChar.checkSs()) if (creature.checkSs())
{ {
actChar.removeSs(); creature.removeSs();
} }
} }
} }

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
@ -41,7 +43,7 @@ public class Manadam implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
Creature target = null; Creature target = null;
if (creature.isAlikeDead()) if (creature.isAlikeDead())

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Effect; import org.l2jmobius.gameserver.model.Effect;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -37,7 +39,7 @@ public class Mdam implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (creature.isAlikeDead()) if (creature.isAlikeDead())
{ {

View File

@ -51,7 +51,7 @@ public class Pdam implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (creature.isAlikeDead()) if (creature.isAlikeDead())
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
@ -40,7 +42,7 @@ public class Recall implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
try try
{ {

View File

@ -39,7 +39,7 @@ public class Resurrect implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
PlayerInstance player = null; PlayerInstance player = null;
if (creature instanceof PlayerInstance) if (creature instanceof PlayerInstance)

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
@ -25,7 +27,6 @@ import org.l2jmobius.gameserver.instancemanager.IdManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.actor.instance.SiegeFlagInstance; import org.l2jmobius.gameserver.model.actor.instance.SiegeFlagInstance;
@ -44,7 +45,7 @@ public class SiegeFlag implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
@ -24,7 +25,6 @@ import org.l2jmobius.gameserver.datatables.xml.ManorSeedData;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance; import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -50,7 +50,7 @@ public class Sow implements ISkillHandler
private int _seedId; private int _seedId;
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {
@ -59,20 +59,21 @@ public class Sow implements ISkillHandler
_player = (PlayerInstance) creature; _player = (PlayerInstance) creature;
final WorldObject[] targetList = skill.getTargetList(creature); final List<Creature> targetList = skill.getTargetList(creature);
if (targetList == null) if (targetList == null)
{ {
return; return;
} }
for (int index = 0; index < targetList.length; index++) for (@SuppressWarnings("unused")
Creature element : targetList)
{ {
if (!(targetList[0] instanceof MonsterInstance)) if (!(targetList.get(0) instanceof MonsterInstance))
{ {
continue; continue;
} }
_target = (MonsterInstance) targetList[0]; _target = (MonsterInstance) targetList.get(0);
if (_target.isSeeded()) if (_target.isSeeded())
{ {
_player.sendPacket(ActionFailed.STATIC_PACKET); _player.sendPacket(ActionFailed.STATIC_PACKET);
@ -104,6 +105,7 @@ public class Sow implements ISkillHandler
_player.sendPacket(ActionFailed.STATIC_PACKET); _player.sendPacket(ActionFailed.STATIC_PACKET);
break; break;
} }
// Consuming used seed // Consuming used seed
_player.destroyItem("Consume", item.getObjectId(), 1, null, false); _player.destroyItem("Consume", item.getObjectId(), 1, null, false);
SystemMessage sm = null; SystemMessage sm = null;
@ -126,7 +128,8 @@ public class Sow implements ISkillHandler
{ {
_player.getParty().broadcastToPartyMembers(sm); _player.getParty().broadcastToPartyMembers(sm);
} }
// TODO: Mob should not agro on player, this way doesn't work really nice
// TODO: Mob should not aggro on player, this way doesn't work really nice
_target.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); _target.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
} }
} }

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.ai.CtrlEvent; import org.l2jmobius.gameserver.ai.CtrlEvent;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -39,7 +41,7 @@ public class Spoil implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
@ -43,7 +45,7 @@ public class StrSiegeAssault implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -41,7 +43,7 @@ public class SummonFriend implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,13 +16,13 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -38,7 +38,7 @@ public class SummonTreasureKey implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -41,7 +43,7 @@ public class Sweep implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {

View File

@ -16,12 +16,13 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.Skill.SkillType; import org.l2jmobius.gameserver.model.Skill.SkillType;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance; import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -40,7 +41,7 @@ public class TakeCastle implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
if (!(creature instanceof PlayerInstance)) if (!(creature instanceof PlayerInstance))
{ {
@ -77,9 +78,9 @@ public class TakeCastle implements ISkillHandler
try try
{ {
if ((castle != null) && (targets[0] instanceof ArtefactInstance)) if ((castle != null) && (targets.get(0) instanceof ArtefactInstance))
{ {
castle.Engrave(player.getClan(), targets[0].getObjectId()); castle.Engrave(player.getClan(), targets.get(0).getObjectId());
} }
else if (fort != null) else if (fort != null)
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
@ -39,9 +41,9 @@ public class Unlock implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
final WorldObject[] targetList = skill.getTargetList(creature); final List<Creature> targetList = skill.getTargetList(creature);
if (targetList == null) if (targetList == null)
{ {
return; return;

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -31,7 +33,7 @@ public class ZakenPlayer implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
try try
{ {
@ -41,59 +43,75 @@ public class ZakenPlayer implements ISkillHandler
{ {
continue; continue;
} }
final Creature target = (Creature) target1; final Creature target = (Creature) target1;
final int ch = (Rnd.get(14) + 1); switch (Rnd.get(14) + 1)
if (ch == 1)
{ {
target.teleToLocation(55299, 219120, -2952, true); case 1:
} {
else if (ch == 2) target.teleToLocation(55299, 219120, -2952, true);
{ break;
target.teleToLocation(56363, 218043, -2952, true); }
} case 2:
else if (ch == 3) {
{ target.teleToLocation(56363, 218043, -2952, true);
target.teleToLocation(54245, 220162, -2952, true); break;
} }
else if (ch == 4) case 3:
{ {
target.teleToLocation(56289, 220126, -2952, true); target.teleToLocation(54245, 220162, -2952, true);
} break;
else if (ch == 5) }
{ case 4:
target.teleToLocation(55299, 219120, -3224, true); {
} target.teleToLocation(56289, 220126, -2952, true);
else if (ch == 6) break;
{ }
target.teleToLocation(56363, 218043, -3224, true); case 5:
} {
else if (ch == 7) target.teleToLocation(55299, 219120, -3224, true);
{ break;
target.teleToLocation(54245, 220162, -3224, true); }
} case 6:
else if (ch == 8) {
{ target.teleToLocation(56363, 218043, -3224, true);
target.teleToLocation(56289, 220126, -3224, true); break;
} }
else if (ch == 9) case 7:
{ {
target.teleToLocation(55299, 219120, -3496, true); target.teleToLocation(54245, 220162, -3224, true);
} break;
else if (ch == 10) }
{ case 8:
target.teleToLocation(56363, 218043, -3496, true); {
} target.teleToLocation(56289, 220126, -3224, true);
else if (ch == 11) break;
{ }
target.teleToLocation(54245, 220162, -3496, true); case 9:
} {
else if (ch == 12) target.teleToLocation(55299, 219120, -3496, true);
{ break;
target.teleToLocation(56289, 220126, -3496, true); }
} case 10:
else {
{ target.teleToLocation(56363, 218043, -3496, true);
target.teleToLocation(53930, 217760, -2944, true); break;
}
case 11:
{
target.teleToLocation(54245, 220162, -3496, true);
break;
}
case 12:
{
target.teleToLocation(56289, 220126, -3496, true);
break;
}
default:
{
target.teleToLocation(53930, 217760, -2944, true);
break;
}
} }
} }
} }

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
@ -31,7 +33,7 @@ public class ZakenSelf implements ISkillHandler
}; };
@Override @Override
public void useSkill(Creature creature, Skill skill, WorldObject[] targets) public void useSkill(Creature creature, Skill skill, List<Creature> targets)
{ {
try try
{ {
@ -41,59 +43,75 @@ public class ZakenSelf implements ISkillHandler
{ {
continue; continue;
} }
final Creature target = (Creature) target1; final Creature target = (Creature) target1;
final int ch = (Rnd.get(14) + 1); switch (Rnd.get(14) + 1)
if (ch == 1)
{ {
target.teleToLocation(55299, 219120, -2952, true); case 1:
} {
else if (ch == 2) target.teleToLocation(55299, 219120, -2952, true);
{ break;
target.teleToLocation(56363, 218043, -2952, true); }
} case 2:
else if (ch == 3) {
{ target.teleToLocation(56363, 218043, -2952, true);
target.teleToLocation(54245, 220162, -2952, true); break;
} }
else if (ch == 4) case 3:
{ {
target.teleToLocation(56289, 220126, -2952, true); target.teleToLocation(54245, 220162, -2952, true);
} break;
else if (ch == 5) }
{ case 4:
target.teleToLocation(55299, 219120, -3224, true); {
} target.teleToLocation(56289, 220126, -2952, true);
else if (ch == 6) break;
{ }
target.teleToLocation(56363, 218043, -3224, true); case 5:
} {
else if (ch == 7) target.teleToLocation(55299, 219120, -3224, true);
{ break;
target.teleToLocation(54245, 220162, -3224, true); }
} case 6:
else if (ch == 8) {
{ target.teleToLocation(56363, 218043, -3224, true);
target.teleToLocation(56289, 220126, -3224, true); break;
} }
else if (ch == 9) case 7:
{ {
target.teleToLocation(55299, 219120, -3496, true); target.teleToLocation(54245, 220162, -3224, true);
} break;
else if (ch == 10) }
{ case 8:
target.teleToLocation(56363, 218043, -3496, true); {
} target.teleToLocation(56289, 220126, -3224, true);
else if (ch == 11) break;
{ }
target.teleToLocation(54245, 220162, -3496, true); case 9:
} {
else if (ch == 12) target.teleToLocation(55299, 219120, -3496, true);
{ break;
target.teleToLocation(56289, 220126, -3496, true); }
} case 10:
else {
{ target.teleToLocation(56363, 218043, -3496, true);
target.teleToLocation(53930, 217760, -2944, true); break;
}
case 11:
{
target.teleToLocation(54245, 220162, -3496, true);
break;
}
case 12:
{
target.teleToLocation(56289, 220126, -3496, true);
break;
}
default:
{
target.teleToLocation(53930, 217760, -2944, true);
break;
}
} }
} }
} }

View File

@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model; package org.l2jmobius.gameserver.model;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.handler.ISkillHandler; import org.l2jmobius.gameserver.handler.ISkillHandler;
@ -156,9 +157,9 @@ public class ChanceSkillList extends ConcurrentHashMap<Skill, ChanceCondition>
} }
final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(castedSkill.getSkillType()); final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(castedSkill.getSkillType());
final WorldObject[] targets = castedSkill.getTargetList(_owner, false, target); final List<Creature> targets = castedSkill.getTargetList(_owner, false, target);
_owner.broadcastPacket(new MagicSkillLaunched(_owner, castedSkill.getDisplayId(), castedSkill.getLevel(), targets)); _owner.broadcastPacket(new MagicSkillLaunched(_owner, castedSkill.getDisplayId(), castedSkill.getLevel(), targets));
_owner.broadcastPacket(new MagicSkillUse(_owner, (Creature) targets[0], castedSkill.getDisplayId(), castedSkill.getLevel(), 0, 0)); _owner.broadcastPacket(new MagicSkillUse(_owner, targets.get(0), castedSkill.getDisplayId(), castedSkill.getLevel(), 0, 0));
// Launch the magic skill and calculate its effects // Launch the magic skill and calculate its effects
if (handler != null) if (handler != null)

View File

@ -649,7 +649,7 @@ public abstract class Skill
_isDebuff = set.getBoolean("isDebuff", false); _isDebuff = set.getBoolean("isDebuff", false);
} }
public abstract void useSkill(Creature caster, WorldObject[] targets); public abstract void useSkill(Creature caster, List<Creature> targets);
public boolean isSingleEffect() public boolean isSingleEffect()
{ {
@ -1374,7 +1374,7 @@ public abstract class Skill
return true; return true;
} }
public WorldObject[] getTargetList(Creature creature, boolean onlyFirst) public List<Creature> getTargetList(Creature creature, boolean onlyFirst)
{ {
// Init to null the target of the skill // Init to null the target of the skill
Creature target = null; Creature target = null;
@ -1409,7 +1409,7 @@ public abstract class Skill
* @param targetCreature * @param targetCreature
* @return * @return
*/ */
public WorldObject[] getTargetList(Creature creature, boolean onlyFirst, Creature targetCreature) public List<Creature> getTargetList(Creature creature, boolean onlyFirst, Creature targetCreature)
{ {
// to avoid attacks during oly start period // to avoid attacks during oly start period
if ((creature instanceof PlayerInstance) && _isOffensive && (((PlayerInstance) creature).isInOlympiadMode() && !((PlayerInstance) creature).isOlympiadStart())) if ((creature instanceof PlayerInstance) && _isOffensive && (((PlayerInstance) creature).isInOlympiadMode() && !((PlayerInstance) creature).isOlympiadStart()))
@ -1421,10 +1421,8 @@ public abstract class Skill
final List<Creature> targetList = new ArrayList<>(); final List<Creature> targetList = new ArrayList<>();
if (_ispotion) if (_ispotion)
{ {
return new Creature[] targetList.add(creature);
{ return targetList;
creature
};
} }
Creature target = targetCreature; Creature target = targetCreature;
@ -1529,27 +1527,21 @@ public abstract class Skill
} }
// If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT // If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
case TARGET_SELF: case TARGET_SELF:
case TARGET_GROUND: case TARGET_GROUND:
{ {
return new Creature[] targetList.add(creature);
{ return targetList;
creature
};
} }
case TARGET_HOLY: case TARGET_HOLY:
{ {
if ((creature instanceof PlayerInstance) && (creature.getTarget() instanceof ArtefactInstance)) if ((creature instanceof PlayerInstance) && (creature.getTarget() instanceof ArtefactInstance))
{ {
return new Creature[] targetList.add((ArtefactInstance) creature.getTarget());
{ return targetList;
(ArtefactInstance) creature.getTarget()
};
} }
return null; return null;
} }
@ -1559,10 +1551,8 @@ public abstract class Skill
target = creature.getPet(); target = creature.getPet();
if ((target != null) && !target.isDead()) if ((target != null) && !target.isDead())
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
return null; return null;
} }
@ -1573,10 +1563,8 @@ public abstract class Skill
target = ((Summon) creature).getOwner(); target = ((Summon) creature).getOwner();
if ((target != null) && !target.isDead()) if ((target != null) && !target.isDead())
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
} }
return null; return null;
@ -1588,10 +1576,8 @@ public abstract class Skill
target = creature.getPet(); target = creature.getPet();
if ((target != null) && target.isDead()) if ((target != null) && target.isDead())
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
} }
return null; return null;
@ -1695,19 +1681,14 @@ public abstract class Skill
{ {
continue; continue;
} }
if (!onlyFirst)
targetList.add(nearby);
if (onlyFirst)
{ {
targetList.add(nearby); return targetList;
}
else
{
return new Creature[]
{
nearby
};
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_AREA: case TARGET_AREA:
{ {
@ -1718,27 +1699,22 @@ public abstract class Skill
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
} }
Creature cha; Creature cha;
if (_castRange >= 0) if (_castRange >= 0)
{ {
cha = target; cha = target;
if (!onlyFirst) targetList.add(cha);
if (onlyFirst)
{ {
targetList.add(cha); // Add target to target list return targetList;
}
else
{
return new Creature[]
{
cha
};
} }
} }
else else
{ {
cha = creature; cha = creature;
} }
final boolean effectOriginIsPlayableInstance = cha instanceof Playable;
PlayerInstance src = null; PlayerInstance src = null;
if (creature instanceof PlayerInstance) if (creature instanceof PlayerInstance)
{ {
@ -1748,6 +1724,7 @@ public abstract class Skill
{ {
src = ((Summon) creature).getOwner(); src = ((Summon) creature).getOwner();
} }
final int radius = _skillRadius; final int radius = _skillRadius;
final boolean srcInArena = creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE); final boolean srcInArena = creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE);
for (WorldObject obj : creature.getKnownList().getKnownObjects().values()) for (WorldObject obj : creature.getKnownList().getKnownObjects().values())
@ -1768,22 +1745,24 @@ public abstract class Skill
{ {
continue; continue;
} }
if (_isOffensive && Creature.isInsidePeaceZone(creature, obj))
{
continue;
}
if (!GeoEngine.getInstance().canSeeTarget(creature, obj))
{
continue;
}
target = (Creature) obj; target = (Creature) obj;
if (!GeoEngine.getInstance().canSeeTarget(creature, target))
{
continue;
}
if (_isOffensive && Creature.isInsidePeaceZone(creature, target))
{
continue;
}
if (!target.isAlikeDead() && (target != creature)) if (!target.isAlikeDead() && (target != creature))
{ {
if (!Util.checkIfInRange(radius, obj, cha, true)) if (!Util.checkIfInRange(radius, obj, cha, true))
{ {
continue; continue;
} }
if (src != null) // caster is l2playableinstance and exists
if (src != null) // caster is a playable instance and exists
{ {
// check for Events // check for Events
if (obj instanceof PlayerInstance) if (obj instanceof PlayerInstance)
@ -1814,6 +1793,13 @@ public abstract class Skill
continue; continue;
} }
} }
// Summon AOE skills should not target non attackable players.
if (obj.isPlayable() && !creature.isPlayer() && !obj.isAutoAttackable(creature))
{
continue;
}
if (obj instanceof PlayerInstance) if (obj instanceof PlayerInstance)
{ {
final PlayerInstance trg = (PlayerInstance) obj; final PlayerInstance trg = (PlayerInstance) obj;
@ -1845,7 +1831,7 @@ public abstract class Skill
} }
} }
} }
if (obj instanceof Summon) else if (obj instanceof Summon)
{ {
final PlayerInstance trg = ((Summon) obj).getOwner(); final PlayerInstance trg = ((Summon) obj).getOwner();
if (trg == null) if (trg == null)
@ -1877,11 +1863,7 @@ public abstract class Skill
} }
} }
} }
else if (effectOriginIsPlayableInstance && // If effect starts at PlayableInstance and
!(obj instanceof Playable))
{
continue;
}
targetList.add((Creature) obj); targetList.add((Creature) obj);
} }
} }
@ -1889,7 +1871,7 @@ public abstract class Skill
{ {
return null; return null;
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_MULTIFACE: case TARGET_MULTIFACE:
{ {
@ -1898,17 +1880,13 @@ public abstract class Skill
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
} }
if (!onlyFirst)
targetList.add(target);
if (onlyFirst)
{ {
targetList.add(target); return targetList;
}
else
{
return new Creature[]
{
target
};
} }
final int radius = _skillRadius; final int radius = _skillRadius;
PlayerInstance src = null; PlayerInstance src = null;
if (creature instanceof PlayerInstance) if (creature instanceof PlayerInstance)
@ -1971,26 +1949,22 @@ public abstract class Skill
return null; return null;
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
// TODO multiface targets all around right now. need it to just get targets the character is facing. // TODO multiface targets all around right now. need it to just get targets the character is facing.
} }
case TARGET_PARTY: case TARGET_PARTY:
{ {
targetList.add(creature);
if (onlyFirst) if (onlyFirst)
{ {
return new Creature[] return targetList;
{
creature
};
} }
targetList.add(creature);
final PlayerInstance player = creature.getActingPlayer(); final PlayerInstance player = creature.getActingPlayer();
if (player == null) if (player == null)
{ {
return new Creature[] targetList.add(creature);
{ return targetList;
creature
};
} }
if (creature instanceof Summon) if (creature instanceof Summon)
{ {
@ -2060,17 +2034,15 @@ public abstract class Skill
} }
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_PARTY_MEMBER: case TARGET_PARTY_MEMBER:
{ {
if ((target != null) && !target.isDead() && ((target == creature) || ((creature.getParty() != null) && (target.getParty() != null) && (creature.getParty().getPartyLeaderOID() == target.getParty().getPartyLeaderOID())) || (creature.getPet() == target) || (creature == target.getPet()))) if ((target != null) && !target.isDead() && ((target == creature) || ((creature.getParty() != null) && (target.getParty() != null) && (creature.getParty().getPartyLeaderOID() == target.getParty().getPartyLeaderOID())) || (creature.getPet() == target) || (creature == target.getPet())))
{ {
// If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT // If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
@ -2080,10 +2052,8 @@ public abstract class Skill
if ((target != creature) && (target != null) && !target.isDead() && (creature.getParty() != null) && (target.getParty() != null) && (creature.getParty().getPartyLeaderOID() == target.getParty().getPartyLeaderOID())) if ((target != creature) && (target != null) && !target.isDead() && (creature.getParty() != null) && (target.getParty() != null) && (creature.getParty().getPartyLeaderOID() == target.getParty().getPartyLeaderOID()))
{ {
// If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT // If a target is found, return it in a table else send a system message TARGET_IS_INCORRECT
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
@ -2099,22 +2069,15 @@ public abstract class Skill
if (_targetType != SkillTargetType.TARGET_CORPSE_ALLY) // if corpose, the caster is not included if (_targetType != SkillTargetType.TARGET_CORPSE_ALLY) // if corpose, the caster is not included
{ {
if (player.isInOlympiadMode()) if (player.isInOlympiadMode())
{
return new Creature[]
{
player
};
}
if (!onlyFirst)
{ {
targetList.add(player); targetList.add(player);
return targetList;
} }
else
targetList.add(player);
if (onlyFirst)
{ {
return new Creature[] return targetList;
{
player
};
} }
} }
PlayerInstance src = null; PlayerInstance src = null;
@ -2192,21 +2155,16 @@ public abstract class Skill
{ {
continue; continue;
} }
if (!onlyFirst)
targetList.add((Creature) newTarget);
if (onlyFirst)
{ {
targetList.add((Creature) newTarget); return targetList;
}
else
{
return new Creature[]
{
(Creature) newTarget
};
} }
} }
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_CORPSE_CLAN: case TARGET_CORPSE_CLAN:
case TARGET_CLAN: case TARGET_CLAN:
@ -2219,22 +2177,15 @@ public abstract class Skill
if (_targetType != SkillTargetType.TARGET_CORPSE_CLAN) if (_targetType != SkillTargetType.TARGET_CORPSE_CLAN)
{ {
if (player.isInOlympiadMode()) if (player.isInOlympiadMode())
{
return new Creature[]
{
player
};
}
if (!onlyFirst)
{ {
targetList.add(player); targetList.add(player);
return targetList;
} }
else
targetList.add(player);
if (onlyFirst)
{ {
return new Creature[] return targetList;
{
player
};
} }
} }
if (clan != null) if (clan != null)
@ -2252,6 +2203,7 @@ public abstract class Skill
{ {
continue; continue;
} }
final PlayerInstance trg = newTarget; final PlayerInstance trg = newTarget;
final PlayerInstance src = player; final PlayerInstance src = player;
// if src is in event and trg not OR viceversa: // if src is in event and trg not OR viceversa:
@ -2290,16 +2242,11 @@ public abstract class Skill
{ {
continue; continue;
} }
if (!onlyFirst)
targetList.add(newTarget);
if (onlyFirst)
{ {
targetList.add(newTarget); return targetList;
}
else
{
return new Creature[]
{
newTarget
};
} }
} }
} }
@ -2310,10 +2257,8 @@ public abstract class Skill
final NpcInstance npc = (NpcInstance) creature; final NpcInstance npc = (NpcInstance) creature;
if ((npc.getFactionId() == null) || npc.getFactionId().isEmpty()) if ((npc.getFactionId() == null) || npc.getFactionId().isEmpty())
{ {
return new Creature[] targetList.add(creature);
{ return targetList;
creature
};
} }
targetList.add(creature); targetList.add(creature);
final Collection<WorldObject> objs = creature.getKnownList().getKnownObjects().values(); final Collection<WorldObject> objs = creature.getKnownList().getKnownObjects().values();
@ -2332,7 +2277,7 @@ public abstract class Skill
} }
} }
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_CORPSE_PLAYER: case TARGET_CORPSE_PLAYER:
{ {
@ -2390,15 +2335,8 @@ public abstract class Skill
} }
if (condGood) if (condGood)
{ {
if (!onlyFirst) targetList.add(target);
{ return targetList;
targetList.add(target);
return targetList.toArray(new WorldObject[targetList.size()]);
}
return new Creature[]
{
target
};
} }
} }
} }
@ -2412,15 +2350,9 @@ public abstract class Skill
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
} }
if (!onlyFirst)
{ targetList.add(target);
targetList.add(target); return targetList;
return targetList.toArray(new WorldObject[targetList.size()]);
}
return new Creature[]
{
target
};
} }
case TARGET_AREA_CORPSE_MOB: case TARGET_AREA_CORPSE_MOB:
{ {
@ -2429,17 +2361,13 @@ public abstract class Skill
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
} }
if (!onlyFirst)
targetList.add(target);
if (onlyFirst)
{ {
targetList.add(target); return targetList;
}
else
{
return new Creature[]
{
target
};
} }
final boolean srcInArena = creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE); final boolean srcInArena = creature.isInsideZone(ZoneId.PVP) && !creature.isInsideZone(ZoneId.SIEGE);
PlayerInstance src = null; PlayerInstance src = null;
if (creature instanceof PlayerInstance) if (creature instanceof PlayerInstance)
@ -2540,7 +2468,7 @@ public abstract class Skill
{ {
return null; return null;
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_UNLOCKABLE: case TARGET_UNLOCKABLE:
{ {
@ -2550,15 +2478,9 @@ public abstract class Skill
creature.sendPacket(new SystemMessage(SystemMessageId.INVALID_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.INVALID_TARGET));
return null; return null;
} }
if (!onlyFirst)
{ targetList.add(target);
targetList.add(target); return targetList;
return targetList.toArray(new WorldObject[targetList.size()]);
}
return new Creature[]
{
target
};
} }
case TARGET_ITEM: case TARGET_ITEM:
{ {
@ -2574,18 +2496,9 @@ public abstract class Skill
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
} }
if (!onlyFirst)
{ targetList.add(target);
targetList.add(target); return targetList;
}
else
{
return new Creature[]
{
target
};
}
return targetList.toArray(new WorldObject[targetList.size()]);
} }
creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET)); creature.sendPacket(new SystemMessage(SystemMessageId.THAT_IS_THE_INCORRECT_TARGET));
return null; return null;
@ -2597,16 +2510,10 @@ public abstract class Skill
if ((_castRange >= 0) && ((target instanceof NpcInstance) || (target instanceof SummonInstance)) && target.isUndead() && !target.isAlikeDead()) if ((_castRange >= 0) && ((target instanceof NpcInstance) || (target instanceof SummonInstance)) && target.isUndead() && !target.isAlikeDead())
{ {
cha = target; cha = target;
if (!onlyFirst) targetList.add(cha);
if (onlyFirst)
{ {
targetList.add(cha); // Add target to target list return targetList;
}
else
{
return new Creature[]
{
cha
};
} }
} }
else else
@ -2647,16 +2554,11 @@ public abstract class Skill
{ {
continue; continue;
} }
if (!onlyFirst)
targetList.add((Creature) obj);
if (onlyFirst)
{ {
targetList.add((Creature) obj); // Add obj to target lists return targetList;
}
else
{
return new Creature[]
{
(Creature) obj
};
} }
} }
} }
@ -2665,7 +2567,7 @@ public abstract class Skill
{ {
return null; return null;
} }
return targetList.toArray(new Creature[targetList.size()]); return targetList;
} }
case TARGET_ENEMY_SUMMON: case TARGET_ENEMY_SUMMON:
{ {
@ -2674,10 +2576,8 @@ public abstract class Skill
final Summon targetSummon = (Summon) target; final Summon targetSummon = (Summon) target;
if (((creature instanceof PlayerInstance) && (creature.getPet() != targetSummon) && !targetSummon.isDead() && ((targetSummon.getOwner().getPvpFlag() != 0) || (targetSummon.getOwner().getKarma() > 0) || targetSummon.getOwner().isInDuel())) || (targetSummon.getOwner().isInsideZone(ZoneId.PVP) && ((PlayerInstance) creature).isInsideZone(ZoneId.PVP))) if (((creature instanceof PlayerInstance) && (creature.getPet() != targetSummon) && !targetSummon.isDead() && ((targetSummon.getOwner().getPvpFlag() != 0) || (targetSummon.getOwner().getKarma() > 0) || targetSummon.getOwner().isInDuel())) || (targetSummon.getOwner().isInsideZone(ZoneId.PVP) && ((PlayerInstance) creature).isInsideZone(ZoneId.PVP)))
{ {
return new Creature[] targetList.add(targetSummon);
{ return targetList;
targetSummon
};
} }
} }
return null; return null;
@ -2686,10 +2586,8 @@ public abstract class Skill
{ {
if ((target != null) && !target.isDead() && ((target instanceof DoorInstance) || (target instanceof ControlTowerInstance))) if ((target != null) && !target.isDead() && ((target instanceof DoorInstance) || (target instanceof ControlTowerInstance)))
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
return null; return null;
} }
@ -2702,10 +2600,8 @@ public abstract class Skill
} }
if ((target instanceof MonsterInstance) && ((((MonsterInstance) target).getNpcId() == 22217) || (((MonsterInstance) target).getNpcId() == 22216) || (((MonsterInstance) target).getNpcId() == 22215))) if ((target instanceof MonsterInstance) && ((((MonsterInstance) target).getNpcId() == 22217) || (((MonsterInstance) target).getNpcId() == 22216) || (((MonsterInstance) target).getNpcId() == 22215)))
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
return null; return null;
} }
@ -2713,10 +2609,8 @@ public abstract class Skill
{ {
if ((target != null) && target.isDead()) if ((target != null) && target.isDead())
{ {
return new Creature[] targetList.add(target);
{ return targetList;
target
};
} }
return null; return null;
} }
@ -2729,10 +2623,8 @@ public abstract class Skill
final NpcInstance npc = (NpcInstance) creature; final NpcInstance npc = (NpcInstance) creature;
if ((npc.getFactionId() == null) || npc.getFactionId().isEmpty()) if ((npc.getFactionId() == null) || npc.getFactionId().isEmpty())
{ {
return new Creature[] targetList.add(creature);
{ return targetList;
creature
};
} }
final Collection<WorldObject> objs = creature.getKnownList().getKnownObjects().values(); final Collection<WorldObject> objs = creature.getKnownList().getKnownObjects().values();
for (WorldObject newTarget : objs) for (WorldObject newTarget : objs)
@ -2766,20 +2658,19 @@ public abstract class Skill
} }
} }
public WorldObject[] getTargetList(Creature creature) public List<Creature> getTargetList(Creature creature)
{ {
return getTargetList(creature, false); return getTargetList(creature, false);
} }
public WorldObject getFirstOfTargetList(Creature creature) public WorldObject getFirstOfTargetList(Creature creature)
{ {
WorldObject[] targets; final List<Creature> targets = getTargetList(creature, true);
targets = getTargetList(creature, true); if ((targets == null) || (targets.isEmpty()))
if ((targets == null) || (targets.length == 0))
{ {
return null; return null;
} }
return targets[0]; return targets.get(0);
} }
public Func[] getStatFuncs(Effect effect, Creature creature) public Func[] getStatFuncs(Effect effect, Creature creature)

View File

@ -1545,21 +1545,21 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
} }
// Get all possible targets of the skill in a table in function of the skill target type // Get all possible targets of the skill in a table in function of the skill target type
final WorldObject[] targets = skill.getTargetList(creature); final List<Creature> targets = skill.getTargetList(creature);
// Set the target of the skill in function of Skill Type and Target Type // Set the target of the skill in function of Skill Type and Target Type
Creature target = null; Creature target = null;
if ((skill.getTargetType() == SkillTargetType.TARGET_AURA) || (skill.getTargetType() == SkillTargetType.TARGET_GROUND) || skill.isPotion()) if ((skill.getTargetType() == SkillTargetType.TARGET_AURA) || (skill.getTargetType() == SkillTargetType.TARGET_GROUND) || skill.isPotion())
{ {
target = this; target = this;
} }
else if ((targets == null) || (targets.length == 0)) else if ((targets == null) || targets.isEmpty())
{ {
getAI().notifyEvent(CtrlEvent.EVT_CANCEL); getAI().notifyEvent(CtrlEvent.EVT_CANCEL);
return; return;
} }
else if (((skill.getSkillType() == SkillType.BUFF) || (skill.getSkillType() == SkillType.HEAL) || (skill.getSkillType() == SkillType.COMBATPOINTHEAL) || (skill.getSkillType() == SkillType.COMBATPOINTPERCENTHEAL) || (skill.getSkillType() == SkillType.MANAHEAL) || (skill.getSkillType() == SkillType.REFLECT) || (skill.getSkillType() == SkillType.SEED) || (skill.getTargetType() == SkillTargetType.TARGET_SELF) || (skill.getTargetType() == SkillTargetType.TARGET_PET) || (skill.getTargetType() == SkillTargetType.TARGET_PARTY) || (skill.getTargetType() == SkillTargetType.TARGET_CLAN) || (skill.getTargetType() == SkillTargetType.TARGET_ALLY)) && !skill.isPotion()) else if (((skill.getSkillType() == SkillType.BUFF) || (skill.getSkillType() == SkillType.HEAL) || (skill.getSkillType() == SkillType.COMBATPOINTHEAL) || (skill.getSkillType() == SkillType.COMBATPOINTPERCENTHEAL) || (skill.getSkillType() == SkillType.MANAHEAL) || (skill.getSkillType() == SkillType.REFLECT) || (skill.getSkillType() == SkillType.SEED) || (skill.getTargetType() == SkillTargetType.TARGET_SELF) || (skill.getTargetType() == SkillTargetType.TARGET_PET) || (skill.getTargetType() == SkillTargetType.TARGET_PARTY) || (skill.getTargetType() == SkillTargetType.TARGET_CLAN) || (skill.getTargetType() == SkillTargetType.TARGET_ALLY)) && !skill.isPotion())
{ {
target = (Creature) targets[0]; target = targets.get(0);
} }
else else
{ {
@ -2955,7 +2955,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
class MagicUseTask implements Runnable class MagicUseTask implements Runnable
{ {
WorldObject[] _targets; List<Creature> _targets;
Skill _skill; Skill _skill;
int _coolTime; int _coolTime;
int _phase; int _phase;
@ -2967,7 +2967,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* @param coolTime the cool time * @param coolTime the cool time
* @param phase the phase * @param phase the phase
*/ */
public MagicUseTask(WorldObject[] targets, Skill skill, int coolTime, int phase) public MagicUseTask(List<Creature> targets, Skill skill, int coolTime, int phase)
{ {
_targets = targets; _targets = targets;
_skill = skill; _skill = skill;
@ -7310,9 +7310,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* @param coolTime the cool time * @param coolTime the cool time
* @param instant the instant * @param instant the instant
*/ */
public void onMagicLaunchedTimer(WorldObject[] targets, Skill skill, int coolTime, boolean instant) public void onMagicLaunchedTimer(List<Creature> targets, Skill skill, int coolTime, boolean instant)
{ {
if ((skill == null) || (((targets == null) || (targets.length <= 0)) && (skill.getTargetType() != SkillTargetType.TARGET_AURA))) if ((skill == null) || (((targets == null) || targets.isEmpty()) && (skill.getTargetType() != SkillTargetType.TARGET_AURA)))
{ {
_skillCast = null; _skillCast = null;
enableAllSkills(); enableAllSkills();
@ -7331,22 +7331,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
escapeRange = skill.getSkillRadius(); escapeRange = skill.getSkillRadius();
} }
WorldObject[] finalTargets = null; List<Creature> finalTargets = null;
int skipped = 0; int skipped = 0;
if (escapeRange > 0) if (escapeRange > 0)
{ {
final List<Creature> targetList = new ArrayList<>(); final List<Creature> targetList = new ArrayList<>();
for (int i = 0; (targets != null) && (i < targets.length); i++) if (targets != null)
{ {
if (targets[i] instanceof Creature) for (Creature target : targets)
{ {
if (!Util.checkIfInRange(escapeRange, this, targets[i], true)) if (!Util.checkIfInRange(escapeRange, this, target, true))
{ {
continue; continue;
} }
// Check if the target is behind a wall // Check if the target is behind a wall
if ((skill.getSkillRadius() > 0) && skill.isOffensive() && Config.PATHFINDING && !GeoEngine.getInstance().canSeeTarget(this, targets[i])) if ((skill.getSkillRadius() > 0) && skill.isOffensive() && Config.PATHFINDING && !GeoEngine.getInstance().canSeeTarget(this, target))
{ {
skipped++; skipped++;
continue; continue;
@ -7356,19 +7356,20 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
{ {
if (this instanceof PlayerInstance) if (this instanceof PlayerInstance)
{ {
if (((Creature) targets[i]).isInsidePeaceZone((PlayerInstance) this)) if (target.isInsidePeaceZone((PlayerInstance) this))
{ {
continue; continue;
} }
} }
else if (isInsidePeaceZone(this, targets[i])) else if (isInsidePeaceZone(this, target))
{ {
continue; continue;
} }
} }
targetList.add((Creature) targets[i]); targetList.add(target);
} }
} }
if (targetList.isEmpty() && (skill.getTargetType() != SkillTargetType.TARGET_AURA)) if (targetList.isEmpty() && (skill.getTargetType() != SkillTargetType.TARGET_AURA))
{ {
if (this instanceof PlayerInstance) if (this instanceof PlayerInstance)
@ -7382,7 +7383,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
abortCast(); abortCast();
return; return;
} }
finalTargets = targetList.toArray(new Creature[targetList.size()]); finalTargets = targetList;
} }
else else
{ {
@ -7438,9 +7439,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* @param coolTime the cool time * @param coolTime the cool time
* @param instant the instant * @param instant the instant
*/ */
public void onMagicHitTimer(WorldObject[] targets, Skill skill, int coolTime, boolean instant) public void onMagicHitTimer(List<Creature> targets, Skill skill, int coolTime, boolean instant)
{ {
if ((skill == null) || (((targets == null) || (targets.length <= 0)) && (skill.getTargetType() != SkillTargetType.TARGET_AURA))) if ((skill == null) || (((targets == null) || targets.isEmpty()) && (skill.getTargetType() != SkillTargetType.TARGET_AURA)))
{ {
_skillCast = null; _skillCast = null;
enableAllSkills(); enableAllSkills();
@ -7471,7 +7472,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
mog.exit(true); mog.exit(true);
} }
final WorldObject target = targets == null ? null : targets[0]; final WorldObject target = targets == null ? null : targets.get(0);
if (target != null) if (target != null)
{ {
notifyQuestEventSkillFinished(skill, target); notifyQuestEventSkillFinished(skill, target);
@ -7479,10 +7480,10 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
return; return;
} }
final WorldObject[] targets2 = targets; final List<Creature> targets2 = targets;
try try
{ {
if ((targets2 != null) && (targets2.length != 0)) if ((targets2 != null) && !targets2.isEmpty())
{ {
// Go through targets table // Go through targets table
for (WorldObject target2 : targets2) for (WorldObject target2 : targets2)
@ -7610,7 +7611,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* @param targets the targets * @param targets the targets
* @param skill the skill * @param skill the skill
*/ */
public void onMagicFinalizer(WorldObject[] targets, Skill skill) public void onMagicFinalizer(List<Creature> targets, Skill skill)
{ {
if (skill.isPotion()) if (skill.isPotion())
{ {
@ -7709,7 +7710,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
{ {
try try
{ {
if ((targets != null) && (targets.length > 0)) if (targets != null)
{ {
for (WorldObject target : targets) for (WorldObject target : targets)
{ {
@ -7900,7 +7901,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* @param skill The Skill to use * @param skill The Skill to use
* @param targets The table of WorldObject targets * @param targets The table of WorldObject targets
*/ */
public void callSkill(Skill skill, WorldObject[] targets) public void callSkill(Skill skill, List<Creature> targets)
{ {
try try
{ {
@ -7909,7 +7910,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
return; return;
} }
if ((targets == null) || (targets.length == 0)) if ((targets == null) || targets.isEmpty())
{ {
getAI().notifyEvent(CtrlEvent.EVT_CANCEL); getAI().notifyEvent(CtrlEvent.EVT_CANCEL);
return; return;

View File

@ -644,10 +644,8 @@ public class CubicInstance
final SkillType type = skill.getSkillType(); final SkillType type = skill.getSkillType();
final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getSkillType()); final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getSkillType());
final Creature[] targets = final List<Creature> targets = new ArrayList<>();
{ targets.add(target);
target
};
if ((type == SkillType.PARALYZE) || (type == SkillType.STUN) || (type == SkillType.ROOT) || (type == SkillType.AGGDAMAGE)) if ((type == SkillType.PARALYZE) || (type == SkillType.STUN) || (type == SkillType.ROOT) || (type == SkillType.AGGDAMAGE))
{ {
@ -686,9 +684,9 @@ public class CubicInstance
* @param skill the skill * @param skill the skill
* @param targets the targets * @param targets the targets
*/ */
public void useCubicContinuous(CubicInstance activeCubic, Skill skill, WorldObject[] targets) public void useCubicContinuous(CubicInstance activeCubic, Skill skill, List<Creature> targets)
{ {
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if ((target == null) || target.isDead()) if ((target == null) || target.isDead())
{ {
@ -730,9 +728,9 @@ public class CubicInstance
* @param skill the skill * @param skill the skill
* @param targets the targets * @param targets the targets
*/ */
public void useCubicMdam(CubicInstance activeCubic, Skill skill, WorldObject[] targets) public void useCubicMdam(CubicInstance activeCubic, Skill skill, List<Creature> targets)
{ {
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if (target == null) if (target == null)
{ {
@ -789,9 +787,9 @@ public class CubicInstance
* @param skill the skill * @param skill the skill
* @param targets the targets * @param targets the targets
*/ */
public void useCubicDisabler(SkillType type, CubicInstance activeCubic, Skill skill, WorldObject[] targets) public void useCubicDisabler(SkillType type, CubicInstance activeCubic, Skill skill, List<Creature> targets)
{ {
for (Creature target : (Creature[]) targets) for (Creature target : targets)
{ {
if ((target == null) || target.isDead()) if ((target == null) || target.isDead())
{ {
@ -1042,10 +1040,9 @@ public class CubicInstance
final Creature target = _target; final Creature target = _target;
if ((target != null) && !target.isDead() && ((target.getMaxHp() - target.getCurrentHp()) > skill.getPower())) if ((target != null) && !target.isDead() && ((target.getMaxHp() - target.getCurrentHp()) > skill.getPower()))
{ {
final Creature[] targets = final List<Creature> targets = new ArrayList<>();
{ targets.add(target);
target
};
final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getSkillType()); final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getSkillType());
if (handler != null) if (handler != null)
{ {

View File

@ -18,6 +18,8 @@ package org.l2jmobius.gameserver.model.actor.instance;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.concurrent.ThreadPool;
@ -424,10 +426,8 @@ public class TamedBeastInstance extends FeedableBeastInstance
{ {
final WorldObject oldTarget = owner.getTarget(); final WorldObject oldTarget = owner.getTarget();
owner.setTarget(_tamedBeast); owner.setTarget(_tamedBeast);
final WorldObject[] targets = final List<Creature> targets = new ArrayList<>();
{ targets.add(_tamedBeast);
_tamedBeast
};
// emulate a call to the owner using food, but bypass all checks for range, etc // emulate a call to the owner using food, but bypass all checks for range, etc
// this also causes a call to the AI tasks handling feeding, which may call onReceiveFood as required. // this also causes a call to the AI tasks handling feeding, which may call onReceiveFood as required.

View File

@ -408,8 +408,8 @@ public class Weapon extends Item
{ {
// Get the skill handler corresponding to the skill type // Get the skill handler corresponding to the skill type
final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getSkillType()); final ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getSkillType());
final Creature[] targets = new Creature[1]; final List<Creature> targets = new ArrayList<>();
targets[0] = target; targets.add(target);
// Launch the magic skill and calculate its effects // Launch the magic skill and calculate its effects
if (handler != null) if (handler != null)

View File

@ -143,7 +143,7 @@ public class EffectSignetMDam extends Effect
if (!targets.isEmpty()) if (!targets.isEmpty())
{ {
caster.broadcastPacket(new MagicSkillLaunched(caster, getSkill().getDisplayId(), getSkill().getLevel(), targets.toArray(new Creature[targets.size()]))); caster.broadcastPacket(new MagicSkillLaunched(caster, getSkill().getDisplayId(), getSkill().getLevel(), targets));
for (Creature target : targets) for (Creature target : targets)
{ {
final boolean mcrit = Formulas.calcMCrit(caster.getMCriticalHit(target, getSkill())); final boolean mcrit = Formulas.calcMCrit(caster.getMCriticalHit(target, getSkill()));

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.skills.handlers; package org.l2jmobius.gameserver.model.skills.handlers;
import java.util.List;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
@ -52,7 +54,7 @@ public class SkillCharge extends Skill
} }
@Override @Override
public void useSkill(Creature caster, WorldObject[] targets) public void useSkill(Creature caster, List<Creature> targets)
{ {
if (caster.isAlikeDead()) if (caster.isAlikeDead())
{ {

View File

@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.model.skills.handlers; package org.l2jmobius.gameserver.model.skills.handlers;
import java.util.List;
import org.l2jmobius.gameserver.model.Effect; import org.l2jmobius.gameserver.model.Effect;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@ -60,7 +62,7 @@ public class SkillChargeDmg extends Skill
} }
@Override @Override
public void useSkill(Creature caster, WorldObject[] targets) public void useSkill(Creature caster, List<Creature> targets)
{ {
if (caster.isAlikeDead()) if (caster.isAlikeDead())
{ {

Some files were not shown because too many files have changed in this diff Show More