Timed hunting zone rework.

Contributed by dontknowdontcare.
This commit is contained in:
MobiusDevelopment
2022-08-23 23:40:25 +00:00
parent e9b5d1101c
commit 035eb24568
141 changed files with 2728 additions and 952 deletions

View File

@@ -1,34 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<list enabled="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/TimedHuntingZoneData.xsd">
<zone id="1" name="Storm Isle">
<enterLocation>194291,176604,-1888</enterLocation>
<enterLocation>194284,176597,-1888</enterLocation>
<exitLocation>110975,220094,-3664</exitLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>864000</resetDelay> <!-- 10 days -->
<maxAddedTime>21600</maxAddedTime> <!-- 6 hours -->
<remainRefillTime>7200</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
<refillTimeMax>7200</refillTimeMax>
<entryFee>150000</entryFee>
<minLevel>100</minLevel>
<maxLevel>130</maxLevel>
<soloInstance>false</soloInstance>
<noPvpZone>true</noPvpZone>
</zone>
<zone id="6" name="Primeval Isle">
<enterLocation>9400,-21720,-3634</enterLocation>
<enterLocation>9365,-21407,-3584</enterLocation>
<exitLocation>43792,-48928,-792</exitLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>864000</resetDelay> <!-- 10 days -->
<maxAddedTime>21600</maxAddedTime> <!-- 6 hours -->
<remainRefillTime>7200</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
<refillTimeMax>7200</refillTimeMax>
<entryFee>150000</entryFee>
<minLevel>105</minLevel>
<maxLevel>130</maxLevel>
<soloInstance>false</soloInstance>
</zone>
<zone id="7" name="Isle of Souls">
<enterLocation>-122259,73678,-2872</enterLocation>
<enterLocation>-122260,73669,-2872</enterLocation>
<exitLocation>148353,28032,-2264</exitLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>86400</resetDelay> <!-- 10 days -->
<maxAddedTime>21600</maxAddedTime> <!-- 6 hours -->
<remainRefillTime>7200</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
<refillTimeMax>7200</refillTimeMax>
<entryFee>150000</entryFee>
<minLevel>107</minLevel>
<maxLevel>130</maxLevel>
@@ -36,22 +39,23 @@
<soloInstance>false</soloInstance>
</zone>
<zone id="11" name="Abandoned Coal Mines">
<enterLocation>139411,-169382,-1600</enterLocation>
<enterLocation>139405,-169389,-1600</enterLocation>
<exitLocation>146561,28042,-2264</exitLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>864000</resetDelay> <!-- 10 days -->
<maxAddedTime>21600</maxAddedTime> <!-- 6 hours -->
<remainRefillTime>18000</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
<refillTimeMax>18000</refillTimeMax>
<entryFee>150000</entryFee>
<minLevel>99</minLevel>
<maxLevel>105</maxLevel>
<soloInstance>false</soloInstance>
<noPvpZone>true</noPvpZone>
</zone>
<zone id="20" name="Tower of Insolence (01 - 09 flours)">
<enterLocation>-82014,16247,-15416</enterLocation>
<initialTime>36000</initialTime> <!-- 10 hours -->
<resetDelay>864000</resetDelay> <!-- 10 days -->
<maxAddedTime>54000</maxAddedTime> <!-- 15 hours -->
<remainRefillTime>18000</remainRefillTime> <!-- 300 mins -->
<refillTimeMax>3600</refillTimeMax>
<entryFee>1500000</entryFee>
<minLevel>110</minLevel>
@@ -62,22 +66,23 @@
<useWorldPrefix>true</useWorldPrefix>
</zone>
<zone id="12" name="Imperial Tomb">
<enterLocation>181409,-78389,-2728</enterLocation>
<enterLocation>181406,-78395,-2728</enterLocation>
<exitLocation>147714,-55409,-2728</exitLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>864000</resetDelay> <!-- 10 days -->
<maxAddedTime>3600</maxAddedTime> <!-- 1 hour -->
<remainRefillTime>0</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
<refillTimeMax>0</refillTimeMax>
<entryFee>150000</entryFee>
<minLevel>105</minLevel>
<maxLevel>130</maxLevel>
<soloInstance>false</soloInstance>
</zone>
<zone id="13" name="Corroded Fields">
<enterLocation>90327,198818,-3280</enterLocation>
<enterLocation>90359,198833,-3280</enterLocation>
<exitLocation>111563,220512,-3664</exitLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>36000</resetDelay> <!-- 10 hours -->
<maxAddedTime>21600</maxAddedTime> <!-- 3 hours -->
<remainRefillTime>18000</remainRefillTime>
<refillTimeMax>36000</refillTimeMax>
<entryFee>150000</entryFee>
<minLevel>100</minLevel>
@@ -86,15 +91,17 @@
<soloInstance>false</soloInstance>
</zone>
<zone id="15" name="Otherworldly Atelia Refinery">
<enterLocation>-49013,15351,-8808</enterLocation>
<enterLocation>-49020,15369,-8808</enterLocation>
<exitLocation>82795,53888,-1488</exitLocation>
<initialTime>36000</initialTime> <!-- 10 hour -->
<resetDelay>864000</resetDelay> <!-- 10 days -->
<maxAddedTime>43200</maxAddedTime> <!-- 12 hours -->
<remainRefillTime>0</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
<refillTimeMax>7200</refillTimeMax>
<entryFee>1500000</entryFee>
<minLevel>112</minLevel>
<maxLevel>130</maxLevel>
<soloInstance>false</soloInstance>
<weekly>true</weekly>
<noPvpZone>true</noPvpZone>
</zone>
</list>

View File

@@ -25,8 +25,7 @@ import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
import org.l2jmobius.gameserver.network.serverpackets.huntingzones.TimedHuntingZoneEnter;
import org.l2jmobius.gameserver.network.serverpackets.huntingzones.TimedHuntingZoneList;
import org.l2jmobius.gameserver.network.serverpackets.huntingzones.TimedHuntingZoneChargeResult;
/**
* @author Mobius
@@ -64,7 +63,7 @@ public class AddHuntingTime extends AbstractEffect
}
final long currentTime = System.currentTimeMillis();
final long endTime = currentTime + player.getTimedHuntingZoneRemainingTime(_zoneId);
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);
@@ -72,24 +71,37 @@ 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))
long remainRefillTime = player.getVariables().getLong(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL + _zoneId, holder.getRefillTimeMax());
remainRefillTime -= _time / 1000;
if (remainRefillTime < 0)
{
player.getInventory().addItem("AddHuntingTime effect refund", item.getId(), 1, player, player);
player.sendMessage("You cannot exceed the time zone limit.");
player.sendMessage("Time for this zone can be extended no further.");
return;
}
player.getVariables().set(PlayerVariables.HUNTING_ZONE_REMAIN_REFILL + _zoneId, remainRefillTime);
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));
final long remainTime;
if (player.isInTimedHuntingZone(_zoneId))
{
remainTime = _time + player.getTimedHuntingZoneRemainingTime(_zoneId);
player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, remainTime);
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;
}
remainTime = (endTime - currentTime) + _time;
player.getVariables().set(PlayerVariables.HUNTING_ZONE_TIME + _zoneId, remainTime);
}
player.sendPacket(new TimedHuntingZoneList(player));
player.sendPacket(new TimedHuntingZoneChargeResult(_zoneId, (int) (remainTime / 1000), (int) remainRefillTime));
}
}

View File

@@ -10,7 +10,6 @@
<xs:element type="xs:int" name="initialTime" />
<xs:element type="xs:int" name="resetDelay" minOccurs="0" />
<xs:element type="xs:int" name="maxAddedTime" />
<xs:element type="xs:int" name="remainRefillTime" minOccurs="0" />
<xs:element type="xs:int" name="refillTimeMax" minOccurs="0" />
<xs:element type="xs:int" name="entryItemId" minOccurs="0" />
<xs:element type="xs:int" name="entryFee" />
@@ -20,6 +19,8 @@
<xs:element type="xs:boolean" name="soloInstance" minOccurs="0" />
<xs:element type="xs:boolean" name="weekly" minOccurs="0" />
<xs:element type="xs:boolean" name="useWorldPrefix" minOccurs="0" />
<xs:element type="xs:boolean" name="pvpZone" minOccurs="0" />
<xs:element type="xs:boolean" name="noPvpZone" minOccurs="0" />
</xs:sequence>
<xs:attribute type="xs:byte" name="id" use="optional" />
<xs:attribute type="xs:string" name="name" use="optional" />
@@ -29,4 +30,4 @@
<xs:attribute type="xs:boolean" name="enabled" />
</xs:complexType>
</xs:element>
</xs:schema>
</xs:schema>