Addition of time stone limited use.
Contributed by nasseka.
This commit is contained in:
		| @@ -86,9 +86,9 @@ | ||||
| 		<enterLocation>90327,198818,-3280</enterLocation> | ||||
| 		<initialTime>3600</initialTime> <!-- 1 hour --> | ||||
| 		<resetDelay>36000</resetDelay> <!-- 10 hours --> | ||||
| 		<maxAddedTime>3600</maxAddedTime> <!-- 1 hour --> | ||||
| 		<remainRefillTime>43200</remainRefillTime> | ||||
| 		<refillTimeMax>3600</refillTimeMax> | ||||
| 		<maxAddedTime>21600</maxAddedTime> <!-- 3 hours --> | ||||
| 		<remainRefillTime>18000</remainRefillTime> | ||||
| 		<refillTimeMax>36000</refillTimeMax> | ||||
| 		<entryFee>150000</entryFee> | ||||
| 		<minLevel>100</minLevel> | ||||
| 		<maxLevel>130</maxLevel> | ||||
|   | ||||
| @@ -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)); | ||||
| 	} | ||||
|   | ||||
| @@ -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(); | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -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"; | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment