Sync with L2jUnity (7db5b4f).
This commit is contained in:
@@ -18,6 +18,7 @@ package instances;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.l2jmobius.commons.util.CommonUtil;
|
||||
import com.l2jmobius.gameserver.enums.InstanceReenterType;
|
||||
import com.l2jmobius.gameserver.instancemanager.InstanceManager;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
@@ -38,6 +39,27 @@ import ai.AbstractNpcAI;
|
||||
*/
|
||||
public abstract class AbstractInstance extends AbstractNpcAI
|
||||
{
|
||||
private final int[] _templateIds;
|
||||
|
||||
public AbstractInstance(int... templateId)
|
||||
{
|
||||
if (templateId.length == 0)
|
||||
{
|
||||
throw new IllegalStateException("No template ids were provided!");
|
||||
}
|
||||
_templateIds = templateId;
|
||||
}
|
||||
|
||||
public int[] getTemplateId()
|
||||
{
|
||||
return _templateIds;
|
||||
}
|
||||
|
||||
public boolean isInInstance(Instance instance)
|
||||
{
|
||||
return (instance != null) && CommonUtil.contains(_templateIds, instance.getTemplateId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get instance world associated with {@code player}.<br>
|
||||
* @param player player who wants get instance world
|
||||
|
||||
@@ -54,6 +54,7 @@ public final class BaylorWarzone extends AbstractInstance
|
||||
|
||||
public BaylorWarzone()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(ENTRANCE_PORTAL);
|
||||
addTalkId(ENTRANCE_PORTAL);
|
||||
addInstanceCreatedId(TEMPLATE_ID);
|
||||
@@ -77,7 +78,7 @@ public final class BaylorWarzone extends AbstractInstance
|
||||
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (isBylorInstance(world))
|
||||
if (isInInstance(world))
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
@@ -265,7 +266,7 @@ public final class BaylorWarzone extends AbstractInstance
|
||||
public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (isBylorInstance(world))
|
||||
if (isInInstance(world))
|
||||
{
|
||||
world.getAliveNpcs(INVISIBLE_NPC_1, INVISIBLE_NPC_2, INVISIBLE_NPC_3).forEach(L2Npc::deleteMe);
|
||||
world.getAliveNpcs(PRISON_GUARD).forEach(guard -> guard.doDie(null));
|
||||
@@ -289,7 +290,7 @@ public final class BaylorWarzone extends AbstractInstance
|
||||
final L2Npc npc = (L2Npc) event.getTarget();
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
|
||||
if (isBylorInstance(world))
|
||||
if (isInInstance(world))
|
||||
{
|
||||
if (world.getAliveNpcs(BAYLOR).isEmpty())
|
||||
{
|
||||
@@ -308,7 +309,7 @@ public final class BaylorWarzone extends AbstractInstance
|
||||
final L2Npc npc = (L2Npc) event.getSeer();
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
|
||||
if (isBylorInstance(world) && creature.isPlayer() && npc.isScriptValue(0))
|
||||
if (isInInstance(world) && creature.isPlayer() && npc.isScriptValue(0))
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
getTimers().addTimer("START_SCENE_01", 5000, npc, null);
|
||||
@@ -325,11 +326,6 @@ public final class BaylorWarzone extends AbstractInstance
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
private boolean isBylorInstance(Instance instance)
|
||||
{
|
||||
return (instance != null) && (instance.getTemplateId() == TEMPLATE_ID);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new BaylorWarzone();
|
||||
|
||||
@@ -89,6 +89,7 @@ public final class CastleDungeon extends AbstractInstance
|
||||
|
||||
public CastleDungeon()
|
||||
{
|
||||
super(NPCS.values().stream().mapToInt(Integer::valueOf).toArray());
|
||||
// NPCs
|
||||
addStartNpc(NPCS.keySet());
|
||||
addTalkId(NPCS.keySet());
|
||||
|
||||
@@ -124,6 +124,7 @@ public final class CavernOfThePirateCaptain extends AbstractInstance
|
||||
|
||||
public CavernOfThePirateCaptain()
|
||||
{
|
||||
super(TEMPLATE_ID_60, TEMPLATE_ID_83);
|
||||
addStartNpc(PATHFINDER);
|
||||
addTalkId(PATHFINDER);
|
||||
addKillId(ZAKEN_60, ZAKEN_83);
|
||||
|
||||
@@ -91,6 +91,7 @@ public final class ChamberOfDelusion extends AbstractInstance
|
||||
|
||||
public ChamberOfDelusion()
|
||||
{
|
||||
super(ENTRANCE_GATEKEEPER.values().stream().mapToInt(Integer::valueOf).toArray());
|
||||
addStartNpc(ENTRANCE_GATEKEEPER.keySet());
|
||||
addStartNpc(ROOM_GATEKEEPERS);
|
||||
addTalkId(ENTRANCE_GATEKEEPER.keySet());
|
||||
|
||||
@@ -110,6 +110,7 @@ public final class DarkCloudMansion extends AbstractInstance
|
||||
|
||||
public DarkCloudMansion()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(YIYEN);
|
||||
addFirstTalkId(MONOLITH, TRUTH, FAITH, ADVERSITY, ADVENTURE);
|
||||
addTalkId(YIYEN, TRUTH);
|
||||
@@ -372,8 +373,10 @@ public final class DarkCloudMansion extends AbstractInstance
|
||||
break;
|
||||
}
|
||||
case 9:
|
||||
{
|
||||
handleRoomE(world, npc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -38,6 +38,7 @@ public final class EvasHiddenSpace extends AbstractInstance
|
||||
|
||||
public EvasHiddenSpace()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(CERENAS);
|
||||
addTalkId(CERENAS, EVAS_AVATAR);
|
||||
addFirstTalkId(EVAS_AVATAR);
|
||||
|
||||
@@ -187,6 +187,7 @@ public final class EvilIncubator extends AbstractInstance
|
||||
|
||||
public EvilIncubator()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(VANGUARD_MEMBER);
|
||||
addTalkId(VANGUARD_MEMBER, ADOLPH, ALICE, BARTON, HAYUK, ELIYAH);
|
||||
addFirstTalkId(ADOLPH, ALICE, BARTON, HAYUK, ELIYAH);
|
||||
|
||||
@@ -59,6 +59,7 @@ public final class FaeronTrainingGrounds1 extends AbstractInstance
|
||||
|
||||
public FaeronTrainingGrounds1()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(AYANTHE, AYANTHE_2);
|
||||
addFirstTalkId(AYANTHE_2);
|
||||
addTalkId(AYANTHE, AYANTHE_2);
|
||||
|
||||
@@ -59,6 +59,7 @@ public final class FaeronTrainingGrounds2 extends AbstractInstance
|
||||
|
||||
public FaeronTrainingGrounds2()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(KATALIN, KATALIN_2);
|
||||
addFirstTalkId(KATALIN_2);
|
||||
addTalkId(KATALIN, KATALIN_2);
|
||||
@@ -78,11 +79,15 @@ public final class FaeronTrainingGrounds2 extends AbstractInstance
|
||||
switch (event)
|
||||
{
|
||||
case "enter_instance":
|
||||
{
|
||||
enterInstance(player, npc, TEMPLATE_ID);
|
||||
break;
|
||||
}
|
||||
case "exit_instance":
|
||||
{
|
||||
finishInstance(player, 0);
|
||||
break;
|
||||
}
|
||||
case "33945-03.html":
|
||||
{
|
||||
if (qs.isCond(6))
|
||||
|
||||
@@ -46,7 +46,6 @@ public final class FortressDungeon extends AbstractInstance
|
||||
{
|
||||
// NPCs
|
||||
private static final Map<Integer, Integer> NPCS = new HashMap<>();
|
||||
|
||||
static
|
||||
{
|
||||
NPCS.put(35666, 22); // Shanty
|
||||
@@ -103,6 +102,7 @@ public final class FortressDungeon extends AbstractInstance
|
||||
|
||||
public FortressDungeon()
|
||||
{
|
||||
super(NPCS.values().stream().mapToInt(Integer::valueOf).toArray());
|
||||
// NPCs
|
||||
addStartNpc(NPCS.keySet());
|
||||
addTalkId(NPCS.keySet());
|
||||
|
||||
@@ -51,6 +51,7 @@ public final class FortressOfTheDead extends AbstractInstance
|
||||
|
||||
public FortressOfTheDead()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(BROKEN_BOOKSHELF);
|
||||
addFirstTalkId(KAIN_VAN_HALTER);
|
||||
addTalkId(BROKEN_BOOKSHELF, KAIN_VAN_HALTER, MYSTERIOUS_WIZARD);
|
||||
@@ -69,7 +70,7 @@ public final class FortressOfTheDead extends AbstractInstance
|
||||
else
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (isFotDInstance(world))
|
||||
if (isInInstance(world))
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
@@ -138,7 +139,7 @@ public final class FortressOfTheDead extends AbstractInstance
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
|
||||
if (isFotDInstance(world))
|
||||
if (isInInstance(world))
|
||||
{
|
||||
if (npc.getId() == VAMPIRIC_SOLDIER)
|
||||
{
|
||||
@@ -157,11 +158,6 @@ public final class FortressOfTheDead extends AbstractInstance
|
||||
return super.onKill(npc, player, isSummon);
|
||||
}
|
||||
|
||||
private boolean isFotDInstance(Instance instance)
|
||||
{
|
||||
return (instance != null) && (instance.getTemplateId() == TEMPLATE_ID);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new FortressOfTheDead();
|
||||
|
||||
@@ -94,6 +94,7 @@ public final class HarnakUndergroundRuins extends AbstractInstance
|
||||
|
||||
public HarnakUndergroundRuins()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
registerMobs(KRAKIA_BATHUS, KRAKIA_CARCASS, KRAKIA_LOTUS, RAKZAN, WEISS_KHAN, BAMONTI, SEKNUS, WEISS_ELE, HARNAKS_WRAITH);
|
||||
addSeeCreatureId(POWER_SOURCES);
|
||||
addEnterZoneId(ZONE_ROOM_2, ZONE_ROOM_3);
|
||||
|
||||
@@ -56,6 +56,7 @@ public final class IceQueensCastle extends AbstractInstance
|
||||
|
||||
public IceQueensCastle()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(JINIA);
|
||||
addTalkId(JINIA);
|
||||
addSeeCreatureId(BATTALION_LEADER, LEGIONNAIRE, MERCENARY_ARCHER);
|
||||
|
||||
@@ -150,6 +150,7 @@ public final class IceQueensCastleBattle extends AbstractInstance
|
||||
|
||||
public IceQueensCastleBattle()
|
||||
{
|
||||
super(TEMPLATE_ID_EASY, TEMPLATE_ID_HARD);
|
||||
addStartNpc(SIRRA, SUPP_KEGOR, SUPP_JINIA);
|
||||
addFirstTalkId(SUPP_KEGOR, SUPP_JINIA);
|
||||
addTalkId(SIRRA, JINIA, SUPP_KEGOR);
|
||||
|
||||
@@ -80,6 +80,7 @@ public final class IstinaCavern extends AbstractInstance
|
||||
|
||||
public IstinaCavern()
|
||||
{
|
||||
super(TEMPLATE_ID_COMMON, TEMPLATE_ID_EXTREME);
|
||||
addStartNpc(RUMIESE);
|
||||
addTalkId(RUMIESE, RUMIESE_INSTANCE);
|
||||
addFirstTalkId(RUMIESE_INSTANCE);
|
||||
@@ -95,7 +96,7 @@ public final class IstinaCavern extends AbstractInstance
|
||||
{
|
||||
String htmltext = null;
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isIstinaInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
@@ -157,7 +158,7 @@ public final class IstinaCavern extends AbstractInstance
|
||||
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isIstinaInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
final StatsSet npcParams = npc.getParameters();
|
||||
final StatsSet npcVars = npc.getVariables();
|
||||
@@ -363,7 +364,7 @@ public final class IstinaCavern extends AbstractInstance
|
||||
public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if ((skill != null) && isIstinaInstance(instance))
|
||||
if ((skill != null) && isInInstance(instance))
|
||||
{
|
||||
final int skillId = skill.getId();
|
||||
|
||||
@@ -433,7 +434,7 @@ public final class IstinaCavern extends AbstractInstance
|
||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon, Skill skill)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isIstinaInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
final StatsSet npcVars = npc.getVariables();
|
||||
final int stage = npcVars.getInt("ISTINA_STAGE", -1);
|
||||
@@ -571,7 +572,7 @@ public final class IstinaCavern extends AbstractInstance
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isIstinaInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
if (npc.getId() == INVISIBLE_NPC)
|
||||
{
|
||||
@@ -595,7 +596,7 @@ public final class IstinaCavern extends AbstractInstance
|
||||
{
|
||||
String htmltext = null;
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isIstinaInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (instance.getStatus())
|
||||
{
|
||||
@@ -624,11 +625,6 @@ public final class IstinaCavern extends AbstractInstance
|
||||
return instance.getTemplateId() == TEMPLATE_ID_EXTREME;
|
||||
}
|
||||
|
||||
private boolean isIstinaInstance(Instance instance)
|
||||
{
|
||||
return (instance != null) && ((instance.getTemplateId() == TEMPLATE_ID_COMMON) || (instance.getTemplateId() == TEMPLATE_ID_EXTREME));
|
||||
}
|
||||
|
||||
private int getChargedPercent(int score, boolean isExtreme)
|
||||
{
|
||||
final int charged;
|
||||
|
||||
@@ -37,6 +37,7 @@ public final class JiniaGuildHideout1 extends AbstractInstance
|
||||
|
||||
public JiniaGuildHideout1()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(RAFFORTY);
|
||||
addTalkId(RAFFORTY);
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ public final class JiniaGuildHideout2 extends AbstractInstance
|
||||
|
||||
public JiniaGuildHideout2()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(RAFFORTY);
|
||||
addTalkId(RAFFORTY);
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ public final class JiniaGuildHideout3 extends AbstractInstance
|
||||
|
||||
public JiniaGuildHideout3()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(RAFFORTY);
|
||||
addTalkId(RAFFORTY);
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ public final class JiniaGuildHideout4 extends AbstractInstance
|
||||
|
||||
public JiniaGuildHideout4()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(RAFFORTY);
|
||||
addTalkId(RAFFORTY);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ public final class KaraphonHabitat extends AbstractInstance
|
||||
|
||||
public KaraphonHabitat()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(DOLKIN);
|
||||
addFirstTalkId(DOLKIN_INSTANCE);
|
||||
addTalkId(DOLKIN);
|
||||
|
||||
@@ -157,6 +157,7 @@ public final class KartiasLabyrinth extends AbstractInstance
|
||||
|
||||
public KartiasLabyrinth()
|
||||
{
|
||||
super(TEMPLATE_ID_SOLO_85, TEMPLATE_ID_SOLO_90, TEMPLATE_ID_SOLO_95, TEMPLATE_ID_GROUP_85, TEMPLATE_ID_GROUP_90, TEMPLATE_ID_GROUP_95);
|
||||
addStartNpc(KARTIA_RESEARCHER);
|
||||
addFirstTalkId(KARTIA_RESEARCHER);
|
||||
addFirstTalkId(ADOLPH);
|
||||
|
||||
@@ -72,6 +72,7 @@ public final class KimerianCommon extends AbstractInstance
|
||||
|
||||
public KimerianCommon()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(NOETI_KASHERON);
|
||||
addTalkId(NOETI_KASHERON, NOETI_KASHERON_ENTRANCE);
|
||||
addFirstTalkId(NOETI_KASHERON_ENTRANCE, NOETI_KASHERON_LEAVE);
|
||||
@@ -86,7 +87,7 @@ public final class KimerianCommon extends AbstractInstance
|
||||
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isKimerianInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
@@ -141,7 +142,7 @@ public final class KimerianCommon extends AbstractInstance
|
||||
{
|
||||
String htmltext = null;
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isKimerianInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
@@ -206,7 +207,7 @@ public final class KimerianCommon extends AbstractInstance
|
||||
public String onAttack(L2Npc npc, L2PcInstance player, int damage, boolean isSummon)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isKimerianInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
if (npc.getId() == KIMERIAN)
|
||||
{
|
||||
@@ -243,7 +244,7 @@ public final class KimerianCommon extends AbstractInstance
|
||||
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isKimerianInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
@@ -290,7 +291,7 @@ public final class KimerianCommon extends AbstractInstance
|
||||
{
|
||||
final L2Npc npc = (L2Npc) event.getTarget();
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isKimerianInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
getTimers().cancelTimersOf(npc);
|
||||
}
|
||||
@@ -300,7 +301,7 @@ public final class KimerianCommon extends AbstractInstance
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isKimerianInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
@@ -355,7 +356,7 @@ public final class KimerianCommon extends AbstractInstance
|
||||
final StatsSet npcVars = npc.getVariables();
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
|
||||
if (isKimerianInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
@@ -431,7 +432,7 @@ public final class KimerianCommon extends AbstractInstance
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
|
||||
if (isKimerianInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
if (isHollow)
|
||||
{
|
||||
@@ -454,11 +455,6 @@ public final class KimerianCommon extends AbstractInstance
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isKimerianInstance(Instance instance)
|
||||
{
|
||||
return ((instance != null) && (instance.getTemplateId() == TEMPLATE_ID));
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new KimerianCommon();
|
||||
|
||||
@@ -81,6 +81,7 @@ public final class LabyrinthOfBelis extends AbstractInstance
|
||||
|
||||
public LabyrinthOfBelis()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(SEBION, INFILTRATION_OFFICER, BELIS_VERITIFICATION_SYSTEM);
|
||||
addFirstTalkId(INFILTRATION_OFFICER, ELECTRICITY_GENERATOR, BELIS_VERITIFICATION_SYSTEM);
|
||||
addTalkId(SEBION, INFILTRATION_OFFICER, BELIS_VERITIFICATION_SYSTEM);
|
||||
|
||||
@@ -154,6 +154,7 @@ public final class LastImperialTomb extends AbstractInstance
|
||||
|
||||
public LastImperialTomb()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addTalkId(GUIDE, CUBE);
|
||||
addAttackId(SCARLET1);
|
||||
addKillId(ON_KILL_MONSTERS);
|
||||
@@ -831,7 +832,7 @@ public final class LastImperialTomb extends AbstractInstance
|
||||
final SkillHolder skill = new SkillHolder(5007, random);
|
||||
final SkillHolder skillEffect = new SkillHolder(5008, random);
|
||||
broadCastPacket(world, new ExShowScreenMessage(2, -1, 2, 0, 0, 0, 0, true, 4000, false, null, SKILL_MSG.get(random), null));
|
||||
broadCastPacket(world, new MagicSkillUse(frintezza, frintezza, skill.getSkillId(), skill.getSkillLvl(), skill.getSkill().getHitTime(), 0));
|
||||
broadCastPacket(world, new MagicSkillUse(frintezza, frintezza, skill.getSkillId(), skill.getSkillLevel(), skill.getSkill().getHitTime(), 0));
|
||||
for (L2PcInstance player : world.getPlayers())
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import com.l2jmobius.gameserver.enums.CategoryType;
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.enums.Movie;
|
||||
import com.l2jmobius.gameserver.model.L2Object;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||
@@ -48,8 +49,10 @@ import com.l2jmobius.gameserver.network.NpcStringId;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.Earthquake;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.TutorialShowHtml;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.ValidateLocation;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.awakening.ExCallToChangeClass;
|
||||
import com.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
|
||||
@@ -73,6 +76,7 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
private static final int SILVERA = 19194;
|
||||
private static final int WIRPHY = 19195;
|
||||
private static final int EARTH_WYRM_TRASKEN = 19217;
|
||||
private static final int SWOOP_CANNON = 19190;
|
||||
private static final int[] DWARVES =
|
||||
{
|
||||
19191,
|
||||
@@ -97,16 +101,31 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
19214,
|
||||
19215
|
||||
};
|
||||
private static final int CONTROL_DARKELF_AWAKE = 33550;
|
||||
private static final int[] SACRIFICED_DARK_ELF =
|
||||
{
|
||||
33536,
|
||||
33538,
|
||||
33540,
|
||||
33542,
|
||||
33544,
|
||||
33546
|
||||
};
|
||||
// Skills
|
||||
private static final SkillHolder SWOOP_CANNON_SKILL = new SkillHolder(16023, 1);
|
||||
private static final SkillHolder SIEGE_GOLEM_SKILL_1 = new SkillHolder(16022, 1);
|
||||
private static final SkillHolder SIEGE_GOLEM_SKILL_2 = new SkillHolder(16024, 1);
|
||||
private static final SkillHolder PULLER_SKILL = new SkillHolder(16031, 1);
|
||||
private static final SkillHolder BOUNCER_SKILL = new SkillHolder(14649, 1);
|
||||
private static final SkillHolder TEREDOR_TRANSPARENT_SKILL = new SkillHolder(16021, 1);
|
||||
private static final SkillHolder TRASKEN_SKILL_1 = new SkillHolder(14505, 1);
|
||||
private static final SkillHolder TRASKEN_SKILL_2 = new SkillHolder(14337, 1);
|
||||
private static final SkillHolder TRASKEN_SKILL_3 = new SkillHolder(14338, 1);
|
||||
private static final SkillHolder TRASKEN_SKILL_4 = new SkillHolder(14340, 1);
|
||||
// Items
|
||||
private static final int TRANSPARENT_1HS = 15280;
|
||||
// Locations
|
||||
private static final Location BATTLE_PORT = new Location(116063, -183167, -1460, 64960);
|
||||
private static final Location BATTLE_PORT = new Location(116063, -183167, -1480, 64960);
|
||||
private static final Location ROGIN_MOVE = new Location(116400, -183069, -1600);
|
||||
private static final Location AWAKENING_GUIDE_MOVE_1 = new Location(115830, -182103, -1400);
|
||||
private static final Location AWAKENING_GUIDE_MOVE_2 = new Location(115955, -181387, -1624);
|
||||
@@ -132,6 +151,7 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
new Location(116925, -180420, -1200, 46585),
|
||||
new Location(116656, -180461, -1240, 56363),
|
||||
};
|
||||
private static final Location DE_VILLAGE_START = new Location(10400, 17092, -4584, Rnd.get(65520));
|
||||
// Misc
|
||||
private static final int FIRE_IN_DWARVEN_VILLAGE = 23120700;
|
||||
private static final int TEMPLATE_ID = 200;
|
||||
@@ -158,24 +178,38 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
NpcStringId.NO_WAY4,
|
||||
NpcStringId.ANOTHER_ONE_OVER_THERE
|
||||
};
|
||||
private static final NpcStringId[] SACRIFICED_DARK_ELF_SUICIDE_MESSAGES =
|
||||
{
|
||||
NpcStringId.GAH_SHILEN_WHY_MUST_YOU_MAKE_US_SUFFER,
|
||||
NpcStringId.SHILEN_ABANDONED_US_IT_IS_OUR_TIME_TO_DIE,
|
||||
NpcStringId.WITH_OUR_SACRIFICE_WILL_WE_FULFILL_THE_PROPHECY,
|
||||
NpcStringId.BLOODY_RAIN_PLAGUE_DEATH_SHE_IS_NEAR,
|
||||
NpcStringId.ARHHHH,
|
||||
NpcStringId.WE_OFFER_OUR_BLOOD_AS_A_SACRIFICE_SHILEN_SEE_US,
|
||||
NpcStringId.WILL_DARK_ELVES_BE_FORGOTTEN_AFTER_WHAT_WE_HAVE_DONE,
|
||||
NpcStringId.UNBELIEVERS_RUN_DEATH_WILL_FOLLOW_YOU,
|
||||
NpcStringId.I_CURSE_OUR_BLOOD_I_DESPISE_WHAT_WE_ARE_SHILEN
|
||||
};
|
||||
|
||||
public MemoryOfDisaster()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addInstanceCreatedId(TEMPLATE_ID);
|
||||
addSpawnId(INVISIBLE_NPC, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, SIEGE_GOLEM, WIRPHY, SILVERA, TEREDOR_TRANSPARENT, EARTH_WYRM_TRASKEN);
|
||||
addSpawnId(INVISIBLE_NPC, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, SIEGE_GOLEM, WIRPHY, SILVERA, TEREDOR_TRANSPARENT, EARTH_WYRM_TRASKEN, SWOOP_CANNON, CONTROL_DARKELF_AWAKE);
|
||||
addMoveFinishedId(ROGIN, SOLDIER, WIRPHY, SILVERA);
|
||||
addMoveFinishedId(DWARVES);
|
||||
addSpellFinishedId(SIEGE_GOLEM, INVISIBLE_NPC, TEREDOR_TRANSPARENT);
|
||||
addSpellFinishedId(SIEGE_GOLEM, INVISIBLE_NPC, TEREDOR_TRANSPARENT, EARTH_WYRM_TRASKEN, SWOOP_CANNON);
|
||||
setCreatureKillId(this::onCreatureKill, BRONK, SILVERA);
|
||||
setCreatureAttackedId(this::onCreatureAttacked, BRONK, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, SIEGE_GOLEM, WIRPHY, SILVERA);
|
||||
setCreatureSeeId(this::onCreatureSee, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, INVISIBLE_NPC);
|
||||
setCreatureSeeId(this::onCreatureSee, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, INVISIBLE_NPC, CONTROL_DARKELF_AWAKE);
|
||||
addEventReceivedId(SACRIFICED_DARK_ELF);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isMoDInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
@@ -216,7 +250,6 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
}
|
||||
case "EVENT_C":
|
||||
{
|
||||
// Rework me plz, I'm dying
|
||||
final L2Npc golem = addSpawn(npc, SIEGE_GOLEM, 116881, -180742, -1248, 1843, false, 0, false, instance.getId());
|
||||
golem.setIsInvul(true);
|
||||
break;
|
||||
@@ -232,6 +265,10 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
{
|
||||
addSkillCastDesire(npc, instance.getFirstPlayer(), PULLER_SKILL, 100000000);
|
||||
}
|
||||
else if (npc.getVariables().getString("type", "").equals("BOUNCER"))
|
||||
{
|
||||
addSkillCastDesire(npc, instance.getFirstPlayer(), BOUNCER_SKILL, 100000000);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -274,7 +311,6 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
case SIEGE_GOLEM:
|
||||
{
|
||||
npc.initSeenCreatures();
|
||||
|
||||
for (Location loc : TEREDOR_SPAWN_LOC)
|
||||
{
|
||||
final L2Npc teredor = addSpawn(TEREDOR, loc, false, 0, false, instance.getId());
|
||||
@@ -287,7 +323,6 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
{
|
||||
npc.setIsRunning(true);
|
||||
addMoveToDesire(npc, WIRPHY_MOVE, 23);
|
||||
npc.getInstanceWorld().getAliveNpcs(TEREDOR).stream().filter(n -> n.isScriptValue(2)).forEach(n -> addAttackDesire(n, npc));
|
||||
break;
|
||||
}
|
||||
case SILVERA:
|
||||
@@ -298,8 +333,6 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
}
|
||||
case TEREDOR_TRANSPARENT:
|
||||
{
|
||||
// TODO: Check why the first doesn't work :(
|
||||
addSkillCastDesire(npc, npc, TEREDOR_TRANSPARENT_SKILL, 1000000);
|
||||
npc.setTarget(npc);
|
||||
npc.doCast(TEREDOR_TRANSPARENT_SKILL.getSkill());
|
||||
break;
|
||||
@@ -310,17 +343,29 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
getTimers().addTimer("ENTER_EVENT", 5000, npc, null);
|
||||
break;
|
||||
}
|
||||
case SWOOP_CANNON:
|
||||
{
|
||||
npc.setTarget(npc);
|
||||
npc.doCast(SWOOP_CANNON_SKILL.getSkill());
|
||||
break;
|
||||
}
|
||||
case CONTROL_DARKELF_AWAKE:
|
||||
{
|
||||
npc.initSeenCreatures();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
public void onCreatureSee(OnCreatureSee event)
|
||||
private void onCreatureSee(OnCreatureSee event)
|
||||
{
|
||||
final L2Character creature = event.getSeen();
|
||||
final L2Npc npc = (L2Npc) event.getSeer();
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (isMoDInstance(world))
|
||||
|
||||
if (isInInstance(world))
|
||||
{
|
||||
if (creature.isNpc())
|
||||
{
|
||||
@@ -370,7 +415,7 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
siegeGolem.setScriptValue(1);
|
||||
siegeGolem.abortAttack();
|
||||
siegeGolem.abortCast();
|
||||
addSkillCastDesire(siegeGolem, siegeGolem, SIEGE_GOLEM_SKILL_1, 1000000);
|
||||
siegeGolem.doCast(SIEGE_GOLEM_SKILL_1.getSkill());
|
||||
world.getAliveNpcs(TEREDOR).stream().filter(n -> n.isScriptValue(1)).forEach(n -> getTimers().addTimer("TEREDOR_SUICIDE", 10000, n, null));
|
||||
getTimers().addTimer("CHASING_TRAJAN_TIME", 5000, npc, null);
|
||||
getTimers().addTimer("EARTHWORM_TIME", 15000, npc, null);
|
||||
@@ -386,6 +431,15 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CONTROL_DARKELF_AWAKE:
|
||||
{
|
||||
getTimers().addTimer("OPENING_DE_SCENE", 1000, e ->
|
||||
{
|
||||
playMovie(creature.getActingPlayer(), Movie.SC_AWAKENING_OPENING_D);
|
||||
getTimers().addTimer("TIMER_ID_OP_SCEN_END", 25000, npc, creature.getActingPlayer());
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -396,24 +450,15 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "START_AWAKENING_OPENING_SCENE":
|
||||
{
|
||||
playMovie(player, Movie.SC_AWAKENING_OPENING);
|
||||
break;
|
||||
}
|
||||
case "EARTHQUAKE":
|
||||
{
|
||||
player.sendPacket(new Earthquake(player.getLocation(), 50, 4));
|
||||
break;
|
||||
}
|
||||
case "TELEPORT_PLAYER_TO_START":
|
||||
{
|
||||
player.teleToLocation(BATTLE_PORT);
|
||||
getTimers().addTimer("EARTHQUAKE", 10000, null, player);
|
||||
break;
|
||||
}
|
||||
case "END_OF_OPENING_SCENE":
|
||||
{
|
||||
player.teleToLocation(BATTLE_PORT);
|
||||
player.teleToLocation(BATTLE_PORT, player.getInstanceWorld());
|
||||
getTimers().addTimer("SPAWN_ROGIN", 10000, null, player);
|
||||
break;
|
||||
}
|
||||
@@ -529,14 +574,17 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
case "ATTACK_TIME":
|
||||
{
|
||||
final List<L2Npc> tentacles = npc.getInstanceWorld().getAliveNpcs(TENTACLE).stream().filter(n -> n.getVariables().getBoolean("isLeaderKiller", false)).collect(Collectors.toList());
|
||||
addAttackDesire(npc, tentacles.get(Rnd.get(tentacles.size())));
|
||||
npc.getInstanceWorld().getNpcs(DWARVES).forEach(n -> addAttackDesire(n, tentacles.get(Rnd.get(tentacles.size()))));
|
||||
break;
|
||||
}
|
||||
case "RUN_TIME":
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, SHOUT_RUN[Rnd.get(SHOUT_RUN.length)]);
|
||||
addMoveToDesire(npc, DWARVES_MOVE_1, 23);
|
||||
npc.setIsRunning(true);
|
||||
npc.getInstanceWorld().getNpcs(DWARVES).forEach(n ->
|
||||
{
|
||||
n.setIsRunning(true);
|
||||
n.broadcastSay(ChatType.NPC_GENERAL, SHOUT_RUN[Rnd.get(SHOUT_RUN.length)]);
|
||||
n.getAI().moveTo(DWARVES_MOVE_1);
|
||||
});
|
||||
break;
|
||||
}
|
||||
case "TEREDOR_SUICIDE":
|
||||
@@ -553,10 +601,10 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
case "SECOND_PULL":
|
||||
{
|
||||
addSkillCastDesire(npc, npc.getInstanceWorld().getFirstPlayer(), PULLER_SKILL, 100000000);
|
||||
getTimers().addTimer("DESPAWNER_PULLER", 3000, npc, null);
|
||||
getTimers().addTimer("DESPAWN_PULLER", 3000, npc, null);
|
||||
break;
|
||||
}
|
||||
case "DESPAWNER_PULLER":
|
||||
case "DESPAWN_PULLER":
|
||||
{
|
||||
npc.deleteMe();
|
||||
break;
|
||||
@@ -569,12 +617,13 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
}
|
||||
case "EARTHWORM_TIME":
|
||||
{
|
||||
addSpawn(npc, TEREDOR_TRANSPARENT, 116511, -178729, -1176, 43905, false, 0, false, npc.getInstanceId());
|
||||
addSpawn(npc, TEREDOR_TRANSPARENT, 116511, -178729, -1176, 58208, false, 0, false, npc.getInstanceId());
|
||||
break;
|
||||
}
|
||||
case "ENTER_EVENT":
|
||||
{
|
||||
addSkillCastDesire(npc, npc, TRASKEN_SKILL_1, 100000000);
|
||||
npc.setTarget(npc);
|
||||
npc.doCast(TRASKEN_SKILL_1.getSkill());
|
||||
npc.getInstanceWorld().getFirstPlayer().sendPacket(new Earthquake(npc.getLocation(), 50, 4));
|
||||
getTimers().addTimer("TRASKEN_UNEQUIP", 2000, npc, null);
|
||||
break;
|
||||
@@ -582,37 +631,61 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
case "TRASKEN_UNEQUIP":
|
||||
{
|
||||
npc.setLHandId(0);
|
||||
npc.broadcastInfo();
|
||||
getTimers().addTimer("END_VIDEO", 20000, null, npc.getInstanceWorld().getFirstPlayer());
|
||||
break;
|
||||
}
|
||||
case "END_VIDEO":
|
||||
case "PC_TEL_TIME":
|
||||
{
|
||||
player.sendPacket(new OnEventTrigger(FIRE_IN_DWARVEN_VILLAGE, false));
|
||||
getTimers().cancelTimer("EARTHQUAKE", null, player);
|
||||
player.teleToLocation(DE_VILLAGE_START, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "TIMER_ID_OP_SCEN_END":
|
||||
{
|
||||
npc.broadcastEvent("SCE_J4D_DARK_ELF_START", 8000, null);
|
||||
getTimers().addTimer("TIMER_ID_END", 60000, npc, player);
|
||||
break;
|
||||
}
|
||||
case "TIMER_ID_END":
|
||||
{
|
||||
playMovie(player, Movie.SC_AWAKENING_OPENING_E);
|
||||
getTimers().addTimer("TIMER_ID_ED_SCEN_END", 30000, npc, player);
|
||||
break;
|
||||
}
|
||||
case "TIMER_ID_ED_SCEN_END":
|
||||
{
|
||||
playMovie(player, Movie.SC_AWAKENING_OPENING_F);
|
||||
getTimers().addTimer("END_INSTANCE", 45000, null, player);
|
||||
getTimers().addTimer("TIMER_ID_FINAL_ED_SCEN_END", 10000, npc, player);
|
||||
break;
|
||||
}
|
||||
case "END_INSTANCE":
|
||||
case "TIMER_ID_FINAL_ED_SCEN_END":
|
||||
{
|
||||
getTimers().cancelTimers("EARTHQUAKE");
|
||||
// myself->SetOneTimeQuestFlag(myself->c_ai0, 10491, 1);
|
||||
player.sendPacket(new TutorialShowHtml(getHtm(player.getHtmlPrefix(), "calltochange_end.htm")));
|
||||
finishInstance(player, 0);
|
||||
break;
|
||||
}
|
||||
case "TIMER_ID_DIE":
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, SACRIFICED_DARK_ELF_SUICIDE_MESSAGES[Rnd.get(SACRIFICED_DARK_ELF_SUICIDE_MESSAGES.length)]);
|
||||
npc.doDie(npc);
|
||||
DecayTaskManager.getInstance().cancel(npc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInstanceCreated(Instance instance, L2PcInstance player)
|
||||
{
|
||||
getTimers().addTimer("OPENING_SCENE", 500, e ->
|
||||
getTimers().addTimer("OPENING_SCENE", 1000, e ->
|
||||
{
|
||||
instance.getPlayers().forEach(p ->
|
||||
{
|
||||
p.sendPacket(new OnEventTrigger(FIRE_IN_DWARVEN_VILLAGE, true));
|
||||
getTimers().addRepeatingTimer("EARTHQUAKE", 10000, null, p);
|
||||
getTimers().addTimer("END_OF_OPENING_SCENE", 30000, null, p);
|
||||
getTimers().addTimer("START_AWAKENING_OPENING_SCENE", 1000, null, p);
|
||||
getTimers().addTimer("TELEPORT_PLAYER_TO_START", 25000, null, p);
|
||||
playMovie(p, Movie.SC_AWAKENING_OPENING);
|
||||
getTimers().addTimer("EARTHQUAKE", 10000, null, p);
|
||||
getTimers().addTimer("END_OF_OPENING_SCENE", 32000, null, p);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -679,6 +752,7 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
case WIRPHY:
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.HELP_ME3);
|
||||
npc.getInstanceWorld().getAliveNpcs(TEREDOR).stream().filter(n -> n.isScriptValue(2)).forEach(n -> addAttackDesire(n, npc));
|
||||
break;
|
||||
}
|
||||
case SILVERA:
|
||||
@@ -692,7 +766,7 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
private void onCreatureAttacked(OnCreatureAttacked event)
|
||||
{
|
||||
final Instance world = event.getTarget().getInstanceWorld();
|
||||
if (isMoDInstance(world))
|
||||
if (isInInstance(world))
|
||||
{
|
||||
if (!event.getAttacker().isPlayable())
|
||||
{
|
||||
@@ -774,6 +848,10 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
if ((attackCount == 80) || (attacker.getId() == SIEGE_GOLEM))
|
||||
{
|
||||
npc.doDie(attacker);
|
||||
final L2Npc golem = world.getNpc(SIEGE_GOLEM);
|
||||
golem.abortAttack();
|
||||
golem.abortCast();
|
||||
world.getNpc(SIEGE_GOLEM).getAI().moveTo(GOLEM_MOVE);
|
||||
}
|
||||
addAttackDesire(npc, attacker);
|
||||
}
|
||||
@@ -791,17 +869,14 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.NO_WAY2);
|
||||
npc.doDie(null);
|
||||
// TODO : This shit doesn't attack silvera for some reason which prevents to trigger the dwarf text
|
||||
// Used some additional method such as World.getInstance().getVisibleObjects(attacker, Npc.class, n -> (n.getId() == SILVERA))
|
||||
// It found the npc but didn't worked either.
|
||||
addAttackDesire(attacker, world.getNpc(SILVERA));
|
||||
attacker.doAttack(world.getNpc(SILVERA));
|
||||
break;
|
||||
}
|
||||
case SILVERA:
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.MY_GOD);
|
||||
npc.doDie(null);
|
||||
addAttackDesire(world.getNpc(SIEGE_GOLEM), attacker);
|
||||
world.getNpc(SIEGE_GOLEM).doAttack(attacker);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -824,10 +899,10 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
{
|
||||
dwarf.broadcastSay(ChatType.NPC_GENERAL, SHOUT_BRONK_DEATH[Rnd.get(SHOUT_BRONK_DEATH.length)]);
|
||||
}
|
||||
getTimers().addTimer("ATTACK_TIME", 1000, dwarf, null);
|
||||
getTimers().addTimer("RUN_TIME", 10000, dwarf, null);
|
||||
}
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.UGH_IF_I_SEE_YOU_IN_THE_SPIRIT_WORLD_FIRST_ROUND_IS_ON_ME);
|
||||
getTimers().addTimer("ATTACK_TIME", 1000, npc, null);
|
||||
getTimers().addTimer("RUN_TIME", 10000, npc, null);
|
||||
}
|
||||
else if (npc.getId() == SILVERA)
|
||||
{
|
||||
@@ -838,26 +913,104 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
@Override
|
||||
public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
|
||||
{
|
||||
if ((npc.getId() == SIEGE_GOLEM) && (skill.getId() == SIEGE_GOLEM_SKILL_1.getSkillId()))
|
||||
switch (npc.getId())
|
||||
{
|
||||
addMoveToDesire(npc, GOLEM_MOVE, 23);
|
||||
npc.setIsRunning(true);
|
||||
}
|
||||
else if ((npc.getId() == INVISIBLE_NPC) && npc.getVariables().getString("type", "").equals("PULLER") && (skill.getId() == PULLER_SKILL.getSkillId()) && npc.isScriptValue(0))
|
||||
{
|
||||
npc.teleToLocation(PULLER_TELEPORT);
|
||||
getTimers().addTimer("SECOND_PULL", 2000, npc, null);
|
||||
}
|
||||
else if ((npc.getId() == TEREDOR_TRANSPARENT) && (skill.getId() == TEREDOR_TRANSPARENT_SKILL.getSkillId()))
|
||||
{
|
||||
final L2Npc invisibleNpc = addSpawn(npc, INVISIBLE_NPC, npc.getLocation(), false, npc.getInstanceId());
|
||||
invisibleNpc.getVariables().set("type", "BOUNCER");
|
||||
addSpawn(npc, EARTH_WYRM_TRASKEN, npc.getLocation(), false, npc.getInstanceId());
|
||||
npc.deleteMe();
|
||||
case SIEGE_GOLEM:
|
||||
{
|
||||
if (skill.getId() == SIEGE_GOLEM_SKILL_1.getSkillId())
|
||||
{
|
||||
npc.setIsRunning(true);
|
||||
npc.getAI().moveTo(GOLEM_MOVE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case INVISIBLE_NPC:
|
||||
{
|
||||
if (npc.getVariables().getString("type", "").equals("PULLER") && (skill.getId() == PULLER_SKILL.getSkillId()) && npc.isScriptValue(0))
|
||||
{
|
||||
npc.teleToLocation(PULLER_TELEPORT, npc.getInstanceWorld());
|
||||
npc.setScriptValue(1);
|
||||
getTimers().addTimer("SECOND_PULL", 2000, npc, null);
|
||||
}
|
||||
else if (npc.getVariables().getString("type", "").equals("BOUNCER") && (skill.getId() == BOUNCER_SKILL.getSkillId()))
|
||||
{
|
||||
npc.deleteMe();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TEREDOR_TRANSPARENT:
|
||||
{
|
||||
if (skill.getId() == TEREDOR_TRANSPARENT_SKILL.getSkillId())
|
||||
{
|
||||
final L2Npc invisibleNpc = addSpawn(npc, INVISIBLE_NPC, npc.getLocation(), false, npc.getInstanceId());
|
||||
invisibleNpc.getVariables().set("type", "BOUNCER");
|
||||
addSpawn(npc, EARTH_WYRM_TRASKEN, npc.getLocation(), false, npc.getInstanceId());
|
||||
npc.deleteMe();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EARTH_WYRM_TRASKEN:
|
||||
{
|
||||
if (skill.getId() == TRASKEN_SKILL_1.getSkillId())
|
||||
{
|
||||
playMovie(npc.getInstanceWorld().getFirstPlayer(), Movie.SC_AWAKENING_OPENING_C);
|
||||
npc.setTarget(npc.getInstanceWorld().getNpc(SIEGE_GOLEM));
|
||||
npc.doCast(TRASKEN_SKILL_2.getSkill());
|
||||
getTimers().addTimer("PC_TEL_TIME", 23000, npc, npc.getInstanceWorld().getFirstPlayer());
|
||||
}
|
||||
else if (skill.getId() == TRASKEN_SKILL_2.getSkillId())
|
||||
{
|
||||
if (npc.isScriptValue(0))
|
||||
{
|
||||
npc.getInstanceWorld().getNpc(SIEGE_GOLEM).doDie(npc);
|
||||
final L2Npc invisibleNpc = addSpawn(npc, INVISIBLE_NPC, npc.getLocation(), false, npc.getInstanceId());
|
||||
invisibleNpc.getVariables().set("type", "BOUNCER");
|
||||
}
|
||||
npc.setTarget(npc);
|
||||
npc.doCast(TRASKEN_SKILL_4.getSkill());
|
||||
}
|
||||
else if (skill.getId() == TRASKEN_SKILL_4.getSkillId())
|
||||
{
|
||||
npc.setTarget(npc);
|
||||
npc.doCast(TRASKEN_SKILL_3.getSkill());
|
||||
if (npc.isScriptValue(0))
|
||||
{
|
||||
final L2Npc invisibleNpc = addSpawn(npc, INVISIBLE_NPC, npc.getLocation(), false, npc.getInstanceId());
|
||||
invisibleNpc.getVariables().set("type", "BOUNCER");
|
||||
npc.setScriptValue(1);
|
||||
}
|
||||
}
|
||||
else if (skill.getId() == TRASKEN_SKILL_3.getSkillId())
|
||||
{
|
||||
npc.setTarget(npc);
|
||||
npc.doCast(TRASKEN_SKILL_2.getSkill());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SWOOP_CANNON:
|
||||
{
|
||||
npc.setTarget(npc);
|
||||
npc.doCast(SWOOP_CANNON_SKILL.getSkill());
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onSpellFinished(npc, player, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onEventReceived(String event, L2Npc sender, L2Npc receiver, L2Object reference)
|
||||
{
|
||||
final Instance instance = receiver.getInstanceWorld();
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
if (event.equals("SCE_J4D_DARK_ELF_START"))
|
||||
{
|
||||
getTimers().addTimer("TIMER_ID_DIE", Rnd.get(60000) + 5000, receiver, null);
|
||||
}
|
||||
}
|
||||
return super.onEventReceived(event, sender, receiver, reference);
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_CALL_TO_CHANGE_CLASS)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public void onPlayerCallToChangeClass(OnPlayerCallToChangeClass event)
|
||||
@@ -895,11 +1048,6 @@ public final class MemoryOfDisaster extends AbstractInstance
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isMoDInstance(Instance instance)
|
||||
{
|
||||
return (instance != null) && (instance.getTemplateId() == TEMPLATE_ID);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new MemoryOfDisaster();
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<html><body>Hermuncus Call:<br>
|
||||
My faithful servant Cellphine is waiting to guide you to your fate of Awakening.<br1>
|
||||
To find Cellphine, go to the Museum, the largest building at Southern most part of Talking Island Village.<br1>
|
||||
Speak to the Pantheon to enter the Museum and find Cellphine inside.<br>
|
||||
Follow Cellphine's instructions to answer my call.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="link tutorial_close_0">Close Window</Button>
|
||||
</body></html>
|
||||
@@ -53,6 +53,7 @@ public final class MithrilMine extends AbstractInstance
|
||||
|
||||
public MithrilMine()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addFirstTalkId(KEGOR);
|
||||
addKillId(KEGOR, MITHRIL_MILLIPEDE);
|
||||
addStartNpc(TARUN, KRUN);
|
||||
|
||||
@@ -61,6 +61,7 @@ public final class MuseumDungeon extends AbstractInstance
|
||||
|
||||
public MuseumDungeon()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(PANTHEON);
|
||||
addFirstTalkId(DESK);
|
||||
addTalkId(PANTHEON, TOYRON);
|
||||
|
||||
@@ -55,6 +55,7 @@ public final class NightmareKamaloka extends AbstractInstance
|
||||
|
||||
public NightmareKamaloka()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(KURTIZ);
|
||||
addTalkId(KURTIZ);
|
||||
addSpawnId(INVISIBLE_NPC);
|
||||
@@ -66,7 +67,7 @@ public final class NightmareKamaloka extends AbstractInstance
|
||||
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isNightmareKamalokaInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
@@ -93,7 +94,7 @@ public final class NightmareKamaloka extends AbstractInstance
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isNightmareKamalokaInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
if (npc.getId() == INVISIBLE_NPC)
|
||||
{
|
||||
@@ -107,7 +108,7 @@ public final class NightmareKamaloka extends AbstractInstance
|
||||
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isNightmareKamalokaInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
final int nextDoorId = BOSS_MAP.getOrDefault(npc.getId(), -1);
|
||||
if (nextDoorId == -1)
|
||||
@@ -126,7 +127,7 @@ public final class NightmareKamaloka extends AbstractInstance
|
||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isNightmareKamalokaInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
if (npc.getId() == DARK_RIDER_UD)
|
||||
{
|
||||
@@ -155,11 +156,6 @@ public final class NightmareKamaloka extends AbstractInstance
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
private boolean isNightmareKamalokaInstance(Instance instance)
|
||||
{
|
||||
return ((instance != null) && (instance.getTemplateId() == TEMPLATE_ID));
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new NightmareKamaloka();
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<html><head><body>Kurtiz<br>
|
||||
Aren't you in a party? But you are not the party leader. <br>
|
||||
(Only the party leader can request to enter.)
|
||||
</body></html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<html><body>Kurtiz<br>
|
||||
Aren't you in a party? But you are not the party leader.<br>
|
||||
(Only the party leader can request to enter.)
|
||||
</body></html>
|
||||
@@ -69,6 +69,7 @@ public final class Nursery extends AbstractInstance
|
||||
|
||||
public Nursery()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(TIE);
|
||||
addFirstTalkId(TIE);
|
||||
addTalkId(TIE);
|
||||
@@ -82,7 +83,7 @@ public final class Nursery extends AbstractInstance
|
||||
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isNurseryInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
final StatsSet npcVars = npc.getVariables();
|
||||
final int gameStage = npcVars.getInt("GAME_STAGE", 0);
|
||||
@@ -139,7 +140,7 @@ public final class Nursery extends AbstractInstance
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
String htmltext = null;
|
||||
|
||||
if (isNurseryInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
final StatsSet npcVars = npc.getVariables();
|
||||
|
||||
@@ -191,7 +192,7 @@ public final class Nursery extends AbstractInstance
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isNurseryInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
final StatsSet npcVars = npc.getVariables();
|
||||
final int gameStage = npcVars.getInt("GAME_STAGE", 0);
|
||||
@@ -272,7 +273,7 @@ public final class Nursery extends AbstractInstance
|
||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isNurseryInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
final StatsSet npcVars = npc.getVariables();
|
||||
final int maguenStatus = npcVars.getInt("MAGUEN_STATUS", 0);
|
||||
@@ -316,7 +317,7 @@ public final class Nursery extends AbstractInstance
|
||||
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isNurseryInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
if (getRandom(100) < 6)
|
||||
{
|
||||
@@ -389,7 +390,7 @@ public final class Nursery extends AbstractInstance
|
||||
public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isNurseryInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
final L2Npc gameManager = instance.getNpc(TIE);
|
||||
if (gameManager != null)
|
||||
@@ -458,11 +459,6 @@ public final class Nursery extends AbstractInstance
|
||||
return super.onEnterZone(character, zone);
|
||||
}
|
||||
|
||||
private boolean isNurseryInstance(Instance instance)
|
||||
{
|
||||
return ((instance != null) && (instance.getTemplateId() == TEMPLATE_ID));
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Nursery();
|
||||
|
||||
@@ -105,6 +105,7 @@ public final class OctavisWarzone extends AbstractInstance
|
||||
|
||||
public OctavisWarzone()
|
||||
{
|
||||
super(TEMPLATE_ID, EXTREME_TEMPLATE_ID);
|
||||
addStartNpc(LYDIA);
|
||||
addTalkId(LYDIA);
|
||||
addSpawnId(DOOR_MANAGER);
|
||||
@@ -140,7 +141,7 @@ public final class OctavisWarzone extends AbstractInstance
|
||||
case "reenterInstance":
|
||||
{
|
||||
final Instance activeInstance = getPlayerInstance(player);
|
||||
if (isOctavisInstance(activeInstance))
|
||||
if (isInInstance(activeInstance))
|
||||
{
|
||||
enterInstance(player, npc, activeInstance.getTemplateId());
|
||||
return "PartyMemberReenter.html";
|
||||
@@ -154,7 +155,7 @@ public final class OctavisWarzone extends AbstractInstance
|
||||
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (isOctavisInstance(world))
|
||||
if (isInInstance(world))
|
||||
{
|
||||
final StatsSet npcVars = npc.getVariables();
|
||||
final StatsSet npcParams = npc.getParameters();
|
||||
@@ -350,7 +351,7 @@ public final class OctavisWarzone extends AbstractInstance
|
||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (isOctavisInstance(world))
|
||||
if (isInInstance(world))
|
||||
{
|
||||
final int hpPer = npc.getCurrentHpPercent();
|
||||
|
||||
@@ -421,7 +422,7 @@ public final class OctavisWarzone extends AbstractInstance
|
||||
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (isOctavisInstance(world))
|
||||
if (isInInstance(world))
|
||||
{
|
||||
if (CommonUtil.contains(OCTAVIS_STAGE_1, npc.getId()))
|
||||
{
|
||||
@@ -463,7 +464,7 @@ public final class OctavisWarzone extends AbstractInstance
|
||||
@Override
|
||||
public void onInstanceCreated(Instance instance, L2PcInstance player)
|
||||
{
|
||||
if ((player != null) && isOctavisInstance(instance))
|
||||
if ((player != null) && isInInstance(instance))
|
||||
{
|
||||
showHtmlFile(player, (instance.getTemplateId() == TEMPLATE_ID) ? "PartyEnterCommon.html" : "PartyEnterExtreme.html");
|
||||
}
|
||||
@@ -473,7 +474,7 @@ public final class OctavisWarzone extends AbstractInstance
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (isOctavisInstance(world))
|
||||
if (isInInstance(world))
|
||||
{
|
||||
if (CommonUtil.contains(GLADIATORS, npc.getId()))
|
||||
{
|
||||
@@ -490,7 +491,7 @@ public final class OctavisWarzone extends AbstractInstance
|
||||
public void onMoveFinished(L2Npc npc)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (isOctavisInstance(world))
|
||||
if (isInInstance(world))
|
||||
{
|
||||
world.openCloseDoor(npc.getParameters().getInt("My_DoorName", -1), false);
|
||||
}
|
||||
@@ -512,7 +513,7 @@ public final class OctavisWarzone extends AbstractInstance
|
||||
final L2Npc npc = (L2Npc) event.getSeer();
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
|
||||
if (isOctavisInstance(world) && creature.isPlayer() && npc.isScriptValue(0))
|
||||
if (isInInstance(world) && creature.isPlayer() && npc.isScriptValue(0))
|
||||
{
|
||||
world.openCloseDoor(MAIN_DOOR_1, true);
|
||||
getTimers().addTimer("SECOND_DOOR_OPEN", 3000, npc, null);
|
||||
@@ -525,7 +526,7 @@ public final class OctavisWarzone extends AbstractInstance
|
||||
public String onEnterZone(L2Character character, L2ZoneType zone)
|
||||
{
|
||||
final Instance world = character.getInstanceWorld();
|
||||
if (character.isPlayer() && isOctavisInstance(world))
|
||||
if (character.isPlayer() && isInInstance(world))
|
||||
{
|
||||
if (world.getParameters().getBoolean("TELEPORT_ACTIVE", false))
|
||||
{
|
||||
@@ -535,11 +536,6 @@ public final class OctavisWarzone extends AbstractInstance
|
||||
return super.onEnterZone(character, zone);
|
||||
}
|
||||
|
||||
private boolean isOctavisInstance(Instance instance)
|
||||
{
|
||||
return ((instance != null) && ((instance.getTemplateId() == TEMPLATE_ID) || (instance.getTemplateId() == EXTREME_TEMPLATE_ID)));
|
||||
}
|
||||
|
||||
private boolean isExtremeMode(Instance instance)
|
||||
{
|
||||
return instance.getTemplateId() == EXTREME_TEMPLATE_ID;
|
||||
|
||||
@@ -71,6 +71,7 @@ public final class PailakaDevilsLegacy extends AbstractInstance
|
||||
|
||||
public PailakaDevilsLegacy()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addTalkId(SURVIVOR);
|
||||
addAttackId(POWDER_KEG, TREASURE_BOX, LEMATAN);
|
||||
addKillId(LEMATAN);
|
||||
|
||||
@@ -84,6 +84,7 @@ public class PailakaInjuredDragon extends AbstractInstance
|
||||
|
||||
public PailakaInjuredDragon()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addInstanceEnterId(TEMPLATE_ID);
|
||||
addStartNpc(KETRA_ORC_SHAMAN);
|
||||
addKillId(ANTELOPE1, ANTELOPE2, ANTELOPE3, GENERAL, GREAT_MAGUS, PROPHET, ELITE_GUARD, COMMANDER, OFFICER, RECRUIT, FOOTMAN, WARRIOR, PROPHET_GUARD, HEAD_GUARD, SHAMAN, CHIEF_PRIEST, GRAND_PRIEST, LATANA);
|
||||
|
||||
@@ -96,6 +96,7 @@ public final class PailakaRuneCastle extends AbstractInstance
|
||||
|
||||
public PailakaRuneCastle()
|
||||
{
|
||||
super(MANAGERS.values().stream().mapToInt(Integer::valueOf).toArray());
|
||||
addFirstTalkId(VICTIMS);
|
||||
addTalkId(VICTIMS);
|
||||
addTalkId(MANAGERS.keySet());
|
||||
|
||||
@@ -52,6 +52,7 @@ public final class PailakaSongOfIceAndFire extends AbstractInstance
|
||||
|
||||
public PailakaSongOfIceAndFire()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(ADLER1);
|
||||
addTalkId(ADLER1);
|
||||
addAttackId(BOTTLE, BRAZIER);
|
||||
|
||||
@@ -110,6 +110,7 @@ public final class SSQDisciplesNecropolisPast extends AbstractInstance
|
||||
|
||||
public SSQDisciplesNecropolisPast()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addAttackId(SEAL_DEVICE);
|
||||
addFirstTalkId(SHUNAIMAN, LEON, DISCIPLES_GATEKEEPER);
|
||||
addKillId(LILIM_BUTCHER, LILIM_MAGUS, LILIM_KNIGHT_ERRANT, LILIM_KNIGHT, SHILENS_EVIL_THOUGHTS1, SHILENS_EVIL_THOUGHTS2, LILIM_SLAYER, LILIM_GREAT_MAGUS, LILIM_GUARD_KNIGHT);
|
||||
|
||||
@@ -40,6 +40,7 @@ public final class SSQElcadiasTent extends AbstractInstance
|
||||
|
||||
public SSQElcadiasTent()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addFirstTalkId(GRUFF_LOOKING_MAN, ELCADIA);
|
||||
addStartNpc(GRUFF_LOOKING_MAN, ELCADIA);
|
||||
addTalkId(GRUFF_LOOKING_MAN, ELCADIA);
|
||||
|
||||
@@ -35,6 +35,7 @@ public final class SSQHideoutOfTheDawn extends AbstractInstance
|
||||
|
||||
public SSQHideoutOfTheDawn()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(WOOD);
|
||||
addTalkId(WOOD, JAINA);
|
||||
}
|
||||
|
||||
@@ -56,6 +56,7 @@ public final class SSQLibraryOfSages extends AbstractInstance
|
||||
|
||||
public SSQLibraryOfSages()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addFirstTalkId(SOPHIA2, ELCADIA_INSTANCE, PILE_OF_BOOKS1, PILE_OF_BOOKS2, PILE_OF_BOOKS3, PILE_OF_BOOKS4, PILE_OF_BOOKS5);
|
||||
addStartNpc(SOPHIA1, SOPHIA2, SOPHIA3);
|
||||
addTalkId(SOPHIA1, SOPHIA2, SOPHIA3);
|
||||
|
||||
@@ -72,6 +72,7 @@ public final class SSQMonasteryOfSilence extends AbstractInstance
|
||||
|
||||
public SSQMonasteryOfSilence()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addFirstTalkId(TELEPORT_CONTROL_DEVICE1, TELEPORT_CONTROL_DEVICE2, TELEPORT_CONTROL_DEVICE3, TELEPORT_CONTROL_DEVICE4, ERIS_EVIL_THOUGHTS);
|
||||
addStartNpc(ODD_GLOBE, TELEPORT_CONTROL_DEVICE1, TELEPORT_CONTROL_DEVICE2, TELEPORT_CONTROL_DEVICE3, TELEPORT_CONTROL_DEVICE4, ERIS_EVIL_THOUGHTS);
|
||||
addTalkId(ODD_GLOBE, ERIS_EVIL_THOUGHTS, RELIC_GUARDIAN, RELIC_WATCHER1, RELIC_WATCHER2, RELIC_WATCHER3, RELIC_WATCHER4, TELEPORT_CONTROL_DEVICE1, TELEPORT_CONTROL_DEVICE2, TELEPORT_CONTROL_DEVICE3, TELEPORT_CONTROL_DEVICE4, ERIS_EVIL_THOUGHTS);
|
||||
|
||||
@@ -67,6 +67,7 @@ public final class SSQSanctumOftheLordsOfDawn extends AbstractInstance
|
||||
|
||||
public SSQSanctumOftheLordsOfDawn()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(LIGHT_OF_DAWN);
|
||||
addTalkId(LIGHT_OF_DAWN, IDENTITY_CONFIRM_DEVICE, PASSWORD_ENTRY_DEVICE, DARKNESS_OF_DAWN, SHELF);
|
||||
addAggroRangeEnterId(GUARDS_OF_THE_DAWN, GUARDS_OF_THE_DAWN_2, GUARDS_OF_THE_DAWN_3);
|
||||
|
||||
@@ -182,11 +182,12 @@ public final class Stage1 extends AbstractInstance implements IGameXmlReader
|
||||
// Zone
|
||||
private static final int VIDEO_ZONE = 60010;
|
||||
// Misc
|
||||
private static final int INSTANCEID = 110; // this is the client number
|
||||
private static final int TEMPLATE_ID = 110; // this is the client number
|
||||
private static final int MAX_DEVICESPAWNEDMOBCOUNT = 100; // prevent too much mob spawn
|
||||
|
||||
public Stage1()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
load();
|
||||
addStartNpc(ALENOS, TELEPORT);
|
||||
addTalkId(ALENOS, TELEPORT);
|
||||
@@ -198,7 +199,7 @@ public final class Stage1 extends AbstractInstance implements IGameXmlReader
|
||||
addTrapActionId(i);
|
||||
}
|
||||
addEnterZoneId(VIDEO_ZONE);
|
||||
addInstanceCreatedId(INSTANCEID);
|
||||
addInstanceCreatedId(TEMPLATE_ID);
|
||||
addDespawnId(SPAWN_DEVICE);
|
||||
}
|
||||
|
||||
@@ -648,7 +649,7 @@ public final class Stage1 extends AbstractInstance implements IGameXmlReader
|
||||
final int state = GraciaSeedsManager.getInstance().getSoDState();
|
||||
if (state == 1)
|
||||
{
|
||||
enterInstance(player, npc, INSTANCEID);
|
||||
enterInstance(player, npc, TEMPLATE_ID);
|
||||
}
|
||||
else if (state == 2)
|
||||
{
|
||||
|
||||
@@ -90,6 +90,7 @@ public final class TaintedDimension extends AbstractInstance
|
||||
|
||||
public TaintedDimension()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addSpawnId(CORPSES);
|
||||
addSpawnId(MYSTERIOUS_PRIEST, HUMAN_1, HUMAN_2, HUMAN_3, HUMAN_4, MONSTER_1, MONSTER_2);
|
||||
addEventReceivedId(WARD, MYSTERIOUS_PRIEST);
|
||||
@@ -99,7 +100,7 @@ public final class TaintedDimension extends AbstractInstance
|
||||
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isTainedDimensionInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
@@ -208,7 +209,7 @@ public final class TaintedDimension extends AbstractInstance
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isTainedDimensionInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
@@ -267,7 +268,7 @@ public final class TaintedDimension extends AbstractInstance
|
||||
public String onEventReceived(String event, L2Npc sender, L2Npc receiver, L2Object reference)
|
||||
{
|
||||
final Instance instance = receiver.getInstanceWorld();
|
||||
if (isTainedDimensionInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (receiver.getId())
|
||||
{
|
||||
@@ -309,11 +310,6 @@ public final class TaintedDimension extends AbstractInstance
|
||||
return super.onEventReceived(event, sender, receiver, reference);
|
||||
}
|
||||
|
||||
private boolean isTainedDimensionInstance(Instance instance)
|
||||
{
|
||||
return ((instance != null) && (instance.getTemplateId() == TEMPLATE_ID));
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new TaintedDimension();
|
||||
|
||||
@@ -53,6 +53,7 @@ public final class TalkingIslandPast extends AbstractInstance
|
||||
|
||||
public TalkingIslandPast()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addTalkId(DARIN, ROXXY, MYSTERIOUS_DARK_KNIGHT);
|
||||
addFirstTalkId(DARIN, ROXXY, MYSTERIOUS_DARK_KNIGHT);
|
||||
addExitZoneId(TALKING_ISLAND_ZONE);
|
||||
|
||||
@@ -53,6 +53,7 @@ public final class TautiWarzone extends AbstractInstance
|
||||
|
||||
public TautiWarzone()
|
||||
{
|
||||
super(TEMPLATE_ID, EXTREME_TEMPLATE_ID);
|
||||
addTalkId(FINARIA, TELEPORTER);
|
||||
addFirstTalkId(FINARIA, TELEPORTER);
|
||||
addAttackId(TAUTI_COMMON, TAUTI_EXTREME);
|
||||
|
||||
@@ -85,6 +85,7 @@ public final class TeredorWarzone extends AbstractInstance
|
||||
|
||||
public TeredorWarzone()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(FILAUR);
|
||||
addTalkId(FILAUR);
|
||||
addSpawnId(BEETLE, POS_CHECKER, EGG_2, FAKE_TEREDOR, TEREDOR);
|
||||
@@ -99,7 +100,7 @@ public final class TeredorWarzone extends AbstractInstance
|
||||
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isTeredorInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
final StatsSet npcVars = npc.getVariables();
|
||||
final StatsSet npcParams = npc.getParameters();
|
||||
@@ -192,7 +193,7 @@ public final class TeredorWarzone extends AbstractInstance
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isTeredorInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
final StatsSet npcParams = npc.getParameters();
|
||||
|
||||
@@ -239,7 +240,7 @@ public final class TeredorWarzone extends AbstractInstance
|
||||
final L2Npc npc = (L2Npc) event.getSeer();
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
|
||||
if (isTeredorInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
final StatsSet npcParams = npc.getParameters();
|
||||
|
||||
@@ -330,7 +331,7 @@ public final class TeredorWarzone extends AbstractInstance
|
||||
public String onEventReceived(String eventName, L2Npc sender, L2Npc npc, L2Object reference)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isTeredorInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
@@ -407,7 +408,7 @@ public final class TeredorWarzone extends AbstractInstance
|
||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon, Skill skill)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isTeredorInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
@@ -574,7 +575,7 @@ public final class TeredorWarzone extends AbstractInstance
|
||||
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isTeredorInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
@@ -602,7 +603,7 @@ public final class TeredorWarzone extends AbstractInstance
|
||||
public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
|
||||
{
|
||||
final Instance instance = npc.getInstanceWorld();
|
||||
if (isTeredorInstance(instance))
|
||||
if (isInInstance(instance))
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
@@ -616,11 +617,6 @@ public final class TeredorWarzone extends AbstractInstance
|
||||
return super.onSpellFinished(npc, player, skill);
|
||||
}
|
||||
|
||||
private boolean isTeredorInstance(Instance instance)
|
||||
{
|
||||
return ((instance != null) && (instance.getTemplateId() == TEMPLATE_ID));
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new TeredorWarzone();
|
||||
|
||||
Reference in New Issue
Block a user