L2JMobius

High Five Territory War Next Date

Avanael · 2 · 6434

Offline Avanael

  • Vassal
  • *
    • Posts: 5
At the end of territory war, the next date for TW is not being set. Instead it's being set the next time TerritoryWarSuperClass.java is called and it's not happening until server restart. Daily restart is a common thing in which case the code always sets the date on the next weekend and thus the additional week in advance is not going to be added.

Code: [Select]
diff --git a/dist/game/data/scripts/quests/TerritoryWarScripts/TerritoryWarSuperClass.java b/dist/game/data/scripts/quests/TerritoryWarScripts/TerritoryWarSuperClass.java
index e9cbe07..3224662 100644
--- a/dist/game/data/scripts/quests/TerritoryWarScripts/TerritoryWarSuperClass.java
+++ b/dist/game/data/scripts/quests/TerritoryWarScripts/TerritoryWarSuperClass.java
@@ -19,8 +19,6 @@
 import java.util.Calendar;
 
 import org.l2jmobius.commons.util.CommonUtil;
-import org.l2jmobius.gameserver.instancemanager.CastleManager;
-import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
 import org.l2jmobius.gameserver.instancemanager.TerritoryWarManager;
 import org.l2jmobius.gameserver.instancemanager.TerritoryWarManager.TerritoryNPCSpawn;
 import org.l2jmobius.gameserver.model.TerritoryWard;
@@ -70,34 +68,9 @@
  addSkillSeeId(36590);
 
  // Calculate next TW date
- final Calendar cal = Calendar.getInstance();
-
- final long nextSiegeDate = GlobalVariablesManager.getInstance().getLong(TerritoryWarManager.GLOBAL_VARIABLE, 0);
- if (nextSiegeDate > System.currentTimeMillis())
- {
- cal.setTimeInMillis(nextSiegeDate);
- }
- else
- {
- // Let's check if territory war date was in the past
- if (cal.before(Calendar.getInstance()))
- {
- cal.setTimeInMillis(System.currentTimeMillis());
- }
-
- final boolean hasOwnedCastle = CastleManager.getInstance().hasOwnedCastle();
- cal.set(Calendar.DAY_OF_WEEK, hasOwnedCastle ? Calendar.SATURDAY : Calendar.SUNDAY);
- cal.set(Calendar.HOUR_OF_DAY, hasOwnedCastle ? 20 : 22);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- if (cal.before(Calendar.getInstance()))
- {
- cal.add(Calendar.WEEK_OF_YEAR, 2);
- }
- GlobalVariablesManager.getInstance().set(TerritoryWarManager.GLOBAL_VARIABLE, cal.getTimeInMillis());
- }
- TerritoryWarManager.getInstance().setTWStartTimeInMillis(cal.getTimeInMillis());
- LOGGER.info(getClass().getSimpleName() + ": Siege date: " + cal.getTime());
+ // Custom: Repositioned Code for next TW date to TerritoryWarManager
+ TerritoryWarManager.getInstance().setNextTWDate();
+ LOGGER.info(getClass().getSimpleName() + ": Siege date: " + TerritoryWarManager.getInstance().getTWStart().getTime());
  }
  }

diff --git a/java/org/l2jmobius/gameserver/instancemanager/TerritoryWarManager.java b/java/org/l2jmobius/gameserver/instancemanager/TerritoryWarManager.java
index 963c7ef..04ecc2a 100644
--- a/java/org/l2jmobius/gameserver/instancemanager/TerritoryWarManager.java
+++ b/java/org/l2jmobius/gameserver/instancemanager/TerritoryWarManager.java
@@ -1117,10 +1117,45 @@
  }
 
  // change next TW date
+ // Custom: Added missing set next date after TW ends
+ setNextTWDate();
  final SystemMessage sm = new SystemMessage(SystemMessageId.TERRITORY_WAR_HAS_ENDED);
  Broadcast.toAllOnlinePlayers(sm);
  }
 
+ /*
+ * Custom: Repositioned code for next TW date from TerritoryWarSuperClass
+ */
+ public void setNextTWDate()
+ {
+ final Calendar cal = Calendar.getInstance();
+
+ final long nextSiegeDate = GlobalVariablesManager.getInstance().getLong(GLOBAL_VARIABLE, 0);
+ if (nextSiegeDate > System.currentTimeMillis())
+ {
+ cal.setTimeInMillis(nextSiegeDate);
+ }
+ else
+ {
+ // Let's check if territory war date was in the past
+ if (cal.before(Calendar.getInstance()))
+ {
+ cal.setTimeInMillis(System.currentTimeMillis());
+ }
+
+ final boolean hasOwnedCastle = CastleManager.getInstance().hasOwnedCastle();
+ cal.set(Calendar.DAY_OF_WEEK, hasOwnedCastle ? Calendar.SATURDAY : Calendar.SUNDAY);
+ cal.set(Calendar.HOUR_OF_DAY, hasOwnedCastle ? 20 : 22);
+         cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ if (cal.before(Calendar.getInstance()))
+ {
+ cal.add(Calendar.WEEK_OF_YEAR, 2);
+ }
+ GlobalVariablesManager.getInstance().set(GLOBAL_VARIABLE, cal.getTimeInMillis());
+ }
+ setTWStartTimeInMillis(cal.getTimeInMillis());
+ }
+

This is how I did it. I repositioned the code to be accessible in core and added it when TW ends. Since then the date has been set correctly.


Online Mobius

  • Distinguished King
  • *****
    • Posts: 16041
Moved to contributions section.
This has been slightly tweaked and committed to the private version.