diff --git a/src/main/java/com/l2jserver/datapack/ai/AILoader.java b/src/main/java/com/l2jserver/datapack/ai/AILoader.java index 9e54d7b608451300863e91fc1d8901e2b40a07fb..fc10cbf0f861aea68832476f5793b9ce7d55d03e 100644 --- a/src/main/java/com/l2jserver/datapack/ai/AILoader.java +++ b/src/main/java/com/l2jserver/datapack/ai/AILoader.java @@ -73,13 +73,13 @@ import com.l2jserver.datapack.ai.individual.Core; import com.l2jserver.datapack.ai.individual.CrimsonHatuOtis; import com.l2jserver.datapack.ai.individual.DarkWaterDragon; import com.l2jserver.datapack.ai.individual.DivineBeast; -import com.l2jserver.datapack.ai.individual.DrChaos; import com.l2jserver.datapack.ai.individual.DrakosWarrior; import com.l2jserver.datapack.ai.individual.DustRider; import com.l2jserver.datapack.ai.individual.EmeraldHorn; import com.l2jserver.datapack.ai.individual.Epidos; import com.l2jserver.datapack.ai.individual.EvasGiftBox; import com.l2jserver.datapack.ai.individual.FrightenedRagnaOrc; +import com.l2jserver.datapack.ai.individual.GiganticGolem; import com.l2jserver.datapack.ai.individual.Gordon; import com.l2jserver.datapack.ai.individual.GraveRobbers; import com.l2jserver.datapack.ai.individual.Knoriks; @@ -356,12 +356,12 @@ public class AILoader { DarkWaterDragon.class, DivineBeast.class, DrakosWarrior.class, - DrChaos.class, DustRider.class, EmeraldHorn.class, Epidos.class, EvasGiftBox.class, FrightenedRagnaOrc.class, + GiganticGolem.class, Gordon.class, GraveRobbers.class, Knoriks.class, diff --git a/src/main/java/com/l2jserver/datapack/ai/individual/DrChaos.java b/src/main/java/com/l2jserver/datapack/ai/individual/DrChaos.java deleted file mode 100644 index 1a9cd4881f00adea3558965e703bf31634cda7db..0000000000000000000000000000000000000000 --- a/src/main/java/com/l2jserver/datapack/ai/individual/DrChaos.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright © 2004-2020 L2J DataPack - * - * This file is part of L2J DataPack. - * - * L2J DataPack is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * L2J DataPack is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ -package com.l2jserver.datapack.ai.individual; - -import com.l2jserver.gameserver.ai.CtrlIntention; -import com.l2jserver.gameserver.datatables.SpawnTable; -import com.l2jserver.gameserver.model.L2Spawn; -import com.l2jserver.gameserver.model.Location; -import com.l2jserver.gameserver.model.actor.L2Npc; -import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; -import com.l2jserver.gameserver.model.quest.Quest; -import com.l2jserver.gameserver.network.serverpackets.SpecialCamera; - -/** - * DrChaos' AI. - * @author Kerberos - */ -public final class DrChaos extends Quest { - private static final int DR_CHAOS = 32033; - private static final int STRANGE_MACHINE = 32032; - private static final int CHAOS_GOLEM = 25703; - private static boolean _IsGolemSpawned; - - private static final Location PLAYER_TELEPORT = new Location(94832, -112624, -3304); - private static final Location NPC_LOCATION = new Location(-113091, -243942, -15536); - - public DrChaos() { - // TODO extends AbstractNpcAI - super(-1, "Doctor Chaos", "ai/individual"); - addFirstTalkId(DR_CHAOS); - _IsGolemSpawned = false; - } - - @Override - public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { - switch (event) { - case "1": { - L2Npc machine = null; - for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(STRANGE_MACHINE)) { - if (spawn != null) { - machine = spawn.getLastSpawn(); - } - } - if (machine != null) { - npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, machine); - machine.broadcastPacket(new SpecialCamera(machine, 1, -200, 15, 10000, 1000, 20000, 0, 0, 0, 0, 0)); - } else { - startQuestTimer("2", 2000, npc, player); - } - startQuestTimer("3", 10000, npc, player); - break; - } - case "2": { - npc.broadcastSocialAction(3); - break; - } - case "3": { - npc.broadcastPacket(new SpecialCamera(npc, 1, -150, 10, 3000, 1000, 20000, 0, 0, 0, 0, 0)); - startQuestTimer("4", 2500, npc, player); - break; - } - case "4": { - npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(96055, -110759, -3312, 0)); - startQuestTimer("5", 2000, npc, player); - break; - } - case "5": { - player.teleToLocation(PLAYER_TELEPORT); - npc.teleToLocation(NPC_LOCATION); - if (!_IsGolemSpawned) { - L2Npc golem = addSpawn(CHAOS_GOLEM, 94640, -112496, -3336, 0, false, 0); - _IsGolemSpawned = true; - startQuestTimer("6", 1000, golem, player); - } - break; - } - case "6": { - npc.broadcastPacket(new SpecialCamera(npc, 30, -200, 20, 6000, 700, 8000, 0, 0, 0, 0, 0)); - break; - } - } - return super.onAdvEvent(event, npc, player); - } - - @Override - public String onFirstTalk(L2Npc npc, L2PcInstance player) { - if (npc.getId() == DR_CHAOS) { - npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(96323, -110914, -3328, 0)); - this.startQuestTimer("1", 3000, npc, player); - } - return ""; - } -} diff --git a/src/main/java/com/l2jserver/datapack/ai/individual/GiganticGolem.java b/src/main/java/com/l2jserver/datapack/ai/individual/GiganticGolem.java new file mode 100644 index 0000000000000000000000000000000000000000..446f9de65fb585721bff3d71bfa8d8db36e26454 --- /dev/null +++ b/src/main/java/com/l2jserver/datapack/ai/individual/GiganticGolem.java @@ -0,0 +1,324 @@ +/* + * Copyright (C) 2004-2020 L2J DataPack + * + * This file is part of L2J DataPack. + * + * L2J DataPack is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * L2J DataPack is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package com.l2jserver.datapack.ai.individual; + +import java.util.List; + +import com.l2jserver.datapack.ai.npc.AbstractNpcAI; +import com.l2jserver.gameserver.ai.CtrlIntention; +import com.l2jserver.gameserver.datatables.SpawnTable; +import com.l2jserver.gameserver.instancemanager.GlobalVariablesManager; +import com.l2jserver.gameserver.model.L2Party; +import com.l2jserver.gameserver.model.L2Spawn; +import com.l2jserver.gameserver.model.Location; +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.instance.L2PcInstance; +import com.l2jserver.gameserver.model.holders.SkillHolder; +import com.l2jserver.gameserver.network.NpcStringId; +import com.l2jserver.gameserver.network.clientpackets.Say2; +import com.l2jserver.gameserver.network.serverpackets.SpecialCamera; + +/** + * Gigantic Golem AI. + * @author Kerberos, Maneco2 + * @version 2.6.2.0 + */ +public class GiganticGolem extends AbstractNpcAI +{ + // NPCs + private static final int DR_CHAOS = 32033; + private static final int GIGANTIC_GOLEM = 25703; + private static final int STRANGE_MACHINE = 32032; + private static final int GIGANTIC_BOOM_GOLEM = 25705; + // Skills + private static final SkillHolder SMOKE = new SkillHolder(6265); + private static final SkillHolder EMP_SHOCK = new SkillHolder(6263); + private static final SkillHolder GOLEM_BOOM = new SkillHolder(6264); + private static final SkillHolder NPC_EARTH_SHOT = new SkillHolder(6608); + // Variables + private static long _lastAttack = 0; + private static final int RESPAWN = 24; + private static final int MAX_CHASE_DIST = 3000; + private static final double MIN_HP_PERCENTAGE = 0.30; + private static final String SPAWN_FLAG = "SPAWN_FLAG"; + private static final String ATTACK_FLAG = "ATTACK_FLAG"; + // Locations + 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() + { + super(GiganticGolem.class.getSimpleName(), "ai/individual"); + addFirstTalkId(DR_CHAOS); + addKillId(GIGANTIC_GOLEM); + addTeleportId(GIGANTIC_GOLEM); + addMoveFinishedId(GIGANTIC_BOOM_GOLEM); + addSpawnId(GIGANTIC_GOLEM, GIGANTIC_BOOM_GOLEM); + addAttackId(GIGANTIC_GOLEM, GIGANTIC_BOOM_GOLEM); + + final long remain = GlobalVariablesManager.getInstance().getLong("GolemRespawn", 0) - System.currentTimeMillis(); + if (remain > 0) + { + startQuestTimer("CLEAR_STATUS", remain, null, null); + } + 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)) + { + final L2Npc obj = spawn.getLastSpawn(); + 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)); + } + } + } + startQuestTimer("ACTION_CAMERA", 10000, npc, player); + break; + } + 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": + { + 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()) + { + 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)) + { + groupMembers.teleToLocation(PLAYER_TELEPORT, true); + } + } + } + else + { + player.teleToLocation(PLAYER_TELEPORT); + } + + if ((npc != null) && (npc.getId() == DR_CHAOS)) + { + npc.deleteMe(); + } + startQuestTimer("WAIT_CAMERA", 1000, npc, player); + break; + } + 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": + { + addSpawn(GIGANTIC_GOLEM, 94640, -112496, -3360, 0, false, 0); + break; + } + case "FLAG": + { + npc.getVariables().set(SPAWN_FLAG, false); + break; + } + case "CORE_AI": + { + if (npc != null) + { + ((L2Attackable) npc).clearAggroList(); + npc.disableCoreAI(false); + } + break; + } + case "CLEAR_STATUS": + { + addSpawn(DR_CHAOS, DR_CHAOS_LOC, false, 0); + GlobalVariablesManager.getInstance().set("GolemRespawn", 0); + break; + } + case "SKILL_ATTACK": + { + addSkillCastDesire(npc, npc, SMOKE, 1000000L); + 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())) + { + 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) + { + npc.deleteMe(); + cancelQuestTimer("CHECK_ATTACK", npc, null); + startQuestTimer("CLEAR_STATUS", 1000, null, null); + } + } + else + { + startQuestTimer("CHECK_ATTACK", 60000, npc, null); + } + break; + } + } + return super.onAdvEvent(event, npc, player); + } + + @Override + 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); + } + return ""; + } + + @Override + public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon) + { + if (npc.getId() == GIGANTIC_BOOM_GOLEM) + { + npc.doCast(GOLEM_BOOM); + } + else + { + _lastAttack = System.currentTimeMillis(); + + if (!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); + } + } + + 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); + addSpawn(GIGANTIC_BOOM_GOLEM, posX + getRandom(-200, 200), posY + getRandom(-200, 200), npc.getZ() + 20, 0, false, 0); + addSpawn(GIGANTIC_BOOM_GOLEM, posX + getRandom(-200, 200), posY + getRandom(-200, 200), npc.getZ() + 20, 0, false, 0); + addSpawn(GIGANTIC_BOOM_GOLEM, posX + getRandom(-200, 200), posY + getRandom(-200, 200), npc.getZ() + 20, 0, false, 0); + addSpawn(GIGANTIC_BOOM_GOLEM, posX + getRandom(-200, 200), posY + getRandom(-200, 200), npc.getZ() + 20, 0, false, 0); + addSpawn(GIGANTIC_BOOM_GOLEM, posX + getRandom(-200, 200), posY + getRandom(-200, 200), npc.getZ() + 20, 0, false, 0); + 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) + { + npc.disableCoreAI(true); + npc.teleToLocation(npc.getSpawn().getLocation()); + } + } + return super.onAttack(npc, attacker, damage, isSummon); + } + + @Override + 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); + cancelQuestTimer("CHECK_ATTACK", npc, null); + return super.onKill(npc, killer, isSummon); + } + + @Override + protected void onTeleport(L2Npc npc) + { + startQuestTimer("CORE_AI", 100, npc, null); + } + + @Override + 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) + { + npc.setIsRunning(true); + npc.scheduleDespawn(360000); + startQuestTimer("MOVE_TIME", 3000, npc, null); + ((L2Attackable) npc).setCanReturnToSpawnPoint(false); + } + else + { + _lastAttack = System.currentTimeMillis(); + 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); + } + return super.onSpawn(npc); + } +} diff --git a/src/main/resources/data/stats/npcs/25700-25799.xml b/src/main/resources/data/stats/npcs/25700-25799.xml index 0253e8be38e7e35d61bbe92ae41bca8f410bf96e..0d95746c4cfa3f6c6e72fd6ddf0b5e39b4db5fd1 100644 --- a/src/main/resources/data/stats/npcs/25700-25799.xml +++ b/src/main/resources/data/stats/npcs/25700-25799.xml @@ -206,9 +206,6 @@ </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> @@ -241,8 +238,6 @@ <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> @@ -316,10 +311,6 @@ </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"> @@ -346,8 +337,6 @@ <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" /> diff --git a/src/main/resources/data/stats/skills/06200-06299.xml b/src/main/resources/data/stats/skills/06200-06299.xml index f747c8bfb82c54fb027af4b891a2f790d94ea232..47f4bfc93c8d9d6c2a5c3dba604347e1d60cb2c2 100644 --- a/src/main/resources/data/stats/skills/06200-06299.xml +++ b/src/main/resources/data/stats/skills/06200-06299.xml @@ -788,16 +788,25 @@ <set name="activateRate" val="80" /> <set name="basicProperty" val="CON" /> <set name="coolTime" val="500" /> + <set name="affectRange" val="100" /> <set name="effectPoint" val="-100" /> + <set name="hitTime" val="2000" /> <set name="icon" val="icon.skill0100" /> <set name="isDebuff" val="true" /> <set name="lvlBonusRate" val="1" /> <set name="magicLvl" val="77" /> + <set name="mpConsume2" val="78" /> <set name="operateType" val="A2" /> <set name="reuseDelay" val="30000" /> <set name="rideState" val="NONE" /> - <set name="targetType" val="NONE" /> + <set name="targetType" val="AURA" /> <set name="trait" val="SHOCK" /> + <effects> + <effect name="PhysicalAttack"> + <param power="2959" /> + </effect> + <effect name="Stun" /> + </effects> </skill> <skill id="6264" levels="1" name="Golem Boom"> <set name="coolTime" val="500" /> @@ -809,13 +818,15 @@ <set name="targetType" val="NONE" /> </skill> <skill id="6265" levels="1" name="Smoke"> + <set name="hitTime" val="1000" /> <set name="coolTime" val="500" /> <set name="effectPoint" val="-689" /> <set name="magicLvl" val="75" /> <set name="operateType" val="A1" /> <set name="reuseDelay" val="3000" /> <set name="rideState" val="NONE" /> - <set name="targetType" val="NONE" /> + <set name="targetType" val="AURA" /> + <set name="affectRange" val="50" /> </skill> <skill id="6266" levels="1" name="Shock"> <set name="abnormalLvl" val="1" /> diff --git a/src/main/resources/data/stats/skills/06600-06699.xml b/src/main/resources/data/stats/skills/06600-06699.xml index bc7b2eaab0ab3538f034e9a68da8bbf12c9b3b16..6eabc51470074cae09100d3b681a7486b91c73cf 100644 --- a/src/main/resources/data/stats/skills/06600-06699.xml +++ b/src/main/resources/data/stats/skills/06600-06699.xml @@ -20,12 +20,25 @@ </skill> <skill id="6602" levels="28" name="NPC earth attack"> <table name="#effectPoints"> -138 -204 -285 -379 -477 -566 -597 -624 -646 -655 -662 -669 -676 -679 -681 -684 -687 -689 -692 -694 -696 -698 -700 -702 -704 -706 -707 -709 </table> + <table name="#magicLvl"> 10 20 30 40 50 60 64 68 72 74 76 78 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 </table> + <table name="#mpConsume2"> 13 20 28 38 50 61 65 69 73 75 77 78 80 80 81 82 82 83 83 84 84 84 84 85 85 85 85 85 </table> + <table name="#power"> 46 105 219 417 722 1136 1327 1525 1727 1827 1925 2020 2112 2156 2200 2241 2282 2320 2358 2393 2426 2458 2487 2515 2540 2565 2591 2617 </table> <set name="coolTime" val="500" /> <set name="effectPoint" val="#effectPoints" /> - <set name="magicLvl" val="10" /> + <set name="affectRange" val="200" /> + <set name="hitTime" val="1500" /> + <set name="attributeType" val="EARTH" /> + <set name="attributePower" val="180" /> + <set name="magicLvl" val="#magicLvl" /> + <set name="mpConsume2" val="#mpConsume2" /> <set name="operateType" val="A1" /> <set name="rideState" val="NONE" /> - <set name="targetType" val="NONE" /> + <set name="targetType" val="AREA" /> + <effects> + <effect name="PhysicalAttack"> + <param power="#power" /> + </effect> + </effects> </skill> <skill id="6603" levels="28" name="NPC earth shot"> <table name="#effectPoints"> -138 -204 -285 -379 -477 -566 -597 -624 -646 -655 -662 -669 -676 -679 -681 -684 -687 -689 -692 -694 -696 -698 -700 -702 -704 -706 -707 -709 </table> @@ -74,12 +87,27 @@ </skill> <skill id="6608" levels="28" name="NPC earth shot"> <table name="#effectPoints"> -138 -204 -285 -379 -477 -566 -597 -624 -646 -655 -662 -669 -676 -679 -681 -684 -687 -689 -692 -694 -696 -698 -700 -702 -704 -706 -707 -709 </table> + <table name="#magicLvl"> 10 20 30 40 50 60 64 68 72 74 76 78 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 </table> + <table name="#mpConsume2"> 13 20 28 38 50 61 65 69 73 75 77 78 80 80 81 82 82 83 83 84 84 84 84 85 85 85 85 85 </table> + <table name="#power"> 46 105 219 417 722 1136 1327 1525 1727 1827 1925 2020 2112 2156 2200 2241 2282 2320 2358 2393 2426 2458 2487 2515 2540 2565 2591 2617 </table> + <set name="castRange" val="700" /> <set name="coolTime" val="500" /> <set name="effectPoint" val="#effectPoints" /> - <set name="magicLvl" val="10" /> + <set name="effectRange" val="1200" /> + <set name="affectRange" val="200" /> + <set name="hitTime" val="3000" /> + <set name="attributeType" val="EARTH" /> + <set name="attributePower" val="180" /> + <set name="magicLvl" val="#magicLvl" /> + <set name="mpConsume2" val="#mpConsume2" /> <set name="operateType" val="A1" /> <set name="rideState" val="NONE" /> - <set name="targetType" val="NONE" /> + <set name="targetType" val="AREA" /> + <effects> + <effect name="PhysicalAttack"> + <param power="#power" /> + </effect> + </effects> </skill> <skill id="6609" levels="28" name="NPC earth magic"> <table name="#effectPoints"> -138 -204 -285 -379 -477 -566 -597 -624 -646 -655 -662 -669 -676 -679 -681 -684 -687 -689 -692 -694 -696 -698 -700 -702 -704 -706 -707 -709 </table> diff --git a/src/main/resources/sql/spawnlist.sql b/src/main/resources/sql/spawnlist.sql index cb9db56b66726629f08f407a7f2f39a0a905d5a8..7613ac126526bf45489289d36229dd6e2796f6d2 100644 --- a/src/main/resources/sql/spawnlist.sql +++ b/src/main/resources/sql/spawnlist.sql @@ -22775,8 +22775,8 @@ INSERT INTO `spawnlist` VALUES ("pavel_ruins", 1, 22812, 84201, -107208, -3320, 0, 0, 0, 60, 0, 0, 0), -- Torrant ("den_of_evil_npc", 1, 32016, 71232, -113952, -1736, 0, 0, 47768, 60, 0, 0, 0), --- Dr. Chaos -("PavelRuins", 1, 32033, 96320, -110912, -3328, 0, 0, 8191, 60, 0, 0, 0), +-- Strange Machine +("PavelRuins", 1, 32032, 96341, -110891, -3337, 0, 0, 40960, 60, 0, 0, 0), -- Yumi ("pavel_ruins_npc", 1, 32041, 91374, -116884, -3920, 0, 0, 54750, 60, 0, 0, 0), -- Weathermaster