Advertisement
Guest User

Untitled

a guest
Apr 21st, 2016
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 66.31 KB | None | 0 0
  1. /*
  2.  * This program is free software: you can redistribute it and/or modify it under
  3.  * the terms of the GNU General Public License as published by the Free Software
  4.  * Foundation, either version 3 of the License, or (at your option) any later
  5.  * version.
  6.  *
  7.  * This program is distributed in the hope that it will be useful, but WITHOUT
  8.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9.  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10.  * details.
  11.  *
  12.  * You should have received a copy of the GNU General Public License along with
  13.  * this program. If not, see <http://www.gnu.org/licenses/>.
  14.  */
  15. package net.sf.l2j;
  16.  
  17. import java.io.File;
  18. import java.io.FileOutputStream;
  19. import java.io.IOException;
  20. import java.io.OutputStream;
  21. import java.math.BigInteger;
  22. import java.util.ArrayList;
  23. import java.util.Arrays;
  24. import java.util.HashMap;
  25. import java.util.List;
  26. import java.util.Map;
  27. import java.util.Properties;
  28. import java.util.StringTokenizer;
  29. import java.util.logging.Logger;
  30.  
  31. import net.sf.l2j.commons.config.ExProperties;
  32. import net.sf.l2j.gameserver.geoengine.geodata.GeoFormat;
  33. import net.sf.l2j.gameserver.model.holder.BuffSkillHolder;
  34. import net.sf.l2j.gameserver.model.holder.IntIntHolder;
  35.  
  36. /**
  37.  * This class contains global server configuration.<br>
  38.  * It has static final fields initialized from configuration files.<br>
  39.  * @author mkizub
  40.  */
  41. public final class Config
  42. {
  43.     protected static final Logger _log = Logger.getLogger(Config.class.getName());
  44.    
  45.     public static final String CLANS_FILE = "./config/clans.properties";
  46.     public static final String EVENTS_FILE = "./config/events.properties";
  47.     public static final String GEOENGINE_FILE = "./config/geoengine.properties";
  48.     public static final String HEXID_FILE = "./config/hexid.txt";
  49.     public static final String LOGIN_CONFIGURATION_FILE = "./config/loginserver.properties";
  50.     public static final String OFFLINE_FILE = "./config/offlineshop.properties";
  51.     public static final String NPCS_FILE = "./config/npcs.properties";
  52.     public static final String PLAYERS_FILE = "./config/players.properties";
  53.     public static final String SERVER_FILE = "./config/server.properties";
  54.     public static final String SIEGE_FILE = "./config/siege.properties";
  55.    
  56.     // --------------------------------------------------
  57.     // Clans settings
  58.     // --------------------------------------------------
  59.    
  60.     /** Clans */
  61.     public static int ALT_CLAN_JOIN_DAYS;
  62.     public static int ALT_CLAN_CREATE_DAYS;
  63.     public static int ALT_CLAN_DISSOLVE_DAYS;
  64.     public static int ALT_ALLY_JOIN_DAYS_WHEN_LEAVED;
  65.     public static int ALT_ALLY_JOIN_DAYS_WHEN_DISMISSED;
  66.     public static int ALT_ACCEPT_CLAN_DAYS_WHEN_DISMISSED;
  67.     public static int ALT_CREATE_ALLY_DAYS_WHEN_DISSOLVED;
  68.     public static int ALT_MAX_NUM_OF_CLANS_IN_ALLY;
  69.     public static int ALT_CLAN_MEMBERS_FOR_WAR;
  70.     public static int ALT_CLAN_WAR_PENALTY_WHEN_ENDED;
  71.     public static boolean ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH;
  72.     public static boolean REMOVE_CASTLE_CIRCLETS;
  73.    
  74.     /** Manor */
  75.     public static int ALT_MANOR_REFRESH_TIME;
  76.     public static int ALT_MANOR_REFRESH_MIN;
  77.     public static int ALT_MANOR_APPROVE_TIME;
  78.     public static int ALT_MANOR_APPROVE_MIN;
  79.     public static int ALT_MANOR_MAINTENANCE_PERIOD;
  80.     public static boolean ALT_MANOR_SAVE_ALL_ACTIONS;
  81.     public static int ALT_MANOR_SAVE_PERIOD_RATE;
  82.    
  83.     /** Clan Hall function */
  84.     public static long CH_TELE_FEE_RATIO;
  85.     public static int CH_TELE1_FEE;
  86.     public static int CH_TELE2_FEE;
  87.     public static long CH_ITEM_FEE_RATIO;
  88.     public static int CH_ITEM1_FEE;
  89.     public static int CH_ITEM2_FEE;
  90.     public static int CH_ITEM3_FEE;
  91.     public static long CH_MPREG_FEE_RATIO;
  92.     public static int CH_MPREG1_FEE;
  93.     public static int CH_MPREG2_FEE;
  94.     public static int CH_MPREG3_FEE;
  95.     public static int CH_MPREG4_FEE;
  96.     public static int CH_MPREG5_FEE;
  97.     public static long CH_HPREG_FEE_RATIO;
  98.     public static int CH_HPREG1_FEE;
  99.     public static int CH_HPREG2_FEE;
  100.     public static int CH_HPREG3_FEE;
  101.     public static int CH_HPREG4_FEE;
  102.     public static int CH_HPREG5_FEE;
  103.     public static int CH_HPREG6_FEE;
  104.     public static int CH_HPREG7_FEE;
  105.     public static int CH_HPREG8_FEE;
  106.     public static int CH_HPREG9_FEE;
  107.     public static int CH_HPREG10_FEE;
  108.     public static int CH_HPREG11_FEE;
  109.     public static int CH_HPREG12_FEE;
  110.     public static int CH_HPREG13_FEE;
  111.     public static long CH_EXPREG_FEE_RATIO;
  112.     public static int CH_EXPREG1_FEE;
  113.     public static int CH_EXPREG2_FEE;
  114.     public static int CH_EXPREG3_FEE;
  115.     public static int CH_EXPREG4_FEE;
  116.     public static int CH_EXPREG5_FEE;
  117.     public static int CH_EXPREG6_FEE;
  118.     public static int CH_EXPREG7_FEE;
  119.     public static long CH_SUPPORT_FEE_RATIO;
  120.     public static int CH_SUPPORT1_FEE;
  121.     public static int CH_SUPPORT2_FEE;
  122.     public static int CH_SUPPORT3_FEE;
  123.     public static int CH_SUPPORT4_FEE;
  124.     public static int CH_SUPPORT5_FEE;
  125.     public static int CH_SUPPORT6_FEE;
  126.     public static int CH_SUPPORT7_FEE;
  127.     public static int CH_SUPPORT8_FEE;
  128.     public static long CH_CURTAIN_FEE_RATIO;
  129.     public static int CH_CURTAIN1_FEE;
  130.     public static int CH_CURTAIN2_FEE;
  131.     public static long CH_FRONT_FEE_RATIO;
  132.     public static int CH_FRONT1_FEE;
  133.     public static int CH_FRONT2_FEE;
  134.    
  135.     // --------------------------------------------------
  136.     // Events settings
  137.     // --------------------------------------------------
  138.    
  139.     /** Olympiad */
  140.     public static int ALT_OLY_START_TIME;
  141.     public static int ALT_OLY_MIN;
  142.     public static long ALT_OLY_CPERIOD;
  143.     public static long ALT_OLY_BATTLE;
  144.     public static long ALT_OLY_WPERIOD;
  145.     public static long ALT_OLY_VPERIOD;
  146.     public static int ALT_OLY_WAIT_TIME;
  147.     public static int ALT_OLY_WAIT_BATTLE;
  148.     public static int ALT_OLY_WAIT_END;
  149.     public static int ALT_OLY_START_POINTS;
  150.     public static int ALT_OLY_WEEKLY_POINTS;
  151.     public static int ALT_OLY_MIN_MATCHES;
  152.     public static int ALT_OLY_CLASSED;
  153.     public static int ALT_OLY_NONCLASSED;
  154.     public static int[][] ALT_OLY_CLASSED_REWARD;
  155.     public static int[][] ALT_OLY_NONCLASSED_REWARD;
  156.     public static int ALT_OLY_GP_PER_POINT;
  157.     public static int ALT_OLY_HERO_POINTS;
  158.     public static int ALT_OLY_RANK1_POINTS;
  159.     public static int ALT_OLY_RANK2_POINTS;
  160.     public static int ALT_OLY_RANK3_POINTS;
  161.     public static int ALT_OLY_RANK4_POINTS;
  162.     public static int ALT_OLY_RANK5_POINTS;
  163.     public static int ALT_OLY_MAX_POINTS;
  164.     public static int ALT_OLY_DIVIDER_CLASSED;
  165.     public static int ALT_OLY_DIVIDER_NON_CLASSED;
  166.     public static boolean ALT_OLY_ANNOUNCE_GAMES;
  167.    
  168.     /** SevenSigns Festival */
  169.     public static boolean ALT_GAME_CASTLE_DAWN;
  170.     public static boolean ALT_GAME_CASTLE_DUSK;
  171.     public static int ALT_FESTIVAL_MIN_PLAYER;
  172.     public static int ALT_MAXIMUM_PLAYER_CONTRIB;
  173.     public static long ALT_FESTIVAL_MANAGER_START;
  174.     public static long ALT_FESTIVAL_LENGTH;
  175.     public static long ALT_FESTIVAL_CYCLE_LENGTH;
  176.     public static long ALT_FESTIVAL_FIRST_SPAWN;
  177.     public static long ALT_FESTIVAL_FIRST_SWARM;
  178.     public static long ALT_FESTIVAL_SECOND_SPAWN;
  179.     public static long ALT_FESTIVAL_SECOND_SWARM;
  180.     public static long ALT_FESTIVAL_CHEST_SPAWN;
  181.     public static boolean ALT_SEVENSIGNS_LAZY_UPDATE;
  182.    
  183.     /** Four Sepulchers */
  184.     public static int FS_TIME_ATTACK;
  185.     public static int FS_TIME_ENTRY;
  186.     public static int FS_TIME_WARMUP;
  187.     public static int FS_PARTY_MEMBER_COUNT;
  188.    
  189.     /** dimensional rift */
  190.     public static int RIFT_MIN_PARTY_SIZE;
  191.     public static int RIFT_SPAWN_DELAY;
  192.     public static int RIFT_MAX_JUMPS;
  193.     public static int RIFT_AUTO_JUMPS_TIME_MIN;
  194.     public static int RIFT_AUTO_JUMPS_TIME_MAX;
  195.     public static int RIFT_ENTER_COST_RECRUIT;
  196.     public static int RIFT_ENTER_COST_SOLDIER;
  197.     public static int RIFT_ENTER_COST_OFFICER;
  198.     public static int RIFT_ENTER_COST_CAPTAIN;
  199.     public static int RIFT_ENTER_COST_COMMANDER;
  200.     public static int RIFT_ENTER_COST_HERO;
  201.     public static double RIFT_BOSS_ROOM_TIME_MUTIPLY;
  202.    
  203.     /** Wedding system */
  204.     public static boolean ALLOW_WEDDING;
  205.     public static int WEDDING_PRICE;
  206.     public static boolean WEDDING_SAMESEX;
  207.     public static boolean WEDDING_FORMALWEAR;
  208.    
  209.     /** Lottery */
  210.     public static int ALT_LOTTERY_PRIZE;
  211.     public static int ALT_LOTTERY_TICKET_PRICE;
  212.     public static double ALT_LOTTERY_5_NUMBER_RATE;
  213.     public static double ALT_LOTTERY_4_NUMBER_RATE;
  214.     public static double ALT_LOTTERY_3_NUMBER_RATE;
  215.     public static int ALT_LOTTERY_2_AND_1_NUMBER_PRIZE;
  216.    
  217.     /** Fishing tournament */
  218.     public static boolean ALT_FISH_CHAMPIONSHIP_ENABLED;
  219.     public static int ALT_FISH_CHAMPIONSHIP_REWARD_ITEM;
  220.     public static int ALT_FISH_CHAMPIONSHIP_REWARD_1;
  221.     public static int ALT_FISH_CHAMPIONSHIP_REWARD_2;
  222.     public static int ALT_FISH_CHAMPIONSHIP_REWARD_3;
  223.     public static int ALT_FISH_CHAMPIONSHIP_REWARD_4;
  224.     public static int ALT_FISH_CHAMPIONSHIP_REWARD_5;
  225.    
  226.     // --------------------------------------------------
  227.     // GeoEngine
  228.     // --------------------------------------------------
  229.    
  230.     /** Geodata */
  231.     public static int GEODATA;
  232.     public static String GEODATA_PATH;
  233.     public static GeoFormat GEODATA_FORMAT;
  234.     public static int COORD_SYNCHRONIZE;
  235.    
  236.     /** Path checking */
  237.     public static int PART_OF_CHARACTER_HEIGHT;
  238.     public static int MAX_OBSTACLE_HEIGHT;
  239.    
  240.     /** Path finding */
  241.     public static String PATHFIND_BUFFERS;
  242.     public static int BASE_WEIGHT;
  243.     public static int DIAGONAL_WEIGHT;
  244.     public static int HEURISTIC_WEIGHT;
  245.     public static int OBSTACLE_MULTIPLIER;
  246.     public static int MAX_ITERATIONS;
  247.     public static boolean DEBUG_PATH;
  248.    
  249.     // --------------------------------------------------
  250.     // HexID
  251.     // --------------------------------------------------
  252.    
  253.     public static int SERVER_ID;
  254.     public static byte[] HEX_ID;
  255.    
  256.     // --------------------------------------------------
  257.     // Loginserver
  258.     // --------------------------------------------------
  259.    
  260.     public static String LOGIN_BIND_ADDRESS;
  261.     public static int PORT_LOGIN;
  262.    
  263.     public static boolean ACCEPT_NEW_GAMESERVER;
  264.     public static int REQUEST_ID;
  265.     public static boolean ACCEPT_ALTERNATE_ID;
  266.    
  267.     public static int LOGIN_TRY_BEFORE_BAN;
  268.     public static int LOGIN_BLOCK_AFTER_BAN;
  269.    
  270.     public static boolean LOG_LOGIN_CONTROLLER;
  271.    
  272.     public static boolean SHOW_LICENCE;
  273.    
  274.     public static boolean AUTO_CREATE_ACCOUNTS;
  275.    
  276.     public static boolean FLOOD_PROTECTION;
  277.     public static int FAST_CONNECTION_LIMIT;
  278.     public static int NORMAL_CONNECTION_TIME;
  279.     public static int FAST_CONNECTION_TIME;
  280.     public static int MAX_CONNECTION_PER_IP;
  281.    
  282.     // --------------------------------------------------
  283.     // Offline Shop && Craft
  284.     // --------------------------------------------------
  285.     public static boolean OFFLINE_TRADE_ENABLE;
  286.     public static boolean OFFLINE_CRAFT_ENABLE;
  287.     public static boolean OFFLINE_MODE_IN_PEACE_ZONE;
  288.     public static boolean OFFLINE_MODE_NO_DAMAGE;
  289.     public static boolean RESTORE_OFFLINERS;
  290.     public static int OFFLINE_MAX_DAYS;
  291.     public static boolean OFFLINE_DISCONNECT_FINISHED;
  292.     public static boolean OFFLINE_SET_NAME_COLOR;
  293.     public static int OFFLINE_NAME_COLOR;
  294.    
  295.     // --------------------------------------------------
  296.     // NPCs / Monsters
  297.     // --------------------------------------------------
  298.    
  299.     /** Champion Mod */
  300.     public static int CHAMPION_FREQUENCY;
  301.     public static int CHAMP_MIN_LVL;
  302.     public static int CHAMP_MAX_LVL;
  303.     public static int CHAMPION_HP;
  304.     public static int CHAMPION_REWARDS;
  305.     public static int CHAMPION_ADENAS_REWARDS;
  306.     public static double CHAMPION_HP_REGEN;
  307.     public static double CHAMPION_ATK;
  308.     public static double CHAMPION_SPD_ATK;
  309.     public static int CHAMPION_REWARD;
  310.     public static int CHAMPION_REWARD_ID;
  311.     public static int CHAMPION_REWARD_QTY;
  312.    
  313.     /** Buffer */
  314.     public static int BUFFER_MAX_SCHEMES;
  315.     public static int BUFFER_MAX_SKILLS;
  316.     public static int BUFFER_STATIC_BUFF_COST;
  317.     public static String BUFFER_BUFFS;
  318.     public static Map<Integer, BuffSkillHolder> BUFFER_BUFFLIST;
  319.    
  320.     /** Misc */
  321.     public static boolean ALLOW_CLASS_MASTERS;
  322.     public static ClassMasterSettings CLASS_MASTER_SETTINGS;
  323.     public static boolean ALLOW_ENTIRE_TREE;
  324.     public static boolean ANNOUNCE_MAMMON_SPAWN;
  325.     public static boolean ALT_MOB_AGRO_IN_PEACEZONE;
  326.     public static boolean ALT_GAME_FREE_TELEPORT;
  327.     public static boolean SHOW_NPC_LVL;
  328.     public static boolean SHOW_NPC_CREST;
  329.     public static boolean SHOW_SUMMON_CREST;
  330.    
  331.     /** Wyvern Manager */
  332.     public static boolean WYVERN_ALLOW_UPGRADER;
  333.     public static int WYVERN_REQUIRED_LEVEL;
  334.     public static int WYVERN_REQUIRED_CRYSTALS;
  335.    
  336.     /** Raid Boss */
  337.     public static double RAID_HP_REGEN_MULTIPLIER;
  338.     public static double RAID_MP_REGEN_MULTIPLIER;
  339.     public static double RAID_DEFENCE_MULTIPLIER;
  340.     public static double RAID_MINION_RESPAWN_TIMER;
  341.    
  342.     public static boolean RAID_DISABLE_CURSE;
  343.     public static int RAID_CHAOS_TIME;
  344.     public static int GRAND_CHAOS_TIME;
  345.     public static int MINION_CHAOS_TIME;
  346.    
  347.     /** Grand Boss */
  348.     public static int SPAWN_INTERVAL_AQ;
  349.     public static int RANDOM_SPAWN_TIME_AQ;
  350.    
  351.     public static int SPAWN_INTERVAL_ANTHARAS;
  352.     public static int RANDOM_SPAWN_TIME_ANTHARAS;
  353.     public static int WAIT_TIME_ANTHARAS;
  354.    
  355.     public static int SPAWN_INTERVAL_BAIUM;
  356.     public static int RANDOM_SPAWN_TIME_BAIUM;
  357.    
  358.     public static int SPAWN_INTERVAL_CORE;
  359.     public static int RANDOM_SPAWN_TIME_CORE;
  360.    
  361.     public static int SPAWN_INTERVAL_FRINTEZZA;
  362.     public static int RANDOM_SPAWN_TIME_FRINTEZZA;
  363.     public static int WAIT_TIME_FRINTEZZA;
  364.    
  365.     public static int SPAWN_INTERVAL_ORFEN;
  366.     public static int RANDOM_SPAWN_TIME_ORFEN;
  367.    
  368.     public static int SPAWN_INTERVAL_SAILREN;
  369.     public static int RANDOM_SPAWN_TIME_SAILREN;
  370.     public static int WAIT_TIME_SAILREN;
  371.    
  372.     public static int SPAWN_INTERVAL_VALAKAS;
  373.     public static int RANDOM_SPAWN_TIME_VALAKAS;
  374.     public static int WAIT_TIME_VALAKAS;
  375.    
  376.     public static int SPAWN_INTERVAL_ZAKEN;
  377.     public static int RANDOM_SPAWN_TIME_ZAKEN;
  378.    
  379.     /** IA */
  380.     public static boolean GUARD_ATTACK_AGGRO_MOB;
  381.     public static int MAX_DRIFT_RANGE;
  382.     public static long KNOWNLIST_UPDATE_INTERVAL;
  383.     public static int MIN_NPC_ANIMATION;
  384.     public static int MAX_NPC_ANIMATION;
  385.     public static int MIN_MONSTER_ANIMATION;
  386.     public static int MAX_MONSTER_ANIMATION;
  387.    
  388.     public static boolean GRIDS_ALWAYS_ON;
  389.     public static int GRID_NEIGHBOR_TURNON_TIME;
  390.     public static int GRID_NEIGHBOR_TURNOFF_TIME;
  391.    
  392.     // --------------------------------------------------
  393.     // Players
  394.     // --------------------------------------------------
  395.    
  396.     /** Misc */
  397.     public static int STARTING_ADENA;
  398.     public static boolean EFFECT_CANCELING;
  399.     public static double HP_REGEN_MULTIPLIER;
  400.     public static double MP_REGEN_MULTIPLIER;
  401.     public static double CP_REGEN_MULTIPLIER;
  402.     public static int PLAYER_SPAWN_PROTECTION;
  403.     public static int PLAYER_FAKEDEATH_UP_PROTECTION;
  404.     public static double RESPAWN_RESTORE_HP;
  405.     public static int MAX_PVTSTORE_SLOTS_DWARF;
  406.     public static int MAX_PVTSTORE_SLOTS_OTHER;
  407.     public static boolean DEEPBLUE_DROP_RULES;
  408.     public static boolean ALT_GAME_DELEVEL;
  409.     public static int DEATH_PENALTY_CHANCE;
  410.    
  411.     /** Inventory & WH */
  412.     public static int INVENTORY_MAXIMUM_NO_DWARF;
  413.     public static int INVENTORY_MAXIMUM_DWARF;
  414.     public static int INVENTORY_MAXIMUM_QUEST_ITEMS;
  415.     public static int INVENTORY_MAXIMUM_PET;
  416.     public static int MAX_ITEM_IN_PACKET;
  417.     public static double ALT_WEIGHT_LIMIT;
  418.     public static int WAREHOUSE_SLOTS_NO_DWARF;
  419.     public static int WAREHOUSE_SLOTS_DWARF;
  420.     public static int WAREHOUSE_SLOTS_CLAN;
  421.     public static int FREIGHT_SLOTS;
  422.     public static boolean ALT_GAME_FREIGHTS;
  423.     public static int ALT_GAME_FREIGHT_PRICE;
  424.    
  425.     /** Enchant */
  426.     public static double ENCHANT_CHANCE_WEAPON_MAGIC;
  427.     public static double ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS;
  428.     public static double ENCHANT_CHANCE_WEAPON_NONMAGIC;
  429.     public static double ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS;
  430.     public static double ENCHANT_CHANCE_ARMOR;
  431.     public static int ENCHANT_MAX_WEAPON;
  432.     public static int ENCHANT_MAX_ARMOR;
  433.     public static int ENCHANT_SAFE_MAX;
  434.     public static int ENCHANT_SAFE_MAX_FULL;
  435.    
  436.     /** Augmentations */
  437.     public static int AUGMENTATION_NG_SKILL_CHANCE;
  438.     public static int AUGMENTATION_NG_GLOW_CHANCE;
  439.     public static int AUGMENTATION_MID_SKILL_CHANCE;
  440.     public static int AUGMENTATION_MID_GLOW_CHANCE;
  441.     public static int AUGMENTATION_HIGH_SKILL_CHANCE;
  442.     public static int AUGMENTATION_HIGH_GLOW_CHANCE;
  443.     public static int AUGMENTATION_TOP_SKILL_CHANCE;
  444.     public static int AUGMENTATION_TOP_GLOW_CHANCE;
  445.     public static int AUGMENTATION_BASESTAT_CHANCE;
  446.    
  447.     /** Karma & PvP */
  448.     public static boolean KARMA_PLAYER_CAN_BE_KILLED_IN_PZ;
  449.     public static boolean KARMA_PLAYER_CAN_SHOP;
  450.     public static boolean KARMA_PLAYER_CAN_USE_GK;
  451.     public static boolean KARMA_PLAYER_CAN_TELEPORT;
  452.     public static boolean KARMA_PLAYER_CAN_TRADE;
  453.     public static boolean KARMA_PLAYER_CAN_USE_WH;
  454.    
  455.     public static boolean KARMA_DROP_GM;
  456.     public static boolean KARMA_AWARD_PK_KILL;
  457.     public static int KARMA_PK_LIMIT;
  458.    
  459.     public static String KARMA_NONDROPPABLE_PET_ITEMS;
  460.     public static String KARMA_NONDROPPABLE_ITEMS;
  461.     public static int[] KARMA_LIST_NONDROPPABLE_PET_ITEMS;
  462.     public static int[] KARMA_LIST_NONDROPPABLE_ITEMS;
  463.    
  464.     public static int PVP_NORMAL_TIME;
  465.     public static int PVP_PVP_TIME;
  466.    
  467.     /** Party */
  468.     public static String PARTY_XP_CUTOFF_METHOD;
  469.     public static int PARTY_XP_CUTOFF_LEVEL;
  470.     public static double PARTY_XP_CUTOFF_PERCENT;
  471.     public static int ALT_PARTY_RANGE;
  472.     public static int ALT_PARTY_RANGE2;
  473.     public static boolean ALT_LEAVE_PARTY_LEADER;
  474.    
  475.     /** GMs & Admin Stuff */
  476.     public static boolean EVERYBODY_HAS_ADMIN_RIGHTS;
  477.     public static int MASTERACCESS_LEVEL;
  478.     public static int MASTERACCESS_NAME_COLOR;
  479.     public static int MASTERACCESS_TITLE_COLOR;
  480.     public static boolean GM_HERO_AURA;
  481.     public static boolean GM_STARTUP_INVULNERABLE;
  482.     public static boolean GM_STARTUP_INVISIBLE;
  483.     public static boolean GM_STARTUP_SILENCE;
  484.     public static boolean GM_STARTUP_AUTO_LIST;
  485.    
  486.     /** petitions */
  487.     public static boolean PETITIONING_ALLOWED;
  488.     public static int MAX_PETITIONS_PER_PLAYER;
  489.     public static int MAX_PETITIONS_PENDING;
  490.    
  491.     /** Crafting **/
  492.     public static boolean IS_CRAFTING_ENABLED;
  493.     public static int DWARF_RECIPE_LIMIT;
  494.     public static int COMMON_RECIPE_LIMIT;
  495.     public static boolean ALT_BLACKSMITH_USE_RECIPES;
  496.    
  497.     /** Skills & Classes **/
  498.     public static boolean AUTO_LEARN_SKILLS;
  499.     public static boolean ALT_GAME_MAGICFAILURES;
  500.     public static boolean ALT_GAME_SHIELD_BLOCKS;
  501.     public static int ALT_PERFECT_SHLD_BLOCK;
  502.     public static boolean LIFE_CRYSTAL_NEEDED;
  503.     public static boolean SP_BOOK_NEEDED;
  504.     public static boolean ES_SP_BOOK_NEEDED;
  505.     public static boolean DIVINE_SP_BOOK_NEEDED;
  506.     public static boolean ALT_GAME_SUBCLASS_WITHOUT_QUESTS;
  507.    
  508.     /** Buffs */
  509.     public static boolean STORE_SKILL_COOLTIME;
  510.     public static int BUFFS_MAX_AMOUNT;
  511.    
  512.     // --------------------------------------------------
  513.     // Server
  514.     // --------------------------------------------------
  515.    
  516.     public static String GAMESERVER_HOSTNAME;
  517.     public static int PORT_GAME;
  518.     public static String EXTERNAL_HOSTNAME;
  519.     public static String INTERNAL_HOSTNAME;
  520.     public static int GAME_SERVER_LOGIN_PORT;
  521.     public static String GAME_SERVER_LOGIN_HOST;
  522.    
  523.     /** Access to database */
  524.     public static String DATABASE_URL;
  525.     public static String DATABASE_LOGIN;
  526.     public static String DATABASE_PASSWORD;
  527.     public static int DATABASE_MAX_CONNECTIONS;
  528.     public static int DATABASE_MAX_IDLE_TIME;
  529.    
  530.     /** serverList & Test */
  531.     public static boolean SERVER_LIST_BRACKET;
  532.     public static boolean SERVER_LIST_CLOCK;
  533.     public static boolean SERVER_LIST_TESTSERVER;
  534.     public static boolean SERVER_GMONLY;
  535.    
  536.     /** clients related */
  537.     public static int DELETE_DAYS;
  538.     public static int MAXIMUM_ONLINE_USERS;
  539.     public static int MIN_PROTOCOL_REVISION;
  540.     public static int MAX_PROTOCOL_REVISION;
  541.    
  542.     /** Jail & Punishements **/
  543.     public static int DEFAULT_PUNISH;
  544.     public static int DEFAULT_PUNISH_PARAM;
  545.    
  546.     /** Auto-loot */
  547.     public static boolean AUTO_LOOT;
  548.     public static boolean AUTO_LOOT_HERBS;
  549.     public static boolean AUTO_LOOT_RAID;
  550.    
  551.     /** Items Management */
  552.     public static boolean ALLOW_DISCARDITEM;
  553.     public static boolean MULTIPLE_ITEM_DROP;
  554.     public static int HERB_AUTO_DESTROY_TIME;
  555.     public static int ITEM_AUTO_DESTROY_TIME;
  556.     public static int EQUIPABLE_ITEM_AUTO_DESTROY_TIME;
  557.     public static Map<Integer, Integer> SPECIAL_ITEM_DESTROY_TIME;
  558.     public static int PLAYER_DROPPED_ITEM_MULTIPLIER;
  559.     public static boolean SAVE_DROPPED_ITEM;
  560.    
  561.     /** Rate control */
  562.     public static double RATE_XP;
  563.     public static double RATE_SP;
  564.     public static double RATE_PARTY_XP;
  565.     public static double RATE_PARTY_SP;
  566.     public static double RATE_DROP_ADENA;
  567.     public static double RATE_CONSUMABLE_COST;
  568.     public static double RATE_DROP_ITEMS;
  569.     public static double RATE_DROP_ITEMS_BY_RAID;
  570.     public static double RATE_DROP_SPOIL;
  571.     public static int RATE_DROP_MANOR;
  572.    
  573.     public static double RATE_QUEST_DROP;
  574.     public static double RATE_QUEST_REWARD;
  575.     public static double RATE_QUEST_REWARD_XP;
  576.     public static double RATE_QUEST_REWARD_SP;
  577.     public static double RATE_QUEST_REWARD_ADENA;
  578.    
  579.     public static double RATE_KARMA_EXP_LOST;
  580.     public static double RATE_SIEGE_GUARDS_PRICE;
  581.    
  582.     public static int PLAYER_DROP_LIMIT;
  583.     public static int PLAYER_RATE_DROP;
  584.     public static int PLAYER_RATE_DROP_ITEM;
  585.     public static int PLAYER_RATE_DROP_EQUIP;
  586.     public static int PLAYER_RATE_DROP_EQUIP_WEAPON;
  587.    
  588.     public static int KARMA_DROP_LIMIT;
  589.     public static int KARMA_RATE_DROP;
  590.     public static int KARMA_RATE_DROP_ITEM;
  591.     public static int KARMA_RATE_DROP_EQUIP;
  592.     public static int KARMA_RATE_DROP_EQUIP_WEAPON;
  593.    
  594.     public static double PET_XP_RATE;
  595.     public static int PET_FOOD_RATE;
  596.     public static double SINEATER_XP_RATE;
  597.    
  598.     public static double RATE_DROP_COMMON_HERBS;
  599.     public static double RATE_DROP_HP_HERBS;
  600.     public static double RATE_DROP_MP_HERBS;
  601.     public static double RATE_DROP_SPECIAL_HERBS;
  602.    
  603.     /** Allow types */
  604.     public static boolean ALLOW_FREIGHT;
  605.     public static boolean ALLOW_WAREHOUSE;
  606.     public static boolean ALLOW_WEAR;
  607.     public static int WEAR_DELAY;
  608.     public static int WEAR_PRICE;
  609.     public static boolean ALLOW_LOTTERY;
  610.     public static boolean ALLOW_WATER;
  611.     public static boolean ALLOWFISHING;
  612.     public static boolean ALLOW_BOAT;
  613.     public static boolean ALLOW_CURSED_WEAPONS;
  614.     public static boolean ALLOW_MANOR;
  615.     public static boolean ENABLE_FALLING_DAMAGE;
  616.    
  617.     /** Debug & Dev */
  618.     public static boolean ALT_DEV_NO_SPAWNS;
  619.     public static boolean DEBUG;
  620.     public static boolean DEVELOPER;
  621.     public static boolean PACKET_HANDLER_DEBUG;
  622.    
  623.     /** Deadlock Detector */
  624.     public static boolean DEADLOCK_DETECTOR;
  625.     public static int DEADLOCK_CHECK_INTERVAL;
  626.     public static boolean RESTART_ON_DEADLOCK;
  627.    
  628.     /** Logs */
  629.     public static boolean LOG_CHAT;
  630.     public static boolean LOG_ITEMS;
  631.     public static boolean GMAUDIT;
  632.    
  633.     /** Community Board */
  634.     public static boolean ENABLE_COMMUNITY_BOARD;
  635.     public static String BBS_DEFAULT;
  636.    
  637.     /** Flood Protectors */
  638.     public static int ROLL_DICE_TIME;
  639.     public static int HERO_VOICE_TIME;
  640.     public static int SUBCLASS_TIME;
  641.     public static int DROP_ITEM_TIME;
  642.     public static int SERVER_BYPASS_TIME;
  643.     public static int MULTISELL_TIME;
  644.     public static int MANUFACTURE_TIME;
  645.     public static int MANOR_TIME;
  646.     public static int SENDMAIL_TIME;
  647.     public static int CHARACTER_SELECT_TIME;
  648.     public static int GLOBAL_CHAT_TIME;
  649.     public static int TRADE_CHAT_TIME;
  650.     public static int SOCIAL_TIME;
  651.    
  652.     /** Misc */
  653.     public static boolean L2WALKER_PROTECTION;
  654.     public static boolean AUTODELETE_INVALID_QUEST_DATA;
  655.     public static boolean SERVER_NEWS;
  656.     public static int ZONE_TOWN;
  657.     public static boolean DISABLE_TUTORIAL;
  658.    
  659.     // --------------------------------------------------
  660.     // Those "hidden" settings haven't configs to avoid admins to fuck their server
  661.     // You still can experiment changing values here. But don't say I didn't warn you.
  662.     // --------------------------------------------------
  663.    
  664.     /** Threads & Packets size */
  665.     public static int THREAD_P_EFFECTS = 6; // default 6
  666.     public static int THREAD_P_GENERAL = 15; // default 15
  667.     public static int GENERAL_PACKET_THREAD_CORE_SIZE = 4; // default 4
  668.     public static int IO_PACKET_THREAD_CORE_SIZE = 2; // default 2
  669.     public static int GENERAL_THREAD_CORE_SIZE = 4; // default 4
  670.     public static int AI_MAX_THREAD = 10; // default 10
  671.    
  672.     /** Reserve Host on LoginServerThread */
  673.     public static boolean RESERVE_HOST_ON_LOGIN = false; // default false
  674.    
  675.     /** MMO settings */
  676.     public static int MMO_SELECTOR_SLEEP_TIME = 20; // default 20
  677.     public static int MMO_MAX_SEND_PER_PASS = 12; // default 12
  678.     public static int MMO_MAX_READ_PER_PASS = 12; // default 12
  679.     public static int MMO_HELPER_BUFFER_COUNT = 20; // default 20
  680.    
  681.     /** Client Packets Queue settings */
  682.     public static int CLIENT_PACKET_QUEUE_SIZE = 14; // default MMO_MAX_READ_PER_PASS + 2
  683.     public static int CLIENT_PACKET_QUEUE_MAX_BURST_SIZE = 13; // default MMO_MAX_READ_PER_PASS + 1
  684.     public static int CLIENT_PACKET_QUEUE_MAX_PACKETS_PER_SECOND = 80; // default 80
  685.     public static int CLIENT_PACKET_QUEUE_MEASURE_INTERVAL = 5; // default 5
  686.     public static int CLIENT_PACKET_QUEUE_MAX_AVERAGE_PACKETS_PER_SECOND = 40; // default 40
  687.     public static int CLIENT_PACKET_QUEUE_MAX_FLOODS_PER_MIN = 2; // default 2
  688.     public static int CLIENT_PACKET_QUEUE_MAX_OVERFLOWS_PER_MIN = 1; // default 1
  689.     public static int CLIENT_PACKET_QUEUE_MAX_UNDERFLOWS_PER_MIN = 1; // default 1
  690.     public static int CLIENT_PACKET_QUEUE_MAX_UNKNOWN_PER_MIN = 5; // default 5
  691.    
  692.     // --------------------------------------------------
  693.    
  694.     /**
  695.      * This class initializes all global variables for configuration.<br>
  696.      * If key doesn't appear in properties file, a default value is setting on by this class.
  697.      */
  698.     public static void load()
  699.     {
  700.         if (Server.serverMode == Server.MODE_GAMESERVER)
  701.         {
  702.             _log.info("Loading gameserver configuration files.");
  703.            
  704.             // Clans settings
  705.             ExProperties clans = load(CLANS_FILE);
  706.             ALT_CLAN_JOIN_DAYS = clans.getProperty("DaysBeforeJoinAClan", 5);
  707.             ALT_CLAN_CREATE_DAYS = clans.getProperty("DaysBeforeCreateAClan", 10);
  708.             ALT_MAX_NUM_OF_CLANS_IN_ALLY = clans.getProperty("AltMaxNumOfClansInAlly", 3);
  709.             ALT_CLAN_MEMBERS_FOR_WAR = clans.getProperty("AltClanMembersForWar", 15);
  710.             ALT_CLAN_WAR_PENALTY_WHEN_ENDED = clans.getProperty("AltClanWarPenaltyWhenEnded", 5);
  711.             ALT_CLAN_DISSOLVE_DAYS = clans.getProperty("DaysToPassToDissolveAClan", 7);
  712.             ALT_ALLY_JOIN_DAYS_WHEN_LEAVED = clans.getProperty("DaysBeforeJoinAllyWhenLeaved", 1);
  713.             ALT_ALLY_JOIN_DAYS_WHEN_DISMISSED = clans.getProperty("DaysBeforeJoinAllyWhenDismissed", 1);
  714.             ALT_ACCEPT_CLAN_DAYS_WHEN_DISMISSED = clans.getProperty("DaysBeforeAcceptNewClanWhenDismissed", 1);
  715.             ALT_CREATE_ALLY_DAYS_WHEN_DISSOLVED = clans.getProperty("DaysBeforeCreateNewAllyWhenDissolved", 10);
  716.             ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH = clans.getProperty("AltMembersCanWithdrawFromClanWH", false);
  717.             REMOVE_CASTLE_CIRCLETS = clans.getProperty("RemoveCastleCirclets", true);
  718.            
  719.             ALT_MANOR_REFRESH_TIME = clans.getProperty("AltManorRefreshTime", 20);
  720.             ALT_MANOR_REFRESH_MIN = clans.getProperty("AltManorRefreshMin", 0);
  721.             ALT_MANOR_APPROVE_TIME = clans.getProperty("AltManorApproveTime", 6);
  722.             ALT_MANOR_APPROVE_MIN = clans.getProperty("AltManorApproveMin", 0);
  723.             ALT_MANOR_MAINTENANCE_PERIOD = clans.getProperty("AltManorMaintenancePeriod", 360000);
  724.             ALT_MANOR_SAVE_ALL_ACTIONS = clans.getProperty("AltManorSaveAllActions", false);
  725.             ALT_MANOR_SAVE_PERIOD_RATE = clans.getProperty("AltManorSavePeriodRate", 2);
  726.            
  727.             CH_TELE_FEE_RATIO = clans.getProperty("ClanHallTeleportFunctionFeeRatio", 86400000);
  728.             CH_TELE1_FEE = clans.getProperty("ClanHallTeleportFunctionFeeLvl1", 7000);
  729.             CH_TELE2_FEE = clans.getProperty("ClanHallTeleportFunctionFeeLvl2", 14000);
  730.             CH_SUPPORT_FEE_RATIO = clans.getProperty("ClanHallSupportFunctionFeeRatio", 86400000);
  731.             CH_SUPPORT1_FEE = clans.getProperty("ClanHallSupportFeeLvl1", 17500);
  732.             CH_SUPPORT2_FEE = clans.getProperty("ClanHallSupportFeeLvl2", 35000);
  733.             CH_SUPPORT3_FEE = clans.getProperty("ClanHallSupportFeeLvl3", 49000);
  734.             CH_SUPPORT4_FEE = clans.getProperty("ClanHallSupportFeeLvl4", 77000);
  735.             CH_SUPPORT5_FEE = clans.getProperty("ClanHallSupportFeeLvl5", 147000);
  736.             CH_SUPPORT6_FEE = clans.getProperty("ClanHallSupportFeeLvl6", 252000);
  737.             CH_SUPPORT7_FEE = clans.getProperty("ClanHallSupportFeeLvl7", 259000);
  738.             CH_SUPPORT8_FEE = clans.getProperty("ClanHallSupportFeeLvl8", 364000);
  739.             CH_MPREG_FEE_RATIO = clans.getProperty("ClanHallMpRegenerationFunctionFeeRatio", 86400000);
  740.             CH_MPREG1_FEE = clans.getProperty("ClanHallMpRegenerationFeeLvl1", 14000);
  741.             CH_MPREG2_FEE = clans.getProperty("ClanHallMpRegenerationFeeLvl2", 26250);
  742.             CH_MPREG3_FEE = clans.getProperty("ClanHallMpRegenerationFeeLvl3", 45500);
  743.             CH_MPREG4_FEE = clans.getProperty("ClanHallMpRegenerationFeeLvl4", 96250);
  744.             CH_MPREG5_FEE = clans.getProperty("ClanHallMpRegenerationFeeLvl5", 140000);
  745.             CH_HPREG_FEE_RATIO = clans.getProperty("ClanHallHpRegenerationFunctionFeeRatio", 86400000);
  746.             CH_HPREG1_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl1", 4900);
  747.             CH_HPREG2_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl2", 5600);
  748.             CH_HPREG3_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl3", 7000);
  749.             CH_HPREG4_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl4", 8166);
  750.             CH_HPREG5_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl5", 10500);
  751.             CH_HPREG6_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl6", 12250);
  752.             CH_HPREG7_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl7", 14000);
  753.             CH_HPREG8_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl8", 15750);
  754.             CH_HPREG9_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl9", 17500);
  755.             CH_HPREG10_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl10", 22750);
  756.             CH_HPREG11_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl11", 26250);
  757.             CH_HPREG12_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl12", 29750);
  758.             CH_HPREG13_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl13", 36166);
  759.             CH_EXPREG_FEE_RATIO = clans.getProperty("ClanHallExpRegenerationFunctionFeeRatio", 86400000);
  760.             CH_EXPREG1_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl1", 21000);
  761.             CH_EXPREG2_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl2", 42000);
  762.             CH_EXPREG3_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl3", 63000);
  763.             CH_EXPREG4_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl4", 105000);
  764.             CH_EXPREG5_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl5", 147000);
  765.             CH_EXPREG6_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl6", 163331);
  766.             CH_EXPREG7_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl7", 210000);
  767.             CH_ITEM_FEE_RATIO = clans.getProperty("ClanHallItemCreationFunctionFeeRatio", 86400000);
  768.             CH_ITEM1_FEE = clans.getProperty("ClanHallItemCreationFunctionFeeLvl1", 210000);
  769.             CH_ITEM2_FEE = clans.getProperty("ClanHallItemCreationFunctionFeeLvl2", 490000);
  770.             CH_ITEM3_FEE = clans.getProperty("ClanHallItemCreationFunctionFeeLvl3", 980000);
  771.             CH_CURTAIN_FEE_RATIO = clans.getProperty("ClanHallCurtainFunctionFeeRatio", 86400000);
  772.             CH_CURTAIN1_FEE = clans.getProperty("ClanHallCurtainFunctionFeeLvl1", 2002);
  773.             CH_CURTAIN2_FEE = clans.getProperty("ClanHallCurtainFunctionFeeLvl2", 2625);
  774.             CH_FRONT_FEE_RATIO = clans.getProperty("ClanHallFrontPlatformFunctionFeeRatio", 86400000);
  775.             CH_FRONT1_FEE = clans.getProperty("ClanHallFrontPlatformFunctionFeeLvl1", 3031);
  776.             CH_FRONT2_FEE = clans.getProperty("ClanHallFrontPlatformFunctionFeeLvl2", 9331);
  777.            
  778.             // Events config
  779.             ExProperties events = load(EVENTS_FILE);
  780.             ALT_OLY_START_TIME = events.getProperty("AltOlyStartTime", 18);
  781.             ALT_OLY_MIN = events.getProperty("AltOlyMin", 0);
  782.             ALT_OLY_CPERIOD = events.getProperty("AltOlyCPeriod", 21600000);
  783.             ALT_OLY_BATTLE = events.getProperty("AltOlyBattle", 180000);
  784.             ALT_OLY_WPERIOD = events.getProperty("AltOlyWPeriod", 604800000);
  785.             ALT_OLY_VPERIOD = events.getProperty("AltOlyVPeriod", 86400000);
  786.             ALT_OLY_WAIT_TIME = events.getProperty("AltOlyWaitTime", 30);
  787.             ALT_OLY_WAIT_BATTLE = events.getProperty("AltOlyWaitBattle", 60);
  788.             ALT_OLY_WAIT_END = events.getProperty("AltOlyWaitEnd", 40);
  789.             ALT_OLY_START_POINTS = events.getProperty("AltOlyStartPoints", 18);
  790.             ALT_OLY_WEEKLY_POINTS = events.getProperty("AltOlyWeeklyPoints", 3);
  791.             ALT_OLY_MIN_MATCHES = events.getProperty("AltOlyMinMatchesToBeClassed", 5);
  792.             ALT_OLY_CLASSED = events.getProperty("AltOlyClassedParticipants", 5);
  793.             ALT_OLY_NONCLASSED = events.getProperty("AltOlyNonClassedParticipants", 9);
  794.             ALT_OLY_CLASSED_REWARD = parseItemsList(events.getProperty("AltOlyClassedReward", "6651,50"));
  795.             ALT_OLY_NONCLASSED_REWARD = parseItemsList(events.getProperty("AltOlyNonClassedReward", "6651,30"));
  796.             ALT_OLY_GP_PER_POINT = events.getProperty("AltOlyGPPerPoint", 1000);
  797.             ALT_OLY_HERO_POINTS = events.getProperty("AltOlyHeroPoints", 300);
  798.             ALT_OLY_RANK1_POINTS = events.getProperty("AltOlyRank1Points", 100);
  799.             ALT_OLY_RANK2_POINTS = events.getProperty("AltOlyRank2Points", 75);
  800.             ALT_OLY_RANK3_POINTS = events.getProperty("AltOlyRank3Points", 55);
  801.             ALT_OLY_RANK4_POINTS = events.getProperty("AltOlyRank4Points", 40);
  802.             ALT_OLY_RANK5_POINTS = events.getProperty("AltOlyRank5Points", 30);
  803.             ALT_OLY_MAX_POINTS = events.getProperty("AltOlyMaxPoints", 10);
  804.             ALT_OLY_DIVIDER_CLASSED = events.getProperty("AltOlyDividerClassed", 3);
  805.             ALT_OLY_DIVIDER_NON_CLASSED = events.getProperty("AltOlyDividerNonClassed", 3);
  806.             ALT_OLY_ANNOUNCE_GAMES = events.getProperty("AltOlyAnnounceGames", true);
  807.            
  808.             ALT_GAME_CASTLE_DAWN = events.getProperty("AltCastleForDawn", true);
  809.             ALT_GAME_CASTLE_DUSK = events.getProperty("AltCastleForDusk", true);
  810.             ALT_FESTIVAL_MIN_PLAYER = events.getProperty("AltFestivalMinPlayer", 5);
  811.             ALT_MAXIMUM_PLAYER_CONTRIB = events.getProperty("AltMaxPlayerContrib", 1000000);
  812.             ALT_FESTIVAL_MANAGER_START = events.getProperty("AltFestivalManagerStart", 120000);
  813.             ALT_FESTIVAL_LENGTH = events.getProperty("AltFestivalLength", 1080000);
  814.             ALT_FESTIVAL_CYCLE_LENGTH = events.getProperty("AltFestivalCycleLength", 2280000);
  815.             ALT_FESTIVAL_FIRST_SPAWN = events.getProperty("AltFestivalFirstSpawn", 120000);
  816.             ALT_FESTIVAL_FIRST_SWARM = events.getProperty("AltFestivalFirstSwarm", 300000);
  817.             ALT_FESTIVAL_SECOND_SPAWN = events.getProperty("AltFestivalSecondSpawn", 540000);
  818.             ALT_FESTIVAL_SECOND_SWARM = events.getProperty("AltFestivalSecondSwarm", 720000);
  819.             ALT_FESTIVAL_CHEST_SPAWN = events.getProperty("AltFestivalChestSpawn", 900000);
  820.             ALT_SEVENSIGNS_LAZY_UPDATE = events.getProperty("AltSevenSignsLazyUpdate", true);
  821.            
  822.             FS_TIME_ATTACK = events.getProperty("TimeOfAttack", 50);
  823.             FS_TIME_ENTRY = events.getProperty("TimeOfEntry", 3);
  824.             FS_TIME_WARMUP = events.getProperty("TimeOfWarmUp", 2);
  825.             FS_PARTY_MEMBER_COUNT = events.getProperty("NumberOfNecessaryPartyMembers", 4);
  826.            
  827.             RIFT_MIN_PARTY_SIZE = events.getProperty("RiftMinPartySize", 2);
  828.             RIFT_MAX_JUMPS = events.getProperty("MaxRiftJumps", 4);
  829.             RIFT_SPAWN_DELAY = events.getProperty("RiftSpawnDelay", 10000);
  830.             RIFT_AUTO_JUMPS_TIME_MIN = events.getProperty("AutoJumpsDelayMin", 480);
  831.             RIFT_AUTO_JUMPS_TIME_MAX = events.getProperty("AutoJumpsDelayMax", 600);
  832.             RIFT_ENTER_COST_RECRUIT = events.getProperty("RecruitCost", 18);
  833.             RIFT_ENTER_COST_SOLDIER = events.getProperty("SoldierCost", 21);
  834.             RIFT_ENTER_COST_OFFICER = events.getProperty("OfficerCost", 24);
  835.             RIFT_ENTER_COST_CAPTAIN = events.getProperty("CaptainCost", 27);
  836.             RIFT_ENTER_COST_COMMANDER = events.getProperty("CommanderCost", 30);
  837.             RIFT_ENTER_COST_HERO = events.getProperty("HeroCost", 33);
  838.             RIFT_BOSS_ROOM_TIME_MUTIPLY = events.getProperty("BossRoomTimeMultiply", 1.);
  839.            
  840.             ALLOW_WEDDING = events.getProperty("AllowWedding", false);
  841.             WEDDING_PRICE = events.getProperty("WeddingPrice", 1000000);
  842.             WEDDING_SAMESEX = events.getProperty("WeddingAllowSameSex", false);
  843.             WEDDING_FORMALWEAR = events.getProperty("WeddingFormalWear", true);
  844.            
  845.             ALT_LOTTERY_PRIZE = events.getProperty("AltLotteryPrize", 50000);
  846.             ALT_LOTTERY_TICKET_PRICE = events.getProperty("AltLotteryTicketPrice", 2000);
  847.             ALT_LOTTERY_5_NUMBER_RATE = events.getProperty("AltLottery5NumberRate", 0.6);
  848.             ALT_LOTTERY_4_NUMBER_RATE = events.getProperty("AltLottery4NumberRate", 0.2);
  849.             ALT_LOTTERY_3_NUMBER_RATE = events.getProperty("AltLottery3NumberRate", 0.2);
  850.             ALT_LOTTERY_2_AND_1_NUMBER_PRIZE = events.getProperty("AltLottery2and1NumberPrize", 200);
  851.            
  852.             ALT_FISH_CHAMPIONSHIP_ENABLED = events.getProperty("AltFishChampionshipEnabled", true);
  853.             ALT_FISH_CHAMPIONSHIP_REWARD_ITEM = events.getProperty("AltFishChampionshipRewardItemId", 57);
  854.             ALT_FISH_CHAMPIONSHIP_REWARD_1 = events.getProperty("AltFishChampionshipReward1", 800000);
  855.             ALT_FISH_CHAMPIONSHIP_REWARD_2 = events.getProperty("AltFishChampionshipReward2", 500000);
  856.             ALT_FISH_CHAMPIONSHIP_REWARD_3 = events.getProperty("AltFishChampionshipReward3", 300000);
  857.             ALT_FISH_CHAMPIONSHIP_REWARD_4 = events.getProperty("AltFishChampionshipReward4", 200000);
  858.             ALT_FISH_CHAMPIONSHIP_REWARD_5 = events.getProperty("AltFishChampionshipReward5", 100000);
  859.            
  860.             // Geoengine
  861.             ExProperties geoengine = load(GEOENGINE_FILE);
  862.             GEODATA = geoengine.getProperty("GeoData", 0);
  863.             GEODATA_PATH = geoengine.getProperty("GeoDataPath", "./data/geodata/");
  864.             GEODATA_FORMAT = Enum.valueOf(GeoFormat.class, geoengine.getProperty("GeoDataFormat", GeoFormat.L2J.toString()));
  865.             COORD_SYNCHRONIZE = geoengine.getProperty("CoordSynchronize", -1);
  866.            
  867.             PART_OF_CHARACTER_HEIGHT = geoengine.getProperty("PartOfCharacterHeight", 75);
  868.             MAX_OBSTACLE_HEIGHT = geoengine.getProperty("MaxObstacleHeight", 32);
  869.            
  870.             PATHFIND_BUFFERS = geoengine.getProperty("PathFindBuffers", "100x6;128x6;192x6;256x4;320x4;384x4;500x2");
  871.             BASE_WEIGHT = geoengine.getProperty("BaseWeight", 10);
  872.             DIAGONAL_WEIGHT = geoengine.getProperty("DiagonalWeight", 14);
  873.             OBSTACLE_MULTIPLIER = geoengine.getProperty("ObstacleMultiplier", 10);
  874.             HEURISTIC_WEIGHT = geoengine.getProperty("HeuristicWeight", 20);
  875.             MAX_ITERATIONS = geoengine.getProperty("MaxIterations", 3500);
  876.             DEBUG_PATH = geoengine.getProperty("DebugPath", false);
  877.            
  878.             // HexID
  879.             ExProperties hexid = load(HEXID_FILE);
  880.             SERVER_ID = Integer.parseInt(hexid.getProperty("ServerID"));
  881.             HEX_ID = new BigInteger(hexid.getProperty("HexID"), 16).toByteArray();
  882.            
  883.            // Offline Shop
  884.            ExProperties offline = load(OFFLINE_FILE);
  885.            OFFLINE_TRADE_ENABLE = offline.getProperty("OfflineTradeEnable", false);
  886.            OFFLINE_CRAFT_ENABLE = offline.getProperty("OfflineCraftEnable", false);
  887.            OFFLINE_MODE_IN_PEACE_ZONE = offline.getProperty("OfflineModeInPeaceZone", false);
  888.            OFFLINE_MODE_NO_DAMAGE = offline.getProperty("OfflineModeNoDamage", false);
  889.            OFFLINE_SET_NAME_COLOR = offline.getProperty("OfflineSetNameColor", false);
  890.            OFFLINE_NAME_COLOR = Integer.decode("0x" + offline.getProperty("OfflineNameColor", 808080));
  891.            RESTORE_OFFLINERS = offline.getProperty("RestoreOffliners", false);
  892.            OFFLINE_MAX_DAYS = offline.getProperty("OfflineMaxDays", 10);
  893.            OFFLINE_DISCONNECT_FINISHED = offline.getProperty("OfflineDisconnectFinished", true);
  894.            
  895.             // NPCs / Monsters
  896.             ExProperties npcs = load(NPCS_FILE);
  897.             CHAMPION_FREQUENCY = npcs.getProperty("ChampionFrequency", 0);
  898.             CHAMP_MIN_LVL = npcs.getProperty("ChampionMinLevel", 20);
  899.             CHAMP_MAX_LVL = npcs.getProperty("ChampionMaxLevel", 70);
  900.             CHAMPION_HP = npcs.getProperty("ChampionHp", 8);
  901.             CHAMPION_HP_REGEN = npcs.getProperty("ChampionHpRegen", 1.);
  902.             CHAMPION_REWARDS = npcs.getProperty("ChampionRewards", 8);
  903.             CHAMPION_ADENAS_REWARDS = npcs.getProperty("ChampionAdenasRewards", 1);
  904.             CHAMPION_ATK = npcs.getProperty("ChampionAtk", 1.);
  905.             CHAMPION_SPD_ATK = npcs.getProperty("ChampionSpdAtk", 1.);
  906.             CHAMPION_REWARD = npcs.getProperty("ChampionRewardItem", 0);
  907.             CHAMPION_REWARD_ID = npcs.getProperty("ChampionRewardItemID", 6393);
  908.             CHAMPION_REWARD_QTY = npcs.getProperty("ChampionRewardItemQty", 1);
  909.            
  910.             BUFFER_MAX_SCHEMES = npcs.getProperty("BufferMaxSchemesPerChar", 4);
  911.             BUFFER_MAX_SKILLS = npcs.getProperty("BufferMaxSkillsPerScheme", 24);
  912.             BUFFER_STATIC_BUFF_COST = npcs.getProperty("BufferStaticCostPerBuff", -1);
  913.             BUFFER_BUFFS = npcs.getProperty("BufferBuffs");
  914.            
  915.             BUFFER_BUFFLIST = new HashMap<>();
  916.             for (String skillInfo : BUFFER_BUFFS.split(";"))
  917.             {
  918.                 final String[] infos = skillInfo.split(",");
  919.                 BUFFER_BUFFLIST.put(Integer.valueOf(infos[0]), new BuffSkillHolder(Integer.valueOf(infos[0]), Integer.valueOf(infos[1]), infos[2]));
  920.             }
  921.            
  922.             ALLOW_CLASS_MASTERS = npcs.getProperty("AllowClassMasters", false);
  923.             ALLOW_ENTIRE_TREE = npcs.getProperty("AllowEntireTree", false);
  924.             if (ALLOW_CLASS_MASTERS)
  925.                 CLASS_MASTER_SETTINGS = new ClassMasterSettings(npcs.getProperty("ConfigClassMaster"));
  926.            
  927.             ALT_GAME_FREE_TELEPORT = npcs.getProperty("AltFreeTeleporting", false);
  928.             ANNOUNCE_MAMMON_SPAWN = npcs.getProperty("AnnounceMammonSpawn", true);
  929.             ALT_MOB_AGRO_IN_PEACEZONE = npcs.getProperty("AltMobAgroInPeaceZone", true);
  930.             SHOW_NPC_LVL = npcs.getProperty("ShowNpcLevel", false);
  931.             SHOW_NPC_CREST = npcs.getProperty("ShowNpcCrest", false);
  932.             SHOW_SUMMON_CREST = npcs.getProperty("ShowSummonCrest", false);
  933.            
  934.             WYVERN_ALLOW_UPGRADER = npcs.getProperty("AllowWyvernUpgrader", true);
  935.             WYVERN_REQUIRED_LEVEL = npcs.getProperty("RequiredStriderLevel", 55);
  936.             WYVERN_REQUIRED_CRYSTALS = npcs.getProperty("RequiredCrystalsNumber", 10);
  937.            
  938.             RAID_HP_REGEN_MULTIPLIER = npcs.getProperty("RaidHpRegenMultiplier", 1.);
  939.             RAID_MP_REGEN_MULTIPLIER = npcs.getProperty("RaidMpRegenMultiplier", 1.);
  940.             RAID_DEFENCE_MULTIPLIER = npcs.getProperty("RaidDefenceMultiplier", 1.);
  941.             RAID_MINION_RESPAWN_TIMER = npcs.getProperty("RaidMinionRespawnTime", 300000);
  942.            
  943.             RAID_DISABLE_CURSE = npcs.getProperty("DisableRaidCurse", false);
  944.             RAID_CHAOS_TIME = npcs.getProperty("RaidChaosTime", 30);
  945.             GRAND_CHAOS_TIME = npcs.getProperty("GrandChaosTime", 30);
  946.             MINION_CHAOS_TIME = npcs.getProperty("MinionChaosTime", 30);
  947.            
  948.             SPAWN_INTERVAL_AQ = npcs.getProperty("AntQueenSpawnInterval", 36);
  949.             RANDOM_SPAWN_TIME_AQ = npcs.getProperty("AntQueenRandomSpawn", 17);
  950.            
  951.             SPAWN_INTERVAL_ANTHARAS = npcs.getProperty("AntharasSpawnInterval", 264);
  952.             RANDOM_SPAWN_TIME_ANTHARAS = npcs.getProperty("AntharasRandomSpawn", 72);
  953.             WAIT_TIME_ANTHARAS = npcs.getProperty("AntharasWaitTime", 30) * 60000;
  954.            
  955.             SPAWN_INTERVAL_BAIUM = npcs.getProperty("BaiumSpawnInterval", 168);
  956.             RANDOM_SPAWN_TIME_BAIUM = npcs.getProperty("BaiumRandomSpawn", 48);
  957.            
  958.             SPAWN_INTERVAL_CORE = npcs.getProperty("CoreSpawnInterval", 60);
  959.             RANDOM_SPAWN_TIME_CORE = npcs.getProperty("CoreRandomSpawn", 23);
  960.            
  961.             SPAWN_INTERVAL_FRINTEZZA = npcs.getProperty("FrintezzaSpawnInterval", 48);
  962.             RANDOM_SPAWN_TIME_FRINTEZZA = npcs.getProperty("FrintezzaRandomSpawn", 8);
  963.             WAIT_TIME_FRINTEZZA = npcs.getProperty("FrintezzaWaitTime", 1) * 60000;
  964.            
  965.             SPAWN_INTERVAL_ORFEN = npcs.getProperty("OrfenSpawnInterval", 48);
  966.             RANDOM_SPAWN_TIME_ORFEN = npcs.getProperty("OrfenRandomSpawn", 20);
  967.            
  968.             SPAWN_INTERVAL_SAILREN = npcs.getProperty("SailrenSpawnInterval", 36);
  969.             RANDOM_SPAWN_TIME_SAILREN = npcs.getProperty("SailrenRandomSpawn", 24);
  970.             WAIT_TIME_SAILREN = npcs.getProperty("SailrenWaitTime", 5) * 60000;
  971.            
  972.             SPAWN_INTERVAL_VALAKAS = npcs.getProperty("ValakasSpawnInterval", 264);
  973.             RANDOM_SPAWN_TIME_VALAKAS = npcs.getProperty("ValakasRandomSpawn", 72);
  974.             WAIT_TIME_VALAKAS = npcs.getProperty("ValakasWaitTime", 30) * 60000;
  975.            
  976.             SPAWN_INTERVAL_ZAKEN = npcs.getProperty("ZakenSpawnInterval", 60);
  977.             RANDOM_SPAWN_TIME_ZAKEN = npcs.getProperty("ZakenRandomSpawn", 20);
  978.            
  979.             GUARD_ATTACK_AGGRO_MOB = npcs.getProperty("GuardAttackAggroMob", false);
  980.             MAX_DRIFT_RANGE = npcs.getProperty("MaxDriftRange", 300);
  981.             KNOWNLIST_UPDATE_INTERVAL = npcs.getProperty("KnownListUpdateInterval", 1250);
  982.             MIN_NPC_ANIMATION = npcs.getProperty("MinNPCAnimation", 20);
  983.             MAX_NPC_ANIMATION = npcs.getProperty("MaxNPCAnimation", 40);
  984.             MIN_MONSTER_ANIMATION = npcs.getProperty("MinMonsterAnimation", 10);
  985.             MAX_MONSTER_ANIMATION = npcs.getProperty("MaxMonsterAnimation", 40);
  986.            
  987.             GRIDS_ALWAYS_ON = npcs.getProperty("GridsAlwaysOn", false);
  988.             GRID_NEIGHBOR_TURNON_TIME = npcs.getProperty("GridNeighborTurnOnTime", 1);
  989.             GRID_NEIGHBOR_TURNOFF_TIME = npcs.getProperty("GridNeighborTurnOffTime", 90);
  990.            
  991.             // players
  992.             ExProperties players = load(PLAYERS_FILE);
  993.             STARTING_ADENA = players.getProperty("StartingAdena", 100);
  994.             EFFECT_CANCELING = players.getProperty("CancelLesserEffect", true);
  995.             HP_REGEN_MULTIPLIER = players.getProperty("HpRegenMultiplier", 1.);
  996.             MP_REGEN_MULTIPLIER = players.getProperty("MpRegenMultiplier", 1.);
  997.             CP_REGEN_MULTIPLIER = players.getProperty("CpRegenMultiplier", 1.);
  998.             PLAYER_SPAWN_PROTECTION = players.getProperty("PlayerSpawnProtection", 0);
  999.             PLAYER_FAKEDEATH_UP_PROTECTION = players.getProperty("PlayerFakeDeathUpProtection", 0);
  1000.             RESPAWN_RESTORE_HP = players.getProperty("RespawnRestoreHP", 0.7);
  1001.             MAX_PVTSTORE_SLOTS_DWARF = players.getProperty("MaxPvtStoreSlotsDwarf", 5);
  1002.             MAX_PVTSTORE_SLOTS_OTHER = players.getProperty("MaxPvtStoreSlotsOther", 4);
  1003.             DEEPBLUE_DROP_RULES = players.getProperty("UseDeepBlueDropRules", true);
  1004.             ALT_GAME_DELEVEL = players.getProperty("Delevel", true);
  1005.             DEATH_PENALTY_CHANCE = players.getProperty("DeathPenaltyChance", 20);
  1006.            
  1007.             INVENTORY_MAXIMUM_NO_DWARF = players.getProperty("MaximumSlotsForNoDwarf", 80);
  1008.             INVENTORY_MAXIMUM_DWARF = players.getProperty("MaximumSlotsForDwarf", 100);
  1009.             INVENTORY_MAXIMUM_QUEST_ITEMS = players.getProperty("MaximumSlotsForQuestItems", 100);
  1010.             INVENTORY_MAXIMUM_PET = players.getProperty("MaximumSlotsForPet", 12);
  1011.             MAX_ITEM_IN_PACKET = Math.max(INVENTORY_MAXIMUM_NO_DWARF, INVENTORY_MAXIMUM_DWARF);
  1012.             ALT_WEIGHT_LIMIT = players.getProperty("AltWeightLimit", 1);
  1013.             WAREHOUSE_SLOTS_NO_DWARF = players.getProperty("MaximumWarehouseSlotsForNoDwarf", 100);
  1014.             WAREHOUSE_SLOTS_DWARF = players.getProperty("MaximumWarehouseSlotsForDwarf", 120);
  1015.             WAREHOUSE_SLOTS_CLAN = players.getProperty("MaximumWarehouseSlotsForClan", 150);
  1016.             FREIGHT_SLOTS = players.getProperty("MaximumFreightSlots", 20);
  1017.             ALT_GAME_FREIGHTS = players.getProperty("AltGameFreights", false);
  1018.             ALT_GAME_FREIGHT_PRICE = players.getProperty("AltGameFreightPrice", 1000);
  1019.            
  1020.             ENCHANT_CHANCE_WEAPON_MAGIC = players.getProperty("EnchantChanceMagicWeapon", 0.4);
  1021.             ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS = players.getProperty("EnchantChanceMagicWeapon15Plus", 0.2);
  1022.             ENCHANT_CHANCE_WEAPON_NONMAGIC = players.getProperty("EnchantChanceNonMagicWeapon", 0.7);
  1023.             ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS = players.getProperty("EnchantChanceNonMagicWeapon15Plus", 0.35);
  1024.             ENCHANT_CHANCE_ARMOR = players.getProperty("EnchantChanceArmor", 0.66);
  1025.             ENCHANT_MAX_WEAPON = players.getProperty("EnchantMaxWeapon", 0);
  1026.             ENCHANT_MAX_ARMOR = players.getProperty("EnchantMaxArmor", 0);
  1027.             ENCHANT_SAFE_MAX = players.getProperty("EnchantSafeMax", 3);
  1028.             ENCHANT_SAFE_MAX_FULL = players.getProperty("EnchantSafeMaxFull", 4);
  1029.            
  1030.             AUGMENTATION_NG_SKILL_CHANCE = players.getProperty("AugmentationNGSkillChance", 15);
  1031.             AUGMENTATION_NG_GLOW_CHANCE = players.getProperty("AugmentationNGGlowChance", 0);
  1032.             AUGMENTATION_MID_SKILL_CHANCE = players.getProperty("AugmentationMidSkillChance", 30);
  1033.             AUGMENTATION_MID_GLOW_CHANCE = players.getProperty("AugmentationMidGlowChance", 40);
  1034.             AUGMENTATION_HIGH_SKILL_CHANCE = players.getProperty("AugmentationHighSkillChance", 45);
  1035.             AUGMENTATION_HIGH_GLOW_CHANCE = players.getProperty("AugmentationHighGlowChance", 70);
  1036.             AUGMENTATION_TOP_SKILL_CHANCE = players.getProperty("AugmentationTopSkillChance", 60);
  1037.             AUGMENTATION_TOP_GLOW_CHANCE = players.getProperty("AugmentationTopGlowChance", 100);
  1038.             AUGMENTATION_BASESTAT_CHANCE = players.getProperty("AugmentationBaseStatChance", 1);
  1039.            
  1040.             KARMA_PLAYER_CAN_BE_KILLED_IN_PZ = players.getProperty("KarmaPlayerCanBeKilledInPeaceZone", false);
  1041.             KARMA_PLAYER_CAN_SHOP = players.getProperty("KarmaPlayerCanShop", true);
  1042.             KARMA_PLAYER_CAN_USE_GK = players.getProperty("KarmaPlayerCanUseGK", false);
  1043.             KARMA_PLAYER_CAN_TELEPORT = players.getProperty("KarmaPlayerCanTeleport", true);
  1044.             KARMA_PLAYER_CAN_TRADE = players.getProperty("KarmaPlayerCanTrade", true);
  1045.             KARMA_PLAYER_CAN_USE_WH = players.getProperty("KarmaPlayerCanUseWareHouse", true);
  1046.             KARMA_DROP_GM = players.getProperty("CanGMDropEquipment", false);
  1047.             KARMA_AWARD_PK_KILL = players.getProperty("AwardPKKillPVPPoint", true);
  1048.             KARMA_PK_LIMIT = players.getProperty("MinimumPKRequiredToDrop", 5);
  1049.             KARMA_NONDROPPABLE_PET_ITEMS = players.getProperty("ListOfPetItems", "2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650");
  1050.             KARMA_NONDROPPABLE_ITEMS = players.getProperty("ListOfNonDroppableItemsForPK", "1147,425,1146,461,10,2368,7,6,2370,2369");
  1051.            
  1052.             String[] array = KARMA_NONDROPPABLE_PET_ITEMS.split(",");
  1053.             KARMA_LIST_NONDROPPABLE_PET_ITEMS = new int[array.length];
  1054.            
  1055.             for (int i = 0; i < array.length; i++)
  1056.                 KARMA_LIST_NONDROPPABLE_PET_ITEMS[i] = Integer.parseInt(array[i]);
  1057.            
  1058.             array = KARMA_NONDROPPABLE_ITEMS.split(",");
  1059.             KARMA_LIST_NONDROPPABLE_ITEMS = new int[array.length];
  1060.            
  1061.             for (int i = 0; i < array.length; i++)
  1062.                 KARMA_LIST_NONDROPPABLE_ITEMS[i] = Integer.parseInt(array[i]);
  1063.            
  1064.             // sorting so binarySearch can be used later
  1065.             Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
  1066.             Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
  1067.            
  1068.             PVP_NORMAL_TIME = players.getProperty("PvPVsNormalTime", 15000);
  1069.             PVP_PVP_TIME = players.getProperty("PvPVsPvPTime", 30000);
  1070.            
  1071.             PARTY_XP_CUTOFF_METHOD = players.getProperty("PartyXpCutoffMethod", "level");
  1072.             PARTY_XP_CUTOFF_PERCENT = players.getProperty("PartyXpCutoffPercent", 3.);
  1073.             PARTY_XP_CUTOFF_LEVEL = players.getProperty("PartyXpCutoffLevel", 20);
  1074.             ALT_PARTY_RANGE = players.getProperty("AltPartyRange", 1600);
  1075.             ALT_PARTY_RANGE2 = players.getProperty("AltPartyRange2", 1400);
  1076.             ALT_LEAVE_PARTY_LEADER = players.getProperty("AltLeavePartyLeader", false);
  1077.            
  1078.             EVERYBODY_HAS_ADMIN_RIGHTS = players.getProperty("EverybodyHasAdminRights", false);
  1079.             MASTERACCESS_LEVEL = players.getProperty("MasterAccessLevel", 127);
  1080.             MASTERACCESS_NAME_COLOR = Integer.decode("0x" + players.getProperty("MasterNameColor", "00FF00"));
  1081.             MASTERACCESS_TITLE_COLOR = Integer.decode("0x" + players.getProperty("MasterTitleColor", "00FF00"));
  1082.             GM_HERO_AURA = players.getProperty("GMHeroAura", false);
  1083.             GM_STARTUP_INVULNERABLE = players.getProperty("GMStartupInvulnerable", true);
  1084.             GM_STARTUP_INVISIBLE = players.getProperty("GMStartupInvisible", true);
  1085.             GM_STARTUP_SILENCE = players.getProperty("GMStartupSilence", true);
  1086.             GM_STARTUP_AUTO_LIST = players.getProperty("GMStartupAutoList", true);
  1087.            
  1088.             PETITIONING_ALLOWED = players.getProperty("PetitioningAllowed", true);
  1089.             MAX_PETITIONS_PER_PLAYER = players.getProperty("MaxPetitionsPerPlayer", 5);
  1090.             MAX_PETITIONS_PENDING = players.getProperty("MaxPetitionsPending", 25);
  1091.            
  1092.             IS_CRAFTING_ENABLED = players.getProperty("CraftingEnabled", true);
  1093.             DWARF_RECIPE_LIMIT = players.getProperty("DwarfRecipeLimit", 50);
  1094.             COMMON_RECIPE_LIMIT = players.getProperty("CommonRecipeLimit", 50);
  1095.             ALT_BLACKSMITH_USE_RECIPES = players.getProperty("AltBlacksmithUseRecipes", true);
  1096.            
  1097.             AUTO_LEARN_SKILLS = players.getProperty("AutoLearnSkills", false);
  1098.             ALT_GAME_MAGICFAILURES = players.getProperty("MagicFailures", true);
  1099.             ALT_GAME_SHIELD_BLOCKS = players.getProperty("AltShieldBlocks", false);
  1100.             ALT_PERFECT_SHLD_BLOCK = players.getProperty("AltPerfectShieldBlockRate", 10);
  1101.             LIFE_CRYSTAL_NEEDED = players.getProperty("LifeCrystalNeeded", true);
  1102.             SP_BOOK_NEEDED = players.getProperty("SpBookNeeded", true);
  1103.             ES_SP_BOOK_NEEDED = players.getProperty("EnchantSkillSpBookNeeded", true);
  1104.             DIVINE_SP_BOOK_NEEDED = players.getProperty("DivineInspirationSpBookNeeded", true);
  1105.             ALT_GAME_SUBCLASS_WITHOUT_QUESTS = players.getProperty("AltSubClassWithoutQuests", false);
  1106.            
  1107.             BUFFS_MAX_AMOUNT = players.getProperty("MaxBuffsAmount", 20);
  1108.             STORE_SKILL_COOLTIME = players.getProperty("StoreSkillCooltime", true);
  1109.            
  1110.             // server
  1111.             ExProperties server = load(SERVER_FILE);
  1112.            
  1113.             GAMESERVER_HOSTNAME = server.getProperty("GameserverHostname");
  1114.             PORT_GAME = server.getProperty("GameserverPort", 7777);
  1115.            
  1116.             EXTERNAL_HOSTNAME = server.getProperty("ExternalHostname", "*");
  1117.             INTERNAL_HOSTNAME = server.getProperty("InternalHostname", "*");
  1118.            
  1119.             GAME_SERVER_LOGIN_PORT = server.getProperty("LoginPort", 9014);
  1120.             GAME_SERVER_LOGIN_HOST = server.getProperty("LoginHost", "127.0.0.1");
  1121.            
  1122.             REQUEST_ID = server.getProperty("RequestServerID", 0);
  1123.             ACCEPT_ALTERNATE_ID = server.getProperty("AcceptAlternateID", true);
  1124.            
  1125.             DATABASE_URL = server.getProperty("URL", "jdbc:mysql://localhost/acis");
  1126.             DATABASE_LOGIN = server.getProperty("Login", "root");
  1127.             DATABASE_PASSWORD = server.getProperty("Password", "");
  1128.             DATABASE_MAX_CONNECTIONS = server.getProperty("MaximumDbConnections", 10);
  1129.             DATABASE_MAX_IDLE_TIME = server.getProperty("MaximumDbIdleTime", 0);
  1130.            
  1131.             SERVER_LIST_BRACKET = server.getProperty("ServerListBrackets", false);
  1132.             SERVER_LIST_CLOCK = server.getProperty("ServerListClock", false);
  1133.             SERVER_GMONLY = server.getProperty("ServerGMOnly", false);
  1134.             SERVER_LIST_TESTSERVER = server.getProperty("TestServer", false);
  1135.            
  1136.             DELETE_DAYS = server.getProperty("DeleteCharAfterDays", 7);
  1137.             MAXIMUM_ONLINE_USERS = server.getProperty("MaximumOnlineUsers", 100);
  1138.             MIN_PROTOCOL_REVISION = server.getProperty("MinProtocolRevision", 730);
  1139.             MAX_PROTOCOL_REVISION = server.getProperty("MaxProtocolRevision", 746);
  1140.             if (MIN_PROTOCOL_REVISION > MAX_PROTOCOL_REVISION)
  1141.                 throw new Error("MinProtocolRevision is bigger than MaxProtocolRevision in server.properties.");
  1142.            
  1143.             DEFAULT_PUNISH = server.getProperty("DefaultPunish", 2);
  1144.             DEFAULT_PUNISH_PARAM = server.getProperty("DefaultPunishParam", 0);
  1145.            
  1146.             AUTO_LOOT = server.getProperty("AutoLoot", false);
  1147.             AUTO_LOOT_HERBS = server.getProperty("AutoLootHerbs", false);
  1148.             AUTO_LOOT_RAID = server.getProperty("AutoLootRaid", false);
  1149.            
  1150.             ALLOW_DISCARDITEM = server.getProperty("AllowDiscardItem", true);
  1151.             MULTIPLE_ITEM_DROP = server.getProperty("MultipleItemDrop", true);
  1152.             HERB_AUTO_DESTROY_TIME = server.getProperty("AutoDestroyHerbTime", 15) * 1000;
  1153.             ITEM_AUTO_DESTROY_TIME = server.getProperty("AutoDestroyItemTime", 600) * 1000;
  1154.             EQUIPABLE_ITEM_AUTO_DESTROY_TIME = server.getProperty("AutoDestroyEquipableItemTime", 0) * 1000;
  1155.             SPECIAL_ITEM_DESTROY_TIME = new HashMap<>();
  1156.             String[] data = server.getProperty("AutoDestroySpecialItemTime", (String[]) null, ",");
  1157.             if (data != null)
  1158.             {
  1159.                 for (String itemData : data)
  1160.                 {
  1161.                     String[] item = itemData.split("-");
  1162.                     SPECIAL_ITEM_DESTROY_TIME.put(Integer.parseInt(item[0]), Integer.parseInt(item[1]) * 1000);
  1163.                 }
  1164.             }
  1165.             PLAYER_DROPPED_ITEM_MULTIPLIER = server.getProperty("PlayerDroppedItemMultiplier", 1);
  1166.             SAVE_DROPPED_ITEM = server.getProperty("SaveDroppedItem", false);
  1167.            
  1168.             RATE_XP = server.getProperty("RateXp", 1.);
  1169.             RATE_SP = server.getProperty("RateSp", 1.);
  1170.             RATE_PARTY_XP = server.getProperty("RatePartyXp", 1.);
  1171.             RATE_PARTY_SP = server.getProperty("RatePartySp", 1.);
  1172.             RATE_DROP_ADENA = server.getProperty("RateDropAdena", 1.);
  1173.             RATE_CONSUMABLE_COST = server.getProperty("RateConsumableCost", 1.);
  1174.             RATE_DROP_ITEMS = server.getProperty("RateDropItems", 1.);
  1175.             RATE_DROP_ITEMS_BY_RAID = server.getProperty("RateRaidDropItems", 1.);
  1176.             RATE_DROP_SPOIL = server.getProperty("RateDropSpoil", 1.);
  1177.             RATE_DROP_MANOR = server.getProperty("RateDropManor", 1);
  1178.             RATE_QUEST_DROP = server.getProperty("RateQuestDrop", 1.);
  1179.             RATE_QUEST_REWARD = server.getProperty("RateQuestReward", 1.);
  1180.             RATE_QUEST_REWARD_XP = server.getProperty("RateQuestRewardXP", 1.);
  1181.             RATE_QUEST_REWARD_SP = server.getProperty("RateQuestRewardSP", 1.);
  1182.             RATE_QUEST_REWARD_ADENA = server.getProperty("RateQuestRewardAdena", 1.);
  1183.             RATE_KARMA_EXP_LOST = server.getProperty("RateKarmaExpLost", 1.);
  1184.             RATE_SIEGE_GUARDS_PRICE = server.getProperty("RateSiegeGuardsPrice", 1.);
  1185.             RATE_DROP_COMMON_HERBS = server.getProperty("RateCommonHerbs", 1.);
  1186.             RATE_DROP_HP_HERBS = server.getProperty("RateHpHerbs", 1.);
  1187.             RATE_DROP_MP_HERBS = server.getProperty("RateMpHerbs", 1.);
  1188.             RATE_DROP_SPECIAL_HERBS = server.getProperty("RateSpecialHerbs", 1.);
  1189.             PLAYER_DROP_LIMIT = server.getProperty("PlayerDropLimit", 3);
  1190.             PLAYER_RATE_DROP = server.getProperty("PlayerRateDrop", 5);
  1191.             PLAYER_RATE_DROP_ITEM = server.getProperty("PlayerRateDropItem", 70);
  1192.             PLAYER_RATE_DROP_EQUIP = server.getProperty("PlayerRateDropEquip", 25);
  1193.             PLAYER_RATE_DROP_EQUIP_WEAPON = server.getProperty("PlayerRateDropEquipWeapon", 5);
  1194.             PET_XP_RATE = server.getProperty("PetXpRate", 1.);
  1195.             PET_FOOD_RATE = server.getProperty("PetFoodRate", 1);
  1196.             SINEATER_XP_RATE = server.getProperty("SinEaterXpRate", 1.);
  1197.             KARMA_DROP_LIMIT = server.getProperty("KarmaDropLimit", 10);
  1198.             KARMA_RATE_DROP = server.getProperty("KarmaRateDrop", 70);
  1199.             KARMA_RATE_DROP_ITEM = server.getProperty("KarmaRateDropItem", 50);
  1200.             KARMA_RATE_DROP_EQUIP = server.getProperty("KarmaRateDropEquip", 40);
  1201.             KARMA_RATE_DROP_EQUIP_WEAPON = server.getProperty("KarmaRateDropEquipWeapon", 10);
  1202.            
  1203.             ALLOW_FREIGHT = server.getProperty("AllowFreight", true);
  1204.             ALLOW_WAREHOUSE = server.getProperty("AllowWarehouse", true);
  1205.             ALLOW_WEAR = server.getProperty("AllowWear", true);
  1206.             WEAR_DELAY = server.getProperty("WearDelay", 5);
  1207.             WEAR_PRICE = server.getProperty("WearPrice", 10);
  1208.             ALLOW_LOTTERY = server.getProperty("AllowLottery", true);
  1209.             ALLOW_WATER = server.getProperty("AllowWater", true);
  1210.             ALLOWFISHING = server.getProperty("AllowFishing", false);
  1211.             ALLOW_MANOR = server.getProperty("AllowManor", true);
  1212.             ALLOW_BOAT = server.getProperty("AllowBoat", true);
  1213.             ALLOW_CURSED_WEAPONS = server.getProperty("AllowCursedWeapons", true);
  1214.            
  1215.             String str = server.getProperty("EnableFallingDamage", "auto");
  1216.             ENABLE_FALLING_DAMAGE = "auto".equalsIgnoreCase(str) ? GEODATA > 0 : Boolean.parseBoolean(str);
  1217.            
  1218.             ALT_DEV_NO_SPAWNS = server.getProperty("NoSpawns", false);
  1219.             DEBUG = server.getProperty("Debug", false);
  1220.             DEVELOPER = server.getProperty("Developer", false);
  1221.             PACKET_HANDLER_DEBUG = server.getProperty("PacketHandlerDebug", false);
  1222.            
  1223.             DEADLOCK_DETECTOR = server.getProperty("DeadLockDetector", false);
  1224.             DEADLOCK_CHECK_INTERVAL = server.getProperty("DeadLockCheckInterval", 20);
  1225.             RESTART_ON_DEADLOCK = server.getProperty("RestartOnDeadlock", false);
  1226.            
  1227.             LOG_CHAT = server.getProperty("LogChat", false);
  1228.             LOG_ITEMS = server.getProperty("LogItems", false);
  1229.             GMAUDIT = server.getProperty("GMAudit", false);
  1230.            
  1231.             ENABLE_COMMUNITY_BOARD = server.getProperty("EnableCommunityBoard", false);
  1232.             BBS_DEFAULT = server.getProperty("BBSDefault", "_bbshome");
  1233.            
  1234.             ROLL_DICE_TIME = server.getProperty("RollDiceTime", 4200);
  1235.             HERO_VOICE_TIME = server.getProperty("HeroVoiceTime", 10000);
  1236.             SUBCLASS_TIME = server.getProperty("SubclassTime", 2000);
  1237.             DROP_ITEM_TIME = server.getProperty("DropItemTime", 1000);
  1238.             SERVER_BYPASS_TIME = server.getProperty("ServerBypassTime", 500);
  1239.             MULTISELL_TIME = server.getProperty("MultisellTime", 100);
  1240.             MANUFACTURE_TIME = server.getProperty("ManufactureTime", 300);
  1241.             MANOR_TIME = server.getProperty("ManorTime", 3000);
  1242.             SENDMAIL_TIME = server.getProperty("SendMailTime", 10000);
  1243.             CHARACTER_SELECT_TIME = server.getProperty("CharacterSelectTime", 3000);
  1244.             GLOBAL_CHAT_TIME = server.getProperty("GlobalChatTime", 0);
  1245.             TRADE_CHAT_TIME = server.getProperty("TradeChatTime", 0);
  1246.             SOCIAL_TIME = server.getProperty("SocialTime", 2000);
  1247.            
  1248.             L2WALKER_PROTECTION = server.getProperty("L2WalkerProtection", false);
  1249.             AUTODELETE_INVALID_QUEST_DATA = server.getProperty("AutoDeleteInvalidQuestData", false);
  1250.             ZONE_TOWN = server.getProperty("ZoneTown", 0);
  1251.             SERVER_NEWS = server.getProperty("ShowServerNews", false);
  1252.             DISABLE_TUTORIAL = server.getProperty("DisableTutorial", false);
  1253.         }
  1254.         else if (Server.serverMode == Server.MODE_LOGINSERVER)
  1255.         {
  1256.             _log.info("Loading loginserver configuration files.");
  1257.            
  1258.             ExProperties server = load(LOGIN_CONFIGURATION_FILE);
  1259.             GAME_SERVER_LOGIN_HOST = server.getProperty("LoginHostname", "*");
  1260.             GAME_SERVER_LOGIN_PORT = server.getProperty("LoginPort", 9013);
  1261.            
  1262.             LOGIN_BIND_ADDRESS = server.getProperty("LoginserverHostname", "*");
  1263.             PORT_LOGIN = server.getProperty("LoginserverPort", 2106);
  1264.            
  1265.             DEBUG = server.getProperty("Debug", false);
  1266.             DEVELOPER = server.getProperty("Developer", false);
  1267.             PACKET_HANDLER_DEBUG = server.getProperty("PacketHandlerDebug", false);
  1268.             ACCEPT_NEW_GAMESERVER = server.getProperty("AcceptNewGameServer", true);
  1269.             REQUEST_ID = server.getProperty("RequestServerID", 0);
  1270.             ACCEPT_ALTERNATE_ID = server.getProperty("AcceptAlternateID", true);
  1271.            
  1272.             LOGIN_TRY_BEFORE_BAN = server.getProperty("LoginTryBeforeBan", 10);
  1273.             LOGIN_BLOCK_AFTER_BAN = server.getProperty("LoginBlockAfterBan", 600);
  1274.            
  1275.             LOG_LOGIN_CONTROLLER = server.getProperty("LogLoginController", false);
  1276.            
  1277.             INTERNAL_HOSTNAME = server.getProperty("InternalHostname", "localhost");
  1278.             EXTERNAL_HOSTNAME = server.getProperty("ExternalHostname", "localhost");
  1279.            
  1280.             DATABASE_URL = server.getProperty("URL", "jdbc:mysql://localhost/acis");
  1281.             DATABASE_LOGIN = server.getProperty("Login", "root");
  1282.             DATABASE_PASSWORD = server.getProperty("Password", "");
  1283.             DATABASE_MAX_CONNECTIONS = server.getProperty("MaximumDbConnections", 10);
  1284.             DATABASE_MAX_IDLE_TIME = server.getProperty("MaximumDbIdleTime", 0);
  1285.            
  1286.             SHOW_LICENCE = server.getProperty("ShowLicence", true);
  1287.            
  1288.             AUTO_CREATE_ACCOUNTS = server.getProperty("AutoCreateAccounts", true);
  1289.            
  1290.             FLOOD_PROTECTION = server.getProperty("EnableFloodProtection", true);
  1291.             FAST_CONNECTION_LIMIT = server.getProperty("FastConnectionLimit", 15);
  1292.             NORMAL_CONNECTION_TIME = server.getProperty("NormalConnectionTime", 700);
  1293.             FAST_CONNECTION_TIME = server.getProperty("FastConnectionTime", 350);
  1294.             MAX_CONNECTION_PER_IP = server.getProperty("MaxConnectionPerIP", 50);
  1295.         }
  1296.         else
  1297.             _log.severe("Couldn't load configs: server mode wasn't set.");
  1298.     }
  1299.    
  1300.     // It has no instances
  1301.     private Config()
  1302.     {
  1303.     }
  1304.    
  1305.     public static void saveHexid(int serverId, String string)
  1306.     {
  1307.         Config.saveHexid(serverId, string, HEXID_FILE);
  1308.     }
  1309.    
  1310.     public static void saveHexid(int serverId, String hexId, String fileName)
  1311.     {
  1312.         try
  1313.         {
  1314.             Properties hexSetting = new Properties();
  1315.             File file = new File(fileName);
  1316.             file.createNewFile();
  1317.            
  1318.             OutputStream out = new FileOutputStream(file);
  1319.             hexSetting.setProperty("ServerID", String.valueOf(serverId));
  1320.             hexSetting.setProperty("HexID", hexId);
  1321.             hexSetting.store(out, "the hexID to auth into login");
  1322.             out.close();
  1323.         }
  1324.         catch (Exception e)
  1325.         {
  1326.             _log.warning("Failed to save hex id to " + fileName + " file.");
  1327.             e.printStackTrace();
  1328.         }
  1329.     }
  1330.    
  1331.     public static class ClassMasterSettings
  1332.     {
  1333.         private final Map<Integer, Boolean> _allowedClassChange;
  1334.         private final Map<Integer, List<IntIntHolder>> _claimItems;
  1335.         private final Map<Integer, List<IntIntHolder>> _rewardItems;
  1336.        
  1337.         public ClassMasterSettings(String configLine)
  1338.         {
  1339.             _allowedClassChange = new HashMap<>(3);
  1340.             _claimItems = new HashMap<>(3);
  1341.             _rewardItems = new HashMap<>(3);
  1342.            
  1343.             if (configLine != null)
  1344.                 parseConfigLine(configLine.trim());
  1345.         }
  1346.        
  1347.         private void parseConfigLine(String configLine)
  1348.         {
  1349.             StringTokenizer st = new StringTokenizer(configLine, ";");
  1350.             while (st.hasMoreTokens())
  1351.             {
  1352.                 // Get allowed class change.
  1353.                 int job = Integer.parseInt(st.nextToken());
  1354.                
  1355.                 _allowedClassChange.put(job, true);
  1356.                
  1357.                 List<IntIntHolder> items = new ArrayList<>();
  1358.                
  1359.                 // Parse items needed for class change.
  1360.                 if (st.hasMoreTokens())
  1361.                 {
  1362.                     StringTokenizer st2 = new StringTokenizer(st.nextToken(), "[],");
  1363.                     while (st2.hasMoreTokens())
  1364.                     {
  1365.                         StringTokenizer st3 = new StringTokenizer(st2.nextToken(), "()");
  1366.                         items.add(new IntIntHolder(Integer.parseInt(st3.nextToken()), Integer.parseInt(st3.nextToken())));
  1367.                     }
  1368.                 }
  1369.                
  1370.                 // Feed the map, and clean the list.
  1371.                 _claimItems.put(job, items);
  1372.                 items = new ArrayList<>();
  1373.                
  1374.                 // Parse gifts after class change.
  1375.                 if (st.hasMoreTokens())
  1376.                 {
  1377.                     StringTokenizer st2 = new StringTokenizer(st.nextToken(), "[],");
  1378.                     while (st2.hasMoreTokens())
  1379.                     {
  1380.                         StringTokenizer st3 = new StringTokenizer(st2.nextToken(), "()");
  1381.                         items.add(new IntIntHolder(Integer.parseInt(st3.nextToken()), Integer.parseInt(st3.nextToken())));
  1382.                     }
  1383.                 }
  1384.                
  1385.                 _rewardItems.put(job, items);
  1386.             }
  1387.         }
  1388.        
  1389.         public boolean isAllowed(int job)
  1390.         {
  1391.             if (_allowedClassChange == null)
  1392.                 return false;
  1393.            
  1394.             if (_allowedClassChange.containsKey(job))
  1395.                 return _allowedClassChange.get(job);
  1396.            
  1397.             return false;
  1398.         }
  1399.        
  1400.         public List<IntIntHolder> getRewardItems(int job)
  1401.         {
  1402.             return _rewardItems.get(job);
  1403.         }
  1404.        
  1405.         public List<IntIntHolder> getRequiredItems(int job)
  1406.         {
  1407.             return _claimItems.get(job);
  1408.         }
  1409.     }
  1410.    
  1411.     /**
  1412.      * itemId1,itemNumber1;itemId2,itemNumber2... to the int[n][2] = [itemId1][itemNumber1],[itemId2][itemNumber2]...
  1413.      * @param line
  1414.      * @return an array consisting of parsed items.
  1415.      */
  1416.     private static int[][] parseItemsList(String line)
  1417.     {
  1418.         final String[] propertySplit = line.split(";");
  1419.         if (propertySplit.length == 0)
  1420.             return null;
  1421.        
  1422.         int i = 0;
  1423.         String[] valueSplit;
  1424.         final int[][] result = new int[propertySplit.length][];
  1425.         for (String value : propertySplit)
  1426.         {
  1427.             valueSplit = value.split(",");
  1428.             if (valueSplit.length != 2)
  1429.             {
  1430.                 _log.warning("parseItemsList[Config.load()]: invalid entry -> \"" + valueSplit[0] + "\", should be itemId,itemNumber");
  1431.                 return null;
  1432.             }
  1433.            
  1434.             result[i] = new int[2];
  1435.             try
  1436.             {
  1437.                 result[i][0] = Integer.parseInt(valueSplit[0]);
  1438.             }
  1439.             catch (NumberFormatException e)
  1440.             {
  1441.                 _log.warning("parseItemsList[Config.load()]: invalid itemId -> \"" + valueSplit[0] + "\"");
  1442.                 return null;
  1443.             }
  1444.            
  1445.             try
  1446.             {
  1447.                 result[i][1] = Integer.parseInt(valueSplit[1]);
  1448.             }
  1449.             catch (NumberFormatException e)
  1450.             {
  1451.                 _log.warning("parseItemsList[Config.load()]: invalid item number -> \"" + valueSplit[1] + "\"");
  1452.                 return null;
  1453.             }
  1454.             i++;
  1455.         }
  1456.         return result;
  1457.     }
  1458.    
  1459.     public static ExProperties load(String filename)
  1460.     {
  1461.         return load(new File(filename));
  1462.     }
  1463.    
  1464.     public static ExProperties load(File file)
  1465.     {
  1466.         ExProperties result = new ExProperties();
  1467.        
  1468.         try
  1469.         {
  1470.             result.load(file);
  1471.         }
  1472.         catch (IOException e)
  1473.         {
  1474.             _log.warning("Error loading config : " + file.getName() + "!");
  1475.         }
  1476.        
  1477.         return result;
  1478.     }
  1479. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement