This commit is contained in:
772
trunk/dist/game/data/scripts/gracia/AI/EnergySeeds.java
vendored
Normal file
772
trunk/dist/game/data/scripts/gracia/AI/EnergySeeds.java
vendored
Normal file
@ -0,0 +1,772 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 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 gracia.AI;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import javolution.util.FastMap;
|
||||
import quests.Q00692_HowtoOpposeEvil.Q00692_HowtoOpposeEvil;
|
||||
import ai.npc.AbstractNpcAI;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.ThreadPoolManager;
|
||||
import com.l2jserver.gameserver.ai.CtrlIntention;
|
||||
import com.l2jserver.gameserver.datatables.DoorTable;
|
||||
import com.l2jserver.gameserver.datatables.NpcData;
|
||||
import com.l2jserver.gameserver.enums.QuestSound;
|
||||
import com.l2jserver.gameserver.idfactory.IdFactory;
|
||||
import com.l2jserver.gameserver.instancemanager.GraciaSeedsManager;
|
||||
import com.l2jserver.gameserver.instancemanager.ZoneManager;
|
||||
import com.l2jserver.gameserver.model.L2Object;
|
||||
import com.l2jserver.gameserver.model.Location;
|
||||
import com.l2jserver.gameserver.model.actor.L2Character;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
|
||||
import com.l2jserver.gameserver.model.quest.QuestState;
|
||||
import com.l2jserver.gameserver.model.skills.Skill;
|
||||
import com.l2jserver.gameserver.model.zone.L2ZoneType;
|
||||
import com.l2jserver.gameserver.network.SystemMessageId;
|
||||
import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
|
||||
import com.l2jserver.gameserver.util.Util;
|
||||
|
||||
/**
|
||||
* Energy Seeds AI.
|
||||
* @author Gigiikun
|
||||
*/
|
||||
public class EnergySeeds extends AbstractNpcAI
|
||||
{
|
||||
private static final int HOWTOOPPOSEEVIL_CHANCE = 60;
|
||||
private static final int RATE = 1;
|
||||
private static final int RESPAWN = 480000;
|
||||
private static final int RANDOM_RESPAWN_OFFSET = 180000;
|
||||
private static Map<Integer, ESSpawn> _spawns = new FastMap<>();
|
||||
protected static Map<L2Npc, Integer> _spawnedNpcs = new FastMap<L2Npc, Integer>().shared();
|
||||
|
||||
private static final int TEMPORARY_TELEPORTER = 32602;
|
||||
// @formatter:off
|
||||
private static final int[] SEED_IDS =
|
||||
{
|
||||
18678, 18679, 18680, 18681, 18682, 18683
|
||||
};
|
||||
|
||||
private static final int[][] ANNIHILATION_SUPRISE_MOB_IDS =
|
||||
{
|
||||
{ 22746, 22747, 22748, 22749 },
|
||||
{ 22754, 22755, 22756 },
|
||||
{ 22760, 22761, 22762 }
|
||||
};
|
||||
|
||||
private static int[] SEED_OF_DESTRUCTION_DOORS =
|
||||
{
|
||||
12240003, 12240004, 12240005, 12240006, 12240007, 12240008, 12240009,
|
||||
12240010, 12240011, 12240012, 12240013, 12240014, 12240015, 12240016,
|
||||
12240017, 12240018, 12240019, 12240020, 12240021, 12240022, 12240023,
|
||||
12240024, 12240025, 12240026, 12240027, 12240028, 12240029, 12240030,
|
||||
12240031
|
||||
};
|
||||
private static final Location SOD_EXIT_POINT = new Location(-248717, 250260, 4337);
|
||||
// @formatter:off
|
||||
private static final int SOD_ZONE = 60009;
|
||||
|
||||
private enum GraciaSeeds
|
||||
{
|
||||
INFINITY,
|
||||
DESTRUCTION,
|
||||
ANNIHILATION_BISTAKON,
|
||||
ANNIHILATION_REPTILIKON,
|
||||
ANNIHILATION_COKRAKON
|
||||
}
|
||||
|
||||
public EnergySeeds()
|
||||
{
|
||||
super(EnergySeeds.class.getSimpleName(), "gracia/AI");
|
||||
registerMobs(SEED_IDS);
|
||||
addFirstTalkId(SEED_IDS);
|
||||
addFirstTalkId(TEMPORARY_TELEPORTER);
|
||||
addEnterZoneId(SOD_ZONE);
|
||||
addSpawnsToList();
|
||||
startAI();
|
||||
}
|
||||
|
||||
protected boolean isSeedActive(GraciaSeeds seed)
|
||||
{
|
||||
switch (seed)
|
||||
{
|
||||
case INFINITY:
|
||||
return false;
|
||||
case DESTRUCTION:
|
||||
return GraciaSeedsManager.getInstance().getSoDState() == 2;
|
||||
case ANNIHILATION_BISTAKON:
|
||||
case ANNIHILATION_REPTILIKON:
|
||||
case ANNIHILATION_COKRAKON:
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSkillSee(L2Npc npc, L2PcInstance caster, Skill skill, L2Object[] targets, boolean isSummon)
|
||||
{
|
||||
if (!Util.contains(targets, npc) || (skill.getId() != 5780))
|
||||
{
|
||||
return super.onSkillSee(npc, caster, skill, targets, isSummon);
|
||||
}
|
||||
|
||||
npc.deleteMe();
|
||||
|
||||
if (_spawnedNpcs.containsKey(npc) && _spawns.containsKey(_spawnedNpcs.get(npc)))
|
||||
{
|
||||
ESSpawn spawn = _spawns.get(_spawnedNpcs.get(npc));
|
||||
spawn.scheduleRespawn(RESPAWN + getRandom(RANDOM_RESPAWN_OFFSET));
|
||||
_spawnedNpcs.remove(npc);
|
||||
if (isSeedActive(spawn._seedId))
|
||||
{
|
||||
int itemId = 0;
|
||||
|
||||
switch (npc.getId())
|
||||
{
|
||||
case 18678: // Water
|
||||
itemId = 14016;
|
||||
break;
|
||||
case 18679: // Fire
|
||||
itemId = 14015;
|
||||
break;
|
||||
case 18680: // Wind
|
||||
itemId = 14017;
|
||||
break;
|
||||
case 18681: // Earth
|
||||
itemId = 14018;
|
||||
break;
|
||||
case 18682: // Divinity
|
||||
itemId = 14020;
|
||||
break;
|
||||
case 18683: // Darkness
|
||||
itemId = 14019;
|
||||
break;
|
||||
default:
|
||||
return super.onSkillSee(npc, caster, skill, targets, isSummon);
|
||||
}
|
||||
if (getRandom(100) < 33)
|
||||
{
|
||||
caster.sendPacket(SystemMessageId.YOUR_COLLECTION_HAS_SUCCEEDED);
|
||||
caster.addItem("EnergySeed", itemId, getRandom(RATE + 1, 2 * RATE), null, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
caster.sendPacket(SystemMessageId.YOUR_COLLECTION_HAS_SUCCEEDED);
|
||||
caster.addItem("EnergySeed", itemId, getRandom(1, RATE), null, true);
|
||||
}
|
||||
seedCollectEvent(caster, npc, spawn._seedId);
|
||||
}
|
||||
}
|
||||
|
||||
return super.onSkillSee(npc, caster, skill, targets, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (event.equalsIgnoreCase("StartSoDAi"))
|
||||
{
|
||||
for (int doorId : SEED_OF_DESTRUCTION_DOORS)
|
||||
{
|
||||
L2DoorInstance doorInstance = DoorTable.getInstance().getDoor(doorId);
|
||||
if (doorInstance != null)
|
||||
{
|
||||
doorInstance.openMe();
|
||||
}
|
||||
}
|
||||
startAI(GraciaSeeds.DESTRUCTION);
|
||||
}
|
||||
else if (event.equalsIgnoreCase("StopSoDAi"))
|
||||
{
|
||||
for (int doorId : SEED_OF_DESTRUCTION_DOORS)
|
||||
{
|
||||
L2DoorInstance doorInstance = DoorTable.getInstance().getDoor(doorId);
|
||||
if (doorInstance != null)
|
||||
{
|
||||
doorInstance.closeMe();
|
||||
}
|
||||
}
|
||||
for (L2PcInstance ch : ZoneManager.getInstance().getZoneById(SOD_ZONE).getPlayersInside())
|
||||
{
|
||||
if (ch != null)
|
||||
{
|
||||
ch.teleToLocation(SOD_EXIT_POINT);
|
||||
}
|
||||
}
|
||||
stopAI(GraciaSeeds.DESTRUCTION);
|
||||
}
|
||||
else if (event.equalsIgnoreCase("DeSpawnTask"))
|
||||
{
|
||||
if (npc.isInCombat())
|
||||
{
|
||||
startQuestTimer("DeSpawnTask", 30000, npc, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
npc.deleteMe();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (npc.getId() == TEMPORARY_TELEPORTER)
|
||||
{
|
||||
player.teleToLocation(SOD_EXIT_POINT);
|
||||
}
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon)
|
||||
{
|
||||
if (_spawnedNpcs.containsKey(npc) && _spawns.containsKey(_spawnedNpcs.get(npc)))
|
||||
{
|
||||
_spawns.get(_spawnedNpcs.get(npc)).scheduleRespawn(RESPAWN + getRandom(RANDOM_RESPAWN_OFFSET));
|
||||
_spawnedNpcs.remove(npc);
|
||||
}
|
||||
return super.onKill(npc, player, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onEnterZone(L2Character character, L2ZoneType zone)
|
||||
{
|
||||
if (character.getInstanceId() != 0)
|
||||
{
|
||||
return super.onEnterZone(character, zone);
|
||||
}
|
||||
|
||||
if (character instanceof L2PcInstance)
|
||||
{
|
||||
switch (zone.getId())
|
||||
{
|
||||
case SOD_ZONE:
|
||||
if (!isSeedActive(GraciaSeeds.DESTRUCTION) && !character.isGM())
|
||||
{
|
||||
character.teleToLocation(SOD_EXIT_POINT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onEnterZone(character, zone);
|
||||
}
|
||||
|
||||
public void startAI()
|
||||
{
|
||||
// spawn all NPCs
|
||||
for (ESSpawn spawn : _spawns.values())
|
||||
{
|
||||
if (isSeedActive(spawn._seedId))
|
||||
{
|
||||
spawn.scheduleRespawn(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void startAI(GraciaSeeds type)
|
||||
{
|
||||
// spawn all NPCs
|
||||
for (ESSpawn spawn : _spawns.values())
|
||||
{
|
||||
if (spawn._seedId == type)
|
||||
{
|
||||
spawn.scheduleRespawn(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void stopAI(GraciaSeeds type)
|
||||
{
|
||||
for (L2Npc seed : _spawnedNpcs.keySet())
|
||||
{
|
||||
if (type == _spawns.get(_spawnedNpcs.get(seed))._seedId)
|
||||
{
|
||||
seed.deleteMe();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void seedCollectEvent(L2PcInstance player, L2Npc seedEnergy, GraciaSeeds seedType)
|
||||
{
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
QuestState st = player.getQuestState(Q00692_HowtoOpposeEvil.class.getSimpleName());
|
||||
switch (seedType)
|
||||
{
|
||||
case INFINITY:
|
||||
if ((st != null) && st.isCond(3))
|
||||
{
|
||||
handleQuestDrop(st, 13798);
|
||||
}
|
||||
break;
|
||||
case DESTRUCTION:
|
||||
if ((st != null) && st.isCond(3))
|
||||
{
|
||||
handleQuestDrop(st, 13867);
|
||||
}
|
||||
break;
|
||||
case ANNIHILATION_BISTAKON:
|
||||
if ((st != null) && st.isCond(3))
|
||||
{
|
||||
handleQuestDrop(st, 15535);
|
||||
}
|
||||
if (getRandom(100) < 50)
|
||||
{
|
||||
L2MonsterInstance mob = spawnSupriseMob(seedEnergy, ANNIHILATION_SUPRISE_MOB_IDS[0][getRandom(ANNIHILATION_SUPRISE_MOB_IDS[0].length)]);
|
||||
mob.setRunning();
|
||||
mob.addDamageHate(player, 0, 999);
|
||||
mob.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
|
||||
}
|
||||
break;
|
||||
case ANNIHILATION_REPTILIKON:
|
||||
if ((st != null) && st.isCond(3))
|
||||
{
|
||||
handleQuestDrop(st, 15535);
|
||||
}
|
||||
if (getRandom(100) < 50)
|
||||
{
|
||||
L2MonsterInstance mob = spawnSupriseMob(seedEnergy, ANNIHILATION_SUPRISE_MOB_IDS[1][getRandom(ANNIHILATION_SUPRISE_MOB_IDS[1].length)]);
|
||||
mob.setRunning();
|
||||
mob.addDamageHate(player, 0, 999);
|
||||
mob.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
|
||||
}
|
||||
break;
|
||||
case ANNIHILATION_COKRAKON:
|
||||
if ((st != null) && st.isCond(3))
|
||||
{
|
||||
handleQuestDrop(st, 15535);
|
||||
}
|
||||
if (getRandom(100) < 50)
|
||||
{
|
||||
L2MonsterInstance mob = spawnSupriseMob(seedEnergy, ANNIHILATION_SUPRISE_MOB_IDS[2][getRandom(ANNIHILATION_SUPRISE_MOB_IDS[2].length)]);
|
||||
mob.setRunning();
|
||||
mob.addDamageHate(player, 0, 999);
|
||||
mob.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private L2MonsterInstance spawnSupriseMob(L2Npc energy, int npcId)
|
||||
{
|
||||
L2NpcTemplate supriseMobTemplate = NpcData.getInstance().getTemplate(npcId);
|
||||
L2MonsterInstance monster = new L2MonsterInstance(IdFactory.getInstance().getNextId(), supriseMobTemplate);
|
||||
monster.setCurrentHpMp(monster.getMaxHp(), monster.getMaxMp());
|
||||
monster.setHeading(energy.getHeading());
|
||||
monster.setInstanceId(energy.getInstanceId());
|
||||
monster.setShowSummonAnimation(true);
|
||||
monster.spawnMe(energy.getX(), energy.getY(), energy.getZ());
|
||||
startQuestTimer("DeSpawnTask", 30000, monster, null);
|
||||
return monster;
|
||||
}
|
||||
|
||||
private void handleQuestDrop(QuestState st, int itemId)
|
||||
{
|
||||
double chance = HOWTOOPPOSEEVIL_CHANCE * Config.RATE_QUEST_DROP;
|
||||
int numItems = (int) (chance / 100);
|
||||
chance = chance % 100;
|
||||
if (getRandom(100) < chance)
|
||||
{
|
||||
numItems++;
|
||||
}
|
||||
if (numItems > 0)
|
||||
{
|
||||
st.giveItems(itemId, numItems);
|
||||
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
}
|
||||
}
|
||||
|
||||
private void addSpawnsToList()
|
||||
{
|
||||
// Seed of Destruction
|
||||
// Temporary Teleporters
|
||||
//@formatter:off
|
||||
_spawns.put(1, new ESSpawn(1, GraciaSeeds.DESTRUCTION, new Location(-245790,220320,-12104), new int[]{TEMPORARY_TELEPORTER}));
|
||||
_spawns.put(2, new ESSpawn(2, GraciaSeeds.DESTRUCTION, new Location(-249770,207300,-11952), new int[]{TEMPORARY_TELEPORTER}));
|
||||
//Energy Seeds
|
||||
_spawns.put(3, new ESSpawn(3, GraciaSeeds.DESTRUCTION, new Location(-248360,219272,-12448), new int[]{18678,18679,18680}));
|
||||
_spawns.put(4, new ESSpawn(4, GraciaSeeds.DESTRUCTION, new Location(-249448,219256,-12448), new int[]{18678,18679,18680}));
|
||||
_spawns.put(5, new ESSpawn(5, GraciaSeeds.DESTRUCTION, new Location(-249432,220872,-12448), new int[]{18678,18679,18680}));
|
||||
_spawns.put(6, new ESSpawn(6, GraciaSeeds.DESTRUCTION, new Location(-248360,220888,-12448), new int[]{18678,18679,18680}));
|
||||
|
||||
_spawns.put(7, new ESSpawn(7, GraciaSeeds.DESTRUCTION, new Location(-250088,219256,-12448), new int[]{18681,18682}));
|
||||
_spawns.put(8, new ESSpawn(8, GraciaSeeds.DESTRUCTION, new Location(-250600,219272,-12448), new int[]{18681,18682}));
|
||||
_spawns.put(9, new ESSpawn(9, GraciaSeeds.DESTRUCTION, new Location(-250584,220904,-12448), new int[]{18681,18682}));
|
||||
_spawns.put(10, new ESSpawn(10, GraciaSeeds.DESTRUCTION, new Location(-250072,220888,-12448), new int[]{18681,18682}));
|
||||
|
||||
_spawns.put(11, new ESSpawn(11, GraciaSeeds.DESTRUCTION, new Location(-253096,217704,-12296), new int[]{18683,18678}));
|
||||
_spawns.put(12, new ESSpawn(12, GraciaSeeds.DESTRUCTION, new Location(-253112,217048,-12288), new int[]{18683,18678}));
|
||||
_spawns.put(13, new ESSpawn(13, GraciaSeeds.DESTRUCTION, new Location(-251448,217032,-12288), new int[]{18683,18678}));
|
||||
_spawns.put(14, new ESSpawn(14, GraciaSeeds.DESTRUCTION, new Location(-251416,217672,-12296), new int[]{18683,18678}));
|
||||
|
||||
_spawns.put(15, new ESSpawn(15, GraciaSeeds.DESTRUCTION, new Location(-251416,217672,-12296), new int[]{18679,18680}));
|
||||
_spawns.put(16, new ESSpawn(16, GraciaSeeds.DESTRUCTION, new Location(-251416,217016,-12280), new int[]{18679,18680}));
|
||||
_spawns.put(17, new ESSpawn(17, GraciaSeeds.DESTRUCTION, new Location(-249752,217016,-12280), new int[]{18679,18680}));
|
||||
_spawns.put(18, new ESSpawn(18, GraciaSeeds.DESTRUCTION, new Location(-249736,217688,-12296), new int[]{18679,18680}));
|
||||
|
||||
_spawns.put(19, new ESSpawn(19, GraciaSeeds.DESTRUCTION, new Location(-252472,215208,-12120), new int[]{18681,18682}));
|
||||
_spawns.put(20, new ESSpawn(20, GraciaSeeds.DESTRUCTION, new Location(-252552,216760,-12248), new int[]{18681,18682}));
|
||||
_spawns.put(21, new ESSpawn(21, GraciaSeeds.DESTRUCTION, new Location(-253160,216744,-12248), new int[]{18681,18682}));
|
||||
_spawns.put(22, new ESSpawn(22, GraciaSeeds.DESTRUCTION, new Location(-253128,215160,-12096), new int[]{18681,18682}));
|
||||
|
||||
_spawns.put(23, new ESSpawn(23, GraciaSeeds.DESTRUCTION, new Location(-250392,215208,-12120), new int[]{18683,18678}));
|
||||
_spawns.put(24, new ESSpawn(24, GraciaSeeds.DESTRUCTION, new Location(-250264,216744,-12248), new int[]{18683,18678}));
|
||||
_spawns.put(25, new ESSpawn(25, GraciaSeeds.DESTRUCTION, new Location(-249720,216744,-12248), new int[]{18683,18678}));
|
||||
_spawns.put(26, new ESSpawn(26, GraciaSeeds.DESTRUCTION, new Location(-249752,215128,-12096), new int[]{18683,18678}));
|
||||
|
||||
_spawns.put(27, new ESSpawn(27, GraciaSeeds.DESTRUCTION, new Location(-250280,216760,-12248), new int[]{18679,18680,18681}));
|
||||
_spawns.put(28, new ESSpawn(28, GraciaSeeds.DESTRUCTION, new Location(-250344,216152,-12248), new int[]{18679,18680,18681}));
|
||||
_spawns.put(29, new ESSpawn(29, GraciaSeeds.DESTRUCTION, new Location(-252504,216152,-12248), new int[]{18679,18680,18681}));
|
||||
_spawns.put(30, new ESSpawn(30, GraciaSeeds.DESTRUCTION, new Location(-252520,216792,-12248), new int[]{18679,18680,18681}));
|
||||
|
||||
_spawns.put(31, new ESSpawn(31, GraciaSeeds.DESTRUCTION, new Location(-242520,217272,-12384), new int[]{18681,18682,18683}));
|
||||
_spawns.put(32, new ESSpawn(32, GraciaSeeds.DESTRUCTION, new Location(-241432,217288,-12384), new int[]{18681,18682,18683}));
|
||||
_spawns.put(33, new ESSpawn(33, GraciaSeeds.DESTRUCTION, new Location(-241432,218936,-12384), new int[]{18681,18682,18683}));
|
||||
_spawns.put(34, new ESSpawn(34, GraciaSeeds.DESTRUCTION, new Location(-242536,218936,-12384), new int[]{18681,18682,18683}));
|
||||
|
||||
_spawns.put(35, new ESSpawn(35, GraciaSeeds.DESTRUCTION, new Location(-240808,217272,-12384), new int[]{18678,18679}));
|
||||
_spawns.put(36, new ESSpawn(36, GraciaSeeds.DESTRUCTION, new Location(-240280,217272,-12384), new int[]{18678,18679}));
|
||||
_spawns.put(37, new ESSpawn(37, GraciaSeeds.DESTRUCTION, new Location(-240280,218952,-12384), new int[]{18678,18679}));
|
||||
_spawns.put(38, new ESSpawn(38, GraciaSeeds.DESTRUCTION, new Location(-240792,218936,-12384), new int[]{18678,18679}));
|
||||
|
||||
_spawns.put(39, new ESSpawn(39, GraciaSeeds.DESTRUCTION, new Location(-239576,217240,-12640), new int[]{18680,18681,18682}));
|
||||
_spawns.put(40, new ESSpawn(40, GraciaSeeds.DESTRUCTION, new Location(-239560,216168,-12640), new int[]{18680,18681,18682}));
|
||||
_spawns.put(41, new ESSpawn(41, GraciaSeeds.DESTRUCTION, new Location(-237896,216152,-12640), new int[]{18680,18681,18682}));
|
||||
_spawns.put(42, new ESSpawn(42, GraciaSeeds.DESTRUCTION, new Location(-237912,217256,-12640), new int[]{18680,18681,18682}));
|
||||
|
||||
_spawns.put(43, new ESSpawn(43, GraciaSeeds.DESTRUCTION, new Location(-237896,215528,-12640), new int[]{18683,18678}));
|
||||
_spawns.put(44, new ESSpawn(44, GraciaSeeds.DESTRUCTION, new Location(-239560,215528,-12640), new int[]{18683,18678}));
|
||||
_spawns.put(45, new ESSpawn(45, GraciaSeeds.DESTRUCTION, new Location(-239560,214984,-12640), new int[]{18683,18678}));
|
||||
_spawns.put(46, new ESSpawn(46, GraciaSeeds.DESTRUCTION, new Location(-237896,215000,-12640), new int[]{18683,18678}));
|
||||
|
||||
_spawns.put(47, new ESSpawn(47, GraciaSeeds.DESTRUCTION, new Location(-237896,213640,-12768), new int[]{18678,18679,18680}));
|
||||
_spawns.put(48, new ESSpawn(48, GraciaSeeds.DESTRUCTION, new Location(-239560,213640,-12768), new int[]{18678,18679,18680}));
|
||||
_spawns.put(49, new ESSpawn(49, GraciaSeeds.DESTRUCTION, new Location(-239544,212552,-12768), new int[]{18678,18679,18680}));
|
||||
_spawns.put(50, new ESSpawn(50, GraciaSeeds.DESTRUCTION, new Location(-237912,212552,-12768), new int[]{18678,18679,18680}));
|
||||
|
||||
_spawns.put(51, new ESSpawn(51, GraciaSeeds.DESTRUCTION, new Location(-237912,211912,-12768), new int[]{18681,18682}));
|
||||
_spawns.put(52, new ESSpawn(52, GraciaSeeds.DESTRUCTION, new Location(-237912,211400,-12768), new int[]{18681,18682}));
|
||||
_spawns.put(53, new ESSpawn(53, GraciaSeeds.DESTRUCTION, new Location(-239560,211400,-12768), new int[]{18681,18682}));
|
||||
_spawns.put(54, new ESSpawn(54, GraciaSeeds.DESTRUCTION, new Location(-239560,211912,-12768), new int[]{18681,18682}));
|
||||
|
||||
_spawns.put(55, new ESSpawn(55, GraciaSeeds.DESTRUCTION, new Location(-241960,214536,-12512), new int[]{18683,18678,18679}));
|
||||
_spawns.put(56, new ESSpawn(56, GraciaSeeds.DESTRUCTION, new Location(-241976,213448,-12512), new int[]{18683,18678,18679}));
|
||||
_spawns.put(57, new ESSpawn(57, GraciaSeeds.DESTRUCTION, new Location(-243624,213448,-12512), new int[]{18683,18678,18679}));
|
||||
_spawns.put(58, new ESSpawn(58, GraciaSeeds.DESTRUCTION, new Location(-243624,214520,-12512), new int[]{18683,18678,18679}));
|
||||
|
||||
_spawns.put(59, new ESSpawn(59, GraciaSeeds.DESTRUCTION, new Location(-241976,212808,-12504), new int[]{18680,18681}));
|
||||
_spawns.put(60, new ESSpawn(60, GraciaSeeds.DESTRUCTION, new Location(-241960,212280,-12504), new int[]{18680,18681}));
|
||||
_spawns.put(61, new ESSpawn(61, GraciaSeeds.DESTRUCTION, new Location(-243624,212264,-12504), new int[]{18680,18681}));
|
||||
_spawns.put(62, new ESSpawn(62, GraciaSeeds.DESTRUCTION, new Location(-243624,212792,-12504), new int[]{18680,18681}));
|
||||
|
||||
_spawns.put(63, new ESSpawn(63, GraciaSeeds.DESTRUCTION, new Location(-243640,210920,-12640), new int[]{18682,18683,18678}));
|
||||
_spawns.put(64, new ESSpawn(64, GraciaSeeds.DESTRUCTION, new Location(-243624,209832,-12640), new int[]{18682,18683,18678}));
|
||||
_spawns.put(65, new ESSpawn(65, GraciaSeeds.DESTRUCTION, new Location(-241976,209832,-12640), new int[]{18682,18683,18678}));
|
||||
_spawns.put(66, new ESSpawn(66, GraciaSeeds.DESTRUCTION, new Location(-241976,210920,-12640), new int[]{18682,18683,18678}));
|
||||
|
||||
_spawns.put(67, new ESSpawn(67, GraciaSeeds.DESTRUCTION, new Location(-241976,209192,-12640), new int[]{18679,18680}));
|
||||
_spawns.put(68, new ESSpawn(68, GraciaSeeds.DESTRUCTION, new Location(-241976,208664,-12640), new int[]{18679,18680}));
|
||||
_spawns.put(69, new ESSpawn(69, GraciaSeeds.DESTRUCTION, new Location(-243624,208664,-12640), new int[]{18679,18680}));
|
||||
_spawns.put(70, new ESSpawn(70, GraciaSeeds.DESTRUCTION, new Location(-243624,209192,-12640), new int[]{18679,18680}));
|
||||
|
||||
_spawns.put(71, new ESSpawn(71, GraciaSeeds.DESTRUCTION, new Location(-241256,208664,-12896), new int[]{18681,18682,18683}));
|
||||
_spawns.put(72, new ESSpawn(72, GraciaSeeds.DESTRUCTION, new Location(-240168,208648,-12896), new int[]{18681,18682,18683}));
|
||||
_spawns.put(73, new ESSpawn(73, GraciaSeeds.DESTRUCTION, new Location(-240168,207000,-12896), new int[]{18681,18682,18683}));
|
||||
_spawns.put(74, new ESSpawn(74, GraciaSeeds.DESTRUCTION, new Location(-241256,207000,-12896), new int[]{18681,18682,18683}));
|
||||
|
||||
_spawns.put(75, new ESSpawn(75, GraciaSeeds.DESTRUCTION, new Location(-239528,208648,-12896), new int[]{18678,18679}));
|
||||
_spawns.put(76, new ESSpawn(76, GraciaSeeds.DESTRUCTION, new Location(-238984,208664,-12896), new int[]{18678,18679}));
|
||||
_spawns.put(77, new ESSpawn(77, GraciaSeeds.DESTRUCTION, new Location(-239000,207000,-12896), new int[]{18678,18679}));
|
||||
_spawns.put(78, new ESSpawn(78, GraciaSeeds.DESTRUCTION, new Location(-239512,207000,-12896), new int[]{18678,18679}));
|
||||
|
||||
_spawns.put(79, new ESSpawn(79, GraciaSeeds.DESTRUCTION, new Location(-245064,213144,-12384), new int[]{18680,18681,18682}));
|
||||
_spawns.put(80, new ESSpawn(80, GraciaSeeds.DESTRUCTION, new Location(-245064,212072,-12384), new int[]{18680,18681,18682}));
|
||||
_spawns.put(81, new ESSpawn(81, GraciaSeeds.DESTRUCTION, new Location(-246696,212072,-12384), new int[]{18680,18681,18682}));
|
||||
_spawns.put(82, new ESSpawn(82, GraciaSeeds.DESTRUCTION, new Location(-246696,213160,-12384), new int[]{18680,18681,18682}));
|
||||
|
||||
_spawns.put(83, new ESSpawn(83, GraciaSeeds.DESTRUCTION, new Location(-245064,211416,-12384), new int[]{18683,18678}));
|
||||
_spawns.put(84, new ESSpawn(84, GraciaSeeds.DESTRUCTION, new Location(-245048,210904,-12384), new int[]{18683,18678}));
|
||||
_spawns.put(85, new ESSpawn(85, GraciaSeeds.DESTRUCTION, new Location(-246712,210888,-12384), new int[]{18683,18678}));
|
||||
_spawns.put(86, new ESSpawn(86, GraciaSeeds.DESTRUCTION, new Location(-246712,211416,-12384), new int[]{18683,18678}));
|
||||
|
||||
_spawns.put(87, new ESSpawn(87, GraciaSeeds.DESTRUCTION, new Location(-245048,209544,-12512), new int[]{18679,18680,18681}));
|
||||
_spawns.put(88, new ESSpawn(88, GraciaSeeds.DESTRUCTION, new Location(-245064,208456,-12512), new int[]{18679,18680,18681}));
|
||||
_spawns.put(89, new ESSpawn(89, GraciaSeeds.DESTRUCTION, new Location(-246696,208456,-12512), new int[]{18679,18680,18681}));
|
||||
_spawns.put(90, new ESSpawn(90, GraciaSeeds.DESTRUCTION, new Location(-246712,209544,-12512), new int[]{18679,18680,18681}));
|
||||
|
||||
_spawns.put(91, new ESSpawn(91, GraciaSeeds.DESTRUCTION, new Location(-245048,207816,-12512), new int[]{18682,18683}));
|
||||
_spawns.put(92, new ESSpawn(92, GraciaSeeds.DESTRUCTION, new Location(-245048,207288,-12512), new int[]{18682,18683}));
|
||||
_spawns.put(93, new ESSpawn(93, GraciaSeeds.DESTRUCTION, new Location(-246696,207304,-12512), new int[]{18682,18683}));
|
||||
_spawns.put(94, new ESSpawn(94, GraciaSeeds.DESTRUCTION, new Location(-246712,207816,-12512), new int[]{18682,18683}));
|
||||
|
||||
_spawns.put(95, new ESSpawn(95, GraciaSeeds.DESTRUCTION, new Location(-244328,207272,-12768), new int[]{18678,18679,18680}));
|
||||
_spawns.put(96, new ESSpawn(96, GraciaSeeds.DESTRUCTION, new Location(-243256,207256,-12768), new int[]{18678,18679,18680}));
|
||||
_spawns.put(97, new ESSpawn(97, GraciaSeeds.DESTRUCTION, new Location(-243256,205624,-12768), new int[]{18678,18679,18680}));
|
||||
_spawns.put(98, new ESSpawn(98, GraciaSeeds.DESTRUCTION, new Location(-244328,205608,-12768), new int[]{18678,18679,18680}));
|
||||
|
||||
_spawns.put(99, new ESSpawn(99, GraciaSeeds.DESTRUCTION, new Location(-242616,207272,-12768), new int[]{18681,18682}));
|
||||
_spawns.put(100, new ESSpawn(100, GraciaSeeds.DESTRUCTION, new Location(-242104,207272,-12768), new int[]{18681,18682}));
|
||||
_spawns.put(101, new ESSpawn(101, GraciaSeeds.DESTRUCTION, new Location(-242088,205624,-12768), new int[]{18681,18682}));
|
||||
_spawns.put(102, new ESSpawn(102, GraciaSeeds.DESTRUCTION, new Location(-242600,205608,-12768), new int[]{18681,18682}));
|
||||
|
||||
// Seed of Annihilation
|
||||
_spawns.put(103, new ESSpawn(103, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184519,183007,-10456), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(104, new ESSpawn(104, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184873,181445,-10488), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(105, new ESSpawn(105, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184009,180962,-10488), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(106, new ESSpawn(106, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-185321,181641,-10448), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(107, new ESSpawn(107, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184035,182775,-10512), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(108, new ESSpawn(108, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-185433,181935,-10424), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(109, new ESSpawn(109, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-183309,183007,-10560), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(110, new ESSpawn(110, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184929,181886,-10488), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(111, new ESSpawn(111, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184009,180392,-10424), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(112, new ESSpawn(112, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-183793,183239,-10488), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(113, new ESSpawn(113, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184245,180848,-10464), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(114, new ESSpawn(114, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-182704,183761,-10528), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(115, new ESSpawn(115, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184705,181886,-10504), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(116, new ESSpawn(116, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184304,181076,-10488), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(117, new ESSpawn(117, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-183596,180430,-10424), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(118, new ESSpawn(118, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184422,181038,-10480), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(119, new ESSpawn(119, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184929,181543,-10496), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(120, new ESSpawn(120, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184398,182891,-10472), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(121, new ESSpawn(121, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-177606,182848,-10584), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(122, new ESSpawn(122, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-178104,183224,-10560), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(123, new ESSpawn(123, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-177274,182284,-10600), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(124, new ESSpawn(124, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-177772,183224,-10560), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(125, new ESSpawn(125, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-181532,180364,-10504), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(126, new ESSpawn(126, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-181802,180276,-10496), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(127, new ESSpawn(127, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-178429,180444,-10512), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(128, new ESSpawn(128, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-177606,182190,-10600), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(129, new ESSpawn(129, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-177357,181908,-10576), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(130, new ESSpawn(130, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-178747,179534,-10408), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(131, new ESSpawn(131, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-178429,179534,-10392), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(132, new ESSpawn(132, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-178853,180094,-10472), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(133, new ESSpawn(133, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-181937,179660,-10416), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(134, new ESSpawn(134, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-180992,179572,-10416), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(135, new ESSpawn(135, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-185552,179252,-10368), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(136, new ESSpawn(136, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184572,178913,-10400), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(137, new ESSpawn(137, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184768,178348,-10312), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(138, new ESSpawn(138, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-184572,178574,-10352), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(139, new ESSpawn(139, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-185062,178913,-10384), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(140, new ESSpawn(140, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-181397,179484,-10416), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(141, new ESSpawn(141, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-181667,179044,-10408), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(142, new ESSpawn(142, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-185258,177896,-10240), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(143, new ESSpawn(143, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-183506,176570,-10280), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(144, new ESSpawn(144, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-183719,176804,-10240), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(145, new ESSpawn(145, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-183648,177116,-10240), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(146, new ESSpawn(146, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-183932,176492,-10240), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(147, new ESSpawn(147, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-183861,176570,-10240), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(148, new ESSpawn(148, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-183790,175946,-10240), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(149, new ESSpawn(149, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-178641,179604,-10416), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(150, new ESSpawn(150, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-178959,179814,-10432), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(151, new ESSpawn(151, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-176367,178456,-10376), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(152, new ESSpawn(152, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-175845,177172,-10264), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(153, new ESSpawn(153, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-175323,177600,-10248), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(154, new ESSpawn(154, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-174975,177172,-10216), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(155, new ESSpawn(155, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-176019,178242,-10352), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(156, new ESSpawn(156, GraciaSeeds.ANNIHILATION_BISTAKON, new Location(-174801,178456,-10264), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
|
||||
_spawns.put(157, new ESSpawn(157, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185648,183384,-15680), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(158, new ESSpawn(158, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-186740,180908,-15528), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(159, new ESSpawn(159, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185297,184658,-15680), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(160, new ESSpawn(160, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185697,181601,-15488), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(161, new ESSpawn(161, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-186684,182744,-15536), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(162, new ESSpawn(162, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-184908,183384,-15616), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(163, new ESSpawn(163, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-184994,185572,-15784), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(164, new ESSpawn(164, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185796,182616,-15608), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(165, new ESSpawn(165, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-184970,184385,-15648), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(166, new ESSpawn(166, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185995,180809,-15512), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(167, new ESSpawn(167, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185352,182872,-15632), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(168, new ESSpawn(168, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185624,184294,-15680), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(169, new ESSpawn(169, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-184486,185774,-15816), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(170, new ESSpawn(170, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-186496,184112,-15680), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(171, new ESSpawn(171, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-184232,185976,-15816), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(172, new ESSpawn(172, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-184994,185673,-15792), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(173, new ESSpawn(173, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185733,184203,-15680), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(174, new ESSpawn(174, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185079,184294,-15680), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(175, new ESSpawn(175, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-184803,180710,-15528), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(176, new ESSpawn(176, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-186293,180413,-15528), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(177, new ESSpawn(177, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185352,182936,-15632), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(178, new ESSpawn(178, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-184356,180611,-15496), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(179, new ESSpawn(179, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185375,186784,-15816), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(180, new ESSpawn(180, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-184867,186784,-15816), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(181, new ESSpawn(181, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-180553,180454,-15152), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(182, new ESSpawn(182, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-180422,180454,-15152), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(183, new ESSpawn(183, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-181863,181138,-15120), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(184, new ESSpawn(184, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-181732,180454,-15152), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(185, new ESSpawn(185, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-180684,180397,-15152), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(186, new ESSpawn(186, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-182256,180682,-15112), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(187, new ESSpawn(187, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185492,179492,-15392), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(188, new ESSpawn(188, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185894,178538,-15336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(189, new ESSpawn(189, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-186028,178856,-15336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(190, new ESSpawn(190, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185224,179068,-15336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(191, new ESSpawn(191, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185492,178538,-15336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(192, new ESSpawn(192, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185894,178538,-15336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(193, new ESSpawn(193, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-180619,178855,-15152), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(194, new ESSpawn(194, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-180255,177892,-15152), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(195, new ESSpawn(195, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-185804,176472,-15336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(196, new ESSpawn(196, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-184580,176370,-15320), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(197, new ESSpawn(197, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-184308,176166,-15320), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(198, new ESSpawn(198, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-183764,177186,-15304), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(199, new ESSpawn(199, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-180801,177571,-15144), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(200, new ESSpawn(200, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-184716,176064,-15320), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(201, new ESSpawn(201, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-184444,175452,-15296), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(202, new ESSpawn(202, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-180164,177464,-15152), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(203, new ESSpawn(203, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-180164,178213,-15152), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(204, new ESSpawn(204, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-179982,178320,-15152), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(205, new ESSpawn(205, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-176925,177757,-15824), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(206, new ESSpawn(206, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-176164,179282,-15720), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(207, new ESSpawn(207, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-175692,177613,-15800), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(208, new ESSpawn(208, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-175418,178117,-15824), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(209, new ESSpawn(209, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-176103,177829,-15824), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(210, new ESSpawn(210, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-175966,177325,-15792), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(211, new ESSpawn(211, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-174778,179732,-15664), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(212, new ESSpawn(212, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-175692,178261,-15824), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(213, new ESSpawn(213, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-176038,179192,-15736), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(214, new ESSpawn(214, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-175660,179462,-15680), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(215, new ESSpawn(215, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-175912,179732,-15664), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(216, new ESSpawn(216, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-175156,180182,-15680), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(217, new ESSpawn(217, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-174240,182059,-15664), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(218, new ESSpawn(218, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-175590,181478,-15640), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(219, new ESSpawn(219, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-174510,181561,-15616), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(220, new ESSpawn(220, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-174240,182391,-15688), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(221, new ESSpawn(221, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-174105,182806,-15672), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(222, new ESSpawn(222, GraciaSeeds.ANNIHILATION_REPTILIKON, new Location(-174645,182806,-15712), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
|
||||
_spawns.put(223, new ESSpawn(223, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-214962,182403,-10992), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(224, new ESSpawn(224, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-215019,182493,-11000), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(225, new ESSpawn(225, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-211374,180793,-11672), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(226, new ESSpawn(226, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-211198,180661,-11680), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(227, new ESSpawn(227, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-213097,178936,-12720), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(228, new ESSpawn(228, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-213517,178936,-12712), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(229, new ESSpawn(229, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-214105,179191,-12720), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(230, new ESSpawn(230, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-213769,179446,-12720), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(231, new ESSpawn(231, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-214021,179344,-12720), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(232, new ESSpawn(232, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-210582,180595,-11672), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(233, new ESSpawn(233, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-210934,180661,-11696), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(234, new ESSpawn(234, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-207058,178460,-12656), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(235, new ESSpawn(235, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-207454,179151,-11368), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(236, new ESSpawn(236, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-207422,181365,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(237, new ESSpawn(237, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-207358,180627,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(238, new ESSpawn(238, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-207230,180996,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(239, new ESSpawn(239, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-208515,184160,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(240, new ESSpawn(240, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-207613,184000,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(241, new ESSpawn(241, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-208597,183760,-11352), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(242, new ESSpawn(242, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206710,176142,-12656), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(243, new ESSpawn(243, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206361,178136,-11336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(244, new ESSpawn(244, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206178,178630,-12672), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(245, new ESSpawn(245, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-205738,178715,-12656), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(246, new ESSpawn(246, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206442,178205,-12648), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(247, new ESSpawn(247, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206585,178874,-11336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(248, new ESSpawn(248, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206073,179366,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(249, new ESSpawn(249, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206009,178628,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(250, new ESSpawn(250, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206155,181301,-12656), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(251, new ESSpawn(251, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206595,181641,-12656), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(252, new ESSpawn(252, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206507,181641,-12656), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(253, new ESSpawn(253, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206507,181471,-12640), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(254, new ESSpawn(254, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206974,175972,-12672), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(255, new ESSpawn(255, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206304,175130,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(256, new ESSpawn(256, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206886,175802,-12672), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(257, new ESSpawn(257, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-207238,175972,-12672), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(258, new ESSpawn(258, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206386,174857,-11328), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(259, new ESSpawn(259, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-206386,175039,-11336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(260, new ESSpawn(260, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-205976,174584,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(261, new ESSpawn(261, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-207367,184320,-11336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(262, new ESSpawn(262, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219002,180419,-12608), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(263, new ESSpawn(263, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-218853,182790,-12592), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(264, new ESSpawn(264, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-218853,183343,-12600), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(265, new ESSpawn(265, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-218358,186247,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(266, new ESSpawn(266, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-218358,186083,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(267, new ESSpawn(267, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-217574,185796,-11352), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(268, new ESSpawn(268, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219178,181051,-12592), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(269, new ESSpawn(269, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-220171,180313,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(270, new ESSpawn(270, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219293,183738,-12592), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(271, new ESSpawn(271, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219381,182553,-12584), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(272, new ESSpawn(272, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219600,183024,-11336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(273, new ESSpawn(273, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219940,182680,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(274, new ESSpawn(274, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219260,183884,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(275, new ESSpawn(275, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219855,183540,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(276, new ESSpawn(276, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-218946,186575,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(277, new ESSpawn(277, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219882,180103,-12592), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(278, new ESSpawn(278, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219266,179787,-12584), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(279, new ESSpawn(279, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219201,178337,-12592), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(280, new ESSpawn(280, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219716,179875,-11336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(281, new ESSpawn(281, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219716,180021,-11328), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(282, new ESSpawn(282, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219989,179437,-11336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(283, new ESSpawn(283, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219078,178298,-12592), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(284, new ESSpawn(284, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-218684,178954,-11328), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(285, new ESSpawn(285, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219089,178456,-11328), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(286, new ESSpawn(286, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-220266,177623,-12608), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(287, new ESSpawn(287, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219201,178025,-12592), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(288, new ESSpawn(288, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219142,177044,-12592), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(289, new ESSpawn(289, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219690,177895,-12592), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(290, new ESSpawn(290, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219754,177623,-12584), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(291, new ESSpawn(291, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-218791,177830,-12584), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(292, new ESSpawn(292, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-218904,176219,-12592), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(293, new ESSpawn(293, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-218768,176384,-12584), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(294, new ESSpawn(294, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-218774,177626,-11320), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(295, new ESSpawn(295, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-218774,177792,-11328), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(296, new ESSpawn(296, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219880,175901,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(297, new ESSpawn(297, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219210,176054,-12592), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(298, new ESSpawn(298, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219850,175991,-12608), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(299, new ESSpawn(299, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-219079,175021,-11336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(300, new ESSpawn(300, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-218812,174229,-11344), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
_spawns.put(301, new ESSpawn(301, GraciaSeeds.ANNIHILATION_COKRAKON, new Location(-218723,174669,-11336), new int[]{ 18678, 18679, 18680, 18681, 18682, 18683 }));
|
||||
//@formatter:on
|
||||
}
|
||||
|
||||
private class ESSpawn
|
||||
{
|
||||
protected final int _spawnId;
|
||||
protected final GraciaSeeds _seedId;
|
||||
protected final int[] _npcIds;
|
||||
protected final Location _loc;
|
||||
|
||||
public ESSpawn(int spawnId, GraciaSeeds seedId, Location loc, int[] npcIds)
|
||||
{
|
||||
_spawnId = spawnId;
|
||||
_seedId = seedId;
|
||||
_loc = loc;
|
||||
_npcIds = npcIds;
|
||||
}
|
||||
|
||||
public void scheduleRespawn(long waitTime)
|
||||
{
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(() ->
|
||||
{
|
||||
// if the AI is inactive, do not spawn the NPC
|
||||
if (isSeedActive(_seedId))
|
||||
{
|
||||
// get a random NPC that should spawn at this location
|
||||
Integer spawnId = _spawnId; // the map uses "Integer", not "int"
|
||||
_spawnedNpcs.put(addSpawn(_npcIds[getRandom(_npcIds.length)], _loc, false, 0), spawnId);
|
||||
}
|
||||
}, waitTime);
|
||||
}
|
||||
}
|
||||
}
|
134
trunk/dist/game/data/scripts/gracia/AI/Lindvior.java
vendored
Normal file
134
trunk/dist/game/data/scripts/gracia/AI/Lindvior.java
vendored
Normal file
@ -0,0 +1,134 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 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 gracia.AI;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
|
||||
import ai.npc.AbstractNpcAI;
|
||||
|
||||
import com.l2jserver.gameserver.datatables.SpawnTable;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.network.NpcStringId;
|
||||
import com.l2jserver.gameserver.network.clientpackets.Say2;
|
||||
|
||||
/**
|
||||
* Lindvior Scene AI.
|
||||
* @author nonom
|
||||
*/
|
||||
public class Lindvior extends AbstractNpcAI
|
||||
{
|
||||
private static final int LINDVIOR_CAMERA = 18669;
|
||||
private static final int TOMARIS = 32552;
|
||||
private static final int ARTIUS = 32559;
|
||||
|
||||
private static int LINDVIOR_SCENE_ID = 1;
|
||||
|
||||
private static final int RESET_HOUR = 18;
|
||||
private static final int RESET_MIN = 58;
|
||||
private static final int RESET_DAY_1 = Calendar.TUESDAY;
|
||||
private static final int RESET_DAY_2 = Calendar.FRIDAY;
|
||||
|
||||
private static boolean ALT_MODE = false;
|
||||
private static int ALT_MODE_MIN = 60; // schedule delay in minutes if ALT_MODE enabled
|
||||
|
||||
private L2Npc _lindviorCamera = null;
|
||||
private L2Npc _tomaris = null;
|
||||
private L2Npc _artius = null;
|
||||
|
||||
public Lindvior()
|
||||
{
|
||||
super(Lindvior.class.getSimpleName(), "gracia/AI");
|
||||
scheduleNextLindviorVisit();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "tomaris_shout1":
|
||||
broadcastNpcSay(npc, Say2.NPC_SHOUT, NpcStringId.HUH_THE_SKY_LOOKS_FUNNY_WHAT_S_THAT);
|
||||
break;
|
||||
case "artius_shout":
|
||||
broadcastNpcSay(npc, Say2.NPC_SHOUT, NpcStringId.A_POWERFUL_SUBORDINATE_IS_BEING_HELD_BY_THE_BARRIER_ORB_THIS_REACTION_MEANS);
|
||||
break;
|
||||
case "tomaris_shout2":
|
||||
broadcastNpcSay(npc, Say2.NPC_SHOUT, NpcStringId.BE_CAREFUL_SOMETHING_S_COMING);
|
||||
break;
|
||||
case "lindvior_scene":
|
||||
if (npc != null)
|
||||
{
|
||||
for (L2PcInstance pl : npc.getKnownList().getKnownPlayersInRadius(4000))
|
||||
{
|
||||
if ((pl.getZ() >= 1100) && (pl.getZ() <= 3100))
|
||||
{
|
||||
pl.showQuestMovie(LINDVIOR_SCENE_ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "start":
|
||||
_lindviorCamera = SpawnTable.getInstance().getFirstSpawn(LINDVIOR_CAMERA).getLastSpawn();
|
||||
_tomaris = SpawnTable.getInstance().getFirstSpawn(TOMARIS).getLastSpawn();
|
||||
_artius = SpawnTable.getInstance().getFirstSpawn(ARTIUS).getLastSpawn();
|
||||
|
||||
startQuestTimer("tomaris_shout1", 1000, _tomaris, null);
|
||||
startQuestTimer("artius_shout", 60000, _artius, null);
|
||||
startQuestTimer("tomaris_shout2", 90000, _tomaris, null);
|
||||
startQuestTimer("lindvior_scene", 120000, _lindviorCamera, null);
|
||||
scheduleNextLindviorVisit();
|
||||
break;
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
public void scheduleNextLindviorVisit()
|
||||
{
|
||||
long delay = (ALT_MODE) ? ALT_MODE_MIN * 60000 : scheduleNextLindviorDate();
|
||||
startQuestTimer("start", delay, null, null);
|
||||
}
|
||||
|
||||
protected long scheduleNextLindviorDate()
|
||||
{
|
||||
GregorianCalendar date = new GregorianCalendar();
|
||||
date.set(Calendar.MINUTE, RESET_MIN);
|
||||
date.set(Calendar.HOUR_OF_DAY, RESET_HOUR);
|
||||
if (System.currentTimeMillis() >= date.getTimeInMillis())
|
||||
{
|
||||
date.add(Calendar.DAY_OF_WEEK, 1);
|
||||
}
|
||||
|
||||
int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);
|
||||
if (dayOfWeek <= RESET_DAY_1)
|
||||
{
|
||||
date.add(Calendar.DAY_OF_WEEK, RESET_DAY_1 - dayOfWeek);
|
||||
}
|
||||
else if (dayOfWeek <= RESET_DAY_2)
|
||||
{
|
||||
date.add(Calendar.DAY_OF_WEEK, RESET_DAY_2 - dayOfWeek);
|
||||
}
|
||||
else
|
||||
{
|
||||
date.add(Calendar.DAY_OF_WEEK, 1 + RESET_DAY_1);
|
||||
}
|
||||
return date.getTimeInMillis() - System.currentTimeMillis();
|
||||
}
|
||||
}
|
379
trunk/dist/game/data/scripts/gracia/AI/Maguen.java
vendored
Normal file
379
trunk/dist/game/data/scripts/gracia/AI/Maguen.java
vendored
Normal file
@ -0,0 +1,379 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 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 gracia.AI;
|
||||
|
||||
import gracia.AI.NPC.Nemo.Nemo;
|
||||
import ai.npc.AbstractNpcAI;
|
||||
|
||||
import com.l2jserver.gameserver.ai.CtrlIntention;
|
||||
import com.l2jserver.gameserver.instancemanager.QuestManager;
|
||||
import com.l2jserver.gameserver.model.L2Object;
|
||||
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.model.quest.Quest;
|
||||
import com.l2jserver.gameserver.model.skills.BuffInfo;
|
||||
import com.l2jserver.gameserver.model.skills.Skill;
|
||||
import com.l2jserver.gameserver.network.NpcStringId;
|
||||
|
||||
/**
|
||||
* Maguen AI.
|
||||
* @author St3eT
|
||||
*/
|
||||
public final class Maguen extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int MAGUEN = 18839; // Wild Maguen
|
||||
private static final int[] ELITES =
|
||||
{
|
||||
22750, // Elite Bgurent (Bistakon)
|
||||
22751, // Elite Brakian (Bistakon)
|
||||
22752, // Elite Groikan (Bistakon)
|
||||
22753, // Elite Treykan (Bistakon)
|
||||
22757, // Elite Turtlelian (Reptilikon)
|
||||
22758, // Elite Krajian (Reptilikon)
|
||||
22759, // Elite Tardyon (Reptilikon)
|
||||
22763, // Elite Kanibi (Kokracon)
|
||||
22764, // Elite Kiriona (Kokracon)
|
||||
22765, // Elite Kaiona (Kokracon)
|
||||
};
|
||||
// Item
|
||||
private static final int MAGUEN_PET = 15488; // Maguen Pet Collar
|
||||
private static final int ELITE_MAGUEN_PET = 15489; // Elite Maguen Pet Collar
|
||||
// Skills
|
||||
private static final SkillHolder MACHINE = new SkillHolder(9060, 1); // Maguen Machine
|
||||
private static final SkillHolder B_BUFF_1 = new SkillHolder(6343, 1); // Maguen Plasma - Power
|
||||
private static final SkillHolder B_BUFF_2 = new SkillHolder(6343, 2); // Maguen Plasma - Power
|
||||
private static final SkillHolder C_BUFF_1 = new SkillHolder(6365, 1); // Maguen Plasma - Speed
|
||||
private static final SkillHolder C_BUFF_2 = new SkillHolder(6365, 2); // Maguen Plasma - Speed
|
||||
private static final SkillHolder R_BUFF_1 = new SkillHolder(6366, 1); // Maguen Plasma - Critical
|
||||
private static final SkillHolder R_BUFF_2 = new SkillHolder(6366, 2); // Maguen Plasma - Critical
|
||||
private static final SkillHolder B_PLASMA1 = new SkillHolder(6367, 1); // Maguen Plasma - Bistakon
|
||||
private static final SkillHolder B_PLASMA2 = new SkillHolder(6367, 2); // Maguen Plasma - Bistakon
|
||||
private static final SkillHolder B_PLASMA3 = new SkillHolder(6367, 3); // Maguen Plasma - Bistakon
|
||||
private static final SkillHolder C_PLASMA1 = new SkillHolder(6368, 1); // Maguen Plasma - Cokrakon
|
||||
private static final SkillHolder C_PLASMA2 = new SkillHolder(6368, 2); // Maguen Plasma - Cokrakon
|
||||
private static final SkillHolder C_PLASMA3 = new SkillHolder(6368, 3); // Maguen Plasma - Cokrakon
|
||||
private static final SkillHolder R_PLASMA1 = new SkillHolder(6369, 1); // Maguen Plasma - Reptilikon
|
||||
private static final SkillHolder R_PLASMA2 = new SkillHolder(6369, 2); // Maguen Plasma - Reptilikon
|
||||
private static final SkillHolder R_PLASMA3 = new SkillHolder(6369, 3); // Maguen Plasma - Reptilikon
|
||||
|
||||
public Maguen()
|
||||
{
|
||||
super(Maguen.class.getSimpleName(), "gracia/AI");
|
||||
addKillId(ELITES);
|
||||
addSkillSeeId(MAGUEN);
|
||||
addSpellFinishedId(MAGUEN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if ((npc == null) || (player == null))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case "SPAWN_MAGUEN":
|
||||
{
|
||||
final L2Npc maguen = addSpawn(MAGUEN, npc.getLocation(), true, 60000, true);
|
||||
maguen.getVariables().set("SUMMON_PLAYER", player);
|
||||
maguen.setTitle(player.getName());
|
||||
maguen.setIsRunning(true);
|
||||
maguen.getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, player);
|
||||
maguen.broadcastStatusUpdate();
|
||||
showOnScreenMsg(player, NpcStringId.MAGUEN_APPEARANCE, 2, 4000);
|
||||
startQuestTimer("DIST_CHECK_TIMER", 1000, maguen, player);
|
||||
break;
|
||||
}
|
||||
case "DIST_CHECK_TIMER":
|
||||
{
|
||||
if ((npc.calculateDistance(player, true, false) < 100) && (npc.getVariables().getInt("IS_NEAR_PLAYER") == 0))
|
||||
{
|
||||
npc.getVariables().set("IS_NEAR_PLAYER", 1);
|
||||
startQuestTimer("FIRST_TIMER", 4000, npc, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("DIST_CHECK_TIMER", 1000, npc, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "FIRST_TIMER":
|
||||
{
|
||||
npc.getAI().stopFollow();
|
||||
final int randomEffect = getRandom(1, 3);
|
||||
npc.setDisplayEffect(randomEffect);
|
||||
npc.getVariables().set("NPC_EFFECT", randomEffect);
|
||||
startQuestTimer("SECOND_TIMER", 5000 + getRandom(300), npc, player);
|
||||
npc.broadcastSocialAction(getRandom(1, 3));
|
||||
break;
|
||||
}
|
||||
case "SECOND_TIMER":
|
||||
{
|
||||
final int randomEffect = getRandom(1, 3);
|
||||
npc.setDisplayEffect(4);
|
||||
npc.setDisplayEffect(randomEffect);
|
||||
npc.getVariables().set("NPC_EFFECT", randomEffect);
|
||||
startQuestTimer("THIRD_TIMER", 4600 + getRandom(600), npc, player);
|
||||
npc.broadcastSocialAction(getRandom(1, 3));
|
||||
break;
|
||||
}
|
||||
case "THIRD_TIMER":
|
||||
{
|
||||
final int randomEffect = getRandom(1, 3);
|
||||
npc.setDisplayEffect(4);
|
||||
npc.setDisplayEffect(randomEffect);
|
||||
npc.getVariables().set("NPC_EFFECT", randomEffect);
|
||||
startQuestTimer("FORTH_TIMER", 4200 + getRandom(900), npc, player);
|
||||
npc.broadcastSocialAction(getRandom(1, 3));
|
||||
break;
|
||||
}
|
||||
case "FORTH_TIMER":
|
||||
{
|
||||
npc.getVariables().set("NPC_EFFECT", 0);
|
||||
npc.setDisplayEffect(4);
|
||||
startQuestTimer("END_TIMER", 500, npc, player);
|
||||
npc.broadcastSocialAction(getRandom(1, 3));
|
||||
break;
|
||||
}
|
||||
case "END_TIMER":
|
||||
{
|
||||
if (npc.getVariables().getInt("TEST_MAGUEN") == 1)
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, B_PLASMA1.getSkill().getAbnormalType());
|
||||
player.getEffectList().stopSkillEffects(true, C_PLASMA1.getSkill().getAbnormalType());
|
||||
player.getEffectList().stopSkillEffects(true, R_PLASMA1.getSkill().getAbnormalType());
|
||||
nemoAi().notifyEvent("DECREASE_COUNT", npc, player);
|
||||
}
|
||||
npc.doDie(null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
|
||||
{
|
||||
final BuffInfo b_info = player.getEffectList().getBuffInfoByAbnormalType(B_PLASMA1.getSkill().getAbnormalType());
|
||||
final BuffInfo c_info = player.getEffectList().getBuffInfoByAbnormalType(C_PLASMA1.getSkill().getAbnormalType());
|
||||
final BuffInfo r_info = player.getEffectList().getBuffInfoByAbnormalType(R_PLASMA1.getSkill().getAbnormalType());
|
||||
|
||||
final int b = b_info == null ? 0 : b_info.getSkill().getAbnormalLvl();
|
||||
final int c = c_info == null ? 0 : c_info.getSkill().getAbnormalLvl();
|
||||
final int r = r_info == null ? 0 : r_info.getSkill().getAbnormalLvl();
|
||||
|
||||
if ((b == 3) && (c == 0) && (r == 0))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.ENOUGH_MAGUEN_PLASMA_BISTAKON_HAVE_GATHERED, 2, 4000);
|
||||
player.getEffectList().stopSkillEffects(true, B_PLASMA1.getSkill().getAbnormalType());
|
||||
npc.setTarget(player);
|
||||
npc.doCast((getRandom(100) < 70) ? B_BUFF_1.getSkill() : B_BUFF_2.getSkill());
|
||||
maguenPetChance(player);
|
||||
startQuestTimer("END_TIMER", 3000, npc, player);
|
||||
}
|
||||
else if ((b == 0) && (c == 3) && (r == 0))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.ENOUGH_MAGUEN_PLASMA_KOKRACON_HAVE_GATHERED, 2, 4000);
|
||||
player.getEffectList().stopSkillEffects(true, C_PLASMA1.getSkill().getAbnormalType());
|
||||
npc.setTarget(player);
|
||||
npc.doCast((getRandom(100) < 70) ? C_BUFF_1.getSkill() : C_BUFF_2.getSkill());
|
||||
maguenPetChance(player);
|
||||
startQuestTimer("END_TIMER", 3000, npc, player);
|
||||
}
|
||||
else if ((b == 0) && (c == 0) && (r == 3))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.ENOUGH_MAGUEN_PLASMA_LEPTILIKON_HAVE_GATHERED, 2, 4000);
|
||||
player.getEffectList().stopSkillEffects(true, R_PLASMA1.getSkill().getAbnormalType());
|
||||
npc.setTarget(player);
|
||||
npc.doCast((getRandom(100) < 70) ? R_BUFF_1.getSkill() : R_BUFF_2.getSkill());
|
||||
maguenPetChance(player);
|
||||
startQuestTimer("END_TIMER", 3000, npc, player);
|
||||
}
|
||||
else if ((b + c + r) == 3)
|
||||
{
|
||||
if ((b == 1) && (c == 1) && (r == 1))
|
||||
{
|
||||
player.getEffectList().stopSkillEffects(true, B_PLASMA1.getSkill().getAbnormalType());
|
||||
player.getEffectList().stopSkillEffects(true, C_PLASMA1.getSkill().getAbnormalType());
|
||||
player.getEffectList().stopSkillEffects(true, R_PLASMA1.getSkill().getAbnormalType());
|
||||
showOnScreenMsg(player, NpcStringId.THE_PLASMAS_HAVE_FILLED_THE_AEROSCOPE_AND_ARE_HARMONIZED, 2, 4000);
|
||||
SkillHolder skillToCast = null;
|
||||
switch (getRandom(3))
|
||||
{
|
||||
case 0:
|
||||
skillToCast = (getRandom(100) < 70) ? B_BUFF_1 : B_BUFF_2;
|
||||
break;
|
||||
case 1:
|
||||
skillToCast = (getRandom(100) < 70) ? C_BUFF_1 : C_BUFF_2;
|
||||
break;
|
||||
case 2:
|
||||
skillToCast = (getRandom(100) < 70) ? R_BUFF_1 : R_BUFF_2;
|
||||
break;
|
||||
}
|
||||
|
||||
if (skillToCast != null)
|
||||
{
|
||||
npc.setTarget(player);
|
||||
npc.doCast(skillToCast.getSkill());
|
||||
}
|
||||
maguenPetChance(player);
|
||||
startQuestTimer("END_TIMER", 3000, npc, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.THE_PLASMAS_HAVE_FILLED_THE_AEROSCOPE_BUT_THEY_ARE_RAMMING_INTO_EACH_OTHER_EXPLODING_AND_DYING, 2, 4000);
|
||||
player.getEffectList().stopSkillEffects(true, B_PLASMA1.getSkill().getAbnormalType());
|
||||
player.getEffectList().stopSkillEffects(true, C_PLASMA1.getSkill().getAbnormalType());
|
||||
player.getEffectList().stopSkillEffects(true, R_PLASMA1.getSkill().getAbnormalType());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("END_TIMER", 1000, npc, player);
|
||||
}
|
||||
npc.setDisplayEffect(4);
|
||||
return super.onSpellFinished(npc, player, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSkillSee(L2Npc npc, L2PcInstance caster, Skill skill, L2Object[] targets, boolean isSummon)
|
||||
{
|
||||
if ((skill == MACHINE.getSkill()) && (caster == npc.getVariables().getObject("SUMMON_PLAYER", L2PcInstance.class)))
|
||||
{
|
||||
if ((npc.getVariables().getInt("NPC_EFFECT") != 0) && (npc.getVariables().getInt("BLOCKED_SKILLSEE") == 0))
|
||||
{
|
||||
final BuffInfo i1_info = caster.getEffectList().getBuffInfoByAbnormalType(B_PLASMA1.getSkill().getAbnormalType());
|
||||
final BuffInfo i2_info = caster.getEffectList().getBuffInfoByAbnormalType(C_PLASMA1.getSkill().getAbnormalType());
|
||||
final BuffInfo i3_info = caster.getEffectList().getBuffInfoByAbnormalType(R_PLASMA1.getSkill().getAbnormalType());
|
||||
|
||||
final int i1 = i1_info == null ? 0 : i1_info.getSkill().getAbnormalLvl();
|
||||
final int i2 = i2_info == null ? 0 : i2_info.getSkill().getAbnormalLvl();
|
||||
final int i3 = i3_info == null ? 0 : i3_info.getSkill().getAbnormalLvl();
|
||||
|
||||
caster.getEffectList().stopSkillEffects(true, B_PLASMA1.getSkill().getAbnormalType());
|
||||
caster.getEffectList().stopSkillEffects(true, C_PLASMA1.getSkill().getAbnormalType());
|
||||
caster.getEffectList().stopSkillEffects(true, R_PLASMA1.getSkill().getAbnormalType());
|
||||
cancelQuestTimer("FIRST_TIMER", npc, caster);
|
||||
cancelQuestTimer("SECOND_TIMER", npc, caster);
|
||||
cancelQuestTimer("THIRD_TIMER", npc, caster);
|
||||
cancelQuestTimer("FORTH_TIMER", npc, caster);
|
||||
npc.getVariables().set("BLOCKED_SKILLSEE", 1);
|
||||
|
||||
SkillHolder skillToCast = null;
|
||||
switch (npc.getVariables().getInt("NPC_EFFECT"))
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
switch (i1)
|
||||
{
|
||||
case 0:
|
||||
skillToCast = B_PLASMA1;
|
||||
break;
|
||||
case 1:
|
||||
skillToCast = B_PLASMA2;
|
||||
break;
|
||||
case 2:
|
||||
skillToCast = B_PLASMA3;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
switch (i2)
|
||||
{
|
||||
case 0:
|
||||
skillToCast = C_PLASMA1;
|
||||
break;
|
||||
case 1:
|
||||
skillToCast = C_PLASMA2;
|
||||
break;
|
||||
case 2:
|
||||
skillToCast = C_PLASMA3;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
switch (i3)
|
||||
{
|
||||
case 0:
|
||||
skillToCast = R_PLASMA1;
|
||||
break;
|
||||
case 1:
|
||||
skillToCast = R_PLASMA2;
|
||||
break;
|
||||
case 2:
|
||||
skillToCast = R_PLASMA3;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (skillToCast != null)
|
||||
{
|
||||
npc.setTarget(caster);
|
||||
npc.doCast(skillToCast.getSkill());
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onSkillSee(npc, caster, skill, targets, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
|
||||
{
|
||||
if (killer.isInParty())
|
||||
{
|
||||
final L2PcInstance partyMember = getRandomPartyMember(killer);
|
||||
final int i0 = 10 + (10 * killer.getParty().getMemberCount());
|
||||
|
||||
if ((getRandom(1000) < i0) && (npc.calculateDistance(killer, true, false) < 2000) && (npc.calculateDistance(partyMember, true, false) < 2000))
|
||||
{
|
||||
notifyEvent("SPAWN_MAGUEN", npc, partyMember);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
private void maguenPetChance(L2PcInstance player)
|
||||
{
|
||||
final int chance1 = getRandom(10000);
|
||||
final int chance2 = getRandom(20);
|
||||
if ((chance1 == 0) && (chance2 != 0))
|
||||
{
|
||||
giveItems(player, MAGUEN_PET, 1);
|
||||
}
|
||||
else if ((chance1 == 0) && (chance2 == 0))
|
||||
{
|
||||
giveItems(player, ELITE_MAGUEN_PET, 1);
|
||||
}
|
||||
}
|
||||
|
||||
private Quest nemoAi()
|
||||
{
|
||||
return QuestManager.getInstance().getQuest(Nemo.class.getSimpleName());
|
||||
}
|
||||
}
|
61
trunk/dist/game/data/scripts/gracia/AI/NPC/FortuneTelling/FortuneTelling.java
vendored
Normal file
61
trunk/dist/game/data/scripts/gracia/AI/NPC/FortuneTelling/FortuneTelling.java
vendored
Normal file
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 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 gracia.AI.NPC.FortuneTelling;
|
||||
|
||||
import ai.npc.AbstractNpcAI;
|
||||
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.model.itemcontainer.Inventory;
|
||||
|
||||
/**
|
||||
* Fortune Telling AI.<br>
|
||||
* Original Jython script by Kerberos.
|
||||
* @author Nyaran
|
||||
*/
|
||||
public class FortuneTelling extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int MINE = 32616;
|
||||
// Misc
|
||||
private static final int COST = 1000;
|
||||
|
||||
public FortuneTelling()
|
||||
{
|
||||
super(FortuneTelling.class.getSimpleName(), "gracia/AI/NPC");
|
||||
addStartNpc(MINE);
|
||||
addTalkId(MINE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (player.getAdena() < COST)
|
||||
{
|
||||
htmltext = "lowadena.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
takeItems(player, Inventory.ADENA_ID, COST);
|
||||
htmltext = getHtm(player.getHtmlPrefix(), "fortune.htm").replace("%fortune%", String.valueOf(getRandom(1800309, 1800695)));
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
6
trunk/dist/game/data/scripts/gracia/AI/NPC/FortuneTelling/fortune.htm
vendored
Normal file
6
trunk/dist/game/data/scripts/gracia/AI/NPC/FortuneTelling/fortune.htm
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<html><body>Fortune-Teller Mine:<br>
|
||||
I see an image approaching before you... It is difficult to put what I saw into words.<br>
|
||||
How can I say this? Okay, listen closely:<br>
|
||||
<center><fstring>%fortune%</fstring></center><br><br>
|
||||
Take these words to heart. You should seriously consider the meaning...
|
||||
</body></html>
|
4
trunk/dist/game/data/scripts/gracia/AI/NPC/FortuneTelling/lowadena.htm
vendored
Normal file
4
trunk/dist/game/data/scripts/gracia/AI/NPC/FortuneTelling/lowadena.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>Fortune-Teller Mine:<br>
|
||||
Very well. I perceive you either cannot afford my offer or are not ready to learn your future.<br>
|
||||
No matter! Your future is still there waiting for you. Good luck!
|
||||
</body></html>
|
112
trunk/dist/game/data/scripts/gracia/AI/NPC/GeneralDilios/GeneralDilios.java
vendored
Normal file
112
trunk/dist/game/data/scripts/gracia/AI/NPC/GeneralDilios/GeneralDilios.java
vendored
Normal file
@ -0,0 +1,112 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 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 gracia.AI.NPC.GeneralDilios;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import ai.npc.AbstractNpcAI;
|
||||
|
||||
import com.l2jserver.gameserver.model.L2Spawn;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.network.NpcStringId;
|
||||
import com.l2jserver.gameserver.network.clientpackets.Say2;
|
||||
import com.l2jserver.gameserver.network.serverpackets.NpcSay;
|
||||
|
||||
/**
|
||||
* Dilios AI
|
||||
* @author JIV, Sephiroth, Apocalipce
|
||||
*/
|
||||
public final class GeneralDilios extends AbstractNpcAI
|
||||
{
|
||||
private static final int GENERAL_ID = 32549;
|
||||
private static final int GUARD_ID = 32619;
|
||||
|
||||
private L2Npc _general = null;
|
||||
private final Set<L2Spawn> _guards = Collections.newSetFromMap(new ConcurrentHashMap<L2Spawn, Boolean>());
|
||||
|
||||
private static final NpcStringId[] DILIOS_TEXT =
|
||||
{
|
||||
NpcStringId.SPREAD_THE_WORD_HEROES_YOUNG_AND_OLD_ARE_GATHERING_TO_MARCH_TO_THE_SEED_OF_DESTRUCTION_AND_TAKE_DOWN_TIAT_ONCE_AND_FOR_ALL,
|
||||
// NpcStringId.MESSENGER_INFORM_THE_PATRONS_OF_THE_KEUCEREUS_ALLIANCE_BASE_THE_SEED_OF_DESTRUCTION_IS_CURRENTLY_SECURED_UNDER_THE_FLAG_OF_THE_KEUCEREUS_ALLIANCE,
|
||||
// NpcStringId.MESSENGER_INFORM_THE_PATRONS_OF_THE_KEUCEREUS_ALLIANCE_BASE_TIATS_MOUNTED_TROOP_IS_CURRENTLY_TRYING_TO_RETAKE_SEED_OF_DESTRUCTION_COMMIT_ALL_THE_AVAILABLE_REINFORCEMENTS_INTO_SEED_OF_DESTRUCTION,
|
||||
NpcStringId.SPREAD_THE_WORD_BRAVE_WARRIORS_HAVE_STORMED_THE_HALL_OF_SUFFERING_AND_ARE_MARCHING_ONTO_THE_HALL_OF_EROSION_IN_THE_SEED_OF_INFINITY,
|
||||
// NpcStringId.MESSENGER_INFORM_THE_BROTHERS_IN_KUCEREUS_CLAN_OUTPOST_SWEEPING_THE_SEED_OF_INFINITY_IS_CURRENTLY_COMPLETE_TO_THE_HEART_OF_THE_SEED_EKIMUS_IS_BEING_DIRECTLY_ATTACKED_AND_THE_UNDEAD_REMAINING_IN_THE_HALL_OF_SUFFERING_ARE_BEING_ERADICATED,
|
||||
NpcStringId.SPREAD_THE_WORD_THE_FLAG_OF_THE_KEUCEREUS_ALLIANCE_FLIES_PROUDLY_OVER_THE_SEED_OF_INFINITY
|
||||
// NpcStringId.MESSENGER_INFORM_THE_PATRONS_OF_THE_KEUCEREUS_ALLIANCE_BASE_THE_RESURRECTED_UNDEAD_IN_THE_SEED_OF_INFINITY_ARE_POURING_INTO_THE_HALL_OF_SUFFERING_AND_THE_HALL_OF_EROSION
|
||||
// NpcStringId.MESSENGER_INFORM_THE_BROTHERS_IN_KUCEREUS_CLAN_OUTPOST_EKIMUS_IS_ABOUT_TO_BE_REVIVED_BY_THE_RESURRECTED_UNDEAD_IN_SEED_OF_INFINITY_SEND_ALL_REINFORCEMENTS_TO_THE_HEART_AND_THE_HALL_OF_SUFFERING
|
||||
};
|
||||
|
||||
public GeneralDilios()
|
||||
{
|
||||
super(GeneralDilios.class.getSimpleName(), "gracia/AI/NPC");
|
||||
|
||||
addSpawnId(GENERAL_ID, GUARD_ID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (event.startsWith("command_"))
|
||||
{
|
||||
int value = Integer.parseInt(event.substring(8));
|
||||
if (value < 6)
|
||||
{
|
||||
_general.broadcastPacket(new NpcSay(_general.getObjectId(), Say2.NPC_ALL, GENERAL_ID, NpcStringId.STABBING_THREE_TIMES));
|
||||
startQuestTimer("guard_animation_0", 3400, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
value = -1;
|
||||
_general.broadcastPacket(new NpcSay(_general.getObjectId(), Say2.NPC_SHOUT, GENERAL_ID, DILIOS_TEXT[getRandom(DILIOS_TEXT.length)]));
|
||||
}
|
||||
startQuestTimer("command_" + (value + 1), 60000, null, null);
|
||||
}
|
||||
else if (event.startsWith("guard_animation_"))
|
||||
{
|
||||
int value = Integer.parseInt(event.substring(16));
|
||||
for (L2Spawn guard : _guards)
|
||||
{
|
||||
guard.getLastSpawn().broadcastSocialAction(4);
|
||||
}
|
||||
if (value < 2)
|
||||
{
|
||||
startQuestTimer("guard_animation_" + (value + 1), 1500, null, null);
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
if (npc.getId() == GENERAL_ID)
|
||||
{
|
||||
startQuestTimer("command_0", 60000, null, null);
|
||||
_general = npc;
|
||||
}
|
||||
else if (npc.getId() == GUARD_ID)
|
||||
{
|
||||
_guards.add(npc.getSpawn());
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
}
|
7
trunk/dist/game/data/scripts/gracia/AI/NPC/Lekon/32557-01.html
vendored
Normal file
7
trunk/dist/game/data/scripts/gracia/AI/NPC/Lekon/32557-01.html
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<html><body>Engineer Lekon:<br>
|
||||
Airship, eh? If you want board an Airship, you need to first register for a Summon License. There's a switch on the Airship controls that proves your qualifications to summon and pilot it. Unless you obtain that license, you won't be allowed to fly.<br>
|
||||
Only <font color="LEVEL">clan lords whose clan is level 5 or higher</font> may earn the license. There is also a limit on the number of Airships.<br>
|
||||
If you meet the requirements, you can obtain a Airship Summon License in exchange for <font color="LEVEL">10 Energy Star Stones</font>.<br>
|
||||
An Energy Star Stone can be made by assembling Star Stones found floating in the skies over Gracia. If you thinkk this is too time-consuming, you can also buy them from Officer Tolonis right over there..<br>
|
||||
<a action="bypass -h Quest Lekon licence">Obtain the Airship Summon License.</a>
|
||||
</body></html>
|
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Lekon/32557-02.html
vendored
Normal file
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Lekon/32557-02.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>Engineer Lekon:<br>
|
||||
Only a clan lord whose clan is level 5 or above can be issued an Airship Summon License.
|
||||
</body></html>
|
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Lekon/32557-03.html
vendored
Normal file
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Lekon/32557-03.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><head><body>Engineer Lekon:<br>
|
||||
You don't have enough Energy Star Stones yet. You can make them by assembling Star Stones found floating in the skies over Gracia. If you prefer, you can also purchase them from Officer Tolonis.
|
||||
</body></html>
|
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Lekon/32557-04.html
vendored
Normal file
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Lekon/32557-04.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>Engineer Lekon:<br>
|
||||
Hey, I see here that you already have a Airship Summon License! Haven't you registered it yet? Or did you lose it already?
|
||||
</body></html>
|
7
trunk/dist/game/data/scripts/gracia/AI/NPC/Lekon/32557.html
vendored
Normal file
7
trunk/dist/game/data/scripts/gracia/AI/NPC/Lekon/32557.html
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<html><body>Engineer Lekon:<br>
|
||||
I'm too busy to take a breath! I'm supposed to maintain all these Airships and air vehicles by myself?! How does that make sense?<br>
|
||||
And it's all very detailed, time-consuming work with no margin for error. Somebody up there must really hate me!<br>
|
||||
Well, at least they supply me with the materials I need. Hey, adventurer! You must know how to use Airships or air vehicles. Care to lend me a hand?<br>
|
||||
<a action="bypass -h Quest Lekon 32557-01.html">Ask about Airship Summon License.</a><br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
92
trunk/dist/game/data/scripts/gracia/AI/NPC/Lekon/Lekon.java
vendored
Normal file
92
trunk/dist/game/data/scripts/gracia/AI/NPC/Lekon/Lekon.java
vendored
Normal file
@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 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 gracia.AI.NPC.Lekon;
|
||||
|
||||
import ai.npc.AbstractNpcAI;
|
||||
|
||||
import com.l2jserver.gameserver.instancemanager.AirShipManager;
|
||||
import com.l2jserver.gameserver.model.L2Clan;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
* Lekon AI.
|
||||
* @author St3eT
|
||||
*/
|
||||
public final class Lekon extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int LEKON = 32557;
|
||||
// Items
|
||||
private static final int LICENCE = 13559; // Airship Summon License
|
||||
private static final int STONE = 13277; // Energy Star Stone
|
||||
// Misc
|
||||
private static final int MIN_CLAN_LV = 5;
|
||||
private static final int STONE_COUNT = 10;
|
||||
|
||||
public Lekon()
|
||||
{
|
||||
super(Lekon.class.getSimpleName(), "gracia/AI/NPC");
|
||||
addFirstTalkId(LEKON);
|
||||
addTalkId(LEKON);
|
||||
addStartNpc(LEKON);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "32557-01.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "licence":
|
||||
{
|
||||
final L2Clan clan = player.getClan();
|
||||
if ((clan == null) || !player.isClanLeader() || (clan.getLevel() < MIN_CLAN_LV))
|
||||
{
|
||||
htmltext = "32557-02.html";
|
||||
}
|
||||
else if (hasAtLeastOneQuestItem(player, LICENCE))
|
||||
{
|
||||
htmltext = "32557-04.html";
|
||||
}
|
||||
else if (AirShipManager.getInstance().hasAirShipLicense(clan.getId()))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THE_AIRSHIP_SUMMON_LICENSE_HAS_ALREADY_BEEN_ACQUIRED);
|
||||
}
|
||||
else if (getQuestItemsCount(player, STONE) >= STONE_COUNT)
|
||||
{
|
||||
takeItems(player, STONE, STONE_COUNT);
|
||||
giveItems(player, LICENCE, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "32557-03.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
8
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735-01.html
vendored
Normal file
8
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735-01.html
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<html><body>Nemo:<br>
|
||||
I have no information about the origins of this species, but what I have found is that these creatures do possess a unique energy, sort of plasma if you will. Hmm... <font color="LEVEL">Maguen Plasma</font>. I like that. I think that is what I'll call it. Anyway, when a Maguen appears it begins to bring forth one of these plasmas. It will also cycle through its various plasmas before hiding.<br>
|
||||
With Blacksmith Kusto's talent and my magic we were able to create a device that could harvest these plasmas... a <font color="LEVEL">Maguen Plasma Collector</font>. I know it isn't too creative but we decided to keep the name simple to avoid explaining what it does.<br>
|
||||
Ugh... fine. I'll explain it to you. When you are in the Seed and a Maguen appears you have a very limited time to collect the Maguen Plasma. If you don't collect the plasma in time the Maguen will go back into hiding. I've set up a practice Maguen if you want to try using the Maguen Plasma Collector.<br>
|
||||
This isn't a real Maguen, so you won't collect any Plasma just thought you should know so you don't get your hopes up.<br>
|
||||
<a action="bypass -h Quest Nemo giveCollector">Receive the Maguen Plasma Collector</a><br>
|
||||
<a action="bypass -h Quest Nemo summonMaguen">Practice using the Maguen Plasma Collector</a>
|
||||
</body></html>
|
6
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735-02.html
vendored
Normal file
6
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735-02.html
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<html><body>Nemo:<br>
|
||||
Here is the Maguen Plasma Collector.<br>
|
||||
Remember these rules:<br>
|
||||
1. Collect <font color="LEVEL">one of each type</font>, or <font color="LEVEL">several of the same type</font>.<br>
|
||||
2. Collecting random Maguen Plasmas can overload the Plasma Collector and will release any plasma you have collected. Yes, this means you'll have to start all over again.
|
||||
</body></html>
|
4
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735-03.html
vendored
Normal file
4
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735-03.html
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>Nemo:<br>
|
||||
Are you pulling my leg? You're NOT an adventurer? Or you ARE? You have one? You want another? What is it?! Tell me!!<br>
|
||||
You've confused me. I don't know what to say... I need a moment...
|
||||
</body></html>
|
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735-04.html
vendored
Normal file
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735-04.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>Nemo:<br>
|
||||
Everything needs preparation. Did you think about how you are going to use it when you carry all that stuff? Make yourself lighter, or empty your inventory. Sheez.
|
||||
</body></html>
|
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735-05.html
vendored
Normal file
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735-05.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>Nemo:<br>
|
||||
Take a look at the top of the Maguen's head. Observe the aura of the Plasma that the Maguen is producing. Use the Maguen Plasma Collector when the Maguen summons the Plasma you wish to collect.
|
||||
</body></html>
|
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735-06.html
vendored
Normal file
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735-06.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>Nemo:<br>
|
||||
This is my magic's limit, now I can't help you. Look around... there are others just like you.
|
||||
</body></html>
|
6
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735.html
vendored
Normal file
6
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/32735.html
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<html><body>Nemo:<br>
|
||||
Who are you? What business do you have with the Great Magician of Oren? Speak! Hmm... not a chatty one, are you? Well if you must know, I am here on important business.<br>
|
||||
It is said that a mysterious creature can only be found on this Seed. Have you heard of a <font color="LEVEL">Maguen</font>? Yes, I know it is a silly name. But aren't you the least bit intrigued?<br>
|
||||
<a action="bypass -h Quest Nemo 32735-01.html">What is a Maguen?</a><br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
123
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/Nemo.java
vendored
Normal file
123
trunk/dist/game/data/scripts/gracia/AI/NPC/Nemo/Nemo.java
vendored
Normal file
@ -0,0 +1,123 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 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 gracia.AI.NPC.Nemo;
|
||||
|
||||
import ai.npc.AbstractNpcAI;
|
||||
|
||||
import com.l2jserver.gameserver.ai.CtrlIntention;
|
||||
import com.l2jserver.gameserver.instancemanager.QuestManager;
|
||||
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.NpcStringId;
|
||||
|
||||
import gracia.AI.Maguen;
|
||||
|
||||
/**
|
||||
* Nemo AI.
|
||||
* @author St3eT
|
||||
*/
|
||||
public final class Nemo extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int NEMO = 32735; // Nemo
|
||||
private static final int MAGUEN = 18839; // Wild Maguen
|
||||
// Items
|
||||
private static final int COLLECTOR = 15487; // Maguen Plasma Collector
|
||||
// Misc
|
||||
private static final int MAXIMUM_MAGUEN = 18; // Maximum maguens in one time
|
||||
|
||||
public Nemo()
|
||||
{
|
||||
super(Nemo.class.getSimpleName(), "gracia/AI/NPC");
|
||||
addStartNpc(NEMO);
|
||||
addFirstTalkId(NEMO);
|
||||
addTalkId(NEMO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "32735-01.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "giveCollector":
|
||||
{
|
||||
if (hasQuestItems(player, COLLECTOR))
|
||||
{
|
||||
htmltext = "32735-03.html";
|
||||
}
|
||||
else if (!player.isInventoryUnder90(false))
|
||||
{
|
||||
htmltext = "32735-04.html";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "32735-02.html";
|
||||
giveItems(player, COLLECTOR, 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "summonMaguen":
|
||||
{
|
||||
if ((player.getVariables().getInt("TEST_MAGUEN", 0) == 0) && (npc.getScriptValue() < MAXIMUM_MAGUEN))
|
||||
{
|
||||
final L2Npc maguen = addSpawn(MAGUEN, npc.getLocation(), true, 60000, true);
|
||||
maguen.getVariables().set("SUMMON_PLAYER", player);
|
||||
maguen.getVariables().set("SPAWNED_NPC", npc);
|
||||
maguen.getVariables().set("TEST_MAGUEN", 1);
|
||||
player.getVariables().set("TEST_MAGUEN", 1);
|
||||
maguen.setTitle(player.getName());
|
||||
maguen.setIsRunning(true);
|
||||
maguen.getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, player);
|
||||
maguen.broadcastStatusUpdate();
|
||||
showOnScreenMsg(player, NpcStringId.MAGUEN_APPEARANCE, 2, 4000);
|
||||
maguenAi().startQuestTimer("DIST_CHECK_TIMER", 1000, maguen, player);
|
||||
npc.setScriptValue(npc.getScriptValue() + 1);
|
||||
htmltext = "32735-05.html";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "32735-06.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "DECREASE_COUNT":
|
||||
{
|
||||
final L2Npc spawnedNpc = npc.getVariables().getObject("SPAWNED_NPC", L2Npc.class);
|
||||
if ((spawnedNpc != null) && (spawnedNpc.getScriptValue() > 0))
|
||||
{
|
||||
player.getVariables().remove("TEST_MAGUEN");
|
||||
spawnedNpc.setScriptValue(spawnedNpc.getScriptValue() - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
private Quest maguenAi()
|
||||
{
|
||||
return QuestManager.getInstance().getQuest(Maguen.class.getSimpleName());
|
||||
}
|
||||
}
|
5
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-01.html
vendored
Normal file
5
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-01.html
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<html><body>Mage Notingale:<br>
|
||||
First of all, you must acquire either an Aurabird or an Airship in order to fight against the enemies who populate our skies. Since the number of Airships is limited, I recommend you acquire an Aurabird.<br>
|
||||
To do so, go meet Engineer Lekon and do what he tells you. Even if you decide to acquire an Airship, Lekon is worth talking to.<br>
|
||||
Check your map and I will tell you his location.
|
||||
</body></html>
|
6
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-02.html
vendored
Normal file
6
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-02.html
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<html><body>Mage Notingale:<br>
|
||||
Once you have acquired transportaion, the next thing is to fight against those who are attacking us.<br>
|
||||
Our chief enemies are the monsters of the skies and the Seeds. Since you cannot possible handle either of these by yourself, you should start by gathering a party of your fellows.<br>
|
||||
<a action="bypass -h Quest Nottingale 32627-03.html">Ask about Aerial Raid Monsters.</a><br>
|
||||
<a action="bypass -h Quest Nottingale 32627-04.html">Ask about major hunting grounds.</a>
|
||||
</body></html>
|
7
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-03.html
vendored
Normal file
7
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-03.html
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<html><body>Mage Notingale:<br>
|
||||
The following enemies have attacked us from the skies nearby:<br>
|
||||
<a action="bypass -h Quest Nottingale 32627-05.html">Valdstone the Master Rider</a><br>
|
||||
<a action="bypass -h Quest Nottingale 32627-06.html">Rok the King of Birds</a><br>
|
||||
<a action="bypass -h Quest Nottingale 32627-07.html">Enira the Banshee Queen</a><br>
|
||||
<a action="bypass -h Quest Nottingale 32627-08.html">Dius the Messenger of Destruction</a>
|
||||
</body></html>
|
5
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-04.html
vendored
Normal file
5
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-04.html
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<html><body>Mage Notigale:<br>
|
||||
The following Seeds are the main sites of enemy power nearby:<br>
|
||||
<a action="bypass -h Quest Nottingale 32627-09.html">Seed of Infinity</a><br>
|
||||
<a action="bypass -h Quest Nottingale 32627-10.html">Seed of Destruction</a>
|
||||
</body></html>
|
4
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-05.html
vendored
Normal file
4
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-05.html
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>Mage Notingale:<br>
|
||||
Valdstone the Master Rider used to be a lord of this land. He gained the power to control wild Aurabirds in exchange for yielding his territory to the Seed of Infinity.<br>
|
||||
His Elite Riders always watch our fortress. Look at the map to see where he and his minions most frequently appear.
|
||||
</body></html>
|
4
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-06.html
vendored
Normal file
4
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-06.html
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>Mage Notingale:<br>
|
||||
Rok, the King of Birds, used to be the largest and most intelligent bird in Gracia. But since the Seed of Destruction and Storm Dragon Lindvior appeared, he has been in hiding.<br>
|
||||
As the power of the Seed of Destruction has waned, however, he appears to be regaining his former control over birds. When the power of the Seed of Destruction is weak, you may see Rok if you attack birds nearby. I will mark the areas on the map where he most often appears.
|
||||
</body></html>
|
4
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-07.html
vendored
Normal file
4
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-07.html
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>Mage Notingale:<br>
|
||||
It is said that Enira the Banshee Queen is a subordinate of Ekimus, the ruler of the Seed of Infinity. But I believe differently. It seems as though she is keeping an eye on the Seed of Infinity.<br>
|
||||
Of course, I'm not saying Enira is on our side. She is still very much a threat. If we hope to travel the skies of Gracia unmolested, she must be defeated. I have marked the areas where she frequently appears on your map.
|
||||
</body></html>
|
4
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-08.html
vendored
Normal file
4
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-08.html
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>Mage Notingale:<br>
|
||||
Dius the Messenger of Destruction is a huge Drake of the Sky. He scours the skies for Tiat, the lord of the Seed of Destruction.<br>
|
||||
Fortunately, he is normally scarce. If you apply a special <font color="LEVEL">bait for Drakes</font> to <font color="LEVEL">Baby Drake Wings</font>, however, you can lure him out. I will mark the area where he appears on your map.
|
||||
</body></html>
|
5
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-09.html
vendored
Normal file
5
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-09.html
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<html><body>Mage Notingale:<br>
|
||||
I will mark the location of the Seed of Infinity on your map.<br>
|
||||
It is controlled by Ekimus, the lord of Eternity. His ability to control both living and dead has transformed the whole Seed of Infinity into a living organism...<br>
|
||||
General Dilios can give you more details.
|
||||
</body></html>
|
5
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-10.html
vendored
Normal file
5
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627-10.html
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<html><body>Mage Notingale:<br>
|
||||
I will mark the location of the Seed of Destruction on your map.<br>
|
||||
It is controlled by Tiat, the lord of the Mounted Troop. The Seed is like a one huge fortress, thwarting any attempts to enter.<br>
|
||||
General Dilios can give you more details.
|
||||
</body></html>
|
9
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627.html
vendored
Normal file
9
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/32627.html
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
<html><body>Mage Notingale:<br>
|
||||
Welcome to Gracia! I am here to guide adventures who come from Aden.<br>
|
||||
It is impossible to walk around in Gracia because of the contamination caused by the Seeds. Most move via Airship, but that is also difficult -- there simply aren't enough for everyone.<br>
|
||||
The magicians of Aden crafted an alternative plan. It is called an <font color="LEVEL">Aurabird</font>. I think it is the better solution for you.<br>
|
||||
<a action="bypass -h Quest Nottingale 32627-02.html">Ask what to do.</a><br>
|
||||
<a action="bypass -h Quest Nottingale 32627-03.html">Ask about Aerial Raid Monsters.</a><br>
|
||||
<a action="bypass -h Quest Nottingale 32627-04.html">Ask about major hunting grounds.</a><br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
122
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/Nottingale.java
vendored
Normal file
122
trunk/dist/game/data/scripts/gracia/AI/NPC/Nottingale/Nottingale.java
vendored
Normal file
@ -0,0 +1,122 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 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 gracia.AI.NPC.Nottingale;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import quests.Q10273_GoodDayToFly.Q10273_GoodDayToFly;
|
||||
import ai.npc.AbstractNpcAI;
|
||||
|
||||
import com.l2jserver.gameserver.instancemanager.AirShipManager;
|
||||
import com.l2jserver.gameserver.model.ClanPrivilege;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.model.quest.QuestState;
|
||||
import com.l2jserver.gameserver.network.serverpackets.RadarControl;
|
||||
|
||||
/**
|
||||
* Nottingale AI
|
||||
* @author xban1x
|
||||
*/
|
||||
public final class Nottingale extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int NOTTINGALE = 32627;
|
||||
// Misc
|
||||
private static final Map<Integer, RadarControl> RADARS = new HashMap<>();
|
||||
static
|
||||
{
|
||||
RADARS.put(2, new RadarControl(0, -184545, 243120, 1581, 2));
|
||||
RADARS.put(5, new RadarControl(0, -192361, 254528, 3598, 1));
|
||||
RADARS.put(6, new RadarControl(0, -174600, 219711, 4424, 1));
|
||||
RADARS.put(7, new RadarControl(0, -181989, 208968, 4424, 1));
|
||||
RADARS.put(8, new RadarControl(0, -252898, 235845, 5343, 1));
|
||||
RADARS.put(9, new RadarControl(0, -212819, 209813, 4288, 1));
|
||||
RADARS.put(10, new RadarControl(0, -246899, 251918, 4352, 1));
|
||||
}
|
||||
|
||||
public Nottingale()
|
||||
{
|
||||
super(Nottingale.class.getSimpleName(), "gracia/AI/NPC");
|
||||
addStartNpc(NOTTINGALE);
|
||||
addTalkId(NOTTINGALE);
|
||||
addFirstTalkId(NOTTINGALE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "32627-02.html":
|
||||
case "32627-03.html":
|
||||
case "32627-04.html":
|
||||
{
|
||||
if (player.getClan() != null)
|
||||
{
|
||||
if (player.hasClanPrivilege(ClanPrivilege.CL_SUMMON_AIRSHIP) && AirShipManager.getInstance().hasAirShipLicense(player.getClanId()) && !AirShipManager.getInstance().hasAirShip(player.getClanId()))
|
||||
{
|
||||
htmltext = event;
|
||||
}
|
||||
else
|
||||
{
|
||||
final QuestState st = player.getQuestState(Q10273_GoodDayToFly.class.getSimpleName());
|
||||
if ((st != null) && st.isCompleted())
|
||||
{
|
||||
htmltext = event;
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(RADARS.get(2));
|
||||
htmltext = "32627-01.html";
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
final QuestState st = player.getQuestState(Q10273_GoodDayToFly.class.getSimpleName());
|
||||
if ((st != null) && st.isCompleted())
|
||||
{
|
||||
htmltext = event;
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(RADARS.get(2));
|
||||
htmltext = "32627-01.html";
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "32627-05.html":
|
||||
case "32627-06.html":
|
||||
case "32627-07.html":
|
||||
case "32627-08.html":
|
||||
case "32627-09.html":
|
||||
case "32627-10.html":
|
||||
{
|
||||
player.sendPacket(RADARS.get(Integer.valueOf(event.substring(6, 8))));
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Seyo/32737-01.html
vendored
Normal file
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Seyo/32737-01.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>Seyo:<br>
|
||||
... Okay, who are you? You aren't here to give me a hard time I hope... I'm married already. Can't you just leave me alone...
|
||||
</body></html>
|
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Seyo/32737-02.html
vendored
Normal file
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Seyo/32737-02.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>Seyo:<br>
|
||||
If you don't have 5... why are you here....? I said five. One more than four, but not yet six... geez... No silver barrel items unless you have five... I hate my job... Less than five is a brown yellow barrel item... next!
|
||||
</body></html>
|
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Seyo/32737-03.html
vendored
Normal file
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Seyo/32737-03.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>Seyo:<br>
|
||||
Is twenty too many? No, not to me... You said you would give, don't change your mind now.... I'm a busy person too... Is it break time yet?
|
||||
</body></html>
|
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Seyo/32737-04.html
vendored
Normal file
3
trunk/dist/game/data/scripts/gracia/AI/NPC/Seyo/32737-04.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>Seyo:<br>
|
||||
One at a time... Stand in line... Wait your turn... That's it. It's just a line... You can do it...
|
||||
</body></html>
|
7
trunk/dist/game/data/scripts/gracia/AI/NPC/Seyo/32737.html
vendored
Normal file
7
trunk/dist/game/data/scripts/gracia/AI/NPC/Seyo/32737.html
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<html><body>Seyo:<br>
|
||||
Hello, and welcome to the middle of nowhere. Who am I? I like to think of myself as a business man of sorts. What I offer to you is a game of chance. I am giving you the opportunity to win <font color="LEVEL">Soul Stone Fragments</font>. You agree to give me a predetermined number of fragments. And in return, you have the chance of winning a random number of fragments. Sound good? Well then, how much can I put you down for?<br>
|
||||
<a action="bypass -h Quest Seyo give1">Give Seyo 1 fragment.</a><br>
|
||||
<a action="bypass -h Quest Seyo give5">Give Seyo 5 fragments.</a><br>
|
||||
<a action="bypass -h Quest Seyo give20">Give Seyo 20 fragments.</a><br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
173
trunk/dist/game/data/scripts/gracia/AI/NPC/Seyo/Seyo.java
vendored
Normal file
173
trunk/dist/game/data/scripts/gracia/AI/NPC/Seyo/Seyo.java
vendored
Normal file
@ -0,0 +1,173 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 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 gracia.AI.NPC.Seyo;
|
||||
|
||||
import ai.npc.AbstractNpcAI;
|
||||
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.network.NpcStringId;
|
||||
import com.l2jserver.gameserver.network.clientpackets.Say2;
|
||||
|
||||
/**
|
||||
* Seyo AI.
|
||||
* @author St3eT
|
||||
*/
|
||||
public final class Seyo extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int SEYO = 32737;
|
||||
// Item
|
||||
private static final int STONE_FRAGMENT = 15486; // Spirit Stone Fragment
|
||||
// Misc
|
||||
private static final NpcStringId[] TEXT =
|
||||
{
|
||||
NpcStringId.NO_ONE_ELSE_DON_T_WORRY_I_DON_T_BITE_HAHA,
|
||||
NpcStringId.OK_MASTER_OF_LUCK_THAT_S_YOU_HAHA_WELL_ANYONE_CAN_COME_AFTER_ALL,
|
||||
NpcStringId.SHEDDING_BLOOD_IS_A_GIVEN_ON_THE_BATTLEGROUND_AT_LEAST_IT_S_SAFE_HERE,
|
||||
NpcStringId.OK_WHO_S_NEXT_IT_ALL_DEPENDS_ON_YOUR_FATE_AND_LUCK_RIGHT_AT_LEAST_COME_AND_TAKE_A_LOOK,
|
||||
NpcStringId.THERE_WAS_SOMEONE_WHO_WON_10_000_FROM_ME_A_WARRIOR_SHOULDN_T_JUST_BE_GOOD_AT_FIGHTING_RIGHT_YOU_VE_GOTTA_BE_GOOD_IN_EVERYTHING
|
||||
};
|
||||
|
||||
public Seyo()
|
||||
{
|
||||
super(Seyo.class.getSimpleName(), "gracia/AI/NPC");
|
||||
addStartNpc(SEYO);
|
||||
addTalkId(SEYO);
|
||||
addFirstTalkId(SEYO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
if (npc == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
switch (event)
|
||||
{
|
||||
case "TRICKERY_TIMER":
|
||||
{
|
||||
if (npc.isScriptValue(1))
|
||||
{
|
||||
npc.setScriptValue(0);
|
||||
broadcastNpcSay(npc, Say2.NPC_ALL, TEXT[getRandom(TEXT.length)]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "give1":
|
||||
{
|
||||
if (npc.isScriptValue(1))
|
||||
{
|
||||
htmltext = "32737-04.html";
|
||||
}
|
||||
else if (!hasQuestItems(player, STONE_FRAGMENT))
|
||||
{
|
||||
htmltext = "32737-01.html";
|
||||
}
|
||||
else
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
takeItems(player, STONE_FRAGMENT, 1);
|
||||
if (getRandom(100) == 0)
|
||||
{
|
||||
giveItems(player, STONE_FRAGMENT, 100);
|
||||
broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.AMAZING_S1_TOOK_100_OF_THESE_SOUL_STONE_FRAGMENTS_WHAT_A_COMPLETE_SWINDLER, player.getName());
|
||||
}
|
||||
else
|
||||
{
|
||||
broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.HMM_HEY_DID_YOU_GIVE_S1_SOMETHING_BUT_IT_WAS_JUST_1_HAHA, player.getName());
|
||||
}
|
||||
startQuestTimer("TRICKERY_TIMER", 5000, npc, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "give5":
|
||||
{
|
||||
if (npc.isScriptValue(1))
|
||||
{
|
||||
htmltext = "32737-04.html";
|
||||
}
|
||||
else if (getQuestItemsCount(player, STONE_FRAGMENT) < 5)
|
||||
{
|
||||
htmltext = "32737-02.html";
|
||||
}
|
||||
else
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
takeItems(player, STONE_FRAGMENT, 5);
|
||||
final int chance = getRandom(100);
|
||||
if (chance < 20)
|
||||
{
|
||||
broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.AHEM_S1_HAS_NO_LUCK_AT_ALL_TRY_PRAYING, player.getName());
|
||||
}
|
||||
else if (chance < 80)
|
||||
{
|
||||
giveItems(player, STONE_FRAGMENT, 1);
|
||||
broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.IT_S_BETTER_THAN_LOSING_IT_ALL_RIGHT_OR_DOES_THIS_FEEL_WORSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
final int itemCount = getRandom(10, 16);
|
||||
giveItems(player, STONE_FRAGMENT, itemCount);
|
||||
broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.S1_PULLED_ONE_WITH_S2_DIGITS_LUCKY_NOT_BAD, player.getName(), String.valueOf(itemCount));
|
||||
}
|
||||
startQuestTimer("TRICKERY_TIMER", 5000, npc, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "give20":
|
||||
{
|
||||
if (npc.isScriptValue(1))
|
||||
{
|
||||
htmltext = "32737-04.html";
|
||||
}
|
||||
else if (getQuestItemsCount(player, STONE_FRAGMENT) < 20)
|
||||
{
|
||||
htmltext = "32737-03.html";
|
||||
}
|
||||
else
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
takeItems(player, STONE_FRAGMENT, 20);
|
||||
final int chance = getRandom(10000);
|
||||
if (chance == 0)
|
||||
{
|
||||
giveItems(player, STONE_FRAGMENT, 10000);
|
||||
broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.AH_IT_S_OVER_WHAT_KIND_OF_GUY_IS_THAT_DAMN_FINE_YOU_S1_TAKE_IT_AND_GET_OUTTA_HERE, player.getName());
|
||||
}
|
||||
else if (chance < 10)
|
||||
{
|
||||
giveItems(player, STONE_FRAGMENT, 1);
|
||||
broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.YOU_DON_T_FEEL_BAD_RIGHT_ARE_YOU_SAD_BUT_DON_T_CRY);
|
||||
}
|
||||
else
|
||||
{
|
||||
giveItems(player, STONE_FRAGMENT, getRandom(1, 100));
|
||||
broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.A_BIG_PIECE_IS_MADE_UP_OF_LITTLE_PIECES_SO_HERE_S_A_LITTLE_PIECE);
|
||||
}
|
||||
startQuestTimer("TRICKERY_TIMER", 5000, npc, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
3
trunk/dist/game/data/scripts/gracia/AI/NPC/ZealotOfShilen/32628-01.html
vendored
Normal file
3
trunk/dist/game/data/scripts/gracia/AI/NPC/ZealotOfShilen/32628-01.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>Airharbor Guard:<br>
|
||||
I'm so busy now! I'd be grateful if you could help me!
|
||||
</body></html>
|
5
trunk/dist/game/data/scripts/gracia/AI/NPC/ZealotOfShilen/32628.html
vendored
Normal file
5
trunk/dist/game/data/scripts/gracia/AI/NPC/ZealotOfShilen/32628.html
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<html><body>Airharbor Guard:<br>
|
||||
From here you can take an airship to Gracia. Our mission is to maintain the public peace, as ordered by the Magister and Master!<br>
|
||||
You should know that there are rumors of possible terrorist attacks on the airships, as well as reports of spies trying to infiltrate our realm here!<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest.</a>
|
||||
</body></html>
|
5
trunk/dist/game/data/scripts/gracia/AI/NPC/ZealotOfShilen/32629.html
vendored
Normal file
5
trunk/dist/game/data/scripts/gracia/AI/NPC/ZealotOfShilen/32629.html
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<html><body>Airharbor Guard:<br>
|
||||
From here you can take an airship to Gracia. Our mission is to maintain the public peace, as ordered by the Magister and Master!<br>
|
||||
You should know that there are rumors of possible terrorist attacks on the airships, as well as reports of spies trying to infiltrate our realm here!<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest.</a>
|
||||
</body></html>
|
96
trunk/dist/game/data/scripts/gracia/AI/NPC/ZealotOfShilen/ZealotOfShilen.java
vendored
Normal file
96
trunk/dist/game/data/scripts/gracia/AI/NPC/ZealotOfShilen/ZealotOfShilen.java
vendored
Normal file
@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 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 gracia.AI.NPC.ZealotOfShilen;
|
||||
|
||||
import ai.npc.AbstractNpcAI;
|
||||
|
||||
import com.l2jserver.gameserver.ai.CtrlIntention;
|
||||
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;
|
||||
|
||||
/**
|
||||
* Zealot of Shilen AI.
|
||||
* @author nonom
|
||||
*/
|
||||
public final class ZealotOfShilen extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int ZEALOT = 18782;
|
||||
private static final int[] GUARDS =
|
||||
{
|
||||
32628,
|
||||
32629
|
||||
};
|
||||
|
||||
public ZealotOfShilen()
|
||||
{
|
||||
super(ZealotOfShilen.class.getSimpleName(), "gracia/AI/NPC");
|
||||
addSpawnId(ZEALOT);
|
||||
addSpawnId(GUARDS);
|
||||
addFirstTalkId(GUARDS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (npc == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
startQuestTimer("WATCHING", 10000, npc, null, true);
|
||||
if (event.equalsIgnoreCase("WATCHING") && !npc.isAttackingNow())
|
||||
{
|
||||
for (L2Character character : npc.getKnownList().getKnownCharacters())
|
||||
{
|
||||
if (character.isMonster() && !character.isDead() && !((L2Attackable) character).isDecayed())
|
||||
{
|
||||
npc.setRunning();
|
||||
((L2Attackable) npc).addDamageHate(character, 0, 999);
|
||||
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, character, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
return (npc.isAttackingNow()) ? "32628-01.html" : npc.getId() + ".html";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
if (npc.getId() == ZEALOT)
|
||||
{
|
||||
npc.setIsNoRndWalk(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
npc.setIsInvul(true);
|
||||
((L2Attackable) npc).setCanReturnToSpawnPoint(false);
|
||||
startQuestTimer("WATCHING", 10000, npc, null, true);
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
}
|
368
trunk/dist/game/data/scripts/gracia/AI/SeedOfAnnihilation/SeedOfAnnihilation.java
vendored
Normal file
368
trunk/dist/game/data/scripts/gracia/AI/SeedOfAnnihilation/SeedOfAnnihilation.java
vendored
Normal file
@ -0,0 +1,368 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 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 gracia.AI.SeedOfAnnihilation;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Map;
|
||||
|
||||
import javolution.util.FastMap;
|
||||
import ai.npc.AbstractNpcAI;
|
||||
|
||||
import com.l2jserver.gameserver.datatables.SkillData;
|
||||
import com.l2jserver.gameserver.instancemanager.ZoneManager;
|
||||
import com.l2jserver.gameserver.model.Location;
|
||||
import com.l2jserver.gameserver.model.actor.L2Character;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.model.zone.L2ZoneType;
|
||||
import com.l2jserver.gameserver.model.zone.type.L2EffectZone;
|
||||
import com.l2jserver.gameserver.util.Util;
|
||||
|
||||
/**
|
||||
* Seed Of Annihilation AI.
|
||||
* @author Gigiikun
|
||||
*/
|
||||
public class SeedOfAnnihilation extends AbstractNpcAI
|
||||
{
|
||||
private static final Map<Integer, Location> _teleportZones = new FastMap<>();
|
||||
private static final int ANNIHILATION_FURNACE = 18928;
|
||||
|
||||
// Strength, Agility, Wisdom
|
||||
private static final int[] ZONE_BUFFS =
|
||||
{
|
||||
0,
|
||||
6443,
|
||||
6444,
|
||||
6442
|
||||
};
|
||||
|
||||
//@formatter:off
|
||||
private static final int[][] ZONE_BUFFS_LIST =
|
||||
{
|
||||
{1, 2, 3},
|
||||
{1, 3, 2},
|
||||
{2, 1, 3},
|
||||
{2, 3, 1},
|
||||
{3, 2, 1},
|
||||
{3, 1, 2}
|
||||
};
|
||||
//@formatter:on
|
||||
|
||||
// 0: Bistakon, 1: Reptilikon, 2: Cokrakon
|
||||
private final SeedRegion[] _regionsData = new SeedRegion[3];
|
||||
private Long _seedsNextStatusChange;
|
||||
|
||||
static
|
||||
{
|
||||
_teleportZones.put(60002, new Location(-213175, 182648, -10992));
|
||||
_teleportZones.put(60003, new Location(-181217, 186711, -10528));
|
||||
_teleportZones.put(60004, new Location(-180211, 182984, -15152));
|
||||
_teleportZones.put(60005, new Location(-179275, 186802, -10720));
|
||||
}
|
||||
|
||||
public SeedOfAnnihilation()
|
||||
{
|
||||
super(SeedOfAnnihilation.class.getSimpleName(), "gracia/AI");
|
||||
loadSeedRegionData();
|
||||
for (int i : _teleportZones.keySet())
|
||||
{
|
||||
addEnterZoneId(i);
|
||||
}
|
||||
for (SeedRegion element : _regionsData)
|
||||
{
|
||||
for (int elite_mob_id : element.elite_mob_ids)
|
||||
{
|
||||
addSpawnId(elite_mob_id);
|
||||
}
|
||||
}
|
||||
addStartNpc(32739);
|
||||
addTalkId(32739);
|
||||
startEffectZonesControl();
|
||||
}
|
||||
|
||||
public void loadSeedRegionData()
|
||||
{
|
||||
// Bistakon data
|
||||
_regionsData[0] = new SeedRegion(new int[]
|
||||
{
|
||||
22750,
|
||||
22751,
|
||||
22752,
|
||||
22753
|
||||
}, new int[][]
|
||||
{
|
||||
{
|
||||
22746,
|
||||
22746,
|
||||
22746
|
||||
},
|
||||
{
|
||||
22747,
|
||||
22747,
|
||||
22747
|
||||
},
|
||||
{
|
||||
22748,
|
||||
22748,
|
||||
22748
|
||||
},
|
||||
{
|
||||
22749,
|
||||
22749,
|
||||
22749
|
||||
}
|
||||
}, 60006, new int[][]
|
||||
{
|
||||
{
|
||||
-180450,
|
||||
185507,
|
||||
-10544,
|
||||
11632
|
||||
},
|
||||
{
|
||||
-180005,
|
||||
185489,
|
||||
-10544,
|
||||
11632
|
||||
}
|
||||
});
|
||||
|
||||
// Reptilikon data
|
||||
_regionsData[1] = new SeedRegion(new int[]
|
||||
{
|
||||
22757,
|
||||
22758,
|
||||
22759
|
||||
}, new int[][]
|
||||
{
|
||||
{
|
||||
22754,
|
||||
22755,
|
||||
22756
|
||||
}
|
||||
}, 60007, new int[][]
|
||||
{
|
||||
{
|
||||
-179600,
|
||||
186998,
|
||||
-10704,
|
||||
11632
|
||||
},
|
||||
{
|
||||
-179295,
|
||||
186444,
|
||||
-10704,
|
||||
11632
|
||||
}
|
||||
});
|
||||
|
||||
// Cokrakon data
|
||||
_regionsData[2] = new SeedRegion(new int[]
|
||||
{
|
||||
22763,
|
||||
22764,
|
||||
22765
|
||||
}, new int[][]
|
||||
{
|
||||
{
|
||||
22760,
|
||||
22760,
|
||||
22761
|
||||
},
|
||||
{
|
||||
22760,
|
||||
22760,
|
||||
22762
|
||||
},
|
||||
{
|
||||
22761,
|
||||
22761,
|
||||
22760
|
||||
},
|
||||
{
|
||||
22761,
|
||||
22761,
|
||||
22762
|
||||
},
|
||||
{
|
||||
22762,
|
||||
22762,
|
||||
22760
|
||||
},
|
||||
{
|
||||
22762,
|
||||
22762,
|
||||
22761
|
||||
}
|
||||
}, 60008, new int[][]
|
||||
{
|
||||
{
|
||||
-180971,
|
||||
186361,
|
||||
-10528,
|
||||
11632
|
||||
},
|
||||
{
|
||||
-180758,
|
||||
186739,
|
||||
-10528,
|
||||
11632
|
||||
}
|
||||
});
|
||||
|
||||
int buffsNow = 0;
|
||||
String var = loadGlobalQuestVar("SeedNextStatusChange");
|
||||
if (var.equalsIgnoreCase("") || (Long.parseLong(var) < System.currentTimeMillis()))
|
||||
{
|
||||
buffsNow = getRandom(ZONE_BUFFS_LIST.length);
|
||||
saveGlobalQuestVar("SeedBuffsList", String.valueOf(buffsNow));
|
||||
_seedsNextStatusChange = getNextSeedsStatusChangeTime();
|
||||
saveGlobalQuestVar("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
}
|
||||
else
|
||||
{
|
||||
_seedsNextStatusChange = Long.parseLong(var);
|
||||
buffsNow = Integer.parseInt(loadGlobalQuestVar("SeedBuffsList"));
|
||||
}
|
||||
for (int i = 0; i < _regionsData.length; i++)
|
||||
{
|
||||
_regionsData[i].activeBuff = ZONE_BUFFS_LIST[buffsNow][i];
|
||||
}
|
||||
}
|
||||
|
||||
private Long getNextSeedsStatusChangeTime()
|
||||
{
|
||||
Calendar reenter = Calendar.getInstance();
|
||||
reenter.set(Calendar.SECOND, 0);
|
||||
reenter.set(Calendar.MINUTE, 0);
|
||||
reenter.set(Calendar.HOUR_OF_DAY, 13);
|
||||
reenter.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
|
||||
if (reenter.getTimeInMillis() <= System.currentTimeMillis())
|
||||
{
|
||||
reenter.add(Calendar.DAY_OF_MONTH, 7);
|
||||
}
|
||||
return reenter.getTimeInMillis();
|
||||
}
|
||||
|
||||
private void startEffectZonesControl()
|
||||
{
|
||||
for (int i = 0; i < _regionsData.length; i++)
|
||||
{
|
||||
for (int j = 0; j < _regionsData[i].af_spawns.length; j++)
|
||||
{
|
||||
_regionsData[i].af_npcs[j] = addSpawn(ANNIHILATION_FURNACE, _regionsData[i].af_spawns[j][0], _regionsData[i].af_spawns[j][1], _regionsData[i].af_spawns[j][2], _regionsData[i].af_spawns[j][3], false, 0);
|
||||
_regionsData[i].af_npcs[j].setDisplayEffect(_regionsData[i].activeBuff);
|
||||
}
|
||||
ZoneManager.getInstance().getZoneById(_regionsData[i].buff_zone, L2EffectZone.class).addSkill(ZONE_BUFFS[_regionsData[i].activeBuff], 1);
|
||||
}
|
||||
startQuestTimer("ChangeSeedsStatus", _seedsNextStatusChange - System.currentTimeMillis(), null, null);
|
||||
}
|
||||
|
||||
private void spawnGroupOfMinion(L2MonsterInstance npc, int[] mobIds)
|
||||
{
|
||||
for (int mobId : mobIds)
|
||||
{
|
||||
addMinion(npc, mobId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
for (SeedRegion element : _regionsData)
|
||||
{
|
||||
if (Util.contains(element.elite_mob_ids, npc.getId()))
|
||||
{
|
||||
spawnGroupOfMinion((L2MonsterInstance) npc, element.minion_lists[getRandom(element.minion_lists.length)]);
|
||||
}
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (event.equalsIgnoreCase("ChangeSeedsStatus"))
|
||||
{
|
||||
int buffsNow = getRandom(ZONE_BUFFS_LIST.length);
|
||||
saveGlobalQuestVar("SeedBuffsList", String.valueOf(buffsNow));
|
||||
_seedsNextStatusChange = getNextSeedsStatusChangeTime();
|
||||
saveGlobalQuestVar("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
for (int i = 0; i < _regionsData.length; i++)
|
||||
{
|
||||
_regionsData[i].activeBuff = ZONE_BUFFS_LIST[buffsNow][i];
|
||||
|
||||
for (L2Npc af : _regionsData[i].af_npcs)
|
||||
{
|
||||
af.setDisplayEffect(_regionsData[i].activeBuff);
|
||||
}
|
||||
|
||||
L2EffectZone zone = ZoneManager.getInstance().getZoneById(_regionsData[i].buff_zone, L2EffectZone.class);
|
||||
zone.clearSkills();
|
||||
zone.addSkill(ZONE_BUFFS[_regionsData[i].activeBuff], 1);
|
||||
}
|
||||
startQuestTimer("ChangeSeedsStatus", _seedsNextStatusChange - System.currentTimeMillis(), null, null);
|
||||
}
|
||||
else if (event.equalsIgnoreCase("transform"))
|
||||
{
|
||||
if (player.isAffectedBySkill(6408))
|
||||
{
|
||||
npc.showChatWindow(player, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
npc.setTarget(player);
|
||||
npc.doCast(SkillData.getInstance().getSkill(6408, 1));
|
||||
npc.doCast(SkillData.getInstance().getSkill(6649, 1));
|
||||
npc.showChatWindow(player, 1);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onEnterZone(L2Character character, L2ZoneType zone)
|
||||
{
|
||||
if (_teleportZones.containsKey(zone.getId()))
|
||||
{
|
||||
Location teleLoc = _teleportZones.get(zone.getId());
|
||||
character.teleToLocation(teleLoc, false);
|
||||
}
|
||||
return super.onEnterZone(character, zone);
|
||||
}
|
||||
|
||||
private static class SeedRegion
|
||||
{
|
||||
public int[] elite_mob_ids;
|
||||
public int[][] minion_lists;
|
||||
public int buff_zone;
|
||||
public int[][] af_spawns;
|
||||
public L2Npc[] af_npcs = new L2Npc[2];
|
||||
public int activeBuff = 0;
|
||||
|
||||
public SeedRegion(int[] emi, int[][] ml, int bz, int[][] as)
|
||||
{
|
||||
elite_mob_ids = emi;
|
||||
minion_lists = ml;
|
||||
buff_zone = bz;
|
||||
af_spawns = as;
|
||||
}
|
||||
}
|
||||
}
|
99
trunk/dist/game/data/scripts/gracia/AI/StarStones.java
vendored
Normal file
99
trunk/dist/game/data/scripts/gracia/AI/StarStones.java
vendored
Normal file
@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 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 gracia.AI;
|
||||
|
||||
import ai.npc.AbstractNpcAI;
|
||||
|
||||
import com.l2jserver.gameserver.model.L2Object;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.model.skills.Skill;
|
||||
import com.l2jserver.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
* Star Stones AI.
|
||||
* @author Gigiikun
|
||||
*/
|
||||
public class StarStones extends AbstractNpcAI
|
||||
{
|
||||
// @formatter:off
|
||||
private static final int[] MOBS =
|
||||
{
|
||||
18684, 18685, 18686, 18687, 18688, 18689, 18690, 18691, 18692
|
||||
};
|
||||
// @formatter:on
|
||||
|
||||
private static final int COLLECTION_RATE = 1;
|
||||
|
||||
public StarStones()
|
||||
{
|
||||
super(StarStones.class.getSimpleName(), "gracia/AI");
|
||||
addSkillSeeId(MOBS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSkillSee(L2Npc npc, L2PcInstance caster, Skill skill, L2Object[] targets, boolean isSummon)
|
||||
{
|
||||
if (skill.getId() == 932)
|
||||
{
|
||||
int itemId = 0;
|
||||
|
||||
switch (npc.getId())
|
||||
{
|
||||
case 18684:
|
||||
case 18685:
|
||||
case 18686:
|
||||
// give Red item
|
||||
itemId = 14009;
|
||||
break;
|
||||
case 18687:
|
||||
case 18688:
|
||||
case 18689:
|
||||
// give Blue item
|
||||
itemId = 14010;
|
||||
break;
|
||||
case 18690:
|
||||
case 18691:
|
||||
case 18692:
|
||||
// give Green item
|
||||
itemId = 14011;
|
||||
break;
|
||||
default:
|
||||
// unknown npc!
|
||||
return super.onSkillSee(npc, caster, skill, targets, isSummon);
|
||||
}
|
||||
if (getRandom(100) < 33)
|
||||
{
|
||||
caster.sendPacket(SystemMessageId.YOUR_COLLECTION_HAS_SUCCEEDED);
|
||||
caster.addItem("StarStone", itemId, getRandom(COLLECTION_RATE + 1, 2 * COLLECTION_RATE), null, true);
|
||||
}
|
||||
else if (((skill.getLevel() == 1) && (getRandom(100) < 15)) || ((skill.getLevel() == 2) && (getRandom(100) < 50)) || ((skill.getLevel() == 3) && (getRandom(100) < 75)))
|
||||
{
|
||||
caster.sendPacket(SystemMessageId.YOUR_COLLECTION_HAS_SUCCEEDED);
|
||||
caster.addItem("StarStone", itemId, getRandom(1, COLLECTION_RATE), null, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
caster.sendPacket(SystemMessageId.THE_COLLECTION_HAS_FAILED);
|
||||
}
|
||||
npc.deleteMe();
|
||||
}
|
||||
return super.onSkillSee(npc, caster, skill, targets, isSummon);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user