Addition of AddHuntingTime effect handler.

This commit is contained in:
MobiusDevelopment
2020-01-23 14:54:23 +00:00
parent 86b672924c
commit 3d0bdd0a46
18 changed files with 536 additions and 541 deletions

View File

@@ -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;
}
}

View File

@@ -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);
}
}
}

View File

@@ -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;