Guest User

Untitled

a guest
Aug 2nd, 2018
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 239.78 KB | None | 0 0
  1. /*
  2.  * L2jFrozen Project - www.l2jfrozen.com
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify
  5.  * it under the terms of the GNU General Public License as published by
  6.  * the Free Software Foundation; either version 2, or (at your option)
  7.  * any later version.
  8.  *
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  17.  * 02111-1307, USA.
  18.  *
  19.  * http://www.gnu.org/copyleft/gpl.html
  20.  */
  21. package com.l2jfrozen;
  22.  
  23. import java.io.BufferedReader;
  24. import java.io.File;
  25. import java.io.FileInputStream;
  26. import java.io.FileNotFoundException;
  27. import java.io.FileOutputStream;
  28. import java.io.FileReader;
  29. import java.io.IOException;
  30. import java.io.InputStream;
  31. import java.io.InputStreamReader;
  32. import java.io.LineNumberReader;
  33. import java.io.OutputStream;
  34. import java.math.BigInteger;
  35. import java.net.UnknownHostException;
  36. import java.util.ArrayList;
  37. import java.util.HashMap;
  38. import java.util.List;
  39. import java.util.Map;
  40. import java.util.Properties;
  41. import java.util.Random;
  42.  
  43. import javolution.text.TypeFormat;
  44. import javolution.util.FastList;
  45. import javolution.util.FastMap;
  46.  
  47. import org.apache.log4j.Logger;
  48.  
  49. import com.l2jfrozen.gameserver.model.entity.olympiad.OlympiadPeriod;
  50. import com.l2jfrozen.gameserver.util.FloodProtectorConfig;
  51. import com.l2jfrozen.loginserver.LoginController;
  52. import com.l2jfrozen.util.StringUtil;
  53.  
  54. public final class Config
  55. {
  56.     private static final Logger LOGGER = Logger.getLogger(Config.class);
  57.    
  58.     // ============================================================
  59.     public static boolean EVERYBODY_HAS_ADMIN_RIGHTS;
  60.     public static boolean SHOW_GM_LOGIN;
  61.     public static boolean GM_STARTUP_INVISIBLE;
  62.     public static boolean GM_SPECIAL_EFFECT;
  63.     public static boolean GM_STARTUP_SILENCE;
  64.     public static boolean GM_STARTUP_AUTO_LIST;
  65.     public static String GM_ADMIN_MENU_STYLE;
  66.     public static boolean GM_HERO_AURA;
  67.     public static boolean GM_STARTUP_INVULNERABLE;
  68.     public static boolean GM_ANNOUNCER_NAME;
  69.     public static int MASTERACCESS_LEVEL;
  70.     public static int USERACCESS_LEVEL;
  71.     public static boolean MASTERACCESS_NAME_COLOR_ENABLED;
  72.     public static boolean MASTERACCESS_TITLE_COLOR_ENABLED;
  73.     public static int MASTERACCESS_NAME_COLOR;
  74.     public static int MASTERACCESS_TITLE_COLOR;
  75.    
  76.     // ============================================================
  77.     public static void loadAccessConfig()
  78.     {
  79.         final String ACCESS = FService.ACCESS_CONFIGURATION_FILE;
  80.        
  81.         try
  82.         {
  83.             final Properties AccessSettings = new Properties();
  84.             final InputStream is = new FileInputStream(new File(ACCESS));
  85.             AccessSettings.load(is);
  86.             is.close();
  87.             // ============================================================
  88.             EVERYBODY_HAS_ADMIN_RIGHTS = Boolean.parseBoolean(AccessSettings.getProperty("EverybodyHasAdminRights", "false"));
  89.             GM_STARTUP_AUTO_LIST = Boolean.parseBoolean(AccessSettings.getProperty("GMStartupAutoList", "true"));
  90.             GM_ADMIN_MENU_STYLE = AccessSettings.getProperty("GMAdminMenuStyle", "modern");
  91.             GM_HERO_AURA = Boolean.parseBoolean(AccessSettings.getProperty("GMHeroAura", "false"));
  92.             GM_STARTUP_INVULNERABLE = Boolean.parseBoolean(AccessSettings.getProperty("GMStartupInvulnerable", "true"));
  93.             GM_ANNOUNCER_NAME = Boolean.parseBoolean(AccessSettings.getProperty("AnnounceGmName", "false"));
  94.             SHOW_GM_LOGIN = Boolean.parseBoolean(AccessSettings.getProperty("ShowGMLogin", "false"));
  95.             GM_STARTUP_INVISIBLE = Boolean.parseBoolean(AccessSettings.getProperty("GMStartupInvisible", "true"));
  96.             GM_SPECIAL_EFFECT = Boolean.parseBoolean(AccessSettings.getProperty("GmLoginSpecialEffect", "False"));
  97.             GM_STARTUP_SILENCE = Boolean.parseBoolean(AccessSettings.getProperty("GMStartupSilence", "true"));
  98.             MASTERACCESS_LEVEL = Integer.parseInt(AccessSettings.getProperty("MasterAccessLevel", "1"));
  99.             MASTERACCESS_NAME_COLOR_ENABLED = Boolean.parseBoolean(AccessSettings.getProperty("MasterNameColorEnabled", "False"));
  100.             MASTERACCESS_TITLE_COLOR_ENABLED = Boolean.parseBoolean(AccessSettings.getProperty("MasterTitleColorEnabled", "False"));
  101.             MASTERACCESS_NAME_COLOR = Integer.decode("0x" + AccessSettings.getProperty("MasterNameColor", "00FF00"));
  102.             MASTERACCESS_TITLE_COLOR = Integer.decode("0x" + AccessSettings.getProperty("MasterTitleColor", "00FF00"));
  103.             USERACCESS_LEVEL = Integer.parseInt(AccessSettings.getProperty("UserAccessLevel", "0"));
  104.         }
  105.         catch (final Exception e)
  106.         {
  107.             e.printStackTrace();
  108.             throw new Error("Failed to Load " + ACCESS + " File.");
  109.         }
  110.     }
  111.    
  112.     // ============================================================
  113.     public static boolean CHECK_KNOWN;
  114.    
  115.     public static String DEFAULT_GLOBAL_CHAT;
  116.     public static String DEFAULT_TRADE_CHAT;
  117.    
  118.     public static boolean TRADE_CHAT_WITH_PVP;
  119.     public static int TRADE_PVP_AMOUNT;
  120.     public static boolean GLOBAL_CHAT_WITH_PVP;
  121.     public static int GLOBAL_PVP_AMOUNT;
  122.    
  123.     // Anti Brute force attack on login
  124.     public static int BRUT_AVG_TIME;
  125.     public static int BRUT_LOGON_ATTEMPTS;
  126.     public static int BRUT_BAN_IP_TIME;
  127.    
  128.     public static int MAX_CHAT_LENGTH;
  129.     public static boolean TRADE_CHAT_IS_NOOBLE;
  130.     public static boolean PRECISE_DROP_CALCULATION;
  131.     public static boolean MULTIPLE_ITEM_DROP;
  132.     public static int DELETE_DAYS;
  133.     public static int MAX_DRIFT_RANGE;
  134.     public static boolean ALLOWFISHING;
  135.     public static boolean ALLOW_MANOR;
  136.     public static int AUTODESTROY_ITEM_AFTER;
  137.     public static int HERB_AUTO_DESTROY_TIME;
  138.     public static String PROTECTED_ITEMS;
  139.     public static FastList<Integer> LIST_PROTECTED_ITEMS = new FastList<>();
  140.     public static boolean DESTROY_DROPPED_PLAYER_ITEM;
  141.     public static boolean DESTROY_EQUIPABLE_PLAYER_ITEM;
  142.     public static boolean SAVE_DROPPED_ITEM;
  143.     public static boolean EMPTY_DROPPED_ITEM_TABLE_AFTER_LOAD;
  144.     public static int SAVE_DROPPED_ITEM_INTERVAL;
  145.     public static boolean CLEAR_DROPPED_ITEM_TABLE;
  146.     public static boolean ALLOW_DISCARDITEM;
  147.     public static boolean ALLOW_FREIGHT;
  148.     public static boolean ALLOW_WAREHOUSE;
  149.     public static boolean WAREHOUSE_CACHE;
  150.     public static int WAREHOUSE_CACHE_TIME;
  151.     public static boolean ALLOW_WEAR;
  152.     public static int WEAR_DELAY;
  153.     public static int WEAR_PRICE;
  154.     public static boolean ALLOW_LOTTERY;
  155.     public static boolean ALLOW_RACE;
  156.     public static boolean ALLOW_RENTPET;
  157.     public static boolean ALLOW_BOAT;
  158.     public static boolean ALLOW_CURSED_WEAPONS;
  159.     public static boolean ALLOW_NPC_WALKERS;
  160.     public static int MIN_NPC_ANIMATION;
  161.     public static int MAX_NPC_ANIMATION;
  162.     public static int MIN_MONSTER_ANIMATION;
  163.     public static int MAX_MONSTER_ANIMATION;
  164.     public static boolean ALLOW_USE_CURSOR_FOR_WALK;
  165.     public static boolean USE_3D_MAP;
  166.     public static String COMMUNITY_TYPE;
  167.     public static String BBS_DEFAULT;
  168.     public static boolean SHOW_LEVEL_COMMUNITYBOARD;
  169.     public static boolean SHOW_STATUS_COMMUNITYBOARD;
  170.     public static int NAME_PAGE_SIZE_COMMUNITYBOARD;
  171.     public static int NAME_PER_ROW_COMMUNITYBOARD;
  172.     public static int PATH_NODE_RADIUS;
  173.     public static int NEW_NODE_ID;
  174.     public static int SELECTED_NODE_ID;
  175.     public static int LINKED_NODE_ID;
  176.     public static String NEW_NODE_TYPE;
  177.     public static boolean SHOW_NPC_LVL;
  178.     public static int ZONE_TOWN;
  179.     public static boolean COUNT_PACKETS = false;
  180.     public static boolean DUMP_PACKET_COUNTS = false;
  181.     public static int DUMP_INTERVAL_SECONDS = 60;
  182.     public static int DEFAULT_PUNISH;
  183.     public static int DEFAULT_PUNISH_PARAM;
  184.     public static boolean AUTODELETE_INVALID_QUEST_DATA;
  185.     public static boolean GRIDS_ALWAYS_ON;
  186.     public static int GRID_NEIGHBOR_TURNON_TIME;
  187.     public static int GRID_NEIGHBOR_TURNOFF_TIME;
  188.     public static int MINIMUM_UPDATE_DISTANCE;
  189.     public static int KNOWNLIST_FORGET_DELAY;
  190.     public static int MINIMUN_UPDATE_TIME;
  191.     public static boolean BYPASS_VALIDATION;
  192.    
  193.     public static boolean HIGH_RATE_SERVER_DROPS;
  194.    
  195.     public static boolean FORCE_COMPLETE_STATUS_UPDATE;
  196.    
  197.     // ============================================================
  198.     public static void loadOptionsConfig()
  199.     {
  200.         final String OPTIONS = FService.OPTIONS_FILE;
  201.        
  202.         try
  203.         {
  204.             final Properties optionsSettings = new Properties();
  205.             final InputStream is = new FileInputStream(new File(OPTIONS));
  206.             optionsSettings.load(is);
  207.             is.close();
  208.            
  209.             AUTODESTROY_ITEM_AFTER = Integer.parseInt(optionsSettings.getProperty("AutoDestroyDroppedItemAfter", "0"));
  210.             HERB_AUTO_DESTROY_TIME = Integer.parseInt(optionsSettings.getProperty("AutoDestroyHerbTime", "15")) * 1000;
  211.             PROTECTED_ITEMS = optionsSettings.getProperty("ListOfProtectedItems");
  212.             LIST_PROTECTED_ITEMS = new FastList<>();
  213.             for (final String id : PROTECTED_ITEMS.split(","))
  214.             {
  215.                 LIST_PROTECTED_ITEMS.add(Integer.parseInt(id));
  216.             }
  217.             DESTROY_DROPPED_PLAYER_ITEM = Boolean.valueOf(optionsSettings.getProperty("DestroyPlayerDroppedItem", "false"));
  218.             DESTROY_EQUIPABLE_PLAYER_ITEM = Boolean.valueOf(optionsSettings.getProperty("DestroyEquipableItem", "false"));
  219.             SAVE_DROPPED_ITEM = Boolean.valueOf(optionsSettings.getProperty("SaveDroppedItem", "false"));
  220.             EMPTY_DROPPED_ITEM_TABLE_AFTER_LOAD = Boolean.valueOf(optionsSettings.getProperty("EmptyDroppedItemTableAfterLoad", "false"));
  221.             SAVE_DROPPED_ITEM_INTERVAL = Integer.parseInt(optionsSettings.getProperty("SaveDroppedItemInterval", "0")) * 60000;
  222.             CLEAR_DROPPED_ITEM_TABLE = Boolean.valueOf(optionsSettings.getProperty("ClearDroppedItemTable", "false"));
  223.            
  224.             PRECISE_DROP_CALCULATION = Boolean.valueOf(optionsSettings.getProperty("PreciseDropCalculation", "True"));
  225.             MULTIPLE_ITEM_DROP = Boolean.valueOf(optionsSettings.getProperty("MultipleItemDrop", "True"));
  226.            
  227.             ALLOW_WAREHOUSE = Boolean.valueOf(optionsSettings.getProperty("AllowWarehouse", "True"));
  228.             WAREHOUSE_CACHE = Boolean.valueOf(optionsSettings.getProperty("WarehouseCache", "False"));
  229.             WAREHOUSE_CACHE_TIME = Integer.parseInt(optionsSettings.getProperty("WarehouseCacheTime", "15"));
  230.             ALLOW_FREIGHT = Boolean.valueOf(optionsSettings.getProperty("AllowFreight", "True"));
  231.             ALLOW_WEAR = Boolean.valueOf(optionsSettings.getProperty("AllowWear", "False"));
  232.             WEAR_DELAY = Integer.parseInt(optionsSettings.getProperty("WearDelay", "5"));
  233.             WEAR_PRICE = Integer.parseInt(optionsSettings.getProperty("WearPrice", "10"));
  234.             ALLOW_LOTTERY = Boolean.valueOf(optionsSettings.getProperty("AllowLottery", "False"));
  235.             ALLOW_RACE = Boolean.valueOf(optionsSettings.getProperty("AllowRace", "False"));
  236.             ALLOW_RENTPET = Boolean.valueOf(optionsSettings.getProperty("AllowRentPet", "False"));
  237.             ALLOW_DISCARDITEM = Boolean.valueOf(optionsSettings.getProperty("AllowDiscardItem", "True"));
  238.             ALLOWFISHING = Boolean.valueOf(optionsSettings.getProperty("AllowFishing", "False"));
  239.             ALLOW_MANOR = Boolean.parseBoolean(optionsSettings.getProperty("AllowManor", "False"));
  240.             ALLOW_BOAT = Boolean.valueOf(optionsSettings.getProperty("AllowBoat", "False"));
  241.             ALLOW_NPC_WALKERS = Boolean.valueOf(optionsSettings.getProperty("AllowNpcWalkers", "true"));
  242.             ALLOW_CURSED_WEAPONS = Boolean.valueOf(optionsSettings.getProperty("AllowCursedWeapons", "False"));
  243.            
  244.             ALLOW_USE_CURSOR_FOR_WALK = Boolean.valueOf(optionsSettings.getProperty("AllowUseCursorForWalk", "False"));
  245.             DEFAULT_GLOBAL_CHAT = optionsSettings.getProperty("GlobalChat", "ON");
  246.             DEFAULT_TRADE_CHAT = optionsSettings.getProperty("TradeChat", "ON");
  247.             MAX_CHAT_LENGTH = Integer.parseInt(optionsSettings.getProperty("MaxChatLength", "100"));
  248.            
  249.             TRADE_CHAT_IS_NOOBLE = Boolean.valueOf(optionsSettings.getProperty("TradeChatIsNooble", "false"));
  250.             TRADE_CHAT_WITH_PVP = Boolean.valueOf(optionsSettings.getProperty("TradeChatWithPvP", "false"));
  251.             TRADE_PVP_AMOUNT = Integer.parseInt(optionsSettings.getProperty("TradePvPAmount", "800"));
  252.             GLOBAL_CHAT_WITH_PVP = Boolean.valueOf(optionsSettings.getProperty("GlobalChatWithPvP", "false"));
  253.             GLOBAL_PVP_AMOUNT = Integer.parseInt(optionsSettings.getProperty("GlobalPvPAmount", "1500"));
  254.            
  255.             COMMUNITY_TYPE = optionsSettings.getProperty("CommunityType", "old").toLowerCase();
  256.             BBS_DEFAULT = optionsSettings.getProperty("BBSDefault", "_bbshome");
  257.             SHOW_LEVEL_COMMUNITYBOARD = Boolean.valueOf(optionsSettings.getProperty("ShowLevelOnCommunityBoard", "False"));
  258.             SHOW_STATUS_COMMUNITYBOARD = Boolean.valueOf(optionsSettings.getProperty("ShowStatusOnCommunityBoard", "True"));
  259.             NAME_PAGE_SIZE_COMMUNITYBOARD = Integer.parseInt(optionsSettings.getProperty("NamePageSizeOnCommunityBoard", "50"));
  260.             NAME_PER_ROW_COMMUNITYBOARD = Integer.parseInt(optionsSettings.getProperty("NamePerRowOnCommunityBoard", "5"));
  261.            
  262.             ZONE_TOWN = Integer.parseInt(optionsSettings.getProperty("ZoneTown", "0"));
  263.            
  264.             MAX_DRIFT_RANGE = Integer.parseInt(optionsSettings.getProperty("MaxDriftRange", "300"));
  265.            
  266.             MIN_NPC_ANIMATION = Integer.parseInt(optionsSettings.getProperty("MinNPCAnimation", "10"));
  267.             MAX_NPC_ANIMATION = Integer.parseInt(optionsSettings.getProperty("MaxNPCAnimation", "20"));
  268.             MIN_MONSTER_ANIMATION = Integer.parseInt(optionsSettings.getProperty("MinMonsterAnimation", "5"));
  269.             MAX_MONSTER_ANIMATION = Integer.parseInt(optionsSettings.getProperty("MaxMonsterAnimation", "20"));
  270.            
  271.             SHOW_NPC_LVL = Boolean.valueOf(optionsSettings.getProperty("ShowNpcLevel", "False"));
  272.            
  273.             FORCE_INVENTORY_UPDATE = Boolean.valueOf(optionsSettings.getProperty("ForceInventoryUpdate", "False"));
  274.            
  275.             FORCE_COMPLETE_STATUS_UPDATE = Boolean.valueOf(optionsSettings.getProperty("ForceCompletePlayerStatusUpdate", "true"));
  276.            
  277.             AUTODELETE_INVALID_QUEST_DATA = Boolean.valueOf(optionsSettings.getProperty("AutoDeleteInvalidQuestData", "False"));
  278.            
  279.             DELETE_DAYS = Integer.parseInt(optionsSettings.getProperty("DeleteCharAfterDays", "7"));
  280.            
  281.             DEFAULT_PUNISH = Integer.parseInt(optionsSettings.getProperty("DefaultPunish", "2"));
  282.             DEFAULT_PUNISH_PARAM = Integer.parseInt(optionsSettings.getProperty("DefaultPunishParam", "0"));
  283.            
  284.             GRIDS_ALWAYS_ON = Boolean.parseBoolean(optionsSettings.getProperty("GridsAlwaysOn", "False"));
  285.             GRID_NEIGHBOR_TURNON_TIME = Integer.parseInt(optionsSettings.getProperty("GridNeighborTurnOnTime", "30"));
  286.             GRID_NEIGHBOR_TURNOFF_TIME = Integer.parseInt(optionsSettings.getProperty("GridNeighborTurnOffTime", "300"));
  287.            
  288.             USE_3D_MAP = Boolean.valueOf(optionsSettings.getProperty("Use3DMap", "False"));
  289.            
  290.             PATH_NODE_RADIUS = Integer.parseInt(optionsSettings.getProperty("PathNodeRadius", "50"));
  291.             NEW_NODE_ID = Integer.parseInt(optionsSettings.getProperty("NewNodeId", "7952"));
  292.             SELECTED_NODE_ID = Integer.parseInt(optionsSettings.getProperty("NewNodeId", "7952"));
  293.             LINKED_NODE_ID = Integer.parseInt(optionsSettings.getProperty("NewNodeId", "7952"));
  294.             NEW_NODE_TYPE = optionsSettings.getProperty("NewNodeType", "npc");
  295.            
  296.             COUNT_PACKETS = Boolean.valueOf(optionsSettings.getProperty("CountPacket", "false"));
  297.             DUMP_PACKET_COUNTS = Boolean.valueOf(optionsSettings.getProperty("DumpPacketCounts", "false"));
  298.             DUMP_INTERVAL_SECONDS = Integer.parseInt(optionsSettings.getProperty("PacketDumpInterval", "60"));
  299.            
  300.             MINIMUM_UPDATE_DISTANCE = Integer.parseInt(optionsSettings.getProperty("MaximumUpdateDistance", "50"));
  301.             MINIMUN_UPDATE_TIME = Integer.parseInt(optionsSettings.getProperty("MinimumUpdateTime", "500"));
  302.             CHECK_KNOWN = Boolean.valueOf(optionsSettings.getProperty("CheckKnownList", "false"));
  303.             KNOWNLIST_FORGET_DELAY = Integer.parseInt(optionsSettings.getProperty("KnownListForgetDelay", "10000"));
  304.            
  305.             HIGH_RATE_SERVER_DROPS = Boolean.valueOf(optionsSettings.getProperty("HighRateServerDrops", "false"));
  306.         }
  307.         catch (final Exception e)
  308.         {
  309.             e.printStackTrace();
  310.             throw new Error("Failed to Load " + OPTIONS + " File.");
  311.         }
  312.     }
  313.    
  314.     // ============================================================
  315.     public static int PORT_GAME;
  316.     public static String GAMESERVER_DB;
  317.     public static String LOGINSERVER_DB;
  318.     public static String GAMESERVER_HOSTNAME;
  319.     public static String DATABASE_POOL_TYPE;
  320.     public static String DATABASE_DRIVER;
  321.     public static String DATABASE_URL;
  322.     public static boolean ENABLE_DDOS_PROTECTION_SYSTEM;
  323.     public static boolean ENABLE_DEBUG_DDOS_PROTECTION_SYSTEM;
  324.     public static String DDOS_COMMAND_BLOCK;
  325.     public static String DATABASE_LOGIN;
  326.     public static String DATABASE_PASSWORD;
  327.     public static int DATABASE_MAX_CONNECTIONS;
  328.     public static int DATABASE_MAX_IDLE_TIME;
  329.     public static int DATABASE_TIMEOUT;
  330.     public static int DATABASE_CONNECTION_TIMEOUT;
  331.     public static int DATABASE_PARTITION_COUNT;
  332.     public static boolean RESERVE_HOST_ON_LOGIN = false;
  333.     public static boolean RWHO_LOG;
  334.     public static int RWHO_FORCE_INC;
  335.     public static int RWHO_KEEP_STAT;
  336.     public static int RWHO_MAX_ONLINE;
  337.     public static boolean RWHO_SEND_TRASH;
  338.     public static int RWHO_ONLINE_INCREMENT;
  339.     public static float RWHO_PRIV_STORE_FACTOR;
  340.     public static int RWHO_ARRAY[] = new int[13];
  341.    
  342.     // ============================================================
  343.     public static void loadServerConfig()
  344.     {
  345.         final String GAMESERVER = FService.CONFIGURATION_FILE;
  346.        
  347.         try
  348.         {
  349.             final Properties serverSettings = new Properties();
  350.             final InputStream is = new FileInputStream(new File(GAMESERVER));
  351.             serverSettings.load(is);
  352.             is.close();
  353.             GAMESERVER_HOSTNAME = serverSettings.getProperty("GameserverHostname");
  354.             PORT_GAME = Integer.parseInt(serverSettings.getProperty("GameserverPort", "7777"));
  355.            
  356.             EXTERNAL_HOSTNAME = serverSettings.getProperty("ExternalHostname", "*");
  357.             INTERNAL_HOSTNAME = serverSettings.getProperty("InternalHostname", "*");
  358.            
  359.             GAME_SERVER_LOGIN_PORT = Integer.parseInt(serverSettings.getProperty("LoginPort", "9014"));
  360.             GAME_SERVER_LOGIN_HOST = serverSettings.getProperty("LoginHost", "127.0.0.1");
  361.            
  362.             DATABASE_POOL_TYPE = serverSettings.getProperty("DatabasePoolType", "c3p0");
  363.             DATABASE_DRIVER = serverSettings.getProperty("Driver", "com.mysql.jdbc.Driver");
  364.            
  365.             GAMESERVER_DB = serverSettings.getProperty("GameserverDB", "gameserver_beta");
  366.             LOGINSERVER_DB = serverSettings.getProperty("LoginserverDB", "loginserver_beta");
  367.            
  368.             final String DATABASE_URL_BASE = serverSettings.getProperty("URL", "jdbc:mysql://localhost/");
  369.             DATABASE_URL = DATABASE_URL_BASE + GAMESERVER_DB;
  370.            
  371.             DATABASE_LOGIN = serverSettings.getProperty("Login", "root");
  372.             DATABASE_PASSWORD = serverSettings.getProperty("Password", "");
  373.             DATABASE_MAX_CONNECTIONS = Integer.parseInt(serverSettings.getProperty("MaximumDbConnections", "10"));
  374.             DATABASE_MAX_IDLE_TIME = Integer.parseInt(serverSettings.getProperty("MaximumDbIdleTime", "0"));
  375.            
  376.             DATABASE_TIMEOUT = Integer.parseInt(serverSettings.getProperty("TimeOutConDb", "0"));
  377.             DATABASE_PARTITION_COUNT = Integer.parseInt(serverSettings.getProperty("PartitionCount", "3"));
  378.             DATABASE_CONNECTION_TIMEOUT = Integer.parseInt(serverSettings.getProperty("SingleConnectionTimeOutDb", "150000"));
  379.            
  380.             DATAPACK_ROOT = new File(serverSettings.getProperty("DatapackRoot", ".")).getCanonicalFile();
  381.            
  382.             final Random ppc = new Random();
  383.             int z = ppc.nextInt(6);
  384.             if (z == 0)
  385.             {
  386.                 z += 2;
  387.             }
  388.             for (int x = 0; x < 8; x++)
  389.             {
  390.                 if (x == 4)
  391.                 {
  392.                     RWHO_ARRAY[x] = 44;
  393.                 }
  394.                 else
  395.                 {
  396.                     RWHO_ARRAY[x] = 51 + ppc.nextInt(z);
  397.                 }
  398.             }
  399.             RWHO_ARRAY[11] = 37265 + ppc.nextInt(z * 2 + 3);
  400.             RWHO_ARRAY[8] = 51 + ppc.nextInt(z);
  401.             z = 36224 + ppc.nextInt(z * 2);
  402.             RWHO_ARRAY[9] = z;
  403.             RWHO_ARRAY[10] = z;
  404.             RWHO_ARRAY[12] = 1;
  405.             RWHO_LOG = Boolean.parseBoolean(serverSettings.getProperty("RemoteWhoLog", "False"));
  406.             RWHO_SEND_TRASH = Boolean.parseBoolean(serverSettings.getProperty("RemoteWhoSendTrash", "False"));
  407.             RWHO_MAX_ONLINE = Integer.parseInt(serverSettings.getProperty("RemoteWhoMaxOnline", "0"));
  408.             RWHO_KEEP_STAT = Integer.parseInt(serverSettings.getProperty("RemoteOnlineKeepStat", "5"));
  409.             RWHO_ONLINE_INCREMENT = Integer.parseInt(serverSettings.getProperty("RemoteOnlineIncrement", "0"));
  410.             RWHO_PRIV_STORE_FACTOR = Float.parseFloat(serverSettings.getProperty("RemotePrivStoreFactor", "0"));
  411.             RWHO_FORCE_INC = Integer.parseInt(serverSettings.getProperty("RemoteWhoForceInc", "0"));
  412.         }
  413.         catch (final Exception e)
  414.         {
  415.             e.printStackTrace();
  416.             throw new Error("Failed to Load " + GAMESERVER + " File.");
  417.         }
  418.     }
  419.    
  420.     // ============================================================
  421.     public static String SERVER_REVISION;
  422.     public static String SERVER_BUILD_DATE;
  423.     public static String SERVER_VERSION;
  424.    
  425.     // ============================================================
  426.     public static void loadServerVersionConfig()
  427.     {
  428.         final String SV = FService.SERVER_VERSION_FILE;
  429.        
  430.         try
  431.         {
  432.             final Properties serverVersion = new Properties();
  433.             final InputStream is = new FileInputStream(new File(SV));
  434.             serverVersion.load(is);
  435.             is.close();
  436.             SERVER_REVISION = serverVersion.getProperty("revision", "Unsupported Custom Version.");
  437.             SERVER_BUILD_DATE = serverVersion.getProperty("builddate", "Undefined Date.");
  438.             SERVER_VERSION = serverVersion.getProperty("revision", "null");
  439.         }
  440.         catch (final Exception e)
  441.         {
  442.             LOGGER.error(e);
  443.         }
  444.     }
  445.    
  446.     // ============================================================
  447.     public static String DATAPACK_VERSION;
  448.     public static String DATAPACK_BUILD_DATE;
  449.    
  450.     // ============================================================
  451.     public static void loadDPVersionConfig()
  452.     {
  453.         final String DP = FService.DATAPACK_VERSION_FILE;
  454.        
  455.         try
  456.         {
  457.             final Properties dpVersion = new Properties();
  458.             final InputStream is = new FileInputStream(new File(DP));
  459.             dpVersion.load(is);
  460.             is.close();
  461.             DATAPACK_VERSION = dpVersion.getProperty("version", "Unsupported Custom Version.");
  462.             SERVER_BUILD_DATE = dpVersion.getProperty("builddate", "Undefined Date.");
  463.            
  464.         }
  465.         catch (final Exception e)
  466.         {
  467.             LOGGER.error(e);
  468.         }
  469.     }
  470.    
  471.     // ============================================================
  472.     public static boolean IS_TELNET_ENABLED;
  473.    
  474.     // ============================================================
  475.     public static void loadTelnetConfig()
  476.     {
  477.         // Load Telnet L2Properties file (if exists)
  478.         FileInputStream is = null;
  479.         try
  480.         {
  481.             final L2Properties telnetSettings = new L2Properties();
  482.             is = new FileInputStream(new File(FService.TELNET_FILE));
  483.             telnetSettings.load(is);
  484.            
  485.             IS_TELNET_ENABLED = Boolean.parseBoolean(telnetSettings.getProperty("EnableTelnet", "false"));
  486.         }
  487.         catch (final Exception e)
  488.         {
  489.             e.printStackTrace();
  490.             throw new Error("Failed to Load " + FService.TELNET_FILE + " File.");
  491.         }
  492.         finally
  493.         {
  494.            
  495.             if (is != null)
  496.             {
  497.                 try
  498.                 {
  499.                     is.close();
  500.                 }
  501.                 catch (final IOException e)
  502.                 {
  503.                     e.printStackTrace();
  504.                 }
  505.             }
  506.         }
  507.        
  508.     }
  509.    
  510.     // ============================================================
  511.     public static IdFactoryType IDFACTORY_TYPE;
  512.     public static boolean BAD_ID_CHECKING;
  513.     public static ObjectMapType MAP_TYPE;
  514.     public static ObjectSetType SET_TYPE;
  515.    
  516.     // ============================================================
  517.     public static void loadIdFactoryConfig()
  518.     {
  519.         final String ID = FService.ID_CONFIG_FILE;
  520.        
  521.         try
  522.         {
  523.             final Properties idSettings = new Properties();
  524.             final InputStream is = new FileInputStream(new File(ID));
  525.             idSettings.load(is);
  526.             is.close();
  527.            
  528.             MAP_TYPE = ObjectMapType.valueOf(idSettings.getProperty("L2Map", "WorldObjectMap"));
  529.             SET_TYPE = ObjectSetType.valueOf(idSettings.getProperty("L2Set", "WorldObjectSet"));
  530.             IDFACTORY_TYPE = IdFactoryType.valueOf(idSettings.getProperty("IDFactory", "Compaction"));
  531.             BAD_ID_CHECKING = Boolean.valueOf(idSettings.getProperty("BadIdChecking", "True"));
  532.         }
  533.         catch (final Exception e)
  534.         {
  535.             e.printStackTrace();
  536.             throw new Error("Failed to Load " + ID + " File.");
  537.         }
  538.     }
  539.    
  540.     // ============================================================
  541.     public static int MAX_ITEM_IN_PACKET;
  542.     public static boolean JAIL_IS_PVP;
  543.     public static boolean JAIL_DISABLE_CHAT;
  544.     public static int WYVERN_SPEED;
  545.     public static int STRIDER_SPEED;
  546.     public static boolean ALLOW_WYVERN_UPGRADER;
  547.     public static int INVENTORY_MAXIMUM_NO_DWARF;
  548.     public static int INVENTORY_MAXIMUM_DWARF;
  549.     public static int INVENTORY_MAXIMUM_GM;
  550.     public static int WAREHOUSE_SLOTS_NO_DWARF;
  551.     public static int WAREHOUSE_SLOTS_DWARF;
  552.     public static int WAREHOUSE_SLOTS_CLAN;
  553.     public static int FREIGHT_SLOTS;
  554.     public static String NONDROPPABLE_ITEMS;
  555.     public static FastList<Integer> LIST_NONDROPPABLE_ITEMS = new FastList<>();
  556.     public static String PET_RENT_NPC;
  557.     public static FastList<Integer> LIST_PET_RENT_NPC = new FastList<>();
  558.     public static boolean EFFECT_CANCELING;
  559.     public static double HP_REGEN_MULTIPLIER;
  560.     public static double MP_REGEN_MULTIPLIER;
  561.     public static double CP_REGEN_MULTIPLIER;
  562.     public static double RAID_HP_REGEN_MULTIPLIER;
  563.     public static double RAID_MP_REGEN_MULTIPLIER;
  564.     public static double RAID_P_DEFENCE_MULTIPLIER;
  565.     public static double RAID_M_DEFENCE_MULTIPLIER;
  566.     public static double RAID_MINION_RESPAWN_TIMER;
  567.     public static float RAID_MIN_RESPAWN_MULTIPLIER;
  568.     public static float RAID_MAX_RESPAWN_MULTIPLIER;
  569.     public static int STARTING_ADENA;
  570.     public static int STARTING_AA;
  571.     public static boolean ENABLE_AIO_SYSTEM;
  572.     public static Map<Integer, Integer> AIO_SKILLS;
  573.     public static boolean ALLOW_AIO_NCOLOR;
  574.     public static int AIO_NCOLOR;
  575.     public static boolean ALLOW_AIO_TCOLOR;
  576.     public static int AIO_TCOLOR;
  577.     public static boolean ALLOW_AIO_USE_GK;
  578.     public static boolean ALLOW_AIO_USE_CM;
  579.     public static boolean ALLOW_AIO_IN_EVENTS;
  580.     public static boolean ANNOUNCE_CASTLE_LORDS;
  581.    
  582.     /** Configuration to allow custom items to be given on character creation */
  583.     public static boolean CUSTOM_STARTER_ITEMS_ENABLED;
  584.     public static List<int[]> STARTING_CUSTOM_ITEMS_F = new ArrayList<>();
  585.     public static List<int[]> STARTING_CUSTOM_ITEMS_M = new ArrayList<>();
  586.    
  587.     public static boolean DEEPBLUE_DROP_RULES;
  588.     public static int UNSTUCK_INTERVAL;
  589.     public static int DEATH_PENALTY_CHANCE;
  590.     public static int PLAYER_SPAWN_PROTECTION;
  591.     public static int PLAYER_TELEPORT_PROTECTION;
  592.     public static boolean EFFECT_TELEPORT_PROTECTION;
  593.     public static int PLAYER_FAKEDEATH_UP_PROTECTION;
  594.     public static String PARTY_XP_CUTOFF_METHOD;
  595.     public static int PARTY_XP_CUTOFF_LEVEL;
  596.     public static double PARTY_XP_CUTOFF_PERCENT;
  597.     public static double RESPAWN_RESTORE_CP;
  598.     public static double RESPAWN_RESTORE_HP;
  599.     public static double RESPAWN_RESTORE_MP;
  600.     public static boolean RESPAWN_RANDOM_ENABLED;
  601.     public static int RESPAWN_RANDOM_MAX_OFFSET;
  602.     public static int MAX_PVTSTORE_SLOTS_DWARF;
  603.     public static int MAX_PVTSTORE_SLOTS_OTHER;
  604.     public static boolean PETITIONING_ALLOWED;
  605.     public static int MAX_PETITIONS_PER_PLAYER;
  606.     public static int MAX_PETITIONS_PENDING;
  607.     public static boolean ANNOUNCE_MAMMON_SPAWN;
  608.     public static boolean ENABLE_MODIFY_SKILL_DURATION;
  609.     public static FastMap<Integer, Integer> SKILL_DURATION_LIST;
  610.     /** Chat Filter **/
  611.     public static int CHAT_FILTER_PUNISHMENT_PARAM1;
  612.     public static int CHAT_FILTER_PUNISHMENT_PARAM2;
  613.     public static int CHAT_FILTER_PUNISHMENT_PARAM3;
  614.     public static boolean USE_SAY_FILTER;
  615.     public static String CHAT_FILTER_CHARS;
  616.     public static String CHAT_FILTER_PUNISHMENT;
  617.     public static ArrayList<String> FILTER_LIST = new ArrayList<>();
  618.    
  619.     public static int FS_TIME_ATTACK;
  620.     public static int FS_TIME_COOLDOWN;
  621.     public static int FS_TIME_ENTRY;
  622.     public static int FS_TIME_WARMUP;
  623.     public static int FS_PARTY_MEMBER_COUNT;
  624.     public static boolean ALLOW_QUAKE_SYSTEM;
  625.     public static boolean ENABLE_ANTI_PVP_FARM_MSG;
  626.    
  627.     public static long CLICK_TASK;
  628.    
  629.     // ============================================================
  630.     public static void loadOtherConfig()
  631.     {
  632.         final String OTHER = FService.OTHER_CONFIG_FILE;
  633.        
  634.         try
  635.         {
  636.             final Properties otherSettings = new Properties();
  637.             final InputStream is = new FileInputStream(new File(OTHER));
  638.             otherSettings.load(is);
  639.             is.close();
  640.            
  641.             DEEPBLUE_DROP_RULES = Boolean.parseBoolean(otherSettings.getProperty("UseDeepBlueDropRules", "True"));
  642.             ALLOW_GUARDS = Boolean.valueOf(otherSettings.getProperty("AllowGuards", "False"));
  643.             EFFECT_CANCELING = Boolean.valueOf(otherSettings.getProperty("CancelLesserEffect", "True"));
  644.             WYVERN_SPEED = Integer.parseInt(otherSettings.getProperty("WyvernSpeed", "100"));
  645.             STRIDER_SPEED = Integer.parseInt(otherSettings.getProperty("StriderSpeed", "80"));
  646.             ALLOW_WYVERN_UPGRADER = Boolean.valueOf(otherSettings.getProperty("AllowWyvernUpgrader", "False"));
  647.            
  648.             /* Select hit task */
  649.             CLICK_TASK = Integer.parseInt(otherSettings.getProperty("ClickTask", "50"));
  650.            
  651.             GM_CRITANNOUNCER_NAME = Boolean.parseBoolean(otherSettings.getProperty("GMShowCritAnnouncerName", "False"));
  652.            
  653.             /* Inventory slots limits */
  654.             INVENTORY_MAXIMUM_NO_DWARF = Integer.parseInt(otherSettings.getProperty("MaximumSlotsForNoDwarf", "80"));
  655.             INVENTORY_MAXIMUM_DWARF = Integer.parseInt(otherSettings.getProperty("MaximumSlotsForDwarf", "100"));
  656.             INVENTORY_MAXIMUM_GM = Integer.parseInt(otherSettings.getProperty("MaximumSlotsForGMPlayer", "250"));
  657.             MAX_ITEM_IN_PACKET = Math.max(INVENTORY_MAXIMUM_NO_DWARF, Math.max(INVENTORY_MAXIMUM_DWARF, INVENTORY_MAXIMUM_GM));
  658.            
  659.             /* Inventory slots limits */
  660.             WAREHOUSE_SLOTS_NO_DWARF = Integer.parseInt(otherSettings.getProperty("MaximumWarehouseSlotsForNoDwarf", "100"));
  661.             WAREHOUSE_SLOTS_DWARF = Integer.parseInt(otherSettings.getProperty("MaximumWarehouseSlotsForDwarf", "120"));
  662.             WAREHOUSE_SLOTS_CLAN = Integer.parseInt(otherSettings.getProperty("MaximumWarehouseSlotsForClan", "150"));
  663.             FREIGHT_SLOTS = Integer.parseInt(otherSettings.getProperty("MaximumFreightSlots", "20"));
  664.            
  665.             /* If different from 100 (ie 100%) heal rate is modified acordingly */
  666.             HP_REGEN_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("HpRegenMultiplier", "100")) / 100;
  667.             MP_REGEN_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("MpRegenMultiplier", "100")) / 100;
  668.             CP_REGEN_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("CpRegenMultiplier", "100")) / 100;
  669.            
  670.             RAID_HP_REGEN_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("RaidHpRegenMultiplier", "100")) / 100;
  671.             RAID_MP_REGEN_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("RaidMpRegenMultiplier", "100")) / 100;
  672.             RAID_P_DEFENCE_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("RaidPhysicalDefenceMultiplier", "100")) / 100;
  673.             RAID_M_DEFENCE_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("RaidMagicalDefenceMultiplier", "100")) / 100;
  674.             RAID_MINION_RESPAWN_TIMER = Integer.parseInt(otherSettings.getProperty("RaidMinionRespawnTime", "300000"));
  675.             RAID_MIN_RESPAWN_MULTIPLIER = Float.parseFloat(otherSettings.getProperty("RaidMinRespawnMultiplier", "1.0"));
  676.             RAID_MAX_RESPAWN_MULTIPLIER = Float.parseFloat(otherSettings.getProperty("RaidMaxRespawnMultiplier", "1.0"));
  677.             ENABLE_AIO_SYSTEM = Boolean.parseBoolean(otherSettings.getProperty("EnableAioSystem", "True"));
  678.             ALLOW_AIO_NCOLOR = Boolean.parseBoolean(otherSettings.getProperty("AllowAioNameColor", "True"));
  679.             AIO_NCOLOR = Integer.decode("0x" + otherSettings.getProperty("AioNameColor", "88AA88"));
  680.             ALLOW_AIO_TCOLOR = Boolean.parseBoolean(otherSettings.getProperty("AllowAioTitleColor", "True"));
  681.             AIO_TCOLOR = Integer.decode("0x" + otherSettings.getProperty("AioTitleColor", "88AA88"));
  682.             ALLOW_AIO_USE_GK = Boolean.parseBoolean(otherSettings.getProperty("AllowAioUseGk", "False"));
  683.             ALLOW_AIO_USE_CM = Boolean.parseBoolean(otherSettings.getProperty("AllowAioUseClassMaster", "False"));
  684.             ALLOW_AIO_IN_EVENTS = Boolean.parseBoolean(otherSettings.getProperty("AllowAioInEvents", "False"));
  685.             ANNOUNCE_CASTLE_LORDS = Boolean.parseBoolean(otherSettings.getProperty("AnnounceCastleLords", "False"));
  686.             if (ENABLE_AIO_SYSTEM) // create map if system is enabled
  687.             {
  688.                 final String[] AioSkillsSplit = otherSettings.getProperty("AioSkills", "").split(";");
  689.                 AIO_SKILLS = new FastMap<>(AioSkillsSplit.length);
  690.                 for (final String skill : AioSkillsSplit)
  691.                 {
  692.                     final String[] skillSplit = skill.split(",");
  693.                     if (skillSplit.length != 2)
  694.                     {
  695.                         LOGGER.info("[Aio System]: invalid config property in " + OTHER + " -> AioSkills \"" + skill + "\"");
  696.                     }
  697.                     else
  698.                     {
  699.                         try
  700.                         {
  701.                             AIO_SKILLS.put(Integer.parseInt(skillSplit[0]), Integer.parseInt(skillSplit[1]));
  702.                         }
  703.                         catch (final NumberFormatException nfe)
  704.                         {
  705.                             if (Config.ENABLE_ALL_EXCEPTIONS)
  706.                                 nfe.printStackTrace();
  707.                             if (!skill.equals(""))
  708.                             {
  709.                                 LOGGER.info("[Aio System]: invalid config property in " + OTHER + " -> AioSkills \"" + skillSplit[0] + "\"" + skillSplit[1]);
  710.                             }
  711.                         }
  712.                     }
  713.                 }
  714.             }
  715.             STARTING_ADENA = Integer.parseInt(otherSettings.getProperty("StartingAdena", "100"));
  716.             STARTING_AA = Integer.parseInt(otherSettings.getProperty("StartingAncientAdena", "0"));
  717.            
  718.             CUSTOM_STARTER_ITEMS_ENABLED = Boolean.parseBoolean(otherSettings.getProperty("CustomStarterItemsEnabled", "False"));
  719.             if (Config.CUSTOM_STARTER_ITEMS_ENABLED)
  720.             {
  721.                 String[] propertySplit = otherSettings.getProperty("StartingCustomItemsMage", "57,0").split(";");
  722.                 STARTING_CUSTOM_ITEMS_M.clear();
  723.                 for (final String reward : propertySplit)
  724.                 {
  725.                     final String[] rewardSplit = reward.split(",");
  726.                     if (rewardSplit.length != 2)
  727.                         LOGGER.warn("StartingCustomItemsMage[Config.load()]: invalid config property -> StartingCustomItemsMage \"" + reward + "\"");
  728.                     else
  729.                     {
  730.                         try
  731.                         {
  732.                             STARTING_CUSTOM_ITEMS_M.add(new int[]
  733.                             {
  734.                                 Integer.parseInt(rewardSplit[0]),
  735.                                 Integer.parseInt(rewardSplit[1])
  736.                             });
  737.                         }
  738.                         catch (final NumberFormatException nfe)
  739.                         {
  740.                             if (Config.ENABLE_ALL_EXCEPTIONS)
  741.                                 nfe.printStackTrace();
  742.                             if (!reward.isEmpty())
  743.                                 LOGGER.warn("StartingCustomItemsMage[Config.load()]: invalid config property -> StartingCustomItemsMage \"" + reward + "\"");
  744.                         }
  745.                     }
  746.                 }
  747.                
  748.                 propertySplit = otherSettings.getProperty("StartingCustomItemsFighter", "57,0").split(";");
  749.                 STARTING_CUSTOM_ITEMS_F.clear();
  750.                 for (final String reward : propertySplit)
  751.                 {
  752.                     final String[] rewardSplit = reward.split(",");
  753.                     if (rewardSplit.length != 2)
  754.                         LOGGER.warn("StartingCustomItemsFighter[Config.load()]: invalid config property -> StartingCustomItemsFighter \"" + reward + "\"");
  755.                     else
  756.                     {
  757.                         try
  758.                         {
  759.                             STARTING_CUSTOM_ITEMS_F.add(new int[]
  760.                             {
  761.                                 Integer.parseInt(rewardSplit[0]),
  762.                                 Integer.parseInt(rewardSplit[1])
  763.                             });
  764.                         }
  765.                         catch (final NumberFormatException nfe)
  766.                         {
  767.                             if (Config.ENABLE_ALL_EXCEPTIONS)
  768.                                 nfe.printStackTrace();
  769.                            
  770.                             if (!reward.isEmpty())
  771.                                 LOGGER.warn("StartingCustomItemsFighter[Config.load()]: invalid config property -> StartingCustomItemsFighter \"" + reward + "\"");
  772.                         }
  773.                     }
  774.                 }
  775.             }
  776.            
  777.             UNSTUCK_INTERVAL = Integer.parseInt(otherSettings.getProperty("UnstuckInterval", "300"));
  778.            
  779.             /* Player protection after teleport or login */
  780.             PLAYER_SPAWN_PROTECTION = Integer.parseInt(otherSettings.getProperty("PlayerSpawnProtection", "0"));
  781.             PLAYER_TELEPORT_PROTECTION = Integer.parseInt(otherSettings.getProperty("PlayerTeleportProtection", "0"));
  782.             EFFECT_TELEPORT_PROTECTION = Boolean.parseBoolean(otherSettings.getProperty("EffectTeleportProtection", "False"));
  783.            
  784.             /* Player protection after recovering from fake death (works against mobs only) */
  785.             PLAYER_FAKEDEATH_UP_PROTECTION = Integer.parseInt(otherSettings.getProperty("PlayerFakeDeathUpProtection", "0"));
  786.            
  787.             /* Defines some Party XP related values */
  788.             PARTY_XP_CUTOFF_METHOD = otherSettings.getProperty("PartyXpCutoffMethod", "percentage");
  789.             PARTY_XP_CUTOFF_PERCENT = Double.parseDouble(otherSettings.getProperty("PartyXpCutoffPercent", "3."));
  790.             PARTY_XP_CUTOFF_LEVEL = Integer.parseInt(otherSettings.getProperty("PartyXpCutoffLevel", "30"));
  791.            
  792.             /* Amount of HP, MP, and CP is restored */
  793.             RESPAWN_RESTORE_CP = Double.parseDouble(otherSettings.getProperty("RespawnRestoreCP", "0")) / 100;
  794.             RESPAWN_RESTORE_HP = Double.parseDouble(otherSettings.getProperty("RespawnRestoreHP", "70")) / 100;
  795.             RESPAWN_RESTORE_MP = Double.parseDouble(otherSettings.getProperty("RespawnRestoreMP", "70")) / 100;
  796.            
  797.             RESPAWN_RANDOM_ENABLED = Boolean.parseBoolean(otherSettings.getProperty("RespawnRandomInTown", "False"));
  798.             RESPAWN_RANDOM_MAX_OFFSET = Integer.parseInt(otherSettings.getProperty("RespawnRandomMaxOffset", "50"));
  799.            
  800.             /* Maximum number of available slots for pvt stores */
  801.             MAX_PVTSTORE_SLOTS_DWARF = Integer.parseInt(otherSettings.getProperty("MaxPvtStoreSlotsDwarf", "5"));
  802.             MAX_PVTSTORE_SLOTS_OTHER = Integer.parseInt(otherSettings.getProperty("MaxPvtStoreSlotsOther", "4"));
  803.            
  804.             STORE_SKILL_COOLTIME = Boolean.parseBoolean(otherSettings.getProperty("StoreSkillCooltime", "true"));
  805.            
  806.             PET_RENT_NPC = otherSettings.getProperty("ListPetRentNpc", "30827");
  807.             LIST_PET_RENT_NPC = new FastList<>();
  808.             for (final String id : PET_RENT_NPC.split(","))
  809.             {
  810.                 LIST_PET_RENT_NPC.add(Integer.parseInt(id));
  811.             }
  812.             NONDROPPABLE_ITEMS = otherSettings.getProperty("ListOfNonDroppableItems", "1147,425,1146,461,10,2368,7,6,2370,2369,5598");
  813.            
  814.             LIST_NONDROPPABLE_ITEMS = new FastList<>();
  815.             for (final String id : NONDROPPABLE_ITEMS.split(","))
  816.             {
  817.                 LIST_NONDROPPABLE_ITEMS.add(Integer.parseInt(id));
  818.             }
  819.            
  820.             ANNOUNCE_MAMMON_SPAWN = Boolean.parseBoolean(otherSettings.getProperty("AnnounceMammonSpawn", "True"));
  821.             PETITIONING_ALLOWED = Boolean.parseBoolean(otherSettings.getProperty("PetitioningAllowed", "True"));
  822.             MAX_PETITIONS_PER_PLAYER = Integer.parseInt(otherSettings.getProperty("MaxPetitionsPerPlayer", "5"));
  823.             MAX_PETITIONS_PENDING = Integer.parseInt(otherSettings.getProperty("MaxPetitionsPending", "25"));
  824.             JAIL_IS_PVP = Boolean.valueOf(otherSettings.getProperty("JailIsPvp", "True"));
  825.             JAIL_DISABLE_CHAT = Boolean.valueOf(otherSettings.getProperty("JailDisableChat", "True"));
  826.             DEATH_PENALTY_CHANCE = Integer.parseInt(otherSettings.getProperty("DeathPenaltyChance", "20"));
  827.             // ////////////
  828.             ENABLE_MODIFY_SKILL_DURATION = Boolean.parseBoolean(otherSettings.getProperty("EnableModifySkillDuration", "false"));
  829.             if (ENABLE_MODIFY_SKILL_DURATION)
  830.             {
  831.                 SKILL_DURATION_LIST = new FastMap<>();
  832.                
  833.                 String[] propertySplit;
  834.                 propertySplit = otherSettings.getProperty("SkillDurationList", "").split(";");
  835.                
  836.                 for (final String skill : propertySplit)
  837.                 {
  838.                     final String[] skillSplit = skill.split(",");
  839.                     if (skillSplit.length != 2)
  840.                     {
  841.                         LOGGER.info("[SkillDurationList]: invalid config property -> SkillDurationList \"" + skill + "\"");
  842.                     }
  843.                     else
  844.                     {
  845.                         try
  846.                         {
  847.                             SKILL_DURATION_LIST.put(Integer.parseInt(skillSplit[0]), Integer.parseInt(skillSplit[1]));
  848.                         }
  849.                         catch (final NumberFormatException nfe)
  850.                         {
  851.                             if (Config.ENABLE_ALL_EXCEPTIONS)
  852.                                 nfe.printStackTrace();
  853.                            
  854.                             if (!skill.equals(""))
  855.                             {
  856.                                 LOGGER.info("[SkillDurationList]: invalid config property -> SkillList \"" + skillSplit[0] + "\"" + skillSplit[1]);
  857.                             }
  858.                         }
  859.                     }
  860.                 }
  861.             }
  862.            
  863.             USE_SAY_FILTER = Boolean.parseBoolean(otherSettings.getProperty("UseChatFilter", "false"));
  864.             CHAT_FILTER_CHARS = otherSettings.getProperty("ChatFilterChars", "[I love L2jFrozen]");
  865.             CHAT_FILTER_PUNISHMENT = otherSettings.getProperty("ChatFilterPunishment", "off");
  866.             CHAT_FILTER_PUNISHMENT_PARAM1 = Integer.parseInt(otherSettings.getProperty("ChatFilterPunishmentParam1", "1"));
  867.             CHAT_FILTER_PUNISHMENT_PARAM2 = Integer.parseInt(otherSettings.getProperty("ChatFilterPunishmentParam2", "1000"));
  868.            
  869.             FS_TIME_ATTACK = Integer.parseInt(otherSettings.getProperty("TimeOfAttack", "50"));
  870.             FS_TIME_COOLDOWN = Integer.parseInt(otherSettings.getProperty("TimeOfCoolDown", "5"));
  871.             FS_TIME_ENTRY = Integer.parseInt(otherSettings.getProperty("TimeOfEntry", "3"));
  872.             FS_TIME_WARMUP = Integer.parseInt(otherSettings.getProperty("TimeOfWarmUp", "2"));
  873.             FS_PARTY_MEMBER_COUNT = Integer.parseInt(otherSettings.getProperty("NumberOfNecessaryPartyMembers", "4"));
  874.            
  875.             if (FS_TIME_ATTACK <= 0)
  876.             {
  877.                 FS_TIME_ATTACK = 50;
  878.             }
  879.             if (FS_TIME_COOLDOWN <= 0)
  880.             {
  881.                 FS_TIME_COOLDOWN = 5;
  882.             }
  883.             if (FS_TIME_ENTRY <= 0)
  884.             {
  885.                 FS_TIME_ENTRY = 3;
  886.             }
  887.             if (FS_TIME_WARMUP <= 0)
  888.             {
  889.                 FS_TIME_WARMUP = 2;
  890.             }
  891.             if (FS_PARTY_MEMBER_COUNT <= 0)
  892.             {
  893.                 FS_PARTY_MEMBER_COUNT = 4;
  894.             }
  895.            
  896.             ALLOW_QUAKE_SYSTEM = Boolean.parseBoolean(otherSettings.getProperty("AllowQuakeSystem", "False"));
  897.             ENABLE_ANTI_PVP_FARM_MSG = Boolean.parseBoolean(otherSettings.getProperty("EnableAntiPvpFarmMsg", "False"));
  898.         }
  899.         catch (final Exception e)
  900.         {
  901.             e.printStackTrace();
  902.             throw new Error("Failed to Load " + OTHER + " File.");
  903.         }
  904.     }
  905.    
  906.     // ============================================================
  907.     public static float RATE_XP;
  908.     public static float RATE_SP;
  909.     public static float RATE_PARTY_XP;
  910.     public static float RATE_PARTY_SP;
  911.     public static float RATE_QUESTS_REWARD;
  912.     public static float RATE_DROP_ADENA;
  913.     public static float RATE_CONSUMABLE_COST;
  914.     public static float RATE_DROP_ITEMS;
  915.     public static float RATE_DROP_SEAL_STONES;
  916.     public static float RATE_DROP_SPOIL;
  917.     public static int RATE_DROP_MANOR;
  918.     public static float RATE_DROP_QUEST;
  919.     public static float RATE_KARMA_EXP_LOST;
  920.     public static float RATE_SIEGE_GUARDS_PRICE;
  921.     public static float RATE_DROP_COMMON_HERBS;
  922.     public static float RATE_DROP_MP_HP_HERBS;
  923.     public static float RATE_DROP_GREATER_HERBS;
  924.     public static float RATE_DROP_SUPERIOR_HERBS;
  925.     public static float RATE_DROP_SPECIAL_HERBS;
  926.     public static int PLAYER_DROP_LIMIT;
  927.     public static int PLAYER_RATE_DROP;
  928.     public static int PLAYER_RATE_DROP_ITEM;
  929.     public static int PLAYER_RATE_DROP_EQUIP;
  930.     public static int PLAYER_RATE_DROP_EQUIP_WEAPON;
  931.     public static float PET_XP_RATE;
  932.     public static int PET_FOOD_RATE;
  933.     public static float SINEATER_XP_RATE;
  934.     public static int KARMA_DROP_LIMIT;
  935.     public static int KARMA_RATE_DROP;
  936.     public static int KARMA_RATE_DROP_ITEM;
  937.     public static int KARMA_RATE_DROP_EQUIP;
  938.     public static int KARMA_RATE_DROP_EQUIP_WEAPON;
  939.     /** RB rate **/
  940.     public static float ADENA_BOSS;
  941.     public static float ADENA_RAID;
  942.     public static float ADENA_MINON;
  943.     public static float ITEMS_BOSS;
  944.     public static float ITEMS_RAID;
  945.     public static float ITEMS_MINON;
  946.     public static float SPOIL_BOSS;
  947.     public static float SPOIL_RAID;
  948.     public static float SPOIL_MINON;
  949.    
  950.     // ============================================================
  951.     public static void loadRatesConfig()
  952.     {
  953.         final String RATES = FService.RATES_CONFIG_FILE;
  954.        
  955.         try
  956.         {
  957.             final Properties ratesSettings = new Properties();
  958.             final InputStream is = new FileInputStream(new File(RATES));
  959.             ratesSettings.load(is);
  960.             is.close();
  961.            
  962.             RATE_XP = Float.parseFloat(ratesSettings.getProperty("RateXp", "1.00"));
  963.             RATE_SP = Float.parseFloat(ratesSettings.getProperty("RateSp", "1.00"));
  964.             RATE_PARTY_XP = Float.parseFloat(ratesSettings.getProperty("RatePartyXp", "1.00"));
  965.             RATE_PARTY_SP = Float.parseFloat(ratesSettings.getProperty("RatePartySp", "1.00"));
  966.             RATE_QUESTS_REWARD = Float.parseFloat(ratesSettings.getProperty("RateQuestsReward", "1.00"));
  967.             RATE_DROP_ADENA = Float.parseFloat(ratesSettings.getProperty("RateDropAdena", "1.00"));
  968.             RATE_CONSUMABLE_COST = Float.parseFloat(ratesSettings.getProperty("RateConsumableCost", "1.00"));
  969.             RATE_DROP_ITEMS = Float.parseFloat(ratesSettings.getProperty("RateDropItems", "1.00"));
  970.             RATE_DROP_SEAL_STONES = Float.parseFloat(ratesSettings.getProperty("RateDropSealStones", "1.00"));
  971.             RATE_DROP_SPOIL = Float.parseFloat(ratesSettings.getProperty("RateDropSpoil", "1.00"));
  972.             RATE_DROP_MANOR = Integer.parseInt(ratesSettings.getProperty("RateDropManor", "1.00"));
  973.             RATE_DROP_QUEST = Float.parseFloat(ratesSettings.getProperty("RateDropQuest", "1.00"));
  974.             RATE_KARMA_EXP_LOST = Float.parseFloat(ratesSettings.getProperty("RateKarmaExpLost", "1.00"));
  975.             RATE_SIEGE_GUARDS_PRICE = Float.parseFloat(ratesSettings.getProperty("RateSiegeGuardsPrice", "1.00"));
  976.             RATE_DROP_COMMON_HERBS = Float.parseFloat(ratesSettings.getProperty("RateCommonHerbs", "15.00"));
  977.             RATE_DROP_MP_HP_HERBS = Float.parseFloat(ratesSettings.getProperty("RateHpMpHerbs", "10.00"));
  978.             RATE_DROP_GREATER_HERBS = Float.parseFloat(ratesSettings.getProperty("RateGreaterHerbs", "4.00"));
  979.             RATE_DROP_SUPERIOR_HERBS = Float.parseFloat(ratesSettings.getProperty("RateSuperiorHerbs", "0.80")) * 10;
  980.             RATE_DROP_SPECIAL_HERBS = Float.parseFloat(ratesSettings.getProperty("RateSpecialHerbs", "0.20")) * 10;
  981.            
  982.             PLAYER_DROP_LIMIT = Integer.parseInt(ratesSettings.getProperty("PlayerDropLimit", "3"));
  983.             PLAYER_RATE_DROP = Integer.parseInt(ratesSettings.getProperty("PlayerRateDrop", "5"));
  984.             PLAYER_RATE_DROP_ITEM = Integer.parseInt(ratesSettings.getProperty("PlayerRateDropItem", "70"));
  985.             PLAYER_RATE_DROP_EQUIP = Integer.parseInt(ratesSettings.getProperty("PlayerRateDropEquip", "25"));
  986.             PLAYER_RATE_DROP_EQUIP_WEAPON = Integer.parseInt(ratesSettings.getProperty("PlayerRateDropEquipWeapon", "5"));
  987.            
  988.             PET_XP_RATE = Float.parseFloat(ratesSettings.getProperty("PetXpRate", "1.00"));
  989.             PET_FOOD_RATE = Integer.parseInt(ratesSettings.getProperty("PetFoodRate", "1"));
  990.             SINEATER_XP_RATE = Float.parseFloat(ratesSettings.getProperty("SinEaterXpRate", "1.00"));
  991.            
  992.             KARMA_DROP_LIMIT = Integer.parseInt(ratesSettings.getProperty("KarmaDropLimit", "10"));
  993.             KARMA_RATE_DROP = Integer.parseInt(ratesSettings.getProperty("KarmaRateDrop", "70"));
  994.             KARMA_RATE_DROP_ITEM = Integer.parseInt(ratesSettings.getProperty("KarmaRateDropItem", "50"));
  995.             KARMA_RATE_DROP_EQUIP = Integer.parseInt(ratesSettings.getProperty("KarmaRateDropEquip", "40"));
  996.             KARMA_RATE_DROP_EQUIP_WEAPON = Integer.parseInt(ratesSettings.getProperty("KarmaRateDropEquipWeapon", "10"));
  997.            
  998.             /** RB rate **/
  999.             ADENA_BOSS = Float.parseFloat(ratesSettings.getProperty("AdenaBoss", "1.00"));
  1000.             ADENA_RAID = Float.parseFloat(ratesSettings.getProperty("AdenaRaid", "1.00"));
  1001.             ADENA_MINON = Float.parseFloat(ratesSettings.getProperty("AdenaMinon", "1.00"));
  1002.             ITEMS_BOSS = Float.parseFloat(ratesSettings.getProperty("ItemsBoss", "1.00"));
  1003.             ITEMS_RAID = Float.parseFloat(ratesSettings.getProperty("ItemsRaid", "1.00"));
  1004.             ITEMS_MINON = Float.parseFloat(ratesSettings.getProperty("ItemsMinon", "1.00"));
  1005.             SPOIL_BOSS = Float.parseFloat(ratesSettings.getProperty("SpoilBoss", "1.00"));
  1006.             SPOIL_RAID = Float.parseFloat(ratesSettings.getProperty("SpoilRaid", "1.00"));
  1007.             SPOIL_MINON = Float.parseFloat(ratesSettings.getProperty("SpoilMinon", "1.00"));
  1008.         }
  1009.         catch (final Exception e)
  1010.         {
  1011.             e.printStackTrace();
  1012.             throw new Error("Failed to Load " + RATES + " File.");
  1013.         }
  1014.     }
  1015.    
  1016.     // ============================================================
  1017.     public static boolean AUTO_LOOT;
  1018.     public static boolean AUTO_LOOT_BOSS;
  1019.     public static boolean AUTO_LOOT_HERBS;
  1020.     public static boolean REMOVE_CASTLE_CIRCLETS;
  1021.     public static double ALT_WEIGHT_LIMIT;
  1022.     public static boolean ALT_GAME_SKILL_LEARN;
  1023.     public static boolean AUTO_LEARN_SKILLS;
  1024.     public static boolean ALT_GAME_CANCEL_BOW;
  1025.     public static boolean ALT_GAME_CANCEL_CAST;
  1026.     public static boolean ALT_GAME_TIREDNESS;
  1027.     public static int ALT_PARTY_RANGE;
  1028.     public static int ALT_PARTY_RANGE2;
  1029.     public static boolean ALT_GAME_SHIELD_BLOCKS;
  1030.     public static int ALT_PERFECT_SHLD_BLOCK;
  1031.     public static boolean ALT_GAME_MOB_ATTACK_AI;
  1032.     public static boolean ALT_MOB_AGRO_IN_PEACEZONE;
  1033.     public static boolean ALT_GAME_FREIGHTS;
  1034.     public static int ALT_GAME_FREIGHT_PRICE;
  1035.     public static float ALT_GAME_SKILL_HIT_RATE;
  1036.     public static boolean ALT_GAME_DELEVEL;
  1037.     public static boolean ALT_GAME_MAGICFAILURES;
  1038.     public static boolean ALT_GAME_FREE_TELEPORT;
  1039.     public static boolean ALT_RECOMMEND;
  1040.     public static boolean ALT_GAME_SUBCLASS_WITHOUT_QUESTS;
  1041.     public static boolean ALT_RESTORE_EFFECTS_ON_SUBCLASS_CHANGE;
  1042.     public static boolean ALT_GAME_VIEWNPC;
  1043.     public static int ALT_CLAN_MEMBERS_FOR_WAR;
  1044.     public static int ALT_CLAN_JOIN_DAYS;
  1045.     public static int ALT_CLAN_CREATE_DAYS;
  1046.     public static int ALT_CLAN_DISSOLVE_DAYS;
  1047.     public static int ALT_ALLY_JOIN_DAYS_WHEN_LEAVED;
  1048.     public static int ALT_ALLY_JOIN_DAYS_WHEN_DISMISSED;
  1049.     public static int ALT_ACCEPT_CLAN_DAYS_WHEN_DISMISSED;
  1050.     public static int ALT_CREATE_ALLY_DAYS_WHEN_DISSOLVED;
  1051.     public static boolean ALT_GAME_NEW_CHAR_ALWAYS_IS_NEWBIE;
  1052.     public static boolean ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH;
  1053.     public static int ALT_MAX_NUM_OF_CLANS_IN_ALLY;
  1054.     public static boolean LIFE_CRYSTAL_NEEDED;
  1055.     public static boolean SP_BOOK_NEEDED;
  1056.     public static boolean ES_SP_BOOK_NEEDED;
  1057.     public static boolean ALT_PRIVILEGES_SECURE_CHECK;
  1058.     public static int ALT_PRIVILEGES_DEFAULT_LEVEL;
  1059.     public static int ALT_MANOR_REFRESH_TIME;
  1060.     public static int ALT_MANOR_REFRESH_MIN;
  1061.     public static int ALT_MANOR_APPROVE_TIME;
  1062.     public static int ALT_MANOR_APPROVE_MIN;
  1063.     public static int ALT_MANOR_MAINTENANCE_PERIOD;
  1064.     public static boolean ALT_MANOR_SAVE_ALL_ACTIONS;
  1065.     public static int ALT_MANOR_SAVE_PERIOD_RATE;
  1066.     public static int ALT_LOTTERY_PRIZE;
  1067.     public static int ALT_LOTTERY_TICKET_PRICE;
  1068.     public static float ALT_LOTTERY_5_NUMBER_RATE;
  1069.     public static float ALT_LOTTERY_4_NUMBER_RATE;
  1070.     public static float ALT_LOTTERY_3_NUMBER_RATE;
  1071.     public static int ALT_LOTTERY_2_AND_1_NUMBER_PRIZE;
  1072.     public static int RIFT_MIN_PARTY_SIZE;
  1073.     public static int RIFT_SPAWN_DELAY;
  1074.     public static int RIFT_MAX_JUMPS;
  1075.     public static int RIFT_AUTO_JUMPS_TIME_MIN;
  1076.     public static int RIFT_AUTO_JUMPS_TIME_MAX;
  1077.     public static int RIFT_ENTER_COST_RECRUIT;
  1078.     public static int RIFT_ENTER_COST_SOLDIER;
  1079.     public static int RIFT_ENTER_COST_OFFICER;
  1080.     public static int RIFT_ENTER_COST_CAPTAIN;
  1081.     public static int RIFT_ENTER_COST_COMMANDER;
  1082.     public static int RIFT_ENTER_COST_HERO;
  1083.     public static float RIFT_BOSS_ROOM_TIME_MUTIPLY;
  1084.     public static float ALT_GAME_EXPONENT_XP;
  1085.     public static float ALT_GAME_EXPONENT_SP;
  1086.     public static boolean FORCE_INVENTORY_UPDATE;
  1087.     public static boolean ALLOW_GUARDS;
  1088.     public static boolean ALLOW_CLASS_MASTERS;
  1089.    
  1090.     public static boolean ALLOW_CLASS_MASTERS_FIRST_CLASS;
  1091.     public static boolean ALLOW_CLASS_MASTERS_SECOND_CLASS;
  1092.     public static boolean ALLOW_CLASS_MASTERS_THIRD_CLASS;
  1093.    
  1094.     public static boolean CLASS_MASTER_STRIDER_UPDATE;
  1095.     public static ClassMasterSettings CLASS_MASTER_SETTINGS;
  1096.     public static boolean ALT_GAME_KARMA_PLAYER_CAN_BE_KILLED_IN_PEACEZONE;
  1097.     public static boolean ALT_GAME_KARMA_PLAYER_CAN_SHOP;
  1098.     public static boolean ALT_GAME_KARMA_PLAYER_CAN_USE_GK;
  1099.     public static boolean ALT_GAME_KARMA_PLAYER_CAN_TELEPORT;
  1100.     public static boolean ALT_GAME_KARMA_PLAYER_CAN_TRADE;
  1101.     public static boolean ALT_GAME_KARMA_PLAYER_CAN_USE_WAREHOUSE;
  1102.     public static boolean ALT_KARMA_TELEPORT_TO_FLORAN;
  1103.     public static byte BUFFS_MAX_AMOUNT;
  1104.     public static byte DEBUFFS_MAX_AMOUNT;
  1105.     public static boolean AUTO_LEARN_DIVINE_INSPIRATION;
  1106.     public static boolean DIVINE_SP_BOOK_NEEDED;
  1107.     public static boolean ALLOW_REMOTE_CLASS_MASTERS;
  1108.     public static boolean DONT_DESTROY_SS;
  1109.     public static int MAX_LEVEL_NEWBIE;
  1110.     public static int MAX_LEVEL_NEWBIE_STATUS;
  1111.     public static int STANDARD_RESPAWN_DELAY;
  1112.     public static int ALT_RECOMMENDATIONS_NUMBER;
  1113.     public static int RAID_RANKING_1ST;
  1114.     public static int RAID_RANKING_2ND;
  1115.     public static int RAID_RANKING_3RD;
  1116.     public static int RAID_RANKING_4TH;
  1117.     public static int RAID_RANKING_5TH;
  1118.     public static int RAID_RANKING_6TH;
  1119.     public static int RAID_RANKING_7TH;
  1120.     public static int RAID_RANKING_8TH;
  1121.     public static int RAID_RANKING_9TH;
  1122.     public static int RAID_RANKING_10TH;
  1123.     public static int RAID_RANKING_UP_TO_50TH;
  1124.     public static int RAID_RANKING_UP_TO_100TH;
  1125.    
  1126.     public static boolean EXPERTISE_PENALTY;
  1127.     public static boolean MASTERY_PENALTY;
  1128.     public static int LEVEL_TO_GET_PENALITY;
  1129.     public static boolean MASTERY_WEAPON_PENALTY;
  1130.     public static int LEVEL_TO_GET_WEAPON_PENALITY;
  1131.    
  1132.     public static int ACTIVE_AUGMENTS_START_REUSE_TIME;
  1133.    
  1134.     public static boolean NPC_ATTACKABLE;
  1135.     /**
  1136.      * if npc_attackable is true, you can define who will receive 0 damages
  1137.      */
  1138.     public static List<Integer> INVUL_NPC_LIST;
  1139.     /** Config for activeChar Attack Npcs in the list */
  1140.     public static boolean DISABLE_ATTACK_NPC_TYPE;
  1141.     /**
  1142.      * Allows or dis-allows the option for NPC types that won't allow casting
  1143.      */
  1144.     public static String ALLOWED_NPC_TYPES;
  1145.     /** List of NPC types that won't allow casting */
  1146.     public static FastList<String> LIST_ALLOWED_NPC_TYPES = new FastList<>();
  1147.    
  1148.     public static boolean SELL_BY_ITEM;
  1149.     public static int SELL_ITEM;
  1150.     public static int ALLOWED_SUBCLASS;
  1151.     public static byte BASE_SUBCLASS_LEVEL;
  1152.     public static byte MAX_SUBCLASS_LEVEL;
  1153.    
  1154.     public static String DISABLE_BOW_CLASSES_STRING;
  1155.     public static FastList<Integer> DISABLE_BOW_CLASSES = new FastList<>();
  1156.    
  1157.     public static boolean ALT_MOBS_STATS_BONUS;
  1158.     public static boolean ALT_PETS_STATS_BONUS;
  1159.    
  1160.     // ============================================================
  1161.     public static void loadAltConfig()
  1162.     {
  1163.         final String ALT = FService.ALT_SETTINGS_FILE;
  1164.        
  1165.         try
  1166.         {
  1167.             final Properties altSettings = new Properties();
  1168.             final InputStream is = new FileInputStream(new File(ALT));
  1169.             altSettings.load(is);
  1170.             is.close();
  1171.             /* General Information */
  1172.             ALT_GAME_TIREDNESS = Boolean.parseBoolean(altSettings.getProperty("AltGameTiredness", "false"));
  1173.             ALT_WEIGHT_LIMIT = Double.parseDouble(altSettings.getProperty("AltWeightLimit", "1"));
  1174.             ALT_GAME_SKILL_LEARN = Boolean.parseBoolean(altSettings.getProperty("AltGameSkillLearn", "false"));
  1175.             AUTO_LEARN_SKILLS = Boolean.parseBoolean(altSettings.getProperty("AutoLearnSkills", "false"));
  1176.             ALT_GAME_CANCEL_BOW = altSettings.getProperty("AltGameCancelByHit", "Cast").equalsIgnoreCase("bow") || altSettings.getProperty("AltGameCancelByHit", "Cast").equalsIgnoreCase("all");
  1177.             ALT_GAME_CANCEL_CAST = altSettings.getProperty("AltGameCancelByHit", "Cast").equalsIgnoreCase("cast") || altSettings.getProperty("AltGameCancelByHit", "Cast").equalsIgnoreCase("all");
  1178.             ALT_GAME_SHIELD_BLOCKS = Boolean.parseBoolean(altSettings.getProperty("AltShieldBlocks", "false"));
  1179.             ALT_PERFECT_SHLD_BLOCK = Integer.parseInt(altSettings.getProperty("AltPerfectShieldBlockRate", "10"));
  1180.             ALT_GAME_DELEVEL = Boolean.parseBoolean(altSettings.getProperty("Delevel", "true"));
  1181.             ALT_GAME_MAGICFAILURES = Boolean.parseBoolean(altSettings.getProperty("MagicFailures", "false"));
  1182.             ALT_GAME_MOB_ATTACK_AI = Boolean.parseBoolean(altSettings.getProperty("AltGameMobAttackAI", "false"));
  1183.             ALT_MOB_AGRO_IN_PEACEZONE = Boolean.parseBoolean(altSettings.getProperty("AltMobAgroInPeaceZone", "true"));
  1184.             ALT_GAME_EXPONENT_XP = Float.parseFloat(altSettings.getProperty("AltGameExponentXp", "0."));
  1185.             ALT_GAME_EXPONENT_SP = Float.parseFloat(altSettings.getProperty("AltGameExponentSp", "0."));
  1186.             AUTO_LEARN_DIVINE_INSPIRATION = Boolean.parseBoolean(altSettings.getProperty("AutoLearnDivineInspiration", "false"));
  1187.             DIVINE_SP_BOOK_NEEDED = Boolean.parseBoolean(altSettings.getProperty("DivineInspirationSpBookNeeded", "true"));
  1188.             ALLOW_CLASS_MASTERS = Boolean.valueOf(altSettings.getProperty("AllowClassMasters", "False"));
  1189.             CLASS_MASTER_STRIDER_UPDATE = Boolean.valueOf(altSettings.getProperty("AllowClassMastersStriderUpdate", "False"));
  1190.             CLASS_MASTER_SETTINGS = new ClassMasterSettings(altSettings.getProperty("ConfigClassMaster"));
  1191.             ALLOW_REMOTE_CLASS_MASTERS = Boolean.valueOf(altSettings.getProperty("AllowRemoteClassMasters", "False"));
  1192.            
  1193.             ALLOW_CLASS_MASTERS_FIRST_CLASS = Boolean.valueOf(altSettings.getProperty("AllowClassMastersFirstClass", "true"));
  1194.             ALLOW_CLASS_MASTERS_SECOND_CLASS = Boolean.valueOf(altSettings.getProperty("AllowClassMastersSecondClass", "true"));
  1195.             ALLOW_CLASS_MASTERS_THIRD_CLASS = Boolean.valueOf(altSettings.getProperty("AllowClassMastersThirdClass", "true"));
  1196.            
  1197.             ALT_GAME_FREIGHTS = Boolean.parseBoolean(altSettings.getProperty("AltGameFreights", "false"));
  1198.             ALT_GAME_FREIGHT_PRICE = Integer.parseInt(altSettings.getProperty("AltGameFreightPrice", "1000"));
  1199.             ALT_PARTY_RANGE = Integer.parseInt(altSettings.getProperty("AltPartyRange", "1600"));
  1200.             ALT_PARTY_RANGE2 = Integer.parseInt(altSettings.getProperty("AltPartyRange2", "1400"));
  1201.             REMOVE_CASTLE_CIRCLETS = Boolean.parseBoolean(altSettings.getProperty("RemoveCastleCirclets", "true"));
  1202.             LIFE_CRYSTAL_NEEDED = Boolean.parseBoolean(altSettings.getProperty("LifeCrystalNeeded", "true"));
  1203.             SP_BOOK_NEEDED = Boolean.parseBoolean(altSettings.getProperty("SpBookNeeded", "true"));
  1204.             ES_SP_BOOK_NEEDED = Boolean.parseBoolean(altSettings.getProperty("EnchantSkillSpBookNeeded", "true"));
  1205.             AUTO_LOOT = altSettings.getProperty("AutoLoot").equalsIgnoreCase("True");
  1206.             AUTO_LOOT_BOSS = altSettings.getProperty("AutoLootBoss").equalsIgnoreCase("True");
  1207.             AUTO_LOOT_HERBS = altSettings.getProperty("AutoLootHerbs").equalsIgnoreCase("True");
  1208.             ALT_GAME_FREE_TELEPORT = Boolean.parseBoolean(altSettings.getProperty("AltFreeTeleporting", "False"));
  1209.             ALT_RECOMMEND = Boolean.parseBoolean(altSettings.getProperty("AltRecommend", "False"));
  1210.             ALT_GAME_SUBCLASS_WITHOUT_QUESTS = Boolean.parseBoolean(altSettings.getProperty("AltSubClassWithoutQuests", "False"));
  1211.             ALT_RESTORE_EFFECTS_ON_SUBCLASS_CHANGE = Boolean.parseBoolean(altSettings.getProperty("AltRestoreEffectOnSub", "False"));
  1212.             ALT_GAME_VIEWNPC = Boolean.parseBoolean(altSettings.getProperty("AltGameViewNpc", "False"));
  1213.             ALT_GAME_NEW_CHAR_ALWAYS_IS_NEWBIE = Boolean.parseBoolean(altSettings.getProperty("AltNewCharAlwaysIsNewbie", "False"));
  1214.             ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH = Boolean.parseBoolean(altSettings.getProperty("AltMembersCanWithdrawFromClanWH", "False"));
  1215.             ALT_MAX_NUM_OF_CLANS_IN_ALLY = Integer.parseInt(altSettings.getProperty("AltMaxNumOfClansInAlly", "3"));
  1216.            
  1217.             ALT_CLAN_MEMBERS_FOR_WAR = Integer.parseInt(altSettings.getProperty("AltClanMembersForWar", "15"));
  1218.             ALT_CLAN_JOIN_DAYS = Integer.parseInt(altSettings.getProperty("DaysBeforeJoinAClan", "5"));
  1219.             ALT_CLAN_CREATE_DAYS = Integer.parseInt(altSettings.getProperty("DaysBeforeCreateAClan", "10"));
  1220.             ALT_CLAN_DISSOLVE_DAYS = Integer.parseInt(altSettings.getProperty("DaysToPassToDissolveAClan", "7"));
  1221.             ALT_ALLY_JOIN_DAYS_WHEN_LEAVED = Integer.parseInt(altSettings.getProperty("DaysBeforeJoinAllyWhenLeaved", "1"));
  1222.             ALT_ALLY_JOIN_DAYS_WHEN_DISMISSED = Integer.parseInt(altSettings.getProperty("DaysBeforeJoinAllyWhenDismissed", "1"));
  1223.             ALT_ACCEPT_CLAN_DAYS_WHEN_DISMISSED = Integer.parseInt(altSettings.getProperty("DaysBeforeAcceptNewClanWhenDismissed", "1"));
  1224.             ALT_CREATE_ALLY_DAYS_WHEN_DISSOLVED = Integer.parseInt(altSettings.getProperty("DaysBeforeCreateNewAllyWhenDissolved", "10"));
  1225.            
  1226.             ALT_MANOR_REFRESH_TIME = Integer.parseInt(altSettings.getProperty("AltManorRefreshTime", "20"));
  1227.             ALT_MANOR_REFRESH_MIN = Integer.parseInt(altSettings.getProperty("AltManorRefreshMin", "00"));
  1228.             ALT_MANOR_APPROVE_TIME = Integer.parseInt(altSettings.getProperty("AltManorApproveTime", "6"));
  1229.             ALT_MANOR_APPROVE_MIN = Integer.parseInt(altSettings.getProperty("AltManorApproveMin", "00"));
  1230.             ALT_MANOR_MAINTENANCE_PERIOD = Integer.parseInt(altSettings.getProperty("AltManorMaintenancePeriod", "360000"));
  1231.             ALT_MANOR_SAVE_ALL_ACTIONS = Boolean.parseBoolean(altSettings.getProperty("AltManorSaveAllActions", "false"));
  1232.             ALT_MANOR_SAVE_PERIOD_RATE = Integer.parseInt(altSettings.getProperty("AltManorSavePeriodRate", "2"));
  1233.            
  1234.             ALT_LOTTERY_PRIZE = Integer.parseInt(altSettings.getProperty("AltLotteryPrize", "50000"));
  1235.             ALT_LOTTERY_TICKET_PRICE = Integer.parseInt(altSettings.getProperty("AltLotteryTicketPrice", "2000"));
  1236.             ALT_LOTTERY_5_NUMBER_RATE = Float.parseFloat(altSettings.getProperty("AltLottery5NumberRate", "0.6"));
  1237.             ALT_LOTTERY_4_NUMBER_RATE = Float.parseFloat(altSettings.getProperty("AltLottery4NumberRate", "0.2"));
  1238.             ALT_LOTTERY_3_NUMBER_RATE = Float.parseFloat(altSettings.getProperty("AltLottery3NumberRate", "0.2"));
  1239.             ALT_LOTTERY_2_AND_1_NUMBER_PRIZE = Integer.parseInt(altSettings.getProperty("AltLottery2and1NumberPrize", "200"));
  1240.             BUFFS_MAX_AMOUNT = Byte.parseByte(altSettings.getProperty("MaxBuffAmount", "24"));
  1241.             DEBUFFS_MAX_AMOUNT = Byte.parseByte(altSettings.getProperty("MaxDebuffAmount", "6"));
  1242.            
  1243.             // Dimensional Rift Config
  1244.             RIFT_MIN_PARTY_SIZE = Integer.parseInt(altSettings.getProperty("RiftMinPartySize", "5"));
  1245.             RIFT_MAX_JUMPS = Integer.parseInt(altSettings.getProperty("MaxRiftJumps", "4"));
  1246.             RIFT_SPAWN_DELAY = Integer.parseInt(altSettings.getProperty("RiftSpawnDelay", "10000"));
  1247.             RIFT_AUTO_JUMPS_TIME_MIN = Integer.parseInt(altSettings.getProperty("AutoJumpsDelayMin", "480"));
  1248.             RIFT_AUTO_JUMPS_TIME_MAX = Integer.parseInt(altSettings.getProperty("AutoJumpsDelayMax", "600"));
  1249.             RIFT_ENTER_COST_RECRUIT = Integer.parseInt(altSettings.getProperty("RecruitCost", "18"));
  1250.             RIFT_ENTER_COST_SOLDIER = Integer.parseInt(altSettings.getProperty("SoldierCost", "21"));
  1251.             RIFT_ENTER_COST_OFFICER = Integer.parseInt(altSettings.getProperty("OfficerCost", "24"));
  1252.             RIFT_ENTER_COST_CAPTAIN = Integer.parseInt(altSettings.getProperty("CaptainCost", "27"));
  1253.             RIFT_ENTER_COST_COMMANDER = Integer.parseInt(altSettings.getProperty("CommanderCost", "30"));
  1254.             RIFT_ENTER_COST_HERO = Integer.parseInt(altSettings.getProperty("HeroCost", "33"));
  1255.             RIFT_BOSS_ROOM_TIME_MUTIPLY = Float.parseFloat(altSettings.getProperty("BossRoomTimeMultiply", "1.5"));
  1256.            
  1257.             // Destroy ss
  1258.             DONT_DESTROY_SS = Boolean.parseBoolean(altSettings.getProperty("DontDestroySS", "false"));
  1259.            
  1260.             // Max level newbie
  1261.             MAX_LEVEL_NEWBIE = Integer.parseInt(altSettings.getProperty("MaxLevelNewbie", "20"));
  1262.             // Level when Char lost Newbie status
  1263.             MAX_LEVEL_NEWBIE_STATUS = Integer.parseInt(altSettings.getProperty("MaxLevelNewbieStatus", "40"));
  1264.            
  1265.             STANDARD_RESPAWN_DELAY = Integer.parseInt(altSettings.getProperty("StandardRespawnDelay", "180"));
  1266.             ALT_RECOMMENDATIONS_NUMBER = Integer.parseInt(altSettings.getProperty("AltMaxRecommendationNumber", "255"));
  1267.            
  1268.             RAID_RANKING_1ST = Integer.parseInt(altSettings.getProperty("1stRaidRankingPoints", "1250"));
  1269.             RAID_RANKING_2ND = Integer.parseInt(altSettings.getProperty("2ndRaidRankingPoints", "900"));
  1270.             RAID_RANKING_3RD = Integer.parseInt(altSettings.getProperty("3rdRaidRankingPoints", "700"));
  1271.             RAID_RANKING_4TH = Integer.parseInt(altSettings.getProperty("4thRaidRankingPoints", "600"));
  1272.             RAID_RANKING_5TH = Integer.parseInt(altSettings.getProperty("5thRaidRankingPoints", "450"));
  1273.             RAID_RANKING_6TH = Integer.parseInt(altSettings.getProperty("6thRaidRankingPoints", "350"));
  1274.             RAID_RANKING_7TH = Integer.parseInt(altSettings.getProperty("7thRaidRankingPoints", "300"));
  1275.             RAID_RANKING_8TH = Integer.parseInt(altSettings.getProperty("8thRaidRankingPoints", "200"));
  1276.             RAID_RANKING_9TH = Integer.parseInt(altSettings.getProperty("9thRaidRankingPoints", "150"));
  1277.             RAID_RANKING_10TH = Integer.parseInt(altSettings.getProperty("10thRaidRankingPoints", "100"));
  1278.             RAID_RANKING_UP_TO_50TH = Integer.parseInt(altSettings.getProperty("UpTo50thRaidRankingPoints", "25"));
  1279.             RAID_RANKING_UP_TO_100TH = Integer.parseInt(altSettings.getProperty("UpTo100thRaidRankingPoints", "12"));
  1280.            
  1281.             EXPERTISE_PENALTY = Boolean.parseBoolean(altSettings.getProperty("ExpertisePenality", "true"));
  1282.             MASTERY_PENALTY = Boolean.parseBoolean(altSettings.getProperty("MasteryPenality", "false"));
  1283.             LEVEL_TO_GET_PENALITY = Integer.parseInt(altSettings.getProperty("LevelToGetPenalty", "20"));
  1284.            
  1285.             MASTERY_WEAPON_PENALTY = Boolean.parseBoolean(altSettings.getProperty("MasteryWeaponPenality", "false"));
  1286.             LEVEL_TO_GET_WEAPON_PENALITY = Integer.parseInt(altSettings.getProperty("LevelToGetWeaponPenalty", "20"));
  1287.            
  1288.             /** augmentation start reuse time **/
  1289.             ACTIVE_AUGMENTS_START_REUSE_TIME = Integer.parseInt(altSettings.getProperty("AugmStartReuseTime", "0"));
  1290.            
  1291.             INVUL_NPC_LIST = new FastList<>();
  1292.             final String t = altSettings.getProperty("InvulNpcList", "30001-32132,35092-35103,35142-35146,35176-35187,35218-35232,35261-35278,35308-35319,35352-35367,35382-35407,35417-35427,35433-35469,35497-35513,35544-35587,35600-35617,35623-35628,35638-35640,35644,35645,50007,70010,99999");
  1293.             String as[];
  1294.             final int k = (as = t.split(",")).length;
  1295.             for (int j = 0; j < k; j++)
  1296.             {
  1297.                 final String t2 = as[j];
  1298.                 if (t2.contains("-"))
  1299.                 {
  1300.                     final int a1 = Integer.parseInt(t2.split("-")[0]);
  1301.                     final int a2 = Integer.parseInt(t2.split("-")[1]);
  1302.                     for (int i = a1; i <= a2; i++)
  1303.                         INVUL_NPC_LIST.add(Integer.valueOf(i));
  1304.                 }
  1305.                 else
  1306.                     INVUL_NPC_LIST.add(Integer.valueOf(Integer.parseInt(t2)));
  1307.             }
  1308.             DISABLE_ATTACK_NPC_TYPE = Boolean.parseBoolean(altSettings.getProperty("DisableAttackToNpcs", "False"));
  1309.             ALLOWED_NPC_TYPES = altSettings.getProperty("AllowedNPCTypes");
  1310.             LIST_ALLOWED_NPC_TYPES = new FastList<>();
  1311.             for (final String npc_type : ALLOWED_NPC_TYPES.split(","))
  1312.                 LIST_ALLOWED_NPC_TYPES.add(npc_type);
  1313.             NPC_ATTACKABLE = Boolean.parseBoolean(altSettings.getProperty("NpcAttackable", "False"));
  1314.            
  1315.             SELL_BY_ITEM = Boolean.parseBoolean(altSettings.getProperty("SellByItem", "False"));
  1316.             SELL_ITEM = Integer.parseInt(altSettings.getProperty("SellItem", "57"));
  1317.            
  1318.             ALLOWED_SUBCLASS = Integer.parseInt(altSettings.getProperty("AllowedSubclass", "3"));
  1319.             BASE_SUBCLASS_LEVEL = Byte.parseByte(altSettings.getProperty("BaseSubclassLevel", "40"));
  1320.             MAX_SUBCLASS_LEVEL = Byte.parseByte(altSettings.getProperty("MaxSubclassLevel", "81"));
  1321.            
  1322.             ALT_MOBS_STATS_BONUS = Boolean.parseBoolean(altSettings.getProperty("AltMobsStatsBonus", "True"));
  1323.             ALT_PETS_STATS_BONUS = Boolean.parseBoolean(altSettings.getProperty("AltPetsStatsBonus", "True"));
  1324.         }
  1325.         catch (final Exception e)
  1326.         {
  1327.             e.printStackTrace();
  1328.             throw new Error("Failed to Load " + ALT + " File.");
  1329.         }
  1330.     }
  1331.    
  1332.     // ============================================================
  1333.     public static boolean ALT_GAME_REQUIRE_CASTLE_DAWN;
  1334.     public static boolean ALT_GAME_REQUIRE_CLAN_CASTLE;
  1335.     public static boolean ALT_REQUIRE_WIN_7S;
  1336.     public static int ALT_FESTIVAL_MIN_PLAYER;
  1337.     public static int ALT_MAXIMUM_PLAYER_CONTRIB;
  1338.     public static long ALT_FESTIVAL_MANAGER_START;
  1339.     public static long ALT_FESTIVAL_LENGTH;
  1340.     public static long ALT_FESTIVAL_CYCLE_LENGTH;
  1341.     public static long ALT_FESTIVAL_FIRST_SPAWN;
  1342.     public static long ALT_FESTIVAL_FIRST_SWARM;
  1343.     public static long ALT_FESTIVAL_SECOND_SPAWN;
  1344.     public static long ALT_FESTIVAL_SECOND_SWARM;
  1345.     public static long ALT_FESTIVAL_CHEST_SPAWN;
  1346.    
  1347.     // ============================================================
  1348.     public static void load7sConfig()
  1349.     {
  1350.         final String SEVENSIGNS = FService.SEVENSIGNS_FILE;
  1351.        
  1352.         try
  1353.         {
  1354.             final Properties SevenSettings = new Properties();
  1355.             final InputStream is = new FileInputStream(new File(SEVENSIGNS));
  1356.             SevenSettings.load(is);
  1357.             is.close();
  1358.            
  1359.             ALT_GAME_REQUIRE_CASTLE_DAWN = Boolean.parseBoolean(SevenSettings.getProperty("AltRequireCastleForDawn", "False"));
  1360.             ALT_GAME_REQUIRE_CLAN_CASTLE = Boolean.parseBoolean(SevenSettings.getProperty("AltRequireClanCastle", "False"));
  1361.             ALT_REQUIRE_WIN_7S = Boolean.parseBoolean(SevenSettings.getProperty("AltRequireWin7s", "True"));
  1362.             ALT_FESTIVAL_MIN_PLAYER = Integer.parseInt(SevenSettings.getProperty("AltFestivalMinPlayer", "5"));
  1363.             ALT_MAXIMUM_PLAYER_CONTRIB = Integer.parseInt(SevenSettings.getProperty("AltMaxPlayerContrib", "1000000"));
  1364.             ALT_FESTIVAL_MANAGER_START = Long.parseLong(SevenSettings.getProperty("AltFestivalManagerStart", "120000"));
  1365.             ALT_FESTIVAL_LENGTH = Long.parseLong(SevenSettings.getProperty("AltFestivalLength", "1080000"));
  1366.             ALT_FESTIVAL_CYCLE_LENGTH = Long.parseLong(SevenSettings.getProperty("AltFestivalCycleLength", "2280000"));
  1367.             ALT_FESTIVAL_FIRST_SPAWN = Long.parseLong(SevenSettings.getProperty("AltFestivalFirstSpawn", "120000"));
  1368.             ALT_FESTIVAL_FIRST_SWARM = Long.parseLong(SevenSettings.getProperty("AltFestivalFirstSwarm", "300000"));
  1369.             ALT_FESTIVAL_SECOND_SPAWN = Long.parseLong(SevenSettings.getProperty("AltFestivalSecondSpawn", "540000"));
  1370.             ALT_FESTIVAL_SECOND_SWARM = Long.parseLong(SevenSettings.getProperty("AltFestivalSecondSwarm", "720000"));
  1371.             ALT_FESTIVAL_CHEST_SPAWN = Long.parseLong(SevenSettings.getProperty("AltFestivalChestSpawn", "900000"));
  1372.         }
  1373.         catch (final Exception e)
  1374.         {
  1375.             e.printStackTrace();
  1376.             throw new Error("Failed to Load " + SEVENSIGNS + " File.");
  1377.         }
  1378.     }
  1379.    
  1380.     // ============================================================
  1381.     public static long CH_TELE_FEE_RATIO;
  1382.     public static int CH_TELE1_FEE;
  1383.     public static int CH_TELE2_FEE;
  1384.     public static long CH_ITEM_FEE_RATIO;
  1385.     public static int CH_ITEM1_FEE;
  1386.     public static int CH_ITEM2_FEE;
  1387.     public static int CH_ITEM3_FEE;
  1388.     public static long CH_MPREG_FEE_RATIO;
  1389.     public static int CH_MPREG1_FEE;
  1390.     public static int CH_MPREG2_FEE;
  1391.     public static int CH_MPREG3_FEE;
  1392.     public static int CH_MPREG4_FEE;
  1393.     public static int CH_MPREG5_FEE;
  1394.     public static long CH_HPREG_FEE_RATIO;
  1395.     public static int CH_HPREG1_FEE;
  1396.     public static int CH_HPREG2_FEE;
  1397.     public static int CH_HPREG3_FEE;
  1398.     public static int CH_HPREG4_FEE;
  1399.     public static int CH_HPREG5_FEE;
  1400.     public static int CH_HPREG6_FEE;
  1401.     public static int CH_HPREG7_FEE;
  1402.     public static int CH_HPREG8_FEE;
  1403.     public static int CH_HPREG9_FEE;
  1404.     public static int CH_HPREG10_FEE;
  1405.     public static int CH_HPREG11_FEE;
  1406.     public static int CH_HPREG12_FEE;
  1407.     public static int CH_HPREG13_FEE;
  1408.     public static long CH_EXPREG_FEE_RATIO;
  1409.     public static int CH_EXPREG1_FEE;
  1410.     public static int CH_EXPREG2_FEE;
  1411.     public static int CH_EXPREG3_FEE;
  1412.     public static int CH_EXPREG4_FEE;
  1413.     public static int CH_EXPREG5_FEE;
  1414.     public static int CH_EXPREG6_FEE;
  1415.     public static int CH_EXPREG7_FEE;
  1416.     public static long CH_SUPPORT_FEE_RATIO;
  1417.     public static int CH_SUPPORT1_FEE;
  1418.     public static int CH_SUPPORT2_FEE;
  1419.     public static int CH_SUPPORT3_FEE;
  1420.     public static int CH_SUPPORT4_FEE;
  1421.     public static int CH_SUPPORT5_FEE;
  1422.     public static int CH_SUPPORT6_FEE;
  1423.     public static int CH_SUPPORT7_FEE;
  1424.     public static int CH_SUPPORT8_FEE;
  1425.     public static long CH_CURTAIN_FEE_RATIO;
  1426.     public static int CH_CURTAIN1_FEE;
  1427.     public static int CH_CURTAIN2_FEE;
  1428.     public static long CH_FRONT_FEE_RATIO;
  1429.     public static int CH_FRONT1_FEE;
  1430.     public static int CH_FRONT2_FEE;
  1431.    
  1432.     // ============================================================
  1433.     public static void loadCHConfig()
  1434.     {
  1435.         final String CLANHALL = FService.CLANHALL_CONFIG_FILE;
  1436.        
  1437.         try
  1438.         {
  1439.             final Properties clanhallSettings = new Properties();
  1440.             final InputStream is = new FileInputStream(new File(CLANHALL));
  1441.             clanhallSettings.load(is);
  1442.             is.close();
  1443.             CH_TELE_FEE_RATIO = Long.valueOf(clanhallSettings.getProperty("ClanHallTeleportFunctionFeeRation", "86400000"));
  1444.             CH_TELE1_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallTeleportFunctionFeeLvl1", "86400000"));
  1445.             CH_TELE2_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallTeleportFunctionFeeLvl2", "86400000"));
  1446.             CH_SUPPORT_FEE_RATIO = Long.valueOf(clanhallSettings.getProperty("ClanHallSupportFunctionFeeRation", "86400000"));
  1447.             CH_SUPPORT1_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallSupportFeeLvl1", "86400000"));
  1448.             CH_SUPPORT2_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallSupportFeeLvl2", "86400000"));
  1449.             CH_SUPPORT3_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallSupportFeeLvl3", "86400000"));
  1450.             CH_SUPPORT4_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallSupportFeeLvl4", "86400000"));
  1451.             CH_SUPPORT5_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallSupportFeeLvl5", "86400000"));
  1452.             CH_SUPPORT6_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallSupportFeeLvl6", "86400000"));
  1453.             CH_SUPPORT7_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallSupportFeeLvl7", "86400000"));
  1454.             CH_SUPPORT8_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallSupportFeeLvl8", "86400000"));
  1455.             CH_MPREG_FEE_RATIO = Long.valueOf(clanhallSettings.getProperty("ClanHallMpRegenerationFunctionFeeRation", "86400000"));
  1456.             CH_MPREG1_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallMpRegenerationFeeLvl1", "86400000"));
  1457.             CH_MPREG2_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallMpRegenerationFeeLvl2", "86400000"));
  1458.             CH_MPREG3_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallMpRegenerationFeeLvl3", "86400000"));
  1459.             CH_MPREG4_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallMpRegenerationFeeLvl4", "86400000"));
  1460.             CH_MPREG5_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallMpRegenerationFeeLvl5", "86400000"));
  1461.             CH_HPREG_FEE_RATIO = Long.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFunctionFeeRation", "86400000"));
  1462.             CH_HPREG1_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFeeLvl1", "86400000"));
  1463.             CH_HPREG2_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFeeLvl2", "86400000"));
  1464.             CH_HPREG3_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFeeLvl3", "86400000"));
  1465.             CH_HPREG4_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFeeLvl4", "86400000"));
  1466.             CH_HPREG5_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFeeLvl5", "86400000"));
  1467.             CH_HPREG6_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFeeLvl6", "86400000"));
  1468.             CH_HPREG7_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFeeLvl7", "86400000"));
  1469.             CH_HPREG8_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFeeLvl8", "86400000"));
  1470.             CH_HPREG9_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFeeLvl9", "86400000"));
  1471.             CH_HPREG10_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFeeLvl10", "86400000"));
  1472.             CH_HPREG11_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFeeLvl11", "86400000"));
  1473.             CH_HPREG12_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFeeLvl12", "86400000"));
  1474.             CH_HPREG13_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallHpRegenerationFeeLvl13", "86400000"));
  1475.             CH_EXPREG_FEE_RATIO = Long.valueOf(clanhallSettings.getProperty("ClanHallExpRegenerationFunctionFeeRation", "86400000"));
  1476.             CH_EXPREG1_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallExpRegenerationFeeLvl1", "86400000"));
  1477.             CH_EXPREG2_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallExpRegenerationFeeLvl2", "86400000"));
  1478.             CH_EXPREG3_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallExpRegenerationFeeLvl3", "86400000"));
  1479.             CH_EXPREG4_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallExpRegenerationFeeLvl4", "86400000"));
  1480.             CH_EXPREG5_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallExpRegenerationFeeLvl5", "86400000"));
  1481.             CH_EXPREG6_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallExpRegenerationFeeLvl6", "86400000"));
  1482.             CH_EXPREG7_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallExpRegenerationFeeLvl7", "86400000"));
  1483.             CH_ITEM_FEE_RATIO = Long.valueOf(clanhallSettings.getProperty("ClanHallItemCreationFunctionFeeRation", "86400000"));
  1484.             CH_ITEM1_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallItemCreationFunctionFeeLvl1", "86400000"));
  1485.             CH_ITEM2_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallItemCreationFunctionFeeLvl2", "86400000"));
  1486.             CH_ITEM3_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallItemCreationFunctionFeeLvl3", "86400000"));
  1487.             CH_CURTAIN_FEE_RATIO = Long.valueOf(clanhallSettings.getProperty("ClanHallCurtainFunctionFeeRation", "86400000"));
  1488.             CH_CURTAIN1_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallCurtainFunctionFeeLvl1", "86400000"));
  1489.             CH_CURTAIN2_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallCurtainFunctionFeeLvl2", "86400000"));
  1490.             CH_FRONT_FEE_RATIO = Long.valueOf(clanhallSettings.getProperty("ClanHallFrontPlatformFunctionFeeRation", "86400000"));
  1491.             CH_FRONT1_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallFrontPlatformFunctionFeeLvl1", "86400000"));
  1492.             CH_FRONT2_FEE = Integer.valueOf(clanhallSettings.getProperty("ClanHallFrontPlatformFunctionFeeLvl2", "86400000"));
  1493.         }
  1494.         catch (final Exception e)
  1495.         {
  1496.             e.printStackTrace();
  1497.             throw new Error("Failed to Load " + CLANHALL + " File.");
  1498.         }
  1499.     }
  1500.    
  1501.     // ============================================================
  1502.     public static int DEVASTATED_DAY;
  1503.     public static int DEVASTATED_HOUR;
  1504.     public static int DEVASTATED_MINUTES;
  1505.     public static int PARTISAN_DAY;
  1506.     public static int PARTISAN_HOUR;
  1507.     public static int PARTISAN_MINUTES;
  1508.    
  1509.     // ============================================================
  1510.     public static void loadElitCHConfig()
  1511.     {
  1512.         final String ELIT_CH = FService.ELIT_CLANHALL_CONFIG_FILE;
  1513.        
  1514.         try
  1515.         {
  1516.             final Properties elitchSettings = new Properties();
  1517.             final InputStream is = new FileInputStream(new File(ELIT_CH));
  1518.             elitchSettings.load(is);
  1519.             is.close();
  1520.            
  1521.             DEVASTATED_DAY = Integer.valueOf(elitchSettings.getProperty("DevastatedDay", "1"));
  1522.             DEVASTATED_HOUR = Integer.valueOf(elitchSettings.getProperty("DevastatedHour", "18"));
  1523.             DEVASTATED_MINUTES = Integer.valueOf(elitchSettings.getProperty("DevastatedMinutes", "0"));
  1524.             PARTISAN_DAY = Integer.valueOf(elitchSettings.getProperty("PartisanDay", "5"));
  1525.             PARTISAN_HOUR = Integer.valueOf(elitchSettings.getProperty("PartisanHour", "21"));
  1526.             PARTISAN_MINUTES = Integer.valueOf(elitchSettings.getProperty("PartisanMinutes", "0"));
  1527.         }
  1528.         catch (final Exception e)
  1529.         {
  1530.             e.printStackTrace();
  1531.             throw new Error("Failed to Load " + ELIT_CH + " File.");
  1532.         }
  1533.     }
  1534.    
  1535.     // ============================================================
  1536.     public static boolean L2JMOD_CHAMPION_ENABLE;
  1537.     public static int L2JMOD_CHAMPION_FREQUENCY;
  1538.     public static int L2JMOD_CHAMP_MIN_LVL;
  1539.     public static int L2JMOD_CHAMP_MAX_LVL;
  1540.     public static int L2JMOD_CHAMPION_HP;
  1541.     public static int L2JMOD_CHAMPION_REWARDS;
  1542.     public static int L2JMOD_CHAMPION_ADENAS_REWARDS;
  1543.     public static float L2JMOD_CHAMPION_HP_REGEN;
  1544.     public static float L2JMOD_CHAMPION_ATK;
  1545.     public static float L2JMOD_CHAMPION_SPD_ATK;
  1546.     public static int L2JMOD_CHAMPION_REWARD;
  1547.     public static int L2JMOD_CHAMPION_REWARD_ID;
  1548.     public static int L2JMOD_CHAMPION_REWARD_QTY;
  1549.     public static String L2JMOD_CHAMP_TITLE;
  1550.    
  1551.     // ============================================================
  1552.     public static void loadChampionConfig()
  1553.     {
  1554.         final String EVENT_CHAMPION = FService.EVENT_CHAMPION_FILE;
  1555.        
  1556.         try
  1557.         {
  1558.             final Properties ChampionSettings = new Properties();
  1559.             final InputStream is = new FileInputStream(new File(EVENT_CHAMPION));
  1560.             ChampionSettings.load(is);
  1561.             is.close();
  1562.            
  1563.             L2JMOD_CHAMPION_ENABLE = Boolean.parseBoolean(ChampionSettings.getProperty("ChampionEnable", "false"));
  1564.             L2JMOD_CHAMPION_FREQUENCY = Integer.parseInt(ChampionSettings.getProperty("ChampionFrequency", "0"));
  1565.             L2JMOD_CHAMP_MIN_LVL = Integer.parseInt(ChampionSettings.getProperty("ChampionMinLevel", "20"));
  1566.             L2JMOD_CHAMP_MAX_LVL = Integer.parseInt(ChampionSettings.getProperty("ChampionMaxLevel", "60"));
  1567.             L2JMOD_CHAMPION_HP = Integer.parseInt(ChampionSettings.getProperty("ChampionHp", "7"));
  1568.             L2JMOD_CHAMPION_HP_REGEN = Float.parseFloat(ChampionSettings.getProperty("ChampionHpRegen", "1.0"));
  1569.             L2JMOD_CHAMPION_REWARDS = Integer.parseInt(ChampionSettings.getProperty("ChampionRewards", "8"));
  1570.             L2JMOD_CHAMPION_ADENAS_REWARDS = Integer.parseInt(ChampionSettings.getProperty("ChampionAdenasRewards", "1"));
  1571.             L2JMOD_CHAMPION_ATK = Float.parseFloat(ChampionSettings.getProperty("ChampionAtk", "1.0"));
  1572.             L2JMOD_CHAMPION_SPD_ATK = Float.parseFloat(ChampionSettings.getProperty("ChampionSpdAtk", "1.0"));
  1573.             L2JMOD_CHAMPION_REWARD = Integer.parseInt(ChampionSettings.getProperty("ChampionRewardItem", "0"));
  1574.             L2JMOD_CHAMPION_REWARD_ID = Integer.parseInt(ChampionSettings.getProperty("ChampionRewardItemID", "6393"));
  1575.             L2JMOD_CHAMPION_REWARD_QTY = Integer.parseInt(ChampionSettings.getProperty("ChampionRewardItemQty", "1"));
  1576.             L2JMOD_CHAMP_TITLE = ChampionSettings.getProperty("ChampionTitle", "Champion");
  1577.            
  1578.         }
  1579.         catch (final Exception e)
  1580.         {
  1581.             e.printStackTrace();
  1582.             throw new Error("Failed to Load " + EVENT_CHAMPION + " File.");
  1583.         }
  1584.     }
  1585.    
  1586.     // ============================================================
  1587.     public static boolean L2JMOD_ALLOW_WEDDING;
  1588.     public static int L2JMOD_WEDDING_PRICE;
  1589.     public static boolean L2JMOD_WEDDING_PUNISH_INFIDELITY;
  1590.     public static boolean L2JMOD_WEDDING_TELEPORT;
  1591.     public static int L2JMOD_WEDDING_TELEPORT_PRICE;
  1592.     public static int L2JMOD_WEDDING_TELEPORT_DURATION;
  1593.     public static int L2JMOD_WEDDING_NAME_COLOR_NORMAL;
  1594.     public static int L2JMOD_WEDDING_NAME_COLOR_GEY;
  1595.     public static int L2JMOD_WEDDING_NAME_COLOR_LESBO;
  1596.     public static boolean L2JMOD_WEDDING_SAMESEX;
  1597.     public static boolean L2JMOD_WEDDING_FORMALWEAR;
  1598.     public static int L2JMOD_WEDDING_DIVORCE_COSTS;
  1599.     public static boolean WEDDING_GIVE_CUPID_BOW;
  1600.     public static boolean ANNOUNCE_WEDDING;
  1601.    
  1602.     // ============================================================
  1603.     public static void loadWeddingConfig()
  1604.     {
  1605.         final String EVENT_WEDDING = FService.EVENT_WEDDING_FILE;
  1606.        
  1607.         try
  1608.         {
  1609.             final Properties WeddingSettings = new Properties();
  1610.             final InputStream is = new FileInputStream(new File(EVENT_WEDDING));
  1611.             WeddingSettings.load(is);
  1612.             is.close();
  1613.            
  1614.             L2JMOD_ALLOW_WEDDING = Boolean.valueOf(WeddingSettings.getProperty("AllowWedding", "False"));
  1615.             L2JMOD_WEDDING_PRICE = Integer.parseInt(WeddingSettings.getProperty("WeddingPrice", "250000000"));
  1616.             L2JMOD_WEDDING_PUNISH_INFIDELITY = Boolean.parseBoolean(WeddingSettings.getProperty("WeddingPunishInfidelity", "True"));
  1617.             L2JMOD_WEDDING_TELEPORT = Boolean.parseBoolean(WeddingSettings.getProperty("WeddingTeleport", "True"));
  1618.             L2JMOD_WEDDING_TELEPORT_PRICE = Integer.parseInt(WeddingSettings.getProperty("WeddingTeleportPrice", "50000"));
  1619.             L2JMOD_WEDDING_TELEPORT_DURATION = Integer.parseInt(WeddingSettings.getProperty("WeddingTeleportDuration", "60"));
  1620.             L2JMOD_WEDDING_NAME_COLOR_NORMAL = Integer.decode("0x" + WeddingSettings.getProperty("WeddingNameCollorN", "FFFFFF"));
  1621.             L2JMOD_WEDDING_NAME_COLOR_GEY = Integer.decode("0x" + WeddingSettings.getProperty("WeddingNameCollorB", "FFFFFF"));
  1622.             L2JMOD_WEDDING_NAME_COLOR_LESBO = Integer.decode("0x" + WeddingSettings.getProperty("WeddingNameCollorL", "FFFFFF"));
  1623.             L2JMOD_WEDDING_SAMESEX = Boolean.parseBoolean(WeddingSettings.getProperty("WeddingAllowSameSex", "False"));
  1624.             L2JMOD_WEDDING_FORMALWEAR = Boolean.parseBoolean(WeddingSettings.getProperty("WeddingFormalWear", "True"));
  1625.             L2JMOD_WEDDING_DIVORCE_COSTS = Integer.parseInt(WeddingSettings.getProperty("WeddingDivorceCosts", "20"));
  1626.             WEDDING_GIVE_CUPID_BOW = Boolean.parseBoolean(WeddingSettings.getProperty("WeddingGiveBow", "False"));
  1627.             ANNOUNCE_WEDDING = Boolean.parseBoolean(WeddingSettings.getProperty("AnnounceWedding", "True"));
  1628.            
  1629.         }
  1630.         catch (final Exception e)
  1631.         {
  1632.             e.printStackTrace();
  1633.             throw new Error("Failed to Load " + EVENT_WEDDING + " File.");
  1634.         }
  1635.     }
  1636.    
  1637.     // ============================================================
  1638.     public static String TVT_EVEN_TEAMS;
  1639.     public static boolean TVT_ALLOW_INTERFERENCE;
  1640.     public static boolean TVT_ALLOW_POTIONS;
  1641.     public static boolean TVT_ALLOW_SUMMON;
  1642.     public static boolean TVT_ON_START_REMOVE_ALL_EFFECTS;
  1643.     public static boolean TVT_ON_START_UNSUMMON_PET;
  1644.     public static boolean TVT_REVIVE_RECOVERY;
  1645.     public static boolean TVT_ANNOUNCE_TEAM_STATS;
  1646.     public static boolean TVT_ANNOUNCE_REWARD;
  1647.     public static boolean TVT_PRICE_NO_KILLS;
  1648.     public static boolean TVT_JOIN_CURSED;
  1649.     public static boolean TVT_COMMAND;
  1650.     public static long TVT_REVIVE_DELAY;
  1651.     public static boolean TVT_OPEN_FORT_DOORS;
  1652.     public static boolean TVT_CLOSE_FORT_DOORS;
  1653.     public static boolean TVT_OPEN_ADEN_COLOSSEUM_DOORS;
  1654.     public static boolean TVT_CLOSE_ADEN_COLOSSEUM_DOORS;
  1655.     public static int TVT_TOP_KILLER_REWARD;
  1656.     public static int TVT_TOP_KILLER_QTY;
  1657.     public static boolean TVT_AURA;
  1658.     public static boolean TVT_STATS_LOGGER;
  1659.     public static boolean TVT_REMOVE_BUFFS_ON_DIE;
  1660.    
  1661.     // ============================================================
  1662.     public static void loadTVTConfig()
  1663.     {
  1664.         final String EVENT_TVT = FService.EVENT_TVT_FILE;
  1665.        
  1666.         try
  1667.         {
  1668.             final Properties TVTSettings = new Properties();
  1669.             final InputStream is = new FileInputStream(new File(EVENT_TVT));
  1670.             TVTSettings.load(is);
  1671.             is.close();
  1672.            
  1673.             TVT_EVEN_TEAMS = TVTSettings.getProperty("TvTEvenTeams", "BALANCE");
  1674.             TVT_ALLOW_INTERFERENCE = Boolean.parseBoolean(TVTSettings.getProperty("TvTAllowInterference", "False"));
  1675.             TVT_ALLOW_POTIONS = Boolean.parseBoolean(TVTSettings.getProperty("TvTAllowPotions", "False"));
  1676.             TVT_ALLOW_SUMMON = Boolean.parseBoolean(TVTSettings.getProperty("TvTAllowSummon", "False"));
  1677.             TVT_ON_START_REMOVE_ALL_EFFECTS = Boolean.parseBoolean(TVTSettings.getProperty("TvTOnStartRemoveAllEffects", "True"));
  1678.             TVT_ON_START_UNSUMMON_PET = Boolean.parseBoolean(TVTSettings.getProperty("TvTOnStartUnsummonPet", "True"));
  1679.             TVT_REVIVE_RECOVERY = Boolean.parseBoolean(TVTSettings.getProperty("TvTReviveRecovery", "False"));
  1680.             TVT_ANNOUNCE_TEAM_STATS = Boolean.parseBoolean(TVTSettings.getProperty("TvTAnnounceTeamStats", "False"));
  1681.             TVT_ANNOUNCE_REWARD = Boolean.parseBoolean(TVTSettings.getProperty("TvTAnnounceReward", "False"));
  1682.             TVT_PRICE_NO_KILLS = Boolean.parseBoolean(TVTSettings.getProperty("TvTPriceNoKills", "False"));
  1683.             TVT_JOIN_CURSED = Boolean.parseBoolean(TVTSettings.getProperty("TvTJoinWithCursedWeapon", "True"));
  1684.             TVT_COMMAND = Boolean.parseBoolean(TVTSettings.getProperty("TvTCommand", "True"));
  1685.             TVT_REVIVE_DELAY = Long.parseLong(TVTSettings.getProperty("TvTReviveDelay", "20000"));
  1686.             if (TVT_REVIVE_DELAY < 1000)
  1687.                 TVT_REVIVE_DELAY = 1000; // can't be set less then 1 second
  1688.             TVT_OPEN_FORT_DOORS = Boolean.parseBoolean(TVTSettings.getProperty("TvTOpenFortDoors", "False"));
  1689.             TVT_CLOSE_FORT_DOORS = Boolean.parseBoolean(TVTSettings.getProperty("TvTCloseFortDoors", "False"));
  1690.             TVT_OPEN_ADEN_COLOSSEUM_DOORS = Boolean.parseBoolean(TVTSettings.getProperty("TvTOpenAdenColosseumDoors", "False"));
  1691.             TVT_CLOSE_ADEN_COLOSSEUM_DOORS = Boolean.parseBoolean(TVTSettings.getProperty("TvTCloseAdenColosseumDoors", "False"));
  1692.             TVT_TOP_KILLER_REWARD = Integer.parseInt(TVTSettings.getProperty("TvTTopKillerRewardId", "5575"));
  1693.             TVT_TOP_KILLER_QTY = Integer.parseInt(TVTSettings.getProperty("TvTTopKillerRewardQty", "2000000"));
  1694.             TVT_AURA = Boolean.parseBoolean(TVTSettings.getProperty("TvTAura", "False"));
  1695.             TVT_STATS_LOGGER = Boolean.parseBoolean(TVTSettings.getProperty("TvTStatsLogger", "true"));
  1696.            
  1697.             TVT_REMOVE_BUFFS_ON_DIE = Boolean.parseBoolean(TVTSettings.getProperty("TvTRemoveBuffsOnPlayerDie", "false"));
  1698.            
  1699.         }
  1700.         catch (final Exception e)
  1701.         {
  1702.             e.printStackTrace();
  1703.             throw new Error("Failed to Load " + EVENT_TVT + " File.");
  1704.         }
  1705.     }
  1706.    
  1707.     // ============================================================
  1708.     public static int TW_TOWN_ID;
  1709.     public static boolean TW_ALL_TOWNS;
  1710.     public static int TW_ITEM_ID;
  1711.     public static int TW_ITEM_AMOUNT;
  1712.     public static boolean TW_ALLOW_KARMA;
  1713.     public static boolean TW_DISABLE_GK;
  1714.     public static boolean TW_RESS_ON_DIE;
  1715.    
  1716.     // ============================================================
  1717.     public static void loadTWConfig()
  1718.     {
  1719.         final String EVENT_TW = FService.EVENT_TW_FILE;
  1720.        
  1721.         try
  1722.         {
  1723.             final Properties TWSettings = new Properties();
  1724.             final InputStream is = new FileInputStream(new File(EVENT_TW));
  1725.             TWSettings.load(is);
  1726.             is.close();
  1727.            
  1728.             TW_TOWN_ID = Integer.parseInt(TWSettings.getProperty("TWTownId", "9"));
  1729.             TW_ALL_TOWNS = Boolean.parseBoolean(TWSettings.getProperty("TWAllTowns", "False"));
  1730.             TW_ITEM_ID = Integer.parseInt(TWSettings.getProperty("TownWarItemId", "57"));
  1731.             TW_ITEM_AMOUNT = Integer.parseInt(TWSettings.getProperty("TownWarItemAmount", "5000"));
  1732.             TW_ALLOW_KARMA = Boolean.parseBoolean(TWSettings.getProperty("AllowKarma", "False"));
  1733.             TW_DISABLE_GK = Boolean.parseBoolean(TWSettings.getProperty("DisableGK", "True"));
  1734.             TW_RESS_ON_DIE = Boolean.parseBoolean(TWSettings.getProperty("SendRessOnDeath", "False"));
  1735.         }
  1736.         catch (final Exception e)
  1737.         {
  1738.             e.printStackTrace();
  1739.             throw new Error("Failed to Load " + EVENT_TW + " File.");
  1740.         }
  1741.     }
  1742.    
  1743.     // ============================================================
  1744.     public static boolean IRC_ENABLED;
  1745.     public static boolean IRC_LOG_CHAT;
  1746.     public static boolean IRC_SSL;
  1747.     public static String IRC_SERVER;
  1748.     public static int IRC_PORT;
  1749.     public static String IRC_PASS;
  1750.     public static String IRC_NICK;
  1751.     public static String IRC_USER;
  1752.     public static String IRC_NAME;
  1753.     public static boolean IRC_NICKSERV;
  1754.     public static String IRC_NICKSERV_NAME;
  1755.     public static String IRC_NICKSERV_COMMAND;
  1756.     public static String IRC_LOGIN_COMMAND;
  1757.     public static String IRC_CHANNEL;
  1758.     public static String IRC_FROM_GAME_TYPE;
  1759.     public static String IRC_TO_GAME_TYPE;
  1760.     public static String IRC_TO_GAME_SPECIAL_CHAR;
  1761.     public static String IRC_TO_GAME_DISPLAY;
  1762.     public static boolean IRC_ANNOUNCE;
  1763.     public static String IRC_NO_GM_MSG;
  1764.     public static String IRC_NO_PLAYER_ONLINE;
  1765.     public static String IRC_PLAYER_ONLINE;
  1766.     public static String IRC_MSG_START;
  1767.    
  1768.     // ============================================================
  1769.    
  1770.     public static void loadIRCConfig()
  1771.     {
  1772.         final String IRC_FILE = FService.IRC_FILE;
  1773.        
  1774.         try
  1775.         {
  1776.             final Properties IRCSettings = new Properties();
  1777.             final InputStream is = new FileInputStream(new File(IRC_FILE));
  1778.             IRCSettings.load(is);
  1779.             is.close();
  1780.            
  1781.             IRC_ENABLED = Boolean.parseBoolean(IRCSettings.getProperty("Enable", "false"));
  1782.             IRC_LOG_CHAT = Boolean.parseBoolean(IRCSettings.getProperty("LogChat", "false"));
  1783.             IRC_SSL = Boolean.parseBoolean(IRCSettings.getProperty("SSL", "false"));
  1784.             IRC_SERVER = IRCSettings.getProperty("Server", "localhost");
  1785.             IRC_PORT = Integer.parseInt(IRCSettings.getProperty("Port", "6667"));
  1786.             IRC_PASS = IRCSettings.getProperty("Pass", "localhost");
  1787.             IRC_NICK = IRCSettings.getProperty("Nick", "L2JFrozenBot");
  1788.             IRC_USER = IRCSettings.getProperty("User", "L2JFrozen");
  1789.             IRC_NAME = IRCSettings.getProperty("Name", "L2JFrozen");
  1790.             IRC_NICKSERV = Boolean.parseBoolean(IRCSettings.getProperty("NickServ", "false"));
  1791.             IRC_NICKSERV_NAME = IRCSettings.getProperty("NickservName", "nickserv");
  1792.             IRC_NICKSERV_COMMAND = IRCSettings.getProperty("NickservCommand", "");
  1793.             IRC_LOGIN_COMMAND = IRCSettings.getProperty("LoginCommand", "");
  1794.             IRC_CHANNEL = IRCSettings.getProperty("Channel", "#mychan");
  1795.             IRC_ANNOUNCE = Boolean.parseBoolean(IRCSettings.getProperty("IrcAnnounces", "false"));
  1796.             IRC_FROM_GAME_TYPE = IRCSettings.getProperty("GameToIrcType", "off");
  1797.             IRC_TO_GAME_TYPE = IRCSettings.getProperty("IrcToGameType", "off");
  1798.             IRC_TO_GAME_SPECIAL_CHAR = IRCSettings.getProperty("IrcToGameSpecialChar", "#");
  1799.             IRC_TO_GAME_DISPLAY = IRCSettings.getProperty("IrcToGameDisplay", "trade");
  1800.             IRC_NO_GM_MSG = IRCSettings.getProperty("IrcNoGmMsg", "There are not any GMs that are providing customer service currently");
  1801.             IRC_NO_PLAYER_ONLINE = IRCSettings.getProperty("IrcNoPlayerOnlineMsg", "No Players currently online");
  1802.             IRC_PLAYER_ONLINE = IRCSettings.getProperty("IrcPlayerOnlineMsg", "Players currently online:");
  1803.             IRC_MSG_START = IRCSettings.getProperty("IrcMsgStart", "L2JFrozen Gameserver started");
  1804.         }
  1805.         catch (final Exception e)
  1806.         {
  1807.             e.printStackTrace();
  1808.             throw new Error("Failed to Load " + IRC_FILE + " File.");
  1809.         }
  1810.     }
  1811.    
  1812.     // ============================================================
  1813.    
  1814.     // ============================================================
  1815.     public static boolean REBIRTH_ENABLE;
  1816.     public static String[] REBIRTH_ITEM_PRICE;
  1817.     public static String[] REBIRTH_MAGE_SKILL;
  1818.     public static String[] REBIRTH_FIGHTER_SKILL;
  1819.     public static int REBIRTH_MIN_LEVEL;
  1820.     public static int REBIRTH_MAX;
  1821.     public static int REBIRTH_RETURN_TO_LEVEL;
  1822.    
  1823.     // ============================================================
  1824.     public static void loadREBIRTHConfig()
  1825.     {
  1826.         final String EVENT_REBIRTH = FService.EVENT_REBIRTH_FILE;
  1827.        
  1828.         try
  1829.         {
  1830.             final Properties REBIRTHSettings = new Properties();
  1831.             final InputStream is = new FileInputStream(new File(EVENT_REBIRTH));
  1832.             REBIRTHSettings.load(is);
  1833.             is.close();
  1834.            
  1835.             REBIRTH_ENABLE = Boolean.parseBoolean(REBIRTHSettings.getProperty("REBIRTH_ENABLE", "false"));
  1836.             REBIRTH_MIN_LEVEL = Integer.parseInt(REBIRTHSettings.getProperty("REBIRTH_MIN_LEVEL", "80"));
  1837.             REBIRTH_MAX = Integer.parseInt(REBIRTHSettings.getProperty("REBIRTH_MAX", "3"));
  1838.             REBIRTH_RETURN_TO_LEVEL = Integer.parseInt(REBIRTHSettings.getProperty("REBIRTH_RETURN_TO_LEVEL", "1"));
  1839.            
  1840.             REBIRTH_ITEM_PRICE = REBIRTHSettings.getProperty("REBIRTH_ITEM_PRICE", "").split(";");
  1841.             REBIRTH_MAGE_SKILL = REBIRTHSettings.getProperty("REBIRTH_MAGE_SKILL", "").split(";");
  1842.             REBIRTH_FIGHTER_SKILL = REBIRTHSettings.getProperty("REBIRTH_FIGHTER_SKILL", "").split(";");
  1843.         }
  1844.         catch (final Exception e)
  1845.         {
  1846.             e.printStackTrace();
  1847.             throw new Error("Failed to Load " + EVENT_REBIRTH + " File.");
  1848.         }
  1849.     }
  1850.    
  1851.     // ============================================================
  1852.     public static boolean PCB_ENABLE;
  1853.     public static int PCB_MIN_LEVEL;
  1854.     public static int PCB_POINT_MIN;
  1855.     public static int PCB_POINT_MAX;
  1856.     public static int PCB_CHANCE_DUAL_POINT;
  1857.     public static int PCB_INTERVAL;
  1858.    
  1859.     // ============================================================
  1860.     public static void loadPCBPointConfig()
  1861.     {
  1862.         final String PCB_POINT = FService.EVENT_PC_BANG_POINT_FILE;
  1863.        
  1864.         try
  1865.         {
  1866.             final Properties pcbpSettings = new Properties();
  1867.             final InputStream is = new FileInputStream(new File(PCB_POINT));
  1868.             pcbpSettings.load(is);
  1869.             is.close();
  1870.            
  1871.             PCB_ENABLE = Boolean.parseBoolean(pcbpSettings.getProperty("PcBangPointEnable", "true"));
  1872.             PCB_MIN_LEVEL = Integer.parseInt(pcbpSettings.getProperty("PcBangPointMinLevel", "20"));
  1873.             PCB_POINT_MIN = Integer.parseInt(pcbpSettings.getProperty("PcBangPointMinCount", "20"));
  1874.             PCB_POINT_MAX = Integer.parseInt(pcbpSettings.getProperty("PcBangPointMaxCount", "1000000"));
  1875.            
  1876.             if (PCB_POINT_MAX < 1)
  1877.             {
  1878.                 PCB_POINT_MAX = Integer.MAX_VALUE;
  1879.             }
  1880.            
  1881.             PCB_CHANCE_DUAL_POINT = Integer.parseInt(pcbpSettings.getProperty("PcBangPointDualChance", "20"));
  1882.             PCB_INTERVAL = Integer.parseInt(pcbpSettings.getProperty("PcBangPointTimeStamp", "900"));
  1883.         }
  1884.         catch (final Exception e)
  1885.         {
  1886.             e.printStackTrace();
  1887.             throw new Error("Failed to Load " + PCB_POINT + " File.");
  1888.         }
  1889.     }
  1890.    
  1891.     // ============================================================
  1892.     public static boolean ALT_DEV_NO_QUESTS;
  1893.     public static boolean ALT_DEV_NO_SPAWNS;
  1894.     public static boolean ALT_DEV_NO_SCRIPT;
  1895.     public static boolean ALT_DEV_NO_RB;
  1896.     public static boolean ALT_DEV_NO_AI;
  1897.     public static boolean SKILLSDEBUG;
  1898.     public static boolean ENABLE_OLYMPIAD_DEBUG;
  1899.     public static boolean DEBUG;
  1900.     public static boolean ASSERT;
  1901.     public static boolean DEVELOPER;
  1902.     public static boolean ZONE_DEBUG;
  1903.     public static boolean ENABLE_ALL_EXCEPTIONS = true;
  1904.     public static boolean SERVER_LIST_TESTSERVER;
  1905.     public static boolean BETASERVER;
  1906.     public static boolean SERVER_LIST_BRACKET;
  1907.     public static boolean SERVER_LIST_CLOCK;
  1908.     public static boolean SERVER_GMONLY;
  1909.     public static int REQUEST_ID;
  1910.     public static boolean ACCEPT_ALTERNATE_ID;
  1911.     public static int MAXIMUM_ONLINE_USERS;
  1912.     public static String CNAME_TEMPLATE;
  1913.     public static String PET_NAME_TEMPLATE;
  1914.     public static String CLAN_NAME_TEMPLATE;
  1915.     public static String ALLY_NAME_TEMPLATE;
  1916.     public static int MAX_CHARACTERS_NUMBER_PER_IP;
  1917.     public static int MAX_CHARACTERS_NUMBER_PER_ACCOUNT;
  1918.     public static int MIN_PROTOCOL_REVISION;
  1919.     public static int MAX_PROTOCOL_REVISION;
  1920.     public static boolean GMAUDIT;
  1921.     public static boolean LOG_CHAT;
  1922.     public static boolean LOG_ITEMS;
  1923.     public static boolean LOG_HIGH_DAMAGES;
  1924.     public static boolean GAMEGUARD_L2NET_CHECK;
  1925.    
  1926.     // Threads
  1927.     public static int THREAD_P_EFFECTS;
  1928.     public static int THREAD_P_GENERAL;
  1929.     public static int GENERAL_PACKET_THREAD_CORE_SIZE;
  1930.     public static int IO_PACKET_THREAD_CORE_SIZE;
  1931.     public static int GENERAL_THREAD_CORE_SIZE;
  1932.     public static int AI_MAX_THREAD;
  1933.     public static boolean LAZY_CACHE;
  1934.     public static boolean ENABLE_CACHE_INFO = false;
  1935.    
  1936.     // ============================================================
  1937.     public static void loadDevConfig()
  1938.     {
  1939.         final String DEV = FService.DEVELOPER;
  1940.        
  1941.         try
  1942.         {
  1943.             final Properties devSettings = new Properties();
  1944.             final InputStream is = new FileInputStream(new File(DEV));
  1945.             devSettings.load(is);
  1946.             is.close();
  1947.            
  1948.             ENABLE_OLYMPIAD_DEBUG = Boolean.parseBoolean(devSettings.getProperty("EnableOlympiadDebug", "false"));
  1949.             SKILLSDEBUG = Boolean.parseBoolean(devSettings.getProperty("SkillsDebug", "false"));
  1950.             DEBUG = Boolean.parseBoolean(devSettings.getProperty("Debug", "false"));
  1951.             ASSERT = Boolean.parseBoolean(devSettings.getProperty("Assert", "false"));
  1952.             DEVELOPER = Boolean.parseBoolean(devSettings.getProperty("Developer", "false"));
  1953.             ZONE_DEBUG = Boolean.parseBoolean(devSettings.getProperty("ZoneDebug", "false"));
  1954.             ENABLE_ALL_EXCEPTIONS = Boolean.parseBoolean(devSettings.getProperty("EnableAllExceptionsLog", "false"));
  1955.             SERVER_LIST_TESTSERVER = Boolean.parseBoolean(devSettings.getProperty("TestServer", "false"));
  1956.             BETASERVER = Boolean.parseBoolean(devSettings.getProperty("BetaServer", "false"));
  1957.             SERVER_LIST_BRACKET = Boolean.valueOf(devSettings.getProperty("ServerListBrackets", "false"));
  1958.             SERVER_LIST_CLOCK = Boolean.valueOf(devSettings.getProperty("ServerListClock", "false"));
  1959.             SERVER_GMONLY = Boolean.valueOf(devSettings.getProperty("ServerGMOnly", "false"));
  1960.             ALT_DEV_NO_QUESTS = Boolean.parseBoolean(devSettings.getProperty("AltDevNoQuests", "False"));
  1961.             ALT_DEV_NO_SPAWNS = Boolean.parseBoolean(devSettings.getProperty("AltDevNoSpawns", "False"));
  1962.             ALT_DEV_NO_SCRIPT = Boolean.parseBoolean(devSettings.getProperty("AltDevNoScript", "False"));
  1963.             ALT_DEV_NO_AI = Boolean.parseBoolean(devSettings.getProperty("AltDevNoAI", "False"));
  1964.             ALT_DEV_NO_RB = Boolean.parseBoolean(devSettings.getProperty("AltDevNoRB", "False"));
  1965.             ENABLE_OLYMPIAD_DISCONNECTION_DEBUG = Boolean.parseBoolean(devSettings.getProperty("EnableOlympiadDisconnectionDebug"));
  1966.            
  1967.             REQUEST_ID = Integer.parseInt(devSettings.getProperty("RequestServerID", "0"));
  1968.             ACCEPT_ALTERNATE_ID = Boolean.parseBoolean(devSettings.getProperty("AcceptAlternateID", "True"));
  1969.            
  1970.             CNAME_TEMPLATE = devSettings.getProperty("CnameTemplate", ".*");
  1971.             PET_NAME_TEMPLATE = devSettings.getProperty("PetNameTemplate", ".*");
  1972.             CLAN_NAME_TEMPLATE = devSettings.getProperty("ClanNameTemplate", ".*");
  1973.             ALLY_NAME_TEMPLATE = devSettings.getProperty("AllyNameTemplate", ".*");
  1974.             MAX_CHARACTERS_NUMBER_PER_ACCOUNT = Integer.parseInt(devSettings.getProperty("CharMaxNumber", "0"));
  1975.            
  1976.             MAX_CHARACTERS_NUMBER_PER_IP = Integer.parseInt(devSettings.getProperty("CharMaxNumberPerIP", "0"));
  1977.            
  1978.             MAXIMUM_ONLINE_USERS = Integer.parseInt(devSettings.getProperty("MaximumOnlineUsers", "100"));
  1979.            
  1980.             MIN_PROTOCOL_REVISION = Integer.parseInt(devSettings.getProperty("MinProtocolRevision", "660"));
  1981.             MAX_PROTOCOL_REVISION = Integer.parseInt(devSettings.getProperty("MaxProtocolRevision", "665"));
  1982.             if (MIN_PROTOCOL_REVISION > MAX_PROTOCOL_REVISION)
  1983.             {
  1984.                 throw new Error("MinProtocolRevision is bigger than MaxProtocolRevision in server configuration file.");
  1985.             }
  1986.            
  1987.             GMAUDIT = Boolean.valueOf(devSettings.getProperty("GMAudit", "False"));
  1988.             LOG_CHAT = Boolean.valueOf(devSettings.getProperty("LogChat", "false"));
  1989.             LOG_ITEMS = Boolean.valueOf(devSettings.getProperty("LogItems", "false"));
  1990.             LOG_HIGH_DAMAGES = Boolean.valueOf(devSettings.getProperty("LogHighDamages", "false"));
  1991.            
  1992.             GAMEGUARD_L2NET_CHECK = Boolean.valueOf(devSettings.getProperty("GameGuardL2NetCheck", "False"));
  1993.            
  1994.             THREAD_P_EFFECTS = Integer.parseInt(devSettings.getProperty("ThreadPoolSizeEffects", "6"));
  1995.             THREAD_P_GENERAL = Integer.parseInt(devSettings.getProperty("ThreadPoolSizeGeneral", "15"));
  1996.             GENERAL_PACKET_THREAD_CORE_SIZE = Integer.parseInt(devSettings.getProperty("GeneralPacketThreadCoreSize", "4"));
  1997.             IO_PACKET_THREAD_CORE_SIZE = Integer.parseInt(devSettings.getProperty("UrgentPacketThreadCoreSize", "2"));
  1998.             AI_MAX_THREAD = Integer.parseInt(devSettings.getProperty("AiMaxThread", "10"));
  1999.             GENERAL_THREAD_CORE_SIZE = Integer.parseInt(devSettings.getProperty("GeneralThreadCoreSize", "4"));
  2000.            
  2001.             LAZY_CACHE = Boolean.valueOf(devSettings.getProperty("LazyCache", "False"));
  2002.         }
  2003.         catch (final Exception e)
  2004.         {
  2005.             e.printStackTrace();
  2006.             throw new Error("Failed to Load " + DEV + " File.");
  2007.         }
  2008.     }
  2009.    
  2010.     // ============================================================
  2011.     public static boolean IS_CRAFTING_ENABLED;
  2012.     public static int DWARF_RECIPE_LIMIT;
  2013.     public static int COMMON_RECIPE_LIMIT;
  2014.     public static boolean ALT_GAME_CREATION;
  2015.     public static double ALT_GAME_CREATION_SPEED;
  2016.     public static double ALT_GAME_CREATION_XP_RATE;
  2017.     public static double ALT_GAME_CREATION_SP_RATE;
  2018.     public static boolean ALT_BLACKSMITH_USE_RECIPES;
  2019.    
  2020.     // ============================================================
  2021.     public static void loadCraftConfig()
  2022.     {
  2023.         final String CRAFT = FService.CRAFTING;
  2024.        
  2025.         try
  2026.         {
  2027.             final Properties craftSettings = new Properties();
  2028.             final InputStream is = new FileInputStream(new File(CRAFT));
  2029.             craftSettings.load(is);
  2030.             is.close();
  2031.            
  2032.             DWARF_RECIPE_LIMIT = Integer.parseInt(craftSettings.getProperty("DwarfRecipeLimit", "50"));
  2033.             COMMON_RECIPE_LIMIT = Integer.parseInt(craftSettings.getProperty("CommonRecipeLimit", "50"));
  2034.             IS_CRAFTING_ENABLED = Boolean.parseBoolean(craftSettings.getProperty("CraftingEnabled", "True"));
  2035.             ALT_GAME_CREATION = Boolean.parseBoolean(craftSettings.getProperty("AltGameCreation", "False"));
  2036.             ALT_GAME_CREATION_SPEED = Double.parseDouble(craftSettings.getProperty("AltGameCreationSpeed", "1"));
  2037.             ALT_GAME_CREATION_XP_RATE = Double.parseDouble(craftSettings.getProperty("AltGameCreationRateXp", "1"));
  2038.             ALT_GAME_CREATION_SP_RATE = Double.parseDouble(craftSettings.getProperty("AltGameCreationRateSp", "1"));
  2039.             ALT_BLACKSMITH_USE_RECIPES = Boolean.parseBoolean(craftSettings.getProperty("AltBlacksmithUseRecipes", "True"));
  2040.         }
  2041.         catch (final Exception e)
  2042.         {
  2043.             e.printStackTrace();
  2044.             throw new Error("Failed to Load " + CRAFT + " File.");
  2045.         }
  2046.     }
  2047.    
  2048.     // ============================================================
  2049.     public static boolean ALLOW_AWAY_STATUS;
  2050.     public static int AWAY_TIMER;
  2051.     public static int BACK_TIMER;
  2052.     public static int AWAY_TITLE_COLOR;
  2053.     public static boolean AWAY_PLAYER_TAKE_AGGRO;
  2054.     public static boolean AWAY_PEACE_ZONE;
  2055.    
  2056.     // ============================================================
  2057.     public static void loadAWAYConfig()
  2058.     {
  2059.         final String AWAY_SYSTEM = FService.AWAY_FILE;
  2060.        
  2061.         try
  2062.         {
  2063.             final Properties AWAYSettings = new Properties();
  2064.             final InputStream is = new FileInputStream(new File(AWAY_SYSTEM));
  2065.             AWAYSettings.load(is);
  2066.             is.close();
  2067.            
  2068.             /** Away System **/
  2069.             ALLOW_AWAY_STATUS = Boolean.parseBoolean(AWAYSettings.getProperty("AllowAwayStatus", "False"));
  2070.             AWAY_PLAYER_TAKE_AGGRO = Boolean.parseBoolean(AWAYSettings.getProperty("AwayPlayerTakeAggro", "False"));
  2071.             AWAY_TITLE_COLOR = Integer.decode("0x" + AWAYSettings.getProperty("AwayTitleColor", "0000FF"));
  2072.             AWAY_TIMER = Integer.parseInt(AWAYSettings.getProperty("AwayTimer", "30"));
  2073.             BACK_TIMER = Integer.parseInt(AWAYSettings.getProperty("BackTimer", "30"));
  2074.             AWAY_PEACE_ZONE = Boolean.parseBoolean(AWAYSettings.getProperty("AwayOnlyInPeaceZone", "False"));
  2075.            
  2076.         }
  2077.         catch (final Exception e)
  2078.         {
  2079.             e.printStackTrace();
  2080.             throw new Error("Failed to Load " + AWAY_SYSTEM + " File.");
  2081.         }
  2082.     }
  2083.    
  2084.     // ============================================================
  2085.     public static boolean BANKING_SYSTEM_ENABLED;
  2086.     public static int BANKING_SYSTEM_GOLDBARS;
  2087.     public static int BANKING_SYSTEM_ADENA;
  2088.    
  2089.     // ============================================================
  2090.     public static void loadBankingConfig()
  2091.     {
  2092.         final String BANK = FService.BANK_FILE;
  2093.        
  2094.         try
  2095.         {
  2096.             final Properties BANKSettings = new Properties();
  2097.             final InputStream is = new FileInputStream(new File(BANK));
  2098.             BANKSettings.load(is);
  2099.             is.close();
  2100.            
  2101.             BANKING_SYSTEM_ENABLED = Boolean.parseBoolean(BANKSettings.getProperty("BankingEnabled", "false"));
  2102.             BANKING_SYSTEM_GOLDBARS = Integer.parseInt(BANKSettings.getProperty("BankingGoldbarCount", "1"));
  2103.             BANKING_SYSTEM_ADENA = Integer.parseInt(BANKSettings.getProperty("BankingAdenaCount", "500000000"));
  2104.            
  2105.         }
  2106.         catch (final Exception e)
  2107.         {
  2108.             e.printStackTrace();
  2109.             throw new Error("Failed to Load " + BANK + " File.");
  2110.         }
  2111.     }
  2112.    
  2113.     // ============================================================
  2114.     public static boolean OFFLINE_TRADE_ENABLE;
  2115.     public static boolean OFFLINE_CRAFT_ENABLE;
  2116.     public static boolean OFFLINE_SET_NAME_COLOR;
  2117.     public static int OFFLINE_NAME_COLOR;
  2118.    
  2119.     public static boolean OFFLINE_COMMAND1;
  2120.     public static boolean OFFLINE_COMMAND2;
  2121.     public static boolean OFFLINE_LOGOUT;
  2122.     public static boolean OFFLINE_SLEEP_EFFECT;
  2123.    
  2124.     public static boolean RESTORE_OFFLINERS;
  2125.     public static int OFFLINE_MAX_DAYS;
  2126.     public static boolean OFFLINE_DISCONNECT_FINISHED;
  2127.    
  2128.     // ============================================================
  2129.     public static void loadOfflineConfig()
  2130.     {
  2131.         final String OFFLINE = FService.OFFLINE_FILE;
  2132.        
  2133.         try
  2134.         {
  2135.             final Properties OfflineSettings = new Properties();
  2136.             final InputStream is = new FileInputStream(new File(OFFLINE));
  2137.             OfflineSettings.load(is);
  2138.             is.close();
  2139.            
  2140.             OFFLINE_TRADE_ENABLE = Boolean.parseBoolean(OfflineSettings.getProperty("OfflineTradeEnable", "false"));
  2141.             OFFLINE_CRAFT_ENABLE = Boolean.parseBoolean(OfflineSettings.getProperty("OfflineCraftEnable", "false"));
  2142.             OFFLINE_SET_NAME_COLOR = Boolean.parseBoolean(OfflineSettings.getProperty("OfflineNameColorEnable", "false"));
  2143.             OFFLINE_NAME_COLOR = Integer.decode("0x" + OfflineSettings.getProperty("OfflineNameColor", "ff00ff"));
  2144.            
  2145.             OFFLINE_COMMAND1 = Boolean.parseBoolean(OfflineSettings.getProperty("OfflineCommand1", "True"));
  2146.             OFFLINE_COMMAND2 = Boolean.parseBoolean(OfflineSettings.getProperty("OfflineCommand2", "False"));
  2147.             OFFLINE_LOGOUT = Boolean.parseBoolean(OfflineSettings.getProperty("OfflineLogout", "False"));
  2148.             OFFLINE_SLEEP_EFFECT = Boolean.parseBoolean(OfflineSettings.getProperty("OfflineSleepEffect", "True"));
  2149.            
  2150.             RESTORE_OFFLINERS = Boolean.parseBoolean(OfflineSettings.getProperty("RestoreOffliners", "false"));
  2151.             OFFLINE_MAX_DAYS = Integer.parseInt(OfflineSettings.getProperty("OfflineMaxDays", "10"));
  2152.             OFFLINE_DISCONNECT_FINISHED = Boolean.parseBoolean(OfflineSettings.getProperty("OfflineDisconnectFinished", "true"));
  2153.            
  2154.         }
  2155.         catch (final Exception e)
  2156.         {
  2157.             e.printStackTrace();
  2158.             throw new Error("Failed to Load " + OFFLINE + " File.");
  2159.         }
  2160.     }
  2161.    
  2162.     // ============================================================
  2163.     public static boolean GM_TRADE_RESTRICTED_ITEMS;
  2164.     public static boolean GM_CRITANNOUNCER_NAME;
  2165.     public static boolean GM_RESTART_FIGHTING;
  2166.     public static boolean PM_MESSAGE_ON_START;
  2167.     public static boolean SERVER_TIME_ON_START;
  2168.     public static String PM_SERVER_NAME;
  2169.     public static String PM_TEXT1;
  2170.     public static String PM_TEXT2;
  2171.     public static boolean NEW_PLAYER_EFFECT;
  2172.    
  2173.     // ============================================================
  2174.     public static void loadFrozenConfig()
  2175.     {
  2176.         final String Frozen = FService.L2FROZEN_CONFIG_FILE;
  2177.        
  2178.         try
  2179.         {
  2180.             final Properties frozenSettings = new Properties();
  2181.             final InputStream is = new FileInputStream(new File(Frozen));
  2182.             frozenSettings.load(is);
  2183.             is.close();
  2184.            
  2185.             GM_TRADE_RESTRICTED_ITEMS = Boolean.parseBoolean(frozenSettings.getProperty("GMTradeRestrictedItems", "False"));
  2186.             GM_RESTART_FIGHTING = Boolean.parseBoolean(frozenSettings.getProperty("GMRestartFighting", "False"));
  2187.             PM_MESSAGE_ON_START = Boolean.parseBoolean(frozenSettings.getProperty("PMWelcomeShow", "False"));
  2188.             SERVER_TIME_ON_START = Boolean.parseBoolean(frozenSettings.getProperty("ShowServerTimeOnStart", "False"));
  2189.             PM_SERVER_NAME = frozenSettings.getProperty("PMServerName", "L2-Frozen");
  2190.             PM_TEXT1 = frozenSettings.getProperty("PMText1", "Have Fun and Nice Stay on");
  2191.             PM_TEXT2 = frozenSettings.getProperty("PMText2", "Vote for us every 24h");
  2192.             NEW_PLAYER_EFFECT = Boolean.parseBoolean(frozenSettings.getProperty("NewPlayerEffect", "True"));
  2193.            
  2194.         }
  2195.         catch (final Exception e)
  2196.         {
  2197.             e.printStackTrace();
  2198.             throw new Error("Failed to Load " + Frozen + " File.");
  2199.         }
  2200.     }
  2201.    
  2202.     // ============================================================
  2203.     public static boolean DM_ALLOW_INTERFERENCE;
  2204.     public static boolean DM_ALLOW_POTIONS;
  2205.     public static boolean DM_ALLOW_SUMMON;
  2206.     public static boolean DM_JOIN_CURSED;
  2207.     public static boolean DM_ON_START_REMOVE_ALL_EFFECTS;
  2208.     public static boolean DM_ON_START_UNSUMMON_PET;
  2209.     public static long DM_REVIVE_DELAY;
  2210.     public static boolean DM_COMMAND;
  2211.     public static boolean DM_ENABLE_KILL_REWARD;
  2212.     public static int DM_KILL_REWARD_ID;
  2213.     public static int DM_KILL_REWARD_AMOUNT;
  2214.     public static boolean DM_ANNOUNCE_REWARD;
  2215.     public static boolean DM_REVIVE_RECOVERY;
  2216.     public static int DM_SPAWN_OFFSET;
  2217.     public static boolean DM_STATS_LOGGER;
  2218.     public static boolean DM_ALLOW_HEALER_CLASSES;
  2219.     public static boolean DM_REMOVE_BUFFS_ON_DIE;
  2220.    
  2221.     // ============================================================
  2222.     public static void loadDMConfig()
  2223.     {
  2224.         final String EVENT_DM = FService.EVENT_DM_FILE;
  2225.        
  2226.         try
  2227.         {
  2228.             final Properties DMSettings = new Properties();
  2229.             final InputStream is = new FileInputStream(new File(EVENT_DM));
  2230.             DMSettings.load(is);
  2231.             is.close();
  2232.            
  2233.             DM_ALLOW_INTERFERENCE = Boolean.parseBoolean(DMSettings.getProperty("DMAllowInterference", "False"));
  2234.             DM_ALLOW_POTIONS = Boolean.parseBoolean(DMSettings.getProperty("DMAllowPotions", "False"));
  2235.             DM_ALLOW_SUMMON = Boolean.parseBoolean(DMSettings.getProperty("DMAllowSummon", "False"));
  2236.             DM_JOIN_CURSED = Boolean.parseBoolean(DMSettings.getProperty("DMJoinWithCursedWeapon", "False"));
  2237.             DM_ON_START_REMOVE_ALL_EFFECTS = Boolean.parseBoolean(DMSettings.getProperty("DMOnStartRemoveAllEffects", "True"));
  2238.             DM_ON_START_UNSUMMON_PET = Boolean.parseBoolean(DMSettings.getProperty("DMOnStartUnsummonPet", "True"));
  2239.             DM_REVIVE_DELAY = Long.parseLong(DMSettings.getProperty("DMReviveDelay", "20000"));
  2240.             if (DM_REVIVE_DELAY < 1000)
  2241.             {
  2242.                 DM_REVIVE_DELAY = 1000; // can't be set less then 1 second
  2243.             }
  2244.            
  2245.             DM_REVIVE_RECOVERY = Boolean.parseBoolean(DMSettings.getProperty("DMReviveRecovery", "False"));
  2246.            
  2247.             DM_COMMAND = Boolean.parseBoolean(DMSettings.getProperty("DMCommand", "False"));
  2248.             DM_ENABLE_KILL_REWARD = Boolean.parseBoolean(DMSettings.getProperty("DMEnableKillReward", "False"));
  2249.             DM_KILL_REWARD_ID = Integer.parseInt(DMSettings.getProperty("DMKillRewardID", "6392"));
  2250.             DM_KILL_REWARD_AMOUNT = Integer.parseInt(DMSettings.getProperty("DMKillRewardAmount", "1"));
  2251.            
  2252.             DM_ANNOUNCE_REWARD = Boolean.parseBoolean(DMSettings.getProperty("DMAnnounceReward", "False"));
  2253.             DM_SPAWN_OFFSET = Integer.parseInt(DMSettings.getProperty("DMSpawnOffset", "100"));
  2254.            
  2255.             DM_STATS_LOGGER = Boolean.parseBoolean(DMSettings.getProperty("DMStatsLogger", "true"));
  2256.            
  2257.             DM_ALLOW_HEALER_CLASSES = Boolean.parseBoolean(DMSettings.getProperty("DMAllowedHealerClasses", "true"));
  2258.            
  2259.             DM_REMOVE_BUFFS_ON_DIE = Boolean.parseBoolean(DMSettings.getProperty("DMRemoveBuffsOnPlayerDie", "false"));
  2260.            
  2261.         }
  2262.         catch (final Exception e)
  2263.         {
  2264.             e.printStackTrace();
  2265.             throw new Error("Failed to Load " + EVENT_DM + " File.");
  2266.         }
  2267.     }
  2268.    
  2269.     // ============================================================
  2270.     public static String CTF_EVEN_TEAMS;
  2271.     public static boolean CTF_ALLOW_INTERFERENCE;
  2272.     public static boolean CTF_ALLOW_POTIONS;
  2273.     public static boolean CTF_ALLOW_SUMMON;
  2274.     public static boolean CTF_ON_START_REMOVE_ALL_EFFECTS;
  2275.     public static boolean CTF_ON_START_UNSUMMON_PET;
  2276.     public static boolean CTF_ANNOUNCE_TEAM_STATS;
  2277.     public static boolean CTF_ANNOUNCE_REWARD;
  2278.     public static boolean CTF_JOIN_CURSED;
  2279.     public static boolean CTF_REVIVE_RECOVERY;
  2280.     public static boolean CTF_COMMAND;
  2281.     public static boolean CTF_AURA;
  2282.     public static boolean CTF_STATS_LOGGER;
  2283.     public static int CTF_SPAWN_OFFSET;
  2284.     public static boolean CTF_REMOVE_BUFFS_ON_DIE;
  2285.    
  2286.     // ============================================================
  2287.     public static void loadCTFConfig()
  2288.     {
  2289.         final String EVENT_CTF = FService.EVENT_CTF_FILE;
  2290.        
  2291.         try
  2292.         {
  2293.             final Properties CTFSettings = new Properties();
  2294.             final InputStream is = new FileInputStream(new File(EVENT_CTF));
  2295.             CTFSettings.load(is);
  2296.             is.close();
  2297.            
  2298.             CTF_EVEN_TEAMS = CTFSettings.getProperty("CTFEvenTeams", "BALANCE");
  2299.             CTF_ALLOW_INTERFERENCE = Boolean.parseBoolean(CTFSettings.getProperty("CTFAllowInterference", "False"));
  2300.             CTF_ALLOW_POTIONS = Boolean.parseBoolean(CTFSettings.getProperty("CTFAllowPotions", "False"));
  2301.             CTF_ALLOW_SUMMON = Boolean.parseBoolean(CTFSettings.getProperty("CTFAllowSummon", "False"));
  2302.             CTF_ON_START_REMOVE_ALL_EFFECTS = Boolean.parseBoolean(CTFSettings.getProperty("CTFOnStartRemoveAllEffects", "True"));
  2303.             CTF_ON_START_UNSUMMON_PET = Boolean.parseBoolean(CTFSettings.getProperty("CTFOnStartUnsummonPet", "True"));
  2304.             CTF_ANNOUNCE_TEAM_STATS = Boolean.parseBoolean(CTFSettings.getProperty("CTFAnnounceTeamStats", "False"));
  2305.             CTF_ANNOUNCE_REWARD = Boolean.parseBoolean(CTFSettings.getProperty("CTFAnnounceReward", "False"));
  2306.             CTF_JOIN_CURSED = Boolean.parseBoolean(CTFSettings.getProperty("CTFJoinWithCursedWeapon", "True"));
  2307.             CTF_REVIVE_RECOVERY = Boolean.parseBoolean(CTFSettings.getProperty("CTFReviveRecovery", "False"));
  2308.             CTF_COMMAND = Boolean.parseBoolean(CTFSettings.getProperty("CTFCommand", "True"));
  2309.             CTF_AURA = Boolean.parseBoolean(CTFSettings.getProperty("CTFAura", "True"));
  2310.            
  2311.             CTF_STATS_LOGGER = Boolean.parseBoolean(CTFSettings.getProperty("CTFStatsLogger", "true"));
  2312.            
  2313.             CTF_SPAWN_OFFSET = Integer.parseInt(CTFSettings.getProperty("CTFSpawnOffset", "100"));
  2314.            
  2315.             CTF_REMOVE_BUFFS_ON_DIE = Boolean.parseBoolean(CTFSettings.getProperty("CTFRemoveBuffsOnPlayerDie", "false"));
  2316.            
  2317.         }
  2318.         catch (final Exception e)
  2319.         {
  2320.             e.printStackTrace();
  2321.             throw new Error("Failed to Load " + EVENT_CTF + " File.");
  2322.         }
  2323.     }
  2324.    
  2325.     // ============================================================
  2326.     public static boolean ONLINE_PLAYERS_ON_LOGIN;
  2327.     public static boolean SHOW_SERVER_VERSION;
  2328.     public static boolean SUBSTUCK_SKILLS;
  2329.     public static boolean ALT_SERVER_NAME_ENABLED;
  2330.     public static boolean ANNOUNCE_TO_ALL_SPAWN_RB;
  2331.     public static boolean ANNOUNCE_TRY_BANNED_ACCOUNT;
  2332.     public static String ALT_Server_Name;
  2333.     public static boolean DONATOR_NAME_COLOR_ENABLED;
  2334.     public static int DONATOR_NAME_COLOR;
  2335.     public static int DONATOR_TITLE_COLOR;
  2336.     public static float DONATOR_XPSP_RATE;
  2337.     public static float DONATOR_ADENA_RATE;
  2338.     public static float DONATOR_DROP_RATE;
  2339.     public static float DONATOR_SPOIL_RATE;
  2340.     public static boolean CUSTOM_SPAWNLIST_TABLE;
  2341.     public static boolean SAVE_GMSPAWN_ON_CUSTOM;
  2342.     public static boolean DELETE_GMSPAWN_ON_CUSTOM;
  2343.     public static boolean CUSTOM_NPC_TABLE = true;
  2344.     public static boolean CUSTOM_ITEM_TABLES = true;
  2345.     public static boolean CUSTOM_ARMORSETS_TABLE = true;
  2346.     public static boolean CUSTOM_TELEPORT_TABLE = true;
  2347.     public static boolean CUSTOM_DROPLIST_TABLE = true;
  2348.     public static boolean CUSTOM_MERCHANT_TABLES = true;
  2349.     public static boolean ALLOW_SIMPLE_STATS_VIEW;
  2350.     public static boolean ALLOW_DETAILED_STATS_VIEW;
  2351.     public static boolean ALLOW_ONLINE_VIEW;
  2352.     public static boolean WELCOME_HTM;
  2353.     public static String ALLOWED_SKILLS;
  2354.     public static FastList<Integer> ALLOWED_SKILLS_LIST = new FastList<>();
  2355.     public static boolean PROTECTOR_PLAYER_PK;
  2356.     public static boolean PROTECTOR_PLAYER_PVP;
  2357.     public static int PROTECTOR_RADIUS_ACTION;
  2358.     public static int PROTECTOR_SKILLID;
  2359.     public static int PROTECTOR_SKILLLEVEL;
  2360.     public static int PROTECTOR_SKILLTIME;
  2361.     public static String PROTECTOR_MESSAGE;
  2362.     public static boolean CASTLE_SHIELD;
  2363.     public static boolean CLANHALL_SHIELD;
  2364.     public static boolean APELLA_ARMORS;
  2365.     public static boolean OATH_ARMORS;
  2366.     public static boolean CASTLE_CROWN;
  2367.     public static boolean CASTLE_CIRCLETS;
  2368.     public static boolean KEEP_SUBCLASS_SKILLS;
  2369.     public static boolean CHAR_TITLE;
  2370.     public static String ADD_CHAR_TITLE;
  2371.     public static boolean NOBLE_CUSTOM_ITEMS;
  2372.     public static boolean HERO_CUSTOM_ITEMS;
  2373.     public static boolean ALLOW_CREATE_LVL;
  2374.     public static int CHAR_CREATE_LVL;
  2375.     public static boolean SPAWN_CHAR;
  2376.     /** X Coordinate of the SPAWN_CHAR setting. */
  2377.     public static int SPAWN_X;
  2378.     /** Y Coordinate of the SPAWN_CHAR setting. */
  2379.     public static int SPAWN_Y;
  2380.     /** Z Coordinate of the SPAWN_CHAR setting. */
  2381.     public static int SPAWN_Z;
  2382.     public static boolean ALLOW_HERO_SUBSKILL;
  2383.     public static int HERO_COUNT;
  2384.     public static int CRUMA_TOWER_LEVEL_RESTRICT;
  2385.     /** Allow RaidBoss Petrified if player have +9 lvl to RB */
  2386.     public static boolean ALLOW_RAID_BOSS_PETRIFIED;
  2387.     /** Allow Players Level Difference Protection ? */
  2388.     public static int ALT_PLAYER_PROTECTION_LEVEL;
  2389.     public static boolean ALLOW_LOW_LEVEL_TRADE;
  2390.     /** Chat filter */
  2391.     public static boolean USE_CHAT_FILTER;
  2392.     public static int MONSTER_RETURN_DELAY;
  2393.    
  2394.     public static boolean SCROLL_STACKABLE;
  2395.    
  2396.     public static boolean ALLOW_VERSION_COMMAND;
  2397.     public static boolean ALLOW_CHAR_KILL_PROTECT;
  2398.     public static int CLAN_LEADER_COLOR;
  2399.     public static int CLAN_LEADER_COLOR_CLAN_LEVEL;
  2400.     public static boolean CLAN_LEADER_COLOR_ENABLED;
  2401.     public static int CLAN_LEADER_COLORED;
  2402.     public static boolean SAVE_RAIDBOSS_STATUS_INTO_DB;
  2403.     public static boolean DISABLE_WEIGHT_PENALTY;
  2404.     public static int DIFFERENT_Z_CHANGE_OBJECT;
  2405.     public static int DIFFERENT_Z_NEW_MOVIE;
  2406.    
  2407.     public static int HERO_CUSTOM_ITEM_ID;
  2408.     public static int NOOBLE_CUSTOM_ITEM_ID;
  2409.     public static int HERO_CUSTOM_DAY;
  2410.     public static boolean ALLOW_FARM1_COMMAND;
  2411.     public static boolean ALLOW_FARM2_COMMAND;
  2412.     public static boolean ALLOW_PVP1_COMMAND;
  2413.     public static boolean ALLOW_PVP2_COMMAND;
  2414.     public static int FARM1_X;
  2415.     public static int FARM1_Y;
  2416.     public static int FARM1_Z;
  2417.     public static int PVP1_X;
  2418.     public static int PVP1_Y;
  2419.     public static int PVP1_Z;
  2420.     public static int FARM2_X;
  2421.     public static int FARM2_Y;
  2422.     public static int FARM2_Z;
  2423.     public static int PVP2_X;
  2424.     public static int PVP2_Y;
  2425.     public static int PVP2_Z;
  2426.     public static String FARM1_CUSTOM_MESSAGE;
  2427.     public static String FARM2_CUSTOM_MESSAGE;
  2428.     public static String PVP1_CUSTOM_MESSAGE;
  2429.     public static String PVP2_CUSTOM_MESSAGE;
  2430.    
  2431.     // ============================================================
  2432.     public static void loadL2JFrozenConfig()
  2433.     {
  2434.         final String L2JFROZEN = FService.L2JFROZEN_CONFIG_FILE;
  2435.        
  2436.         try
  2437.         {
  2438.             final Properties L2JFrozenSettings = new Properties();
  2439.             final InputStream is = new FileInputStream(new File(L2JFROZEN));
  2440.             L2JFrozenSettings.load(is);
  2441.             is.close();
  2442.            
  2443.             /** Custom Tables **/
  2444.             CUSTOM_SPAWNLIST_TABLE = Boolean.valueOf(L2JFrozenSettings.getProperty("CustomSpawnlistTable", "True"));
  2445.             SAVE_GMSPAWN_ON_CUSTOM = Boolean.valueOf(L2JFrozenSettings.getProperty("SaveGmSpawnOnCustom", "True"));
  2446.             DELETE_GMSPAWN_ON_CUSTOM = Boolean.valueOf(L2JFrozenSettings.getProperty("DeleteGmSpawnOnCustom", "True"));
  2447.            
  2448.             ONLINE_PLAYERS_ON_LOGIN = Boolean.valueOf(L2JFrozenSettings.getProperty("OnlineOnLogin", "False"));
  2449.             SHOW_SERVER_VERSION = Boolean.valueOf(L2JFrozenSettings.getProperty("ShowServerVersion", "False"));
  2450.            
  2451.             /** Protector **/
  2452.             PROTECTOR_PLAYER_PK = Boolean.parseBoolean(L2JFrozenSettings.getProperty("ProtectorPlayerPK", "false"));
  2453.             PROTECTOR_PLAYER_PVP = Boolean.parseBoolean(L2JFrozenSettings.getProperty("ProtectorPlayerPVP", "false"));
  2454.             PROTECTOR_RADIUS_ACTION = Integer.parseInt(L2JFrozenSettings.getProperty("ProtectorRadiusAction", "500"));
  2455.             PROTECTOR_SKILLID = Integer.parseInt(L2JFrozenSettings.getProperty("ProtectorSkillId", "1069"));
  2456.             PROTECTOR_SKILLLEVEL = Integer.parseInt(L2JFrozenSettings.getProperty("ProtectorSkillLevel", "42"));
  2457.             PROTECTOR_SKILLTIME = Integer.parseInt(L2JFrozenSettings.getProperty("ProtectorSkillTime", "800"));
  2458.             PROTECTOR_MESSAGE = L2JFrozenSettings.getProperty("ProtectorMessage", "Protector, not spawnkilling here, go read the rules !!!");
  2459.            
  2460.             /** Donator color name **/
  2461.             DONATOR_NAME_COLOR_ENABLED = Boolean.parseBoolean(L2JFrozenSettings.getProperty("DonatorNameColorEnabled", "False"));
  2462.             DONATOR_NAME_COLOR = Integer.decode("0x" + L2JFrozenSettings.getProperty("DonatorColorName", "00FFFF"));
  2463.             DONATOR_TITLE_COLOR = Integer.decode("0x" + L2JFrozenSettings.getProperty("DonatorTitleColor", "00FF00"));
  2464.             DONATOR_XPSP_RATE = Float.parseFloat(L2JFrozenSettings.getProperty("DonatorXpSpRate", "1.5"));
  2465.             DONATOR_ADENA_RATE = Float.parseFloat(L2JFrozenSettings.getProperty("DonatorAdenaRate", "1.5"));
  2466.             DONATOR_DROP_RATE = Float.parseFloat(L2JFrozenSettings.getProperty("DonatorDropRate", "1.5"));
  2467.             DONATOR_SPOIL_RATE = Float.parseFloat(L2JFrozenSettings.getProperty("DonatorSpoilRate", "1.5"));
  2468.            
  2469.             /** Welcome Htm **/
  2470.             WELCOME_HTM = Boolean.parseBoolean(L2JFrozenSettings.getProperty("WelcomeHtm", "False"));
  2471.            
  2472.             /** Server Name **/
  2473.             ALT_SERVER_NAME_ENABLED = Boolean.parseBoolean(L2JFrozenSettings.getProperty("ServerNameEnabled", "false"));
  2474.             ANNOUNCE_TO_ALL_SPAWN_RB = Boolean.parseBoolean(L2JFrozenSettings.getProperty("AnnounceToAllSpawnRb", "false"));
  2475.             ANNOUNCE_TRY_BANNED_ACCOUNT = Boolean.parseBoolean(L2JFrozenSettings.getProperty("AnnounceTryBannedAccount", "false"));
  2476.             ALT_Server_Name = String.valueOf(L2JFrozenSettings.getProperty("ServerName"));
  2477.             DIFFERENT_Z_CHANGE_OBJECT = Integer.parseInt(L2JFrozenSettings.getProperty("DifferentZchangeObject", "650"));
  2478.             DIFFERENT_Z_NEW_MOVIE = Integer.parseInt(L2JFrozenSettings.getProperty("DifferentZnewmovie", "1000"));
  2479.            
  2480.             ALLOW_SIMPLE_STATS_VIEW = Boolean.valueOf(L2JFrozenSettings.getProperty("AllowSimpleStatsView", "True"));
  2481.             ALLOW_DETAILED_STATS_VIEW = Boolean.valueOf(L2JFrozenSettings.getProperty("AllowDetailedStatsView", "False"));
  2482.             ALLOW_ONLINE_VIEW = Boolean.valueOf(L2JFrozenSettings.getProperty("AllowOnlineView", "False"));
  2483.            
  2484.             KEEP_SUBCLASS_SKILLS = Boolean.parseBoolean(L2JFrozenSettings.getProperty("KeepSubClassSkills", "False"));
  2485.            
  2486.             ALLOWED_SKILLS = L2JFrozenSettings.getProperty("AllowedSkills", "541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,617,618,619");
  2487.             ALLOWED_SKILLS_LIST = new FastList<>();
  2488.             for (final String id : ALLOWED_SKILLS.trim().split(","))
  2489.             {
  2490.                 ALLOWED_SKILLS_LIST.add(Integer.parseInt(id.trim()));
  2491.             }
  2492.             CASTLE_SHIELD = Boolean.parseBoolean(L2JFrozenSettings.getProperty("CastleShieldRestriction", "true"));
  2493.             CLANHALL_SHIELD = Boolean.parseBoolean(L2JFrozenSettings.getProperty("ClanHallShieldRestriction", "true"));
  2494.             APELLA_ARMORS = Boolean.parseBoolean(L2JFrozenSettings.getProperty("ApellaArmorsRestriction", "true"));
  2495.             OATH_ARMORS = Boolean.parseBoolean(L2JFrozenSettings.getProperty("OathArmorsRestriction", "true"));
  2496.             CASTLE_CROWN = Boolean.parseBoolean(L2JFrozenSettings.getProperty("CastleLordsCrownRestriction", "true"));
  2497.             CASTLE_CIRCLETS = Boolean.parseBoolean(L2JFrozenSettings.getProperty("CastleCircletsRestriction", "true"));
  2498.             CHAR_TITLE = Boolean.parseBoolean(L2JFrozenSettings.getProperty("CharTitle", "false"));
  2499.             ADD_CHAR_TITLE = L2JFrozenSettings.getProperty("CharAddTitle", "Welcome");
  2500.            
  2501.             NOBLE_CUSTOM_ITEMS = Boolean.parseBoolean(L2JFrozenSettings.getProperty("EnableNobleCustomItem", "true"));
  2502.             NOOBLE_CUSTOM_ITEM_ID = Integer.parseInt(L2JFrozenSettings.getProperty("NoobleCustomItemId", "6673"));
  2503.             HERO_CUSTOM_ITEMS = Boolean.parseBoolean(L2JFrozenSettings.getProperty("EnableHeroCustomItem", "true"));
  2504.             HERO_CUSTOM_ITEM_ID = Integer.parseInt(L2JFrozenSettings.getProperty("HeroCustomItemId", "3481"));
  2505.             HERO_CUSTOM_DAY = Integer.parseInt(L2JFrozenSettings.getProperty("HeroCustomDay", "0"));
  2506.            
  2507.             ALLOW_CREATE_LVL = Boolean.parseBoolean(L2JFrozenSettings.getProperty("CustomStartingLvl", "False"));
  2508.             CHAR_CREATE_LVL = Integer.parseInt(L2JFrozenSettings.getProperty("CharLvl", "80"));
  2509.             SPAWN_CHAR = Boolean.parseBoolean(L2JFrozenSettings.getProperty("CustomSpawn", "false"));
  2510.             SPAWN_X = Integer.parseInt(L2JFrozenSettings.getProperty("SpawnX", ""));
  2511.             SPAWN_Y = Integer.parseInt(L2JFrozenSettings.getProperty("SpawnY", ""));
  2512.             SPAWN_Z = Integer.parseInt(L2JFrozenSettings.getProperty("SpawnZ", ""));
  2513.             ALLOW_LOW_LEVEL_TRADE = Boolean.parseBoolean(L2JFrozenSettings.getProperty("AllowLowLevelTrade", "True"));
  2514.             ALLOW_HERO_SUBSKILL = Boolean.parseBoolean(L2JFrozenSettings.getProperty("CustomHeroSubSkill", "False"));
  2515.             HERO_COUNT = Integer.parseInt(L2JFrozenSettings.getProperty("HeroCount", "1"));
  2516.             CRUMA_TOWER_LEVEL_RESTRICT = Integer.parseInt(L2JFrozenSettings.getProperty("CrumaTowerLevelRestrict", "56"));
  2517.             ALLOW_RAID_BOSS_PETRIFIED = Boolean.valueOf(L2JFrozenSettings.getProperty("AllowRaidBossPetrified", "True"));
  2518.             ALT_PLAYER_PROTECTION_LEVEL = Integer.parseInt(L2JFrozenSettings.getProperty("AltPlayerProtectionLevel", "0"));
  2519.             MONSTER_RETURN_DELAY = Integer.parseInt(L2JFrozenSettings.getProperty("MonsterReturnDelay", "1200"));
  2520.             SCROLL_STACKABLE = Boolean.parseBoolean(L2JFrozenSettings.getProperty("ScrollStackable", "False"));
  2521.             ALLOW_CHAR_KILL_PROTECT = Boolean.parseBoolean(L2JFrozenSettings.getProperty("AllowLowLvlProtect", "False"));
  2522.             CLAN_LEADER_COLOR_ENABLED = Boolean.parseBoolean(L2JFrozenSettings.getProperty("ClanLeaderNameColorEnabled", "true"));
  2523.             CLAN_LEADER_COLORED = Integer.parseInt(L2JFrozenSettings.getProperty("ClanLeaderColored", "1"));
  2524.             CLAN_LEADER_COLOR = Integer.decode("0x" + L2JFrozenSettings.getProperty("ClanLeaderColor", "00FFFF"));
  2525.             CLAN_LEADER_COLOR_CLAN_LEVEL = Integer.parseInt(L2JFrozenSettings.getProperty("ClanLeaderColorAtClanLevel", "1"));
  2526.             ALLOW_VERSION_COMMAND = Boolean.parseBoolean(L2JFrozenSettings.getProperty("AllowVersionCommand", "False"));
  2527.             SAVE_RAIDBOSS_STATUS_INTO_DB = Boolean.parseBoolean(L2JFrozenSettings.getProperty("SaveRBStatusIntoDB", "False"));
  2528.             DISABLE_WEIGHT_PENALTY = Boolean.parseBoolean(L2JFrozenSettings.getProperty("DisableWeightPenalty", "False"));
  2529.             ALLOW_FARM1_COMMAND = Boolean.parseBoolean(L2JFrozenSettings.getProperty("AllowFarm1Command", "false"));
  2530.             ALLOW_FARM2_COMMAND = Boolean.parseBoolean(L2JFrozenSettings.getProperty("AllowFarm2Command", "false"));
  2531.             ALLOW_PVP1_COMMAND = Boolean.parseBoolean(L2JFrozenSettings.getProperty("AllowPvP1Command", "false"));
  2532.             ALLOW_PVP2_COMMAND = Boolean.parseBoolean(L2JFrozenSettings.getProperty("AllowPvP2Command", "false"));
  2533.             FARM1_X = Integer.parseInt(L2JFrozenSettings.getProperty("farm1_X", "81304"));
  2534.             FARM1_Y = Integer.parseInt(L2JFrozenSettings.getProperty("farm1_Y", "14589"));
  2535.             FARM1_Z = Integer.parseInt(L2JFrozenSettings.getProperty("farm1_Z", "-3469"));
  2536.             PVP1_X = Integer.parseInt(L2JFrozenSettings.getProperty("pvp1_X", "81304"));
  2537.             PVP1_Y = Integer.parseInt(L2JFrozenSettings.getProperty("pvp1_Y", "14589"));
  2538.             PVP1_Z = Integer.parseInt(L2JFrozenSettings.getProperty("pvp1_Z", "-3469"));
  2539.             FARM2_X = Integer.parseInt(L2JFrozenSettings.getProperty("farm2_X", "81304"));
  2540.             FARM2_Y = Integer.parseInt(L2JFrozenSettings.getProperty("farm2_Y", "14589"));
  2541.             FARM2_Z = Integer.parseInt(L2JFrozenSettings.getProperty("farm2_Z", "-3469"));
  2542.             PVP2_X = Integer.parseInt(L2JFrozenSettings.getProperty("pvp2_X", "81304"));
  2543.             PVP2_Y = Integer.parseInt(L2JFrozenSettings.getProperty("pvp2_Y", "14589"));
  2544.             PVP2_Z = Integer.parseInt(L2JFrozenSettings.getProperty("pvp2_Z", "-3469"));
  2545.             FARM1_CUSTOM_MESSAGE = L2JFrozenSettings.getProperty("Farm1CustomMeesage", "You have been teleported to Farm Zone 1!");
  2546.             FARM2_CUSTOM_MESSAGE = L2JFrozenSettings.getProperty("Farm2CustomMeesage", "You have been teleported to Farm Zone 2!");
  2547.             PVP1_CUSTOM_MESSAGE = L2JFrozenSettings.getProperty("PvP1CustomMeesage", "You have been teleported to PvP Zone 1!");
  2548.             PVP2_CUSTOM_MESSAGE = L2JFrozenSettings.getProperty("PvP2CustomMeesage", "You have been teleported to PvP Zone 2!");
  2549.         }
  2550.         catch (final Exception e)
  2551.         {
  2552.             e.printStackTrace();
  2553.             throw new Error("Failed to Load " + L2JFROZEN + " File.");
  2554.         }
  2555.     }
  2556.    
  2557.     // ============================================================
  2558.     public static int KARMA_MIN_KARMA;
  2559.     public static int KARMA_MAX_KARMA;
  2560.     public static int KARMA_XP_DIVIDER;
  2561.     public static int KARMA_LOST_BASE;
  2562.     public static boolean KARMA_DROP_GM;
  2563.     public static boolean KARMA_AWARD_PK_KILL;
  2564.     public static int KARMA_PK_LIMIT;
  2565.     public static String KARMA_NONDROPPABLE_PET_ITEMS;
  2566.     public static String KARMA_NONDROPPABLE_ITEMS;
  2567.     public static FastList<Integer> KARMA_LIST_NONDROPPABLE_PET_ITEMS = new FastList<>();
  2568.     public static FastList<Integer> KARMA_LIST_NONDROPPABLE_ITEMS = new FastList<>();
  2569.     public static int PVP_NORMAL_TIME;
  2570.     public static int PVP_PVP_TIME;
  2571.     public static boolean PVP_COLOR_SYSTEM_ENABLED;
  2572.     public static int PVP_AMOUNT1;
  2573.     public static int PVP_AMOUNT2;
  2574.     public static int PVP_AMOUNT3;
  2575.     public static int PVP_AMOUNT4;
  2576.     public static int PVP_AMOUNT5;
  2577.     public static int NAME_COLOR_FOR_PVP_AMOUNT1;
  2578.     public static int NAME_COLOR_FOR_PVP_AMOUNT2;
  2579.     public static int NAME_COLOR_FOR_PVP_AMOUNT3;
  2580.     public static int NAME_COLOR_FOR_PVP_AMOUNT4;
  2581.     public static int NAME_COLOR_FOR_PVP_AMOUNT5;
  2582.     public static boolean PK_COLOR_SYSTEM_ENABLED;
  2583.     public static int PK_AMOUNT1;
  2584.     public static int PK_AMOUNT2;
  2585.     public static int PK_AMOUNT3;
  2586.     public static int PK_AMOUNT4;
  2587.     public static int PK_AMOUNT5;
  2588.     public static int TITLE_COLOR_FOR_PK_AMOUNT1;
  2589.     public static int TITLE_COLOR_FOR_PK_AMOUNT2;
  2590.     public static int TITLE_COLOR_FOR_PK_AMOUNT3;
  2591.     public static int TITLE_COLOR_FOR_PK_AMOUNT4;
  2592.     public static int TITLE_COLOR_FOR_PK_AMOUNT5;
  2593.     public static boolean PVP_REWARD_ENABLED;
  2594.     public static int PVP_REWARD_ID;
  2595.     public static int PVP_REWARD_AMOUNT;
  2596.     public static boolean PK_REWARD_ENABLED;
  2597.     public static int PK_REWARD_ID;
  2598.     public static int PK_REWARD_AMOUNT;
  2599.     public static int REWARD_PROTECT;
  2600.     public static boolean ENABLE_PK_INFO;
  2601.     public static boolean FLAGED_PLAYER_USE_BUFFER;
  2602.     public static boolean FLAGED_PLAYER_CAN_USE_GK;
  2603.     public static boolean PVPEXPSP_SYSTEM;
  2604.     /** Add Exp At Pvp! */
  2605.     public static int ADD_EXP;
  2606.     /** Add Sp At Pvp! */
  2607.     public static int ADD_SP;
  2608.     public static boolean ALLOW_POTS_IN_PVP;
  2609.     public static boolean ALLOW_SOE_IN_PVP;
  2610.     /** Announce PvP, PK, Kill */
  2611.     public static boolean ANNOUNCE_PVP_KILL;
  2612.     public static boolean ANNOUNCE_PK_KILL;
  2613.     public static boolean ANNOUNCE_ALL_KILL;
  2614.    
  2615.     public static int DUEL_SPAWN_X;
  2616.     public static int DUEL_SPAWN_Y;
  2617.     public static int DUEL_SPAWN_Z;
  2618.    
  2619.     public static boolean PVP_PK_TITLE;
  2620.     public static String PVP_TITLE_PREFIX;
  2621.     public static String PK_TITLE_PREFIX;
  2622.    
  2623.     public static boolean WAR_LEGEND_AURA;
  2624.     public static int KILLS_TO_GET_WAR_LEGEND_AURA;
  2625.    
  2626.     public static boolean ANTI_FARM_ENABLED;
  2627.     public static boolean ANTI_FARM_CLAN_ALLY_ENABLED;
  2628.     public static boolean ANTI_FARM_LVL_DIFF_ENABLED;
  2629.     public static int ANTI_FARM_MAX_LVL_DIFF;
  2630.     public static boolean ANTI_FARM_PDEF_DIFF_ENABLED;
  2631.     public static int ANTI_FARM_MAX_PDEF_DIFF;
  2632.     public static boolean ANTI_FARM_PATK_DIFF_ENABLED;
  2633.     public static int ANTI_FARM_MAX_PATK_DIFF;
  2634.     public static boolean ANTI_FARM_PARTY_ENABLED;
  2635.     public static boolean ANTI_FARM_IP_ENABLED;
  2636.     public static boolean ANTI_FARM_SUMMON;
  2637.    
  2638.     // ============================================================
  2639.     public static void loadPvpConfig()
  2640.     {
  2641.         final String PVP = FService.PVP_CONFIG_FILE;
  2642.        
  2643.         try
  2644.         {
  2645.             final Properties pvpSettings = new Properties();
  2646.             final InputStream is = new FileInputStream(new File(PVP));
  2647.             pvpSettings.load(is);
  2648.             is.close();
  2649.            
  2650.             /* KARMA SYSTEM */
  2651.             KARMA_MIN_KARMA = Integer.parseInt(pvpSettings.getProperty("MinKarma", "240"));
  2652.             KARMA_MAX_KARMA = Integer.parseInt(pvpSettings.getProperty("MaxKarma", "10000"));
  2653.             KARMA_XP_DIVIDER = Integer.parseInt(pvpSettings.getProperty("XPDivider", "260"));
  2654.             KARMA_LOST_BASE = Integer.parseInt(pvpSettings.getProperty("BaseKarmaLost", "0"));
  2655.            
  2656.             KARMA_DROP_GM = Boolean.parseBoolean(pvpSettings.getProperty("CanGMDropEquipment", "false"));
  2657.             KARMA_AWARD_PK_KILL = Boolean.parseBoolean(pvpSettings.getProperty("AwardPKKillPVPPoint", "true"));
  2658.            
  2659.             KARMA_PK_LIMIT = Integer.parseInt(pvpSettings.getProperty("MinimumPKRequiredToDrop", "5"));
  2660.            
  2661.             KARMA_NONDROPPABLE_PET_ITEMS = pvpSettings.getProperty("ListOfPetItems", "2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650");
  2662.             KARMA_NONDROPPABLE_ITEMS = pvpSettings.getProperty("ListOfNonDroppableItems", "57,1147,425,1146,461,10,2368,7,6,2370,2369,6842,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621");
  2663.            
  2664.             KARMA_LIST_NONDROPPABLE_PET_ITEMS = new FastList<>();
  2665.             for (final String id : KARMA_NONDROPPABLE_PET_ITEMS.split(","))
  2666.             {
  2667.                 KARMA_LIST_NONDROPPABLE_PET_ITEMS.add(Integer.parseInt(id));
  2668.             }
  2669.            
  2670.             KARMA_LIST_NONDROPPABLE_ITEMS = new FastList<>();
  2671.             for (final String id : KARMA_NONDROPPABLE_ITEMS.split(","))
  2672.             {
  2673.                 KARMA_LIST_NONDROPPABLE_ITEMS.add(Integer.parseInt(id));
  2674.             }
  2675.            
  2676.             PVP_NORMAL_TIME = Integer.parseInt(pvpSettings.getProperty("PvPVsNormalTime", "15000"));
  2677.             PVP_PVP_TIME = Integer.parseInt(pvpSettings.getProperty("PvPVsPvPTime", "30000"));
  2678.             ALT_GAME_KARMA_PLAYER_CAN_BE_KILLED_IN_PEACEZONE = Boolean.valueOf(pvpSettings.getProperty("AltKarmaPlayerCanBeKilledInPeaceZone", "false"));
  2679.             ALT_GAME_KARMA_PLAYER_CAN_SHOP = Boolean.valueOf(pvpSettings.getProperty("AltKarmaPlayerCanShop", "true"));
  2680.             ALT_GAME_KARMA_PLAYER_CAN_USE_GK = Boolean.valueOf(pvpSettings.getProperty("AltKarmaPlayerCanUseGK", "false"));
  2681.             ALT_GAME_KARMA_PLAYER_CAN_TELEPORT = Boolean.valueOf(pvpSettings.getProperty("AltKarmaPlayerCanTeleport", "true"));
  2682.             ALT_GAME_KARMA_PLAYER_CAN_TRADE = Boolean.valueOf(pvpSettings.getProperty("AltKarmaPlayerCanTrade", "true"));
  2683.             ALT_GAME_KARMA_PLAYER_CAN_USE_WAREHOUSE = Boolean.valueOf(pvpSettings.getProperty("AltKarmaPlayerCanUseWareHouse", "true"));
  2684.             ALT_KARMA_TELEPORT_TO_FLORAN = Boolean.valueOf(pvpSettings.getProperty("AltKarmaTeleportToFloran", "true"));
  2685.             /** Custom Reword **/
  2686.             PVP_REWARD_ENABLED = Boolean.valueOf(pvpSettings.getProperty("PvpRewardEnabled", "false"));
  2687.             PVP_REWARD_ID = Integer.parseInt(pvpSettings.getProperty("PvpRewardItemId", "6392"));
  2688.             PVP_REWARD_AMOUNT = Integer.parseInt(pvpSettings.getProperty("PvpRewardAmmount", "1"));
  2689.            
  2690.             PK_REWARD_ENABLED = Boolean.valueOf(pvpSettings.getProperty("PKRewardEnabled", "false"));
  2691.             PK_REWARD_ID = Integer.parseInt(pvpSettings.getProperty("PKRewardItemId", "6392"));
  2692.             PK_REWARD_AMOUNT = Integer.parseInt(pvpSettings.getProperty("PKRewardAmmount", "1"));
  2693.            
  2694.             REWARD_PROTECT = Integer.parseInt(pvpSettings.getProperty("RewardProtect", "1"));
  2695.            
  2696.             // PVP Name Color System configs - Start
  2697.             PVP_COLOR_SYSTEM_ENABLED = Boolean.parseBoolean(pvpSettings.getProperty("EnablePvPColorSystem", "false"));
  2698.             PVP_AMOUNT1 = Integer.parseInt(pvpSettings.getProperty("PvpAmount1", "500"));
  2699.             PVP_AMOUNT2 = Integer.parseInt(pvpSettings.getProperty("PvpAmount2", "1000"));
  2700.             PVP_AMOUNT3 = Integer.parseInt(pvpSettings.getProperty("PvpAmount3", "1500"));
  2701.             PVP_AMOUNT4 = Integer.parseInt(pvpSettings.getProperty("PvpAmount4", "2500"));
  2702.             PVP_AMOUNT5 = Integer.parseInt(pvpSettings.getProperty("PvpAmount5", "5000"));
  2703.             NAME_COLOR_FOR_PVP_AMOUNT1 = Integer.decode("0x" + pvpSettings.getProperty("ColorForAmount1", "00FF00"));
  2704.             NAME_COLOR_FOR_PVP_AMOUNT2 = Integer.decode("0x" + pvpSettings.getProperty("ColorForAmount2", "00FF00"));
  2705.             NAME_COLOR_FOR_PVP_AMOUNT3 = Integer.decode("0x" + pvpSettings.getProperty("ColorForAmount3", "00FF00"));
  2706.             NAME_COLOR_FOR_PVP_AMOUNT4 = Integer.decode("0x" + pvpSettings.getProperty("ColorForAmount4", "00FF00"));
  2707.             NAME_COLOR_FOR_PVP_AMOUNT5 = Integer.decode("0x" + pvpSettings.getProperty("ColorForAmount5", "00FF00"));
  2708.            
  2709.             // PK Title Color System configs - Start
  2710.             PK_COLOR_SYSTEM_ENABLED = Boolean.parseBoolean(pvpSettings.getProperty("EnablePkColorSystem", "false"));
  2711.             PK_AMOUNT1 = Integer.parseInt(pvpSettings.getProperty("PkAmount1", "500"));
  2712.             PK_AMOUNT2 = Integer.parseInt(pvpSettings.getProperty("PkAmount2", "1000"));
  2713.             PK_AMOUNT3 = Integer.parseInt(pvpSettings.getProperty("PkAmount3", "1500"));
  2714.             PK_AMOUNT4 = Integer.parseInt(pvpSettings.getProperty("PkAmount4", "2500"));
  2715.             PK_AMOUNT5 = Integer.parseInt(pvpSettings.getProperty("PkAmount5", "5000"));
  2716.             TITLE_COLOR_FOR_PK_AMOUNT1 = Integer.decode("0x" + pvpSettings.getProperty("TitleForAmount1", "00FF00"));
  2717.             TITLE_COLOR_FOR_PK_AMOUNT2 = Integer.decode("0x" + pvpSettings.getProperty("TitleForAmount2", "00FF00"));
  2718.             TITLE_COLOR_FOR_PK_AMOUNT3 = Integer.decode("0x" + pvpSettings.getProperty("TitleForAmount3", "00FF00"));
  2719.             TITLE_COLOR_FOR_PK_AMOUNT4 = Integer.decode("0x" + pvpSettings.getProperty("TitleForAmount4", "00FF00"));
  2720.             TITLE_COLOR_FOR_PK_AMOUNT5 = Integer.decode("0x" + pvpSettings.getProperty("TitleForAmount5", "00FF00"));
  2721.            
  2722.             FLAGED_PLAYER_USE_BUFFER = Boolean.valueOf(pvpSettings.getProperty("AltKarmaFlagPlayerCanUseBuffer", "false"));
  2723.            
  2724.             FLAGED_PLAYER_CAN_USE_GK = Boolean.parseBoolean(pvpSettings.getProperty("FlaggedPlayerCanUseGK", "false"));
  2725.             PVPEXPSP_SYSTEM = Boolean.parseBoolean(pvpSettings.getProperty("AllowAddExpSpAtPvP", "False"));
  2726.             ADD_EXP = Integer.parseInt(pvpSettings.getProperty("AddExpAtPvp", "0"));
  2727.             ADD_SP = Integer.parseInt(pvpSettings.getProperty("AddSpAtPvp", "0"));
  2728.             ALLOW_SOE_IN_PVP = Boolean.parseBoolean(pvpSettings.getProperty("AllowSoEInPvP", "true"));
  2729.             ALLOW_POTS_IN_PVP = Boolean.parseBoolean(pvpSettings.getProperty("AllowPotsInPvP", "True"));
  2730.             /** Enable Pk Info mod. Displays number of times player has killed other */
  2731.             ENABLE_PK_INFO = Boolean.valueOf(pvpSettings.getProperty("EnablePkInfo", "false"));
  2732.             // Get the AnnounceAllKill, AnnouncePvpKill and AnnouncePkKill values
  2733.             ANNOUNCE_ALL_KILL = Boolean.parseBoolean(pvpSettings.getProperty("AnnounceAllKill", "False"));
  2734.             ANNOUNCE_PVP_KILL = Boolean.parseBoolean(pvpSettings.getProperty("AnnouncePvPKill", "False"));
  2735.             ANNOUNCE_PK_KILL = Boolean.parseBoolean(pvpSettings.getProperty("AnnouncePkKill", "False"));
  2736.            
  2737.             DUEL_SPAWN_X = Integer.parseInt(pvpSettings.getProperty("DuelSpawnX", "-102495"));
  2738.             DUEL_SPAWN_Y = Integer.parseInt(pvpSettings.getProperty("DuelSpawnY", "-209023"));
  2739.             DUEL_SPAWN_Z = Integer.parseInt(pvpSettings.getProperty("DuelSpawnZ", "-3326"));
  2740.             PVP_PK_TITLE = Boolean.parseBoolean(pvpSettings.getProperty("PvpPkTitle", "False"));
  2741.             PVP_TITLE_PREFIX = pvpSettings.getProperty("PvPTitlePrefix", " ");
  2742.             PK_TITLE_PREFIX = pvpSettings.getProperty("PkTitlePrefix", " | ");
  2743.            
  2744.             WAR_LEGEND_AURA = Boolean.parseBoolean(pvpSettings.getProperty("WarLegendAura", "False"));
  2745.             KILLS_TO_GET_WAR_LEGEND_AURA = Integer.parseInt(pvpSettings.getProperty("KillsToGetWarLegendAura", "30"));
  2746.            
  2747.             ANTI_FARM_ENABLED = Boolean.parseBoolean(pvpSettings.getProperty("AntiFarmEnabled", "False"));
  2748.             ANTI_FARM_CLAN_ALLY_ENABLED = Boolean.parseBoolean(pvpSettings.getProperty("AntiFarmClanAlly", "False"));
  2749.             ANTI_FARM_LVL_DIFF_ENABLED = Boolean.parseBoolean(pvpSettings.getProperty("AntiFarmLvlDiff", "False"));
  2750.             ANTI_FARM_MAX_LVL_DIFF = Integer.parseInt(pvpSettings.getProperty("AntiFarmMaxLvlDiff", "40"));
  2751.             ANTI_FARM_PDEF_DIFF_ENABLED = Boolean.parseBoolean(pvpSettings.getProperty("AntiFarmPdefDiff", "False"));
  2752.             ANTI_FARM_MAX_PDEF_DIFF = Integer.parseInt(pvpSettings.getProperty("AntiFarmMaxPdefDiff", "300"));
  2753.             ANTI_FARM_PATK_DIFF_ENABLED = Boolean.parseBoolean(pvpSettings.getProperty("AntiFarmPatkDiff", "False"));
  2754.             ANTI_FARM_MAX_PATK_DIFF = Integer.parseInt(pvpSettings.getProperty("AntiFarmMaxPatkDiff", "300"));
  2755.             ANTI_FARM_PARTY_ENABLED = Boolean.parseBoolean(pvpSettings.getProperty("AntiFarmParty", "False"));
  2756.             ANTI_FARM_IP_ENABLED = Boolean.parseBoolean(pvpSettings.getProperty("AntiFarmIP", "False"));
  2757.             ANTI_FARM_SUMMON = Boolean.parseBoolean(pvpSettings.getProperty("AntiFarmSummon", "False"));
  2758.         }
  2759.         catch (final Exception e)
  2760.         {
  2761.             e.printStackTrace();
  2762.             throw new Error("Failed to Load " + PVP + " File.");
  2763.         }
  2764.     }
  2765.    
  2766.     // ============================================================
  2767.    
  2768.     public static int ALT_OLY_NUMBER_HEROS_EACH_CLASS;
  2769.     public static boolean ALT_OLY_LOG_FIGHTS;
  2770.     public static boolean ALT_OLY_SHOW_MONTHLY_WINNERS;
  2771.     public static boolean ALT_OLY_ANNOUNCE_GAMES;
  2772.     public static List<Integer> LIST_OLY_RESTRICTED_SKILLS = new FastList<>();
  2773.     public static boolean ALT_OLY_AUGMENT_ALLOW;
  2774.     public static int ALT_OLY_TELEPORT_COUNTDOWN;
  2775.    
  2776.     public static int ALT_OLY_START_TIME;
  2777.     public static int ALT_OLY_MIN;
  2778.     public static long ALT_OLY_CPERIOD;
  2779.     public static long ALT_OLY_BATTLE;
  2780.    
  2781.     public static long ALT_OLY_WPERIOD;
  2782.     public static long ALT_OLY_VPERIOD;
  2783.     public static int ALT_OLY_CLASSED;
  2784.     public static int ALT_OLY_NONCLASSED;
  2785.     public static int ALT_OLY_BATTLE_REWARD_ITEM;
  2786.     public static int ALT_OLY_CLASSED_RITEM_C;
  2787.     public static int ALT_OLY_NONCLASSED_RITEM_C;
  2788.    
  2789.     public static int ALT_OLY_GP_PER_POINT;
  2790.     public static int ALT_OLY_MIN_POINT_FOR_EXCH;
  2791.     public static int ALT_OLY_HERO_POINTS;
  2792.     public static String ALT_OLY_RESTRICTED_ITEMS;
  2793.    
  2794.     public static List<Integer> LIST_OLY_RESTRICTED_ITEMS = new FastList<>();
  2795.     public static boolean ALLOW_EVENTS_DURING_OLY;
  2796.     public static boolean ALT_OLY_RECHARGE_SKILLS;
  2797.    
  2798.     public static int ALT_OLY_COMP_RITEM;
  2799.     public static boolean REMOVE_CUBIC_OLYMPIAD;
  2800.    
  2801.     public static boolean ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS;
  2802.     public static OlympiadPeriod ALT_OLY_PERIOD;
  2803.     public static int ALT_OLY_PERIOD_MULTIPLIER;
  2804.    
  2805.     // ============================================================
  2806.    
  2807.     public static void loadOlympConfig()
  2808.     {
  2809.         final String OLYMPC = FService.OLYMP_CONFIG_FILE;
  2810.        
  2811.         try
  2812.         {
  2813.             final Properties OLYMPSetting = new Properties();
  2814.             final InputStream is = new FileInputStream(new File(OLYMPC));
  2815.             OLYMPSetting.load(is);
  2816.             is.close();
  2817.             ALT_OLY_START_TIME = Integer.parseInt(OLYMPSetting.getProperty("AltOlyStartTime", "18"));
  2818.             ALT_OLY_MIN = Integer.parseInt(OLYMPSetting.getProperty("AltOlyMin", "00"));
  2819.             ALT_OLY_CPERIOD = Long.parseLong(OLYMPSetting.getProperty("AltOlyCPeriod", "21600000"));
  2820.             ALT_OLY_BATTLE = Long.parseLong(OLYMPSetting.getProperty("AltOlyBattle", "360000"));
  2821.             ALT_OLY_WPERIOD = Long.parseLong(OLYMPSetting.getProperty("AltOlyWPeriod", "604800000"));
  2822.             ALT_OLY_VPERIOD = Long.parseLong(OLYMPSetting.getProperty("AltOlyVPeriod", "86400000"));
  2823.             ALT_OLY_CLASSED = Integer.parseInt(OLYMPSetting.getProperty("AltOlyClassedParticipants", "5"));
  2824.             ALT_OLY_NONCLASSED = Integer.parseInt(OLYMPSetting.getProperty("AltOlyNonClassedParticipants", "9"));
  2825.             ALT_OLY_BATTLE_REWARD_ITEM = Integer.parseInt(OLYMPSetting.getProperty("AltOlyBattleRewItem", "6651"));
  2826.             ALT_OLY_CLASSED_RITEM_C = Integer.parseInt(OLYMPSetting.getProperty("AltOlyClassedRewItemCount", "50"));
  2827.             ALT_OLY_NONCLASSED_RITEM_C = Integer.parseInt(OLYMPSetting.getProperty("AltOlyNonClassedRewItemCount", "30"));
  2828.             ALT_OLY_COMP_RITEM = Integer.parseInt(OLYMPSetting.getProperty("AltOlyCompRewItem", "6651"));
  2829.             ALT_OLY_GP_PER_POINT = Integer.parseInt(OLYMPSetting.getProperty("AltOlyGPPerPoint", "1000"));
  2830.             ALT_OLY_MIN_POINT_FOR_EXCH = Integer.parseInt(OLYMPSetting.getProperty("AltOlyMinPointForExchange", "50"));
  2831.             ALT_OLY_HERO_POINTS = Integer.parseInt(OLYMPSetting.getProperty("AltOlyHeroPoints", "100"));
  2832.             ALT_OLY_RESTRICTED_ITEMS = OLYMPSetting.getProperty("AltOlyRestrictedItems", "0");
  2833.             LIST_OLY_RESTRICTED_ITEMS = new FastList<>();
  2834.             for (final String id : ALT_OLY_RESTRICTED_ITEMS.split(","))
  2835.             {
  2836.                 LIST_OLY_RESTRICTED_ITEMS.add(Integer.parseInt(id));
  2837.             }
  2838.             ALLOW_EVENTS_DURING_OLY = Boolean.parseBoolean(OLYMPSetting.getProperty("AllowEventsDuringOly", "False"));
  2839.            
  2840.             ALT_OLY_RECHARGE_SKILLS = Boolean.parseBoolean(OLYMPSetting.getProperty("AltOlyRechargeSkills", "False"));
  2841.            
  2842.             /* Remove cubic at the enter of olympiad */
  2843.             REMOVE_CUBIC_OLYMPIAD = Boolean.parseBoolean(OLYMPSetting.getProperty("RemoveCubicOlympiad", "False"));
  2844.            
  2845.             ALT_OLY_NUMBER_HEROS_EACH_CLASS = Integer.parseInt(OLYMPSetting.getProperty("AltOlyNumberHerosEachClass", "1"));
  2846.             ALT_OLY_LOG_FIGHTS = Boolean.parseBoolean(OLYMPSetting.getProperty("AlyOlyLogFights", "false"));
  2847.             ALT_OLY_SHOW_MONTHLY_WINNERS = Boolean.parseBoolean(OLYMPSetting.getProperty("AltOlyShowMonthlyWinners", "true"));
  2848.             ALT_OLY_ANNOUNCE_GAMES = Boolean.parseBoolean(OLYMPSetting.getProperty("AltOlyAnnounceGames", "true"));
  2849.             LIST_OLY_RESTRICTED_SKILLS = new FastList<>();
  2850.             for (final String id : OLYMPSetting.getProperty("AltOlyRestrictedSkills", "0").split(","))
  2851.             {
  2852.                 LIST_OLY_RESTRICTED_SKILLS.add(Integer.parseInt(id));
  2853.             }
  2854.             ALT_OLY_AUGMENT_ALLOW = Boolean.parseBoolean(OLYMPSetting.getProperty("AltOlyAugmentAllow", "true"));
  2855.             ALT_OLY_TELEPORT_COUNTDOWN = Integer.parseInt(OLYMPSetting.getProperty("AltOlyTeleportCountDown", "120"));
  2856.            
  2857.             ALT_OLY_USE_CUSTOM_PERIOD_SETTINGS = Boolean.parseBoolean(OLYMPSetting.getProperty("AltOlyUseCustomPeriodSettings", "false"));
  2858.             ALT_OLY_PERIOD = OlympiadPeriod.valueOf(OLYMPSetting.getProperty("AltOlyPeriod", "MONTH"));
  2859.             ALT_OLY_PERIOD_MULTIPLIER = Integer.parseInt(OLYMPSetting.getProperty("AltOlyPeriodMultiplier", "1"));
  2860.            
  2861.         }
  2862.         catch (final Exception e)
  2863.         {
  2864.             e.printStackTrace();
  2865.             throw new Error("Failed to Load " + OLYMPC + " File.");
  2866.         }
  2867.     }
  2868.    
  2869.     // ============================================================
  2870.     // Enchant map
  2871.     public static FastMap<Integer, Integer> NORMAL_WEAPON_ENCHANT_LEVEL = new FastMap<>();
  2872.     public static FastMap<Integer, Integer> BLESS_WEAPON_ENCHANT_LEVEL = new FastMap<>();
  2873.     public static FastMap<Integer, Integer> CRYSTAL_WEAPON_ENCHANT_LEVEL = new FastMap<>();
  2874.    
  2875.     public static FastMap<Integer, Integer> NORMAL_ARMOR_ENCHANT_LEVEL = new FastMap<>();
  2876.     public static FastMap<Integer, Integer> BLESS_ARMOR_ENCHANT_LEVEL = new FastMap<>();
  2877.     public static FastMap<Integer, Integer> CRYSTAL_ARMOR_ENCHANT_LEVEL = new FastMap<>();
  2878.    
  2879.     public static FastMap<Integer, Integer> NORMAL_JEWELRY_ENCHANT_LEVEL = new FastMap<>();
  2880.     public static FastMap<Integer, Integer> BLESS_JEWELRY_ENCHANT_LEVEL = new FastMap<>();
  2881.     public static FastMap<Integer, Integer> CRYSTAL_JEWELRY_ENCHANT_LEVEL = new FastMap<>();
  2882.    
  2883.     public static int ENCHANT_SAFE_MAX;
  2884.     public static int ENCHANT_SAFE_MAX_FULL;
  2885.     public static int ENCHANT_WEAPON_MAX;
  2886.     public static int ENCHANT_ARMOR_MAX;
  2887.     public static int ENCHANT_JEWELRY_MAX;
  2888.    
  2889.     public static int CRYSTAL_ENCHANT_MAX;
  2890.     public static int CRYSTAL_ENCHANT_MIN;
  2891.    
  2892.     // Dwarf bonus
  2893.     public static boolean ENABLE_DWARF_ENCHANT_BONUS;
  2894.     public static int DWARF_ENCHANT_MIN_LEVEL;
  2895.     public static int DWARF_ENCHANT_BONUS;
  2896.     // Augment chance
  2897.     public static int AUGMENTATION_NG_SKILL_CHANCE;
  2898.     public static int AUGMENTATION_MID_SKILL_CHANCE;
  2899.     public static int AUGMENTATION_HIGH_SKILL_CHANCE;
  2900.     public static int AUGMENTATION_TOP_SKILL_CHANCE;
  2901.     public static int AUGMENTATION_BASESTAT_CHANCE;
  2902.     // Augment glow
  2903.     public static int AUGMENTATION_NG_GLOW_CHANCE;
  2904.     public static int AUGMENTATION_MID_GLOW_CHANCE;
  2905.     public static int AUGMENTATION_HIGH_GLOW_CHANCE;
  2906.     public static int AUGMENTATION_TOP_GLOW_CHANCE;
  2907.    
  2908.     public static boolean DELETE_AUGM_PASSIVE_ON_CHANGE;
  2909.     public static boolean DELETE_AUGM_ACTIVE_ON_CHANGE;
  2910.    
  2911.     // Enchant hero weapon
  2912.     public static boolean ENCHANT_HERO_WEAPON;
  2913.     // Soul crystal
  2914.     public static int SOUL_CRYSTAL_BREAK_CHANCE;
  2915.     public static int SOUL_CRYSTAL_LEVEL_CHANCE;
  2916.     public static int SOUL_CRYSTAL_MAX_LEVEL;
  2917.     // Count enchant
  2918.     public static int CUSTOM_ENCHANT_VALUE;
  2919.     /** Olympiad max enchant limitation */
  2920.     public static int ALT_OLY_ENCHANT_LIMIT;
  2921.     public static int BREAK_ENCHANT;
  2922.    
  2923.     public static int GM_OVER_ENCHANT;
  2924.     public static int MAX_ITEM_ENCHANT_KICK;
  2925.    
  2926.     // ============================================================
  2927.     public static void loadEnchantConfig()
  2928.     {
  2929.         final String ENCHANTC = FService.ENCHANT_CONFIG_FILE;
  2930.        
  2931.         try
  2932.         {
  2933.             final Properties ENCHANTSetting = new Properties();
  2934.             final InputStream is = new FileInputStream(new File(ENCHANTC));
  2935.             ENCHANTSetting.load(is);
  2936.             is.close();
  2937.            
  2938.             String[] propertySplit = ENCHANTSetting.getProperty("NormalWeaponEnchantLevel", "").split(";");
  2939.             for (final String readData : propertySplit)
  2940.             {
  2941.                 final String[] writeData = readData.split(",");
  2942.                 if (writeData.length != 2)
  2943.                 {
  2944.                     LOGGER.info("invalid config property");
  2945.                 }
  2946.                 else
  2947.                 {
  2948.                     try
  2949.                     {
  2950.                         NORMAL_WEAPON_ENCHANT_LEVEL.put(Integer.parseInt(writeData[0]), Integer.parseInt(writeData[1]));
  2951.                     }
  2952.                     catch (final NumberFormatException nfe)
  2953.                     {
  2954.                         if (Config.ENABLE_ALL_EXCEPTIONS)
  2955.                             nfe.printStackTrace();
  2956.                         if (!readData.equals(""))
  2957.                         {
  2958.                             LOGGER.info("invalid config property");
  2959.                         }
  2960.                     }
  2961.                 }
  2962.             }
  2963.            
  2964.             propertySplit = ENCHANTSetting.getProperty("BlessWeaponEnchantLevel", "").split(";");
  2965.             for (final String readData : propertySplit)
  2966.             {
  2967.                 final String[] writeData = readData.split(",");
  2968.                 if (writeData.length != 2)
  2969.                 {
  2970.                     LOGGER.info("invalid config property");
  2971.                 }
  2972.                 else
  2973.                 {
  2974.                     try
  2975.                     {
  2976.                         BLESS_WEAPON_ENCHANT_LEVEL.put(Integer.parseInt(writeData[0]), Integer.parseInt(writeData[1]));
  2977.                     }
  2978.                     catch (final NumberFormatException nfe)
  2979.                     {
  2980.                         if (Config.ENABLE_ALL_EXCEPTIONS)
  2981.                             nfe.printStackTrace();
  2982.                         if (!readData.equals(""))
  2983.                         {
  2984.                             LOGGER.info("invalid config property");
  2985.                         }
  2986.                     }
  2987.                 }
  2988.             }
  2989.            
  2990.             propertySplit = ENCHANTSetting.getProperty("CrystalWeaponEnchantLevel", "").split(";");
  2991.             for (final String readData : propertySplit)
  2992.             {
  2993.                 final String[] writeData = readData.split(",");
  2994.                 if (writeData.length != 2)
  2995.                 {
  2996.                     LOGGER.info("invalid config property");
  2997.                 }
  2998.                 else
  2999.                 {
  3000.                     try
  3001.                     {
  3002.                         CRYSTAL_WEAPON_ENCHANT_LEVEL.put(Integer.parseInt(writeData[0]), Integer.parseInt(writeData[1]));
  3003.                     }
  3004.                     catch (final NumberFormatException nfe)
  3005.                     {
  3006.                         if (Config.ENABLE_ALL_EXCEPTIONS)
  3007.                             nfe.printStackTrace();
  3008.                         if (!readData.equals(""))
  3009.                         {
  3010.                             LOGGER.info("invalid config property");
  3011.                         }
  3012.                     }
  3013.                 }
  3014.             }
  3015.            
  3016.             propertySplit = ENCHANTSetting.getProperty("NormalArmorEnchantLevel", "").split(";");
  3017.             for (final String readData : propertySplit)
  3018.             {
  3019.                 final String[] writeData = readData.split(",");
  3020.                 if (writeData.length != 2)
  3021.                 {
  3022.                     LOGGER.info("invalid config property");
  3023.                 }
  3024.                 else
  3025.                 {
  3026.                     try
  3027.                     {
  3028.                         NORMAL_ARMOR_ENCHANT_LEVEL.put(Integer.parseInt(writeData[0]), Integer.parseInt(writeData[1]));
  3029.                     }
  3030.                     catch (final NumberFormatException nfe)
  3031.                     {
  3032.                         if (Config.ENABLE_ALL_EXCEPTIONS)
  3033.                             nfe.printStackTrace();
  3034.                         if (!readData.equals(""))
  3035.                         {
  3036.                             LOGGER.info("invalid config property");
  3037.                         }
  3038.                     }
  3039.                 }
  3040.             }
  3041.            
  3042.             propertySplit = ENCHANTSetting.getProperty("BlessArmorEnchantLevel", "").split(";");
  3043.             for (final String readData : propertySplit)
  3044.             {
  3045.                 final String[] writeData = readData.split(",");
  3046.                 if (writeData.length != 2)
  3047.                 {
  3048.                     LOGGER.info("invalid config property");
  3049.                 }
  3050.                 else
  3051.                 {
  3052.                     try
  3053.                     {
  3054.                         BLESS_ARMOR_ENCHANT_LEVEL.put(Integer.parseInt(writeData[0]), Integer.parseInt(writeData[1]));
  3055.                     }
  3056.                     catch (final NumberFormatException nfe)
  3057.                     {
  3058.                         if (Config.ENABLE_ALL_EXCEPTIONS)
  3059.                             nfe.printStackTrace();
  3060.                         if (!readData.equals(""))
  3061.                         {
  3062.                             LOGGER.info("invalid config property");
  3063.                         }
  3064.                     }
  3065.                 }
  3066.             }
  3067.            
  3068.             propertySplit = ENCHANTSetting.getProperty("CrystalArmorEnchantLevel", "").split(";");
  3069.             for (final String readData : propertySplit)
  3070.             {
  3071.                 final String[] writeData = readData.split(",");
  3072.                 if (writeData.length != 2)
  3073.                 {
  3074.                     LOGGER.info("invalid config property");
  3075.                 }
  3076.                 else
  3077.                 {
  3078.                     try
  3079.                     {
  3080.                         CRYSTAL_ARMOR_ENCHANT_LEVEL.put(Integer.parseInt(writeData[0]), Integer.parseInt(writeData[1]));
  3081.                     }
  3082.                     catch (final NumberFormatException nfe)
  3083.                     {
  3084.                         if (Config.ENABLE_ALL_EXCEPTIONS)
  3085.                             nfe.printStackTrace();
  3086.                         if (!readData.equals(""))
  3087.                         {
  3088.                             LOGGER.info("invalid config property");
  3089.                         }
  3090.                     }
  3091.                 }
  3092.             }
  3093.            
  3094.             propertySplit = ENCHANTSetting.getProperty("NormalJewelryEnchantLevel", "").split(";");
  3095.             for (final String readData : propertySplit)
  3096.             {
  3097.                 final String[] writeData = readData.split(",");
  3098.                 if (writeData.length != 2)
  3099.                 {
  3100.                     LOGGER.info("invalid config property");
  3101.                 }
  3102.                 else
  3103.                 {
  3104.                     try
  3105.                     {
  3106.                         NORMAL_JEWELRY_ENCHANT_LEVEL.put(Integer.parseInt(writeData[0]), Integer.parseInt(writeData[1]));
  3107.                     }
  3108.                     catch (final NumberFormatException nfe)
  3109.                     {
  3110.                         if (Config.ENABLE_ALL_EXCEPTIONS)
  3111.                             nfe.printStackTrace();
  3112.                        
  3113.                         if (!readData.equals(""))
  3114.                         {
  3115.                             LOGGER.info("invalid config property");
  3116.                         }
  3117.                     }
  3118.                 }
  3119.             }
  3120.            
  3121.             propertySplit = ENCHANTSetting.getProperty("BlessJewelryEnchantLevel", "").split(";");
  3122.             for (final String readData : propertySplit)
  3123.             {
  3124.                 final String[] writeData = readData.split(",");
  3125.                 if (writeData.length != 2)
  3126.                 {
  3127.                     LOGGER.info("invalid config property");
  3128.                 }
  3129.                 else
  3130.                 {
  3131.                     try
  3132.                     {
  3133.                         BLESS_JEWELRY_ENCHANT_LEVEL.put(Integer.parseInt(writeData[0]), Integer.parseInt(writeData[1]));
  3134.                     }
  3135.                     catch (final NumberFormatException nfe)
  3136.                     {
  3137.                         if (Config.ENABLE_ALL_EXCEPTIONS)
  3138.                             nfe.printStackTrace();
  3139.                        
  3140.                         if (!readData.equals(""))
  3141.                         {
  3142.                             LOGGER.info("invalid config property");
  3143.                         }
  3144.                     }
  3145.                 }
  3146.             }
  3147.            
  3148.             propertySplit = ENCHANTSetting.getProperty("CrystalJewelryEnchantLevel", "").split(";");
  3149.             for (final String readData : propertySplit)
  3150.             {
  3151.                 final String[] writeData = readData.split(",");
  3152.                 if (writeData.length != 2)
  3153.                 {
  3154.                     LOGGER.info("invalid config property");
  3155.                 }
  3156.                 else
  3157.                 {
  3158.                     try
  3159.                     {
  3160.                         CRYSTAL_JEWELRY_ENCHANT_LEVEL.put(Integer.parseInt(writeData[0]), Integer.parseInt(writeData[1]));
  3161.                     }
  3162.                     catch (final NumberFormatException nfe)
  3163.                     {
  3164.                         if (Config.ENABLE_ALL_EXCEPTIONS)
  3165.                             nfe.printStackTrace();
  3166.                        
  3167.                         if (!readData.equals(""))
  3168.                         {
  3169.                             LOGGER.info("invalid config property");
  3170.                         }
  3171.                     }
  3172.                 }
  3173.             }
  3174.            
  3175.             /** limit of safe enchant normal **/
  3176.             ENCHANT_SAFE_MAX = Integer.parseInt(ENCHANTSetting.getProperty("EnchantSafeMax", "3"));
  3177.            
  3178.             /** limit of safe enchant full **/
  3179.             ENCHANT_SAFE_MAX_FULL = Integer.parseInt(ENCHANTSetting.getProperty("EnchantSafeMaxFull", "4"));
  3180.            
  3181.             /** limit of max enchant **/
  3182.             ENCHANT_WEAPON_MAX = Integer.parseInt(ENCHANTSetting.getProperty("EnchantWeaponMax", "25"));
  3183.             ENCHANT_ARMOR_MAX = Integer.parseInt(ENCHANTSetting.getProperty("EnchantArmorMax", "25"));
  3184.             ENCHANT_JEWELRY_MAX = Integer.parseInt(ENCHANTSetting.getProperty("EnchantJewelryMax", "25"));
  3185.            
  3186.             /** CRYSTAL SCROLL enchant limits **/
  3187.             CRYSTAL_ENCHANT_MIN = Integer.parseInt(ENCHANTSetting.getProperty("CrystalEnchantMin", "20"));
  3188.             CRYSTAL_ENCHANT_MAX = Integer.parseInt(ENCHANTSetting.getProperty("CrystalEnchantMax", "0"));
  3189.            
  3190.             /** bonus for dwarf **/
  3191.             ENABLE_DWARF_ENCHANT_BONUS = Boolean.parseBoolean(ENCHANTSetting.getProperty("EnableDwarfEnchantBonus", "False"));
  3192.             DWARF_ENCHANT_MIN_LEVEL = Integer.parseInt(ENCHANTSetting.getProperty("DwarfEnchantMinLevel", "80"));
  3193.             DWARF_ENCHANT_BONUS = Integer.parseInt(ENCHANTSetting.getProperty("DwarfEnchantBonus", "15"));
  3194.            
  3195.             /** augmentation chance **/
  3196.             AUGMENTATION_NG_SKILL_CHANCE = Integer.parseInt(ENCHANTSetting.getProperty("AugmentationNGSkillChance", "15"));
  3197.             AUGMENTATION_MID_SKILL_CHANCE = Integer.parseInt(ENCHANTSetting.getProperty("AugmentationMidSkillChance", "30"));
  3198.             AUGMENTATION_HIGH_SKILL_CHANCE = Integer.parseInt(ENCHANTSetting.getProperty("AugmentationHighSkillChance", "45"));
  3199.             AUGMENTATION_TOP_SKILL_CHANCE = Integer.parseInt(ENCHANTSetting.getProperty("AugmentationTopSkillChance", "60"));
  3200.             AUGMENTATION_BASESTAT_CHANCE = Integer.parseInt(ENCHANTSetting.getProperty("AugmentationBaseStatChance", "1"));
  3201.            
  3202.             /** augmentation glow **/
  3203.             AUGMENTATION_NG_GLOW_CHANCE = Integer.parseInt(ENCHANTSetting.getProperty("AugmentationNGGlowChance", "0"));
  3204.             AUGMENTATION_MID_GLOW_CHANCE = Integer.parseInt(ENCHANTSetting.getProperty("AugmentationMidGlowChance", "40"));
  3205.             AUGMENTATION_HIGH_GLOW_CHANCE = Integer.parseInt(ENCHANTSetting.getProperty("AugmentationHighGlowChance", "70"));
  3206.             AUGMENTATION_TOP_GLOW_CHANCE = Integer.parseInt(ENCHANTSetting.getProperty("AugmentationTopGlowChance", "100"));
  3207.            
  3208.             /** augmentation configs **/
  3209.             DELETE_AUGM_PASSIVE_ON_CHANGE = Boolean.parseBoolean(ENCHANTSetting.getProperty("DeleteAgmentPassiveEffectOnChangeWep", "true"));
  3210.             DELETE_AUGM_ACTIVE_ON_CHANGE = Boolean.parseBoolean(ENCHANTSetting.getProperty("DeleteAgmentActiveEffectOnChangeWep", "true"));
  3211.            
  3212.             /** enchant hero weapon **/
  3213.             ENCHANT_HERO_WEAPON = Boolean.parseBoolean(ENCHANTSetting.getProperty("EnableEnchantHeroWeapons", "False"));
  3214.            
  3215.             /** soul crystal **/
  3216.             SOUL_CRYSTAL_BREAK_CHANCE = Integer.parseInt(ENCHANTSetting.getProperty("SoulCrystalBreakChance", "10"));
  3217.             SOUL_CRYSTAL_LEVEL_CHANCE = Integer.parseInt(ENCHANTSetting.getProperty("SoulCrystalLevelChance", "32"));
  3218.             SOUL_CRYSTAL_MAX_LEVEL = Integer.parseInt(ENCHANTSetting.getProperty("SoulCrystalMaxLevel", "13"));
  3219.            
  3220.             /** count enchant **/
  3221.             CUSTOM_ENCHANT_VALUE = Integer.parseInt(ENCHANTSetting.getProperty("CustomEnchantValue", "1"));
  3222.             ALT_OLY_ENCHANT_LIMIT = Integer.parseInt(ENCHANTSetting.getProperty("AltOlyMaxEnchant", "-1"));
  3223.             BREAK_ENCHANT = Integer.valueOf(ENCHANTSetting.getProperty("BreakEnchant", "0"));
  3224.            
  3225.             MAX_ITEM_ENCHANT_KICK = Integer.parseInt(ENCHANTSetting.getProperty("EnchantKick", "0"));
  3226.             GM_OVER_ENCHANT = Integer.parseInt(ENCHANTSetting.getProperty("GMOverEnchant", "0"));
  3227.            
  3228.         }
  3229.         catch (final Exception e)
  3230.         {
  3231.             e.printStackTrace();
  3232.             throw new Error("Failed to Load " + ENCHANTC + " File.");
  3233.         }
  3234.     }
  3235.    
  3236.     // --------------------------------------------------
  3237.     // FloodProtector Settings
  3238.     // --------------------------------------------------
  3239.     public static FloodProtectorConfig FLOOD_PROTECTOR_USE_ITEM;
  3240.     public static FloodProtectorConfig FLOOD_PROTECTOR_ROLL_DICE;
  3241.     public static FloodProtectorConfig FLOOD_PROTECTOR_FIREWORK;
  3242.     public static FloodProtectorConfig FLOOD_PROTECTOR_ITEM_PET_SUMMON;
  3243.     public static FloodProtectorConfig FLOOD_PROTECTOR_HERO_VOICE;
  3244.     public static FloodProtectorConfig FLOOD_PROTECTOR_GLOBAL_CHAT;
  3245.     public static FloodProtectorConfig FLOOD_PROTECTOR_SUBCLASS;
  3246.     public static FloodProtectorConfig FLOOD_PROTECTOR_DROP_ITEM;
  3247.     public static FloodProtectorConfig FLOOD_PROTECTOR_SERVER_BYPASS;
  3248.     public static FloodProtectorConfig FLOOD_PROTECTOR_MULTISELL;
  3249.     public static FloodProtectorConfig FLOOD_PROTECTOR_TRANSACTION;
  3250.     public static FloodProtectorConfig FLOOD_PROTECTOR_MANUFACTURE;
  3251.     public static FloodProtectorConfig FLOOD_PROTECTOR_MANOR;
  3252.     public static FloodProtectorConfig FLOOD_PROTECTOR_CHARACTER_SELECT;
  3253.    
  3254.     public static FloodProtectorConfig FLOOD_PROTECTOR_UNKNOWN_PACKETS;
  3255.     public static FloodProtectorConfig FLOOD_PROTECTOR_PARTY_INVITATION;
  3256.     public static FloodProtectorConfig FLOOD_PROTECTOR_SAY_ACTION;
  3257.     public static FloodProtectorConfig FLOOD_PROTECTOR_MOVE_ACTION;
  3258.     public static FloodProtectorConfig FLOOD_PROTECTOR_GENERIC_ACTION;
  3259.     public static FloodProtectorConfig FLOOD_PROTECTOR_MACRO;
  3260.     public static FloodProtectorConfig FLOOD_PROTECTOR_POTION;
  3261.    
  3262.     // ============================================================
  3263.     public static void loadFloodConfig()
  3264.     {
  3265.         final String PROTECT_FLOOD_CONFIG = FService.PROTECT_FLOOD_CONFIG_FILE;
  3266.        
  3267.         try
  3268.         {
  3269.             /*
  3270.              * Properties FloodSetting = new Properties(); InputStream is = new FileInputStream(new File(PROTECT_FLOOD_CONFIG)); FloodSetting.load(is); is.close();
  3271.              */
  3272.            
  3273.             FLOOD_PROTECTOR_USE_ITEM = new FloodProtectorConfig("UseItemFloodProtector");
  3274.             FLOOD_PROTECTOR_ROLL_DICE = new FloodProtectorConfig("RollDiceFloodProtector");
  3275.             FLOOD_PROTECTOR_FIREWORK = new FloodProtectorConfig("FireworkFloodProtector");
  3276.             FLOOD_PROTECTOR_ITEM_PET_SUMMON = new FloodProtectorConfig("ItemPetSummonFloodProtector");
  3277.             FLOOD_PROTECTOR_HERO_VOICE = new FloodProtectorConfig("HeroVoiceFloodProtector");
  3278.             FLOOD_PROTECTOR_GLOBAL_CHAT = new FloodProtectorConfig("GlobalChatFloodProtector");
  3279.             FLOOD_PROTECTOR_SUBCLASS = new FloodProtectorConfig("SubclassFloodProtector");
  3280.             FLOOD_PROTECTOR_DROP_ITEM = new FloodProtectorConfig("DropItemFloodProtector");
  3281.             FLOOD_PROTECTOR_SERVER_BYPASS = new FloodProtectorConfig("ServerBypassFloodProtector");
  3282.             FLOOD_PROTECTOR_MULTISELL = new FloodProtectorConfig("MultiSellFloodProtector");
  3283.             FLOOD_PROTECTOR_TRANSACTION = new FloodProtectorConfig("TransactionFloodProtector");
  3284.             FLOOD_PROTECTOR_MANUFACTURE = new FloodProtectorConfig("ManufactureFloodProtector");
  3285.             FLOOD_PROTECTOR_MANOR = new FloodProtectorConfig("ManorFloodProtector");
  3286.             FLOOD_PROTECTOR_CHARACTER_SELECT = new FloodProtectorConfig("CharacterSelectFloodProtector");
  3287.            
  3288.             FLOOD_PROTECTOR_UNKNOWN_PACKETS = new FloodProtectorConfig("UnknownPacketsFloodProtector");
  3289.             FLOOD_PROTECTOR_PARTY_INVITATION = new FloodProtectorConfig("PartyInvitationFloodProtector");
  3290.             FLOOD_PROTECTOR_SAY_ACTION = new FloodProtectorConfig("SayActionFloodProtector");
  3291.             FLOOD_PROTECTOR_MOVE_ACTION = new FloodProtectorConfig("MoveActionFloodProtector");
  3292.             FLOOD_PROTECTOR_GENERIC_ACTION = new FloodProtectorConfig("GenericActionFloodProtector", true);
  3293.             FLOOD_PROTECTOR_MACRO = new FloodProtectorConfig("MacroFloodProtector", true);
  3294.             FLOOD_PROTECTOR_POTION = new FloodProtectorConfig("PotionFloodProtector", true);
  3295.            
  3296.             // Load FloodProtector L2Properties file
  3297.             try
  3298.             {
  3299.                 final L2Properties security = new L2Properties();
  3300.                 final FileInputStream is = new FileInputStream(new File(PROTECT_FLOOD_CONFIG));
  3301.                 security.load(is);
  3302.                
  3303.                 loadFloodProtectorConfigs(security);
  3304.                 is.close();
  3305.                
  3306.             }
  3307.             catch (final Exception e)
  3308.             {
  3309.                 e.printStackTrace();
  3310.                 throw new Error("Failed to Load " + PROTECT_FLOOD_CONFIG);
  3311.             }
  3312.            
  3313.         }
  3314.         catch (final Exception e)
  3315.         {
  3316.             e.printStackTrace();
  3317.             throw new Error("Failed to Load " + PROTECT_FLOOD_CONFIG + " File.");
  3318.         }
  3319.     }
  3320.    
  3321.     /**
  3322.      * Loads flood protector configurations.
  3323.      * @param properties
  3324.      */
  3325.     private static void loadFloodProtectorConfigs(final L2Properties properties)
  3326.     {
  3327.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_USE_ITEM, "UseItem", "1");
  3328.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_ROLL_DICE, "RollDice", "42");
  3329.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_FIREWORK, "Firework", "42");
  3330.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_ITEM_PET_SUMMON, "ItemPetSummon", "16");
  3331.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_HERO_VOICE, "HeroVoice", "100");
  3332.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_GLOBAL_CHAT, "GlobalChat", "5");
  3333.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_SUBCLASS, "Subclass", "20");
  3334.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_DROP_ITEM, "DropItem", "10");
  3335.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_SERVER_BYPASS, "ServerBypass", "5");
  3336.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_MULTISELL, "MultiSell", "1");
  3337.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_TRANSACTION, "Transaction", "10");
  3338.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_MANUFACTURE, "Manufacture", "3");
  3339.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_MANOR, "Manor", "30");
  3340.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_CHARACTER_SELECT, "CharacterSelect", "30");
  3341.        
  3342.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_UNKNOWN_PACKETS, "UnknownPackets", "5");
  3343.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_PARTY_INVITATION, "PartyInvitation", "30");
  3344.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_SAY_ACTION, "SayAction", "100");
  3345.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_MOVE_ACTION, "MoveAction", "30");
  3346.        
  3347.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_GENERIC_ACTION, "GenericAction", "5");
  3348.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_MACRO, "Macro", "10");
  3349.         loadFloodProtectorConfig(properties, FLOOD_PROTECTOR_POTION, "Potion", "4");
  3350.     }
  3351.    
  3352.     /**
  3353.      * Loads single flood protector configuration.
  3354.      * @param properties L2Properties file reader
  3355.      * @param config flood protector configuration instance
  3356.      * @param configString flood protector configuration string that determines for which flood protector configuration should be read
  3357.      * @param defaultInterval default flood protector interval
  3358.      */
  3359.     private static void loadFloodProtectorConfig(final L2Properties properties, final FloodProtectorConfig config, final String configString, final String defaultInterval)
  3360.     {
  3361.         config.FLOOD_PROTECTION_INTERVAL = Float.parseFloat(properties.getProperty(StringUtil.concat("FloodProtector", configString, "Interval"), defaultInterval));
  3362.         config.LOG_FLOODING = Boolean.parseBoolean(properties.getProperty(StringUtil.concat("FloodProtector", configString, "LogFlooding"), "False"));
  3363.         config.PUNISHMENT_LIMIT = Integer.parseInt(properties.getProperty(StringUtil.concat("FloodProtector", configString, "PunishmentLimit"), "0"));
  3364.         config.PUNISHMENT_TYPE = properties.getProperty(StringUtil.concat("FloodProtector", configString, "PunishmentType"), "none");
  3365.         config.PUNISHMENT_TIME = Integer.parseInt(properties.getProperty(StringUtil.concat("FloodProtector", configString, "PunishmentTime"), "0"));
  3366.     }
  3367.    
  3368.     // ============================================================
  3369.     public static boolean ENABLE_UNK_PACKET_PROTECTION;
  3370.     public static int MAX_UNKNOWN_PACKETS;
  3371.     public static int UNKNOWN_PACKETS_PUNiSHMENT;
  3372.     public static boolean DEBUG_UNKNOWN_PACKETS;
  3373.    
  3374.     public static boolean DEBUG_PACKETS;
  3375.    
  3376.     // ============================================================
  3377.     public static void loadPacketConfig()
  3378.     {
  3379.         final String PROTECT_PACKET_CONFIG = FService.PROTECT_PACKET_CONFIG_FILE;
  3380.        
  3381.         try
  3382.         {
  3383.             final Properties PacketSetting = new Properties();
  3384.             final InputStream is = new FileInputStream(new File(PROTECT_PACKET_CONFIG));
  3385.             PacketSetting.load(is);
  3386.             is.close();
  3387.            
  3388.             ENABLE_UNK_PACKET_PROTECTION = Boolean.parseBoolean(PacketSetting.getProperty("UnknownPacketProtection", "true"));
  3389.             MAX_UNKNOWN_PACKETS = Integer.parseInt(PacketSetting.getProperty("UnknownPacketsBeforeBan", "5"));
  3390.             UNKNOWN_PACKETS_PUNiSHMENT = Integer.parseInt(PacketSetting.getProperty("UnknownPacketsPunishment", "2"));
  3391.             DEBUG_PACKETS = Boolean.parseBoolean(PacketSetting.getProperty("DebugPackets", "false"));
  3392.             DEBUG_UNKNOWN_PACKETS = Boolean.parseBoolean(PacketSetting.getProperty("UnknownDebugPackets", "false"));
  3393.            
  3394.         }
  3395.         catch (final Exception e)
  3396.         {
  3397.             e.printStackTrace();
  3398.             throw new Error("Failed to Load " + PROTECT_PACKET_CONFIG + " File.");
  3399.         }
  3400.     }
  3401.    
  3402.     // ============================================================
  3403.     public static boolean CHECK_SKILLS_ON_ENTER;
  3404.     public static boolean CHECK_NAME_ON_LOGIN;
  3405.     public static boolean L2WALKER_PROTEC;
  3406.     public static boolean PROTECTED_ENCHANT;
  3407.     public static boolean ONLY_GM_ITEMS_FREE;
  3408.     public static boolean ONLY_GM_TELEPORT_FREE;
  3409.    
  3410.     public static boolean BOT_PROTECTOR;
  3411.     public static int BOT_PROTECTOR_FIRST_CHECK;
  3412.     public static int BOT_PROTECTOR_NEXT_CHECK;
  3413.     public static int BOT_PROTECTOR_WAIT_ANSVER;
  3414.     public static boolean ALLOW_DUALBOX;
  3415.     public static int ALLOWED_BOXES;
  3416.     public static boolean ALLOW_DUALBOX_OLY;
  3417.     public static boolean ALLOW_DUALBOX_EVENT;
  3418.    
  3419.     // ============================================================
  3420.     public static void loadPOtherConfig()
  3421.     {
  3422.         final String PROTECT_OTHER_CONFIG = FService.PROTECT_OTHER_CONFIG_FILE;
  3423.        
  3424.         try
  3425.         {
  3426.             final Properties POtherSetting = new Properties();
  3427.             final InputStream is = new FileInputStream(new File(PROTECT_OTHER_CONFIG));
  3428.             POtherSetting.load(is);
  3429.             is.close();
  3430.            
  3431.             CHECK_NAME_ON_LOGIN = Boolean.parseBoolean(POtherSetting.getProperty("CheckNameOnEnter", "True"));
  3432.             CHECK_SKILLS_ON_ENTER = Boolean.parseBoolean(POtherSetting.getProperty("CheckSkillsOnEnter", "True"));
  3433.            
  3434.             /** l2walker protection **/
  3435.             L2WALKER_PROTEC = Boolean.parseBoolean(POtherSetting.getProperty("L2WalkerProtection", "False"));
  3436.            
  3437.             /** enchant protected **/
  3438.             PROTECTED_ENCHANT = Boolean.parseBoolean(POtherSetting.getProperty("ProtectorEnchant", "false"));
  3439.            
  3440.             ONLY_GM_TELEPORT_FREE = Boolean.parseBoolean(POtherSetting.getProperty("OnlyGMTeleportFree", "false"));
  3441.             ONLY_GM_ITEMS_FREE = Boolean.parseBoolean(POtherSetting.getProperty("OnlyGMItemsFree", "false"));
  3442.            
  3443.             BYPASS_VALIDATION = Boolean.parseBoolean(POtherSetting.getProperty("BypassValidation", "True"));
  3444.            
  3445.             ALLOW_DUALBOX_OLY = Boolean.parseBoolean(POtherSetting.getProperty("AllowDualBoxInOly", "True"));
  3446.             ALLOW_DUALBOX_EVENT = Boolean.parseBoolean(POtherSetting.getProperty("AllowDualBoxInEvent", "True"));
  3447.             ALLOWED_BOXES = Integer.parseInt(POtherSetting.getProperty("AllowedBoxes", "99"));
  3448.             ALLOW_DUALBOX = Boolean.parseBoolean(POtherSetting.getProperty("AllowDualBox", "True"));
  3449.            
  3450.             BOT_PROTECTOR = Boolean.parseBoolean(POtherSetting.getProperty("BotProtect", "False"));
  3451.             BOT_PROTECTOR_FIRST_CHECK = Integer.parseInt(POtherSetting.getProperty("BotProtectFirstCheck", "15"));
  3452.             BOT_PROTECTOR_NEXT_CHECK = Integer.parseInt(POtherSetting.getProperty("BotProtectNextCheck", "60"));
  3453.             BOT_PROTECTOR_WAIT_ANSVER = Integer.parseInt(POtherSetting.getProperty("BotProtectAnsver", "180"));
  3454.         }
  3455.         catch (final Exception e)
  3456.         {
  3457.             e.printStackTrace();
  3458.             throw new Error("Failed to Load " + PROTECT_OTHER_CONFIG + " File.");
  3459.         }
  3460.     }
  3461.    
  3462.     // ============================================================
  3463.     public static String USER;
  3464.     public static int KEY;
  3465.    
  3466.     // ============================================================
  3467.     public static void loadKeyOptions()
  3468.     {
  3469.         final String KEYF = FService.PROTECT_KEY_FILE;
  3470.        
  3471.         try
  3472.         {
  3473.             final Properties keySetting = new Properties();
  3474.             final InputStream is = new FileInputStream(new File(KEYF));
  3475.             keySetting.load(is);
  3476.             is.close();
  3477.            
  3478.             USER = keySetting.getProperty("User", "test");
  3479.             KEY = Integer.parseInt(keySetting.getProperty("Key", "123456789"));
  3480.         }
  3481.         catch (final Exception e)
  3482.         {
  3483.             e.printStackTrace();
  3484.             throw new Error("Failed to Load " + KEYF + " File.");
  3485.         }
  3486.     }
  3487.    
  3488.     // ============================================================
  3489.     public static int BLOW_ATTACK_FRONT;
  3490.     public static int BLOW_ATTACK_SIDE;
  3491.     public static int BLOW_ATTACK_BEHIND;
  3492.    
  3493.     public static int BACKSTAB_ATTACK_FRONT;
  3494.     public static int BACKSTAB_ATTACK_SIDE;
  3495.     public static int BACKSTAB_ATTACK_BEHIND;
  3496.    
  3497.     public static int MAX_PATK_SPEED;
  3498.     public static int MAX_MATK_SPEED;
  3499.    
  3500.     public static int MAX_PCRIT_RATE;
  3501.     public static int MAX_MCRIT_RATE;
  3502.     public static float MCRIT_RATE_MUL;
  3503.    
  3504.     public static int RUN_SPD_BOOST;
  3505.     public static int MAX_RUN_SPEED;
  3506.    
  3507.     public static float ALT_MAGES_PHYSICAL_DAMAGE_MULTI;
  3508.     public static float ALT_MAGES_MAGICAL_DAMAGE_MULTI;
  3509.     public static float ALT_FIGHTERS_PHYSICAL_DAMAGE_MULTI;
  3510.     public static float ALT_FIGHTERS_MAGICAL_DAMAGE_MULTI;
  3511.     public static float ALT_PETS_PHYSICAL_DAMAGE_MULTI;
  3512.     public static float ALT_PETS_MAGICAL_DAMAGE_MULTI;
  3513.     public static float ALT_NPC_PHYSICAL_DAMAGE_MULTI;
  3514.     public static float ALT_NPC_MAGICAL_DAMAGE_MULTI;
  3515.     // Alternative damage for dagger skills VS heavy
  3516.     public static float ALT_DAGGER_DMG_VS_HEAVY;
  3517.     // Alternative damage for dagger skills VS robe
  3518.     public static float ALT_DAGGER_DMG_VS_ROBE;
  3519.     // Alternative damage for dagger skills VS light
  3520.     public static float ALT_DAGGER_DMG_VS_LIGHT;
  3521.    
  3522.     public static boolean ALLOW_RAID_LETHAL, ALLOW_LETHAL_PROTECTION_MOBS;
  3523.    
  3524.     public static String LETHAL_PROTECTED_MOBS;
  3525.     public static FastList<Integer> LIST_LETHAL_PROTECTED_MOBS = new FastList<>();
  3526.    
  3527.     public static float MAGIC_CRITICAL_POWER;
  3528.    
  3529.     public static float STUN_CHANCE_MODIFIER;
  3530.     public static float BLEED_CHANCE_MODIFIER;
  3531.     public static float POISON_CHANCE_MODIFIER;
  3532.     public static float PARALYZE_CHANCE_MODIFIER;
  3533.     public static float ROOT_CHANCE_MODIFIER;
  3534.     public static float SLEEP_CHANCE_MODIFIER;
  3535.     public static float FEAR_CHANCE_MODIFIER;
  3536.     public static float CONFUSION_CHANCE_MODIFIER;
  3537.     public static float DEBUFF_CHANCE_MODIFIER;
  3538.     public static float BUFF_CHANCE_MODIFIER;
  3539.     public static boolean SEND_SKILLS_CHANCE_TO_PLAYERS;
  3540.    
  3541.     /* Remove equip during subclass change */
  3542.     public static boolean REMOVE_WEAPON_SUBCLASS;
  3543.     public static boolean REMOVE_CHEST_SUBCLASS;
  3544.     public static boolean REMOVE_LEG_SUBCLASS;
  3545.    
  3546.     public static boolean ENABLE_CLASS_DAMAGES;
  3547.     public static boolean ENABLE_CLASS_DAMAGES_IN_OLY;
  3548.     public static boolean ENABLE_CLASS_DAMAGES_LOGGER;
  3549.     public static boolean LEAVE_BUFFS_ON_DIE;
  3550.    
  3551.     public static boolean ALT_RAIDS_STATS_BONUS;
  3552.    
  3553.     // ============================================================
  3554.     public static void loadPHYSICSConfig()
  3555.     {
  3556.         final String PHYSICS_CONFIG = FService.PHYSICS_CONFIGURATION_FILE;
  3557.        
  3558.         try
  3559.         {
  3560.             final Properties PHYSICSSetting = new Properties();
  3561.             final InputStream is = new FileInputStream(new File(PHYSICS_CONFIG));
  3562.             PHYSICSSetting.load(is);
  3563.             is.close();
  3564.            
  3565.             ENABLE_CLASS_DAMAGES = Boolean.parseBoolean(PHYSICSSetting.getProperty("EnableClassDamagesSettings", "true"));
  3566.             ENABLE_CLASS_DAMAGES_IN_OLY = Boolean.parseBoolean(PHYSICSSetting.getProperty("EnableClassDamagesSettingsInOly", "true"));
  3567.             ENABLE_CLASS_DAMAGES_LOGGER = Boolean.parseBoolean(PHYSICSSetting.getProperty("EnableClassDamagesLogger", "true"));
  3568.            
  3569.             BLOW_ATTACK_FRONT = TypeFormat.parseInt(PHYSICSSetting.getProperty("BlowAttackFront", "50"));
  3570.             BLOW_ATTACK_SIDE = TypeFormat.parseInt(PHYSICSSetting.getProperty("BlowAttackSide", "60"));
  3571.             BLOW_ATTACK_BEHIND = TypeFormat.parseInt(PHYSICSSetting.getProperty("BlowAttackBehind", "70"));
  3572.            
  3573.             BACKSTAB_ATTACK_FRONT = TypeFormat.parseInt(PHYSICSSetting.getProperty("BackstabAttackFront", "0"));
  3574.             BACKSTAB_ATTACK_SIDE = TypeFormat.parseInt(PHYSICSSetting.getProperty("BackstabAttackSide", "0"));
  3575.             BACKSTAB_ATTACK_BEHIND = TypeFormat.parseInt(PHYSICSSetting.getProperty("BackstabAttackBehind", "70"));
  3576.            
  3577.             // Max patk speed and matk speed
  3578.             MAX_PATK_SPEED = Integer.parseInt(PHYSICSSetting.getProperty("MaxPAtkSpeed", "1500"));
  3579.             MAX_MATK_SPEED = Integer.parseInt(PHYSICSSetting.getProperty("MaxMAtkSpeed", "1999"));
  3580.            
  3581.             if (MAX_PATK_SPEED < 1)
  3582.             {
  3583.                 MAX_PATK_SPEED = Integer.MAX_VALUE;
  3584.             }
  3585.            
  3586.             if (MAX_MATK_SPEED < 1)
  3587.             {
  3588.                 MAX_MATK_SPEED = Integer.MAX_VALUE;
  3589.             }
  3590.            
  3591.             MAX_PCRIT_RATE = Integer.parseInt(PHYSICSSetting.getProperty("MaxPCritRate", "500"));
  3592.             MAX_MCRIT_RATE = Integer.parseInt(PHYSICSSetting.getProperty("MaxMCritRate", "300"));
  3593.             MCRIT_RATE_MUL = Float.parseFloat(PHYSICSSetting.getProperty("McritMulDif", "1"));
  3594.            
  3595.             MAGIC_CRITICAL_POWER = Float.parseFloat(PHYSICSSetting.getProperty("MagicCriticalPower", "3.0"));
  3596.            
  3597.             STUN_CHANCE_MODIFIER = Float.parseFloat(PHYSICSSetting.getProperty("StunChanceModifier", "1.0"));
  3598.             BLEED_CHANCE_MODIFIER = Float.parseFloat(PHYSICSSetting.getProperty("BleedChanceModifier", "1.0"));
  3599.             POISON_CHANCE_MODIFIER = Float.parseFloat(PHYSICSSetting.getProperty("PoisonChanceModifier", "1.0"));
  3600.             PARALYZE_CHANCE_MODIFIER = Float.parseFloat(PHYSICSSetting.getProperty("ParalyzeChanceModifier", "1.0"));
  3601.             ROOT_CHANCE_MODIFIER = Float.parseFloat(PHYSICSSetting.getProperty("RootChanceModifier", "1.0"));
  3602.             SLEEP_CHANCE_MODIFIER = Float.parseFloat(PHYSICSSetting.getProperty("SleepChanceModifier", "1.0"));
  3603.             FEAR_CHANCE_MODIFIER = Float.parseFloat(PHYSICSSetting.getProperty("FearChanceModifier", "1.0"));
  3604.             CONFUSION_CHANCE_MODIFIER = Float.parseFloat(PHYSICSSetting.getProperty("ConfusionChanceModifier", "1.0"));
  3605.             DEBUFF_CHANCE_MODIFIER = Float.parseFloat(PHYSICSSetting.getProperty("DebuffChanceModifier", "1.0"));
  3606.             BUFF_CHANCE_MODIFIER = Float.parseFloat(PHYSICSSetting.getProperty("BuffChanceModifier", "1.0"));
  3607.            
  3608.             ALT_MAGES_PHYSICAL_DAMAGE_MULTI = Float.parseFloat(PHYSICSSetting.getProperty("AltPDamageMages", "1.00"));
  3609.             ALT_MAGES_MAGICAL_DAMAGE_MULTI = Float.parseFloat(PHYSICSSetting.getProperty("AltMDamageMages", "1.00"));
  3610.             ALT_FIGHTERS_PHYSICAL_DAMAGE_MULTI = Float.parseFloat(PHYSICSSetting.getProperty("AltPDamageFighters", "1.00"));
  3611.             ALT_FIGHTERS_MAGICAL_DAMAGE_MULTI = Float.parseFloat(PHYSICSSetting.getProperty("AltMDamageFighters", "1.00"));
  3612.             ALT_PETS_PHYSICAL_DAMAGE_MULTI = Float.parseFloat(PHYSICSSetting.getProperty("AltPDamagePets", "1.00"));
  3613.             ALT_PETS_MAGICAL_DAMAGE_MULTI = Float.parseFloat(PHYSICSSetting.getProperty("AltMDamagePets", "1.00"));
  3614.             ALT_NPC_PHYSICAL_DAMAGE_MULTI = Float.parseFloat(PHYSICSSetting.getProperty("AltPDamageNpc", "1.00"));
  3615.             ALT_NPC_MAGICAL_DAMAGE_MULTI = Float.parseFloat(PHYSICSSetting.getProperty("AltMDamageNpc", "1.00"));
  3616.             ALT_DAGGER_DMG_VS_HEAVY = Float.parseFloat(PHYSICSSetting.getProperty("DaggerVSHeavy", "2.50"));
  3617.             ALT_DAGGER_DMG_VS_ROBE = Float.parseFloat(PHYSICSSetting.getProperty("DaggerVSRobe", "1.80"));
  3618.             ALT_DAGGER_DMG_VS_LIGHT = Float.parseFloat(PHYSICSSetting.getProperty("DaggerVSLight", "2.00"));
  3619.             RUN_SPD_BOOST = Integer.parseInt(PHYSICSSetting.getProperty("RunSpeedBoost", "0"));
  3620.             MAX_RUN_SPEED = Integer.parseInt(PHYSICSSetting.getProperty("MaxRunSpeed", "250"));
  3621.            
  3622.             ALLOW_RAID_LETHAL = Boolean.parseBoolean(PHYSICSSetting.getProperty("AllowLethalOnRaids", "False"));
  3623.            
  3624.             ALLOW_LETHAL_PROTECTION_MOBS = Boolean.parseBoolean(PHYSICSSetting.getProperty("AllowLethalProtectionMobs", "False"));
  3625.            
  3626.             LETHAL_PROTECTED_MOBS = PHYSICSSetting.getProperty("LethalProtectedMobs", "");
  3627.            
  3628.             LIST_LETHAL_PROTECTED_MOBS = new FastList<>();
  3629.             for (final String id : LETHAL_PROTECTED_MOBS.split(","))
  3630.             {
  3631.                 LIST_LETHAL_PROTECTED_MOBS.add(Integer.parseInt(id));
  3632.             }
  3633.            
  3634.             SEND_SKILLS_CHANCE_TO_PLAYERS = Boolean.parseBoolean(PHYSICSSetting.getProperty("SendSkillsChanceToPlayers", "False"));
  3635.            
  3636.             /* Remove equip during subclass change */
  3637.             REMOVE_WEAPON_SUBCLASS = Boolean.parseBoolean(PHYSICSSetting.getProperty("RemoveWeaponSubclass", "False"));
  3638.             REMOVE_CHEST_SUBCLASS = Boolean.parseBoolean(PHYSICSSetting.getProperty("RemoveChestSubclass", "False"));
  3639.             REMOVE_LEG_SUBCLASS = Boolean.parseBoolean(PHYSICSSetting.getProperty("RemoveLegSubclass", "False"));
  3640.            
  3641.             DISABLE_BOW_CLASSES_STRING = PHYSICSSetting.getProperty("DisableBowForClasses", "");
  3642.             DISABLE_BOW_CLASSES = new FastList<>();
  3643.             for (final String class_id : DISABLE_BOW_CLASSES_STRING.split(","))
  3644.             {
  3645.                 if (!class_id.equals(""))
  3646.                     DISABLE_BOW_CLASSES.add(Integer.parseInt(class_id));
  3647.             }
  3648.            
  3649.             LEAVE_BUFFS_ON_DIE = Boolean.parseBoolean(PHYSICSSetting.getProperty("LeaveBuffsOnDie", "True"));
  3650.            
  3651.         }
  3652.         catch (final Exception e)
  3653.         {
  3654.             e.printStackTrace();
  3655.             throw new Error("Failed to Load " + PHYSICS_CONFIG + " File.");
  3656.         }
  3657.     }
  3658.    
  3659.     // ============================================================
  3660.     public static int GEODATA;
  3661.     public static boolean GEODATA_CELLFINDING;
  3662.     public static boolean ALLOW_PLAYERS_PATHNODE;
  3663.     public static boolean FORCE_GEODATA;
  3664.    
  3665.     public static enum CorrectSpawnsZ
  3666.     {
  3667.         TOWN,
  3668.         MONSTER,
  3669.         ALL,
  3670.         NONE
  3671.     }
  3672.    
  3673.     public static CorrectSpawnsZ GEO_CORRECT_Z;
  3674.    
  3675.     public static boolean ACCEPT_GEOEDITOR_CONN;
  3676.     public static int GEOEDITOR_PORT;
  3677.    
  3678.     public static int WORLD_SIZE_MIN_X;
  3679.     public static int WORLD_SIZE_MAX_X;
  3680.     public static int WORLD_SIZE_MIN_Y;
  3681.     public static int WORLD_SIZE_MAX_Y;
  3682.     public static int WORLD_SIZE_MIN_Z;
  3683.     public static int WORLD_SIZE_MAX_Z;
  3684.    
  3685.     public static int COORD_SYNCHRONIZE;
  3686.    
  3687.     public static boolean FALL_DAMAGE;
  3688.     public static boolean ALLOW_WATER;
  3689.    
  3690.     // ============================================================
  3691.     public static void loadgeodataConfig()
  3692.     {
  3693.         final String GEODATA_CONFIG_FILE = FService.GEODATA_CONFIG_FILE;
  3694.        
  3695.         try
  3696.         {
  3697.             final Properties geodataSetting = new Properties();
  3698.             final InputStream is = new FileInputStream(new File(GEODATA_CONFIG_FILE));
  3699.             geodataSetting.load(is);
  3700.             is.close();
  3701.            
  3702.             GEODATA = Integer.parseInt(geodataSetting.getProperty("GeoData", "0"));
  3703.             GEODATA_CELLFINDING = Boolean.parseBoolean(geodataSetting.getProperty("CellPathFinding", "False"));
  3704.            
  3705.             ALLOW_PLAYERS_PATHNODE = Boolean.parseBoolean(geodataSetting.getProperty("AllowPlayersPathnode", "False"));
  3706.            
  3707.             FORCE_GEODATA = Boolean.parseBoolean(geodataSetting.getProperty("ForceGeoData", "True"));
  3708.             final String correctZ = geodataSetting.getProperty("GeoCorrectZ", "ALL");
  3709.             GEO_CORRECT_Z = CorrectSpawnsZ.valueOf(correctZ.toUpperCase());
  3710.            
  3711.             ACCEPT_GEOEDITOR_CONN = Boolean.parseBoolean(geodataSetting.getProperty("AcceptGeoeditorConn", "False"));
  3712.             GEOEDITOR_PORT = Integer.parseInt(geodataSetting.getProperty("GeoEditorPort", "9011"));
  3713.            
  3714.             WORLD_SIZE_MIN_X = Integer.parseInt(geodataSetting.getProperty("WorldSizeMinX", "-131072"));
  3715.             WORLD_SIZE_MAX_X = Integer.parseInt(geodataSetting.getProperty("WorldSizeMaxX", "228608"));
  3716.             WORLD_SIZE_MIN_Y = Integer.parseInt(geodataSetting.getProperty("WorldSizeMinY", "-262144"));
  3717.             WORLD_SIZE_MAX_Y = Integer.parseInt(geodataSetting.getProperty("WorldSizeMaxY", "262144"));
  3718.             WORLD_SIZE_MIN_Z = Integer.parseInt(geodataSetting.getProperty("WorldSizeMinZ", "-15000"));
  3719.             WORLD_SIZE_MAX_Z = Integer.parseInt(geodataSetting.getProperty("WorldSizeMaxZ", "15000"));
  3720.            
  3721.             COORD_SYNCHRONIZE = Integer.valueOf(geodataSetting.getProperty("CoordSynchronize", "-1"));
  3722.            
  3723.             FALL_DAMAGE = Boolean.parseBoolean(geodataSetting.getProperty("FallDamage", "False"));
  3724.             ALLOW_WATER = Boolean.valueOf(geodataSetting.getProperty("AllowWater", "False"));
  3725.         }
  3726.         catch (final Exception e)
  3727.         {
  3728.             e.printStackTrace();
  3729.             throw new Error("Failed to Load " + GEODATA_CONFIG_FILE + " File.");
  3730.         }
  3731.        
  3732.     }
  3733.    
  3734.     // ============================================================
  3735.     public static int RBLOCKRAGE;
  3736.     public static boolean PLAYERS_CAN_HEAL_RB;
  3737.    
  3738.     public static HashMap<Integer, Integer> RBS_SPECIFIC_LOCK_RAGE;
  3739.    
  3740.     public static boolean ALLOW_DIRECT_TP_TO_BOSS_ROOM;
  3741.     public static boolean ANTHARAS_OLD;
  3742.     public static int ANTHARAS_CLOSE;
  3743.     public static int ANTHARAS_DESPAWN_TIME;
  3744.     public static int ANTHARAS_RESP_FIRST;
  3745.     public static int ANTHARAS_RESP_SECOND;
  3746.     public static int ANTHARAS_WAIT_TIME;
  3747.     public static float ANTHARAS_POWER_MULTIPLIER;
  3748.    
  3749.     public static int BAIUM_SLEEP;
  3750.     public static int BAIUM_RESP_FIRST;
  3751.     public static int BAIUM_RESP_SECOND;
  3752.     public static float BAIUM_POWER_MULTIPLIER;
  3753.    
  3754.     public static int CORE_RESP_MINION;
  3755.     public static int CORE_RESP_FIRST;
  3756.     public static int CORE_RESP_SECOND;
  3757.     public static int CORE_LEVEL;
  3758.     public static int CORE_RING_CHANCE;
  3759.     public static float CORE_POWER_MULTIPLIER;
  3760.    
  3761.     public static int QA_RESP_NURSE;
  3762.     public static int QA_RESP_ROYAL;
  3763.     public static int QA_RESP_FIRST;
  3764.     public static int QA_RESP_SECOND;
  3765.     public static int QA_LEVEL;
  3766.     public static int QA_RING_CHANCE;
  3767.     public static float QA_POWER_MULTIPLIER;
  3768.    
  3769.     public static float LEVEL_DIFF_MULTIPLIER_MINION;
  3770.    
  3771.     public static int HPH_FIXINTERVALOFHALTER;
  3772.     public static int HPH_RANDOMINTERVALOFHALTER;
  3773.     public static int HPH_APPTIMEOFHALTER;
  3774.     public static int HPH_ACTIVITYTIMEOFHALTER;
  3775.     public static int HPH_FIGHTTIMEOFHALTER;
  3776.     public static int HPH_CALLROYALGUARDHELPERCOUNT;
  3777.     public static int HPH_CALLROYALGUARDHELPERINTERVAL;
  3778.     public static int HPH_INTERVALOFDOOROFALTER;
  3779.     public static int HPH_TIMEOFLOCKUPDOOROFALTAR;
  3780.    
  3781.     public static int ZAKEN_RESP_FIRST;
  3782.     public static int ZAKEN_RESP_SECOND;
  3783.     public static int ZAKEN_LEVEL;
  3784.     public static int ZAKEN_EARRING_CHANCE;
  3785.     public static float ZAKEN_POWER_MULTIPLIER;
  3786.    
  3787.     public static int ORFEN_RESP_FIRST;
  3788.     public static int ORFEN_RESP_SECOND;
  3789.     public static int ORFEN_LEVEL;
  3790.     public static int ORFEN_EARRING_CHANCE;
  3791.     public static float ORFEN_POWER_MULTIPLIER;
  3792.    
  3793.     public static int VALAKAS_RESP_FIRST;
  3794.     public static int VALAKAS_RESP_SECOND;
  3795.     public static int VALAKAS_WAIT_TIME;
  3796.     public static int VALAKAS_DESPAWN_TIME;
  3797.     public static float VALAKAS_POWER_MULTIPLIER;
  3798.    
  3799.     public static int FRINTEZZA_RESP_FIRST;
  3800.     public static int FRINTEZZA_RESP_SECOND;
  3801.     public static float FRINTEZZA_POWER_MULTIPLIER;
  3802.    
  3803.     public static boolean BYPASS_FRINTEZZA_PARTIES_CHECK;
  3804.     public static int FRINTEZZA_MIN_PARTIES;
  3805.     public static int FRINTEZZA_MAX_PARTIES;
  3806.    
  3807.     public static String RAID_INFO_IDS;
  3808.     public static FastList<Integer> RAID_INFO_IDS_LIST = new FastList<>();
  3809.    
  3810.     // ============================================================
  3811.     public static void loadBossConfig()
  3812.     {
  3813.         final String BOSS = FService.BOSS_CONFIG_FILE;
  3814.        
  3815.         try
  3816.         {
  3817.             final Properties bossSettings = new Properties();
  3818.             final InputStream is = new FileInputStream(new File(BOSS));
  3819.             bossSettings.load(is);
  3820.             is.close();
  3821.            
  3822.             ALT_RAIDS_STATS_BONUS = Boolean.parseBoolean(bossSettings.getProperty("AltRaidsStatsBonus", "True"));
  3823.            
  3824.             RBLOCKRAGE = Integer.parseInt(bossSettings.getProperty("RBlockRage", "5000"));
  3825.            
  3826.             if (RBLOCKRAGE > 0 && RBLOCKRAGE < 100)
  3827.             {
  3828.                 LOGGER.info("ATTENTION: RBlockRage, if enabled (>0), must be >=100");
  3829.                 LOGGER.info("   -- RBlockRage setted to 100 by default");
  3830.                 RBLOCKRAGE = 100;
  3831.             }
  3832.            
  3833.             RBS_SPECIFIC_LOCK_RAGE = new HashMap<>();
  3834.            
  3835.             final String RBS_SPECIFIC_LOCK_RAGE_String = bossSettings.getProperty("RaidBossesSpecificLockRage", "");
  3836.            
  3837.             if (!RBS_SPECIFIC_LOCK_RAGE_String.equals(""))
  3838.             {
  3839.                
  3840.                 final String[] locked_bosses = RBS_SPECIFIC_LOCK_RAGE_String.split(";");
  3841.                
  3842.                 for (final String actual_boss_rage : locked_bosses)
  3843.                 {
  3844.                     final String[] boss_rage = actual_boss_rage.split(",");
  3845.                    
  3846.                     int specific_rage = Integer.parseInt(boss_rage[1]);
  3847.                    
  3848.                     if (specific_rage > 0 && specific_rage < 100)
  3849.                     {
  3850.                         LOGGER.info("ATTENTION: RaidBossesSpecificLockRage Value for boss " + boss_rage[0] + ", if enabled (>0), must be >=100");
  3851.                         LOGGER.info("   -- RaidBossesSpecificLockRage Value for boss " + boss_rage[0] + " setted to 100 by default");
  3852.                         specific_rage = 100;
  3853.                     }
  3854.                    
  3855.                     RBS_SPECIFIC_LOCK_RAGE.put(Integer.parseInt(boss_rage[0]), specific_rage);
  3856.                 }
  3857.                
  3858.             }
  3859.            
  3860.             PLAYERS_CAN_HEAL_RB = Boolean.parseBoolean(bossSettings.getProperty("PlayersCanHealRb", "True"));
  3861.            
  3862.             // ============================================================
  3863.             ALLOW_DIRECT_TP_TO_BOSS_ROOM = Boolean.valueOf(bossSettings.getProperty("AllowDirectTeleportToBossRoom", "False"));
  3864.             // Antharas
  3865.             ANTHARAS_OLD = Boolean.valueOf(bossSettings.getProperty("AntharasOldScript", "true"));
  3866.             ANTHARAS_CLOSE = Integer.parseInt(bossSettings.getProperty("AntharasClose", "1200"));
  3867.             ANTHARAS_DESPAWN_TIME = Integer.parseInt(bossSettings.getProperty("AntharasDespawnTime", "240"));
  3868.             ANTHARAS_RESP_FIRST = Integer.parseInt(bossSettings.getProperty("AntharasRespFirst", "192"));
  3869.             ANTHARAS_RESP_SECOND = Integer.parseInt(bossSettings.getProperty("AntharasRespSecond", "145"));
  3870.             ANTHARAS_WAIT_TIME = Integer.parseInt(bossSettings.getProperty("AntharasWaitTime", "30"));
  3871.             ANTHARAS_POWER_MULTIPLIER = Float.parseFloat(bossSettings.getProperty("AntharasPowerMultiplier", "1.0"));
  3872.             // ============================================================
  3873.             // Baium
  3874.             BAIUM_SLEEP = Integer.parseInt(bossSettings.getProperty("BaiumSleep", "1800"));
  3875.             BAIUM_RESP_FIRST = Integer.parseInt(bossSettings.getProperty("BaiumRespFirst", "121"));
  3876.             BAIUM_RESP_SECOND = Integer.parseInt(bossSettings.getProperty("BaiumRespSecond", "8"));
  3877.             BAIUM_POWER_MULTIPLIER = Float.parseFloat(bossSettings.getProperty("BaiumPowerMultiplier", "1.0"));
  3878.             // ============================================================
  3879.             // Core
  3880.             CORE_RESP_MINION = Integer.parseInt(bossSettings.getProperty("CoreRespMinion", "60"));
  3881.             CORE_RESP_FIRST = Integer.parseInt(bossSettings.getProperty("CoreRespFirst", "37"));
  3882.             CORE_RESP_SECOND = Integer.parseInt(bossSettings.getProperty("CoreRespSecond", "42"));
  3883.             CORE_LEVEL = Integer.parseInt(bossSettings.getProperty("CoreLevel", "0"));
  3884.             CORE_RING_CHANCE = Integer.parseInt(bossSettings.getProperty("CoreRingChance", "0"));
  3885.             CORE_POWER_MULTIPLIER = Float.parseFloat(bossSettings.getProperty("CorePowerMultiplier", "1.0"));
  3886.             // ============================================================
  3887.             // Queen Ant
  3888.             QA_RESP_NURSE = Integer.parseInt(bossSettings.getProperty("QueenAntRespNurse", "60"));
  3889.             QA_RESP_ROYAL = Integer.parseInt(bossSettings.getProperty("QueenAntRespRoyal", "120"));
  3890.             QA_RESP_FIRST = Integer.parseInt(bossSettings.getProperty("QueenAntRespFirst", "19"));
  3891.             QA_RESP_SECOND = Integer.parseInt(bossSettings.getProperty("QueenAntRespSecond", "35"));
  3892.             QA_LEVEL = Integer.parseInt(bossSettings.getProperty("QALevel", "0"));
  3893.             QA_RING_CHANCE = Integer.parseInt(bossSettings.getProperty("QARingChance", "0"));
  3894.             QA_POWER_MULTIPLIER = Float.parseFloat(bossSettings.getProperty("QueenAntPowerMultiplier", "1.0"));
  3895.             // ============================================================
  3896.             // ZAKEN
  3897.             ZAKEN_RESP_FIRST = Integer.parseInt(bossSettings.getProperty("ZakenRespFirst", "60"));
  3898.             ZAKEN_RESP_SECOND = Integer.parseInt(bossSettings.getProperty("ZakenRespSecond", "8"));
  3899.             ZAKEN_LEVEL = Integer.parseInt(bossSettings.getProperty("ZakenLevel", "0"));
  3900.             ZAKEN_EARRING_CHANCE = Integer.parseInt(bossSettings.getProperty("ZakenEarringChance", "0"));
  3901.             ZAKEN_POWER_MULTIPLIER = Float.parseFloat(bossSettings.getProperty("ZakenPowerMultiplier", "1.0"));
  3902.             // ============================================================
  3903.             // ORFEN
  3904.             ORFEN_RESP_FIRST = Integer.parseInt(bossSettings.getProperty("OrfenRespFirst", "20"));
  3905.             ORFEN_RESP_SECOND = Integer.parseInt(bossSettings.getProperty("OrfenRespSecond", "8"));
  3906.             ORFEN_LEVEL = Integer.parseInt(bossSettings.getProperty("OrfenLevel", "0"));
  3907.             ORFEN_EARRING_CHANCE = Integer.parseInt(bossSettings.getProperty("OrfenEarringChance", "0"));
  3908.             ORFEN_POWER_MULTIPLIER = Float.parseFloat(bossSettings.getProperty("OrfenPowerMultiplier", "1.0"));
  3909.             // ============================================================
  3910.             // VALAKAS
  3911.             VALAKAS_RESP_FIRST = Integer.parseInt(bossSettings.getProperty("ValakasRespFirst", "192"));
  3912.             VALAKAS_RESP_SECOND = Integer.parseInt(bossSettings.getProperty("ValakasRespSecond", "44"));
  3913.             VALAKAS_WAIT_TIME = Integer.parseInt(bossSettings.getProperty("ValakasWaitTime", "30"));
  3914.             VALAKAS_POWER_MULTIPLIER = Float.parseFloat(bossSettings.getProperty("ValakasPowerMultiplier", "1.0"));
  3915.             VALAKAS_DESPAWN_TIME = Integer.parseInt(bossSettings.getProperty("ValakasDespawnTime", "15"));
  3916.             // ============================================================
  3917.             // FRINTEZZA
  3918.             FRINTEZZA_RESP_FIRST = Integer.parseInt(bossSettings.getProperty("FrintezzaRespFirst", "48"));
  3919.             FRINTEZZA_RESP_SECOND = Integer.parseInt(bossSettings.getProperty("FrintezzaRespSecond", "8"));
  3920.             FRINTEZZA_POWER_MULTIPLIER = Float.parseFloat(bossSettings.getProperty("FrintezzaPowerMultiplier", "1.0"));
  3921.            
  3922.             BYPASS_FRINTEZZA_PARTIES_CHECK = Boolean.valueOf(bossSettings.getProperty("BypassPartiesCheck", "false"));
  3923.             FRINTEZZA_MIN_PARTIES = Integer.parseInt(bossSettings.getProperty("FrintezzaMinParties", "4"));
  3924.             FRINTEZZA_MAX_PARTIES = Integer.parseInt(bossSettings.getProperty("FrintezzaMaxParties", "5"));
  3925.             // ============================================================
  3926.            
  3927.             LEVEL_DIFF_MULTIPLIER_MINION = Float.parseFloat(bossSettings.getProperty("LevelDiffMultiplierMinion", "0.5"));
  3928.            
  3929.             RAID_INFO_IDS = bossSettings.getProperty("RaidInfoIDs", "");
  3930.             RAID_INFO_IDS_LIST = new FastList<>();
  3931.             for (final String id : RAID_INFO_IDS.split(","))
  3932.             {
  3933.                 RAID_INFO_IDS_LIST.add(Integer.parseInt(id));
  3934.             }
  3935.            
  3936.             // High Priestess van Halter
  3937.             HPH_FIXINTERVALOFHALTER = Integer.parseInt(bossSettings.getProperty("FixIntervalOfHalter", "172800"));
  3938.             if (HPH_FIXINTERVALOFHALTER < 300 || HPH_FIXINTERVALOFHALTER > 864000)
  3939.             {
  3940.                 HPH_FIXINTERVALOFHALTER = 172800;
  3941.             }
  3942.             HPH_FIXINTERVALOFHALTER *= 6000;
  3943.            
  3944.             HPH_RANDOMINTERVALOFHALTER = Integer.parseInt(bossSettings.getProperty("RandomIntervalOfHalter", "86400"));
  3945.             if (HPH_RANDOMINTERVALOFHALTER < 300 || HPH_RANDOMINTERVALOFHALTER > 864000)
  3946.             {
  3947.                 HPH_RANDOMINTERVALOFHALTER = 86400;
  3948.             }
  3949.             HPH_RANDOMINTERVALOFHALTER *= 6000;
  3950.            
  3951.             HPH_APPTIMEOFHALTER = Integer.parseInt(bossSettings.getProperty("AppTimeOfHalter", "20"));
  3952.             if (HPH_APPTIMEOFHALTER < 5 || HPH_APPTIMEOFHALTER > 60)
  3953.             {
  3954.                 HPH_APPTIMEOFHALTER = 20;
  3955.             }
  3956.             HPH_APPTIMEOFHALTER *= 6000;
  3957.            
  3958.             HPH_ACTIVITYTIMEOFHALTER = Integer.parseInt(bossSettings.getProperty("ActivityTimeOfHalter", "21600"));
  3959.             if (HPH_ACTIVITYTIMEOFHALTER < 7200 || HPH_ACTIVITYTIMEOFHALTER > 86400)
  3960.             {
  3961.                 HPH_ACTIVITYTIMEOFHALTER = 21600;
  3962.             }
  3963.             HPH_ACTIVITYTIMEOFHALTER *= 1000;
  3964.            
  3965.             HPH_FIGHTTIMEOFHALTER = Integer.parseInt(bossSettings.getProperty("FightTimeOfHalter", "7200"));
  3966.             if (HPH_FIGHTTIMEOFHALTER < 7200 || HPH_FIGHTTIMEOFHALTER > 21600)
  3967.             {
  3968.                 HPH_FIGHTTIMEOFHALTER = 7200;
  3969.             }
  3970.             HPH_FIGHTTIMEOFHALTER *= 6000;
  3971.            
  3972.             HPH_CALLROYALGUARDHELPERCOUNT = Integer.parseInt(bossSettings.getProperty("CallRoyalGuardHelperCount", "6"));
  3973.             if (HPH_CALLROYALGUARDHELPERCOUNT < 1 || HPH_CALLROYALGUARDHELPERCOUNT > 6)
  3974.             {
  3975.                 HPH_CALLROYALGUARDHELPERCOUNT = 6;
  3976.             }
  3977.            
  3978.             HPH_CALLROYALGUARDHELPERINTERVAL = Integer.parseInt(bossSettings.getProperty("CallRoyalGuardHelperInterval", "10"));
  3979.             if (HPH_CALLROYALGUARDHELPERINTERVAL < 1 || HPH_CALLROYALGUARDHELPERINTERVAL > 60)
  3980.             {
  3981.                 HPH_CALLROYALGUARDHELPERINTERVAL = 10;
  3982.             }
  3983.             HPH_CALLROYALGUARDHELPERINTERVAL *= 6000;
  3984.            
  3985.             HPH_INTERVALOFDOOROFALTER = Integer.parseInt(bossSettings.getProperty("IntervalOfDoorOfAlter", "5400"));
  3986.             if (HPH_INTERVALOFDOOROFALTER < 60 || HPH_INTERVALOFDOOROFALTER > 5400)
  3987.             {
  3988.                 HPH_INTERVALOFDOOROFALTER = 5400;
  3989.             }
  3990.             HPH_INTERVALOFDOOROFALTER *= 6000;
  3991.            
  3992.             HPH_TIMEOFLOCKUPDOOROFALTAR = Integer.parseInt(bossSettings.getProperty("TimeOfLockUpDoorOfAltar", "180"));
  3993.             if (HPH_TIMEOFLOCKUPDOOROFALTAR < 60 || HPH_TIMEOFLOCKUPDOOROFALTAR > 600)
  3994.             {
  3995.                 HPH_TIMEOFLOCKUPDOOROFALTAR = 180;
  3996.             }
  3997.             HPH_TIMEOFLOCKUPDOOROFALTAR *= 6000;
  3998.            
  3999.         }
  4000.         catch (final Exception e)
  4001.         {
  4002.             e.printStackTrace();
  4003.             throw new Error("Failed to Load " + BOSS + " File.");
  4004.         }
  4005.     }
  4006.    
  4007.     // ============================================================
  4008.     public static boolean SCRIPT_DEBUG;
  4009.     public static boolean SCRIPT_ALLOW_COMPILATION;
  4010.     public static boolean SCRIPT_CACHE;
  4011.     public static boolean SCRIPT_ERROR_LOG;
  4012.    
  4013.     // ============================================================
  4014.     public static void loadScriptConfig()
  4015.     {
  4016.         final String SCRIPT = FService.SCRIPT_FILE;
  4017.        
  4018.         try
  4019.         {
  4020.             final Properties scriptSetting = new Properties();
  4021.             final InputStream is = new FileInputStream(new File(SCRIPT));
  4022.             scriptSetting.load(is);
  4023.             is.close();
  4024.            
  4025.             SCRIPT_DEBUG = Boolean.valueOf(scriptSetting.getProperty("EnableScriptDebug", "false"));
  4026.             SCRIPT_ALLOW_COMPILATION = Boolean.valueOf(scriptSetting.getProperty("AllowCompilation", "true"));
  4027.             SCRIPT_CACHE = Boolean.valueOf(scriptSetting.getProperty("UseCache", "true"));
  4028.             SCRIPT_ERROR_LOG = Boolean.valueOf(scriptSetting.getProperty("EnableScriptErrorLog", "true"));
  4029.         }
  4030.         catch (final Exception e)
  4031.         {
  4032.             e.printStackTrace();
  4033.             throw new Error("Failed to Load " + SCRIPT + " File.");
  4034.         }
  4035.     }
  4036.    
  4037.     // ============================================================
  4038.     public static boolean POWERPAK_ENABLED;
  4039.    
  4040.     // ============================================================
  4041.     public static void loadPowerPak()
  4042.     {
  4043.         final String POWERPAK = FService.POWERPAK_FILE;
  4044.        
  4045.         try
  4046.         {
  4047.             final L2Properties p = new L2Properties(POWERPAK);
  4048.             POWERPAK_ENABLED = Boolean.parseBoolean(p.getProperty("PowerPakEnabled", "true"));
  4049.         }
  4050.         catch (final Exception e)
  4051.         {
  4052.             if (Config.ENABLE_ALL_EXCEPTIONS)
  4053.                 e.printStackTrace();
  4054.            
  4055.             LOGGER.warn("Failed to load " + POWERPAK + " file");
  4056.         }
  4057.     }
  4058.    
  4059.     // ============================================================
  4060.     public static Map<String, List<String>> EXTENDERS;
  4061.    
  4062.     // ============================================================
  4063.     public static void loadExtendersConfig()
  4064.     {
  4065.         final String EXTENDER_FILE = FService.EXTENDER_FILE;
  4066.        
  4067.         EXTENDERS = new FastMap<>();
  4068.         final File f = new File(EXTENDER_FILE);
  4069.         if (f.exists())
  4070.         {
  4071.             LineNumberReader lineReader = null;
  4072.             try
  4073.             {
  4074.                 lineReader = new LineNumberReader(new BufferedReader(new FileReader(f)));
  4075.                 String line;
  4076.                 while ((line = lineReader.readLine()) != null)
  4077.                 {
  4078.                     int iPos = line.indexOf("#");
  4079.                    
  4080.                     if (iPos != -1)
  4081.                     {
  4082.                         line = line.substring(0, iPos);
  4083.                     }
  4084.                    
  4085.                     if (line.trim().length() == 0)
  4086.                     {
  4087.                         continue;
  4088.                     }
  4089.                    
  4090.                     iPos = line.indexOf("=");
  4091.                     if (iPos != -1)
  4092.                     {
  4093.                         final String baseName = line.substring(0, iPos).trim();
  4094.                         final String className = line.substring(iPos + 1).trim();
  4095.                        
  4096.                         if (EXTENDERS.get(baseName) == null)
  4097.                         {
  4098.                             EXTENDERS.put(baseName, new FastList<String>());
  4099.                         }
  4100.                        
  4101.                         EXTENDERS.get(baseName).add(className);
  4102.                     }
  4103.                 }
  4104.             }
  4105.             catch (final Exception e)
  4106.             {
  4107.                 if (Config.ENABLE_ALL_EXCEPTIONS)
  4108.                     e.printStackTrace();
  4109.                
  4110.                 LOGGER.warn("Failed to Load " + EXTENDER_FILE + " File.");
  4111.             }
  4112.             finally
  4113.             {
  4114.                 if (lineReader != null)
  4115.                 {
  4116.                     try
  4117.                     {
  4118.                         lineReader.close();
  4119.                     }
  4120.                     catch (final IOException e)
  4121.                     {
  4122.                         e.printStackTrace();
  4123.                     }
  4124.                 }
  4125.             }
  4126.         }
  4127.     }
  4128.    
  4129.     // ============================================================
  4130.     public static long AUTOSAVE_INITIAL_TIME;
  4131.     public static long AUTOSAVE_DELAY_TIME;
  4132.     public static long CHECK_CONNECTION_INACTIVITY_TIME;
  4133.     public static long CHECK_CONNECTION_INITIAL_TIME;
  4134.     public static long CHECK_CONNECTION_DELAY_TIME;
  4135.     public static long CLEANDB_INITIAL_TIME;
  4136.     public static long CLEANDB_DELAY_TIME;
  4137.     public static long CHECK_TELEPORT_ZOMBIE_DELAY_TIME;
  4138.     public static long DEADLOCKCHECK_INTIAL_TIME;
  4139.     public static long DEADLOCKCHECK_DELAY_TIME;
  4140.    
  4141.     // ============================================================
  4142.     public static void loadDaemonsConf()
  4143.     {
  4144.         final String DAEMONS = FService.DAEMONS_FILE;
  4145.        
  4146.         try
  4147.         {
  4148.             final L2Properties p = new L2Properties(DAEMONS);
  4149.            
  4150.             AUTOSAVE_INITIAL_TIME = Long.parseLong(p.getProperty("AutoSaveInitial", "300000"));
  4151.             AUTOSAVE_DELAY_TIME = Long.parseLong(p.getProperty("AutoSaveDelay", "900000"));
  4152.             CHECK_CONNECTION_INITIAL_TIME = Long.parseLong(p.getProperty("CheckConnectionInitial", "300000"));
  4153.             CHECK_CONNECTION_DELAY_TIME = Long.parseLong(p.getProperty("CheckConnectionDelay", "900000"));
  4154.             CHECK_CONNECTION_INACTIVITY_TIME = Long.parseLong(p.getProperty("CheckConnectionInactivityTime", "90000"));
  4155.             CLEANDB_INITIAL_TIME = Long.parseLong(p.getProperty("CleanDBInitial", "300000"));
  4156.             CLEANDB_DELAY_TIME = Long.parseLong(p.getProperty("CleanDBDelay", "900000"));
  4157.             CHECK_TELEPORT_ZOMBIE_DELAY_TIME = Long.parseLong(p.getProperty("CheckTeleportZombiesDelay", "90000"));
  4158.             DEADLOCKCHECK_INTIAL_TIME = Long.parseLong(p.getProperty("DeadLockCheck", "0"));
  4159.             DEADLOCKCHECK_DELAY_TIME = Long.parseLong(p.getProperty("DeadLockDelay", "0"));
  4160.         }
  4161.         catch (final Exception e)
  4162.         {
  4163.             if (Config.ENABLE_ALL_EXCEPTIONS)
  4164.                 e.printStackTrace();
  4165.            
  4166.             LOGGER.warn("Failed to load " + DAEMONS + " file.");
  4167.         }
  4168.     }
  4169.    
  4170.     // ==============================================================
  4171.     /**
  4172.      * Loads all Filter Words
  4173.      */
  4174.     // ==============================================================
  4175.     public static void loadFilter()
  4176.     {
  4177.         final String FILTER_FILE = FService.FILTER_FILE;
  4178.         LineNumberReader lnr = null;
  4179.         try
  4180.         {
  4181.             final File filter_file = new File(FILTER_FILE);
  4182.             if (!filter_file.exists())
  4183.             {
  4184.                 return;
  4185.             }
  4186.            
  4187.             lnr = new LineNumberReader(new BufferedReader(new FileReader(filter_file)));
  4188.             String line = null;
  4189.             while ((line = lnr.readLine()) != null)
  4190.             {
  4191.                 if (line.trim().length() == 0 || line.startsWith("#"))
  4192.                 {
  4193.                     continue;
  4194.                 }
  4195.                 FILTER_LIST.add(line.trim());
  4196.             }
  4197.             LOGGER.info("Loaded " + FILTER_LIST.size() + " Filter Words.");
  4198.         }
  4199.         catch (final Exception e)
  4200.         {
  4201.             e.printStackTrace();
  4202.             throw new Error("Failed to Load " + FILTER_FILE + " File.");
  4203.         }
  4204.         finally
  4205.         {
  4206.             if (lnr != null)
  4207.             {
  4208.                 try
  4209.                 {
  4210.                     lnr.close();
  4211.                 }
  4212.                 catch (final IOException e)
  4213.                 {
  4214.                     e.printStackTrace();
  4215.                 }
  4216.             }
  4217.         }
  4218.     }
  4219.    
  4220.     // ============================================================
  4221.     public static ArrayList<String> QUESTION_LIST = new ArrayList<>();
  4222.    
  4223.     public static void loadQuestion()
  4224.     {
  4225.         final String QUESTION_FILE = FService.QUESTION_FILE;
  4226.         LineNumberReader lnr = null;
  4227.         try
  4228.         {
  4229.             lnr = new LineNumberReader(new BufferedReader(new FileReader(new File(QUESTION_FILE))));
  4230.             String line = null;
  4231.             while ((line = lnr.readLine()) != null)
  4232.             {
  4233.                 if (line.trim().length() < 6 || line.trim().length() > 15 || line.startsWith("#"))
  4234.                 {
  4235.                     continue;
  4236.                 }
  4237.                 QUESTION_LIST.add(line.trim());
  4238.             }
  4239.             LOGGER.info("Loaded " + QUESTION_LIST.size() + " Question Words.");
  4240.         }
  4241.         catch (final Exception e)
  4242.         {
  4243.             e.printStackTrace();
  4244.             throw new Error("Failed to Load " + QUESTION_FILE + " File.");
  4245.         }
  4246.         finally
  4247.         {
  4248.             if (lnr != null)
  4249.             {
  4250.                 try
  4251.                 {
  4252.                     lnr.close();
  4253.                 }
  4254.                 catch (final IOException e)
  4255.                 {
  4256.                     e.printStackTrace();
  4257.                 }
  4258.             }
  4259.         }
  4260.     }
  4261.    
  4262.     // ============================================================
  4263.     private static final String HEXID_FILE = FService.HEXID_FILE;
  4264.     public static boolean ENABLE_OLYMPIAD_DISCONNECTION_DEBUG = false;
  4265.     public static int SERVER_ID;
  4266.     public static byte[] HEX_ID;
  4267.    
  4268.     // ============================================================
  4269.     public static void loadHexed()
  4270.     {
  4271.         try
  4272.         {
  4273.             final Properties Settings = new Properties();
  4274.             final InputStream is = new FileInputStream(new File(HEXID_FILE));
  4275.             Settings.load(is);
  4276.             is.close();
  4277.             SERVER_ID = Integer.parseInt(Settings.getProperty("ServerID"));
  4278.             HEX_ID = new BigInteger(Settings.getProperty("HexID"), 16).toByteArray();
  4279.         }
  4280.         catch (final Exception e)
  4281.         {
  4282.             LOGGER.warn("Could not load HexID file (" + HEXID_FILE + "). Hopefully login will give us one.");
  4283.         }
  4284.     }
  4285.    
  4286.     // ============================================================
  4287.     public static int PORT_LOGIN;
  4288.     public static String LOGIN_BIND_ADDRESS;
  4289.     public static int LOGIN_TRY_BEFORE_BAN;
  4290.     public static int LOGIN_BLOCK_AFTER_BAN;
  4291.     public static File DATAPACK_ROOT;
  4292.     public static int GAME_SERVER_LOGIN_PORT;
  4293.     public static String GAME_SERVER_LOGIN_HOST;
  4294.     public static String INTERNAL_HOSTNAME;
  4295.     public static String EXTERNAL_HOSTNAME;
  4296.     public static int IP_UPDATE_TIME;
  4297.     public static boolean STORE_SKILL_COOLTIME;
  4298.     public static boolean SHOW_LICENCE;
  4299.     public static boolean FORCE_GGAUTH;
  4300.     public static boolean FLOOD_PROTECTION;
  4301.     public static int FAST_CONNECTION_LIMIT;
  4302.     public static int NORMAL_CONNECTION_TIME;
  4303.     public static int FAST_CONNECTION_TIME;
  4304.     public static int MAX_CONNECTION_PER_IP;
  4305.     public static boolean ACCEPT_NEW_GAMESERVER;
  4306.     public static boolean AUTO_CREATE_ACCOUNTS;
  4307.     public static String NETWORK_IP_LIST;
  4308.     public static long SESSION_TTL;
  4309.     public static int MAX_LOGINSESSIONS;
  4310.    
  4311.     // ============================================================
  4312.     public static void loadLoginStartConfig()
  4313.     {
  4314.         final String LOGIN = FService.LOGIN_CONFIGURATION_FILE;
  4315.        
  4316.         try
  4317.         {
  4318.             final Properties serverSettings = new Properties();
  4319.             final InputStream is = new FileInputStream(new File(LOGIN));
  4320.             serverSettings.load(is);
  4321.             is.close();
  4322.            
  4323.             GAME_SERVER_LOGIN_HOST = serverSettings.getProperty("LoginHostname", "*");
  4324.             GAME_SERVER_LOGIN_PORT = Integer.parseInt(serverSettings.getProperty("LoginPort", "9013"));
  4325.            
  4326.             LOGIN_BIND_ADDRESS = serverSettings.getProperty("LoginserverHostname", "*");
  4327.             PORT_LOGIN = Integer.parseInt(serverSettings.getProperty("LoginserverPort", "2106"));
  4328.            
  4329.             ACCEPT_NEW_GAMESERVER = Boolean.parseBoolean(serverSettings.getProperty("AcceptNewGameServer", "True"));
  4330.            
  4331.             LOGIN_TRY_BEFORE_BAN = Integer.parseInt(serverSettings.getProperty("LoginTryBeforeBan", "10"));
  4332.             LOGIN_BLOCK_AFTER_BAN = Integer.parseInt(serverSettings.getProperty("LoginBlockAfterBan", "600"));
  4333.            
  4334.             INTERNAL_HOSTNAME = serverSettings.getProperty("InternalHostname", "localhost");
  4335.             EXTERNAL_HOSTNAME = serverSettings.getProperty("ExternalHostname", "localhost");
  4336.            
  4337.             DATABASE_POOL_TYPE = serverSettings.getProperty("DatabasePoolType", "c3p0");
  4338.             DATABASE_DRIVER = serverSettings.getProperty("Driver", "com.mysql.jdbc.Driver");
  4339.             DATABASE_URL = serverSettings.getProperty("URL", "jdbc:mysql://localhost/l2jdb");
  4340.             DATABASE_LOGIN = serverSettings.getProperty("Login", "root");
  4341.             DATABASE_PASSWORD = serverSettings.getProperty("Password", "");
  4342.             DATABASE_MAX_CONNECTIONS = Integer.parseInt(serverSettings.getProperty("MaximumDbConnections", "10"));
  4343.             DATABASE_MAX_IDLE_TIME = Integer.parseInt(serverSettings.getProperty("MaximumDbIdleTime", "0"));
  4344.            
  4345.             ENABLE_DDOS_PROTECTION_SYSTEM = Boolean.parseBoolean(serverSettings.getProperty("EnableDdosProSystem", "false"));
  4346.             DDOS_COMMAND_BLOCK = serverSettings.getProperty("Deny_noallow_ip_ddos", "/sbin/iptables -I INPUT -p tcp --dport 7777 -s $IP -j ACCEPT");
  4347.             ENABLE_DEBUG_DDOS_PROTECTION_SYSTEM = Boolean.parseBoolean(serverSettings.getProperty("Fulllog_mode_print", "false"));
  4348.            
  4349.             DATABASE_TIMEOUT = Integer.parseInt(serverSettings.getProperty("TimeOutConDb", "0"));
  4350.             DATABASE_CONNECTION_TIMEOUT = Integer.parseInt(serverSettings.getProperty("SingleConnectionTimeOutDb", "120000"));
  4351.             DATABASE_PARTITION_COUNT = Integer.parseInt(serverSettings.getProperty("PartitionCount", "4"));
  4352.            
  4353.             // Anti Brute force attack on login
  4354.             BRUT_AVG_TIME = Integer.parseInt(serverSettings.getProperty("BrutAvgTime", "30")); // in Seconds
  4355.             BRUT_LOGON_ATTEMPTS = Integer.parseInt(serverSettings.getProperty("BrutLogonAttempts", "15"));
  4356.             BRUT_BAN_IP_TIME = Integer.parseInt(serverSettings.getProperty("BrutBanIpTime", "900")); // in Seconds
  4357.            
  4358.             SHOW_LICENCE = Boolean.parseBoolean(serverSettings.getProperty("ShowLicence", "false"));
  4359.             IP_UPDATE_TIME = Integer.parseInt(serverSettings.getProperty("IpUpdateTime", "15"));
  4360.             FORCE_GGAUTH = Boolean.parseBoolean(serverSettings.getProperty("ForceGGAuth", "false"));
  4361.            
  4362.             AUTO_CREATE_ACCOUNTS = Boolean.parseBoolean(serverSettings.getProperty("AutoCreateAccounts", "True"));
  4363.            
  4364.             FLOOD_PROTECTION = Boolean.parseBoolean(serverSettings.getProperty("EnableFloodProtection", "True"));
  4365.             FAST_CONNECTION_LIMIT = Integer.parseInt(serverSettings.getProperty("FastConnectionLimit", "15"));
  4366.             NORMAL_CONNECTION_TIME = Integer.parseInt(serverSettings.getProperty("NormalConnectionTime", "700"));
  4367.             FAST_CONNECTION_TIME = Integer.parseInt(serverSettings.getProperty("FastConnectionTime", "350"));
  4368.             MAX_CONNECTION_PER_IP = Integer.parseInt(serverSettings.getProperty("MaxConnectionPerIP", "50"));
  4369.             DEBUG = Boolean.parseBoolean(serverSettings.getProperty("Debug", "false"));
  4370.             DEVELOPER = Boolean.parseBoolean(serverSettings.getProperty("Developer", "false"));
  4371.            
  4372.             NETWORK_IP_LIST = serverSettings.getProperty("NetworkList", "");
  4373.             SESSION_TTL = Long.parseLong(serverSettings.getProperty("SessionTTL", "25000"));
  4374.             MAX_LOGINSESSIONS = Integer.parseInt(serverSettings.getProperty("MaxSessions", "200"));
  4375.            
  4376.             DEBUG_PACKETS = Boolean.parseBoolean(serverSettings.getProperty("DebugPackets", "false"));
  4377.            
  4378.         }
  4379.         catch (final Exception e)
  4380.         {
  4381.             e.printStackTrace();
  4382.             throw new Error("Failed to Load " + LOGIN + " File.");
  4383.         }
  4384.     }
  4385.    
  4386.     // ============================================================
  4387.     public static void loadBanFile()
  4388.     {
  4389.         File conf_file = new File(FService.BANNED_IP);
  4390.         if (!conf_file.exists())
  4391.         {
  4392.             // old file position
  4393.             conf_file = new File(FService.LEGACY_BANNED_IP);
  4394.         }
  4395.        
  4396.         if (conf_file.exists() && conf_file.isFile())
  4397.         {
  4398.             FileInputStream fis = null;
  4399.             try
  4400.             {
  4401.                 fis = new FileInputStream(conf_file);
  4402.                
  4403.                 LineNumberReader reader = null;
  4404.                 String line;
  4405.                 String[] parts;
  4406.                 try
  4407.                 {
  4408.                     reader = new LineNumberReader(new InputStreamReader(fis));
  4409.                    
  4410.                     while ((line = reader.readLine()) != null)
  4411.                     {
  4412.                         line = line.trim();
  4413.                         // check if this line isnt a comment line
  4414.                         if (line.length() > 0 && line.charAt(0) != '#')
  4415.                         {
  4416.                             // split comments if any
  4417.                             parts = line.split("#", 2);
  4418.                            
  4419.                             // discard comments in the line, if any
  4420.                             line = parts[0];
  4421.                            
  4422.                             parts = line.split(" ");
  4423.                            
  4424.                             final String address = parts[0];
  4425.                            
  4426.                             long duration = 0;
  4427.                            
  4428.                             if (parts.length > 1)
  4429.                             {
  4430.                                 try
  4431.                                 {
  4432.                                     duration = Long.parseLong(parts[1]);
  4433.                                 }
  4434.                                 catch (final NumberFormatException e)
  4435.                                 {
  4436.                                     LOGGER.warn("Skipped: Incorrect ban duration (" + parts[1] + ") on (" + conf_file.getName() + "). Line: " + reader.getLineNumber());
  4437.                                     continue;
  4438.                                 }
  4439.                             }
  4440.                            
  4441.                             try
  4442.                             {
  4443.                                 LoginController.getInstance().addBanForAddress(address, duration);
  4444.                             }
  4445.                             catch (final UnknownHostException e)
  4446.                             {
  4447.                                 LOGGER.warn("Skipped: Invalid address (" + parts[0] + ") on (" + conf_file.getName() + "). Line: " + reader.getLineNumber());
  4448.                             }
  4449.                         }
  4450.                     }
  4451.                 }
  4452.                 catch (final IOException e)
  4453.                 {
  4454.                     LOGGER.warn("Error while reading the bans file (" + conf_file.getName() + "). Details: ", e);
  4455.                 }
  4456.                
  4457.                 LOGGER.info("Loaded " + LoginController.getInstance().getBannedIps().size() + " IP Bans.");
  4458.             }
  4459.             catch (final FileNotFoundException e)
  4460.             {
  4461.                 LOGGER.warn("Failed to load banned IPs file (" + conf_file.getName() + ") for reading. Reason: ", e);
  4462.             }
  4463.             finally
  4464.             {
  4465.                 if (fis != null)
  4466.                     try
  4467.                     {
  4468.                         fis.close();
  4469.                     }
  4470.                     catch (final IOException e)
  4471.                     {
  4472.                         e.printStackTrace();
  4473.                     }
  4474.             }
  4475.         }
  4476.         else
  4477.         {
  4478.             LOGGER.info("IP Bans file (" + conf_file.getName() + ") is missing or is a directory, skipped.");
  4479.         }
  4480.     }
  4481.    
  4482.     /** Enumeration for type of ID Factory */
  4483.     public static enum IdFactoryType
  4484.     {
  4485.         Compaction,
  4486.         BitSet,
  4487.         Stack
  4488.     }
  4489.    
  4490.     /** Enumeration for type of maps object */
  4491.     public static enum ObjectMapType
  4492.     {
  4493.         WorldObjectTree,
  4494.         WorldObjectMap
  4495.     }
  4496.    
  4497.     /** Enumeration for type of set object */
  4498.     public static enum ObjectSetType
  4499.     {
  4500.         L2ObjectHashSet,
  4501.         WorldObjectSet
  4502.     }
  4503.    
  4504.     public static void load()
  4505.     {
  4506.         if (ServerType.serverMode == ServerType.MODE_GAMESERVER)
  4507.         {
  4508.             loadHexed();
  4509.            
  4510.             // Load network
  4511.             loadServerConfig();
  4512.            
  4513.             // Load system
  4514.             loadIdFactoryConfig();
  4515.            
  4516.             // Load developer parameters
  4517.             loadDevConfig();
  4518.            
  4519.             // Head
  4520.             loadOptionsConfig();
  4521.             loadOtherConfig();
  4522.             loadRatesConfig();
  4523.             loadAltConfig();
  4524.             load7sConfig();
  4525.             loadCHConfig();
  4526.             loadElitCHConfig();
  4527.             loadOlympConfig();
  4528.             loadEnchantConfig();
  4529.             loadBossConfig();
  4530.            
  4531.             // Head functions
  4532.             loadL2JFrozenConfig();
  4533.             loadPHYSICSConfig();
  4534.             loadAccessConfig();
  4535.             loadPvpConfig();
  4536.             loadCraftConfig();
  4537.            
  4538.             // Frozen config
  4539.             loadCTFConfig();
  4540.             loadDMConfig();
  4541.             loadFrozenConfig();
  4542.             loadTVTConfig();
  4543.             loadTWConfig();
  4544.             loadIRCConfig();
  4545.            
  4546.             // Protect
  4547.             loadFloodConfig();
  4548.             loadPacketConfig();
  4549.             loadPOtherConfig();
  4550.            
  4551.             // Geo&path
  4552.             loadgeodataConfig();
  4553.            
  4554.             // Fun
  4555.             loadChampionConfig();
  4556.             loadWeddingConfig();
  4557.             loadREBIRTHConfig();
  4558.             loadAWAYConfig();
  4559.             loadBankingConfig();
  4560.             loadPCBPointConfig();
  4561.             loadOfflineConfig();
  4562.             loadPowerPak();
  4563.            
  4564.             // Other
  4565.             loadKeyOptions();
  4566.             loadDPVersionConfig();
  4567.             loadServerVersionConfig();
  4568.             loadExtendersConfig();
  4569.             loadDaemonsConf();
  4570.            
  4571.             if (Config.USE_SAY_FILTER)
  4572.             {
  4573.                 loadFilter();
  4574.             }
  4575.             if (Config.BOT_PROTECTOR)
  4576.             {
  4577.                 loadQuestion();
  4578.             }
  4579.            
  4580.             loadTelnetConfig();
  4581.         }
  4582.         else if (ServerType.serverMode == ServerType.MODE_LOGINSERVER)
  4583.         {
  4584.             loadLoginStartConfig();
  4585.            
  4586.             loadTelnetConfig();
  4587.         }
  4588.         else
  4589.         {
  4590.             LOGGER.fatal("Could not Load Config: server mode was not set");
  4591.         }
  4592.     }
  4593.    
  4594.     public static boolean setParameterValue(final String pName, final String pValue)
  4595.     {
  4596.         if (pName.equalsIgnoreCase("GmLoginSpecialEffect"))
  4597.         {
  4598.             GM_SPECIAL_EFFECT = Boolean.parseBoolean(pValue);
  4599.         }
  4600.         else if (pName.equalsIgnoreCase("RateXp"))
  4601.         {
  4602.             RATE_XP = Float.parseFloat(pValue);
  4603.         }
  4604.         else if (pName.equalsIgnoreCase("RateSp"))
  4605.         {
  4606.             RATE_SP = Float.parseFloat(pValue);
  4607.         }
  4608.         else if (pName.equalsIgnoreCase("RatePartyXp"))
  4609.         {
  4610.             RATE_PARTY_XP = Float.parseFloat(pValue);
  4611.         }
  4612.         else if (pName.equalsIgnoreCase("RatePartySp"))
  4613.         {
  4614.             RATE_PARTY_SP = Float.parseFloat(pValue);
  4615.         }
  4616.         else if (pName.equalsIgnoreCase("RateQuestsReward"))
  4617.         {
  4618.             RATE_QUESTS_REWARD = Float.parseFloat(pValue);
  4619.         }
  4620.         else if (pName.equalsIgnoreCase("RateDropAdena"))
  4621.         {
  4622.             RATE_DROP_ADENA = Float.parseFloat(pValue);
  4623.         }
  4624.         else if (pName.equalsIgnoreCase("RateConsumableCost"))
  4625.         {
  4626.             RATE_CONSUMABLE_COST = Float.parseFloat(pValue);
  4627.         }
  4628.         else if (pName.equalsIgnoreCase("RateDropItems"))
  4629.         {
  4630.             RATE_DROP_ITEMS = Float.parseFloat(pValue);
  4631.         }
  4632.         else if (pName.equalsIgnoreCase("RateDropSealStones"))
  4633.         {
  4634.             RATE_DROP_SEAL_STONES = Float.parseFloat(pValue);
  4635.         }
  4636.         else if (pName.equalsIgnoreCase("RateDropSpoil"))
  4637.         {
  4638.             RATE_DROP_SPOIL = Float.parseFloat(pValue);
  4639.         }
  4640.         else if (pName.equalsIgnoreCase("RateDropManor"))
  4641.         {
  4642.             RATE_DROP_MANOR = Integer.parseInt(pValue);
  4643.         }
  4644.         else if (pName.equalsIgnoreCase("RateDropQuest"))
  4645.         {
  4646.             RATE_DROP_QUEST = Float.parseFloat(pValue);
  4647.         }
  4648.         else if (pName.equalsIgnoreCase("RateKarmaExpLost"))
  4649.         {
  4650.             RATE_KARMA_EXP_LOST = Float.parseFloat(pValue);
  4651.         }
  4652.         else if (pName.equalsIgnoreCase("RateSiegeGuardsPrice"))
  4653.         {
  4654.             RATE_SIEGE_GUARDS_PRICE = Float.parseFloat(pValue);
  4655.         }
  4656.         else if (pName.equalsIgnoreCase("PlayerDropLimit"))
  4657.         {
  4658.             PLAYER_DROP_LIMIT = Integer.parseInt(pValue);
  4659.         }
  4660.         else if (pName.equalsIgnoreCase("PlayerRateDrop"))
  4661.         {
  4662.             PLAYER_RATE_DROP = Integer.parseInt(pValue);
  4663.         }
  4664.         else if (pName.equalsIgnoreCase("PlayerRateDropItem"))
  4665.         {
  4666.             PLAYER_RATE_DROP_ITEM = Integer.parseInt(pValue);
  4667.         }
  4668.         else if (pName.equalsIgnoreCase("PlayerRateDropEquip"))
  4669.         {
  4670.             PLAYER_RATE_DROP_EQUIP = Integer.parseInt(pValue);
  4671.         }
  4672.         else if (pName.equalsIgnoreCase("PlayerRateDropEquipWeapon"))
  4673.         {
  4674.             PLAYER_RATE_DROP_EQUIP_WEAPON = Integer.parseInt(pValue);
  4675.         }
  4676.         else if (pName.equalsIgnoreCase("KarmaDropLimit"))
  4677.         {
  4678.             KARMA_DROP_LIMIT = Integer.parseInt(pValue);
  4679.         }
  4680.         else if (pName.equalsIgnoreCase("KarmaRateDrop"))
  4681.         {
  4682.             KARMA_RATE_DROP = Integer.parseInt(pValue);
  4683.         }
  4684.         else if (pName.equalsIgnoreCase("KarmaRateDropItem"))
  4685.         {
  4686.             KARMA_RATE_DROP_ITEM = Integer.parseInt(pValue);
  4687.         }
  4688.         else if (pName.equalsIgnoreCase("KarmaRateDropEquip"))
  4689.         {
  4690.             KARMA_RATE_DROP_EQUIP = Integer.parseInt(pValue);
  4691.         }
  4692.         else if (pName.equalsIgnoreCase("KarmaRateDropEquipWeapon"))
  4693.         {
  4694.             KARMA_RATE_DROP_EQUIP_WEAPON = Integer.parseInt(pValue);
  4695.         }
  4696.         else if (pName.equalsIgnoreCase("AutoDestroyDroppedItemAfter"))
  4697.         {
  4698.             AUTODESTROY_ITEM_AFTER = Integer.parseInt(pValue);
  4699.         }
  4700.         else if (pName.equalsIgnoreCase("DestroyPlayerDroppedItem"))
  4701.         {
  4702.             DESTROY_DROPPED_PLAYER_ITEM = Boolean.valueOf(pValue);
  4703.         }
  4704.         else if (pName.equalsIgnoreCase("DestroyEquipableItem"))
  4705.         {
  4706.             DESTROY_EQUIPABLE_PLAYER_ITEM = Boolean.valueOf(pValue);
  4707.         }
  4708.         else if (pName.equalsIgnoreCase("SaveDroppedItem"))
  4709.         {
  4710.             SAVE_DROPPED_ITEM = Boolean.valueOf(pValue);
  4711.         }
  4712.         else if (pName.equalsIgnoreCase("EmptyDroppedItemTableAfterLoad"))
  4713.         {
  4714.             EMPTY_DROPPED_ITEM_TABLE_AFTER_LOAD = Boolean.valueOf(pValue);
  4715.         }
  4716.         else if (pName.equalsIgnoreCase("SaveDroppedItemInterval"))
  4717.         {
  4718.             SAVE_DROPPED_ITEM_INTERVAL = Integer.parseInt(pValue);
  4719.         }
  4720.         else if (pName.equalsIgnoreCase("ClearDroppedItemTable"))
  4721.         {
  4722.             CLEAR_DROPPED_ITEM_TABLE = Boolean.valueOf(pValue);
  4723.         }
  4724.         else if (pName.equalsIgnoreCase("PreciseDropCalculation"))
  4725.         {
  4726.             PRECISE_DROP_CALCULATION = Boolean.valueOf(pValue);
  4727.         }
  4728.         else if (pName.equalsIgnoreCase("MultipleItemDrop"))
  4729.         {
  4730.             MULTIPLE_ITEM_DROP = Boolean.valueOf(pValue);
  4731.         }
  4732.         else if (pName.equalsIgnoreCase("CoordSynchronize"))
  4733.         {
  4734.             COORD_SYNCHRONIZE = Integer.valueOf(pValue);
  4735.         }
  4736.         else if (pName.equalsIgnoreCase("DeleteCharAfterDays"))
  4737.         {
  4738.             DELETE_DAYS = Integer.parseInt(pValue);
  4739.         }
  4740.         else if (pName.equalsIgnoreCase("AllowDiscardItem"))
  4741.         {
  4742.             ALLOW_DISCARDITEM = Boolean.valueOf(pValue);
  4743.         }
  4744.         else if (pName.equalsIgnoreCase("AllowFreight"))
  4745.         {
  4746.             ALLOW_FREIGHT = Boolean.valueOf(pValue);
  4747.         }
  4748.         else if (pName.equalsIgnoreCase("AllowWarehouse"))
  4749.         {
  4750.             ALLOW_WAREHOUSE = Boolean.valueOf(pValue);
  4751.         }
  4752.         else if (pName.equalsIgnoreCase("AllowWear"))
  4753.         {
  4754.             ALLOW_WEAR = Boolean.valueOf(pValue);
  4755.         }
  4756.         else if (pName.equalsIgnoreCase("WearDelay"))
  4757.         {
  4758.             WEAR_DELAY = Integer.parseInt(pValue);
  4759.         }
  4760.         else if (pName.equalsIgnoreCase("WearPrice"))
  4761.         {
  4762.             WEAR_PRICE = Integer.parseInt(pValue);
  4763.         }
  4764.         else if (pName.equalsIgnoreCase("AllowWater"))
  4765.         {
  4766.             ALLOW_WATER = Boolean.valueOf(pValue);
  4767.         }
  4768.         else if (pName.equalsIgnoreCase("AllowRentPet"))
  4769.         {
  4770.             ALLOW_RENTPET = Boolean.valueOf(pValue);
  4771.         }
  4772.         else if (pName.equalsIgnoreCase("AllowBoat"))
  4773.         {
  4774.             ALLOW_BOAT = Boolean.valueOf(pValue);
  4775.         }
  4776.         else if (pName.equalsIgnoreCase("AllowCursedWeapons"))
  4777.         {
  4778.             ALLOW_CURSED_WEAPONS = Boolean.valueOf(pValue);
  4779.         }
  4780.         else if (pName.equalsIgnoreCase("AllowManor"))
  4781.         {
  4782.             ALLOW_MANOR = Boolean.valueOf(pValue);
  4783.         }
  4784.         else if (pName.equalsIgnoreCase("BypassValidation"))
  4785.         {
  4786.             BYPASS_VALIDATION = Boolean.valueOf(pValue);
  4787.         }
  4788.         else if (pName.equalsIgnoreCase("CommunityType"))
  4789.         {
  4790.             COMMUNITY_TYPE = pValue.toLowerCase();
  4791.         }
  4792.         else if (pName.equalsIgnoreCase("BBSDefault"))
  4793.         {
  4794.             BBS_DEFAULT = pValue;
  4795.         }
  4796.         else if (pName.equalsIgnoreCase("ShowLevelOnCommunityBoard"))
  4797.         {
  4798.             SHOW_LEVEL_COMMUNITYBOARD = Boolean.valueOf(pValue);
  4799.         }
  4800.         else if (pName.equalsIgnoreCase("ShowStatusOnCommunityBoard"))
  4801.         {
  4802.             SHOW_STATUS_COMMUNITYBOARD = Boolean.valueOf(pValue);
  4803.         }
  4804.         else if (pName.equalsIgnoreCase("NamePageSizeOnCommunityBoard"))
  4805.         {
  4806.             NAME_PAGE_SIZE_COMMUNITYBOARD = Integer.parseInt(pValue);
  4807.         }
  4808.         else if (pName.equalsIgnoreCase("NamePerRowOnCommunityBoard"))
  4809.         {
  4810.             NAME_PER_ROW_COMMUNITYBOARD = Integer.parseInt(pValue);
  4811.         }
  4812.         else if (pName.equalsIgnoreCase("ShowNpcLevel"))
  4813.         {
  4814.             SHOW_NPC_LVL = Boolean.valueOf(pValue);
  4815.         }
  4816.         else if (pName.equalsIgnoreCase("ForceInventoryUpdate"))
  4817.         {
  4818.             FORCE_INVENTORY_UPDATE = Boolean.valueOf(pValue);
  4819.         }
  4820.         else if (pName.equalsIgnoreCase("AutoDeleteInvalidQuestData"))
  4821.         {
  4822.             AUTODELETE_INVALID_QUEST_DATA = Boolean.valueOf(pValue);
  4823.         }
  4824.         else if (pName.equalsIgnoreCase("MaximumOnlineUsers"))
  4825.         {
  4826.             MAXIMUM_ONLINE_USERS = Integer.parseInt(pValue);
  4827.         }
  4828.         else if (pName.equalsIgnoreCase("UnknownPacketProtection"))
  4829.         {
  4830.             ENABLE_UNK_PACKET_PROTECTION = Boolean.parseBoolean(pValue);
  4831.         }
  4832.         else if (pName.equalsIgnoreCase("UnknownPacketsBeforeBan"))
  4833.         {
  4834.             MAX_UNKNOWN_PACKETS = Integer.parseInt(pValue);
  4835.         }
  4836.         else if (pName.equalsIgnoreCase("UnknownPacketsPunishment"))
  4837.         {
  4838.             UNKNOWN_PACKETS_PUNiSHMENT = Integer.parseInt(pValue);
  4839.         }
  4840.         else if (pName.equalsIgnoreCase("ZoneTown"))
  4841.         {
  4842.             ZONE_TOWN = Integer.parseInt(pValue);
  4843.         }
  4844.         else if (pName.equalsIgnoreCase("MaximumUpdateDistance"))
  4845.         {
  4846.             MINIMUM_UPDATE_DISTANCE = Integer.parseInt(pValue);
  4847.         }
  4848.         else if (pName.equalsIgnoreCase("MinimumUpdateTime"))
  4849.         {
  4850.             MINIMUN_UPDATE_TIME = Integer.parseInt(pValue);
  4851.         }
  4852.         else if (pName.equalsIgnoreCase("CheckKnownList"))
  4853.         {
  4854.             CHECK_KNOWN = Boolean.valueOf(pValue);
  4855.         }
  4856.         else if (pName.equalsIgnoreCase("KnownListForgetDelay"))
  4857.         {
  4858.             KNOWNLIST_FORGET_DELAY = Integer.parseInt(pValue);
  4859.         }
  4860.         else if (pName.equalsIgnoreCase("UseDeepBlueDropRules"))
  4861.         {
  4862.             DEEPBLUE_DROP_RULES = Boolean.valueOf(pValue);
  4863.         }
  4864.         else if (pName.equalsIgnoreCase("AllowGuards"))
  4865.         {
  4866.             ALLOW_GUARDS = Boolean.valueOf(pValue);
  4867.         }
  4868.         else if (pName.equalsIgnoreCase("CancelLesserEffect"))
  4869.         {
  4870.             EFFECT_CANCELING = Boolean.valueOf(pValue);
  4871.         }
  4872.         else if (pName.equalsIgnoreCase("WyvernSpeed"))
  4873.         {
  4874.             WYVERN_SPEED = Integer.parseInt(pValue);
  4875.         }
  4876.         else if (pName.equalsIgnoreCase("StriderSpeed"))
  4877.         {
  4878.             STRIDER_SPEED = Integer.parseInt(pValue);
  4879.         }
  4880.         else if (pName.equalsIgnoreCase("MaximumSlotsForNoDwarf"))
  4881.         {
  4882.             INVENTORY_MAXIMUM_NO_DWARF = Integer.parseInt(pValue);
  4883.         }
  4884.         else if (pName.equalsIgnoreCase("MaximumSlotsForDwarf"))
  4885.         {
  4886.             INVENTORY_MAXIMUM_DWARF = Integer.parseInt(pValue);
  4887.         }
  4888.         else if (pName.equalsIgnoreCase("MaximumSlotsForGMPlayer"))
  4889.         {
  4890.             INVENTORY_MAXIMUM_GM = Integer.parseInt(pValue);
  4891.         }
  4892.         else if (pName.equalsIgnoreCase("MaximumWarehouseSlotsForNoDwarf"))
  4893.         {
  4894.             WAREHOUSE_SLOTS_NO_DWARF = Integer.parseInt(pValue);
  4895.         }
  4896.         else if (pName.equalsIgnoreCase("MaximumWarehouseSlotsForDwarf"))
  4897.         {
  4898.             WAREHOUSE_SLOTS_DWARF = Integer.parseInt(pValue);
  4899.         }
  4900.         else if (pName.equalsIgnoreCase("MaximumWarehouseSlotsForClan"))
  4901.         {
  4902.             WAREHOUSE_SLOTS_CLAN = Integer.parseInt(pValue);
  4903.         }
  4904.         else if (pName.equalsIgnoreCase("MaximumFreightSlots"))
  4905.         {
  4906.             FREIGHT_SLOTS = Integer.parseInt(pValue);
  4907.         }
  4908.         else if (pName.equalsIgnoreCase("AugmentationNGSkillChance"))
  4909.         {
  4910.             AUGMENTATION_NG_SKILL_CHANCE = Integer.parseInt(pValue);
  4911.         }
  4912.         else if (pName.equalsIgnoreCase("AugmentationMidSkillChance"))
  4913.         {
  4914.             AUGMENTATION_MID_SKILL_CHANCE = Integer.parseInt(pValue);
  4915.         }
  4916.         else if (pName.equalsIgnoreCase("AugmentationHighSkillChance"))
  4917.         {
  4918.             AUGMENTATION_HIGH_SKILL_CHANCE = Integer.parseInt(pValue);
  4919.         }
  4920.         else if (pName.equalsIgnoreCase("AugmentationTopSkillChance"))
  4921.         {
  4922.             AUGMENTATION_TOP_SKILL_CHANCE = Integer.parseInt(pValue);
  4923.         }
  4924.         else if (pName.equalsIgnoreCase("AugmentationBaseStatChance"))
  4925.         {
  4926.             AUGMENTATION_BASESTAT_CHANCE = Integer.parseInt(pValue);
  4927.         }
  4928.         else if (pName.equalsIgnoreCase("AugmentationNGGlowChance"))
  4929.         {
  4930.             AUGMENTATION_NG_GLOW_CHANCE = Integer.parseInt(pValue);
  4931.         }
  4932.         else if (pName.equalsIgnoreCase("AugmentationMidGlowChance"))
  4933.         {
  4934.             AUGMENTATION_MID_GLOW_CHANCE = Integer.parseInt(pValue);
  4935.         }
  4936.         else if (pName.equalsIgnoreCase("AugmentationHighGlowChance"))
  4937.         {
  4938.             AUGMENTATION_HIGH_GLOW_CHANCE = Integer.parseInt(pValue);
  4939.         }
  4940.         else if (pName.equalsIgnoreCase("AugmentationTopGlowChance"))
  4941.         {
  4942.             AUGMENTATION_TOP_GLOW_CHANCE = Integer.parseInt(pValue);
  4943.         }
  4944.         else if (pName.equalsIgnoreCase("EnchantSafeMax"))
  4945.         {
  4946.             ENCHANT_SAFE_MAX = Integer.parseInt(pValue);
  4947.         }
  4948.         else if (pName.equalsIgnoreCase("EnchantSafeMaxFull"))
  4949.         {
  4950.             ENCHANT_SAFE_MAX_FULL = Integer.parseInt(pValue);
  4951.         }
  4952.         else if (pName.equalsIgnoreCase("GMOverEnchant"))
  4953.         {
  4954.             GM_OVER_ENCHANT = Integer.parseInt(pValue);
  4955.         }
  4956.         else if (pName.equalsIgnoreCase("HpRegenMultiplier"))
  4957.         {
  4958.             HP_REGEN_MULTIPLIER = Double.parseDouble(pValue);
  4959.         }
  4960.         else if (pName.equalsIgnoreCase("MpRegenMultiplier"))
  4961.         {
  4962.             MP_REGEN_MULTIPLIER = Double.parseDouble(pValue);
  4963.         }
  4964.         else if (pName.equalsIgnoreCase("CpRegenMultiplier"))
  4965.         {
  4966.             CP_REGEN_MULTIPLIER = Double.parseDouble(pValue);
  4967.         }
  4968.         else if (pName.equalsIgnoreCase("RaidHpRegenMultiplier"))
  4969.         {
  4970.             RAID_HP_REGEN_MULTIPLIER = Double.parseDouble(pValue);
  4971.         }
  4972.         else if (pName.equalsIgnoreCase("RaidMpRegenMultiplier"))
  4973.         {
  4974.             RAID_MP_REGEN_MULTIPLIER = Double.parseDouble(pValue);
  4975.         }
  4976.         else if (pName.equalsIgnoreCase("RaidPhysicalDefenceMultiplier"))
  4977.         {
  4978.             RAID_P_DEFENCE_MULTIPLIER = Double.parseDouble(pValue) / 100;
  4979.         }
  4980.         else if (pName.equalsIgnoreCase("RaidMagicalDefenceMultiplier"))
  4981.         {
  4982.             RAID_M_DEFENCE_MULTIPLIER = Double.parseDouble(pValue) / 100;
  4983.         }
  4984.         else if (pName.equalsIgnoreCase("RaidMinionRespawnTime"))
  4985.         {
  4986.             RAID_MINION_RESPAWN_TIMER = Integer.parseInt(pValue);
  4987.         }
  4988.         else if (pName.equalsIgnoreCase("StartingAdena"))
  4989.         {
  4990.             STARTING_ADENA = Integer.parseInt(pValue);
  4991.         }
  4992.         else if (pName.equalsIgnoreCase("UnstuckInterval"))
  4993.         {
  4994.             UNSTUCK_INTERVAL = Integer.parseInt(pValue);
  4995.         }
  4996.         else if (pName.equalsIgnoreCase("PlayerSpawnProtection"))
  4997.         {
  4998.             PLAYER_SPAWN_PROTECTION = Integer.parseInt(pValue);
  4999.         }
  5000.         else if (pName.equalsIgnoreCase("PlayerFakeDeathUpProtection"))
  5001.         {
  5002.             PLAYER_FAKEDEATH_UP_PROTECTION = Integer.parseInt(pValue);
  5003.         }
  5004.         else if (pName.equalsIgnoreCase("PartyXpCutoffMethod"))
  5005.         {
  5006.             PARTY_XP_CUTOFF_METHOD = pValue;
  5007.         }
  5008.         else if (pName.equalsIgnoreCase("PartyXpCutoffPercent"))
  5009.         {
  5010.             PARTY_XP_CUTOFF_PERCENT = Double.parseDouble(pValue);
  5011.         }
  5012.         else if (pName.equalsIgnoreCase("PartyXpCutoffLevel"))
  5013.         {
  5014.             PARTY_XP_CUTOFF_LEVEL = Integer.parseInt(pValue);
  5015.         }
  5016.         else if (pName.equalsIgnoreCase("RespawnRestoreCP"))
  5017.         {
  5018.             RESPAWN_RESTORE_CP = Double.parseDouble(pValue) / 100;
  5019.         }
  5020.         else if (pName.equalsIgnoreCase("RespawnRestoreHP"))
  5021.         {
  5022.             RESPAWN_RESTORE_HP = Double.parseDouble(pValue) / 100;
  5023.         }
  5024.         else if (pName.equalsIgnoreCase("RespawnRestoreMP"))
  5025.         {
  5026.             RESPAWN_RESTORE_MP = Double.parseDouble(pValue) / 100;
  5027.         }
  5028.         else if (pName.equalsIgnoreCase("MaxPvtStoreSlotsDwarf"))
  5029.         {
  5030.             MAX_PVTSTORE_SLOTS_DWARF = Integer.parseInt(pValue);
  5031.         }
  5032.         else if (pName.equalsIgnoreCase("MaxPvtStoreSlotsOther"))
  5033.         {
  5034.             MAX_PVTSTORE_SLOTS_OTHER = Integer.parseInt(pValue);
  5035.         }
  5036.         else if (pName.equalsIgnoreCase("StoreSkillCooltime"))
  5037.         {
  5038.             STORE_SKILL_COOLTIME = Boolean.valueOf(pValue);
  5039.         }
  5040.         else if (pName.equalsIgnoreCase("AnnounceMammonSpawn"))
  5041.         {
  5042.             ANNOUNCE_MAMMON_SPAWN = Boolean.valueOf(pValue);
  5043.         }
  5044.         else if (pName.equalsIgnoreCase("AltGameTiredness"))
  5045.         {
  5046.             ALT_GAME_TIREDNESS = Boolean.valueOf(pValue);
  5047.         }
  5048.         else if (pName.equalsIgnoreCase("AltGameCreation"))
  5049.         {
  5050.             ALT_GAME_CREATION = Boolean.valueOf(pValue);
  5051.         }
  5052.         else if (pName.equalsIgnoreCase("AltGameCreationSpeed"))
  5053.         {
  5054.             ALT_GAME_CREATION_SPEED = Double.parseDouble(pValue);
  5055.         }
  5056.         else if (pName.equalsIgnoreCase("AltGameCreationXpRate"))
  5057.         {
  5058.             ALT_GAME_CREATION_XP_RATE = Double.parseDouble(pValue);
  5059.         }
  5060.         else if (pName.equalsIgnoreCase("AltGameCreationSpRate"))
  5061.         {
  5062.             ALT_GAME_CREATION_SP_RATE = Double.parseDouble(pValue);
  5063.         }
  5064.         else if (pName.equalsIgnoreCase("AltWeightLimit"))
  5065.         {
  5066.             ALT_WEIGHT_LIMIT = Double.parseDouble(pValue);
  5067.         }
  5068.         else if (pName.equalsIgnoreCase("AltBlacksmithUseRecipes"))
  5069.         {
  5070.             ALT_BLACKSMITH_USE_RECIPES = Boolean.valueOf(pValue);
  5071.         }
  5072.         else if (pName.equalsIgnoreCase("AltGameSkillLearn"))
  5073.         {
  5074.             ALT_GAME_SKILL_LEARN = Boolean.valueOf(pValue);
  5075.         }
  5076.         else if (pName.equalsIgnoreCase("RemoveCastleCirclets"))
  5077.         {
  5078.             REMOVE_CASTLE_CIRCLETS = Boolean.valueOf(pValue);
  5079.         }
  5080.         else if (pName.equalsIgnoreCase("AltGameCancelByHit"))
  5081.         {
  5082.             ALT_GAME_CANCEL_BOW = pValue.equalsIgnoreCase("bow") || pValue.equalsIgnoreCase("all");
  5083.             ALT_GAME_CANCEL_CAST = pValue.equalsIgnoreCase("cast") || pValue.equalsIgnoreCase("all");
  5084.         }
  5085.         else if (pName.equalsIgnoreCase("AltShieldBlocks"))
  5086.         {
  5087.             ALT_GAME_SHIELD_BLOCKS = Boolean.valueOf(pValue);
  5088.         }
  5089.         else if (pName.equalsIgnoreCase("AltPerfectShieldBlockRate"))
  5090.         {
  5091.             ALT_PERFECT_SHLD_BLOCK = Integer.parseInt(pValue);
  5092.         }
  5093.         else if (pName.equalsIgnoreCase("Delevel"))
  5094.         {
  5095.             ALT_GAME_DELEVEL = Boolean.valueOf(pValue);
  5096.         }
  5097.         else if (pName.equalsIgnoreCase("MagicFailures"))
  5098.         {
  5099.             ALT_GAME_MAGICFAILURES = Boolean.valueOf(pValue);
  5100.         }
  5101.         else if (pName.equalsIgnoreCase("AltGameMobAttackAI"))
  5102.         {
  5103.             ALT_GAME_MOB_ATTACK_AI = Boolean.valueOf(pValue);
  5104.         }
  5105.         else if (pName.equalsIgnoreCase("AltMobAgroInPeaceZone"))
  5106.         {
  5107.             ALT_MOB_AGRO_IN_PEACEZONE = Boolean.valueOf(pValue);
  5108.         }
  5109.         else if (pName.equalsIgnoreCase("AltGameExponentXp"))
  5110.         {
  5111.             ALT_GAME_EXPONENT_XP = Float.parseFloat(pValue);
  5112.         }
  5113.         else if (pName.equalsIgnoreCase("AltGameExponentSp"))
  5114.         {
  5115.             ALT_GAME_EXPONENT_SP = Float.parseFloat(pValue);
  5116.         }
  5117.         else if (pName.equalsIgnoreCase("AllowClassMasters"))
  5118.         {
  5119.             ALLOW_CLASS_MASTERS = Boolean.valueOf(pValue);
  5120.         }
  5121.         else if (pName.equalsIgnoreCase("AltGameFreights"))
  5122.         {
  5123.             ALT_GAME_FREIGHTS = Boolean.valueOf(pValue);
  5124.         }
  5125.         else if (pName.equalsIgnoreCase("AltGameFreightPrice"))
  5126.         {
  5127.             ALT_GAME_FREIGHT_PRICE = Integer.parseInt(pValue);
  5128.         }
  5129.         else if (pName.equalsIgnoreCase("AltPartyRange"))
  5130.         {
  5131.             ALT_PARTY_RANGE = Integer.parseInt(pValue);
  5132.         }
  5133.         else if (pName.equalsIgnoreCase("AltPartyRange2"))
  5134.         {
  5135.             ALT_PARTY_RANGE2 = Integer.parseInt(pValue);
  5136.         }
  5137.         else if (pName.equalsIgnoreCase("CraftingEnabled"))
  5138.         {
  5139.             IS_CRAFTING_ENABLED = Boolean.valueOf(pValue);
  5140.         }
  5141.         else if (pName.equalsIgnoreCase("LifeCrystalNeeded"))
  5142.         {
  5143.             LIFE_CRYSTAL_NEEDED = Boolean.valueOf(pValue);
  5144.         }
  5145.         else if (pName.equalsIgnoreCase("SpBookNeeded"))
  5146.         {
  5147.             SP_BOOK_NEEDED = Boolean.valueOf(pValue);
  5148.         }
  5149.         else if (pName.equalsIgnoreCase("AutoLoot"))
  5150.         {
  5151.             AUTO_LOOT = Boolean.valueOf(pValue);
  5152.         }
  5153.         else if (pName.equalsIgnoreCase("AutoLootHerbs"))
  5154.         {
  5155.             AUTO_LOOT_HERBS = Boolean.valueOf(pValue);
  5156.         }
  5157.         else if (pName.equalsIgnoreCase("AltKarmaPlayerCanBeKilledInPeaceZone"))
  5158.         {
  5159.             ALT_GAME_KARMA_PLAYER_CAN_BE_KILLED_IN_PEACEZONE = Boolean.valueOf(pValue);
  5160.         }
  5161.         else if (pName.equalsIgnoreCase("AltKarmaPlayerCanShop"))
  5162.         {
  5163.             ALT_GAME_KARMA_PLAYER_CAN_SHOP = Boolean.valueOf(pValue);
  5164.         }
  5165.         else if (pName.equalsIgnoreCase("AltKarmaPlayerCanUseGK"))
  5166.         {
  5167.             ALT_GAME_KARMA_PLAYER_CAN_USE_GK = Boolean.valueOf(pValue);
  5168.         }
  5169.         else if (pName.equalsIgnoreCase("AltKarmaFlagPlayerCanUseBuffer"))
  5170.         {
  5171.             FLAGED_PLAYER_USE_BUFFER = Boolean.valueOf(pValue);
  5172.         }
  5173.         else if (pName.equalsIgnoreCase("AltKarmaPlayerCanTeleport"))
  5174.         {
  5175.             ALT_GAME_KARMA_PLAYER_CAN_TELEPORT = Boolean.valueOf(pValue);
  5176.         }
  5177.         else if (pName.equalsIgnoreCase("AltKarmaPlayerCanTrade"))
  5178.         {
  5179.             ALT_GAME_KARMA_PLAYER_CAN_TRADE = Boolean.valueOf(pValue);
  5180.         }
  5181.         else if (pName.equalsIgnoreCase("AltKarmaPlayerCanUseWareHouse"))
  5182.         {
  5183.             ALT_GAME_KARMA_PLAYER_CAN_USE_WAREHOUSE = Boolean.valueOf(pValue);
  5184.         }
  5185.         else if (pName.equalsIgnoreCase("AltRequireCastleForDawn"))
  5186.         {
  5187.             ALT_GAME_REQUIRE_CASTLE_DAWN = Boolean.valueOf(pValue);
  5188.         }
  5189.         else if (pName.equalsIgnoreCase("AltRequireClanCastle"))
  5190.         {
  5191.             ALT_GAME_REQUIRE_CLAN_CASTLE = Boolean.valueOf(pValue);
  5192.         }
  5193.         else if (pName.equalsIgnoreCase("AltFreeTeleporting"))
  5194.         {
  5195.             ALT_GAME_FREE_TELEPORT = Boolean.valueOf(pValue);
  5196.         }
  5197.         else if (pName.equalsIgnoreCase("AltSubClassWithoutQuests"))
  5198.         {
  5199.             ALT_GAME_SUBCLASS_WITHOUT_QUESTS = Boolean.valueOf(pValue);
  5200.         }
  5201.         else if (pName.equalsIgnoreCase("AltRestoreEffectOnSub"))
  5202.         {
  5203.             ALT_RESTORE_EFFECTS_ON_SUBCLASS_CHANGE = Boolean.valueOf(pValue);
  5204.         }
  5205.         else if (pName.equalsIgnoreCase("AltNewCharAlwaysIsNewbie"))
  5206.         {
  5207.             ALT_GAME_NEW_CHAR_ALWAYS_IS_NEWBIE = Boolean.valueOf(pValue);
  5208.         }
  5209.         else if (pName.equalsIgnoreCase("AltMembersCanWithdrawFromClanWH"))
  5210.         {
  5211.             ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH = Boolean.valueOf(pValue);
  5212.         }
  5213.         else if (pName.equalsIgnoreCase("DwarfRecipeLimit"))
  5214.         {
  5215.             DWARF_RECIPE_LIMIT = Integer.parseInt(pValue);
  5216.         }
  5217.         else if (pName.equalsIgnoreCase("CommonRecipeLimit"))
  5218.         {
  5219.             COMMON_RECIPE_LIMIT = Integer.parseInt(pValue);
  5220.         }
  5221.         else if (pName.equalsIgnoreCase("ChampionEnable"))
  5222.         {
  5223.             L2JMOD_CHAMPION_ENABLE = Boolean.valueOf(pValue);
  5224.         }
  5225.         else if (pName.equalsIgnoreCase("ChampionFrequency"))
  5226.         {
  5227.             L2JMOD_CHAMPION_FREQUENCY = Integer.parseInt(pValue);
  5228.         }
  5229.         else if (pName.equalsIgnoreCase("ChampionMinLevel"))
  5230.         {
  5231.             L2JMOD_CHAMP_MIN_LVL = Integer.parseInt(pValue);
  5232.         }
  5233.         else if (pName.equalsIgnoreCase("ChampionMaxLevel"))
  5234.         {
  5235.             L2JMOD_CHAMP_MAX_LVL = Integer.parseInt(pValue);
  5236.         }
  5237.         else if (pName.equalsIgnoreCase("ChampionHp"))
  5238.         {
  5239.             L2JMOD_CHAMPION_HP = Integer.parseInt(pValue);
  5240.         }
  5241.         else if (pName.equalsIgnoreCase("ChampionHpRegen"))
  5242.         {
  5243.             L2JMOD_CHAMPION_HP_REGEN = Float.parseFloat(pValue);
  5244.         }
  5245.         else if (pName.equalsIgnoreCase("ChampionRewards"))
  5246.         {
  5247.             L2JMOD_CHAMPION_REWARDS = Integer.parseInt(pValue);
  5248.         }
  5249.         else if (pName.equalsIgnoreCase("ChampionAdenasRewards"))
  5250.         {
  5251.             L2JMOD_CHAMPION_ADENAS_REWARDS = Integer.parseInt(pValue);
  5252.         }
  5253.         else if (pName.equalsIgnoreCase("ChampionAtk"))
  5254.         {
  5255.             L2JMOD_CHAMPION_ATK = Float.parseFloat(pValue);
  5256.         }
  5257.         else if (pName.equalsIgnoreCase("ChampionSpdAtk"))
  5258.         {
  5259.             L2JMOD_CHAMPION_SPD_ATK = Float.parseFloat(pValue);
  5260.         }
  5261.         else if (pName.equalsIgnoreCase("ChampionRewardItem"))
  5262.         {
  5263.             L2JMOD_CHAMPION_REWARD = Integer.parseInt(pValue);
  5264.         }
  5265.         else if (pName.equalsIgnoreCase("ChampionRewardItemID"))
  5266.         {
  5267.             L2JMOD_CHAMPION_REWARD_ID = Integer.parseInt(pValue);
  5268.         }
  5269.         else if (pName.equalsIgnoreCase("ChampionRewardItemQty"))
  5270.         {
  5271.             L2JMOD_CHAMPION_REWARD_QTY = Integer.parseInt(pValue);
  5272.         }
  5273.         else if (pName.equalsIgnoreCase("AllowWedding"))
  5274.         {
  5275.             L2JMOD_ALLOW_WEDDING = Boolean.valueOf(pValue);
  5276.         }
  5277.         else if (pName.equalsIgnoreCase("WeddingPrice"))
  5278.         {
  5279.             L2JMOD_WEDDING_PRICE = Integer.parseInt(pValue);
  5280.         }
  5281.         else if (pName.equalsIgnoreCase("WeddingPunishInfidelity"))
  5282.         {
  5283.             L2JMOD_WEDDING_PUNISH_INFIDELITY = Boolean.parseBoolean(pValue);
  5284.         }
  5285.         else if (pName.equalsIgnoreCase("WeddingTeleport"))
  5286.         {
  5287.             L2JMOD_WEDDING_TELEPORT = Boolean.parseBoolean(pValue);
  5288.         }
  5289.         else if (pName.equalsIgnoreCase("WeddingTeleportPrice"))
  5290.         {
  5291.             L2JMOD_WEDDING_TELEPORT_PRICE = Integer.parseInt(pValue);
  5292.         }
  5293.         else if (pName.equalsIgnoreCase("WeddingTeleportDuration"))
  5294.         {
  5295.             L2JMOD_WEDDING_TELEPORT_DURATION = Integer.parseInt(pValue);
  5296.         }
  5297.         else if (pName.equalsIgnoreCase("WeddingAllowSameSex"))
  5298.         {
  5299.             L2JMOD_WEDDING_SAMESEX = Boolean.parseBoolean(pValue);
  5300.         }
  5301.         else if (pName.equalsIgnoreCase("WeddingFormalWear"))
  5302.         {
  5303.             L2JMOD_WEDDING_FORMALWEAR = Boolean.parseBoolean(pValue);
  5304.         }
  5305.         else if (pName.equalsIgnoreCase("WeddingDivorceCosts"))
  5306.         {
  5307.             L2JMOD_WEDDING_DIVORCE_COSTS = Integer.parseInt(pValue);
  5308.         }
  5309.         else if (pName.equalsIgnoreCase("TvTEvenTeams"))
  5310.         {
  5311.             TVT_EVEN_TEAMS = pValue;
  5312.         }
  5313.         else if (pName.equalsIgnoreCase("TvTAllowInterference"))
  5314.         {
  5315.             TVT_ALLOW_INTERFERENCE = Boolean.parseBoolean(pValue);
  5316.         }
  5317.         else if (pName.equalsIgnoreCase("TvTAllowPotions"))
  5318.         {
  5319.             TVT_ALLOW_POTIONS = Boolean.parseBoolean(pValue);
  5320.         }
  5321.         else if (pName.equalsIgnoreCase("TvTAllowSummon"))
  5322.         {
  5323.             TVT_ALLOW_SUMMON = Boolean.parseBoolean(pValue);
  5324.         }
  5325.         else if (pName.equalsIgnoreCase("TvTOnStartRemoveAllEffects"))
  5326.         {
  5327.             TVT_ON_START_REMOVE_ALL_EFFECTS = Boolean.parseBoolean(pValue);
  5328.         }
  5329.         else if (pName.equalsIgnoreCase("TvTOnStartUnsummonPet"))
  5330.         {
  5331.             TVT_ON_START_UNSUMMON_PET = Boolean.parseBoolean(pValue);
  5332.         }
  5333.         else if (pName.equalsIgnoreCase("TVTReviveDelay"))
  5334.         {
  5335.             TVT_REVIVE_DELAY = Long.parseLong(pValue);
  5336.         }
  5337.         else if (pName.equalsIgnoreCase("MinKarma"))
  5338.         {
  5339.             KARMA_MIN_KARMA = Integer.parseInt(pValue);
  5340.         }
  5341.         else if (pName.equalsIgnoreCase("MaxKarma"))
  5342.         {
  5343.             KARMA_MAX_KARMA = Integer.parseInt(pValue);
  5344.         }
  5345.         else if (pName.equalsIgnoreCase("XPDivider"))
  5346.         {
  5347.             KARMA_XP_DIVIDER = Integer.parseInt(pValue);
  5348.         }
  5349.         else if (pName.equalsIgnoreCase("BaseKarmaLost"))
  5350.         {
  5351.             KARMA_LOST_BASE = Integer.parseInt(pValue);
  5352.         }
  5353.         else if (pName.equalsIgnoreCase("CanGMDropEquipment"))
  5354.         {
  5355.             KARMA_DROP_GM = Boolean.valueOf(pValue);
  5356.         }
  5357.         else if (pName.equalsIgnoreCase("AwardPKKillPVPPoint"))
  5358.         {
  5359.             KARMA_AWARD_PK_KILL = Boolean.valueOf(pValue);
  5360.         }
  5361.         else if (pName.equalsIgnoreCase("MinimumPKRequiredToDrop"))
  5362.         {
  5363.             KARMA_PK_LIMIT = Integer.parseInt(pValue);
  5364.         }
  5365.         else if (pName.equalsIgnoreCase("PvPVsNormalTime"))
  5366.         {
  5367.             PVP_NORMAL_TIME = Integer.parseInt(pValue);
  5368.         }
  5369.         else if (pName.equalsIgnoreCase("PvPVsPvPTime"))
  5370.         {
  5371.             PVP_PVP_TIME = Integer.parseInt(pValue);
  5372.         }
  5373.         else if (pName.equalsIgnoreCase("GlobalChat"))
  5374.         {
  5375.             DEFAULT_GLOBAL_CHAT = pValue;
  5376.         }
  5377.         else if (pName.equalsIgnoreCase("TradeChat"))
  5378.         {
  5379.             DEFAULT_TRADE_CHAT = pValue;
  5380.         }
  5381.         else if (pName.equalsIgnoreCase("MenuStyle"))
  5382.         {
  5383.             GM_ADMIN_MENU_STYLE = pValue;
  5384.         }
  5385.         else if (pName.equalsIgnoreCase("AllowVersionCommand"))
  5386.         {
  5387.             ALLOW_VERSION_COMMAND = Boolean.valueOf(pValue);
  5388.         }
  5389.         else if (pName.equalsIgnoreCase("MaxPAtkSpeed"))
  5390.         {
  5391.             MAX_PATK_SPEED = Integer.parseInt(pValue);
  5392.         }
  5393.         else if (pName.equalsIgnoreCase("MaxMAtkSpeed"))
  5394.         {
  5395.             MAX_MATK_SPEED = Integer.parseInt(pValue);
  5396.         }
  5397.         else if (pName.equalsIgnoreCase("ServerNameEnabled"))
  5398.         {
  5399.             ALT_SERVER_NAME_ENABLED = Boolean.valueOf(pValue);
  5400.         }
  5401.         else if (pName.equalsIgnoreCase("ServerName"))
  5402.         {
  5403.             ALT_Server_Name = String.valueOf(pValue);
  5404.         }
  5405.         else if (pName.equalsIgnoreCase("FlagedPlayerCanUseGK"))
  5406.         {
  5407.             FLAGED_PLAYER_CAN_USE_GK = Boolean.parseBoolean(pValue);
  5408.         }
  5409.         else if (pName.equalsIgnoreCase("AddExpAtPvp"))
  5410.         {
  5411.             ADD_EXP = Integer.parseInt(pValue);
  5412.         }
  5413.         else if (pName.equalsIgnoreCase("AddSpAtPvp"))
  5414.         {
  5415.             ADD_SP = Integer.parseInt(pValue);
  5416.         }
  5417.         else if (pName.equalsIgnoreCase("CastleShieldRestriction"))
  5418.         {
  5419.             CASTLE_SHIELD = Boolean.valueOf(pValue);
  5420.         }
  5421.         else if (pName.equalsIgnoreCase("ClanHallShieldRestriction"))
  5422.         {
  5423.             CLANHALL_SHIELD = Boolean.valueOf(pValue);
  5424.         }
  5425.         else if (pName.equalsIgnoreCase("ApellaArmorsRestriction"))
  5426.         {
  5427.             APELLA_ARMORS = Boolean.valueOf(pValue);
  5428.         }
  5429.         else if (pName.equalsIgnoreCase("OathArmorsRestriction"))
  5430.         {
  5431.             OATH_ARMORS = Boolean.valueOf(pValue);
  5432.         }
  5433.         else if (pName.equalsIgnoreCase("CastleLordsCrownRestriction"))
  5434.         {
  5435.             CASTLE_CROWN = Boolean.valueOf(pValue);
  5436.         }
  5437.         else if (pName.equalsIgnoreCase("CastleCircletsRestriction"))
  5438.         {
  5439.             CASTLE_CIRCLETS = Boolean.valueOf(pValue);
  5440.         }
  5441.         else if (pName.equalsIgnoreCase("AllowRaidBossPetrified"))
  5442.         {
  5443.             ALLOW_RAID_BOSS_PETRIFIED = Boolean.valueOf(pValue);
  5444.         }
  5445.         else if (pName.equalsIgnoreCase("AllowLowLevelTrade"))
  5446.         {
  5447.             ALLOW_LOW_LEVEL_TRADE = Boolean.parseBoolean(pValue);
  5448.         }
  5449.         else if (pName.equalsIgnoreCase("AllowPotsInPvP"))
  5450.         {
  5451.             ALLOW_POTS_IN_PVP = Boolean.parseBoolean(pValue);
  5452.         }
  5453.         else if (pName.equalsIgnoreCase("StartingAncientAdena"))
  5454.         {
  5455.             STARTING_AA = Integer.parseInt(pValue);
  5456.         }
  5457.         else if (pName.equalsIgnoreCase("AnnouncePvPKill") && !ANNOUNCE_ALL_KILL)
  5458.         {
  5459.             ANNOUNCE_PVP_KILL = Boolean.valueOf(pValue);
  5460.         }
  5461.         else if (pName.equalsIgnoreCase("AnnouncePkKill") && !ANNOUNCE_ALL_KILL)
  5462.         {
  5463.             ANNOUNCE_PK_KILL = Boolean.valueOf(pValue);
  5464.         }
  5465.         else if (pName.equalsIgnoreCase("AnnounceAllKill") && !ANNOUNCE_PVP_KILL && !ANNOUNCE_PK_KILL)
  5466.         {
  5467.             ANNOUNCE_ALL_KILL = Boolean.valueOf(pValue);
  5468.         }
  5469.         else if (pName.equalsIgnoreCase("DisableWeightPenalty"))
  5470.         {
  5471.             DISABLE_WEIGHT_PENALTY = Boolean.valueOf(pValue);
  5472.         }
  5473.         else if (pName.equalsIgnoreCase("CTFEvenTeams"))
  5474.         {
  5475.             CTF_EVEN_TEAMS = pValue;
  5476.         }
  5477.         else if (pName.equalsIgnoreCase("CTFAllowInterference"))
  5478.         {
  5479.             CTF_ALLOW_INTERFERENCE = Boolean.parseBoolean(pValue);
  5480.         }
  5481.         else if (pName.equalsIgnoreCase("CTFAllowPotions"))
  5482.         {
  5483.             CTF_ALLOW_POTIONS = Boolean.parseBoolean(pValue);
  5484.         }
  5485.         else if (pName.equalsIgnoreCase("CTFAllowSummon"))
  5486.         {
  5487.             CTF_ALLOW_SUMMON = Boolean.parseBoolean(pValue);
  5488.         }
  5489.         else if (pName.equalsIgnoreCase("CTFOnStartRemoveAllEffects"))
  5490.         {
  5491.             CTF_ON_START_REMOVE_ALL_EFFECTS = Boolean.parseBoolean(pValue);
  5492.         }
  5493.         else if (pName.equalsIgnoreCase("CTFOnStartUnsummonPet"))
  5494.         {
  5495.             CTF_ON_START_UNSUMMON_PET = Boolean.parseBoolean(pValue);
  5496.         }
  5497.         else if (pName.equalsIgnoreCase("DMAllowInterference"))
  5498.         {
  5499.             DM_ALLOW_INTERFERENCE = Boolean.parseBoolean(pValue);
  5500.         }
  5501.         else if (pName.equalsIgnoreCase("DMAllowPotions"))
  5502.         {
  5503.             DM_ALLOW_POTIONS = Boolean.parseBoolean(pValue);
  5504.         }
  5505.         else if (pName.equalsIgnoreCase("DMAllowSummon"))
  5506.         {
  5507.             DM_ALLOW_SUMMON = Boolean.parseBoolean(pValue);
  5508.         }
  5509.         else if (pName.equalsIgnoreCase("DMJoinWithCursedWeapon"))
  5510.         {
  5511.             DM_JOIN_CURSED = Boolean.parseBoolean(pValue);
  5512.         }
  5513.         else if (pName.equalsIgnoreCase("DMOnStartRemoveAllEffects"))
  5514.         {
  5515.             DM_ON_START_REMOVE_ALL_EFFECTS = Boolean.parseBoolean(pValue);
  5516.         }
  5517.         else if (pName.equalsIgnoreCase("DMOnStartUnsummonPet"))
  5518.         {
  5519.             DM_ON_START_UNSUMMON_PET = Boolean.parseBoolean(pValue);
  5520.         }
  5521.         else if (pName.equalsIgnoreCase("DMReviveDelay"))
  5522.         {
  5523.             DM_REVIVE_DELAY = Long.parseLong(pValue);
  5524.         }
  5525.         else
  5526.             return false;
  5527.         return true;
  5528.     }
  5529.    
  5530.     public static void saveHexid(final int serverId, final String string)
  5531.     {
  5532.         Config.saveHexid(serverId, string, HEXID_FILE);
  5533.     }
  5534.    
  5535.     public static void saveHexid(final int serverId, final String hexId, final String fileName)
  5536.     {
  5537.         OutputStream out = null;
  5538.         try
  5539.         {
  5540.             final Properties hexSetting = new Properties();
  5541.             final File file = new File(fileName);
  5542.             if (file.createNewFile())
  5543.             {
  5544.                 out = new FileOutputStream(file);
  5545.                 hexSetting.setProperty("ServerID", String.valueOf(serverId));
  5546.                 hexSetting.setProperty("HexID", hexId);
  5547.                 hexSetting.store(out, "the hexID to auth into login");
  5548.             }
  5549.         }
  5550.         catch (final Exception e)
  5551.         {
  5552.             LOGGER.warn("Failed to save hex id to " + fileName + " File.");
  5553.             e.printStackTrace();
  5554.         }
  5555.         finally
  5556.         {
  5557.            
  5558.             if (out != null)
  5559.                 try
  5560.                 {
  5561.                     out.close();
  5562.                 }
  5563.                 catch (final Exception e)
  5564.                 {
  5565.                     e.printStackTrace();
  5566.                 }
  5567.            
  5568.         }
  5569.     }
  5570.    
  5571.     public static void unallocateFilterBuffer()
  5572.     {
  5573.         LOGGER.info("Cleaning Chat Filter..");
  5574.         FILTER_LIST.clear();
  5575.     }
  5576. }
Add Comment
Please, Sign In to add comment