DailyTaskManager weekly reset improvements.

Thanks to nasseka.
This commit is contained in:
MobiusDevelopment
2021-06-27 14:58:44 +00:00
parent b6c5d53a3c
commit cabfc01be6
28 changed files with 360 additions and 81 deletions

View File

@@ -3,7 +3,6 @@
<zone id="1" name="Primeval Isle">
<enterLocation>6025,-2274,-2990</enterLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>36000</resetDelay> <!-- 10 hours -->
<maxAddedTime>46800</maxAddedTime> <!-- 13 hours -->
<remainRefillTime>43200</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
@@ -14,7 +13,6 @@
<zone id="4" name="Forgotten Primeval Garden">
<enterLocation>-112937,213590,-13248</enterLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>36000</resetDelay> <!-- 10 hours -->
<maxAddedTime>21600</maxAddedTime> <!-- 6 hours -->
<remainRefillTime>18000</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
@@ -25,7 +23,6 @@
<zone id="11" name="Alligator Island">
<enterLocation>115528,191580,-3371</enterLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>36000</resetDelay> <!-- 10 hours -->
<maxAddedTime>46800</maxAddedTime> <!-- 13 hours -->
<remainRefillTime>7200</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
@@ -36,7 +33,6 @@
<zone id="12" name="Antharas Lair">
<enterLocation>133247,114445,-3724</enterLocation>
<initialTime>25200</initialTime> <!-- 7 hours -->
<resetDelay>604800</resetDelay> <!-- 7 days -->
<maxAddedTime>151200</maxAddedTime> <!-- 42 hours -->
<remainRefillTime>126000</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
@@ -48,7 +44,6 @@
<zone id="101" name="Transcendent Instance Zone 1">
<enterLocation>63443,26304,-3755</enterLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>36000</resetDelay> <!-- 10 hours -->
<maxAddedTime>46800</maxAddedTime> <!-- 13 hours -->
<remainRefillTime>3600</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
@@ -60,7 +55,6 @@
<zone id="102" name="Transcendent Instance Zone 2">
<enterLocation>125277,70262,-4408</enterLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>36000</resetDelay> <!-- 10 hours -->
<maxAddedTime>46800</maxAddedTime> <!-- 13 hours -->
<remainRefillTime>3600</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
@@ -72,7 +66,6 @@
<zone id="103" name="Transcendent Instance Zone 3">
<enterLocation>148724,-22366,-3436</enterLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>36000</resetDelay> <!-- 10 hours -->
<maxAddedTime>46800</maxAddedTime> <!-- 13 hours -->
<remainRefillTime>3600</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
@@ -84,7 +77,6 @@
<zone id="104" name="Transcendent Instance Zone 4">
<enterLocation>167965,28800,-3606</enterLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>36000</resetDelay> <!-- 10 hours -->
<maxAddedTime>46800</maxAddedTime> <!-- 13 hours -->
<remainRefillTime>3600</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
@@ -96,7 +88,6 @@
<zone id="106" name="Transcendent Instance Zone 6">
<enterLocation>99797,110524,-3702</enterLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>36000</resetDelay> <!-- 10 hours -->
<maxAddedTime>46800</maxAddedTime> <!-- 13 hours -->
<remainRefillTime>3600</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>
@@ -108,7 +99,6 @@
<zone id="107" name="Transcendent Instance Zone 7">
<enterLocation>-50416,145363,-2825</enterLocation>
<initialTime>3600</initialTime> <!-- 1 hour -->
<resetDelay>36000</resetDelay> <!-- 10 hours -->
<maxAddedTime>46800</maxAddedTime> <!-- 13 hours -->
<remainRefillTime>3600</remainRefillTime>
<refillTimeMax>3600</refillTimeMax>

View File

@@ -22,6 +22,11 @@
<schedule name="clanLeaderApply" hour="06" minute="30" dayOfWeek="3">
<event name="#onClanLeaderApply" />
</schedule>
<!-- Schedule the weekly timed hunting zones reset task every WEDNESDAY at 6:30 -->
<schedule name="timedHuntingZoneReset" hour="06" minute="30" dayOfWeek="3">
<event name="#onResetTimedHuntingZones" />
</schedule>
</scheduler>
</event>
</list>

View File

@@ -7,7 +7,7 @@
<xs:sequence>
<xs:element type="xs:string" name="enterLocation" />
<xs:element type="xs:int" name="initialTime" />
<xs:element type="xs:int" name="resetDelay" />
<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" />

View File

@@ -31,6 +31,7 @@ import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.data.sql.ClanTable;
import org.l2jmobius.gameserver.data.xml.DailyMissionData;
import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData;
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@@ -42,6 +43,7 @@ import org.l2jmobius.gameserver.model.eventengine.AbstractEventManager;
import org.l2jmobius.gameserver.model.eventengine.ScheduleTarget;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.holders.SubClassHolder;
import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder;
import org.l2jmobius.gameserver.model.olympiad.Olympiad;
import org.l2jmobius.gameserver.model.variables.AccountVariables;
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
@@ -77,6 +79,7 @@ public class DailyTaskManager extends AbstractEventManager<AbstractEvent<?>>
resetVitality();
resetVip();
resetClanDonationPoints();
onResetTimedHuntingZones();
}
@ScheduleTarget
@@ -381,6 +384,41 @@ public class DailyTaskManager extends AbstractEventManager<AbstractEvent<?>>
DailyMissionData.getInstance().getDailyMissionData().forEach(DailyMissionDataHolder::reset);
}
@ScheduleTarget
public void onResetTimedHuntingZones()
{
for (TimedHuntingZoneHolder holder : TimedHuntingZoneData.getInstance().getAllHuntingZones())
{
if (holder.getResetDelay() > 0)
{
continue;
}
// Update data for offline players.
try (Connection con = DatabaseFactory.getConnection();
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.executeUpdate();
}
catch (Exception e)
{
LOGGER.log(Level.SEVERE, "Could not reset Training Camp: ", e);
}
// Update data for online players.
World.getInstance().getPlayers().stream().forEach(player ->
{
player.getVariables().remove(PlayerVariables.HUNTING_ZONE_ENTRY + holder.getZoneId());
player.getVariables().remove(PlayerVariables.HUNTING_ZONE_TIME + holder.getZoneId());
player.getVariables().storeMe();
});
}
LOGGER.info("Special Hunting Zones has been resetted.");
}
public static DailyTaskManager getInstance()
{
return SingletonHolder.INSTANCE;