Sync with L2jUnity (7db5b4f).

This commit is contained in:
MobiusDev
2016-12-04 21:28:20 +00:00
parent 9e1d3569f0
commit b9d3c99cf1
412 changed files with 13806 additions and 10065 deletions

View File

@@ -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

View File

@@ -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();

View File

@@ -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());

View File

@@ -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);

View File

@@ -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());

View File

@@ -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;

View File

@@ -38,6 +38,7 @@ public final class EvasHiddenSpace extends AbstractInstance
public EvasHiddenSpace()
{
super(TEMPLATE_ID);
addStartNpc(CERENAS);
addTalkId(CERENAS, EVAS_AVATAR);
addFirstTalkId(EVAS_AVATAR);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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))

View File

@@ -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());

View File

@@ -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();

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -37,6 +37,7 @@ public final class JiniaGuildHideout1 extends AbstractInstance
public JiniaGuildHideout1()
{
super(TEMPLATE_ID);
addStartNpc(RAFFORTY);
addTalkId(RAFFORTY);
}

View File

@@ -37,6 +37,7 @@ public final class JiniaGuildHideout2 extends AbstractInstance
public JiniaGuildHideout2()
{
super(TEMPLATE_ID);
addStartNpc(RAFFORTY);
addTalkId(RAFFORTY);
}

View File

@@ -37,6 +37,7 @@ public final class JiniaGuildHideout3 extends AbstractInstance
public JiniaGuildHideout3()
{
super(TEMPLATE_ID);
addStartNpc(RAFFORTY);
addTalkId(RAFFORTY);
}

View File

@@ -37,6 +37,7 @@ public final class JiniaGuildHideout4 extends AbstractInstance
public JiniaGuildHideout4()
{
super(TEMPLATE_ID);
addStartNpc(RAFFORTY);
addTalkId(RAFFORTY);
}

View File

@@ -40,6 +40,7 @@ public final class KaraphonHabitat extends AbstractInstance
public KaraphonHabitat()
{
super(TEMPLATE_ID);
addStartNpc(DOLKIN);
addFirstTalkId(DOLKIN_INSTANCE);
addTalkId(DOLKIN);

View File

@@ -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);

View File

@@ -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();

View File

@@ -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);

View File

@@ -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())

View File

@@ -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();

View File

@@ -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>

View File

@@ -53,6 +53,7 @@ public final class MithrilMine extends AbstractInstance
public MithrilMine()
{
super(TEMPLATE_ID);
addFirstTalkId(KEGOR);
addKillId(KEGOR, MITHRIL_MILLIPEDE);
addStartNpc(TARUN, KRUN);

View File

@@ -61,6 +61,7 @@ public final class MuseumDungeon extends AbstractInstance
public MuseumDungeon()
{
super(TEMPLATE_ID);
addStartNpc(PANTHEON);
addFirstTalkId(DESK);
addTalkId(PANTHEON, TOYRON);

View File

@@ -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();

View File

@@ -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>

View File

@@ -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>

View File

@@ -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();

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -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());

View File

@@ -52,6 +52,7 @@ public final class PailakaSongOfIceAndFire extends AbstractInstance
public PailakaSongOfIceAndFire()
{
super(TEMPLATE_ID);
addStartNpc(ADLER1);
addTalkId(ADLER1);
addAttackId(BOTTLE, BRAZIER);

View File

@@ -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);

View File

@@ -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);

View File

@@ -35,6 +35,7 @@ public final class SSQHideoutOfTheDawn extends AbstractInstance
public SSQHideoutOfTheDawn()
{
super(TEMPLATE_ID);
addStartNpc(WOOD);
addTalkId(WOOD, JAINA);
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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)
{

View File

@@ -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();

View File

@@ -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);

View File

@@ -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);

View File

@@ -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();