From b822877dd902d9babdf7095c3072bfb33d06c00f Mon Sep 17 00:00:00 2001 From: St3eT <St3eT@users.noreply.github.com> Date: Sat, 1 Mar 2014 19:35:57 +0000 Subject: [PATCH] BETA: Updated '''!DragonValley''' AI. * Reviewed by: Zoey76, Adry_85 --- .../ai/group_template/DragonValley.java | 46 +++++++++++++------ .../game/data/stats/skills/06800-06899.xml | 1 - 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/DragonValley.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/DragonValley.java index 5f5041dc13..919492d4cf 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/DragonValley.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/DragonValley.java @@ -22,7 +22,6 @@ import java.util.EnumMap; import ai.npc.AbstractNpcAI; -import com.l2jserver.gameserver.ai.CtrlIntention; import com.l2jserver.gameserver.datatables.SpawnTable; import com.l2jserver.gameserver.model.L2Spawn; import com.l2jserver.gameserver.model.actor.L2Attackable; @@ -31,6 +30,7 @@ import com.l2jserver.gameserver.model.actor.L2Playable; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.base.ClassId; import com.l2jserver.gameserver.model.holders.SkillHolder; +import com.l2jserver.gameserver.model.skills.Skill; import com.l2jserver.gameserver.util.Util; /** @@ -76,17 +76,14 @@ public final class DragonValley extends AbstractNpcAI 22861, // Hard Scorpion Bones 22862, // Drakos Hunter }; - // Items private static final int GREATER_HERB_OF_MANA = 8604; private static final int SUPERIOR_HERB_OF_MANA = 8605; - // Skills private static final SkillHolder SELF_DESTRUCTION = new SkillHolder(6850, 1); private static final SkillHolder MORALE_BOOST1 = new SkillHolder(6885, 1); private static final SkillHolder MORALE_BOOST2 = new SkillHolder(6885, 2); private static final SkillHolder MORALE_BOOST3 = new SkillHolder(6885, 3); - // Misc private static final int MIN_DISTANCE = 1500; private static final int MIN_MEMBERS = 3; @@ -141,6 +138,7 @@ public final class DragonValley extends AbstractNpcAI addKillId(SPOIL_REACT_MONSTER); addSpawnId(EXPLODING_ORC_GHOST); addSpawnId(SPOIL_REACT_MONSTER); + addSpellFinishedId(EXPLODING_ORC_GHOST); for (int npcId : SPOIL_REACT_MONSTER) { @@ -159,12 +157,19 @@ public final class DragonValley extends AbstractNpcAI @Override public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { - if (event.equals("SelfDestruction") && (npc != null) && !npc.isDead()) + if (event.equals("SELF_DESTRUCTION") && (npc != null) && !npc.isDead()) { - npc.abortAttack(); - npc.disableCoreAI(true); - npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); - npc.doCast(SELF_DESTRUCTION.getSkill()); + final L2Playable playable = npc.getVariables().getObject("playable", L2Playable.class); + + if ((playable != null) && (npc.calculateDistance(playable, true, false) < 250)) + { + npc.disableCoreAI(true); + npc.doCast(SELF_DESTRUCTION.getSkill()); + } + else if (playable != null) + { + startQuestTimer("SELF_DESTRUCTION", 3000, npc, null); + } } return super.onAdvEvent(event, npc, player); } @@ -214,7 +219,7 @@ public final class DragonValley extends AbstractNpcAI ((L2Attackable) npc).setOnKillDelay(0); if (npc.getId() == EXPLODING_ORC_GHOST) { - startQuestTimer("SelfDestruction", 3000, npc, null); + startQuestTimer("SELF_DESTRUCTION", 3000, npc, null); } else if (Util.contains(SPAWN_ANIMATION, npc.getId())) { @@ -223,6 +228,16 @@ public final class DragonValley extends AbstractNpcAI return super.onSpawn(npc); } + @Override + public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill) + { + if (skill == SELF_DESTRUCTION.getSkill()) + { + npc.doDie(player); + } + return super.onSpellFinished(npc, player, skill); + } + private void manageMoraleBoost(L2PcInstance player, L2Npc npc) { double points = 0; @@ -232,7 +247,7 @@ public final class DragonValley extends AbstractNpcAI { for (L2PcInstance member : player.getParty().getMembers()) { - if ((member.getLevel() >= MIN_LVL) && (member.getClassId().level() >= CLASS_LVL) && (Util.calculateDistance(npc, member, true, false) < MIN_DISTANCE)) + if ((member.getLevel() >= MIN_LVL) && (member.getClassId().level() >= CLASS_LVL) && (npc.calculateDistance(member, true, false) < MIN_DISTANCE)) { points += CLASS_POINTS.get(member.getClassId()); } @@ -253,7 +268,7 @@ public final class DragonValley extends AbstractNpcAI for (L2PcInstance member : player.getParty().getMembers()) { - if (Util.calculateDistance(npc, member, true, false) < MIN_DISTANCE) + if (npc.calculateDistance(member, true, false) < MIN_DISTANCE) { switch (moraleBoostLv) { @@ -278,12 +293,13 @@ public final class DragonValley extends AbstractNpcAI { int val = npc.getScriptValue(); final L2Playable attacker = isSummon ? player.getSummon() : player; - final L2Attackable Ghost1 = (L2Attackable) addSpawn(getRandom(EXPLODING_ORC_GHOST, WRATHFUL_ORC_GHOST), npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true); + final L2Attackable Ghost1 = (L2Attackable) addSpawn(EXPLODING_ORC_GHOST, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true); + Ghost1.getVariables().set("playable", attacker); attackPlayer(Ghost1, attacker); val++; - if ((val < 2) && (getRandom(100) < 10)) + if ((val < 2) && (getRandomBoolean())) { - final L2Attackable Ghost2 = (L2Attackable) addSpawn(getRandom(EXPLODING_ORC_GHOST, WRATHFUL_ORC_GHOST), npc.getX(), npc.getY(), npc.getZ() + 20, npc.getHeading(), false, 0, false); + final L2Attackable Ghost2 = (L2Attackable) addSpawn(WRATHFUL_ORC_GHOST, npc.getX(), npc.getY(), npc.getZ() + 20, npc.getHeading(), false, 0, false); attackPlayer(Ghost2, attacker); val++; } diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/06800-06899.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/06800-06899.xml index 62dd491191..f04ba0c2fc 100644 --- a/L2J_DataPack_BETA/dist/game/data/stats/skills/06800-06899.xml +++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/06800-06899.xml @@ -592,7 +592,6 @@ <set name="affectRange" val="200" /> <set name="effectPoint" val="-100" /> <set name="hitTime" val="3000" /> - <set name="isSuicideAttack" val="true" /> <set name="magicLvl" val="81" /> <set name="operateType" val="A1" /> <set name="power" val="3000" /> -- GitLab