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