/* * Copyright (C) 2004-2015 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 ai.npc.ForgeOfTheGods; import ai.npc.AbstractNpcAI; import com.l2jserver.gameserver.ai.CtrlIntention; import com.l2jserver.gameserver.model.actor.L2Attackable; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; /** * Forge of the Gods AI * @author nonom, malyelfik */ public final class ForgeOfTheGods extends AbstractNpcAI { // NPCs private static final int[] FOG_MOBS = { 22634, // Scarlet Stakato Worker 22635, // Scarlet Stakato Soldier 22636, // Scarlet Stakato Noble 22637, // Tepra Scorpion 22638, // Tepra Scarab 22639, // Assassin Beetle 22640, // Mercenary of Destruction 22641, // Knight of Destruction 22642, // Lavastone Golem 22643, // Magma Golem 22644, // Arimanes of Destruction 22645, // Balor of Destruction 22646, // Ashuras of Destruction 22647, // Lavasillisk 22648, // Blazing Ifrit 22649, // Magma Drake }; private static final int[] LAVASAURUSES = { 18799, // Newborn Lavasaurus 18800, // Fledgling Lavasaurus 18801, // Adult Lavasaurus 18802, // Elderly Lavasaurus 18803, // Ancient Lavasaurus }; private static final int REFRESH = 15; private static final int MOBCOUNT_BONUS_MIN = 3; private static final int BONUS_UPPER_LV01 = 5; private static final int BONUS_UPPER_LV02 = 10; private static final int BONUS_UPPER_LV03 = 15; private static final int BONUS_UPPER_LV04 = 20; private static final int BONUS_UPPER_LV05 = 35; private static final int BONUS_LOWER_LV01 = 5; private static final int BONUS_LOWER_LV02 = 10; private static final int BONUS_LOWER_LV03 = 15; private static final int FORGE_BONUS01 = 20; private static final int FORGE_BONUS02 = 40; private static int _npcCount = 0; // private static int _npcsAlive = 0; TODO: Require zone spawn support private ForgeOfTheGods() { super(ForgeOfTheGods.class.getSimpleName(), "ai/npc"); addKillId(FOG_MOBS); addSpawnId(LAVASAURUSES); startQuestTimer("refresh", REFRESH * 1000, null, null, true); } @Override public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { switch (event) { case "suicide": if (npc != null) { npc.doDie(null); } break; case "refresh": _npcCount = 0; break; } return null; } @Override public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { int rand = getRandom(100); L2Npc mob = null; _npcCount++; // For monsters at Forge of the Gods - Lower level if (npc.getSpawn().getZ() < -5000) // && (_npcsAlive < 48)) { if ((_npcCount > BONUS_LOWER_LV03) && (rand <= FORGE_BONUS02)) { mob = addSpawn(LAVASAURUSES[4], npc, true); } else if (_npcCount > BONUS_LOWER_LV02) { mob = spawnLavasaurus(npc, rand, LAVASAURUSES[4], LAVASAURUSES[3]); } else if (_npcCount > BONUS_LOWER_LV01) { mob = spawnLavasaurus(npc, rand, LAVASAURUSES[3], LAVASAURUSES[2]); } else if (_npcCount >= MOBCOUNT_BONUS_MIN) { mob = spawnLavasaurus(npc, rand, LAVASAURUSES[2], LAVASAURUSES[1]); } } else // if (_npcsAlive < 32) { if ((_npcCount > BONUS_UPPER_LV05) && (rand <= FORGE_BONUS02)) { mob = addSpawn(LAVASAURUSES[1], npc, true); } else if (_npcCount > BONUS_UPPER_LV04) { mob = spawnLavasaurus(npc, rand, LAVASAURUSES[4], LAVASAURUSES[3]); } else if (_npcCount > BONUS_UPPER_LV03) { mob = spawnLavasaurus(npc, rand, LAVASAURUSES[3], LAVASAURUSES[2]); } else if (_npcCount > BONUS_UPPER_LV02) { mob = spawnLavasaurus(npc, rand, LAVASAURUSES[2], LAVASAURUSES[1]); } else if (_npcCount > BONUS_UPPER_LV01) { mob = spawnLavasaurus(npc, rand, LAVASAURUSES[1], LAVASAURUSES[0]); } else if ((_npcCount >= MOBCOUNT_BONUS_MIN) && (rand <= FORGE_BONUS01)) { mob = addSpawn(LAVASAURUSES[0], npc, true); } } if (mob != null) { ((L2Attackable) mob).addDamageHate(killer, 0, 9999); mob.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK); } return super.onKill(npc, killer, isSummon); } @Override public final String onSpawn(L2Npc npc) { startQuestTimer("suicide", 60000, npc, null); return super.onSpawn(npc); } private L2Npc spawnLavasaurus(L2Npc npc, int rand, int... mobs) { if (mobs.length < 2) { return null; } L2Npc mob = null; if (rand <= FORGE_BONUS01) { mob = addSpawn(mobs[0], npc, true); } else if (rand <= FORGE_BONUS02) { mob = addSpawn(mobs[1], npc, true); } return mob; } public static void main(String[] args) { new ForgeOfTheGods(); } }