package ai; import org.slf4j.LoggerFactory; import com.aionemu.gameserver.ai.AIName; import com.aionemu.gameserver.ai.NpcAI; import com.aionemu.gameserver.model.gameobjects.Creature; import com.aionemu.gameserver.model.gameobjects.Npc; import com.aionemu.gameserver.model.skill.NpcSkillList; import com.aionemu.gameserver.model.templates.npcskill.NpcSkillConditionTemplate; import com.aionemu.gameserver.skillengine.SkillEngine; import com.aionemu.gameserver.skillengine.model.Effect; import com.aionemu.gameserver.utils.ThreadPoolManager; /** * @author Yeats */ @AIName("useSkillAndDie") public class UseSkillAndDieAI extends NpcAI { private volatile boolean canDie = true; public UseSkillAndDieAI(Npc owner) { super(owner); } @Override public void handleSpawned() { super.handleSpawned(); scheduleSkill(); } private void scheduleSkill() { NpcSkillList skillList = getOwner().getSkillList(); if (skillList.getNpcSkills().isEmpty()) { LoggerFactory.getLogger(getClass()).warn(getOwner() + " has no skill list"); getOwner().getController().delete(); return; } NpcSkillConditionTemplate conditionTemplate = skillList.getNpcSkills().get(0).getConditionTemplate(); if (conditionTemplate != null) { canDie = conditionTemplate.canDie(); ThreadPoolManager.getInstance().schedule(() -> { if (getOwner().isDead() || !getOwner().isSpawned()) return; if (getCreatorId() == 0 || getKnownList().getObject(getCreatorId()) instanceof Creature creator && !creator.isDead()) { SkillEngine.getInstance() .getSkill(getOwner(), skillList.getNpcSkills().get(0).getSkillId(), skillList.getNpcSkills().get(0).getSkillLevel(), getOwner()) .useSkill(); } ThreadPoolManager.getInstance().schedule(() -> getOwner().getController().delete(), conditionTemplate.getDespawnTime()); }, conditionTemplate.getDelay()); } } @Override public float modifyDamage(Creature attacker, float damage, Effect effect) { return canDie ? damage : 0; } @Override public void handleDied() { super.handleDied(); getOwner().getController().delete(); } }