From 132e448300eb1f312eb6fe0558aa1ad6ae71a969 Mon Sep 17 00:00:00 2001 From: Zoey76 <zoey_76@msn.com> Date: Fri, 28 Nov 2014 17:52:58 -0200 Subject: [PATCH] AI improvements. Patch by: @St3eT Reviewed by: @Zoey76 --- .../scripts/ai/group_template/BeastFarm.java | 2 +- .../scripts/ai/group_template/DenOfEvil.java | 2 +- .../ai/group_template/FeedableBeasts.java | 2 +- .../ai/group_template/MinionSpawnManager.java | 6 +-- .../ai/group_template/NonLethalableNpcs.java | 9 ++-- .../ai/group_template/PlainsOfDion.java | 2 +- .../ai/group_template/PolymorphingAngel.java | 4 +- .../group_template/PolymorphingOnAttack.java | 6 +-- .../scripts/ai/group_template/RangeGuard.java | 12 ++--- .../scripts/ai/group_template/Remnants.java | 3 +- .../scripts/ai/group_template/Sandstorms.java | 11 ++-- .../ai/group_template/SelMahumDrill.java | 7 ++- .../ai/group_template/SelMahumSquad.java | 54 +++++++++---------- .../ai/group_template/SilentValley.java | 2 +- .../ai/group_template/StakatoNest.java | 17 +++--- .../scripts/ai/group_template/SummonPc.java | 1 + .../scripts/ai/group_template/TurekOrcs.java | 2 +- .../data/scripts/ai/individual/Anais.java | 14 +++-- .../game/data/scripts/ai/individual/Core.java | 26 ++++----- .../ai/individual/CrimsonHatuOtis.java | 22 ++++---- .../scripts/ai/individual/EvasGiftBox.java | 3 +- .../scripts/ai/individual/GraveRobbers.java | 19 +------ .../scripts/ai/individual/QueenShyeed.java | 6 +-- .../ai/individual/RagnaOrcCommander.java | 19 +------ .../scripts/ai/individual/RagnaOrcHero.java | 19 +------ .../scripts/ai/individual/RagnaOrcSeer.java | 20 +------ .../data/scripts/ai/individual/SinEater.java | 6 +-- .../scripts/ai/individual/SinWardens.java | 2 +- .../data/scripts/ai/npc/AbstractNpcAI.java | 10 ++++ 29 files changed, 127 insertions(+), 181 deletions(-) diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/BeastFarm.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/BeastFarm.java index 7dafcdcaf8..15bf3397f2 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/BeastFarm.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/BeastFarm.java @@ -46,7 +46,7 @@ import com.l2jserver.gameserver.util.Util; * Updated to Freya. * @author Fulminus, Gigiikun */ -public class BeastFarm extends AbstractNpcAI +public final class BeastFarm extends AbstractNpcAI { private static final int GOLDEN_SPICE = 15474; private static final int CRYSTAL_SPICE = 15475; diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/DenOfEvil.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/DenOfEvil.java index 8afc3d002a..3c115407de 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/DenOfEvil.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/DenOfEvil.java @@ -37,7 +37,7 @@ import com.l2jserver.gameserver.util.Util; * Dummy AI for spawns/respawns only for testing. * @author Gnacik */ -public class DenOfEvil extends AbstractNpcAI +public final class DenOfEvil extends AbstractNpcAI { // private static final int _buffer_id = 32656; protected static final int[] EYE_IDS = diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/FeedableBeasts.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/FeedableBeasts.java index 1b7fc214f6..f72f06a08c 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/FeedableBeasts.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/FeedableBeasts.java @@ -42,7 +42,7 @@ import com.l2jserver.gameserver.util.Util; * Growth-capable mobs: Polymorphing upon successful feeding. * @author Fulminus */ -public class FeedableBeasts extends AbstractNpcAI +public final class FeedableBeasts extends AbstractNpcAI { private static final int GOLDEN_SPICE = 6643; private static final int CRYSTAL_SPICE = 6644; diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/MinionSpawnManager.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/MinionSpawnManager.java index aa04b42d0b..bdfbce11ce 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/MinionSpawnManager.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/MinionSpawnManager.java @@ -430,10 +430,10 @@ public final class MinionSpawnManager extends AbstractNpcAI @Override public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon) { - if (npc instanceof L2MonsterInstance) + if (npc.isMonster()) { - L2MonsterInstance monster = (L2MonsterInstance) npc; - if (!monster.hasMinions()) + final L2MonsterInstance monster = (L2MonsterInstance) npc; + if (!monster.isTeleporting()) { if (getRandom(1, 100) <= npc.getTemplate().getParameters().getInt("SummonPrivateRate", 0)) { diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/NonLethalableNpcs.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/NonLethalableNpcs.java index 5e19273c63..1a2de4ff8a 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/NonLethalableNpcs.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/NonLethalableNpcs.java @@ -25,14 +25,17 @@ import com.l2jserver.gameserver.model.actor.L2Npc; /** * @author UnAfraid */ -public class NonLethalableNpcs extends AbstractNpcAI +public final class NonLethalableNpcs extends AbstractNpcAI { - private static final int HEADQUARTERS = 35062; + private static final int[] NPCS = + { + 35062, // Headquarters + }; public NonLethalableNpcs() { super(NonLethalableNpcs.class.getSimpleName(), "ai/group_template"); - addSpawnId(HEADQUARTERS); + addSpawnId(NPCS); } @Override diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PlainsOfDion.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PlainsOfDion.java index 5db313743e..24c932b827 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PlainsOfDion.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PlainsOfDion.java @@ -69,7 +69,7 @@ public final class PlainsOfDion extends AbstractNpcAI { if (npc.isScriptValue(0)) { - int i = getRandom(5); + final int i = getRandom(5); if (i < 2) { broadcastNpcSay(npc, Say2.NPC_ALL, MONSTERS_MSG[i], player.getName()); diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PolymorphingAngel.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PolymorphingAngel.java index 05f6cf5d84..f171831418 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PolymorphingAngel.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PolymorphingAngel.java @@ -30,7 +30,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; /** * Angel spawns...when one of the angels in the keys dies, the other angel will spawn. */ -public class PolymorphingAngel extends AbstractNpcAI +public final class PolymorphingAngel extends AbstractNpcAI { private static final Map<Integer, Integer> ANGELSPAWNS = new FastMap<>(); static @@ -51,7 +51,7 @@ public class PolymorphingAngel extends AbstractNpcAI @Override public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { - L2Attackable newNpc = (L2Attackable) addSpawn(ANGELSPAWNS.get(npc.getId()), npc); + final L2Attackable newNpc = (L2Attackable) addSpawn(ANGELSPAWNS.get(npc.getId()), npc); newNpc.setRunning(); return super.onKill(npc, killer, isSummon); } diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PolymorphingOnAttack.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PolymorphingOnAttack.java index 297c687bf1..97b97fca27 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/PolymorphingOnAttack.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/PolymorphingOnAttack.java @@ -38,7 +38,7 @@ import com.l2jserver.gameserver.network.serverpackets.CreatureSay; * Polymorphing on attack monsters AI. * @author Slyce */ -public class PolymorphingOnAttack extends AbstractNpcAI +public final class PolymorphingOnAttack extends AbstractNpcAI { private static final Map<Integer, List<Integer>> MOBSPAWNS = new HashMap<>(); static @@ -102,8 +102,8 @@ public class PolymorphingOnAttack extends AbstractNpcAI } npc.deleteMe(); - L2Attackable newNpc = (L2Attackable) addSpawn(tmp.get(0), npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true); - L2Character originalAttacker = isSummon ? attacker.getSummon() : attacker; + final L2Attackable newNpc = (L2Attackable) addSpawn(tmp.get(0), npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true); + final L2Character originalAttacker = isSummon ? attacker.getSummon() : attacker; newNpc.setRunning(); newNpc.addDamageHate(originalAttacker, 0, 500); newNpc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, originalAttacker); diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/RangeGuard.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/RangeGuard.java index eec209a4bb..675e24e5f6 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/RangeGuard.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/RangeGuard.java @@ -18,8 +18,6 @@ */ package ai.group_template; -import java.util.List; - import ai.npc.AbstractNpcAI; import com.l2jserver.gameserver.datatables.NpcData; @@ -39,11 +37,6 @@ public final class RangeGuard extends AbstractNpcAI { // Skill private static SkillHolder ULTIMATE_DEFENSE = new SkillHolder(5044, 3); // NPC Ultimate Defense - - // Misc - private static final int MIN_DISTANCE = 150; - - // Not allowed skills //@formatter:off private static final int[] NOT_ALLOWED_SKILLS = { @@ -83,13 +76,14 @@ public final class RangeGuard extends AbstractNpcAI 1529, // Soul Web }; //@formatter:on + // Misc + private static final int MIN_DISTANCE = 150; private RangeGuard() { super(RangeGuard.class.getSimpleName(), "ai/group_template"); - final List<L2NpcTemplate> monsters = NpcData.getInstance().getAllNpcOfClassType("L2Monster"); - for (L2NpcTemplate template : monsters) + for (L2NpcTemplate template : NpcData.getInstance().getAllNpcOfClassType("L2Monster")) { if (template.getParameters().getInt("LongRangeGuardRate", -1) > 0) { diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/Remnants.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/Remnants.java index f3849f122a..a7659bfeb2 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/Remnants.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/Remnants.java @@ -29,7 +29,7 @@ import com.l2jserver.gameserver.model.skills.Skill; * Remnants AI. * @author DS */ -public class Remnants extends AbstractNpcAI +public final class Remnants extends AbstractNpcAI { private static final int[] NPCS = { @@ -83,7 +83,6 @@ public class Remnants extends AbstractNpcAI } } } - return super.onSkillSee(npc, caster, skill, targets, isSummon); } diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/Sandstorms.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/Sandstorms.java index f71ff05ee7..1f03ba51c3 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/Sandstorms.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/Sandstorms.java @@ -20,9 +20,9 @@ package ai.group_template; import ai.npc.AbstractNpcAI; -import com.l2jserver.gameserver.datatables.SkillData; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; +import com.l2jserver.gameserver.model.holders.SkillHolder; /** * Sandstorms AI. @@ -30,17 +30,22 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; */ public class Sandstorms extends AbstractNpcAI { + // NPCs + private static final int SANDSTORM = 32350; + // Skills + private static final SkillHolder GUST = new SkillHolder(5435, 1); // Gust + public Sandstorms() { super(Sandstorms.class.getSimpleName(), "ai/group_template"); - addAggroRangeEnterId(32350); // Sandstorm + addAggroRangeEnterId(SANDSTORM); // Sandstorm } @Override public String onAggroRangeEnter(L2Npc npc, L2PcInstance player, boolean isSummon) { npc.setTarget(player); - npc.doCast(SkillData.getInstance().getSkill(5435, 1)); + npc.doCast(GUST.getSkill()); return super.onAggroRangeEnter(npc, player, isSummon); } diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/SelMahumDrill.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/SelMahumDrill.java index 6a29066345..8defc9728e 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/SelMahumDrill.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/SelMahumDrill.java @@ -197,7 +197,7 @@ public final class SelMahumDrill extends AbstractNpcAI break; } } - return null; + return super.onAdvEvent(event, npc, player); } @Override @@ -207,7 +207,6 @@ public final class SelMahumDrill extends AbstractNpcAI { npc.broadcastEvent("ATTACKED", 1000, null); } - return super.onAttack(npc, attacker, damage, isSummon); } @@ -258,7 +257,7 @@ public final class SelMahumDrill extends AbstractNpcAI } } } - return null; + return super.onEventReceived(eventName, sender, receiver, reference); } @Override @@ -283,7 +282,7 @@ public final class SelMahumDrill extends AbstractNpcAI // Restore AI handling by core npc.disableCoreAI(false); - return null; + return super.onSpawn(npc); } private void handleSocialAction(L2Npc npc, Actions action, boolean firstCall) diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/SelMahumSquad.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/SelMahumSquad.java index 9264acc8cd..3a46c37572 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/SelMahumSquad.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/SelMahumSquad.java @@ -91,22 +91,22 @@ public final class SelMahumSquad extends AbstractNpcAI { switch (event) { - case "chef_disable_reward": // 2019005 + case "chef_disable_reward": { - npc.getVariables().set("REWARD_TIME_GONE", 1); // i_ai6 = 1 + npc.getVariables().set("REWARD_TIME_GONE", 1); break; } - case "chef_heal_player": // 2019003 + case "chef_heal_player": { healPlayer(npc, player); break; } - case "chef_remove_invul": // 2019006 + case "chef_remove_invul": { if (npc.isMonster()) { npc.setIsInvul(false); - npc.getVariables().remove("INVUL_REMOVE_TIMER_STARTED"); // i_ai5 = 0 + npc.getVariables().remove("INVUL_REMOVE_TIMER_STARTED"); if ((player != null) && !player.isDead() && npc.getKnownList().knowsThePlayer(player)) { attackPlayer((L2MonsterInstance) npc, player); @@ -145,12 +145,12 @@ public final class SelMahumSquad extends AbstractNpcAI npc.setIsRunning(false); npc.setTarget(npc); - if (npc.isNoRndWalk()) // i_ai0 == 1 + if (npc.isNoRndWalk()) { npc.doCast(SkillData.getInstance().getSkill(6331, 1)); npc.setDisplayEffect(MAHUM_EFFECT_SLEEP); } - if (npc.getVariables().getInt("BUSY_STATE") == 1) // Eating - i_ai3 = 1 + if (npc.getVariables().getInt("BUSY_STATE") == 1) // Eating { npc.doCast(SkillData.getInstance().getSkill(6332, 1)); npc.setDisplayEffect(MAHUM_EFFECT_EAT); @@ -185,36 +185,36 @@ public final class SelMahumSquad extends AbstractNpcAI break; } } - return null; + return super.onAdvEvent(event, npc, player); } @Override public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon, Skill skill) { - if ((npc.getId() == CHEF) && (npc.getVariables().getInt("BUSY_STATE") == 0)) // i_ai2 == 0 + if ((npc.getId() == CHEF) && (npc.getVariables().getInt("BUSY_STATE") == 0)) { - if (npc.getVariables().getInt("INVUL_REMOVE_TIMER_STARTED") == 0) // i_ai5 == 0 + if (npc.getVariables().getInt("INVUL_REMOVE_TIMER_STARTED") == 0) { - startQuestTimer("chef_remove_invul", 180000, npc, attacker); // 2019004 - startQuestTimer("chef_disable_reward", 60000, npc, null); // 2019005 + startQuestTimer("chef_remove_invul", 180000, npc, attacker); + startQuestTimer("chef_disable_reward", 60000, npc, null); npc.getVariables().set("INVUL_REMOVE_TIMER_STARTED", 1); } - startQuestTimer("chef_heal_player", 1000, npc, attacker); // 2019003 - startQuestTimer("chef_set_invul", 60000, npc, null); // 2019006 + startQuestTimer("chef_heal_player", 1000, npc, attacker); + startQuestTimer("chef_set_invul", 60000, npc, null); npc.getVariables().set("BUSY_STATE", 1); } else if (Util.contains(SQUAD_LEADERS, npc.getId())) { handlePreAttackMotion(npc); } - return null; + return super.onAttack(npc, attacker, damage, isSummon, skill); } @Override public String onFactionCall(L2Npc npc, L2Npc caller, L2PcInstance attacker, boolean isSummon) { handlePreAttackMotion(npc); - return null; + return super.onFactionCall(npc, caller, attacker, isSummon); } @Override @@ -295,8 +295,7 @@ public final class SelMahumSquad extends AbstractNpcAI break; } } - - return null; + return super.onEventReceived(eventName, sender, receiver, reference); } @Override @@ -310,8 +309,7 @@ public final class SelMahumSquad extends AbstractNpcAI cancelQuestTimer("chef_disable_reward", npc, null); cancelQuestTimer("chef_heal_player", npc, null); cancelQuestTimer("chef_set_invul", npc, null); - - return null; + return super.onKill(npc, killer, isSummon); } @Override @@ -339,8 +337,7 @@ public final class SelMahumSquad extends AbstractNpcAI npc.doCast(SkillData.getInstance().getSkill(6688, 1)); npc.broadcastEvent("SCE_SOUP_FAILURE", 600, caster); } - - return null; + return super.onSkillSee(npc, caster, skill, targets, isSummon); } @Override @@ -350,18 +347,16 @@ public final class SelMahumSquad extends AbstractNpcAI { npc.setIsInvul(false); } - else if (npc.getId() == FIRE) { startQuestTimer("fire", 1000, npc, null); } - else if (Util.contains(SQUAD_LEADERS, npc.getId())) { npc.setDisplayEffect(3); npc.setIsNoRndWalk(false); } - return null; + return super.onSpawn(npc); } @Override @@ -371,8 +366,7 @@ public final class SelMahumSquad extends AbstractNpcAI { healPlayer(npc, player); } - - return null; + return super.onSpellFinished(npc, player, skill); } private void healPlayer(L2Npc npc, L2PcInstance player) @@ -385,8 +379,8 @@ public final class SelMahumSquad extends AbstractNpcAI else { cancelQuestTimer("chef_set_invul", npc, null); - npc.getVariables().remove("BUSY_STATE"); // i_ai2 = 0 - npc.getVariables().remove("INVUL_REMOVE_TIMER_STARTED"); // i_ai5 = 0 + npc.getVariables().remove("BUSY_STATE"); + npc.getVariables().remove("INVUL_REMOVE_TIMER_STARTED"); npc.setIsRunning(false); } } @@ -395,7 +389,7 @@ public final class SelMahumSquad extends AbstractNpcAI { cancelQuestTimer("remove_effects", attacked, null); attacked.getVariables().remove("BUSY_STATE"); - attacked.setIsNoRndWalk(false); // i_ai0 == 0 + attacked.setIsNoRndWalk(false); attacked.setDisplayEffect(MAHUM_EFFECT_NONE); if (attacked.getRightHandItem() == OHS_Weapon) { diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/SilentValley.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/SilentValley.java index 5b8d544c27..6d8d4c1e52 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/SilentValley.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/SilentValley.java @@ -34,7 +34,7 @@ import com.l2jserver.gameserver.network.clientpackets.Say2; * Silent Valley AI * @author malyelfik */ -public class SilentValley extends AbstractNpcAI +public final class SilentValley extends AbstractNpcAI { // Skills private static final SkillHolder BETRAYAL = new SkillHolder(6033, 1); // Treasure Seeker's Betrayal diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/StakatoNest.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/StakatoNest.java index b1385aba8a..2b0005a166 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/StakatoNest.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/StakatoNest.java @@ -38,7 +38,7 @@ import com.l2jserver.gameserver.util.Util; * Stakato Nest AI. * @author Gnacik */ -public class StakatoNest extends AbstractNpcAI +public final class StakatoNest extends AbstractNpcAI { // @formatter:off // List of all mobs just for register @@ -93,11 +93,11 @@ public class StakatoNest extends AbstractNpcAI @Override public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon) { - L2MonsterInstance mob = (L2MonsterInstance) npc; + final L2MonsterInstance mob = (L2MonsterInstance) npc; if ((mob.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (mob.getCurrentHp() < (mob.getMaxHp() * 0.3))) { - L2MonsterInstance _follower = checkMinion(npc); + final L2MonsterInstance _follower = checkMinion(npc); if (_follower != null) { @@ -121,7 +121,7 @@ public class StakatoNest extends AbstractNpcAI @Override public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { - L2MonsterInstance monster; + final L2MonsterInstance monster; switch (npc.getId()) { case STAKATO_NURSE: @@ -186,7 +186,7 @@ public class StakatoNest extends AbstractNpcAI if (Util.contains(COCOONS, npc.getId()) && Util.contains(targets, npc) && (skill.getId() == GROWTH_ACCELERATOR)) { npc.doDie(caster); - L2Npc spawned = addSpawn(STAKATO_CHIEF, npc.getX(), npc.getY(), npc.getZ(), Util.calculateHeadingFrom(npc, caster), false, 0, true); + final L2Npc spawned = addSpawn(STAKATO_CHIEF, npc.getX(), npc.getY(), npc.getZ(), Util.calculateHeadingFrom(npc, caster), false, 0, true); attackPlayer(caster, spawned); } return super.onSkillSee(npc, caster, skill, targets, isSummon); @@ -214,7 +214,7 @@ public class StakatoNest extends AbstractNpcAI { npc.getSpawn().decreaseCount(npc); npc.deleteMe(); - L2Npc _spawned = addSpawn(npcId, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 0, true); + final L2Npc _spawned = addSpawn(npcId, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 0, true); attackPlayer(player, _spawned); } return super.onAdvEvent(event, npc, player); @@ -222,16 +222,15 @@ public class StakatoNest extends AbstractNpcAI private static L2MonsterInstance checkMinion(L2Npc npc) { - L2MonsterInstance mob = (L2MonsterInstance) npc; + final L2MonsterInstance mob = (L2MonsterInstance) npc; if (mob.hasMinions()) { - List<L2MonsterInstance> minion = mob.getMinionList().getSpawnedMinions(); + final List<L2MonsterInstance> minion = mob.getMinionList().getSpawnedMinions(); if ((minion != null) && !minion.isEmpty() && (minion.get(0) != null) && !minion.get(0).isDead()) { return minion.get(0); } } - return null; } diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/SummonPc.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/SummonPc.java index a3aa94f54b..1c23a6621b 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/SummonPc.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/SummonPc.java @@ -60,6 +60,7 @@ public final class SummonPc extends AbstractNpcAI npc.setTarget(attacker); npc.doCast(SUMMON_PC.getSkill()); } + if ((SUMMON_PC.getSkill().getMpConsume() < npc.getCurrentMp()) && (SUMMON_PC.getSkill().getHpConsume() < npc.getCurrentHp()) && !npc.isSkillDisabled(SUMMON_PC.getSkill())) { npc.setTarget(attacker); diff --git a/L2J_DataPack/dist/game/data/scripts/ai/group_template/TurekOrcs.java b/L2J_DataPack/dist/game/data/scripts/ai/group_template/TurekOrcs.java index 1b6312627b..e68dc9ba83 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/group_template/TurekOrcs.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/group_template/TurekOrcs.java @@ -103,7 +103,7 @@ public final class TurekOrcs extends AbstractNpcAI ((L2Attackable) receiver).addDamageHate(reference.getActingPlayer(), 0, 99999); receiver.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, reference.getActingPlayer()); } - return null; + return super.onEventReceived(eventName, sender, receiver, reference); } @Override diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/Anais.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/Anais.java index 84bcea42bd..20d2db44bd 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/individual/Anais.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/Anais.java @@ -83,20 +83,21 @@ public final class Anais extends AbstractNpcAI switch (event) { case "CHECK": + { if (!npc.isAttackingNow()) { cancelQuestTimer("CHECK", npc, null); } if ((_current != null) || (_pot < 4)) { - Map<Integer, L2PcInstance> players = npc.getKnownList().getKnownPlayers(); - L2PcInstance target = players.get(getRandom(players.size() - 1)); + final Map<Integer, L2PcInstance> players = npc.getKnownList().getKnownPlayers(); + final L2PcInstance target = players.get(getRandom(players.size() - 1)); _nextTarget = target; if (_nextTarget == null) { _nextTarget = (L2PcInstance) npc.getTarget(); } - L2Npc b = _divineBurners.get(_pot); + final L2Npc b = _divineBurners.get(_pot); _pot = _pot + 1; b.setDisplayEffect(1); b.setIsRunning(false); @@ -109,7 +110,9 @@ public final class Anais extends AbstractNpcAI ward.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, _nextTarget); } break; + } case "GUARD_ATTACK": + { if (_nextTarget != null) { final double distance = npc.calculateDistance(_nextTarget, false, false); @@ -124,7 +127,9 @@ public final class Anais extends AbstractNpcAI } } break; + } case "SUICIDE": + { npc.doCast(DIVINE_NOVA.getSkill()); cancelQuestTimer("GUARD_ATTACK", npc, _nextTarget); if (_current != null) @@ -135,8 +140,9 @@ public final class Anais extends AbstractNpcAI } npc.doDie(null); break; + } } - return null; + return super.onAdvEvent(event, npc, player); } @Override diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/Core.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/Core.java index 2bdcf17001..2550149462 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/individual/Core.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/Core.java @@ -64,8 +64,8 @@ public final class Core extends AbstractNpcAI registerMobs(CORE, DEATH_KNIGHT, DOOM_WRAITH, SUSCEPTOR); _FirstAttacked = false; - StatsSet info = GrandBossManager.getInstance().getStatsSet(CORE); - int status = GrandBossManager.getInstance().getBossStatus(CORE); + final StatsSet info = GrandBossManager.getInstance().getStatsSet(CORE); + final int status = GrandBossManager.getInstance().getBossStatus(CORE); if (status == DEAD) { // load the unlock date and time for Core from DB @@ -86,18 +86,18 @@ public final class Core extends AbstractNpcAI } else { - String test = loadGlobalQuestVar("Core_Attacked"); + final String test = loadGlobalQuestVar("Core_Attacked"); if (test.equalsIgnoreCase("true")) { _FirstAttacked = true; } - int loc_x = info.getInt("loc_x"); - int loc_y = info.getInt("loc_y"); - int loc_z = info.getInt("loc_z"); - int heading = info.getInt("heading"); - int hp = info.getInt("currentHP"); - int mp = info.getInt("currentMP"); - L2GrandBossInstance core = (L2GrandBossInstance) addSpawn(CORE, loc_x, loc_y, loc_z, heading, false, 0); + final int loc_x = info.getInt("loc_x"); + final int loc_y = info.getInt("loc_y"); + final int loc_z = info.getInt("loc_z"); + final int heading = info.getInt("heading"); + final int hp = info.getInt("currentHP"); + final int mp = info.getInt("currentMP"); + final L2GrandBossInstance core = (L2GrandBossInstance) addSpawn(CORE, loc_x, loc_y, loc_z, heading, false, 0); core.setCurrentHpMp(hp, mp); spawnBoss(core); } @@ -117,14 +117,14 @@ public final class Core extends AbstractNpcAI L2Attackable mob; for (int i = 0; i < 5; i++) { - int x = 16800 + (i * 360); + final int x = 16800 + (i * 360); mob = (L2Attackable) addSpawn(DEATH_KNIGHT, x, 110000, npc.getZ(), 280 + getRandom(40), false, 0); mob.setIsRaidMinion(true); Minions.add(mob); mob = (L2Attackable) addSpawn(DEATH_KNIGHT, x, 109000, npc.getZ(), 280 + getRandom(40), false, 0); mob.setIsRaidMinion(true); Minions.add(mob); - int x2 = 16800 + (i * 600); + final int x2 = 16800 + (i * 600); mob = (L2Attackable) addSpawn(DOOM_WRAITH, x2, 109300, npc.getZ(), 280 + getRandom(40), false, 0); mob.setIsRaidMinion(true); Minions.add(mob); @@ -193,7 +193,7 @@ public final class Core extends AbstractNpcAI @Override public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { - int npcId = npc.getId(); + final int npcId = npc.getId(); if (npcId == CORE) { int objId = npc.getObjectId(); diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/CrimsonHatuOtis.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/CrimsonHatuOtis.java index 241670092d..125b7fddd7 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/individual/CrimsonHatuOtis.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/CrimsonHatuOtis.java @@ -50,25 +50,29 @@ public final class CrimsonHatuOtis extends AbstractNpcAI { switch (event) { - case "skill": + case "SKILL": + { if (npc.isDead()) { - cancelQuestTimer("skill", npc, null); + cancelQuestTimer("SKILL", npc, null); return null; } npc.setTarget(player); npc.doCast(BOSS_SPINING_SLASH.getSkill()); - startQuestTimer("skill", 60000, npc, null); + startQuestTimer("SKILL", 60000, npc, null); break; - case "buff": + } + case "BUFF": + { if (npc.isScriptValue(2)) { npc.setTarget(npc); npc.doCast(BOSS_HASTE.getSkill()); } break; + } } - return null; + return super.onAdvEvent(event, npc, player); } @Override @@ -77,13 +81,13 @@ public final class CrimsonHatuOtis extends AbstractNpcAI if (npc.isScriptValue(0)) { npc.setScriptValue(1); - startQuestTimer("skill", 5000, npc, null); + startQuestTimer("SKILL", 5000, npc, null); } else if (npc.isScriptValue(1) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3))) { broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.IVE_HAD_IT_UP_TO_HERE_WITH_YOU_ILL_TAKE_CARE_OF_YOU); npc.setScriptValue(2); - startQuestTimer("buff", 1000, npc, null); + startQuestTimer("BUFF", 1000, npc, null); } return super.onAttack(npc, attacker, damage, isSummon); } @@ -91,8 +95,8 @@ public final class CrimsonHatuOtis extends AbstractNpcAI @Override public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon) { - cancelQuestTimer("skill", npc, null); - cancelQuestTimer("buff", npc, null); + cancelQuestTimer("SKILL", npc, null); + cancelQuestTimer("BUFF", npc, null); return super.onKill(npc, player, isSummon); } diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/EvasGiftBox.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/EvasGiftBox.java index 697153fb22..aed0c40c48 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/individual/EvasGiftBox.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/EvasGiftBox.java @@ -55,7 +55,8 @@ public final class EvasGiftBox extends AbstractNpcAI { npc.dropItem(killer, CRYSTAL); } - else if (getRandom(100) < 33) + + if (getRandom(100) < 33) { npc.dropItem(killer, CORAL); } diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/GraveRobbers.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/GraveRobbers.java index 16f05d2e22..631d00e393 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/individual/GraveRobbers.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/GraveRobbers.java @@ -21,8 +21,6 @@ package ai.individual; import ai.npc.AbstractNpcAI; import com.l2jserver.gameserver.model.actor.L2Npc; -import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance; -import com.l2jserver.gameserver.model.holders.MinionHolder; /** * Grove Robber's AI.<br> @@ -46,25 +44,10 @@ public final class GraveRobbers extends AbstractNpcAI @Override public String onSpawn(L2Npc npc) { - if (getRandom(2) == 0) - { - spawnMinions(npc, "Privates1"); - } - else - { - spawnMinions(npc, "Privates2"); - } + spawnMinions(npc, "Privates" + getRandom(1, 2)); return super.onSpawn(npc); } - private void spawnMinions(final L2Npc npc, final String spawnName) - { - for (MinionHolder is : npc.getTemplate().getParameters().getMinionList(spawnName)) - { - addMinion((L2MonsterInstance) npc, is.getId()); - } - } - public static void main(String[] args) { new GraveRobbers(); diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/QueenShyeed.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/QueenShyeed.java index f3e09173e5..e38e753788 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/individual/QueenShyeed.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/QueenShyeed.java @@ -84,8 +84,8 @@ public final class QueenShyeed extends AbstractNpcAI private void spawnShyeed() { - String respawn = loadGlobalQuestVar("Respawn"); - long remain = (!respawn.isEmpty()) ? Long.parseLong(respawn) - System.currentTimeMillis() : 0; + final String respawn = loadGlobalQuestVar("Respawn"); + final long remain = (!respawn.isEmpty()) ? Long.parseLong(respawn) - System.currentTimeMillis() : 0; if (remain > 0) { startQuestTimer("respawn", remain, null, null); @@ -100,7 +100,7 @@ public final class QueenShyeed extends AbstractNpcAI private void startRespawn() { - int respawnTime = RESPAWN - getRandom(RANDOM_RESPAWN); + final int respawnTime = RESPAWN - getRandom(RANDOM_RESPAWN); saveGlobalQuestVar("Respawn", Long.toString(System.currentTimeMillis() + respawnTime)); startQuestTimer("respawn", respawnTime, null, null); MOB_BUFF_ZONE.setEnabled(false); diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/RagnaOrcCommander.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/RagnaOrcCommander.java index 99291385a7..26192184d0 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/individual/RagnaOrcCommander.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/RagnaOrcCommander.java @@ -21,8 +21,6 @@ package ai.individual; import ai.npc.AbstractNpcAI; import com.l2jserver.gameserver.model.actor.L2Npc; -import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance; -import com.l2jserver.gameserver.model.holders.MinionHolder; /** * Ragna Orc Commander AI. @@ -42,25 +40,10 @@ public final class RagnaOrcCommander extends AbstractNpcAI public String onSpawn(L2Npc npc) { spawnMinions(npc, "Privates1"); - if (getRandom(100) < 50) - { - spawnMinions(npc, "Privates2"); - } - else - { - spawnMinions(npc, "Privates3"); - } + spawnMinions(npc, getRandomBoolean() ? "Privates2" : "Privates3"); return super.onSpawn(npc); } - private void spawnMinions(final L2Npc npc, final String spawnName) - { - for (MinionHolder is : npc.getTemplate().getParameters().getMinionList(spawnName)) - { - addMinion((L2MonsterInstance) npc, is.getId()); - } - } - public static void main(String[] args) { new RagnaOrcCommander(); diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/RagnaOrcHero.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/RagnaOrcHero.java index 0da58ba149..57cb6f4ee3 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/individual/RagnaOrcHero.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/RagnaOrcHero.java @@ -21,8 +21,6 @@ package ai.individual; import ai.npc.AbstractNpcAI; import com.l2jserver.gameserver.model.actor.L2Npc; -import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance; -import com.l2jserver.gameserver.model.holders.MinionHolder; /** * Ragna Orc Hero AI. @@ -41,25 +39,10 @@ public final class RagnaOrcHero extends AbstractNpcAI @Override public String onSpawn(L2Npc npc) { - if (getRandom(100) < 70) - { - spawnMinions(npc, "Privates1"); - } - else - { - spawnMinions(npc, "Privates2"); - } + spawnMinions(npc, getRandom(100) < 70 ? "Privates1" : "Privates2"); return super.onSpawn(npc); } - private void spawnMinions(final L2Npc npc, final String spawnName) - { - for (MinionHolder is : npc.getTemplate().getParameters().getMinionList(spawnName)) - { - addMinion((L2MonsterInstance) npc, is.getId()); - } - } - public static void main(String[] args) { new RagnaOrcHero(); diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/RagnaOrcSeer.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/RagnaOrcSeer.java index ed1e072967..b2bcdac7d6 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/individual/RagnaOrcSeer.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/RagnaOrcSeer.java @@ -21,8 +21,6 @@ package ai.individual; import ai.npc.AbstractNpcAI; import com.l2jserver.gameserver.model.actor.L2Npc; -import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance; -import com.l2jserver.gameserver.model.holders.MinionHolder; /** * Ragna Orc Seer AI. @@ -41,26 +39,10 @@ public final class RagnaOrcSeer extends AbstractNpcAI @Override public String onSpawn(L2Npc npc) { - - if (getRandom(100) < 50) - { - spawnMinions(npc, "Privates1"); - } - else - { - spawnMinions(npc, "Privates2"); - } + spawnMinions(npc, "Privates" + getRandom(1, 2)); return super.onSpawn(npc); } - private void spawnMinions(final L2Npc npc, final String spawnName) - { - for (MinionHolder is : npc.getTemplate().getParameters().getMinionList(spawnName)) - { - addMinion((L2MonsterInstance) npc, is.getId()); - } - } - public static void main(String[] args) { new RagnaOrcSeer(); diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/SinEater.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/SinEater.java index cf46097096..b238055ec9 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/individual/SinEater.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/SinEater.java @@ -53,7 +53,7 @@ public final class SinEater extends AbstractNpcAI @Override public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { - if (event.equals("2001") && (player != null) && (player.getSummon() != null)) + if (event.equals("TALK") && (player != null) && (player.getSummon() != null)) { if (getRandom(100) < 30) { @@ -81,7 +81,7 @@ public final class SinEater extends AbstractNpcAI broadcastSummonSay(summon, NpcStringId.OH_THIS_IS_DRAGGING_ON_TOO_LONG_AT_THIS_RATE_I_WONT_MAKE_IT_HOME_BEFORE_THE_SEVEN_SEALS_ARE_BROKEN); } } - startQuestTimer("2001", 60000, null, player); + startQuestTimer("TALK", 60000, null, player); } return super.onAdvEvent(event, npc, player); } @@ -137,7 +137,7 @@ public final class SinEater extends AbstractNpcAI public void onSummonSpawn(L2Summon summon) { broadcastSummonSay(summon, getRandomBoolean() ? NpcStringId.HEY_IT_SEEMS_LIKE_YOU_NEED_MY_HELP_DOESNT_IT : NpcStringId.ALMOST_GOT_IT_OUCH_STOP_DAMN_THESE_BLOODY_MANACLES); - startQuestTimer("2001", 60000, null, summon.getOwner()); + startQuestTimer("TALK", 60000, null, summon.getOwner()); } @Override diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/SinWardens.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/SinWardens.java index d3294294e4..8910ce2bad 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/individual/SinWardens.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/SinWardens.java @@ -67,7 +67,7 @@ public final class SinWardens extends AbstractNpcAI { if (npc.isMinion()) { - L2MonsterInstance master = ((L2MonsterInstance) npc).getLeader(); + final L2MonsterInstance master = ((L2MonsterInstance) npc).getLeader(); if ((master != null) && !master.isDead()) { int killedCount = killedMinionsCount.containsKey(master.getObjectId()) ? killedMinionsCount.get(master.getObjectId()) : 0; diff --git a/L2J_DataPack/dist/game/data/scripts/ai/npc/AbstractNpcAI.java b/L2J_DataPack/dist/game/data/scripts/ai/npc/AbstractNpcAI.java index 33532636cc..8fbfac8acb 100644 --- a/L2J_DataPack/dist/game/data/scripts/ai/npc/AbstractNpcAI.java +++ b/L2J_DataPack/dist/game/data/scripts/ai/npc/AbstractNpcAI.java @@ -25,7 +25,9 @@ import com.l2jserver.gameserver.model.actor.L2Attackable; import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.L2Playable; +import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; +import com.l2jserver.gameserver.model.holders.MinionHolder; import com.l2jserver.gameserver.model.holders.SkillHolder; import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.network.NpcStringId; @@ -208,4 +210,12 @@ public abstract class AbstractNpcAI extends Quest npc.setTarget(target); npc.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, skill.getSkill(), target); } + + public void spawnMinions(final L2Npc npc, final String spawnName) + { + for (MinionHolder is : npc.getTemplate().getParameters().getMinionList(spawnName)) + { + addMinion((L2MonsterInstance) npc, is.getId()); + } + } } \ No newline at end of file -- GitLab