From 432f235dc5fd5194a3fbf82c2c281fb89a4cc665 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 25 May 2021 21:39:09 +0000 Subject: [PATCH] Improved support for instanced timed hunting zones. --- .../game/data/xsd/TimedHuntingZoneData.xsd | 1 + .../data/xml/TimedHuntingZoneData.java | 8 +++++++- .../model/actor/instance/PlayerInstance.java | 7 +++++++ .../model/holders/TimedHuntingZoneHolder.java | 9 ++++++++- .../huntingzones/ExTimedHuntingZoneEnter.java | 19 ++++++++++++++++++- .../game/data/xsd/TimedHuntingZoneData.xsd | 1 + .../data/xml/TimedHuntingZoneData.java | 8 +++++++- .../model/actor/instance/PlayerInstance.java | 7 +++++++ .../model/holders/TimedHuntingZoneHolder.java | 9 ++++++++- .../huntingzones/ExTimedHuntingZoneEnter.java | 19 ++++++++++++++++++- .../game/data/xsd/TimedHuntingZoneData.xsd | 1 + .../data/xml/TimedHuntingZoneData.java | 8 +++++++- .../model/actor/instance/PlayerInstance.java | 7 +++++++ .../model/holders/TimedHuntingZoneHolder.java | 9 ++++++++- .../huntingzones/ExTimedHuntingZoneEnter.java | 19 ++++++++++++++++++- .../game/data/xsd/TimedHuntingZoneData.xsd | 1 + .../data/xml/TimedHuntingZoneData.java | 8 +++++++- .../model/actor/instance/PlayerInstance.java | 7 +++++++ .../model/holders/TimedHuntingZoneHolder.java | 9 ++++++++- .../huntingzones/ExTimedHuntingZoneEnter.java | 19 ++++++++++++++++++- .../dist/game/data/TimedHuntingZoneData.xml | 6 ++++++ .../TranscendentZone/TranscendentZone.java | 2 +- .../game/data/xsd/TimedHuntingZoneData.xsd | 1 + .../data/xml/TimedHuntingZoneData.java | 8 +++++++- .../model/actor/instance/PlayerInstance.java | 7 +++++++ .../model/holders/TimedHuntingZoneHolder.java | 9 ++++++++- .../huntingzones/ExTimedHuntingZoneEnter.java | 7 ++++--- .../dist/game/data/TimedHuntingZoneData.xml | 6 ++++++ .../TranscendentZone/TranscendentZone.java | 2 +- .../game/data/xsd/TimedHuntingZoneData.xsd | 1 + .../data/xml/TimedHuntingZoneData.java | 8 +++++++- .../model/actor/instance/PlayerInstance.java | 7 +++++++ .../model/holders/TimedHuntingZoneHolder.java | 9 ++++++++- .../huntingzones/ExTimedHuntingZoneEnter.java | 7 ++++--- 34 files changed, 232 insertions(+), 24 deletions(-) diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/TimedHuntingZoneData.xsd b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/TimedHuntingZoneData.xsd index c5dd31a591..7c75375766 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/TimedHuntingZoneData.xsd +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/TimedHuntingZoneData.xsd @@ -15,6 +15,7 @@ + diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java index 3e8c396f59..e01aa5d46e 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java @@ -87,6 +87,7 @@ public class TimedHuntingZoneData implements IXmlReader int maxLevel = 999; int remainRefillTime = 3600; int refillTimeMax = 3600; + int instanceId = 0; boolean weekly = false; Location enterLocation = null; for (Node zoneNode = listNode.getFirstChild(); zoneNode != null; zoneNode = zoneNode.getNextSibling()) @@ -144,6 +145,11 @@ public class TimedHuntingZoneData implements IXmlReader refillTimeMax = Integer.parseInt(zoneNode.getTextContent()); break; } + case "instanceId": + { + refillTimeMax = Integer.parseInt(zoneNode.getTextContent()); + break; + } case "weekly": { weekly = Boolean.parseBoolean(zoneNode.getTextContent()); @@ -151,7 +157,7 @@ public class TimedHuntingZoneData implements IXmlReader } } } - _timedHuntingZoneData.put(id, new TimedHuntingZoneHolder(id, name, initialTime, maxAddedTime, resetDelay, entryItemId, entryFee, minLevel, maxLevel, remainRefillTime, refillTimeMax, weekly, enterLocation)); + _timedHuntingZoneData.put(id, new TimedHuntingZoneHolder(id, name, initialTime, maxAddedTime, resetDelay, entryItemId, entryFee, minLevel, maxLevel, remainRefillTime, refillTimeMax, instanceId, weekly, enterLocation)); } } } diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 7c319068c7..0e20809359 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -14292,6 +14292,13 @@ public class PlayerInstance extends Playable { return false; } + + final int instanceId = holder.getInstanceId(); + if (instanceId > 0) + { + return isInInstance() && (instanceId == getInstanceWorld().getTemplateId()); + } + return (holder.getMapX() == (((locX - World.WORLD_X_MIN) >> 15) + World.TILE_X_MIN)) && (holder.getMapY() == (((locY - World.WORLD_Y_MIN) >> 15) + World.TILE_Y_MIN)); } diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java index 8dc7e29393..b487e8d74b 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java @@ -35,12 +35,13 @@ public class TimedHuntingZoneHolder private final int _maxLevel; private final int _remainRefillTime; private final int _refillTimeMax; + private final int _instanceId; private final boolean _weekly; private final Location _enterLocation; private final int _mapX; private final int _mapY; - public TimedHuntingZoneHolder(int id, String name, int initialTime, int maximumAddedTime, int resetDelay, int entryItemId, int entryFee, int minLevel, int maxLevel, int remainRefillTime, int refillTimeMax, boolean weekly, Location enterLocation) + public TimedHuntingZoneHolder(int id, String name, int initialTime, int maximumAddedTime, int resetDelay, int entryItemId, int entryFee, int minLevel, int maxLevel, int remainRefillTime, int refillTimeMax, int instanceId, boolean weekly, Location enterLocation) { _id = id; _name = name; @@ -53,6 +54,7 @@ public class TimedHuntingZoneHolder _maxLevel = maxLevel; _remainRefillTime = remainRefillTime; _refillTimeMax = refillTimeMax; + _instanceId = instanceId; _weekly = weekly; _enterLocation = enterLocation; _mapX = ((_enterLocation.getX() - World.WORLD_X_MIN) >> 15) + World.TILE_X_MIN; @@ -114,6 +116,11 @@ public class TimedHuntingZoneHolder return _refillTimeMax; } + public int getInstanceId() + { + return _instanceId; + } + public boolean isWeekly() { return _weekly; diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java index c06b418436..c8e62fd7e0 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java +++ b/L2J_Mobius_7.0_PreludeOfWar/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,13 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket return; } + final int instanceId = holder.getInstanceId(); + if ((instanceId > 0) && (InstanceManager.getInstance().getInstanceTime(player, instanceId) > 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 +141,15 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket } player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, endTime - currentTime); - player.teleToLocation(holder.getEnterLocation()); + + if (instanceId == 0) + { + player.teleToLocation(holder.getEnterLocation()); + } + else // Transcendent zones. + { + QuestManager.getInstance().getQuest("TranscendentZone").notifyEvent("ENTER " + instanceId, null, player); + } } else { diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/xsd/TimedHuntingZoneData.xsd b/L2J_Mobius_8.0_Homunculus/dist/game/data/xsd/TimedHuntingZoneData.xsd index c5dd31a591..7c75375766 100644 --- a/L2J_Mobius_8.0_Homunculus/dist/game/data/xsd/TimedHuntingZoneData.xsd +++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/xsd/TimedHuntingZoneData.xsd @@ -15,6 +15,7 @@ + diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java index 3e8c396f59..e01aa5d46e 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java @@ -87,6 +87,7 @@ public class TimedHuntingZoneData implements IXmlReader int maxLevel = 999; int remainRefillTime = 3600; int refillTimeMax = 3600; + int instanceId = 0; boolean weekly = false; Location enterLocation = null; for (Node zoneNode = listNode.getFirstChild(); zoneNode != null; zoneNode = zoneNode.getNextSibling()) @@ -144,6 +145,11 @@ public class TimedHuntingZoneData implements IXmlReader refillTimeMax = Integer.parseInt(zoneNode.getTextContent()); break; } + case "instanceId": + { + refillTimeMax = Integer.parseInt(zoneNode.getTextContent()); + break; + } case "weekly": { weekly = Boolean.parseBoolean(zoneNode.getTextContent()); @@ -151,7 +157,7 @@ public class TimedHuntingZoneData implements IXmlReader } } } - _timedHuntingZoneData.put(id, new TimedHuntingZoneHolder(id, name, initialTime, maxAddedTime, resetDelay, entryItemId, entryFee, minLevel, maxLevel, remainRefillTime, refillTimeMax, weekly, enterLocation)); + _timedHuntingZoneData.put(id, new TimedHuntingZoneHolder(id, name, initialTime, maxAddedTime, resetDelay, entryItemId, entryFee, minLevel, maxLevel, remainRefillTime, refillTimeMax, instanceId, weekly, enterLocation)); } } } diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 345619aae0..c9a335bbc7 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -14365,6 +14365,13 @@ public class PlayerInstance extends Playable { return false; } + + final int instanceId = holder.getInstanceId(); + if (instanceId > 0) + { + return isInInstance() && (instanceId == getInstanceWorld().getTemplateId()); + } + return (holder.getMapX() == (((locX - World.WORLD_X_MIN) >> 15) + World.TILE_X_MIN)) && (holder.getMapY() == (((locY - World.WORLD_Y_MIN) >> 15) + World.TILE_Y_MIN)); } diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java index 8dc7e29393..b487e8d74b 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java @@ -35,12 +35,13 @@ public class TimedHuntingZoneHolder private final int _maxLevel; private final int _remainRefillTime; private final int _refillTimeMax; + private final int _instanceId; private final boolean _weekly; private final Location _enterLocation; private final int _mapX; private final int _mapY; - public TimedHuntingZoneHolder(int id, String name, int initialTime, int maximumAddedTime, int resetDelay, int entryItemId, int entryFee, int minLevel, int maxLevel, int remainRefillTime, int refillTimeMax, boolean weekly, Location enterLocation) + public TimedHuntingZoneHolder(int id, String name, int initialTime, int maximumAddedTime, int resetDelay, int entryItemId, int entryFee, int minLevel, int maxLevel, int remainRefillTime, int refillTimeMax, int instanceId, boolean weekly, Location enterLocation) { _id = id; _name = name; @@ -53,6 +54,7 @@ public class TimedHuntingZoneHolder _maxLevel = maxLevel; _remainRefillTime = remainRefillTime; _refillTimeMax = refillTimeMax; + _instanceId = instanceId; _weekly = weekly; _enterLocation = enterLocation; _mapX = ((_enterLocation.getX() - World.WORLD_X_MIN) >> 15) + World.TILE_X_MIN; @@ -114,6 +116,11 @@ public class TimedHuntingZoneHolder return _refillTimeMax; } + public int getInstanceId() + { + return _instanceId; + } + public boolean isWeekly() { return _weekly; diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java index c06b418436..c8e62fd7e0 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java +++ b/L2J_Mobius_8.0_Homunculus/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,13 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket return; } + final int instanceId = holder.getInstanceId(); + if ((instanceId > 0) && (InstanceManager.getInstance().getInstanceTime(player, instanceId) > 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 +141,15 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket } player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, endTime - currentTime); - player.teleToLocation(holder.getEnterLocation()); + + if (instanceId == 0) + { + player.teleToLocation(holder.getEnterLocation()); + } + else // Transcendent zones. + { + QuestManager.getInstance().getQuest("TranscendentZone").notifyEvent("ENTER " + instanceId, null, player); + } } else { diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/xsd/TimedHuntingZoneData.xsd b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/xsd/TimedHuntingZoneData.xsd index c5dd31a591..7c75375766 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/xsd/TimedHuntingZoneData.xsd +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/xsd/TimedHuntingZoneData.xsd @@ -15,6 +15,7 @@ + diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java index 3e8c396f59..e01aa5d46e 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java @@ -87,6 +87,7 @@ public class TimedHuntingZoneData implements IXmlReader int maxLevel = 999; int remainRefillTime = 3600; int refillTimeMax = 3600; + int instanceId = 0; boolean weekly = false; Location enterLocation = null; for (Node zoneNode = listNode.getFirstChild(); zoneNode != null; zoneNode = zoneNode.getNextSibling()) @@ -144,6 +145,11 @@ public class TimedHuntingZoneData implements IXmlReader refillTimeMax = Integer.parseInt(zoneNode.getTextContent()); break; } + case "instanceId": + { + refillTimeMax = Integer.parseInt(zoneNode.getTextContent()); + break; + } case "weekly": { weekly = Boolean.parseBoolean(zoneNode.getTextContent()); @@ -151,7 +157,7 @@ public class TimedHuntingZoneData implements IXmlReader } } } - _timedHuntingZoneData.put(id, new TimedHuntingZoneHolder(id, name, initialTime, maxAddedTime, resetDelay, entryItemId, entryFee, minLevel, maxLevel, remainRefillTime, refillTimeMax, weekly, enterLocation)); + _timedHuntingZoneData.put(id, new TimedHuntingZoneHolder(id, name, initialTime, maxAddedTime, resetDelay, entryItemId, entryFee, minLevel, maxLevel, remainRefillTime, refillTimeMax, instanceId, weekly, enterLocation)); } } } diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 8285160fea..706b7bc610 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -14403,6 +14403,13 @@ public class PlayerInstance extends Playable { return false; } + + final int instanceId = holder.getInstanceId(); + if (instanceId > 0) + { + return isInInstance() && (instanceId == getInstanceWorld().getTemplateId()); + } + return (holder.getMapX() == (((locX - World.WORLD_X_MIN) >> 15) + World.TILE_X_MIN)) && (holder.getMapY() == (((locY - World.WORLD_Y_MIN) >> 15) + World.TILE_Y_MIN)); } diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java index 8dc7e29393..b487e8d74b 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java @@ -35,12 +35,13 @@ public class TimedHuntingZoneHolder private final int _maxLevel; private final int _remainRefillTime; private final int _refillTimeMax; + private final int _instanceId; private final boolean _weekly; private final Location _enterLocation; private final int _mapX; private final int _mapY; - public TimedHuntingZoneHolder(int id, String name, int initialTime, int maximumAddedTime, int resetDelay, int entryItemId, int entryFee, int minLevel, int maxLevel, int remainRefillTime, int refillTimeMax, boolean weekly, Location enterLocation) + public TimedHuntingZoneHolder(int id, String name, int initialTime, int maximumAddedTime, int resetDelay, int entryItemId, int entryFee, int minLevel, int maxLevel, int remainRefillTime, int refillTimeMax, int instanceId, boolean weekly, Location enterLocation) { _id = id; _name = name; @@ -53,6 +54,7 @@ public class TimedHuntingZoneHolder _maxLevel = maxLevel; _remainRefillTime = remainRefillTime; _refillTimeMax = refillTimeMax; + _instanceId = instanceId; _weekly = weekly; _enterLocation = enterLocation; _mapX = ((_enterLocation.getX() - World.WORLD_X_MIN) >> 15) + World.TILE_X_MIN; @@ -114,6 +116,11 @@ public class TimedHuntingZoneHolder return _refillTimeMax; } + public int getInstanceId() + { + return _instanceId; + } + public boolean isWeekly() { return _weekly; diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java index c06b418436..c8e62fd7e0 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/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,13 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket return; } + final int instanceId = holder.getInstanceId(); + if ((instanceId > 0) && (InstanceManager.getInstance().getInstanceTime(player, instanceId) > 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 +141,15 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket } player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, endTime - currentTime); - player.teleToLocation(holder.getEnterLocation()); + + if (instanceId == 0) + { + player.teleToLocation(holder.getEnterLocation()); + } + else // Transcendent zones. + { + QuestManager.getInstance().getQuest("TranscendentZone").notifyEvent("ENTER " + instanceId, null, player); + } } else { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/TimedHuntingZoneData.xsd b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/TimedHuntingZoneData.xsd index c5dd31a591..7c75375766 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/TimedHuntingZoneData.xsd +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/TimedHuntingZoneData.xsd @@ -15,6 +15,7 @@ + diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java index 478037eb19..b7cfbe4d31 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java @@ -87,6 +87,7 @@ public class TimedHuntingZoneData implements IXmlReader int maxLevel = 999; int remainRefillTime = 3600; int refillTimeMax = 3600; + int instanceId = 0; boolean weekly = false; Location enterLocation = null; for (Node zoneNode = listNode.getFirstChild(); zoneNode != null; zoneNode = zoneNode.getNextSibling()) @@ -144,6 +145,11 @@ public class TimedHuntingZoneData implements IXmlReader refillTimeMax = Integer.parseInt(zoneNode.getTextContent()); break; } + case "instanceId": + { + refillTimeMax = Integer.parseInt(zoneNode.getTextContent()); + break; + } case "weekly": { weekly = Boolean.parseBoolean(zoneNode.getTextContent()); @@ -151,7 +157,7 @@ public class TimedHuntingZoneData implements IXmlReader } } } - _timedHuntingZoneData.put(id, new TimedHuntingZoneHolder(id, name, initialTime, maxAddedTime, resetDelay, entryItemId, entryFee, minLevel, maxLevel, remainRefillTime, refillTimeMax, weekly, enterLocation)); + _timedHuntingZoneData.put(id, new TimedHuntingZoneHolder(id, name, initialTime, maxAddedTime, resetDelay, entryItemId, entryFee, minLevel, maxLevel, remainRefillTime, refillTimeMax, instanceId, weekly, enterLocation)); } } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index d5be76a11e..906c08943f 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -14272,6 +14272,13 @@ public class PlayerInstance extends Playable { return false; } + + final int instanceId = holder.getInstanceId(); + if (instanceId > 0) + { + return isInInstance() && (instanceId == getInstanceWorld().getTemplateId()); + } + return (holder.getMapX() == (((locX - World.WORLD_X_MIN) >> 15) + World.TILE_X_MIN)) && (holder.getMapY() == (((locY - World.WORLD_Y_MIN) >> 15) + World.TILE_Y_MIN)); } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java index 8dc7e29393..b487e8d74b 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java @@ -35,12 +35,13 @@ public class TimedHuntingZoneHolder private final int _maxLevel; private final int _remainRefillTime; private final int _refillTimeMax; + private final int _instanceId; private final boolean _weekly; private final Location _enterLocation; private final int _mapX; private final int _mapY; - public TimedHuntingZoneHolder(int id, String name, int initialTime, int maximumAddedTime, int resetDelay, int entryItemId, int entryFee, int minLevel, int maxLevel, int remainRefillTime, int refillTimeMax, boolean weekly, Location enterLocation) + public TimedHuntingZoneHolder(int id, String name, int initialTime, int maximumAddedTime, int resetDelay, int entryItemId, int entryFee, int minLevel, int maxLevel, int remainRefillTime, int refillTimeMax, int instanceId, boolean weekly, Location enterLocation) { _id = id; _name = name; @@ -53,6 +54,7 @@ public class TimedHuntingZoneHolder _maxLevel = maxLevel; _remainRefillTime = remainRefillTime; _refillTimeMax = refillTimeMax; + _instanceId = instanceId; _weekly = weekly; _enterLocation = enterLocation; _mapX = ((_enterLocation.getX() - World.WORLD_X_MIN) >> 15) + World.TILE_X_MIN; @@ -114,6 +116,11 @@ public class TimedHuntingZoneHolder return _refillTimeMax; } + public int getInstanceId() + { + return _instanceId; + } + public boolean isWeekly() { return _weekly; diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java index 392db9259a..4a2232ae48 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/huntingzones/ExTimedHuntingZoneEnter.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/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,13 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket return; } + final int instanceId = holder.getInstanceId(); + if ((instanceId > 0) && (InstanceManager.getInstance().getInstanceTime(player, instanceId) > 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 +141,15 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket } player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, endTime - currentTime); - player.teleToLocation(holder.getEnterLocation()); + + if (instanceId == 0) + { + player.teleToLocation(holder.getEnterLocation()); + } + else // Transcendent zones. + { + QuestManager.getInstance().getQuest("TranscendentZone").notifyEvent("ENTER " + instanceId, null, player); + } } else { 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 8a639b5a44..5aa75351af 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 @@ -55,6 +55,7 @@ 10000 40 49 + 1101 125277,70262,-4408 @@ -66,6 +67,7 @@ 10000 50 59 + 1102 148724,-22366,-3436 @@ -77,6 +79,7 @@ 10000 60 69 + 1103 167965,28800,-3606 @@ -88,6 +91,7 @@ 10000 70 79 + 1104 99797,110524,-3702 @@ -99,6 +103,7 @@ 10000 80 999 + 1106 -50416,145363,-2825 @@ -110,5 +115,6 @@ 10000 85 999 + 1107 \ 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 index 4d79130328..fd3dc97ef7 100644 --- 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 @@ -69,7 +69,7 @@ public class TranscendentZone extends AbstractInstance { if (event.startsWith("ENTER")) { - enterInstance(player, npc, 1000 + Integer.parseInt(event.split(" ")[1])); + enterInstance(player, npc, Integer.parseInt(event.split(" ")[1])); } else if (event.startsWith("FINISH")) { diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/xsd/TimedHuntingZoneData.xsd b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/xsd/TimedHuntingZoneData.xsd index c5dd31a591..7c75375766 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/xsd/TimedHuntingZoneData.xsd +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/xsd/TimedHuntingZoneData.xsd @@ -15,6 +15,7 @@ + diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java index 478037eb19..b7cfbe4d31 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java @@ -87,6 +87,7 @@ public class TimedHuntingZoneData implements IXmlReader int maxLevel = 999; int remainRefillTime = 3600; int refillTimeMax = 3600; + int instanceId = 0; boolean weekly = false; Location enterLocation = null; for (Node zoneNode = listNode.getFirstChild(); zoneNode != null; zoneNode = zoneNode.getNextSibling()) @@ -144,6 +145,11 @@ public class TimedHuntingZoneData implements IXmlReader refillTimeMax = Integer.parseInt(zoneNode.getTextContent()); break; } + case "instanceId": + { + refillTimeMax = Integer.parseInt(zoneNode.getTextContent()); + break; + } case "weekly": { weekly = Boolean.parseBoolean(zoneNode.getTextContent()); @@ -151,7 +157,7 @@ public class TimedHuntingZoneData implements IXmlReader } } } - _timedHuntingZoneData.put(id, new TimedHuntingZoneHolder(id, name, initialTime, maxAddedTime, resetDelay, entryItemId, entryFee, minLevel, maxLevel, remainRefillTime, refillTimeMax, weekly, enterLocation)); + _timedHuntingZoneData.put(id, new TimedHuntingZoneHolder(id, name, initialTime, maxAddedTime, resetDelay, entryItemId, entryFee, minLevel, maxLevel, remainRefillTime, refillTimeMax, instanceId, weekly, enterLocation)); } } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 8e60f09c83..087a5a60e8 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -14533,6 +14533,13 @@ public class PlayerInstance extends Playable { return false; } + + final int instanceId = holder.getInstanceId(); + if (instanceId > 0) + { + return isInInstance() && (instanceId == getInstanceWorld().getTemplateId()); + } + return (holder.getMapX() == (((locX - World.WORLD_X_MIN) >> 15) + World.TILE_X_MIN)) && (holder.getMapY() == (((locY - World.WORLD_Y_MIN) >> 15) + World.TILE_Y_MIN)); } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java index 8dc7e29393..b487e8d74b 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java @@ -35,12 +35,13 @@ public class TimedHuntingZoneHolder private final int _maxLevel; private final int _remainRefillTime; private final int _refillTimeMax; + private final int _instanceId; private final boolean _weekly; private final Location _enterLocation; private final int _mapX; private final int _mapY; - public TimedHuntingZoneHolder(int id, String name, int initialTime, int maximumAddedTime, int resetDelay, int entryItemId, int entryFee, int minLevel, int maxLevel, int remainRefillTime, int refillTimeMax, boolean weekly, Location enterLocation) + public TimedHuntingZoneHolder(int id, String name, int initialTime, int maximumAddedTime, int resetDelay, int entryItemId, int entryFee, int minLevel, int maxLevel, int remainRefillTime, int refillTimeMax, int instanceId, boolean weekly, Location enterLocation) { _id = id; _name = name; @@ -53,6 +54,7 @@ public class TimedHuntingZoneHolder _maxLevel = maxLevel; _remainRefillTime = remainRefillTime; _refillTimeMax = refillTimeMax; + _instanceId = instanceId; _weekly = weekly; _enterLocation = enterLocation; _mapX = ((_enterLocation.getX() - World.WORLD_X_MIN) >> 15) + World.TILE_X_MIN; @@ -114,6 +116,11 @@ public class TimedHuntingZoneHolder return _refillTimeMax; } + public int getInstanceId() + { + return _instanceId; + } + public boolean isWeekly() { return _weekly; 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 8768d37d75..4a2232ae48 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 @@ -101,7 +101,8 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket return; } - if ((_zoneId >= 101) && (_zoneId <= 107) && (InstanceManager.getInstance().getInstanceTime(player, 1000 + _zoneId) > Chronos.currentTimeMillis())) + final int instanceId = holder.getInstanceId(); + if ((instanceId > 0) && (InstanceManager.getInstance().getInstanceTime(player, instanceId) > Chronos.currentTimeMillis())) { player.sendMessage("This transcendent instance has not reset yet."); return; @@ -141,13 +142,13 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, endTime - currentTime); - if ((_zoneId < 101) || (_zoneId > 107)) + if (instanceId == 0) { player.teleToLocation(holder.getEnterLocation()); } else // Transcendent zones. { - QuestManager.getInstance().getQuest("TranscendentZone").notifyEvent("ENTER " + _zoneId, null, player); + QuestManager.getInstance().getQuest("TranscendentZone").notifyEvent("ENTER " + instanceId, null, player); } } else 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 8a639b5a44..5aa75351af 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 @@ -55,6 +55,7 @@ 10000 40 49 + 1101 125277,70262,-4408 @@ -66,6 +67,7 @@ 10000 50 59 + 1102 148724,-22366,-3436 @@ -77,6 +79,7 @@ 10000 60 69 + 1103 167965,28800,-3606 @@ -88,6 +91,7 @@ 10000 70 79 + 1104 99797,110524,-3702 @@ -99,6 +103,7 @@ 10000 80 999 + 1106 -50416,145363,-2825 @@ -110,5 +115,6 @@ 10000 85 999 + 1107 \ 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 index 4d79130328..fd3dc97ef7 100644 --- 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 @@ -69,7 +69,7 @@ public class TranscendentZone extends AbstractInstance { if (event.startsWith("ENTER")) { - enterInstance(player, npc, 1000 + Integer.parseInt(event.split(" ")[1])); + enterInstance(player, npc, Integer.parseInt(event.split(" ")[1])); } else if (event.startsWith("FINISH")) { diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/TimedHuntingZoneData.xsd b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/TimedHuntingZoneData.xsd index c5dd31a591..7c75375766 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/TimedHuntingZoneData.xsd +++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/TimedHuntingZoneData.xsd @@ -15,6 +15,7 @@ + diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java index 478037eb19..b7cfbe4d31 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/data/xml/TimedHuntingZoneData.java @@ -87,6 +87,7 @@ public class TimedHuntingZoneData implements IXmlReader int maxLevel = 999; int remainRefillTime = 3600; int refillTimeMax = 3600; + int instanceId = 0; boolean weekly = false; Location enterLocation = null; for (Node zoneNode = listNode.getFirstChild(); zoneNode != null; zoneNode = zoneNode.getNextSibling()) @@ -144,6 +145,11 @@ public class TimedHuntingZoneData implements IXmlReader refillTimeMax = Integer.parseInt(zoneNode.getTextContent()); break; } + case "instanceId": + { + refillTimeMax = Integer.parseInt(zoneNode.getTextContent()); + break; + } case "weekly": { weekly = Boolean.parseBoolean(zoneNode.getTextContent()); @@ -151,7 +157,7 @@ public class TimedHuntingZoneData implements IXmlReader } } } - _timedHuntingZoneData.put(id, new TimedHuntingZoneHolder(id, name, initialTime, maxAddedTime, resetDelay, entryItemId, entryFee, minLevel, maxLevel, remainRefillTime, refillTimeMax, weekly, enterLocation)); + _timedHuntingZoneData.put(id, new TimedHuntingZoneHolder(id, name, initialTime, maxAddedTime, resetDelay, entryItemId, entryFee, minLevel, maxLevel, remainRefillTime, refillTimeMax, instanceId, weekly, enterLocation)); } } } diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index fb899308c4..064cf46a43 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -14611,6 +14611,13 @@ public class PlayerInstance extends Playable { return false; } + + final int instanceId = holder.getInstanceId(); + if (instanceId > 0) + { + return isInInstance() && (instanceId == getInstanceWorld().getTemplateId()); + } + return (holder.getMapX() == (((locX - World.WORLD_X_MIN) >> 15) + World.TILE_X_MIN)) && (holder.getMapY() == (((locY - World.WORLD_Y_MIN) >> 15) + World.TILE_Y_MIN)); } diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java index 8dc7e29393..b487e8d74b 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/holders/TimedHuntingZoneHolder.java @@ -35,12 +35,13 @@ public class TimedHuntingZoneHolder private final int _maxLevel; private final int _remainRefillTime; private final int _refillTimeMax; + private final int _instanceId; private final boolean _weekly; private final Location _enterLocation; private final int _mapX; private final int _mapY; - public TimedHuntingZoneHolder(int id, String name, int initialTime, int maximumAddedTime, int resetDelay, int entryItemId, int entryFee, int minLevel, int maxLevel, int remainRefillTime, int refillTimeMax, boolean weekly, Location enterLocation) + public TimedHuntingZoneHolder(int id, String name, int initialTime, int maximumAddedTime, int resetDelay, int entryItemId, int entryFee, int minLevel, int maxLevel, int remainRefillTime, int refillTimeMax, int instanceId, boolean weekly, Location enterLocation) { _id = id; _name = name; @@ -53,6 +54,7 @@ public class TimedHuntingZoneHolder _maxLevel = maxLevel; _remainRefillTime = remainRefillTime; _refillTimeMax = refillTimeMax; + _instanceId = instanceId; _weekly = weekly; _enterLocation = enterLocation; _mapX = ((_enterLocation.getX() - World.WORLD_X_MIN) >> 15) + World.TILE_X_MIN; @@ -114,6 +116,11 @@ public class TimedHuntingZoneHolder return _refillTimeMax; } + public int getInstanceId() + { + return _instanceId; + } + public boolean isWeekly() { return _weekly; 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 8768d37d75..4a2232ae48 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 @@ -101,7 +101,8 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket return; } - if ((_zoneId >= 101) && (_zoneId <= 107) && (InstanceManager.getInstance().getInstanceTime(player, 1000 + _zoneId) > Chronos.currentTimeMillis())) + final int instanceId = holder.getInstanceId(); + if ((instanceId > 0) && (InstanceManager.getInstance().getInstanceTime(player, instanceId) > Chronos.currentTimeMillis())) { player.sendMessage("This transcendent instance has not reset yet."); return; @@ -141,13 +142,13 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, endTime - currentTime); - if ((_zoneId < 101) || (_zoneId > 107)) + if (instanceId == 0) { player.teleToLocation(holder.getEnterLocation()); } else // Transcendent zones. { - QuestManager.getInstance().getQuest("TranscendentZone").notifyEvent("ENTER " + _zoneId, null, player); + QuestManager.getInstance().getQuest("TranscendentZone").notifyEvent("ENTER " + instanceId, null, player); } } else