Timed zones separation.

This commit is contained in:
MobiusDevelopment 2020-01-23 01:43:14 +00:00
parent 12456c3e91
commit e3421df4c4
8 changed files with 74 additions and 33 deletions

View File

@ -14221,18 +14221,40 @@ public class PlayerInstance extends Playable
} }
public boolean isInTimedHuntingZone() public boolean isInTimedHuntingZone()
{
return isInTimedHuntingZone(1) // Storm Isle
|| isInTimedHuntingZone(6); // Primeval Isle
}
public boolean isInTimedHuntingZone(int zoneId)
{ {
final int x = ((getX() - World.MAP_MIN_X) >> 15) + World.TILE_X_MIN; final int x = ((getX() - World.MAP_MIN_X) >> 15) + World.TILE_X_MIN;
final int y = ((getY() - World.MAP_MIN_Y) >> 15) + World.TILE_Y_MIN; final int y = ((getY() - World.MAP_MIN_Y) >> 15) + World.TILE_Y_MIN;
if (((x == 25) && (y == 23)) // Storm Isle.
|| ((x == 20) && (y == 17))) // Primeval Isle. switch (zoneId)
{
case 1: // Storm Isle
{
if ((x == 25) && (y == 23))
{ {
return true; return true;
} }
break;
}
case 6: // Primeval Isle
{
if ((x == 20) && (y == 17))
{
return true;
}
break;
}
}
return false; return false;
} }
public void startTimedHuntingZone(long delay) public void startTimedHuntingZone(int zoneId, long delay)
{ {
// TODO: Delay window. // TODO: Delay window.
// sendPacket(new TimedHuntingZoneEnter((int) (delay / 60 / 1000))); // sendPacket(new TimedHuntingZoneEnter((int) (delay / 60 / 1000)));
@ -14241,7 +14263,7 @@ public class PlayerInstance extends Playable
_timedHuntingZoneFinishTask = ThreadPool.schedule(() -> _timedHuntingZoneFinishTask = ThreadPool.schedule(() ->
{ {
if ((isOnlineInt() > 0) && isInTimedHuntingZone()) if ((isOnlineInt() > 0) && isInTimedHuntingZone(zoneId))
{ {
sendPacket(TimedHuntingZoneExit.STATIC_PACKET); sendPacket(TimedHuntingZoneExit.STATIC_PACKET);
abortCast(); abortCast();

View File

@ -63,7 +63,7 @@ public class PlayerVariables extends AbstractVariables
public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling";
public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat";
public static final String DELUSION_RETURN = "DELUSION_RETURN"; public static final String DELUSION_RETURN = "DELUSION_RETURN";
public static final String HUNTING_ZONE_RESET_TIME = "HUNTING_ZONE_RESET_TIME"; public static final String HUNTING_ZONE_RESET_TIME = "HUNTING_ZONE_RESET_TIME_";
private final int _objectId; private final int _objectId;

View File

@ -648,10 +648,15 @@ public class EnterWorld implements IClientIncomingPacket
} }
// Check if in time limited hunting zone. // Check if in time limited hunting zone.
final long exitTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_RESET_TIME, 0); final long stormIsleExitTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_RESET_TIME + 1, 0);
if (exitTime > System.currentTimeMillis()) final long primevalIsleExitTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_RESET_TIME + 6, 0);
if (stormIsleExitTime > System.currentTimeMillis())
{ {
player.startTimedHuntingZone(exitTime - System.currentTimeMillis()); player.startTimedHuntingZone(1, stormIsleExitTime - System.currentTimeMillis());
}
else if (primevalIsleExitTime > System.currentTimeMillis())
{
player.startTimedHuntingZone(6, primevalIsleExitTime - System.currentTimeMillis());
} }
else if (player.isInTimedHuntingZone()) else if (player.isInTimedHuntingZone())
{ {

View File

@ -29,12 +29,12 @@ import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
*/ */
public class ExTimedHuntingZoneEnter implements IClientIncomingPacket public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
{ {
private int _fieldId; private int _zoneId;
@Override @Override
public boolean read(GameClient client, PacketReader packet) public boolean read(GameClient client, PacketReader packet)
{ {
_fieldId = packet.readD(); _zoneId = packet.readD();
return true; return true;
} }
@ -73,7 +73,7 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
return; return;
} }
if (player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_RESET_TIME, 0) > System.currentTimeMillis()) if (player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_RESET_TIME + _zoneId, 0) > System.currentTimeMillis())
{ {
if (player.isInTimedHuntingZone()) if (player.isInTimedHuntingZone())
{ {
@ -86,18 +86,18 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
return; return;
} }
if (((_fieldId == 1) && (player.getLevel() < 100)) // if (((_zoneId == 1) && (player.getLevel() < 100)) //
|| ((_fieldId == 6) && (player.getLevel() < 105)) // || ((_zoneId == 6) && (player.getLevel() < 105)) //
) )
{ {
player.sendMessage("Your level is too low."); player.sendMessage("Your level does not corespont the zone equivalent.");
} }
if (player.getAdena() > 150000) if (player.getAdena() > 150000)
{ {
player.reduceAdena("TimedHuntingZone", 150000, player, true); player.reduceAdena("TimedHuntingZone", 150000, player, true);
player.getVariables().set(PlayerVariables.HUNTING_ZONE_RESET_TIME, System.currentTimeMillis() + 18000000); // 300 minutes player.getVariables().set(PlayerVariables.HUNTING_ZONE_RESET_TIME + _zoneId, System.currentTimeMillis() + 18000000); // 300 minutes
switch (_fieldId) switch (_zoneId)
{ {
case 1: // Storm Isle case 1: // Storm Isle
{ {
@ -110,7 +110,7 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
break; break;
} }
} }
player.startTimedHuntingZone(18000000); // 300 minutes player.startTimedHuntingZone(_zoneId, 18000000); // 300 minutes
} }
else else
{ {

View File

@ -14167,17 +14167,31 @@ public class PlayerInstance extends Playable
} }
public boolean isInTimedHuntingZone() public boolean isInTimedHuntingZone()
{
return isInTimedHuntingZone(2); // Storm Isle
}
public boolean isInTimedHuntingZone(int zoneId)
{ {
final int x = ((getX() - World.MAP_MIN_X) >> 15) + World.TILE_X_MIN; final int x = ((getX() - World.MAP_MIN_X) >> 15) + World.TILE_X_MIN;
final int y = ((getY() - World.MAP_MIN_Y) >> 15) + World.TILE_Y_MIN; final int y = ((getY() - World.MAP_MIN_Y) >> 15) + World.TILE_Y_MIN;
if ((x == 20) && (y == 15)) // Ancient Pirates' Tomb.
switch (zoneId)
{
case 2: // Ancient Pirates' Tomb.
{
if ((x == 20) && (y == 15))
{ {
return true; return true;
} }
break;
}
}
return false; return false;
} }
public void startTimedHuntingZone(long delay) public void startTimedHuntingZone(int zoneId, long delay)
{ {
// TODO: Delay window. // TODO: Delay window.
// sendPacket(new TimedHuntingZoneEnter((int) (delay / 60 / 1000))); // sendPacket(new TimedHuntingZoneEnter((int) (delay / 60 / 1000)));
@ -14186,7 +14200,7 @@ public class PlayerInstance extends Playable
_timedHuntingZoneFinishTask = ThreadPool.schedule(() -> _timedHuntingZoneFinishTask = ThreadPool.schedule(() ->
{ {
if ((isOnlineInt() > 0) && isInTimedHuntingZone()) if ((isOnlineInt() > 0) && isInTimedHuntingZone(zoneId))
{ {
sendPacket(TimedHuntingZoneExit.STATIC_PACKET); sendPacket(TimedHuntingZoneExit.STATIC_PACKET);
abortCast(); abortCast();

View File

@ -63,7 +63,7 @@ public class PlayerVariables extends AbstractVariables
public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling";
public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat";
public static final String DELUSION_RETURN = "DELUSION_RETURN"; public static final String DELUSION_RETURN = "DELUSION_RETURN";
public static final String HUNTING_ZONE_RESET_TIME = "HUNTING_ZONE_RESET_TIME"; public static final String HUNTING_ZONE_RESET_TIME = "HUNTING_ZONE_RESET_TIME_";
private final int _objectId; private final int _objectId;

View File

@ -633,10 +633,10 @@ public class EnterWorld implements IClientIncomingPacket
} }
// Check if in time limited hunting zone. // Check if in time limited hunting zone.
final long exitTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_RESET_TIME, 0); final long pirateTombExitTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_RESET_TIME + 2, 0);
if (exitTime > System.currentTimeMillis()) if (pirateTombExitTime > System.currentTimeMillis())
{ {
player.startTimedHuntingZone(exitTime - System.currentTimeMillis()); player.startTimedHuntingZone(2, pirateTombExitTime - System.currentTimeMillis());
} }
else if (player.isInTimedHuntingZone()) else if (player.isInTimedHuntingZone())
{ {

View File

@ -28,12 +28,12 @@ import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
*/ */
public class ExTimedHuntingZoneEnter implements IClientIncomingPacket public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
{ {
private int _fieldId; private int _zoneId;
@Override @Override
public boolean read(GameClient client, PacketReader packet) public boolean read(GameClient client, PacketReader packet)
{ {
_fieldId = packet.readD(); _zoneId = packet.readD();
return true; return true;
} }
@ -72,7 +72,7 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
return; return;
} }
if (player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_RESET_TIME, 0) > System.currentTimeMillis()) if (player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_RESET_TIME + _zoneId, 0) > System.currentTimeMillis())
{ {
if (player.isInTimedHuntingZone()) if (player.isInTimedHuntingZone())
{ {
@ -85,7 +85,7 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
return; return;
} }
if ((_fieldId == 2) && (player.getLevel() < 78)) if ((_zoneId == 2) && (player.getLevel() < 78))
{ {
player.sendMessage("Your level is too low."); player.sendMessage("Your level is too low.");
} }
@ -93,8 +93,8 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
if (player.getAdena() > 10000) if (player.getAdena() > 10000)
{ {
player.reduceAdena("TimedHuntingZone", 10000, player, true); player.reduceAdena("TimedHuntingZone", 10000, player, true);
player.getVariables().set(PlayerVariables.HUNTING_ZONE_RESET_TIME, System.currentTimeMillis() + 18000000); // 300 minutes player.getVariables().set(PlayerVariables.HUNTING_ZONE_RESET_TIME + _zoneId, System.currentTimeMillis() + 18000000); // 300 minutes
switch (_fieldId) switch (_zoneId)
{ {
case 2: // Ancient Pirates' Tomb case 2: // Ancient Pirates' Tomb
{ {
@ -102,7 +102,7 @@ public class ExTimedHuntingZoneEnter implements IClientIncomingPacket
break; break;
} }
} }
player.startTimedHuntingZone(18000000); // 300 minutes player.startTimedHuntingZone(_zoneId, 18000000); // 300 minutes
} }
else else
{ {