From ce1195253af24b41feb281c2f896ae127f403c0e Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Mon, 24 Jan 2022 03:57:39 +0000 Subject: [PATCH] Addition of time stone limited use. Contributed by nasseka. --- .../effecthandlers/AddHuntingTime.java | 27 +++++++++---------- .../instancemanager/DailyTaskManager.java | 8 ++++-- .../model/variables/PlayerVariables.java | 1 + .../huntingzones/TimedHuntingZoneList.java | 6 ++--- .../effecthandlers/AddHuntingTime.java | 27 +++++++++---------- .../instancemanager/DailyTaskManager.java | 8 ++++-- .../model/variables/PlayerVariables.java | 1 + .../huntingzones/TimedHuntingZoneList.java | 6 ++--- .../dist/game/data/TimedHuntingZoneData.xml | 6 ++--- .../effecthandlers/AddHuntingTime.java | 27 +++++++++---------- .../instancemanager/DailyTaskManager.java | 8 ++++-- .../model/variables/PlayerVariables.java | 1 + .../huntingzones/TimedHuntingZoneList.java | 6 ++--- .../dist/game/data/TimedHuntingZoneData.xml | 6 ++--- .../effecthandlers/AddHuntingTime.java | 27 +++++++++---------- .../instancemanager/DailyTaskManager.java | 8 ++++-- .../model/variables/PlayerVariables.java | 1 + .../huntingzones/TimedHuntingZoneList.java | 6 ++--- .../effecthandlers/AddHuntingTime.java | 27 +++++++++---------- .../instancemanager/DailyTaskManager.java | 8 ++++-- .../model/variables/PlayerVariables.java | 1 + .../huntingzones/TimedHuntingZoneList.java | 6 ++--- .../effecthandlers/AddHuntingTime.java | 27 +++++++++---------- .../instancemanager/DailyTaskManager.java | 8 ++++-- .../model/variables/PlayerVariables.java | 1 + .../huntingzones/TimedHuntingZoneList.java | 6 ++--- .../effecthandlers/AddHuntingTime.java | 27 +++++++++---------- .../instancemanager/DailyTaskManager.java | 8 ++++-- .../model/variables/PlayerVariables.java | 1 + .../huntingzones/TimedHuntingZoneList.java | 6 ++--- .../effecthandlers/AddHuntingTime.java | 27 +++++++++---------- .../instancemanager/DailyTaskManager.java | 8 ++++-- .../model/variables/PlayerVariables.java | 1 + .../huntingzones/TimedHuntingZoneList.java | 6 ++--- 34 files changed, 190 insertions(+), 158 deletions(-) diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java index 6263818497..c3dad9fbb6 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java +++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java @@ -65,7 +65,7 @@ public class AddHuntingTime extends AbstractEffect } final long currentTime = Chronos.currentTimeMillis(); - long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); + final long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); if ((endTime > currentTime) && (((endTime - currentTime) + _time) >= holder.getMaximumAddedTime())) { player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); @@ -73,24 +73,23 @@ public class AddHuntingTime extends AbstractEffect return; } + final long remainRefill = player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, holder.getRemainRefillTime()); + if ((_time < remainRefill) || (remainRefill == 0)) + { + player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); + player.sendMessage("You cannot exceed the time zone limit."); + return; + } + + final long remainTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, holder.getInitialTime()); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, remainTime + _time); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, remainRefill - (_time / 1000)); + if (player.isInTimedHuntingZone(_zoneId)) { - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, _time + player.getTimedHuntingZoneRemainingTime(_zoneId)); player.startTimedHuntingZone(_zoneId, endTime); player.sendPacket(new TimedHuntingZoneEnter(player, _zoneId)); } - else - { - if ((endTime + holder.getResetDelay()) < currentTime) - { - endTime = currentTime + holder.getInitialTime(); - } - else if (endTime < currentTime) - { - endTime = currentTime; - } - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, (endTime - currentTime) + _time); - } player.sendPacket(new TimedHuntingZoneList(player)); } diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index f273d33ce0..92a9c3f529 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -403,10 +403,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -419,6 +420,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } @@ -437,10 +439,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -453,6 +456,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index f766a138d3..70b6909e52 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -67,6 +67,7 @@ public class PlayerVariables extends AbstractVariables public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; + public static final String HUNTING_ZONE_REMAIN_REFILL_ = "HUNTING_ZONE_REMAIN_REFILL_"; private final int _objectId; diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java index 07cc8cdb16..b13b5b3591 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java @@ -21,6 +21,7 @@ import org.l2jmobius.commons.util.Chronos; import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -43,7 +44,6 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket public boolean write(PacketWriter packet) { OutgoingPackets.EX_TIME_RESTRICT_FIELD_LIST.writeId(packet); - int remainingTime; final long currentTime = Chronos.currentTimeMillis(); packet.writeD(TimedHuntingZoneData.getInstance().getSize()); // zone count for (TimedHuntingZoneHolder holder : TimedHuntingZoneData.getInstance().getAllHuntingZones()) @@ -56,14 +56,14 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket packet.writeD(holder.getMinLevel()); packet.writeD(holder.getMaxLevel()); packet.writeD(holder.getInitialTime() / 1000); // remain time base - remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); + int remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); if ((remainingTime == 0) && ((_player.getTimedHuntingZoneInitialEntry(holder.getZoneId()) + holder.getResetDelay()) < currentTime)) { remainingTime = holder.getInitialTime(); } packet.writeD(remainingTime / 1000); // remain time packet.writeD(holder.getMaximumAddedTime() / 1000); - packet.writeD(holder.getRemainRefillTime()); + packet.writeD(_player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId(), holder.getRemainRefillTime())); packet.writeD(holder.getRefillTimeMax()); packet.writeC(_isInTimedHuntingZone ? 0 : 1); // field activated } diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java index 6263818497..c3dad9fbb6 100644 --- a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java +++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java @@ -65,7 +65,7 @@ public class AddHuntingTime extends AbstractEffect } final long currentTime = Chronos.currentTimeMillis(); - long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); + final long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); if ((endTime > currentTime) && (((endTime - currentTime) + _time) >= holder.getMaximumAddedTime())) { player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); @@ -73,24 +73,23 @@ public class AddHuntingTime extends AbstractEffect return; } + final long remainRefill = player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, holder.getRemainRefillTime()); + if ((_time < remainRefill) || (remainRefill == 0)) + { + player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); + player.sendMessage("You cannot exceed the time zone limit."); + return; + } + + final long remainTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, holder.getInitialTime()); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, remainTime + _time); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, remainRefill - (_time / 1000)); + if (player.isInTimedHuntingZone(_zoneId)) { - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, _time + player.getTimedHuntingZoneRemainingTime(_zoneId)); player.startTimedHuntingZone(_zoneId, endTime); player.sendPacket(new TimedHuntingZoneEnter(player, _zoneId)); } - else - { - if ((endTime + holder.getResetDelay()) < currentTime) - { - endTime = currentTime + holder.getInitialTime(); - } - else if (endTime < currentTime) - { - endTime = currentTime; - } - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, (endTime - currentTime) + _time); - } player.sendPacket(new TimedHuntingZoneList(player)); } diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 3ae96dd3b8..562655515c 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -442,10 +442,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -458,6 +459,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } @@ -476,10 +478,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -492,6 +495,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index 07b931c67c..0488441f78 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -67,6 +67,7 @@ public class PlayerVariables extends AbstractVariables public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; + public static final String HUNTING_ZONE_REMAIN_REFILL_ = "HUNTING_ZONE_REMAIN_REFILL_"; public static final String FAVORITE_TELEPORTS = "FAVORITE_TELEPORTS"; public static final String HOMUNCULUS_HP_POINTS = "HOMUNCULUS_HP_POINTS"; public static final String HOMUNCULUS_SP_POINTS = "HOMUNCULUS_SP_POINTS"; diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java index 64b555536f..044c589106 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java @@ -21,6 +21,7 @@ import org.l2jmobius.commons.util.Chronos; import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -43,7 +44,6 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket public boolean write(PacketWriter packet) { OutgoingPackets.EX_TIME_RESTRICT_FIELD_LIST.writeId(packet); - int remainingTime; final long currentTime = Chronos.currentTimeMillis(); packet.writeD(TimedHuntingZoneData.getInstance().getSize()); // zone count for (TimedHuntingZoneHolder holder : TimedHuntingZoneData.getInstance().getAllHuntingZones()) @@ -56,14 +56,14 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket packet.writeD(holder.getMinLevel()); packet.writeD(holder.getMaxLevel()); packet.writeD(holder.getInitialTime() / 1000); // remain time base - remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); + int remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); if ((remainingTime == 0) && ((_player.getTimedHuntingZoneInitialEntry(holder.getZoneId()) + holder.getResetDelay()) < currentTime)) { remainingTime = holder.getInitialTime(); } packet.writeD(remainingTime / 1000); // remain time packet.writeD(holder.getMaximumAddedTime() / 1000); - packet.writeD(holder.getRemainRefillTime()); + packet.writeD(_player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId(), holder.getRemainRefillTime())); packet.writeD(holder.getRefillTimeMax()); packet.writeC(_isInTimedHuntingZone ? 0 : 1); // field activated (272 C to D) packet.writeC(0); // bUserBound diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/TimedHuntingZoneData.xml b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/TimedHuntingZoneData.xml index 216ea960a5..7b5d3a553c 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/TimedHuntingZoneData.xml +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/TimedHuntingZoneData.xml @@ -74,9 +74,9 @@ 90327,198818,-3280 3600 36000 - 3600 - 43200 - 3600 + 21600 + 18000 + 36000 150000 100 130 diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java index 6263818497..c3dad9fbb6 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java @@ -65,7 +65,7 @@ public class AddHuntingTime extends AbstractEffect } final long currentTime = Chronos.currentTimeMillis(); - long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); + final long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); if ((endTime > currentTime) && (((endTime - currentTime) + _time) >= holder.getMaximumAddedTime())) { player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); @@ -73,24 +73,23 @@ public class AddHuntingTime extends AbstractEffect return; } + final long remainRefill = player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, holder.getRemainRefillTime()); + if ((_time < remainRefill) || (remainRefill == 0)) + { + player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); + player.sendMessage("You cannot exceed the time zone limit."); + return; + } + + final long remainTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, holder.getInitialTime()); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, remainTime + _time); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, remainRefill - (_time / 1000)); + if (player.isInTimedHuntingZone(_zoneId)) { - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, _time + player.getTimedHuntingZoneRemainingTime(_zoneId)); player.startTimedHuntingZone(_zoneId, endTime); player.sendPacket(new TimedHuntingZoneEnter(player, _zoneId)); } - else - { - if ((endTime + holder.getResetDelay()) < currentTime) - { - endTime = currentTime + holder.getInitialTime(); - } - else if (endTime < currentTime) - { - endTime = currentTime; - } - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, (endTime - currentTime) + _time); - } player.sendPacket(new TimedHuntingZoneList(player)); } diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 3ae96dd3b8..562655515c 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -442,10 +442,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -458,6 +459,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } @@ -476,10 +478,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -492,6 +495,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index 07b931c67c..0488441f78 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -67,6 +67,7 @@ public class PlayerVariables extends AbstractVariables public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; + public static final String HUNTING_ZONE_REMAIN_REFILL_ = "HUNTING_ZONE_REMAIN_REFILL_"; public static final String FAVORITE_TELEPORTS = "FAVORITE_TELEPORTS"; public static final String HOMUNCULUS_HP_POINTS = "HOMUNCULUS_HP_POINTS"; public static final String HOMUNCULUS_SP_POINTS = "HOMUNCULUS_SP_POINTS"; diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java index 64b555536f..044c589106 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java @@ -21,6 +21,7 @@ import org.l2jmobius.commons.util.Chronos; import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -43,7 +44,6 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket public boolean write(PacketWriter packet) { OutgoingPackets.EX_TIME_RESTRICT_FIELD_LIST.writeId(packet); - int remainingTime; final long currentTime = Chronos.currentTimeMillis(); packet.writeD(TimedHuntingZoneData.getInstance().getSize()); // zone count for (TimedHuntingZoneHolder holder : TimedHuntingZoneData.getInstance().getAllHuntingZones()) @@ -56,14 +56,14 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket packet.writeD(holder.getMinLevel()); packet.writeD(holder.getMaxLevel()); packet.writeD(holder.getInitialTime() / 1000); // remain time base - remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); + int remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); if ((remainingTime == 0) && ((_player.getTimedHuntingZoneInitialEntry(holder.getZoneId()) + holder.getResetDelay()) < currentTime)) { remainingTime = holder.getInitialTime(); } packet.writeD(remainingTime / 1000); // remain time packet.writeD(holder.getMaximumAddedTime() / 1000); - packet.writeD(holder.getRemainRefillTime()); + packet.writeD(_player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId(), holder.getRemainRefillTime())); packet.writeD(holder.getRefillTimeMax()); packet.writeC(_isInTimedHuntingZone ? 0 : 1); // field activated (272 C to D) packet.writeC(0); // bUserBound diff --git a/L2J_Mobius_10.0_MasterClass/dist/game/data/TimedHuntingZoneData.xml b/L2J_Mobius_10.0_MasterClass/dist/game/data/TimedHuntingZoneData.xml index d5e3cb3b0c..a4514e5889 100644 --- a/L2J_Mobius_10.0_MasterClass/dist/game/data/TimedHuntingZoneData.xml +++ b/L2J_Mobius_10.0_MasterClass/dist/game/data/TimedHuntingZoneData.xml @@ -86,9 +86,9 @@ 90327,198818,-3280 3600 36000 - 3600 - 43200 - 3600 + 21600 + 18000 + 36000 150000 100 130 diff --git a/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java b/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java index 6263818497..c3dad9fbb6 100644 --- a/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java +++ b/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java @@ -65,7 +65,7 @@ public class AddHuntingTime extends AbstractEffect } final long currentTime = Chronos.currentTimeMillis(); - long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); + final long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); if ((endTime > currentTime) && (((endTime - currentTime) + _time) >= holder.getMaximumAddedTime())) { player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); @@ -73,24 +73,23 @@ public class AddHuntingTime extends AbstractEffect return; } + final long remainRefill = player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, holder.getRemainRefillTime()); + if ((_time < remainRefill) || (remainRefill == 0)) + { + player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); + player.sendMessage("You cannot exceed the time zone limit."); + return; + } + + final long remainTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, holder.getInitialTime()); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, remainTime + _time); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, remainRefill - (_time / 1000)); + if (player.isInTimedHuntingZone(_zoneId)) { - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, _time + player.getTimedHuntingZoneRemainingTime(_zoneId)); player.startTimedHuntingZone(_zoneId, endTime); player.sendPacket(new TimedHuntingZoneEnter(player, _zoneId)); } - else - { - if ((endTime + holder.getResetDelay()) < currentTime) - { - endTime = currentTime + holder.getInitialTime(); - } - else if (endTime < currentTime) - { - endTime = currentTime; - } - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, (endTime - currentTime) + _time); - } player.sendPacket(new TimedHuntingZoneList(player)); } diff --git a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 3ae96dd3b8..562655515c 100644 --- a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -442,10 +442,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -458,6 +459,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } @@ -476,10 +478,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -492,6 +495,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } diff --git a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index 07b931c67c..0488441f78 100644 --- a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -67,6 +67,7 @@ public class PlayerVariables extends AbstractVariables public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; + public static final String HUNTING_ZONE_REMAIN_REFILL_ = "HUNTING_ZONE_REMAIN_REFILL_"; public static final String FAVORITE_TELEPORTS = "FAVORITE_TELEPORTS"; public static final String HOMUNCULUS_HP_POINTS = "HOMUNCULUS_HP_POINTS"; public static final String HOMUNCULUS_SP_POINTS = "HOMUNCULUS_SP_POINTS"; diff --git a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java index 64b555536f..044c589106 100644 --- a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java +++ b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java @@ -21,6 +21,7 @@ import org.l2jmobius.commons.util.Chronos; import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -43,7 +44,6 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket public boolean write(PacketWriter packet) { OutgoingPackets.EX_TIME_RESTRICT_FIELD_LIST.writeId(packet); - int remainingTime; final long currentTime = Chronos.currentTimeMillis(); packet.writeD(TimedHuntingZoneData.getInstance().getSize()); // zone count for (TimedHuntingZoneHolder holder : TimedHuntingZoneData.getInstance().getAllHuntingZones()) @@ -56,14 +56,14 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket packet.writeD(holder.getMinLevel()); packet.writeD(holder.getMaxLevel()); packet.writeD(holder.getInitialTime() / 1000); // remain time base - remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); + int remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); if ((remainingTime == 0) && ((_player.getTimedHuntingZoneInitialEntry(holder.getZoneId()) + holder.getResetDelay()) < currentTime)) { remainingTime = holder.getInitialTime(); } packet.writeD(remainingTime / 1000); // remain time packet.writeD(holder.getMaximumAddedTime() / 1000); - packet.writeD(holder.getRemainRefillTime()); + packet.writeD(_player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId(), holder.getRemainRefillTime())); packet.writeD(holder.getRefillTimeMax()); packet.writeC(_isInTimedHuntingZone ? 0 : 1); // field activated (272 C to D) packet.writeC(0); // bUserBound diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java index 6263818497..c3dad9fbb6 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java @@ -65,7 +65,7 @@ public class AddHuntingTime extends AbstractEffect } final long currentTime = Chronos.currentTimeMillis(); - long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); + final long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); if ((endTime > currentTime) && (((endTime - currentTime) + _time) >= holder.getMaximumAddedTime())) { player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); @@ -73,24 +73,23 @@ public class AddHuntingTime extends AbstractEffect return; } + final long remainRefill = player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, holder.getRemainRefillTime()); + if ((_time < remainRefill) || (remainRefill == 0)) + { + player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); + player.sendMessage("You cannot exceed the time zone limit."); + return; + } + + final long remainTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, holder.getInitialTime()); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, remainTime + _time); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, remainRefill - (_time / 1000)); + if (player.isInTimedHuntingZone(_zoneId)) { - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, _time + player.getTimedHuntingZoneRemainingTime(_zoneId)); player.startTimedHuntingZone(_zoneId, endTime); player.sendPacket(new TimedHuntingZoneEnter(player, _zoneId)); } - else - { - if ((endTime + holder.getResetDelay()) < currentTime) - { - endTime = currentTime + holder.getInitialTime(); - } - else if (endTime < currentTime) - { - endTime = currentTime; - } - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, (endTime - currentTime) + _time); - } player.sendPacket(new TimedHuntingZoneList(player)); } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 97dd7118c2..c1e4451b6f 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -378,10 +378,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -394,6 +395,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } @@ -412,10 +414,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -428,6 +431,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index f78af5596f..78331a2e24 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -61,6 +61,7 @@ public class PlayerVariables extends AbstractVariables public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; + public static final String HUNTING_ZONE_REMAIN_REFILL_ = "HUNTING_ZONE_REMAIN_REFILL_"; private final int _objectId; diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java index 07cc8cdb16..b13b5b3591 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java @@ -21,6 +21,7 @@ import org.l2jmobius.commons.util.Chronos; import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -43,7 +44,6 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket public boolean write(PacketWriter packet) { OutgoingPackets.EX_TIME_RESTRICT_FIELD_LIST.writeId(packet); - int remainingTime; final long currentTime = Chronos.currentTimeMillis(); packet.writeD(TimedHuntingZoneData.getInstance().getSize()); // zone count for (TimedHuntingZoneHolder holder : TimedHuntingZoneData.getInstance().getAllHuntingZones()) @@ -56,14 +56,14 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket packet.writeD(holder.getMinLevel()); packet.writeD(holder.getMaxLevel()); packet.writeD(holder.getInitialTime() / 1000); // remain time base - remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); + int remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); if ((remainingTime == 0) && ((_player.getTimedHuntingZoneInitialEntry(holder.getZoneId()) + holder.getResetDelay()) < currentTime)) { remainingTime = holder.getInitialTime(); } packet.writeD(remainingTime / 1000); // remain time packet.writeD(holder.getMaximumAddedTime() / 1000); - packet.writeD(holder.getRemainRefillTime()); + packet.writeD(_player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId(), holder.getRemainRefillTime())); packet.writeD(holder.getRefillTimeMax()); packet.writeC(_isInTimedHuntingZone ? 0 : 1); // field activated } diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java index 6263818497..c3dad9fbb6 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java @@ -65,7 +65,7 @@ public class AddHuntingTime extends AbstractEffect } final long currentTime = Chronos.currentTimeMillis(); - long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); + final long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); if ((endTime > currentTime) && (((endTime - currentTime) + _time) >= holder.getMaximumAddedTime())) { player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); @@ -73,24 +73,23 @@ public class AddHuntingTime extends AbstractEffect return; } + final long remainRefill = player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, holder.getRemainRefillTime()); + if ((_time < remainRefill) || (remainRefill == 0)) + { + player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); + player.sendMessage("You cannot exceed the time zone limit."); + return; + } + + final long remainTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, holder.getInitialTime()); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, remainTime + _time); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, remainRefill - (_time / 1000)); + if (player.isInTimedHuntingZone(_zoneId)) { - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, _time + player.getTimedHuntingZoneRemainingTime(_zoneId)); player.startTimedHuntingZone(_zoneId, endTime); player.sendPacket(new TimedHuntingZoneEnter(player, _zoneId)); } - else - { - if ((endTime + holder.getResetDelay()) < currentTime) - { - endTime = currentTime + holder.getInitialTime(); - } - else if (endTime < currentTime) - { - endTime = currentTime; - } - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, (endTime - currentTime) + _time); - } player.sendPacket(new TimedHuntingZoneList(player)); } diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 97dd7118c2..c1e4451b6f 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -378,10 +378,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -394,6 +395,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } @@ -412,10 +414,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -428,6 +431,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index a89a23a83f..74965afea9 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -61,6 +61,7 @@ public class PlayerVariables extends AbstractVariables public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; + public static final String HUNTING_ZONE_REMAIN_REFILL_ = "HUNTING_ZONE_REMAIN_REFILL_"; public static final String SAYHA_GRACE_SUPPORT_ENDTIME = "SAYHA_GRACE_SUPPORT_ENDTIME"; public static final String LIMITED_SAYHA_GRACE_ENDTIME = "LIMITED_SAYHA_GRACE_ENDTIME"; public static final String MAGIC_LAMP_EXP = "MAGIC_LAMP_EXP"; diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java index 64b555536f..044c589106 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java @@ -21,6 +21,7 @@ import org.l2jmobius.commons.util.Chronos; import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -43,7 +44,6 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket public boolean write(PacketWriter packet) { OutgoingPackets.EX_TIME_RESTRICT_FIELD_LIST.writeId(packet); - int remainingTime; final long currentTime = Chronos.currentTimeMillis(); packet.writeD(TimedHuntingZoneData.getInstance().getSize()); // zone count for (TimedHuntingZoneHolder holder : TimedHuntingZoneData.getInstance().getAllHuntingZones()) @@ -56,14 +56,14 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket packet.writeD(holder.getMinLevel()); packet.writeD(holder.getMaxLevel()); packet.writeD(holder.getInitialTime() / 1000); // remain time base - remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); + int remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); if ((remainingTime == 0) && ((_player.getTimedHuntingZoneInitialEntry(holder.getZoneId()) + holder.getResetDelay()) < currentTime)) { remainingTime = holder.getInitialTime(); } packet.writeD(remainingTime / 1000); // remain time packet.writeD(holder.getMaximumAddedTime() / 1000); - packet.writeD(holder.getRemainRefillTime()); + packet.writeD(_player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId(), holder.getRemainRefillTime())); packet.writeD(holder.getRefillTimeMax()); packet.writeC(_isInTimedHuntingZone ? 0 : 1); // field activated (272 C to D) packet.writeC(0); // bUserBound diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java index 6263818497..c3dad9fbb6 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java @@ -65,7 +65,7 @@ public class AddHuntingTime extends AbstractEffect } final long currentTime = Chronos.currentTimeMillis(); - long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); + final long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); if ((endTime > currentTime) && (((endTime - currentTime) + _time) >= holder.getMaximumAddedTime())) { player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); @@ -73,24 +73,23 @@ public class AddHuntingTime extends AbstractEffect return; } + final long remainRefill = player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, holder.getRemainRefillTime()); + if ((_time < remainRefill) || (remainRefill == 0)) + { + player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); + player.sendMessage("You cannot exceed the time zone limit."); + return; + } + + final long remainTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, holder.getInitialTime()); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, remainTime + _time); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, remainRefill - (_time / 1000)); + if (player.isInTimedHuntingZone(_zoneId)) { - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, _time + player.getTimedHuntingZoneRemainingTime(_zoneId)); player.startTimedHuntingZone(_zoneId, endTime); player.sendPacket(new TimedHuntingZoneEnter(player, _zoneId)); } - else - { - if ((endTime + holder.getResetDelay()) < currentTime) - { - endTime = currentTime + holder.getInitialTime(); - } - else if (endTime < currentTime) - { - endTime = currentTime; - } - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, (endTime - currentTime) + _time); - } player.sendPacket(new TimedHuntingZoneList(player)); } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 963fb956ed..163b21782f 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -418,10 +418,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -434,6 +435,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } @@ -452,10 +454,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -468,6 +471,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index 47e8a9f483..3dd60dd788 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -61,6 +61,7 @@ public class PlayerVariables extends AbstractVariables public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; + public static final String HUNTING_ZONE_REMAIN_REFILL_ = "HUNTING_ZONE_REMAIN_REFILL_"; public static final String SAYHA_GRACE_SUPPORT_ENDTIME = "SAYHA_GRACE_SUPPORT_ENDTIME"; public static final String LIMITED_SAYHA_GRACE_ENDTIME = "LIMITED_SAYHA_GRACE_ENDTIME"; public static final String MAGIC_LAMP_EXP = "MAGIC_LAMP_EXP"; diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java index 64b555536f..044c589106 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java @@ -21,6 +21,7 @@ import org.l2jmobius.commons.util.Chronos; import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -43,7 +44,6 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket public boolean write(PacketWriter packet) { OutgoingPackets.EX_TIME_RESTRICT_FIELD_LIST.writeId(packet); - int remainingTime; final long currentTime = Chronos.currentTimeMillis(); packet.writeD(TimedHuntingZoneData.getInstance().getSize()); // zone count for (TimedHuntingZoneHolder holder : TimedHuntingZoneData.getInstance().getAllHuntingZones()) @@ -56,14 +56,14 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket packet.writeD(holder.getMinLevel()); packet.writeD(holder.getMaxLevel()); packet.writeD(holder.getInitialTime() / 1000); // remain time base - remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); + int remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); if ((remainingTime == 0) && ((_player.getTimedHuntingZoneInitialEntry(holder.getZoneId()) + holder.getResetDelay()) < currentTime)) { remainingTime = holder.getInitialTime(); } packet.writeD(remainingTime / 1000); // remain time packet.writeD(holder.getMaximumAddedTime() / 1000); - packet.writeD(holder.getRemainRefillTime()); + packet.writeD(_player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId(), holder.getRemainRefillTime())); packet.writeD(holder.getRefillTimeMax()); packet.writeC(_isInTimedHuntingZone ? 0 : 1); // field activated (272 C to D) packet.writeC(0); // bUserBound diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java b/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java index 6263818497..c3dad9fbb6 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/scripts/handlers/effecthandlers/AddHuntingTime.java @@ -65,7 +65,7 @@ public class AddHuntingTime extends AbstractEffect } final long currentTime = Chronos.currentTimeMillis(); - long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); + final long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId); if ((endTime > currentTime) && (((endTime - currentTime) + _time) >= holder.getMaximumAddedTime())) { player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); @@ -73,24 +73,23 @@ public class AddHuntingTime extends AbstractEffect return; } + final long remainRefill = player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, holder.getRemainRefillTime()); + if ((_time < remainRefill) || (remainRefill == 0)) + { + player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player); + player.sendMessage("You cannot exceed the time zone limit."); + return; + } + + final long remainTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, holder.getInitialTime()); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, remainTime + _time); + player.getVariables().set(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + _zoneId, remainRefill - (_time / 1000)); + if (player.isInTimedHuntingZone(_zoneId)) { - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, _time + player.getTimedHuntingZoneRemainingTime(_zoneId)); player.startTimedHuntingZone(_zoneId, endTime); player.sendPacket(new TimedHuntingZoneEnter(player, _zoneId)); } - else - { - if ((endTime + holder.getResetDelay()) < currentTime) - { - endTime = currentTime + holder.getInitialTime(); - } - else if (endTime < currentTime) - { - endTime = currentTime; - } - player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, (endTime - currentTime) + _time); - } player.sendPacket(new TimedHuntingZoneList(player)); } diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 963fb956ed..163b21782f 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -418,10 +418,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -434,6 +435,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } @@ -452,10 +454,11 @@ public class DailyTaskManager // Update data for offline players. try (Connection con = DatabaseFactory.getConnection(); - PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?)")) + PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var IN (?, ?, ?)")) { ps.setString(1, PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); ps.setString(2, PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + ps.setString(3, PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); ps.executeUpdate(); } catch (Exception e) @@ -468,6 +471,7 @@ public class DailyTaskManager { player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId()); player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId()); + player.getVariables().remove(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId()); player.getVariables().storeMe(); } } diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index 47e8a9f483..3dd60dd788 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -61,6 +61,7 @@ public class PlayerVariables extends AbstractVariables public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; public static final String HUNTING_ZONE_ENTRY = "HUNTING_ZONE_ENTRY_"; public static final String HUNTING_ZONE_TIME = "HUNTING_ZONE_TIME_"; + public static final String HUNTING_ZONE_REMAIN_REFILL_ = "HUNTING_ZONE_REMAIN_REFILL_"; public static final String SAYHA_GRACE_SUPPORT_ENDTIME = "SAYHA_GRACE_SUPPORT_ENDTIME"; public static final String LIMITED_SAYHA_GRACE_ENDTIME = "LIMITED_SAYHA_GRACE_ENDTIME"; public static final String MAGIC_LAMP_EXP = "MAGIC_LAMP_EXP"; diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java index 64b555536f..044c589106 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/network/serverpackets/huntingzones/TimedHuntingZoneList.java @@ -21,6 +21,7 @@ import org.l2jmobius.commons.util.Chronos; import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -43,7 +44,6 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket public boolean write(PacketWriter packet) { OutgoingPackets.EX_TIME_RESTRICT_FIELD_LIST.writeId(packet); - int remainingTime; final long currentTime = Chronos.currentTimeMillis(); packet.writeD(TimedHuntingZoneData.getInstance().getSize()); // zone count for (TimedHuntingZoneHolder holder : TimedHuntingZoneData.getInstance().getAllHuntingZones()) @@ -56,14 +56,14 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket packet.writeD(holder.getMinLevel()); packet.writeD(holder.getMaxLevel()); packet.writeD(holder.getInitialTime() / 1000); // remain time base - remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); + int remainingTime = _player.getTimedHuntingZoneRemainingTime(holder.getZoneId()); if ((remainingTime == 0) && ((_player.getTimedHuntingZoneInitialEntry(holder.getZoneId()) + holder.getResetDelay()) < currentTime)) { remainingTime = holder.getInitialTime(); } packet.writeD(remainingTime / 1000); // remain time packet.writeD(holder.getMaximumAddedTime() / 1000); - packet.writeD(holder.getRemainRefillTime()); + packet.writeD(_player.getVariables().getInt(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL_ + holder.getZoneId(), holder.getRemainRefillTime())); packet.writeD(holder.getRefillTimeMax()); packet.writeC(_isInTimedHuntingZone ? 0 : 1); // field activated (272 C to D) packet.writeC(0); // bUserBound