From 4584db6d19e1149875496fa92bb42c698c43d1a0 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Fri, 6 Apr 2018 23:46:55 +0000 Subject: [PATCH] More config changes to match newer branches. --- .../dist/game/config/Custom/AntiFeed.ini | 23 - .../dist/game/config/General.ini | 97 +--- .../dist/game/config/PVP.ini | 24 + .../dist/game/config/Server.ini | 35 +- .../handlers/effecthandlers/Fishing.java | 2 +- .../java/com/l2jmobius/Config.java | 441 +++++++++--------- 6 files changed, 279 insertions(+), 343 deletions(-) delete mode 100644 L2J_Mobius_CT_2.6_HighFive/dist/game/config/Custom/AntiFeed.ini diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Custom/AntiFeed.ini b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Custom/AntiFeed.ini deleted file mode 100644 index 323243e1f2..0000000000 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Custom/AntiFeed.ini +++ /dev/null @@ -1,23 +0,0 @@ -# --------------------------------------------------------------------------- -# AntiFeed -# --------------------------------------------------------------------------- - -# This option will enable antifeed for pvp/pk/clanrep points. -# Default: False -AntiFeedEnable = False - -# If set to True, kills from dualbox will not increase pvp/pk points -# and clan reputation will not be transferred. -# Default: True -AntiFeedDualbox = True - -# If set to True, server will count disconnected (unable to determine ip address) -# as dualbox. -# Default: True -AntiFeedDisconnectedAsDualbox = True - -# If character died faster than timeout - pvp/pk points for killer will not increase -# and clan reputation will not be transferred. -# Setting to 0 will disable this feature. -# Default: 120 seconds. -AntiFeedInterval = 120 diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/General.ini b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/General.ini index 9e073c3047..849d89c920 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/General.ini +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/General.ini @@ -13,23 +13,6 @@ # Default: False EverybodyHasAdminRights = False -# Setting for serverList -# Displays [] in front of server name on character selection -# Default: False -ServerListBrackets = False - -# Displays server type next to the server name on character selection. -# Notes: -# Accepted Values: Normal, Relax, Test, NoLabel, Restricted, Event, Free -# Default: Normal -ServerListType = Free - -# Displays server minimum age to the server name on character selection. -# Notes: -# Accepted values: 0, 15, 18 -# Default: 0 -ServerListAge = 0 - # If True, only accounts with GM access can enter the server. # Default: False @@ -72,7 +55,7 @@ GMSkillRestriction = True # Allow GMs to drop/trade non-tradable and quest(drop only) items # Default: False -GMTradeRestrictedItems = True +GMTradeRestrictedItems = False # Allow GMs to restart/exit while is fighting stance # Default: True @@ -145,76 +128,6 @@ SkillCheckRemove = True SkillCheckGM = False -# --------------------------------------------------------------------------- -# Dead Lock Detector (separate thread for detecting deadlocks) -# --------------------------------------------------------------------------- -# For improved crash logs and automatic restart in deadlock case if enabled. -# Check interval is in seconds. -# Default: True -DeadLockDetector = True - -# Default: 20 -DeadLockCheckInterval = 20 - -# Default: False -RestartOnDeadlock = False - - -# --------------------------------------------------------------------------- -# Client packet queue tuning -# --------------------------------------------------------------------------- - -# Queue size, do not set it too low ! -# 0 - use value MaxReadPerPass + 2 (from mmo.properties) -# Default: 0 -ClientPacketQueueSize = 80 - -# Maximum number of packets in burst. -# Execution will be aborted and thread released if more packets executed in raw. -# 0 - use value MaxReadPerPass + 1 (from mmo.properties) -# Default: 0 -ClientPacketQueueMaxBurstSize = 70 - -# Maximum number of packets per second. -# Flood detector will be triggered if more packets received. -# After triggering all incoming packets will be dropped until flooding stopped. -# Default: 80 -ClientPacketQueueMaxPacketsPerSecond = 160 - -# Average number of packets per second calculated during this interval. -# Using larger value decrease number of false kicks, but slower reaction to flood. -# Avoid using too low or too high values, recommended between 3 and 10. -# Default: 5 -ClientPacketQueueMeasureInterval = 15 - -# Maximum average number of packets per second during measure interval. -# Flood detector will be triggered if more packets received. -# After triggering all incoming packets will be dropped until flooding stopped. -# Default: 40 -ClientPacketQueueMaxAveragePacketsPerSecond = 120 - -# Maximum number of flood triggers per minute. -# Client will be kicked if more floods detected. -# Default: 2 -ClientPacketQueueMaxFloodsPerMin = 5 - -# Maximum number of queue overflows per minute. -# After overflow all incoming packets from client are dropped until queue is flushed. -# Client will be kicked if more queue overflows detected. -# Default: 1 -ClientPacketQueueMaxOverflowsPerMin = 10 - -# Maximum number of buffer underflows per minute. -# Client will be kicked if more underflow exceptions detected. -# Default: 1 -ClientPacketQueueMaxUnderflowsPerMin = 10 - -# Maximum number of unknown packets per minute. -# Client will be kicked if more unknown packets received. -# Default: 5 -ClientPacketQueueMaxUnknownPerMin = 5 - - # --------------------------------------------------------------------------- # Optimization # --------------------------------------------------------------------------- @@ -246,14 +159,8 @@ ListOfProtectedItems = 0 # Default: True DatabaseCleanUp = True -# The time before a database connection closes (in milliseconds) -# If a query takes longer to execute than the time defined here, the server will throw "Unclosed Connection!" error. -# If you get often this error message, try increasing this. -# Default: 60000ms -ConnectionCloseTime = 60000 - # This is the interval (in minutes), that the gameserver will update a players information such as location. -# The higher you set this number, there will be less character information saving so you will have less accessessing of the database and your hard drive(s). +# The higher you set this number, there will be less character information saving so you will have less accessing of the database and your hard drive(s). # The lower you set this number, there will be more frequent character information saving so you will have more access to the database and your hard drive(s). # A value of 0 disables periodic saving. # Independent of this setting the character is always saved after leaving the world. diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/PVP.ini b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/PVP.ini index b9a6ab4be9..c79f7fc8d6 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/PVP.ini +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/PVP.ini @@ -26,6 +26,30 @@ ListOfNonDroppableItems = 57,1147,425,1146,461,10,2368,7,6,2370,2369,6842,6611,6 MinimumPKRequiredToDrop = 6 +# --------------------------------------------------------------------------- +# AntiFeed +# --------------------------------------------------------------------------- + +# This option will enable antifeed for pvp/pk/clanrep points. +# Default: False +AntiFeedEnable = False + +# If set to True, kills from dualbox will not increase pvp/pk points +# and clan reputation will not be transferred. +# Default: True +AntiFeedDualbox = True + +# If set to True, server will count disconnected (unable to determine ip address) as dualbox. +# Default: True +AntiFeedDisconnectedAsDualbox = True + +# If character died faster than timeout - pvp/pk points for killer will not increase +# and clan reputation will not be transferred. +# Setting to 0 will disable this feature. +# Default: 120 seconds. +AntiFeedInterval = 120 + + # --------------------------------------------------------------------------- # Misc. # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Server.ini b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Server.ini index ec18ea846b..10794be8d8 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Server.ini +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Server.ini @@ -76,8 +76,9 @@ RequestServerID = 1 AcceptAlternateID = True # Datapack root directory. +# Defaults to current directory from which the server is started unless the below line is uncommented. # WARNING: If the specified path is invalid, it will lead to multiple errors! -#Default: . +# Default: . DatapackRoot = . # Define how many players are allowed to play simultaneously on your server. @@ -90,6 +91,23 @@ MaximumOnlineUsers = 2000 # Default: 267;268;271;273 AllowedProtocolRevisions = 267;268;271;273 +# Displays server type next to the server name on character selection. +# Notes: +# Accepted Values: Normal, Relax, Test, Broad, Restricted, Event, Free, World, New, Classic +# Default: Free +ServerListType = Free + +# Displays server minimum age to the server name on character selection. +# Notes: +# Accepted values: 0, 15, 18 +# Default: 0 +ServerListAge = 0 + +# Setting for serverList +# Displays [] in front of server name on character selection +# Default: False +ServerListBrackets = False + # --------------------------------------------------------------------------- # Thread Configuration @@ -115,6 +133,21 @@ ThreadsPerInstantThreadPool = 20 UrgentPacketThreadCoreSize = 20 +# --------------------------------------------------------------------------- +# Dead Lock Detector (separate thread for detecting deadlocks) +# --------------------------------------------------------------------------- +# For improved crash logs and automatic restart in deadlock case if enabled. +# Check interval is in seconds. +# Default: True +DeadLockDetector = True + +# Default: 20 +DeadLockCheckInterval = 20 + +# Default: False +RestartOnDeadlock = False + + # --------------------------------------------------------------------------- # Misc Player Settings # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/effecthandlers/Fishing.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/effecthandlers/Fishing.java index aa3b27d5ab..efdf1501ef 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/effecthandlers/Fishing.java +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/effecthandlers/Fishing.java @@ -78,7 +78,7 @@ public final class Fishing extends AbstractEffect final L2PcInstance player = activeChar.getActingPlayer(); - if (!Config.ALLOWFISHING && !player.canOverrideCond(PcCondOverride.SKILL_CONDITIONS)) + if (!Config.ALLOW_FISHING && !player.canOverrideCond(PcCondOverride.SKILL_CONDITIONS)) { player.sendMessage("Fishing is disabled!"); return; 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 9aeba58acb..d3866f1163 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 @@ -451,9 +451,6 @@ public final class Config // General Settings // -------------------------------------------------- public static boolean EVERYBODY_HAS_ADMIN_RIGHTS; - public static boolean SERVER_LIST_BRACKET; - public static int SERVER_LIST_TYPE; - public static int SERVER_LIST_AGE; public static boolean SERVER_GMONLY; public static boolean GM_HERO_AURA; public static boolean GM_STARTUP_INVULNERABLE; @@ -548,7 +545,7 @@ public final class Config public static boolean ALLOW_RACE; public static boolean ALLOW_WATER; public static boolean ALLOW_RENTPET; - public static boolean ALLOWFISHING; + public static boolean ALLOW_FISHING; public static boolean ALLOW_BOAT; public static int BOAT_BROADCAST_RADIUS; public static boolean ALLOW_CURSED_WEAPONS; @@ -746,6 +743,11 @@ public final class Config public static String KARMA_NONDROPPABLE_ITEMS; public static int[] KARMA_LIST_NONDROPPABLE_PET_ITEMS; public static int[] KARMA_LIST_NONDROPPABLE_ITEMS; + public static boolean ANTIFEED_ENABLE; + public static boolean ANTIFEED_DUALBOX; + public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; + public static int ANTIFEED_INTERVAL; + public static boolean ANNOUNCE_GAINAK_SIEGE; // -------------------------------------------------- // Rate Settings @@ -860,6 +862,9 @@ public final class Config public static int REQUEST_ID; public static boolean RESERVE_HOST_ON_LOGIN = false; public static List PROTOCOL_LIST; + public static int SERVER_LIST_TYPE; + public static int SERVER_LIST_AGE; + public static boolean SERVER_LIST_BRACKET; public static boolean LOGIN_SERVER_SCHEDULE_RESTART; public static long LOGIN_SERVER_SCHEDULE_RESTART_TIME; public static boolean SERVER_RESTART_SCHEDULE_ENABLED; @@ -1129,10 +1134,6 @@ public final class Config public static boolean WELCOME_MESSAGE_ENABLED; public static String WELCOME_MESSAGE_TEXT; public static int WELCOME_MESSAGE_TIME; - public static boolean ANTIFEED_ENABLE; - public static boolean ANTIFEED_DUALBOX; - public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; - public static int ANTIFEED_INTERVAL; public static boolean ANNOUNCE_PK_PVP; public static boolean ANNOUNCE_PK_PVP_NORMAL_MESSAGE; public static String ANNOUNCE_PK_MSG; @@ -1289,6 +1290,10 @@ public final class Config THREADS_PER_INSTANT_THREAD_POOL = serverSettings.getInt("ThreadsPerInstantThreadPool", 2); IO_PACKET_THREAD_CORE_SIZE = serverSettings.getInt("UrgentPacketThreadCoreSize", 2); + DEADLOCK_DETECTOR = serverSettings.getBoolean("DeadLockDetector", true); + DEADLOCK_CHECK_INTERVAL = serverSettings.getInt("DeadLockCheckInterval", 20); + RESTART_ON_DEADLOCK = serverSettings.getBoolean("RestartOnDeadlock", false); + SERVER_RESTART_SCHEDULE_ENABLED = serverSettings.getBoolean("ServerRestartScheduleEnabled", false); SERVER_RESTART_SCHEDULE_MESSAGE = serverSettings.getBoolean("ServerRestartScheduleMessage", false); SERVER_RESTART_SCHEDULE_COUNTDOWN = serverSettings.getInt("ServerRestartScheduleCountdown", 600); @@ -1827,9 +1832,6 @@ public final class Config // Load General config file (if exists) final PropertiesParser General = new PropertiesParser(GENERAL_CONFIG_FILE); EVERYBODY_HAS_ADMIN_RIGHTS = General.getBoolean("EverybodyHasAdminRights", false); - SERVER_LIST_BRACKET = General.getBoolean("ServerListBrackets", false); - SERVER_LIST_TYPE = getServerTypeId(General.getString("ServerListType", "Normal").split(",")); - SERVER_LIST_AGE = General.getInt("ServerListAge", 0); SERVER_GMONLY = General.getBoolean("ServerGMOnly", false); GM_HERO_AURA = General.getBoolean("GMHeroAura", false); GM_STARTUP_INVULNERABLE = General.getBoolean("GMStartupInvulnerable", false); @@ -1865,9 +1867,6 @@ public final class Config ALT_DEV_NO_SPAWNS = General.getBoolean("AltDevNoSpawns", false) || Boolean.getBoolean("nospawns"); ALT_DEV_SHOW_QUESTS_LOAD_IN_LOGS = General.getBoolean("AltDevShowQuestsLoadInLogs", false); ALT_DEV_SHOW_SCRIPTS_LOAD_IN_LOGS = General.getBoolean("AltDevShowScriptsLoadInLogs", false); - DEADLOCK_DETECTOR = General.getBoolean("DeadLockDetector", true); - DEADLOCK_CHECK_INTERVAL = General.getInt("DeadLockCheckInterval", 20); - RESTART_ON_DEADLOCK = General.getBoolean("RestartOnDeadlock", false); ALLOW_DISCARDITEM = General.getBoolean("AllowDiscardItem", true); AUTODESTROY_ITEM_AFTER = General.getInt("AutoDestroyDroppedItemAfter", 600); HERB_AUTO_DESTROY_TIME = General.getInt("AutoDestroyHerbTime", 60) * 1000; @@ -1923,7 +1922,7 @@ public final class Config ALLOW_RACE = General.getBoolean("AllowRace", true); ALLOW_WATER = General.getBoolean("AllowWater", true); ALLOW_RENTPET = General.getBoolean("AllowRentPet", false); - ALLOWFISHING = General.getBoolean("AllowFishing", true); + ALLOW_FISHING = General.getBoolean("AllowFishing", true); ALLOW_MANOR = General.getBoolean("AllowManor", true); ALLOW_BOAT = General.getBoolean("AllowBoat", true); BOAT_BROADCAST_RADIUS = General.getInt("BoatBroadcastRadius", 20000); @@ -2249,14 +2248,212 @@ public final class Config DROP_ITEM_MAX_LEVEL_DIFFERENCE = RatesSettings.getInt("DropItemMaxLevelDifference", 10); DROP_ITEM_MIN_LEVEL_GAP_CHANCE = RatesSettings.getDouble("DropItemMinLevelGapChance", 10); - // Load Antifeed config file (if exists) - final PropertiesParser Antifeed = new PropertiesParser(CUSTOM_ANTIFEED_CONFIG_FILE); + // Load PvP config file (if exists) + final PropertiesParser PVPSettings = new PropertiesParser(PVP_CONFIG_FILE); - ANTIFEED_ENABLE = Antifeed.getBoolean("AntiFeedEnable", false); - ANTIFEED_DUALBOX = Antifeed.getBoolean("AntiFeedDualbox", true); - ANTIFEED_DISCONNECTED_AS_DUALBOX = Antifeed.getBoolean("AntiFeedDisconnectedAsDualbox", true); - ANTIFEED_INTERVAL = Antifeed.getInt("AntiFeedInterval", 120) * 1000; + KARMA_DROP_GM = PVPSettings.getBoolean("CanGMDropEquipment", false); + KARMA_AWARD_PK_KILL = PVPSettings.getBoolean("AwardPKKillPVPPoint", false); + KARMA_PK_LIMIT = PVPSettings.getInt("MinimumPKRequiredToDrop", 5); + KARMA_NONDROPPABLE_PET_ITEMS = PVPSettings.getString("ListOfPetItems", "2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650,9882"); + KARMA_NONDROPPABLE_ITEMS = PVPSettings.getString("ListOfNonDroppableItems", "57,1147,425,1146,461,10,2368,7,6,2370,2369,6842,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,7694,8181,5575,7694,9388,9389,9390"); + String[] karma = KARMA_NONDROPPABLE_PET_ITEMS.split(","); + KARMA_LIST_NONDROPPABLE_PET_ITEMS = new int[karma.length]; + + for (int i = 0; i < karma.length; i++) + { + KARMA_LIST_NONDROPPABLE_PET_ITEMS[i] = Integer.parseInt(karma[i]); + } + + karma = KARMA_NONDROPPABLE_ITEMS.split(","); + KARMA_LIST_NONDROPPABLE_ITEMS = new int[karma.length]; + + for (int i = 0; i < karma.length; i++) + { + KARMA_LIST_NONDROPPABLE_ITEMS[i] = Integer.parseInt(karma[i]); + } + + // sorting so binarySearch can be used later + Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); + Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); + + PVP_NORMAL_TIME = PVPSettings.getInt("PvPVsNormalTime", 120000); + PVP_PVP_TIME = PVPSettings.getInt("PvPVsPvPTime", 60000); + + ANTIFEED_ENABLE = PVPSettings.getBoolean("AntiFeedEnable", false); + ANTIFEED_DUALBOX = PVPSettings.getBoolean("AntiFeedDualbox", true); + ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true); + ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000; + + // Load Olympiad config file (if exists) + final PropertiesParser Olympiad = new PropertiesParser(OLYMPIAD_CONFIG_FILE); + + ALT_OLY_START_TIME = Olympiad.getInt("AltOlyStartTime", 18); + ALT_OLY_MIN = Olympiad.getInt("AltOlyMin", 0); + ALT_OLY_MAX_BUFFS = Olympiad.getInt("AltOlyMaxBuffs", 5); + ALT_OLY_CPERIOD = Olympiad.getLong("AltOlyCPeriod", 21600000); + ALT_OLY_BATTLE = Olympiad.getLong("AltOlyBattle", 300000); + ALT_OLY_WPERIOD = Olympiad.getLong("AltOlyWPeriod", 604800000); + ALT_OLY_VPERIOD = Olympiad.getLong("AltOlyVPeriod", 86400000); + ALT_OLY_START_POINTS = Olympiad.getInt("AltOlyStartPoints", 10); + ALT_OLY_WEEKLY_POINTS = Olympiad.getInt("AltOlyWeeklyPoints", 10); + ALT_OLY_CLASSED = Olympiad.getInt("AltOlyClassedParticipants", 11); + ALT_OLY_NONCLASSED = Olympiad.getInt("AltOlyNonClassedParticipants", 11); + ALT_OLY_TEAMS = Olympiad.getInt("AltOlyTeamsParticipants", 6); + ALT_OLY_REG_DISPLAY = Olympiad.getInt("AltOlyRegistrationDisplayNumber", 100); + ALT_OLY_CLASSED_REWARD = parseItemsList(Olympiad.getString("AltOlyClassedReward", "13722,50")); + ALT_OLY_NONCLASSED_REWARD = parseItemsList(Olympiad.getString("AltOlyNonClassedReward", "13722,40")); + ALT_OLY_TEAM_REWARD = parseItemsList(Olympiad.getString("AltOlyTeamReward", "13722,85")); + ALT_OLY_COMP_RITEM = Olympiad.getInt("AltOlyCompRewItem", 13722); + ALT_OLY_MIN_MATCHES = Olympiad.getInt("AltOlyMinMatchesForPoints", 15); + ALT_OLY_GP_PER_POINT = Olympiad.getInt("AltOlyGPPerPoint", 1000); + ALT_OLY_HERO_POINTS = Olympiad.getInt("AltOlyHeroPoints", 200); + ALT_OLY_RANK1_POINTS = Olympiad.getInt("AltOlyRank1Points", 100); + ALT_OLY_RANK2_POINTS = Olympiad.getInt("AltOlyRank2Points", 75); + ALT_OLY_RANK3_POINTS = Olympiad.getInt("AltOlyRank3Points", 55); + ALT_OLY_RANK4_POINTS = Olympiad.getInt("AltOlyRank4Points", 40); + ALT_OLY_RANK5_POINTS = Olympiad.getInt("AltOlyRank5Points", 30); + ALT_OLY_MAX_POINTS = Olympiad.getInt("AltOlyMaxPoints", 10); + ALT_OLY_DIVIDER_CLASSED = Olympiad.getInt("AltOlyDividerClassed", 5); + ALT_OLY_DIVIDER_NON_CLASSED = Olympiad.getInt("AltOlyDividerNonClassed", 5); + ALT_OLY_MAX_WEEKLY_MATCHES = Olympiad.getInt("AltOlyMaxWeeklyMatches", 70); + ALT_OLY_MAX_WEEKLY_MATCHES_NON_CLASSED = Olympiad.getInt("AltOlyMaxWeeklyMatchesNonClassed", 60); + ALT_OLY_MAX_WEEKLY_MATCHES_CLASSED = Olympiad.getInt("AltOlyMaxWeeklyMatchesClassed", 30); + ALT_OLY_MAX_WEEKLY_MATCHES_TEAM = Olympiad.getInt("AltOlyMaxWeeklyMatchesTeam", 10); + ALT_OLY_LOG_FIGHTS = Olympiad.getBoolean("AltOlyLogFights", false); + ALT_OLY_SHOW_MONTHLY_WINNERS = Olympiad.getBoolean("AltOlyShowMonthlyWinners", true); + ALT_OLY_ANNOUNCE_GAMES = Olympiad.getBoolean("AltOlyAnnounceGames", true); + final String[] olyRestrictedItems = Olympiad.getString("AltOlyRestrictedItems", "6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,9388,9389,9390,17049,17050,17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,20759,20775,20776,20777,20778,14774").split(","); + LIST_OLY_RESTRICTED_ITEMS = new ArrayList<>(olyRestrictedItems.length); + for (String id : olyRestrictedItems) + { + LIST_OLY_RESTRICTED_ITEMS.add(Integer.parseInt(id)); + } + 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); + ALT_OLY_COMPETITION_DAYS = new ArrayList<>(); + for (String s : Olympiad.getString("AltOlyCompetitionDays", "1,2,3,4,5,6,7").split(",")) + { + ALT_OLY_COMPETITION_DAYS.add(Integer.parseInt(s)); + } + + final File hexIdFile = new File(HEXID_FILE); + if (hexIdFile.exists()) + { + final PropertiesParser hexId = new PropertiesParser(hexIdFile); + + if (hexId.containskey("ServerID") && hexId.containskey("HexID")) + { + SERVER_ID = hexId.getInt("ServerID", 1); + try + { + HEX_ID = new BigInteger(hexId.getString("HexID", null), 16).toByteArray(); + } + catch (Exception e) + { + LOGGER.warning("Could not load HexID file (" + HEXID_FILE + "). Hopefully login will give us one."); + } + } + else + { + LOGGER.warning("Could not load HexID file (" + HEXID_FILE + "). Hopefully login will give us one."); + } + } + else + { + LOGGER.warning("Could not load HexID file (" + HEXID_FILE + "). Hopefully login will give us one."); + } + + // Grand bosses + final PropertiesParser GrandBossSettings = new PropertiesParser(GRANDBOSS_CONFIG_FILE); + + ANTHARAS_WAIT_TIME = GrandBossSettings.getInt("AntharasWaitTime", 30); + ANTHARAS_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfAntharasSpawn", 264); + ANTHARAS_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfAntharasSpawn", 72); + + VALAKAS_WAIT_TIME = GrandBossSettings.getInt("ValakasWaitTime", 30); + VALAKAS_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfValakasSpawn", 264); + VALAKAS_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfValakasSpawn", 72); + + BAIUM_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfBaiumSpawn", 168); + BAIUM_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfBaiumSpawn", 48); + + CORE_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfCoreSpawn", 60); + CORE_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfCoreSpawn", 24); + + ORFEN_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfOrfenSpawn", 48); + ORFEN_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfOrfenSpawn", 20); + + QUEEN_ANT_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfQueenAntSpawn", 36); + QUEEN_ANT_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfQueenAntSpawn", 17); + + BELETH_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfBelethSpawn", 192); + BELETH_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfBelethSpawn", 148); + BELETH_MIN_PLAYERS = GrandBossSettings.getInt("BelethMinPlayers", 36); + + // Gracia Seeds + final PropertiesParser GraciaSeedsSettings = new PropertiesParser(GRACIASEEDS_CONFIG_FILE); + + // Seed of Destruction + SOD_TIAT_KILL_COUNT = GraciaSeedsSettings.getInt("TiatKillCountForNextState", 10); + SOD_STAGE_2_LENGTH = GraciaSeedsSettings.getLong("Stage2Length", 720) * 60000; + + MIN_TIAT_PLAYERS = GraciaSeedsSettings.getInt("MinPlayers", 36); + MAX_TIAT_PLAYERS = GraciaSeedsSettings.getInt("MaxPlayers", 45); + MIN_TIAT_LEVEL = GraciaSeedsSettings.getInt("MinLevel", 75); + + SOI_EKIMUS_KILL_COUNT = GraciaSeedsSettings.getInt("EkimusKillCount", 5); + EROSION_ATTACK_MIN_PLAYERS = GraciaSeedsSettings.getInt("MinEroAttPlayers", 18); + EROSION_ATTACK_MAX_PLAYERS = GraciaSeedsSettings.getInt("MaxEroAttPlayers", 27); + EROSION_DEFENCE_MIN_PLAYERS = GraciaSeedsSettings.getInt("MinEroDefPlayers", 18); + EROSION_DEFENCE_MAX_PLAYERS = GraciaSeedsSettings.getInt("MaxEroDefPlayers", 27); + HEART_ATTACK_MIN_PLAYERS = GraciaSeedsSettings.getInt("MinHeaAttPlayers", 18); + HEART_ATTACK_MAX_PLAYERS = GraciaSeedsSettings.getInt("MaxHeaAttPlayers", 27); + HEART_DEFENCE_MIN_PLAYERS = GraciaSeedsSettings.getInt("MinHeaDefPlayers", 18); + HEART_DEFENCE_MAX_PLAYERS = GraciaSeedsSettings.getInt("MaxHeaDefPlayers", 27); + + try + { + //@formatter:off + FILTER_LIST = Files.lines(Paths.get(CHAT_FILTER_FILE), StandardCharsets.UTF_8) + .map(String::trim) + .filter(line -> (!line.isEmpty() && (line.charAt(0) != '#'))) + .collect(Collectors.toList()); + //@formatter:on + LOGGER.info("Loaded " + FILTER_LIST.size() + " Filter Words."); + } + catch (IOException e) + { + LOGGER.log(Level.WARNING, "Error while loading chat filter words!", e); + } + + final PropertiesParser ClanHallSiege = new PropertiesParser(CH_SIEGE_CONFIG_FILE); + + CHS_MAX_ATTACKERS = ClanHallSiege.getInt("MaxAttackers", 500); + CHS_CLAN_MINLEVEL = ClanHallSiege.getInt("MinClanLevel", 4); + CHS_MAX_FLAGS_PER_CLAN = ClanHallSiege.getInt("MaxFlagsPerClan", 1); + CHS_ENABLE_FAME = ClanHallSiege.getBoolean("EnableFame", false); + CHS_FAME_AMOUNT = ClanHallSiege.getInt("FameAmount", 0); + CHS_FAME_FREQUENCY = ClanHallSiege.getInt("FameFrequency", 0); + + final PropertiesParser geoData = new PropertiesParser(GEOENGINE_CONFIG_FILE); + + GEODATA_PATH = geoData.getString("GeoDataPath", "./data/geodata/"); + COORD_SYNCHRONIZE = geoData.getInt("CoordSynchronize", -1); + + PART_OF_CHARACTER_HEIGHT = geoData.getInt("PartOfCharacterHeight", 75); + MAX_OBSTACLE_HEIGHT = geoData.getInt("MaxObstacleHeight", 32); + + PATHFINDING = geoData.getBoolean("PathFinding", true); + PATHFIND_BUFFERS = geoData.getString("PathFindBuffers", "100x6;128x6;192x6;256x4;320x4;384x4;500x2"); + BASE_WEIGHT = geoData.getInt("BaseWeight", 10); + DIAGONAL_WEIGHT = geoData.getInt("DiagonalWeight", 14); + OBSTACLE_MULTIPLIER = geoData.getInt("ObstacleMultiplier", 10); + HEURISTIC_WEIGHT = geoData.getInt("HeuristicWeight", 20); + MAX_ITERATIONS = geoData.getInt("MaxIterations", 3500); // Load AllowedPlayerRaces config file (if exists) final PropertiesParser AllowedPlayerRaces = new PropertiesParser(CUSTOM_ALLOWED_PLAYER_RACES_CONFIG_FILE); @@ -2816,208 +3013,6 @@ public final class Config final PropertiesParser WalkerBotProtection = new PropertiesParser(CUSTOM_WALKER_BOT_PROTECTION_CONFIG_FILE); L2WALKER_PROTECTION = WalkerBotProtection.getBoolean("L2WalkerProtection", false); - - // Load PvP config file (if exists) - final PropertiesParser PVPSettings = new PropertiesParser(PVP_CONFIG_FILE); - - KARMA_DROP_GM = PVPSettings.getBoolean("CanGMDropEquipment", false); - KARMA_AWARD_PK_KILL = PVPSettings.getBoolean("AwardPKKillPVPPoint", false); - KARMA_PK_LIMIT = PVPSettings.getInt("MinimumPKRequiredToDrop", 5); - KARMA_NONDROPPABLE_PET_ITEMS = PVPSettings.getString("ListOfPetItems", "2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650,9882"); - KARMA_NONDROPPABLE_ITEMS = PVPSettings.getString("ListOfNonDroppableItems", "57,1147,425,1146,461,10,2368,7,6,2370,2369,6842,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,7694,8181,5575,7694,9388,9389,9390"); - - String[] karma = KARMA_NONDROPPABLE_PET_ITEMS.split(","); - KARMA_LIST_NONDROPPABLE_PET_ITEMS = new int[karma.length]; - - for (int i = 0; i < karma.length; i++) - { - KARMA_LIST_NONDROPPABLE_PET_ITEMS[i] = Integer.parseInt(karma[i]); - } - - karma = KARMA_NONDROPPABLE_ITEMS.split(","); - KARMA_LIST_NONDROPPABLE_ITEMS = new int[karma.length]; - - for (int i = 0; i < karma.length; i++) - { - KARMA_LIST_NONDROPPABLE_ITEMS[i] = Integer.parseInt(karma[i]); - } - - // sorting so binarySearch can be used later - Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); - Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); - - PVP_NORMAL_TIME = PVPSettings.getInt("PvPVsNormalTime", 120000); - PVP_PVP_TIME = PVPSettings.getInt("PvPVsPvPTime", 60000); - - // Load Olympiad config file (if exists) - final PropertiesParser Olympiad = new PropertiesParser(OLYMPIAD_CONFIG_FILE); - - ALT_OLY_START_TIME = Olympiad.getInt("AltOlyStartTime", 18); - ALT_OLY_MIN = Olympiad.getInt("AltOlyMin", 0); - ALT_OLY_MAX_BUFFS = Olympiad.getInt("AltOlyMaxBuffs", 5); - ALT_OLY_CPERIOD = Olympiad.getLong("AltOlyCPeriod", 21600000); - ALT_OLY_BATTLE = Olympiad.getLong("AltOlyBattle", 300000); - ALT_OLY_WPERIOD = Olympiad.getLong("AltOlyWPeriod", 604800000); - ALT_OLY_VPERIOD = Olympiad.getLong("AltOlyVPeriod", 86400000); - ALT_OLY_START_POINTS = Olympiad.getInt("AltOlyStartPoints", 10); - ALT_OLY_WEEKLY_POINTS = Olympiad.getInt("AltOlyWeeklyPoints", 10); - ALT_OLY_CLASSED = Olympiad.getInt("AltOlyClassedParticipants", 11); - ALT_OLY_NONCLASSED = Olympiad.getInt("AltOlyNonClassedParticipants", 11); - ALT_OLY_TEAMS = Olympiad.getInt("AltOlyTeamsParticipants", 6); - ALT_OLY_REG_DISPLAY = Olympiad.getInt("AltOlyRegistrationDisplayNumber", 100); - ALT_OLY_CLASSED_REWARD = parseItemsList(Olympiad.getString("AltOlyClassedReward", "13722,50")); - ALT_OLY_NONCLASSED_REWARD = parseItemsList(Olympiad.getString("AltOlyNonClassedReward", "13722,40")); - ALT_OLY_TEAM_REWARD = parseItemsList(Olympiad.getString("AltOlyTeamReward", "13722,85")); - ALT_OLY_COMP_RITEM = Olympiad.getInt("AltOlyCompRewItem", 13722); - ALT_OLY_MIN_MATCHES = Olympiad.getInt("AltOlyMinMatchesForPoints", 15); - ALT_OLY_GP_PER_POINT = Olympiad.getInt("AltOlyGPPerPoint", 1000); - ALT_OLY_HERO_POINTS = Olympiad.getInt("AltOlyHeroPoints", 200); - ALT_OLY_RANK1_POINTS = Olympiad.getInt("AltOlyRank1Points", 100); - ALT_OLY_RANK2_POINTS = Olympiad.getInt("AltOlyRank2Points", 75); - ALT_OLY_RANK3_POINTS = Olympiad.getInt("AltOlyRank3Points", 55); - ALT_OLY_RANK4_POINTS = Olympiad.getInt("AltOlyRank4Points", 40); - ALT_OLY_RANK5_POINTS = Olympiad.getInt("AltOlyRank5Points", 30); - ALT_OLY_MAX_POINTS = Olympiad.getInt("AltOlyMaxPoints", 10); - ALT_OLY_DIVIDER_CLASSED = Olympiad.getInt("AltOlyDividerClassed", 5); - ALT_OLY_DIVIDER_NON_CLASSED = Olympiad.getInt("AltOlyDividerNonClassed", 5); - ALT_OLY_MAX_WEEKLY_MATCHES = Olympiad.getInt("AltOlyMaxWeeklyMatches", 70); - ALT_OLY_MAX_WEEKLY_MATCHES_NON_CLASSED = Olympiad.getInt("AltOlyMaxWeeklyMatchesNonClassed", 60); - ALT_OLY_MAX_WEEKLY_MATCHES_CLASSED = Olympiad.getInt("AltOlyMaxWeeklyMatchesClassed", 30); - ALT_OLY_MAX_WEEKLY_MATCHES_TEAM = Olympiad.getInt("AltOlyMaxWeeklyMatchesTeam", 10); - ALT_OLY_LOG_FIGHTS = Olympiad.getBoolean("AltOlyLogFights", false); - ALT_OLY_SHOW_MONTHLY_WINNERS = Olympiad.getBoolean("AltOlyShowMonthlyWinners", true); - ALT_OLY_ANNOUNCE_GAMES = Olympiad.getBoolean("AltOlyAnnounceGames", true); - final String[] olyRestrictedItems = Olympiad.getString("AltOlyRestrictedItems", "6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,9388,9389,9390,17049,17050,17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,20759,20775,20776,20777,20778,14774").split(","); - LIST_OLY_RESTRICTED_ITEMS = new ArrayList<>(olyRestrictedItems.length); - for (String id : olyRestrictedItems) - { - LIST_OLY_RESTRICTED_ITEMS.add(Integer.parseInt(id)); - } - 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); - ALT_OLY_COMPETITION_DAYS = new ArrayList<>(); - for (String s : Olympiad.getString("AltOlyCompetitionDays", "1,2,3,4,5,6,7").split(",")) - { - ALT_OLY_COMPETITION_DAYS.add(Integer.parseInt(s)); - } - - final File hexIdFile = new File(HEXID_FILE); - if (hexIdFile.exists()) - { - final PropertiesParser hexId = new PropertiesParser(hexIdFile); - - if (hexId.containskey("ServerID") && hexId.containskey("HexID")) - { - SERVER_ID = hexId.getInt("ServerID", 1); - try - { - HEX_ID = new BigInteger(hexId.getString("HexID", null), 16).toByteArray(); - } - catch (Exception e) - { - LOGGER.warning("Could not load HexID file (" + HEXID_FILE + "). Hopefully login will give us one."); - } - } - else - { - LOGGER.warning("Could not load HexID file (" + HEXID_FILE + "). Hopefully login will give us one."); - } - } - else - { - LOGGER.warning("Could not load HexID file (" + HEXID_FILE + "). Hopefully login will give us one."); - } - - // Grand bosses - final PropertiesParser GrandBossSettings = new PropertiesParser(GRANDBOSS_CONFIG_FILE); - - ANTHARAS_WAIT_TIME = GrandBossSettings.getInt("AntharasWaitTime", 30); - ANTHARAS_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfAntharasSpawn", 264); - ANTHARAS_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfAntharasSpawn", 72); - - VALAKAS_WAIT_TIME = GrandBossSettings.getInt("ValakasWaitTime", 30); - VALAKAS_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfValakasSpawn", 264); - VALAKAS_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfValakasSpawn", 72); - - BAIUM_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfBaiumSpawn", 168); - BAIUM_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfBaiumSpawn", 48); - - CORE_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfCoreSpawn", 60); - CORE_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfCoreSpawn", 24); - - ORFEN_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfOrfenSpawn", 48); - ORFEN_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfOrfenSpawn", 20); - - QUEEN_ANT_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfQueenAntSpawn", 36); - QUEEN_ANT_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfQueenAntSpawn", 17); - - BELETH_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfBelethSpawn", 192); - BELETH_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfBelethSpawn", 148); - BELETH_MIN_PLAYERS = GrandBossSettings.getInt("BelethMinPlayers", 36); - - // Gracia Seeds - final PropertiesParser GraciaSeedsSettings = new PropertiesParser(GRACIASEEDS_CONFIG_FILE); - - // Seed of Destruction - SOD_TIAT_KILL_COUNT = GraciaSeedsSettings.getInt("TiatKillCountForNextState", 10); - SOD_STAGE_2_LENGTH = GraciaSeedsSettings.getLong("Stage2Length", 720) * 60000; - - MIN_TIAT_PLAYERS = GraciaSeedsSettings.getInt("MinPlayers", 36); - MAX_TIAT_PLAYERS = GraciaSeedsSettings.getInt("MaxPlayers", 45); - MIN_TIAT_LEVEL = GraciaSeedsSettings.getInt("MinLevel", 75); - - SOI_EKIMUS_KILL_COUNT = GraciaSeedsSettings.getInt("EkimusKillCount", 5); - EROSION_ATTACK_MIN_PLAYERS = GraciaSeedsSettings.getInt("MinEroAttPlayers", 18); - EROSION_ATTACK_MAX_PLAYERS = GraciaSeedsSettings.getInt("MaxEroAttPlayers", 27); - EROSION_DEFENCE_MIN_PLAYERS = GraciaSeedsSettings.getInt("MinEroDefPlayers", 18); - EROSION_DEFENCE_MAX_PLAYERS = GraciaSeedsSettings.getInt("MaxEroDefPlayers", 27); - HEART_ATTACK_MIN_PLAYERS = GraciaSeedsSettings.getInt("MinHeaAttPlayers", 18); - HEART_ATTACK_MAX_PLAYERS = GraciaSeedsSettings.getInt("MaxHeaAttPlayers", 27); - HEART_DEFENCE_MIN_PLAYERS = GraciaSeedsSettings.getInt("MinHeaDefPlayers", 18); - HEART_DEFENCE_MAX_PLAYERS = GraciaSeedsSettings.getInt("MaxHeaDefPlayers", 27); - - try - { - //@formatter:off - FILTER_LIST = Files.lines(Paths.get(CHAT_FILTER_FILE), StandardCharsets.UTF_8) - .map(String::trim) - .filter(line -> (!line.isEmpty() && (line.charAt(0) != '#'))) - .collect(Collectors.toList()); - //@formatter:on - LOGGER.info("Loaded " + FILTER_LIST.size() + " Filter Words."); - } - catch (IOException ioe) - { - LOGGER.log(Level.WARNING, "Error while loading chat filter words!", ioe); - } - - final PropertiesParser ClanHallSiege = new PropertiesParser(CH_SIEGE_CONFIG_FILE); - - CHS_MAX_ATTACKERS = ClanHallSiege.getInt("MaxAttackers", 500); - CHS_CLAN_MINLEVEL = ClanHallSiege.getInt("MinClanLevel", 4); - CHS_MAX_FLAGS_PER_CLAN = ClanHallSiege.getInt("MaxFlagsPerClan", 1); - CHS_ENABLE_FAME = ClanHallSiege.getBoolean("EnableFame", false); - CHS_FAME_AMOUNT = ClanHallSiege.getInt("FameAmount", 0); - CHS_FAME_FREQUENCY = ClanHallSiege.getInt("FameFrequency", 0); - - final PropertiesParser geoData = new PropertiesParser(GEOENGINE_CONFIG_FILE); - - GEODATA_PATH = geoData.getString("GeoDataPath", "./data/geodata/"); - COORD_SYNCHRONIZE = geoData.getInt("CoordSynchronize", -1); - - PART_OF_CHARACTER_HEIGHT = geoData.getInt("PartOfCharacterHeight", 75); - MAX_OBSTACLE_HEIGHT = geoData.getInt("MaxObstacleHeight", 32); - - PATHFINDING = geoData.getBoolean("PathFinding", true); - PATHFIND_BUFFERS = geoData.getString("PathFindBuffers", "100x6;128x6;192x6;256x4;320x4;384x4;500x2"); - BASE_WEIGHT = geoData.getInt("BaseWeight", 10); - DIAGONAL_WEIGHT = geoData.getInt("DiagonalWeight", 14); - OBSTACLE_MULTIPLIER = geoData.getInt("ObstacleMultiplier", 10); - HEURISTIC_WEIGHT = geoData.getInt("HeuristicWeight", 20); - MAX_ITERATIONS = geoData.getInt("MaxIterations", 3500); } else if (Server.serverMode == Server.MODE_LOGINSERVER) {