diff --git a/src/main/java/com/l2jserver/datapack/ai/individual/GiganticGolem.java b/src/main/java/com/l2jserver/datapack/ai/individual/GiganticGolem.java index 446f9de65fb585721bff3d71bfa8d8db36e26454..730bb49b377902178fc624830b37ca93ac61ae7c 100644 --- a/src/main/java/com/l2jserver/datapack/ai/individual/GiganticGolem.java +++ b/src/main/java/com/l2jserver/datapack/ai/individual/GiganticGolem.java @@ -38,11 +38,11 @@ import com.l2jserver.gameserver.network.serverpackets.SpecialCamera; /** * Gigantic Golem AI. - * @author Kerberos, Maneco2 + * @author Kerberos + * @author Maneco2 * @version 2.6.2.0 */ -public class GiganticGolem extends AbstractNpcAI -{ +public class GiganticGolem extends AbstractNpcAI { // NPCs private static final int DR_CHAOS = 32033; private static final int GIGANTIC_GOLEM = 25703; @@ -54,6 +54,8 @@ public class GiganticGolem extends AbstractNpcAI private static final SkillHolder GOLEM_BOOM = new SkillHolder(6264); private static final SkillHolder NPC_EARTH_SHOT = new SkillHolder(6608); // Variables + private L2Npc _raidBoss; + private boolean _skillsAcess = false; private static long _lastAttack = 0; private static final int RESPAWN = 24; private static final int MAX_CHASE_DIST = 3000; @@ -64,8 +66,7 @@ public class GiganticGolem extends AbstractNpcAI private static final Location PLAYER_TELEPORT = new Location(94832, -112624, -3304); private static final Location DR_CHAOS_LOC = new Location(96320, -110912, -3328, 8191); - public GiganticGolem() - { + public GiganticGolem() { super(GiganticGolem.class.getSimpleName(), "ai/individual"); addFirstTalkId(DR_CHAOS); addKillId(GIGANTIC_GOLEM); @@ -75,30 +76,21 @@ public class GiganticGolem extends AbstractNpcAI addAttackId(GIGANTIC_GOLEM, GIGANTIC_BOOM_GOLEM); final long remain = GlobalVariablesManager.getInstance().getLong("GolemRespawn", 0) - System.currentTimeMillis(); - if (remain > 0) - { + if (remain > 0) { startQuestTimer("CLEAR_STATUS", remain, null, null); - } - else - { + } else { startQuestTimer("CLEAR_STATUS", 1000, null, null); } } @Override - public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) - { - switch (event) - { - case "ATTACK_MACHINE": - { - for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(STRANGE_MACHINE)) - { + public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { + switch (event) { + case "ATTACK_MACHINE": { + for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(STRANGE_MACHINE)) { final L2Npc obj = spawn.getLastSpawn(); - if (obj != null) - { - if (npc.getId() == DR_CHAOS) - { + if (obj != null) { + if (npc.getId() == DR_CHAOS) { npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, obj); npc.broadcastPacket(new SpecialCamera(npc, 1, -200, 15, 10000, 1000, 20000, 0, 0, 0, 0, 0)); } @@ -107,113 +99,88 @@ public class GiganticGolem extends AbstractNpcAI startQuestTimer("ACTION_CAMERA", 10000, npc, player); break; } - case "ACTION_CAMERA": - { + case "ACTION_CAMERA": { startQuestTimer("MOVE_SHOW", 2500, npc, player); npc.broadcastPacket(new SpecialCamera(npc, 1, -150, 10, 3000, 1000, 20000, 0, 0, 0, 0, 0)); break; } - case "MOVE_SHOW": - { + case "MOVE_SHOW": { startQuestTimer("TELEPORT", 2000, npc, player); npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(96055, -110759, -3312, 0)); broadcastNpcSay(npc, Say2.NPC_SHOUT, NpcStringId.FOOLS_WHY_HAVENT_YOU_FLED_YET_PREPARE_TO_LEARN_A_LESSON); break; } - case "TELEPORT": - { - if (player.isInParty()) - { + case "TELEPORT": { + if (player.isInParty()) { final L2Party party = player.getParty(); final boolean isInCC = party.isInCommandChannel(); final List<L2PcInstance> members = (isInCC) ? party.getCommandChannel().getMembers() : party.getMembers(); - for (L2PcInstance groupMembers : members) - { - if (groupMembers.isInsideRadius(npc, 2000, true, false)) - { + for (L2PcInstance groupMembers : members) { + if (groupMembers.isInsideRadius(npc, 2000, true, false)) { groupMembers.teleToLocation(PLAYER_TELEPORT, true); } } - } - else - { + } else { player.teleToLocation(PLAYER_TELEPORT); } - if ((npc != null) && (npc.getId() == DR_CHAOS)) - { + if ((npc != null) && (npc.getId() == DR_CHAOS)) { npc.deleteMe(); } startQuestTimer("WAIT_CAMERA", 1000, npc, player); break; } - case "WAIT_CAMERA": - { + case "WAIT_CAMERA": { startQuestTimer("SPAWN_RAID", 1000, npc, player); npc.broadcastPacket(new SpecialCamera(npc, 30, -200, 20, 6000, 700, 8000, 0, 0, 0, 0, 0)); break; } - case "SPAWN_RAID": - { + case "SPAWN_RAID": { addSpawn(GIGANTIC_GOLEM, 94640, -112496, -3360, 0, false, 0); break; } - case "FLAG": - { + case "FLAG": { npc.getVariables().set(SPAWN_FLAG, false); break; } - case "CORE_AI": - { - if (npc != null) - { + case "CORE_AI": { + if (npc != null) { ((L2Attackable) npc).clearAggroList(); npc.disableCoreAI(false); } break; } - case "CLEAR_STATUS": - { + case "CLEAR_STATUS": { addSpawn(DR_CHAOS, DR_CHAOS_LOC, false, 0); GlobalVariablesManager.getInstance().set("GolemRespawn", 0); break; } - case "SKILL_ATTACK": - { + case "SKILL_ATTACK": { addSkillCastDesire(npc, npc, SMOKE, 1000000L); - if (!npc.getVariables().getBoolean(ATTACK_FLAG, false)) - { + if (!npc.getVariables().getBoolean(ATTACK_FLAG, false)) { npc.disableCoreAI(true); npc.getVariables().set(ATTACK_FLAG, true); } break; } - case "MOVE_TIME": - { - if (npc != null) - { - for (L2Character obj : npc.getKnownList().getKnownCharactersInRadius(3000)) - { - if ((obj != null) && (obj.isRaid())) - { + case "MOVE_TIME": { + if (npc != null) { + for (L2Character obj : npc.getKnownList().getKnownCharactersInRadius(3000)) { + if ((obj != null) && (obj.isRaid())) { addMoveToDesire(npc, new Location(obj.getX() + getRandom(-200, 200), obj.getY() + getRandom(-200, 200), obj.getZ() + 20, 0), 0); } } } break; } - case "CHECK_ATTACK":{ - if ((_lastAttack + 1800000) < System.currentTimeMillis()) - { - if (npc != null) - { + case "CHECK_ATTACK": { + if ((_lastAttack + 1800000) < System.currentTimeMillis()) { + if (npc != null) { npc.deleteMe(); cancelQuestTimer("CHECK_ATTACK", npc, null); startQuestTimer("CLEAR_STATUS", 1000, null, null); } - } - else - { + } else { startQuestTimer("CHECK_ATTACK", 60000, npc, null); } break; @@ -223,10 +190,8 @@ public class GiganticGolem extends AbstractNpcAI } @Override - public String onFirstTalk(L2Npc npc, L2PcInstance player) - { - if (npc.getId() == DR_CHAOS) - { + public String onFirstTalk(L2Npc npc, L2PcInstance player) { + if (npc.getId() == DR_CHAOS) { startQuestTimer("ATTACK_MACHINE", 3000, npc, player); npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(96320, -110912, -3328, 0)); broadcastNpcSay(npc, Say2.NPC_SHOUT, NpcStringId.HOW_DARE_YOU_TRESPASS_INTO_MY_TERRITORY_HAVE_YOU_NO_FEAR); @@ -235,30 +200,28 @@ public class GiganticGolem extends AbstractNpcAI } @Override - public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon) - { - if (npc.getId() == GIGANTIC_BOOM_GOLEM) - { + public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon) { + if (npc.getId() == GIGANTIC_BOOM_GOLEM) { npc.doCast(GOLEM_BOOM); - } - else - { + } else { _lastAttack = System.currentTimeMillis(); - if (!npc.isCastingNow()) - { - if (getRandom(100) < 5) - { + if ((_raidBoss != null) && (!npc.isCastingNow())) { + if (getRandom(100) < 5) { npc.doCast(NPC_EARTH_SHOT); - } - else if ((getRandom(100) < 1) && (npc.getCurrentHp() < (npc.getMaxHp() * MIN_HP_PERCENTAGE))) - { - npc.doCast(EMP_SHOCK); + } else if ((getRandom(100) < 1) && (npc.getCurrentHp() < (npc.getMaxHp() * MIN_HP_PERCENTAGE))) { + if (_skillsAcess) { + npc.doCast(EMP_SHOCK); + } else { + _skillsAcess = true; + _raidBoss.enableSkill(EMP_SHOCK.getSkill()); + } + } else if (_skillsAcess) { + _skillsAcess = false; + _raidBoss.disableSkill(EMP_SHOCK.getSkill(), -1); } } - - if (!npc.getVariables().getBoolean(SPAWN_FLAG, false)) - { + if (!npc.getVariables().getBoolean(SPAWN_FLAG, false)) { npc.getVariables().set(SPAWN_FLAG, true); int posX = npc.getX() + getRandom(-200, 200); int posY = npc.getY() + getRandom(-200, 200); @@ -270,9 +233,7 @@ public class GiganticGolem extends AbstractNpcAI addSpawn(GIGANTIC_BOOM_GOLEM, posX + getRandom(-200, 200), posY + getRandom(-200, 200), npc.getZ() + 20, 0, false, 0); startQuestTimer("FLAG", 360000, npc, null); } - - if (npc.calculateDistance(npc.getSpawn().getLocation(), false, false) > MAX_CHASE_DIST) - { + if (npc.calculateDistance(npc.getSpawn().getLocation(), false, false) > MAX_CHASE_DIST) { npc.disableCoreAI(true); npc.teleToLocation(npc.getSpawn().getLocation()); } @@ -281,8 +242,7 @@ public class GiganticGolem extends AbstractNpcAI } @Override - public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) - { + public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { final long respawnTime = RESPAWN * 3600000; GlobalVariablesManager.getInstance().set("GolemRespawn", System.currentTimeMillis() + respawnTime); startQuestTimer("CLEAR_STATUS", respawnTime, null, null); @@ -291,31 +251,27 @@ public class GiganticGolem extends AbstractNpcAI } @Override - protected void onTeleport(L2Npc npc) - { + protected void onTeleport(L2Npc npc) { startQuestTimer("CORE_AI", 100, npc, null); } @Override - public void onMoveFinished(L2Npc npc) - { + public void onMoveFinished(L2Npc npc) { startQuestTimer("SKILL_ATTACK", 1000, npc, null); startQuestTimer("MOVE_TIME", 3000, npc, null); } @Override - public String onSpawn(L2Npc npc) - { - if (npc.getId() == GIGANTIC_BOOM_GOLEM) - { + public String onSpawn(L2Npc npc) { + if (npc.getId() == GIGANTIC_BOOM_GOLEM) { npc.setIsRunning(true); npc.scheduleDespawn(360000); startQuestTimer("MOVE_TIME", 3000, npc, null); ((L2Attackable) npc).setCanReturnToSpawnPoint(false); - } - else - { + } else { + _raidBoss = npc; _lastAttack = System.currentTimeMillis(); + _raidBoss.disableSkill(EMP_SHOCK.getSkill(), -1); startQuestTimer("CHECK_ATTACK", 300000, npc, null); broadcastNpcSay(npc, Say2.NPC_SHOUT, NpcStringId.BWAH_HA_HA_YOUR_DOOM_IS_AT_HAND_BEHOLD_THE_ULTRA_SECRET_SUPER_WEAPON); } diff --git a/src/main/resources/data/skillTrees/classSkillTree.xml b/src/main/resources/data/skillTrees/classSkillTree.xml index 18e7fec4db6a4db65526594c53f9b0d69e627689..0a7cd9df493b667cb603b7302e8916c66c3b45f0 100644 --- a/src/main/resources/data/skillTrees/classSkillTree.xml +++ b/src/main/resources/data/skillTrees/classSkillTree.xml @@ -12673,7 +12673,6 @@ <skill skillName="Dryad Root" skillId="1201" skillLvl="26" getLevel="60" levelUpSp="231000" learnedByNpc="true" /> <skill skillName="Word of Fear" skillId="1272" skillLvl="6" getLevel="60" levelUpSp="231000" learnedByNpc="true" /> <skill skillName="Concentration" skillId="1078" skillLvl="5" getLevel="60" levelUpSp="231000" learnedByNpc="true" /> - <skill skillName="Resist Earth" skillId="1548" skillLvl="1" getLevel="60" levelUpSp="231000" learnedByNpc="true" /> <skill skillName="Resist Poison" skillId="1033" skillLvl="1" getLevel="60" levelUpSp="231000" learnedByNpc="true" /> <skill skillName="Erase" skillId="1395" skillLvl="3" getLevel="60" levelUpSp="231000" learnedByNpc="true" /> <skill skillName="Mana Burn" skillId="1398" skillLvl="3" getLevel="60" levelUpSp="231000" learnedByNpc="true" /> @@ -12709,7 +12708,6 @@ <skill skillName="Dryad Root" skillId="1201" skillLvl="28" getLevel="64" levelUpSp="370000" learnedByNpc="true" /> <skill skillName="Word of Fear" skillId="1272" skillLvl="8" getLevel="64" levelUpSp="370000" learnedByNpc="true" /> <skill skillName="Bless the Body" skillId="1045" skillLvl="5" getLevel="64" levelUpSp="370000" learnedByNpc="true" /> - <skill skillName="Resist Earth" skillId="1548" skillLvl="2" getLevel="64" levelUpSp="370000" learnedByNpc="true" /> <skill skillName="Resist Poison" skillId="1033" skillLvl="2" getLevel="64" levelUpSp="370000" learnedByNpc="true" /> <skill skillName="Erase" skillId="1395" skillLvl="5" getLevel="64" levelUpSp="370000" learnedByNpc="true" /> <skill skillName="Mana Burn" skillId="1398" skillLvl="5" getLevel="64" levelUpSp="370000" learnedByNpc="true" /> @@ -12749,7 +12747,6 @@ <skill skillName="Dryad Root" skillId="1201" skillLvl="30" getLevel="68" levelUpSp="640000" learnedByNpc="true" /> <skill skillName="Word of Fear" skillId="1272" skillLvl="10" getLevel="68" levelUpSp="640000" learnedByNpc="true" /> <skill skillName="Concentration" skillId="1078" skillLvl="6" getLevel="68" levelUpSp="640000" learnedByNpc="true" /> - <skill skillName="Resist Earth" skillId="1548" skillLvl="3" getLevel="68" levelUpSp="640000" learnedByNpc="true" /> <skill skillName="Resist Poison" skillId="1033" skillLvl="3" getLevel="68" levelUpSp="640000" learnedByNpc="true" /> <skill skillName="Erase" skillId="1395" skillLvl="7" getLevel="68" levelUpSp="640000" learnedByNpc="true" /> <skill skillName="Mana Burn" skillId="1398" skillLvl="7" getLevel="68" levelUpSp="640000" learnedByNpc="true" /> diff --git a/src/main/resources/data/skillTrees/forgottenSkillTree.xml b/src/main/resources/data/skillTrees/forgottenSkillTree.xml index 55801c9f8f48a6d600884e71740605dbdff5f945..f1f69f1e4cee54ecb3d10e2b1b89dab9cfbb572b 100644 --- a/src/main/resources/data/skillTrees/forgottenSkillTree.xml +++ b/src/main/resources/data/skillTrees/forgottenSkillTree.xml @@ -101,11 +101,11 @@ <skill skillName="Fighters Will" skillId="758" skillLvl="1" getLevel="81" learnedByFS="true" /> <skill skillName="Archers Will" skillId="759" skillLvl="1" getLevel="81" learnedByFS="true" /> <skill skillName="Expose Weak Point" skillId="767" skillLvl="1" getLevel="81" learnedByFS="true" /> - <skill skillName="Dread Pool" skillId="774" skillLvl="1" getLevel="81" learnedByFS="true" /> <skill skillName="Final Secret" skillId="917" skillLvl="1" getLevel="81" learnedByFS="true" /> <skill skillName="Protection of Rune" skillId="755" skillLvl="1" getLevel="82" learnedByFS="true" /> <skill skillName="Protection of Elemental" skillId="756" skillLvl="1" getLevel="82" learnedByFS="true" /> <skill skillName="Protection of Alignment" skillId="757" skillLvl="1" getLevel="82" learnedByFS="true" /> + <skill skillName="Dread Pool" skillId="774" skillLvl="1" getLevel="83" learnedByFS="true" /> </skillTree> <!-- Phoenix Knight --> <skillTree type="classSkillTree" classId="90"> diff --git a/src/main/resources/data/stats/npcs/25700-25799.xml b/src/main/resources/data/stats/npcs/25700-25799.xml index 0d95746c4cfa3f6c6e72fd6ddf0b5e39b4db5fd1..0253e8be38e7e35d61bbe92ae41bca8f410bf96e 100644 --- a/src/main/resources/data/stats/npcs/25700-25799.xml +++ b/src/main/resources/data/stats/npcs/25700-25799.xml @@ -206,6 +206,9 @@ </minions> <param name="Party_Type" value="2" /> <param name="Party_Loyalty" value="2" /> + <param name="Skill01_Probablity" value="0" /> + <skill name="Skill01_ID" id="6263" level="1" /> <!-- EMP Shock --> + <skill name="Skill02_ID" id="6608" level="10" /> <!-- NPC earth shot --> </parameters> <race>CONSTRUCT</race> <sex>MALE</sex> @@ -238,6 +241,8 @@ <skill id="4416" level="2" /> <!--Magic Creatures --> <skill id="4494" level="1" /> <!--Raid Boss --> <skill id="5465" level="1" /> <!--Earth Attacks --> + <skill id="6263" level="1" /> <!--EMP Shock --> + <skill id="6608" level="10" /> <!--NPC earth shot --> <skill id="6663" level="1" /> <!--Level 76 Raid Boss --> </skillList> <exCrtEffect>true</exCrtEffect> @@ -311,6 +316,10 @@ </npc> <npc id="25705" level="74" type="L2Monster" name="Gigantic Boom Golem" title="Chaos"> <!-- Confirmed CT2.5 --> + <parameters> + <skill name="Skill01_ID" id="6265" level="1" /> <!-- Smoke --> + <skill name="Skill02_ID" id="6264" level="1" /> <!-- Golem Boom --> + </parameters> <race>CONSTRUCT</race> <sex>MALE</sex> <stats str="40" int="21" dex="30" wit="20" con="43" men="20"> @@ -337,6 +346,8 @@ <skill id="4414" level="2" /> <!--Standard Type --> <skill id="4415" level="3" /> <!--One-handed Sword --> <skill id="4416" level="2" /> <!--Magic Creatures --> + <skill id="6264" level="1" /> <!--Golem Boom --> + <skill id="6265" level="1" /> <!--Smoke --> </skillList> <exCrtEffect>true</exCrtEffect> <ai aggroRange="300" clanHelpRange="300" isAggressive="false" />