diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/config/Olympiad.ini b/L2J_Mobius_1.0_Ertheia/dist/game/config/Olympiad.ini index 5f742b45f0..7adeef58e8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/config/Olympiad.ini +++ b/L2J_Mobius_1.0_Ertheia/dist/game/config/Olympiad.ini @@ -159,4 +159,30 @@ AltOlyMaxWeeklyMatchesClassed = 50 # Maximum number of Class-Irrelevant Team matches a character can join per week # Default: 10 -AltOlyMaxWeeklyMatchesTeam = 10 \ No newline at end of file +AltOlyMaxWeeklyMatchesTeam = 10 + + +# --------------------------------------------------------------------------- +# Custom Olympiad period settings +# --------------------------------------------------------------------------- +# Example for Olympiad every 2 weeks: +# AltOlyUseCustomPeriodSettings = True +# AltOlyPeriod = WEEK +# AltOlyPeriodMultiplier = 2 +# --------------------------------------------------------------------------- +# Enable/disable custom period settings. +# Default: False +AltOlyUseCustomPeriodSettings = False + +# Change the type of delay between two Olympiads. +# Available values: MONTH, WEEK, DAY +# Default: MONTH +AltOlyPeriodType = MONTH + +# Change the Olympiad frequency. +# The value is a multiplier of period type, +# i.e. if type is MONTH and multiplier is 2, +# then Olympiad will occur every 2 months. +# Default: 1 +# Note! If type = DAY, multiplier must be >= 7! +AltOlyPeriodMultiplier = 1 diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/Config.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/Config.java index 276b470dde..4b4883df5a 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/Config.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/Config.java @@ -536,6 +536,9 @@ public final class Config public static List LIST_OLY_RESTRICTED_ITEMS; public static int ALT_OLY_ENCHANT_LIMIT; public static int ALT_OLY_WAIT_TIME; + public static boolean ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS; + public static String ALT_OLY_PERIOD; + public static int ALT_OLY_PERIOD_MULTIPLIER; public static int ALT_MANOR_REFRESH_TIME; public static int ALT_MANOR_REFRESH_MIN; public static int ALT_MANOR_APPROVE_TIME; @@ -2274,6 +2277,9 @@ public final class Config } ALT_OLY_ENCHANT_LIMIT = Olympiad.getInt("AltOlyEnchantLimit", -1); ALT_OLY_WAIT_TIME = Olympiad.getInt("AltOlyWaitTime", 60); + ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS = Olympiad.getBoolean("AltOlyUseCustomPeriodSettings", false); + ALT_OLY_PERIOD = Olympiad.getString("AltOlyPeriod", "MONTH"); + ALT_OLY_PERIOD_MULTIPLIER = Olympiad.getInt("AltOlyPeriodMultiplier", 1); final File hexIdFile = new File(HEXID_FILE); if (hexIdFile.exists()) diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java index 69f4e4b96c..2087510b72 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java @@ -546,20 +546,80 @@ public class Olympiad extends ListenersContainer { final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ROUND_S1_OF_THE_OLYMPIAD_GAMES_HAS_STARTED); sm.addInt(_currentCycle); - Broadcast.toAllOnlinePlayers(sm); - final Calendar currentTime = Calendar.getInstance(); - currentTime.add(Calendar.MONTH, 1); - currentTime.set(Calendar.DAY_OF_MONTH, 1); - currentTime.set(Calendar.AM_PM, Calendar.AM); - currentTime.set(Calendar.HOUR, 12); - currentTime.set(Calendar.MINUTE, 0); - currentTime.set(Calendar.SECOND, 0); - _olympiadEnd = currentTime.getTimeInMillis(); + if (!Config.ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS) + { + final Calendar currentTime = Calendar.getInstance(); + currentTime.add(Calendar.MONTH, 1); + currentTime.set(Calendar.DAY_OF_MONTH, 1); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + _olympiadEnd = currentTime.getTimeInMillis(); + + final Calendar nextChange = Calendar.getInstance(); + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + Calendar currentTime = Calendar.getInstance(); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + + Calendar nextChange = Calendar.getInstance(); + + switch (Config.ALT_OLY_PERIOD) + { + case "DAY": + { + currentTime.add(Calendar.DAY_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 14) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 7) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + else + { + LOGGER.warning("Invalid config value for Config.ALT_OLY_PERIOD_MULTIPLIER, must be >= 7"); + } + break; + } + case "WEEK": + { + currentTime.add(Calendar.WEEK_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER > 1) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + break; + } + case "MONTH": + { + currentTime.add(Calendar.MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + break; + } + } + _olympiadEnd = currentTime.getTimeInMillis(); + } - final Calendar nextChange = Calendar.getInstance(); - _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; scheduleWeeklyChange(); } diff --git a/L2J_Mobius_2.5_Underground/dist/game/config/Olympiad.ini b/L2J_Mobius_2.5_Underground/dist/game/config/Olympiad.ini index e53687f83c..3f6f4bdde8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/config/Olympiad.ini +++ b/L2J_Mobius_2.5_Underground/dist/game/config/Olympiad.ini @@ -159,4 +159,30 @@ AltOlyMaxWeeklyMatchesClassed = 30 # Maximum number of Class-Irrelevant Team matches a character can join per week # Default: 10 -AltOlyMaxWeeklyMatchesTeam = 10 \ No newline at end of file +AltOlyMaxWeeklyMatchesTeam = 10 + + +# --------------------------------------------------------------------------- +# Custom Olympiad period settings +# --------------------------------------------------------------------------- +# Example for Olympiad every 2 weeks: +# AltOlyUseCustomPeriodSettings = True +# AltOlyPeriod = WEEK +# AltOlyPeriodMultiplier = 2 +# --------------------------------------------------------------------------- +# Enable/disable custom period settings. +# Default: False +AltOlyUseCustomPeriodSettings = False + +# Change the type of delay between two Olympiads. +# Available values: MONTH, WEEK, DAY +# Default: MONTH +AltOlyPeriodType = MONTH + +# Change the Olympiad frequency. +# The value is a multiplier of period type, +# i.e. if type is MONTH and multiplier is 2, +# then Olympiad will occur every 2 months. +# Default: 1 +# Note! If type = DAY, multiplier must be >= 7! +AltOlyPeriodMultiplier = 1 diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/Config.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/Config.java index ee7153c925..cb9d6c83a8 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/Config.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/Config.java @@ -543,6 +543,9 @@ public final class Config public static List LIST_OLY_RESTRICTED_ITEMS; public static int ALT_OLY_ENCHANT_LIMIT; public static int ALT_OLY_WAIT_TIME; + public static boolean ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS; + public static String ALT_OLY_PERIOD; + public static int ALT_OLY_PERIOD_MULTIPLIER; public static int ALT_MANOR_REFRESH_TIME; public static int ALT_MANOR_REFRESH_MIN; public static int ALT_MANOR_APPROVE_TIME; @@ -2290,6 +2293,9 @@ public final class Config } ALT_OLY_ENCHANT_LIMIT = Olympiad.getInt("AltOlyEnchantLimit", -1); ALT_OLY_WAIT_TIME = Olympiad.getInt("AltOlyWaitTime", 60); + ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS = Olympiad.getBoolean("AltOlyUseCustomPeriodSettings", false); + ALT_OLY_PERIOD = Olympiad.getString("AltOlyPeriod", "MONTH"); + ALT_OLY_PERIOD_MULTIPLIER = Olympiad.getInt("AltOlyPeriodMultiplier", 1); final File hexIdFile = new File(HEXID_FILE); if (hexIdFile.exists()) diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java index 69f4e4b96c..2087510b72 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java @@ -546,20 +546,80 @@ public class Olympiad extends ListenersContainer { final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ROUND_S1_OF_THE_OLYMPIAD_GAMES_HAS_STARTED); sm.addInt(_currentCycle); - Broadcast.toAllOnlinePlayers(sm); - final Calendar currentTime = Calendar.getInstance(); - currentTime.add(Calendar.MONTH, 1); - currentTime.set(Calendar.DAY_OF_MONTH, 1); - currentTime.set(Calendar.AM_PM, Calendar.AM); - currentTime.set(Calendar.HOUR, 12); - currentTime.set(Calendar.MINUTE, 0); - currentTime.set(Calendar.SECOND, 0); - _olympiadEnd = currentTime.getTimeInMillis(); + if (!Config.ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS) + { + final Calendar currentTime = Calendar.getInstance(); + currentTime.add(Calendar.MONTH, 1); + currentTime.set(Calendar.DAY_OF_MONTH, 1); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + _olympiadEnd = currentTime.getTimeInMillis(); + + final Calendar nextChange = Calendar.getInstance(); + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + Calendar currentTime = Calendar.getInstance(); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + + Calendar nextChange = Calendar.getInstance(); + + switch (Config.ALT_OLY_PERIOD) + { + case "DAY": + { + currentTime.add(Calendar.DAY_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 14) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 7) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + else + { + LOGGER.warning("Invalid config value for Config.ALT_OLY_PERIOD_MULTIPLIER, must be >= 7"); + } + break; + } + case "WEEK": + { + currentTime.add(Calendar.WEEK_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER > 1) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + break; + } + case "MONTH": + { + currentTime.add(Calendar.MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + break; + } + } + _olympiadEnd = currentTime.getTimeInMillis(); + } - final Calendar nextChange = Calendar.getInstance(); - _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; scheduleWeeklyChange(); } diff --git a/L2J_Mobius_3.0_Helios/dist/game/config/Olympiad.ini b/L2J_Mobius_3.0_Helios/dist/game/config/Olympiad.ini index e53687f83c..3f6f4bdde8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/config/Olympiad.ini +++ b/L2J_Mobius_3.0_Helios/dist/game/config/Olympiad.ini @@ -159,4 +159,30 @@ AltOlyMaxWeeklyMatchesClassed = 30 # Maximum number of Class-Irrelevant Team matches a character can join per week # Default: 10 -AltOlyMaxWeeklyMatchesTeam = 10 \ No newline at end of file +AltOlyMaxWeeklyMatchesTeam = 10 + + +# --------------------------------------------------------------------------- +# Custom Olympiad period settings +# --------------------------------------------------------------------------- +# Example for Olympiad every 2 weeks: +# AltOlyUseCustomPeriodSettings = True +# AltOlyPeriod = WEEK +# AltOlyPeriodMultiplier = 2 +# --------------------------------------------------------------------------- +# Enable/disable custom period settings. +# Default: False +AltOlyUseCustomPeriodSettings = False + +# Change the type of delay between two Olympiads. +# Available values: MONTH, WEEK, DAY +# Default: MONTH +AltOlyPeriodType = MONTH + +# Change the Olympiad frequency. +# The value is a multiplier of period type, +# i.e. if type is MONTH and multiplier is 2, +# then Olympiad will occur every 2 months. +# Default: 1 +# Note! If type = DAY, multiplier must be >= 7! +AltOlyPeriodMultiplier = 1 diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/Config.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/Config.java index 57917084f0..fdfbdb3f3a 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/Config.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/Config.java @@ -543,6 +543,9 @@ public final class Config public static List LIST_OLY_RESTRICTED_ITEMS; public static int ALT_OLY_ENCHANT_LIMIT; public static int ALT_OLY_WAIT_TIME; + public static boolean ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS; + public static String ALT_OLY_PERIOD; + public static int ALT_OLY_PERIOD_MULTIPLIER; public static int ALT_MANOR_REFRESH_TIME; public static int ALT_MANOR_REFRESH_MIN; public static int ALT_MANOR_APPROVE_TIME; @@ -2299,6 +2302,9 @@ public final class Config } ALT_OLY_ENCHANT_LIMIT = Olympiad.getInt("AltOlyEnchantLimit", -1); ALT_OLY_WAIT_TIME = Olympiad.getInt("AltOlyWaitTime", 60); + ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS = Olympiad.getBoolean("AltOlyUseCustomPeriodSettings", false); + ALT_OLY_PERIOD = Olympiad.getString("AltOlyPeriod", "MONTH"); + ALT_OLY_PERIOD_MULTIPLIER = Olympiad.getInt("AltOlyPeriodMultiplier", 1); final File hexIdFile = new File(HEXID_FILE); if (hexIdFile.exists()) diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java index 69f4e4b96c..2087510b72 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java @@ -546,20 +546,80 @@ public class Olympiad extends ListenersContainer { final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ROUND_S1_OF_THE_OLYMPIAD_GAMES_HAS_STARTED); sm.addInt(_currentCycle); - Broadcast.toAllOnlinePlayers(sm); - final Calendar currentTime = Calendar.getInstance(); - currentTime.add(Calendar.MONTH, 1); - currentTime.set(Calendar.DAY_OF_MONTH, 1); - currentTime.set(Calendar.AM_PM, Calendar.AM); - currentTime.set(Calendar.HOUR, 12); - currentTime.set(Calendar.MINUTE, 0); - currentTime.set(Calendar.SECOND, 0); - _olympiadEnd = currentTime.getTimeInMillis(); + if (!Config.ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS) + { + final Calendar currentTime = Calendar.getInstance(); + currentTime.add(Calendar.MONTH, 1); + currentTime.set(Calendar.DAY_OF_MONTH, 1); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + _olympiadEnd = currentTime.getTimeInMillis(); + + final Calendar nextChange = Calendar.getInstance(); + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + Calendar currentTime = Calendar.getInstance(); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + + Calendar nextChange = Calendar.getInstance(); + + switch (Config.ALT_OLY_PERIOD) + { + case "DAY": + { + currentTime.add(Calendar.DAY_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 14) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 7) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + else + { + LOGGER.warning("Invalid config value for Config.ALT_OLY_PERIOD_MULTIPLIER, must be >= 7"); + } + break; + } + case "WEEK": + { + currentTime.add(Calendar.WEEK_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER > 1) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + break; + } + case "MONTH": + { + currentTime.add(Calendar.MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + break; + } + } + _olympiadEnd = currentTime.getTimeInMillis(); + } - final Calendar nextChange = Calendar.getInstance(); - _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; scheduleWeeklyChange(); } diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/config/Olympiad.ini b/L2J_Mobius_4.0_GrandCrusade/dist/game/config/Olympiad.ini index e53687f83c..3f6f4bdde8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/config/Olympiad.ini +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/config/Olympiad.ini @@ -159,4 +159,30 @@ AltOlyMaxWeeklyMatchesClassed = 30 # Maximum number of Class-Irrelevant Team matches a character can join per week # Default: 10 -AltOlyMaxWeeklyMatchesTeam = 10 \ No newline at end of file +AltOlyMaxWeeklyMatchesTeam = 10 + + +# --------------------------------------------------------------------------- +# Custom Olympiad period settings +# --------------------------------------------------------------------------- +# Example for Olympiad every 2 weeks: +# AltOlyUseCustomPeriodSettings = True +# AltOlyPeriod = WEEK +# AltOlyPeriodMultiplier = 2 +# --------------------------------------------------------------------------- +# Enable/disable custom period settings. +# Default: False +AltOlyUseCustomPeriodSettings = False + +# Change the type of delay between two Olympiads. +# Available values: MONTH, WEEK, DAY +# Default: MONTH +AltOlyPeriodType = MONTH + +# Change the Olympiad frequency. +# The value is a multiplier of period type, +# i.e. if type is MONTH and multiplier is 2, +# then Olympiad will occur every 2 months. +# Default: 1 +# Note! If type = DAY, multiplier must be >= 7! +AltOlyPeriodMultiplier = 1 diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/Config.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/Config.java index 674c870c92..1fa14a93d9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/Config.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/Config.java @@ -543,6 +543,9 @@ public final class Config public static List LIST_OLY_RESTRICTED_ITEMS; public static int ALT_OLY_ENCHANT_LIMIT; public static int ALT_OLY_WAIT_TIME; + public static boolean ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS; + public static String ALT_OLY_PERIOD; + public static int ALT_OLY_PERIOD_MULTIPLIER; public static int ALT_MANOR_REFRESH_TIME; public static int ALT_MANOR_REFRESH_MIN; public static int ALT_MANOR_APPROVE_TIME; @@ -2297,6 +2300,9 @@ public final class Config } ALT_OLY_ENCHANT_LIMIT = Olympiad.getInt("AltOlyEnchantLimit", -1); ALT_OLY_WAIT_TIME = Olympiad.getInt("AltOlyWaitTime", 60); + ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS = Olympiad.getBoolean("AltOlyUseCustomPeriodSettings", false); + ALT_OLY_PERIOD = Olympiad.getString("AltOlyPeriod", "MONTH"); + ALT_OLY_PERIOD_MULTIPLIER = Olympiad.getInt("AltOlyPeriodMultiplier", 1); final File hexIdFile = new File(HEXID_FILE); if (hexIdFile.exists()) diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java index 69f4e4b96c..2087510b72 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java @@ -546,20 +546,80 @@ public class Olympiad extends ListenersContainer { final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ROUND_S1_OF_THE_OLYMPIAD_GAMES_HAS_STARTED); sm.addInt(_currentCycle); - Broadcast.toAllOnlinePlayers(sm); - final Calendar currentTime = Calendar.getInstance(); - currentTime.add(Calendar.MONTH, 1); - currentTime.set(Calendar.DAY_OF_MONTH, 1); - currentTime.set(Calendar.AM_PM, Calendar.AM); - currentTime.set(Calendar.HOUR, 12); - currentTime.set(Calendar.MINUTE, 0); - currentTime.set(Calendar.SECOND, 0); - _olympiadEnd = currentTime.getTimeInMillis(); + if (!Config.ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS) + { + final Calendar currentTime = Calendar.getInstance(); + currentTime.add(Calendar.MONTH, 1); + currentTime.set(Calendar.DAY_OF_MONTH, 1); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + _olympiadEnd = currentTime.getTimeInMillis(); + + final Calendar nextChange = Calendar.getInstance(); + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + Calendar currentTime = Calendar.getInstance(); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + + Calendar nextChange = Calendar.getInstance(); + + switch (Config.ALT_OLY_PERIOD) + { + case "DAY": + { + currentTime.add(Calendar.DAY_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 14) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 7) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + else + { + LOGGER.warning("Invalid config value for Config.ALT_OLY_PERIOD_MULTIPLIER, must be >= 7"); + } + break; + } + case "WEEK": + { + currentTime.add(Calendar.WEEK_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER > 1) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + break; + } + case "MONTH": + { + currentTime.add(Calendar.MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + break; + } + } + _olympiadEnd = currentTime.getTimeInMillis(); + } - final Calendar nextChange = Calendar.getInstance(); - _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; scheduleWeeklyChange(); } diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Olympiad.ini b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Olympiad.ini index 95c3bf1297..8308a3e28f 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Olympiad.ini +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Olympiad.ini @@ -163,4 +163,30 @@ AltOlyMaxWeeklyMatchesClassed = 30 # Maximum number of Class-Irrelevant Team matches a character can join per week # Default: 10 -AltOlyMaxWeeklyMatchesTeam = 10 \ No newline at end of file +AltOlyMaxWeeklyMatchesTeam = 10 + + +# --------------------------------------------------------------------------- +# Custom Olympiad period settings +# --------------------------------------------------------------------------- +# Example for Olympiad every 2 weeks: +# AltOlyUseCustomPeriodSettings = True +# AltOlyPeriod = WEEK +# AltOlyPeriodMultiplier = 2 +# --------------------------------------------------------------------------- +# Enable/disable custom period settings. +# Default: False +AltOlyUseCustomPeriodSettings = False + +# Change the type of delay between two Olympiads. +# Available values: MONTH, WEEK, DAY +# Default: MONTH +AltOlyPeriodType = MONTH + +# Change the Olympiad frequency. +# The value is a multiplier of period type, +# i.e. if type is MONTH and multiplier is 2, +# then Olympiad will occur every 2 months. +# Default: 1 +# Note! If type = DAY, multiplier must be >= 7! +AltOlyPeriodMultiplier = 1 diff --git a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/Config.java b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/Config.java index e791060996..ff1eb302f4 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/Config.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/Config.java @@ -580,6 +580,9 @@ public final class Config public static List LIST_OLY_RESTRICTED_ITEMS; public static int ALT_OLY_ENCHANT_LIMIT; public static int ALT_OLY_WAIT_TIME; + public static boolean ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS; + public static String ALT_OLY_PERIOD; + public static int ALT_OLY_PERIOD_MULTIPLIER; public static int ALT_MANOR_REFRESH_TIME; public static int ALT_MANOR_REFRESH_MIN; public static int ALT_MANOR_APPROVE_TIME; @@ -2826,6 +2829,9 @@ public final class Config } ALT_OLY_ENCHANT_LIMIT = Olympiad.getInt("AltOlyEnchantLimit", -1); ALT_OLY_WAIT_TIME = Olympiad.getInt("AltOlyWaitTime", 120); + ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS = Olympiad.getBoolean("AltOlyUseCustomPeriodSettings", false); + ALT_OLY_PERIOD = Olympiad.getString("AltOlyPeriod", "MONTH"); + ALT_OLY_PERIOD_MULTIPLIER = Olympiad.getInt("AltOlyPeriodMultiplier", 1); final File hexIdFile = new File(HEXID_FILE); if (hexIdFile.exists()) diff --git a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java index 413cf74d8d..ef3fcc5d51 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java @@ -581,20 +581,80 @@ public class Olympiad extends ListenersContainer { final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ROUND_S1_OF_THE_GRAND_OLYMPIAD_GAMES_HAS_STARTED); sm.addInt(_currentCycle); - Broadcast.toAllOnlinePlayers(sm); - final Calendar currentTime = Calendar.getInstance(); - currentTime.add(Calendar.MONTH, 1); - currentTime.set(Calendar.DAY_OF_MONTH, 1); - currentTime.set(Calendar.AM_PM, Calendar.AM); - currentTime.set(Calendar.HOUR, 12); - currentTime.set(Calendar.MINUTE, 0); - currentTime.set(Calendar.SECOND, 0); - _olympiadEnd = currentTime.getTimeInMillis(); + if (!Config.ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS) + { + final Calendar currentTime = Calendar.getInstance(); + currentTime.add(Calendar.MONTH, 1); + currentTime.set(Calendar.DAY_OF_MONTH, 1); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + _olympiadEnd = currentTime.getTimeInMillis(); + + final Calendar nextChange = Calendar.getInstance(); + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + Calendar currentTime = Calendar.getInstance(); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + + Calendar nextChange = Calendar.getInstance(); + + switch (Config.ALT_OLY_PERIOD) + { + case "DAY": + { + currentTime.add(Calendar.DAY_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 14) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 7) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + else + { + _log.warning("Invalid config value for Config.ALT_OLY_PERIOD_MULTIPLIER, must be >= 7"); + } + break; + } + case "WEEK": + { + currentTime.add(Calendar.WEEK_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER > 1) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + break; + } + case "MONTH": + { + currentTime.add(Calendar.MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + break; + } + } + _olympiadEnd = currentTime.getTimeInMillis(); + } - final Calendar nextChange = Calendar.getInstance(); - _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; scheduleWeeklyChange(); } diff --git a/L2J_Mobius_CT_2.6_HighFive/readme.txt b/L2J_Mobius_CT_2.6_HighFive/readme.txt index e2ee0cd1c6..58dc120dec 100644 --- a/L2J_Mobius_CT_2.6_HighFive/readme.txt +++ b/L2J_Mobius_CT_2.6_HighFive/readme.txt @@ -14,11 +14,13 @@ What is done -Castle dungeon instances -High Five treasure boxes -Fixed server lag on many occasions +-Auto potions voiced command -Store offline trader transactions in realtime -Minimum range config for private stores -Random spawn system for monsters -Custom starting location -Custom community board +-Custom Olympiad period -Premium System -User command expon/expoff -Reworked drop system diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Olympiad.ini b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Olympiad.ini index e53687f83c..3f6f4bdde8 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Olympiad.ini +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Olympiad.ini @@ -159,4 +159,30 @@ AltOlyMaxWeeklyMatchesClassed = 30 # Maximum number of Class-Irrelevant Team matches a character can join per week # Default: 10 -AltOlyMaxWeeklyMatchesTeam = 10 \ No newline at end of file +AltOlyMaxWeeklyMatchesTeam = 10 + + +# --------------------------------------------------------------------------- +# Custom Olympiad period settings +# --------------------------------------------------------------------------- +# Example for Olympiad every 2 weeks: +# AltOlyUseCustomPeriodSettings = True +# AltOlyPeriod = WEEK +# AltOlyPeriodMultiplier = 2 +# --------------------------------------------------------------------------- +# Enable/disable custom period settings. +# Default: False +AltOlyUseCustomPeriodSettings = False + +# Change the type of delay between two Olympiads. +# Available values: MONTH, WEEK, DAY +# Default: MONTH +AltOlyPeriodType = MONTH + +# Change the Olympiad frequency. +# The value is a multiplier of period type, +# i.e. if type is MONTH and multiplier is 2, +# then Olympiad will occur every 2 months. +# Default: 1 +# Note! If type = DAY, multiplier must be >= 7! +AltOlyPeriodMultiplier = 1 diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/Config.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/Config.java index e15091a727..d77369a35f 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/Config.java @@ -542,6 +542,9 @@ public final class Config public static List LIST_OLY_RESTRICTED_ITEMS; public static int ALT_OLY_ENCHANT_LIMIT; public static int ALT_OLY_WAIT_TIME; + public static boolean ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS; + public static String ALT_OLY_PERIOD; + public static int ALT_OLY_PERIOD_MULTIPLIER; public static int ALT_MANOR_REFRESH_TIME; public static int ALT_MANOR_REFRESH_MIN; public static int ALT_MANOR_APPROVE_TIME; @@ -2221,6 +2224,9 @@ public final class Config } ALT_OLY_ENCHANT_LIMIT = Olympiad.getInt("AltOlyEnchantLimit", -1); ALT_OLY_WAIT_TIME = Olympiad.getInt("AltOlyWaitTime", 60); + ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS = Olympiad.getBoolean("AltOlyUseCustomPeriodSettings", false); + ALT_OLY_PERIOD = Olympiad.getString("AltOlyPeriod", "MONTH"); + ALT_OLY_PERIOD_MULTIPLIER = Olympiad.getInt("AltOlyPeriodMultiplier", 1); final File hexIdFile = new File(HEXID_FILE); if (hexIdFile.exists()) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java index 69f4e4b96c..2087510b72 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java @@ -546,20 +546,80 @@ public class Olympiad extends ListenersContainer { final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ROUND_S1_OF_THE_OLYMPIAD_GAMES_HAS_STARTED); sm.addInt(_currentCycle); - Broadcast.toAllOnlinePlayers(sm); - final Calendar currentTime = Calendar.getInstance(); - currentTime.add(Calendar.MONTH, 1); - currentTime.set(Calendar.DAY_OF_MONTH, 1); - currentTime.set(Calendar.AM_PM, Calendar.AM); - currentTime.set(Calendar.HOUR, 12); - currentTime.set(Calendar.MINUTE, 0); - currentTime.set(Calendar.SECOND, 0); - _olympiadEnd = currentTime.getTimeInMillis(); + if (!Config.ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS) + { + final Calendar currentTime = Calendar.getInstance(); + currentTime.add(Calendar.MONTH, 1); + currentTime.set(Calendar.DAY_OF_MONTH, 1); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + _olympiadEnd = currentTime.getTimeInMillis(); + + final Calendar nextChange = Calendar.getInstance(); + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + Calendar currentTime = Calendar.getInstance(); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + + Calendar nextChange = Calendar.getInstance(); + + switch (Config.ALT_OLY_PERIOD) + { + case "DAY": + { + currentTime.add(Calendar.DAY_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 14) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 7) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + else + { + LOGGER.warning("Invalid config value for Config.ALT_OLY_PERIOD_MULTIPLIER, must be >= 7"); + } + break; + } + case "WEEK": + { + currentTime.add(Calendar.WEEK_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER > 1) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + break; + } + case "MONTH": + { + currentTime.add(Calendar.MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + break; + } + } + _olympiadEnd = currentTime.getTimeInMillis(); + } - final Calendar nextChange = Calendar.getInstance(); - _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; scheduleWeeklyChange(); } diff --git a/L2J_Mobius_Classic_2.0_Zaken/dist/game/config/Olympiad.ini b/L2J_Mobius_Classic_2.0_Zaken/dist/game/config/Olympiad.ini index e53687f83c..3f6f4bdde8 100644 --- a/L2J_Mobius_Classic_2.0_Zaken/dist/game/config/Olympiad.ini +++ b/L2J_Mobius_Classic_2.0_Zaken/dist/game/config/Olympiad.ini @@ -159,4 +159,30 @@ AltOlyMaxWeeklyMatchesClassed = 30 # Maximum number of Class-Irrelevant Team matches a character can join per week # Default: 10 -AltOlyMaxWeeklyMatchesTeam = 10 \ No newline at end of file +AltOlyMaxWeeklyMatchesTeam = 10 + + +# --------------------------------------------------------------------------- +# Custom Olympiad period settings +# --------------------------------------------------------------------------- +# Example for Olympiad every 2 weeks: +# AltOlyUseCustomPeriodSettings = True +# AltOlyPeriod = WEEK +# AltOlyPeriodMultiplier = 2 +# --------------------------------------------------------------------------- +# Enable/disable custom period settings. +# Default: False +AltOlyUseCustomPeriodSettings = False + +# Change the type of delay between two Olympiads. +# Available values: MONTH, WEEK, DAY +# Default: MONTH +AltOlyPeriodType = MONTH + +# Change the Olympiad frequency. +# The value is a multiplier of period type, +# i.e. if type is MONTH and multiplier is 2, +# then Olympiad will occur every 2 months. +# Default: 1 +# Note! If type = DAY, multiplier must be >= 7! +AltOlyPeriodMultiplier = 1 diff --git a/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/Config.java b/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/Config.java index c5cce612aa..bcec7f7a12 100644 --- a/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/Config.java @@ -542,6 +542,9 @@ public final class Config public static List LIST_OLY_RESTRICTED_ITEMS; public static int ALT_OLY_ENCHANT_LIMIT; public static int ALT_OLY_WAIT_TIME; + public static boolean ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS; + public static String ALT_OLY_PERIOD; + public static int ALT_OLY_PERIOD_MULTIPLIER; public static int ALT_MANOR_REFRESH_TIME; public static int ALT_MANOR_REFRESH_MIN; public static int ALT_MANOR_APPROVE_TIME; @@ -2225,6 +2228,9 @@ public final class Config } ALT_OLY_ENCHANT_LIMIT = Olympiad.getInt("AltOlyEnchantLimit", -1); ALT_OLY_WAIT_TIME = Olympiad.getInt("AltOlyWaitTime", 60); + ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS = Olympiad.getBoolean("AltOlyUseCustomPeriodSettings", false); + ALT_OLY_PERIOD = Olympiad.getString("AltOlyPeriod", "MONTH"); + ALT_OLY_PERIOD_MULTIPLIER = Olympiad.getInt("AltOlyPeriodMultiplier", 1); final File hexIdFile = new File(HEXID_FILE); if (hexIdFile.exists()) diff --git a/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java b/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java index 69f4e4b96c..2087510b72 100644 --- a/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java +++ b/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/model/olympiad/Olympiad.java @@ -546,20 +546,80 @@ public class Olympiad extends ListenersContainer { final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ROUND_S1_OF_THE_OLYMPIAD_GAMES_HAS_STARTED); sm.addInt(_currentCycle); - Broadcast.toAllOnlinePlayers(sm); - final Calendar currentTime = Calendar.getInstance(); - currentTime.add(Calendar.MONTH, 1); - currentTime.set(Calendar.DAY_OF_MONTH, 1); - currentTime.set(Calendar.AM_PM, Calendar.AM); - currentTime.set(Calendar.HOUR, 12); - currentTime.set(Calendar.MINUTE, 0); - currentTime.set(Calendar.SECOND, 0); - _olympiadEnd = currentTime.getTimeInMillis(); + if (!Config.ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS) + { + final Calendar currentTime = Calendar.getInstance(); + currentTime.add(Calendar.MONTH, 1); + currentTime.set(Calendar.DAY_OF_MONTH, 1); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + _olympiadEnd = currentTime.getTimeInMillis(); + + final Calendar nextChange = Calendar.getInstance(); + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + Calendar currentTime = Calendar.getInstance(); + currentTime.set(Calendar.AM_PM, Calendar.AM); + currentTime.set(Calendar.HOUR, 12); + currentTime.set(Calendar.MINUTE, 0); + currentTime.set(Calendar.SECOND, 0); + + Calendar nextChange = Calendar.getInstance(); + + switch (Config.ALT_OLY_PERIOD) + { + case "DAY": + { + currentTime.add(Calendar.DAY_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 14) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else if (Config.ALT_OLY_PERIOD_MULTIPLIER >= 7) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + else + { + LOGGER.warning("Invalid config value for Config.ALT_OLY_PERIOD_MULTIPLIER, must be >= 7"); + } + break; + } + case "WEEK": + { + currentTime.add(Calendar.WEEK_OF_MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + if (Config.ALT_OLY_PERIOD_MULTIPLIER > 1) + { + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + } + else + { + _nextWeeklyChange = nextChange.getTimeInMillis() + (WEEKLY_PERIOD / 2); + } + break; + } + case "MONTH": + { + currentTime.add(Calendar.MONTH, Config.ALT_OLY_PERIOD_MULTIPLIER); + currentTime.add(Calendar.DAY_OF_MONTH, -1); // last day is for validation + + _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; + break; + } + } + _olympiadEnd = currentTime.getTimeInMillis(); + } - final Calendar nextChange = Calendar.getInstance(); - _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD; scheduleWeeklyChange(); }