diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/TimedHuntingZoneData.xml b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/TimedHuntingZoneData.xml
index 7423e4adc7..d92f7ca399 100644
--- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/TimedHuntingZoneData.xml
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/TimedHuntingZoneData.xml
@@ -45,12 +45,11 @@
999
true
-
+ 36000
+ 46800
3600
3600
10000
@@ -59,9 +58,9 @@
125277,70262,-4408
- 3600 1 hour
- 36000 10 hours
- 46800 13 hours
+ 3600
+ 36000
+ 46800
3600
3600
10000
@@ -70,9 +69,9 @@
148724,-22366,-3436
- 3600 1 hour
- 36000 10 hours
- 46800 13 hours
+ 3600
+ 36000
+ 46800
3600
3600
10000
@@ -81,9 +80,9 @@
167965,28800,-3606
- 3600 1 hour
- 36000 10 hours
- 46800 13 hours
+ 3600
+ 36000
+ 46800
3600
3600
10000
@@ -92,9 +91,9 @@
99797,110524,-3702
- 3600 1 hour
- 36000 10 hours
- 46800 13 hours
+ 3600
+ 36000
+ 46800
3600
3600
10000
@@ -103,14 +102,13 @@
-50416,145363,-2825
- 3600 1 hour
- 36000 10 hours
- 46800 13 hours
+ 3600
+ 36000
+ 46800
3600
3600
10000
85
999
- -->
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/BlazingSwamp.xml b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/BlazingSwamp.xml
new file mode 100644
index 0000000000..88a1f16f25
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/BlazingSwamp.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/DragonValley.xml b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/DragonValley.xml
new file mode 100644
index 0000000000..7666ea7b25
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/DragonValley.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/EnchantedValley.xml b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/EnchantedValley.xml
new file mode 100644
index 0000000000..32cf8556cc
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/EnchantedValley.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/SeaOfSpores.xml b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/SeaOfSpores.xml
new file mode 100644
index 0000000000..49504530e7
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/SeaOfSpores.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/SelMahumBase.xml b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/SelMahumBase.xml
new file mode 100644
index 0000000000..68df3b7e41
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/SelMahumBase.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/WarTornPlains.xml b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/WarTornPlains.xml
new file mode 100644
index 0000000000..6d8562a099
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/instances/Transcendent/WarTornPlains.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34120-finished.html b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34120-finished.html
new file mode 100644
index 0000000000..86d084d9f7
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34120-finished.html
@@ -0,0 +1,4 @@
+
Kate:
+All done here?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34120.html b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34120.html
new file mode 100644
index 0000000000..f2db139c8f
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34120.html
@@ -0,0 +1,6 @@
+Kate:
+I will help you gain incredible strength.
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34121-finished.html b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34121-finished.html
new file mode 100644
index 0000000000..488a15c17f
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34121-finished.html
@@ -0,0 +1,4 @@
+Deekhin:
+All done here?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34121.html b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34121.html
new file mode 100644
index 0000000000..dbdd9de078
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34121.html
@@ -0,0 +1,6 @@
+Deekhin:
+I will help you gain incredible strength.
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34122-finished.html b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34122-finished.html
new file mode 100644
index 0000000000..99ff4653d2
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34122-finished.html
@@ -0,0 +1,4 @@
+Bunch:
+All done here?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34122.html b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34122.html
new file mode 100644
index 0000000000..860877627b
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34122.html
@@ -0,0 +1,6 @@
+Bunch:
+I will help you gain incredible strength.
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34123-finished.html b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34123-finished.html
new file mode 100644
index 0000000000..b565c830fa
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34123-finished.html
@@ -0,0 +1,4 @@
+Ayan:
+All done here?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34123.html b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34123.html
new file mode 100644
index 0000000000..004b8f447d
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34123.html
@@ -0,0 +1,6 @@
+Ayan:
+I will help you gain incredible strength.
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34124-finished.html b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34124-finished.html
new file mode 100644
index 0000000000..5356e39d4a
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34124-finished.html
@@ -0,0 +1,4 @@
+Joon:
+All done here?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34124.html b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34124.html
new file mode 100644
index 0000000000..0df695db52
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34124.html
@@ -0,0 +1,6 @@
+Joon:
+I will help you gain incredible strength.
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34125-finished.html b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34125-finished.html
new file mode 100644
index 0000000000..6bcf3f445e
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34125-finished.html
@@ -0,0 +1,4 @@
+Panji:
+All done here?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34125.html b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34125.html
new file mode 100644
index 0000000000..0b4c28a85a
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/34125.html
@@ -0,0 +1,6 @@
+Panji:
+I will help you gain incredible strength.
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/TranscendentZone.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/TranscendentZone.java
new file mode 100644
index 0000000000..4d79130328
--- /dev/null
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/instances/TranscendentZone/TranscendentZone.java
@@ -0,0 +1,181 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package instances.TranscendentZone;
+
+import java.util.concurrent.ScheduledFuture;
+
+import org.l2jmobius.commons.concurrent.ThreadPool;
+import org.l2jmobius.commons.util.Rnd;
+import org.l2jmobius.gameserver.enums.TeleportWhereType;
+import org.l2jmobius.gameserver.model.WorldObject;
+import org.l2jmobius.gameserver.model.actor.Npc;
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.holders.SkillHolder;
+import org.l2jmobius.gameserver.model.instancezone.Instance;
+import org.l2jmobius.gameserver.network.NpcStringId;
+import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
+import org.l2jmobius.gameserver.network.serverpackets.huntingzones.TimedHuntingZoneExit;
+
+import instances.AbstractInstance;
+
+/**
+ * Written by Berezkin Nikolay, on 21.04.2021
+ */
+public class TranscendentZone extends AbstractInstance
+{
+ // NPCs
+ private static final int JOON = 34124;
+ private static final int KATE = 34120;
+ private static final int DEEKHIN = 34121;
+ private static final int BUNCH = 34122;
+ private static final int AYAN = 34123;
+ private static final int PANJI = 34125;
+ // Skill
+ private static final int BUFF = 45197;
+ // Misc
+ private static final int[] TEMPLATES =
+ {
+ 1101, // Sea of Spores
+ 1102, // Enchanted Valley
+ 1103, // Blazing Swamp
+ 1104, // War-Torn Plains
+ 1106, // Dragon Valley
+ 1107, // Sel Mahum Base
+ };
+
+ public TranscendentZone()
+ {
+ super(TEMPLATES);
+ addFirstTalkId(JOON, KATE, DEEKHIN, BUNCH, AYAN, PANJI);
+ addInstanceLeaveId(TEMPLATES);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ if (event.startsWith("ENTER"))
+ {
+ enterInstance(player, npc, 1000 + Integer.parseInt(event.split(" ")[1]));
+ }
+ else if (event.startsWith("FINISH"))
+ {
+ player.teleToLocation(TeleportWhereType.TOWN, null);
+ finishInstance(player);
+ }
+ return null;
+ }
+
+ @Override
+ public void onInstanceLeave(PlayerInstance player, Instance instance)
+ {
+ if (instance.getParameters().getBoolean("TranscendentZoneTaskFinished", false))
+ {
+ instance.setParameter("TranscendentZoneTaskFinished", false);
+ }
+ player.sendPacket(new ExSendUIEvent(player, true, false, 600, 0, NpcStringId.TIME_LEFT));
+ player.sendPacket(TimedHuntingZoneExit.STATIC_PACKET);
+
+ ThreadPool.schedule(() ->
+ {
+ if (player.getInstanceWorld() != instance)
+ {
+ finishInstance(player);
+ }
+ }, 300000);
+
+ player.getEffectList().stopSkillEffects(true, BUFF);
+ instance.setParameter("PlayerIsOut", true);
+ }
+
+ @Override
+ public String onFirstTalk(Npc npc, PlayerInstance player)
+ {
+ if (player.getInstanceWorld().getParameters().getBoolean("TranscendentZoneTaskFinished", false))
+ {
+ return super.onFirstTalk(npc, player) + "-finished.html";
+ }
+
+ if (!player.getInstanceWorld().getParameters().getBoolean("PlayerEnter", false))
+ {
+ player.getInstanceWorld().setDuration(10);
+ player.getInstanceWorld().setParameter("PlayerEnter", true);
+ startEvent(player);
+ }
+
+ npc.setTarget(player);
+ if (!player.getEffectList().isAffectedBySkill(BUFF))
+ {
+ npc.doCast(new SkillHolder(BUFF, 1).getSkill());
+ }
+
+ return super.onFirstTalk(npc, player);
+ }
+
+ @Override
+ protected void onEnter(PlayerInstance player, Instance instance, boolean firstEnter)
+ {
+ super.onEnter(player, instance, firstEnter);
+ instance.setParameter("PlayerIsOut", false);
+ if (!firstEnter)
+ {
+ startEvent(player);
+ }
+ }
+
+ private void startEvent(PlayerInstance player)
+ {
+ if (!player.getInstanceWorld().getParameters().getBoolean("TranscendentZoneTaskFinished", false))
+ {
+ final Instance instance = player.getInstanceWorld();
+ player.sendPacket(new ExSendUIEvent(player, false, false, Math.min(600, (int) (instance.getRemainingTime() / 1000)), 0, NpcStringId.TIME_LEFT));
+
+ final ScheduledFuture> spawnTask = ThreadPool.scheduleAtFixedRate(() ->
+ {
+ if (!instance.getParameters().getBoolean("PlayerIsOut", false))
+ {
+ if (Rnd.get(5) == 0)
+ {
+ player.getInstanceWorld().spawnGroup("treasures");
+ }
+ else
+ {
+ if (Rnd.get(3) == 0)
+ {
+ player.getInstanceWorld().spawnGroup("treasures");
+ }
+ player.getInstanceWorld().spawnGroup("monsters");
+ }
+ }
+ }, 0, 30000);
+
+ ThreadPool.schedule(() ->
+ {
+ instance.getNpcs().stream().filter(WorldObject::isAttackable).forEach(Npc::deleteMe);
+ instance.getParameters().set("TranscendentZoneTaskFinished", true);
+ if (spawnTask != null)
+ {
+ spawnTask.cancel(false);
+ }
+ }, instance.getRemainingTime() - 30000);
+ }
+ }
+
+ public static void main(String[] args)
+ {
+ new TranscendentZone();
+ }
+}
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java
index 392db9259a..8768d37d75 100644
--- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java
@@ -19,6 +19,8 @@ package org.l2jmobius.gameserver.network.clientpackets.huntingzones;
import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData;
+import org.l2jmobius.gameserver.instancemanager.InstanceManager;
+import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
@@ -99,6 +101,12 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
return;
}
+ if ((_zoneId >= 101) && (_zoneId <= 107) && (InstanceManager.getInstance().getInstanceTime(player, 1000 + _zoneId) > Chronos.currentTimeMillis()))
+ {
+ player.sendMessage("This transcendent instance has not reset yet.");
+ return;
+ }
+
final long currentTime = Chronos.currentTimeMillis();
long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId);
final long lastEntryTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_ENTRY + _zoneId, 0);
@@ -132,7 +140,15 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
}
player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, endTime - currentTime);
- player.teleToLocation(holder.getEnterLocation());
+
+ if ((_zoneId < 101) || (_zoneId > 107))
+ {
+ player.teleToLocation(holder.getEnterLocation());
+ }
+ else // Transcendent zones.
+ {
+ QuestManager.getInstance().getQuest("TranscendentZone").notifyEvent("ENTER " + _zoneId, null, player);
+ }
}
else
{
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/readme.txt b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/readme.txt
index 4d46516a89..750d16828e 100644
--- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/readme.txt
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/readme.txt
@@ -118,9 +118,10 @@ Death Knight: https://eu.4game.com/patchnotes/lineage2essence/196/
Fluffy Reinforcement: https://eu.4game.com/patchnotes/lineage2essence/204/
-Teleport favorites system
+-New pet system
Dwelling of Spirits: https://eu.4game.com/patchnotes/lineage2essence/261/
--New pet system
+-Transcendent hunting zones
Customs:
-Newbie Helper NPC location info
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/TimedHuntingZoneData.xml b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/TimedHuntingZoneData.xml
index 7423e4adc7..d92f7ca399 100644
--- a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/TimedHuntingZoneData.xml
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/TimedHuntingZoneData.xml
@@ -45,12 +45,11 @@
999
true
-
+ 36000
+ 46800
3600
3600
10000
@@ -59,9 +58,9 @@
125277,70262,-4408
- 3600 1 hour
- 36000 10 hours
- 46800 13 hours
+ 3600
+ 36000
+ 46800
3600
3600
10000
@@ -70,9 +69,9 @@
148724,-22366,-3436
- 3600 1 hour
- 36000 10 hours
- 46800 13 hours
+ 3600
+ 36000
+ 46800
3600
3600
10000
@@ -81,9 +80,9 @@
167965,28800,-3606
- 3600 1 hour
- 36000 10 hours
- 46800 13 hours
+ 3600
+ 36000
+ 46800
3600
3600
10000
@@ -92,9 +91,9 @@
99797,110524,-3702
- 3600 1 hour
- 36000 10 hours
- 46800 13 hours
+ 3600
+ 36000
+ 46800
3600
3600
10000
@@ -103,14 +102,13 @@
-50416,145363,-2825
- 3600 1 hour
- 36000 10 hours
- 46800 13 hours
+ 3600
+ 36000
+ 46800
3600
3600
10000
85
999
- -->
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/BlazingSwamp.xml b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/BlazingSwamp.xml
new file mode 100644
index 0000000000..88a1f16f25
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/BlazingSwamp.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/DragonValley.xml b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/DragonValley.xml
new file mode 100644
index 0000000000..7666ea7b25
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/DragonValley.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/EnchantedValley.xml b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/EnchantedValley.xml
new file mode 100644
index 0000000000..32cf8556cc
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/EnchantedValley.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/SeaOfSpores.xml b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/SeaOfSpores.xml
new file mode 100644
index 0000000000..49504530e7
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/SeaOfSpores.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/SelMahumBase.xml b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/SelMahumBase.xml
new file mode 100644
index 0000000000..68df3b7e41
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/SelMahumBase.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/WarTornPlains.xml b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/WarTornPlains.xml
new file mode 100644
index 0000000000..6d8562a099
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/instances/Transcendent/WarTornPlains.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34120-finished.html b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34120-finished.html
new file mode 100644
index 0000000000..86d084d9f7
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34120-finished.html
@@ -0,0 +1,4 @@
+Kate:
+All done here?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34120.html b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34120.html
new file mode 100644
index 0000000000..f2db139c8f
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34120.html
@@ -0,0 +1,6 @@
+Kate:
+I will help you gain incredible strength.
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34121-finished.html b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34121-finished.html
new file mode 100644
index 0000000000..488a15c17f
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34121-finished.html
@@ -0,0 +1,4 @@
+Deekhin:
+All done here?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34121.html b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34121.html
new file mode 100644
index 0000000000..dbdd9de078
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34121.html
@@ -0,0 +1,6 @@
+Deekhin:
+I will help you gain incredible strength.
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34122-finished.html b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34122-finished.html
new file mode 100644
index 0000000000..99ff4653d2
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34122-finished.html
@@ -0,0 +1,4 @@
+Bunch:
+All done here?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34122.html b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34122.html
new file mode 100644
index 0000000000..860877627b
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34122.html
@@ -0,0 +1,6 @@
+Bunch:
+I will help you gain incredible strength.
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34123-finished.html b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34123-finished.html
new file mode 100644
index 0000000000..b565c830fa
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34123-finished.html
@@ -0,0 +1,4 @@
+Ayan:
+All done here?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34123.html b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34123.html
new file mode 100644
index 0000000000..004b8f447d
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34123.html
@@ -0,0 +1,6 @@
+Ayan:
+I will help you gain incredible strength.
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34124-finished.html b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34124-finished.html
new file mode 100644
index 0000000000..5356e39d4a
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34124-finished.html
@@ -0,0 +1,4 @@
+Joon:
+All done here?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34124.html b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34124.html
new file mode 100644
index 0000000000..0df695db52
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34124.html
@@ -0,0 +1,6 @@
+Joon:
+I will help you gain incredible strength.
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34125-finished.html b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34125-finished.html
new file mode 100644
index 0000000000..6bcf3f445e
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34125-finished.html
@@ -0,0 +1,4 @@
+Panji:
+All done here?
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34125.html b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34125.html
new file mode 100644
index 0000000000..0b4c28a85a
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/34125.html
@@ -0,0 +1,6 @@
+Panji:
+I will help you gain incredible strength.
+
\ No newline at end of file
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/TranscendentZone.java b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/TranscendentZone.java
new file mode 100644
index 0000000000..4d79130328
--- /dev/null
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/instances/TranscendentZone/TranscendentZone.java
@@ -0,0 +1,181 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package instances.TranscendentZone;
+
+import java.util.concurrent.ScheduledFuture;
+
+import org.l2jmobius.commons.concurrent.ThreadPool;
+import org.l2jmobius.commons.util.Rnd;
+import org.l2jmobius.gameserver.enums.TeleportWhereType;
+import org.l2jmobius.gameserver.model.WorldObject;
+import org.l2jmobius.gameserver.model.actor.Npc;
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.holders.SkillHolder;
+import org.l2jmobius.gameserver.model.instancezone.Instance;
+import org.l2jmobius.gameserver.network.NpcStringId;
+import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
+import org.l2jmobius.gameserver.network.serverpackets.huntingzones.TimedHuntingZoneExit;
+
+import instances.AbstractInstance;
+
+/**
+ * Written by Berezkin Nikolay, on 21.04.2021
+ */
+public class TranscendentZone extends AbstractInstance
+{
+ // NPCs
+ private static final int JOON = 34124;
+ private static final int KATE = 34120;
+ private static final int DEEKHIN = 34121;
+ private static final int BUNCH = 34122;
+ private static final int AYAN = 34123;
+ private static final int PANJI = 34125;
+ // Skill
+ private static final int BUFF = 45197;
+ // Misc
+ private static final int[] TEMPLATES =
+ {
+ 1101, // Sea of Spores
+ 1102, // Enchanted Valley
+ 1103, // Blazing Swamp
+ 1104, // War-Torn Plains
+ 1106, // Dragon Valley
+ 1107, // Sel Mahum Base
+ };
+
+ public TranscendentZone()
+ {
+ super(TEMPLATES);
+ addFirstTalkId(JOON, KATE, DEEKHIN, BUNCH, AYAN, PANJI);
+ addInstanceLeaveId(TEMPLATES);
+ }
+
+ @Override
+ public String onAdvEvent(String event, Npc npc, PlayerInstance player)
+ {
+ if (event.startsWith("ENTER"))
+ {
+ enterInstance(player, npc, 1000 + Integer.parseInt(event.split(" ")[1]));
+ }
+ else if (event.startsWith("FINISH"))
+ {
+ player.teleToLocation(TeleportWhereType.TOWN, null);
+ finishInstance(player);
+ }
+ return null;
+ }
+
+ @Override
+ public void onInstanceLeave(PlayerInstance player, Instance instance)
+ {
+ if (instance.getParameters().getBoolean("TranscendentZoneTaskFinished", false))
+ {
+ instance.setParameter("TranscendentZoneTaskFinished", false);
+ }
+ player.sendPacket(new ExSendUIEvent(player, true, false, 600, 0, NpcStringId.TIME_LEFT));
+ player.sendPacket(TimedHuntingZoneExit.STATIC_PACKET);
+
+ ThreadPool.schedule(() ->
+ {
+ if (player.getInstanceWorld() != instance)
+ {
+ finishInstance(player);
+ }
+ }, 300000);
+
+ player.getEffectList().stopSkillEffects(true, BUFF);
+ instance.setParameter("PlayerIsOut", true);
+ }
+
+ @Override
+ public String onFirstTalk(Npc npc, PlayerInstance player)
+ {
+ if (player.getInstanceWorld().getParameters().getBoolean("TranscendentZoneTaskFinished", false))
+ {
+ return super.onFirstTalk(npc, player) + "-finished.html";
+ }
+
+ if (!player.getInstanceWorld().getParameters().getBoolean("PlayerEnter", false))
+ {
+ player.getInstanceWorld().setDuration(10);
+ player.getInstanceWorld().setParameter("PlayerEnter", true);
+ startEvent(player);
+ }
+
+ npc.setTarget(player);
+ if (!player.getEffectList().isAffectedBySkill(BUFF))
+ {
+ npc.doCast(new SkillHolder(BUFF, 1).getSkill());
+ }
+
+ return super.onFirstTalk(npc, player);
+ }
+
+ @Override
+ protected void onEnter(PlayerInstance player, Instance instance, boolean firstEnter)
+ {
+ super.onEnter(player, instance, firstEnter);
+ instance.setParameter("PlayerIsOut", false);
+ if (!firstEnter)
+ {
+ startEvent(player);
+ }
+ }
+
+ private void startEvent(PlayerInstance player)
+ {
+ if (!player.getInstanceWorld().getParameters().getBoolean("TranscendentZoneTaskFinished", false))
+ {
+ final Instance instance = player.getInstanceWorld();
+ player.sendPacket(new ExSendUIEvent(player, false, false, Math.min(600, (int) (instance.getRemainingTime() / 1000)), 0, NpcStringId.TIME_LEFT));
+
+ final ScheduledFuture> spawnTask = ThreadPool.scheduleAtFixedRate(() ->
+ {
+ if (!instance.getParameters().getBoolean("PlayerIsOut", false))
+ {
+ if (Rnd.get(5) == 0)
+ {
+ player.getInstanceWorld().spawnGroup("treasures");
+ }
+ else
+ {
+ if (Rnd.get(3) == 0)
+ {
+ player.getInstanceWorld().spawnGroup("treasures");
+ }
+ player.getInstanceWorld().spawnGroup("monsters");
+ }
+ }
+ }, 0, 30000);
+
+ ThreadPool.schedule(() ->
+ {
+ instance.getNpcs().stream().filter(WorldObject::isAttackable).forEach(Npc::deleteMe);
+ instance.getParameters().set("TranscendentZoneTaskFinished", true);
+ if (spawnTask != null)
+ {
+ spawnTask.cancel(false);
+ }
+ }, instance.getRemainingTime() - 30000);
+ }
+ }
+
+ public static void main(String[] args)
+ {
+ new TranscendentZone();
+ }
+}
diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java
index 392db9259a..8768d37d75 100644
--- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java
+++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java
@@ -19,6 +19,8 @@ package org.l2jmobius.gameserver.network.clientpackets.huntingzones;
import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData;
+import org.l2jmobius.gameserver.instancemanager.InstanceManager;
+import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
@@ -99,6 +101,12 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
return;
}
+ if ((_zoneId >= 101) && (_zoneId <= 107) && (InstanceManager.getInstance().getInstanceTime(player, 1000 + _zoneId) > Chronos.currentTimeMillis()))
+ {
+ player.sendMessage("This transcendent instance has not reset yet.");
+ return;
+ }
+
final long currentTime = Chronos.currentTimeMillis();
long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId);
final long lastEntryTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_ENTRY + _zoneId, 0);
@@ -132,7 +140,15 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
}
player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, endTime - currentTime);
- player.teleToLocation(holder.getEnterLocation());
+
+ if ((_zoneId < 101) || (_zoneId > 107))
+ {
+ player.teleToLocation(holder.getEnterLocation());
+ }
+ else // Transcendent zones.
+ {
+ QuestManager.getInstance().getQuest("TranscendentZone").notifyEvent("ENTER " + _zoneId, null, player);
+ }
}
else
{
diff --git a/L2J_Mobius_Essence_5.0_Sylph/readme.txt b/L2J_Mobius_Essence_5.0_Sylph/readme.txt
index fea7e4141e..2b456d27c1 100644
--- a/L2J_Mobius_Essence_5.0_Sylph/readme.txt
+++ b/L2J_Mobius_Essence_5.0_Sylph/readme.txt
@@ -118,9 +118,10 @@ Death Knight: https://eu.4game.com/patchnotes/lineage2essence/196/
Fluffy Reinforcement: https://eu.4game.com/patchnotes/lineage2essence/204/
-Teleport favorites system
+-New pet system
Dwelling of Spirits: https://eu.4game.com/patchnotes/lineage2essence/261/
--New pet system
+-Transcendent hunting zones
Sylph: https://eu.4game.com/patchnotes/lineage2essence/281/
-Sylph creation support