Addition of AddHuntingTime effect handler.
This commit is contained in:
@@ -14253,6 +14253,7 @@ public class PlayerInstance extends Playable
|
||||
|
||||
// TODO: Delay window.
|
||||
// sendPacket(new TimedHuntingZoneEnter((int) (delay / 60 / 1000)));
|
||||
sendMessage("You have " + (delay / 60 / 1000) + " minutes left for this timed zone.");
|
||||
|
||||
_timedHuntingZoneFinishTask = ThreadPool.schedule(() ->
|
||||
{
|
||||
@@ -14272,7 +14273,16 @@ public class PlayerInstance extends Playable
|
||||
{
|
||||
_timedHuntingZoneFinishTask.cancel(true);
|
||||
_timedHuntingZoneFinishTask = null;
|
||||
sendPacket(TimedHuntingZoneExit.STATIC_PACKET);
|
||||
}
|
||||
sendPacket(TimedHuntingZoneExit.STATIC_PACKET);
|
||||
}
|
||||
|
||||
public long getTimedHuntingZoneRemainingTime()
|
||||
{
|
||||
if ((_timedHuntingZoneFinishTask != null) && !_timedHuntingZoneFinishTask.isCancelled() && !_timedHuntingZoneFinishTask.isDone())
|
||||
{
|
||||
return _timedHuntingZoneFinishTask.getDelay(TimeUnit.MILLISECONDS);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@@ -73,30 +73,32 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_RESET_TIME + _zoneId, 0) > System.currentTimeMillis())
|
||||
{
|
||||
if (player.isInTimedHuntingZone())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_WILL_EXCEED_THE_MAX_AMOUNT_OF_TIME_FOR_THE_HUNTING_ZONE_SO_YOU_CANNOT_ADD_ANY_MORE_TIME);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_TIME_AVAILABLE_TO_ENTER_THE_HUNTING_ZONE);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (((_zoneId == 1) && (player.getLevel() < 100)) //
|
||||
|| ((_zoneId == 6) && (player.getLevel() < 105)) //
|
||||
)
|
||||
{
|
||||
player.sendMessage("Your level does not corespont the zone equivalent.");
|
||||
player.sendMessage("Your level does not correspond the zone equivalent.");
|
||||
}
|
||||
|
||||
if (player.getAdena() > 150000)
|
||||
final long currentTime = System.currentTimeMillis();
|
||||
long endTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_RESET_TIME + _zoneId, 0);
|
||||
if ((endTime + 18000000) < currentTime)
|
||||
{
|
||||
player.reduceAdena("TimedHuntingZone", 150000, player, true);
|
||||
player.getVariables().set(PlayerVariables.HUNTING_ZONE_RESET_TIME + _zoneId, System.currentTimeMillis() + 18000000); // 300 minutes
|
||||
endTime = currentTime + 18000000; // 300 minutes
|
||||
}
|
||||
|
||||
if (endTime > currentTime)
|
||||
{
|
||||
if (player.getAdena() > 150000)
|
||||
{
|
||||
player.reduceAdena("TimedHuntingZone", 150000, player, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(SystemMessageId.NOT_ENOUGH_ADENA);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (_zoneId)
|
||||
{
|
||||
case 1: // Storm Isle
|
||||
@@ -110,11 +112,13 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
|
||||
break;
|
||||
}
|
||||
}
|
||||
player.startTimedHuntingZone(_zoneId, 18000000); // 300 minutes
|
||||
|
||||
player.getVariables().set(PlayerVariables.HUNTING_ZONE_RESET_TIME + _zoneId, endTime);
|
||||
player.startTimedHuntingZone(_zoneId, endTime - currentTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(SystemMessageId.NOT_ENOUGH_ADENA);
|
||||
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_TIME_AVAILABLE_TO_ENTER_THE_HUNTING_ZONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -18,6 +18,7 @@ package org.l2jmobius.gameserver.network.serverpackets.sessionzones;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
@@ -26,10 +27,12 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
*/
|
||||
public class TimedHuntingZoneList implements IClientOutgoingPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
private final boolean _isInTimedHuntingZone;
|
||||
|
||||
public TimedHuntingZoneList(PlayerInstance player)
|
||||
{
|
||||
_player = player;
|
||||
_isInTimedHuntingZone = player.isInTimedHuntingZone();
|
||||
}
|
||||
|
||||
@@ -38,21 +41,29 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket
|
||||
{
|
||||
OutgoingPackets.EX_TIME_RESTRICT_FIELD_LIST.writeId(packet);
|
||||
|
||||
final long currentTime = System.currentTimeMillis();
|
||||
long endTime;
|
||||
|
||||
packet.writeD(2); // zone count
|
||||
|
||||
// Isle of Storms
|
||||
// Storm Isle
|
||||
packet.writeD(1); // required item count
|
||||
packet.writeD(57); // item id
|
||||
packet.writeQ(150000); // item count
|
||||
packet.writeD(1); // reset cycle
|
||||
packet.writeD(1); // field id
|
||||
packet.writeD(1); // zone id
|
||||
packet.writeD(100); // min level
|
||||
packet.writeD(120); // max level
|
||||
packet.writeD(3600); // remain time base
|
||||
packet.writeD(3600); // remain time
|
||||
packet.writeD(21600); // remain time max
|
||||
packet.writeD(18000); // remain refill time
|
||||
packet.writeD(18000); // refill time max
|
||||
packet.writeD(0); // remain time base?
|
||||
endTime = _player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_RESET_TIME + 1, 0);
|
||||
if ((endTime + 18000000) < currentTime)
|
||||
{
|
||||
endTime = currentTime + 18000000;
|
||||
}
|
||||
packet.writeD((int) (Math.max(endTime - currentTime, 0)) / 1000); // remain time
|
||||
packet.writeD(18000); // remain time max
|
||||
packet.writeD(3600); // remain refill time
|
||||
packet.writeD(3600); // refill time max
|
||||
packet.writeC(_isInTimedHuntingZone ? 0 : 1); // field activated
|
||||
|
||||
// Primeval Isle
|
||||
@@ -60,14 +71,19 @@ public class TimedHuntingZoneList implements IClientOutgoingPacket
|
||||
packet.writeD(57); // item id
|
||||
packet.writeQ(150000); // item count
|
||||
packet.writeD(1); // reset cycle
|
||||
packet.writeD(6); // field id
|
||||
packet.writeD(6); // zone id
|
||||
packet.writeD(105); // min level
|
||||
packet.writeD(120); // max level
|
||||
packet.writeD(3600); // remain time base
|
||||
packet.writeD(3600); // remain time
|
||||
packet.writeD(21600); // remain time max
|
||||
packet.writeD(18000); // remain refill time
|
||||
packet.writeD(18000); // refill time max
|
||||
packet.writeD(0); // remain time base?
|
||||
endTime = _player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_RESET_TIME + 6, 0);
|
||||
if ((endTime + 18000000) < currentTime)
|
||||
{
|
||||
endTime = currentTime + 18000000;
|
||||
}
|
||||
packet.writeD((int) (Math.max(endTime - currentTime, 0)) / 1000); // remain time
|
||||
packet.writeD(18000); // remain time max
|
||||
packet.writeD(3600); // remain refill time
|
||||
packet.writeD(3600); // refill time max
|
||||
packet.writeC(_isInTimedHuntingZone ? 0 : 1); // field activated
|
||||
|
||||
return true;
|
||||
|
Reference in New Issue
Block a user