Advertisement
Guest User

Config.java

a guest
Aug 3rd, 2019
697
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 123.51 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.commons.config;
  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.  
  30. import net.sf.l2j.commons.type.Server;
  31. import net.sf.l2j.commons.util.StringUtil;
  32. import net.sf.l2j.gameserver.model.Location;
  33. import net.sf.l2j.gameserver.model.holder.ItemHolder;
  34. import net.sf.l2j.gameserver.util.FloodProtectorConfig;
  35.  
  36. import org.slf4j.Logger;
  37. import org.slf4j.LoggerFactory;
  38.  
  39. public final class Config
  40. {
  41.     protected static final Logger _log = LoggerFactory.getLogger(Config.class.getName());
  42.    
  43.     public static final String BANNED_IP_XML = "./config/banned.xml";
  44.    
  45.     public static final String GEODATA_FILE = "./config/server/geodata.properties";
  46.     public static final String OLYMPIAD_FILE = "./config/server/olympiad.properties";
  47.     public static final String CLANS_FILE = "./config/server/clans.properties";
  48.     public static final String MANOR_FILE = "./config/server/manor.properties";
  49.     public static final String FS_FILE = "./config/server/foursepulchers.properties";
  50.     public static final String SEVENSINGS_FILE = "./config/server/sevensings.properties";
  51.     public static final String RIFT_FILE = "./config/server/rift.properties";
  52.     public static final String ALTSETTINGS_FILE = "./config/server/altsettings.properties";
  53.     public static final String AUGMENT_FILE = "./config/server/augmentation.properties";
  54.     public static final String NPCS_FILE = "./config/server/npcs.properties";
  55.     public static final String ENCHANT_FILE = "./config/server/enchant.properties";
  56.     public static final String SIEGE_FILE = "./config/server/siege.properties";
  57.     public static final String RATES_FILE = "./config/server/rates.properties";
  58.    
  59.     public static final String FLOOD_FILE = "./config/protection/floodprotector.properties";
  60.     public static final String PROTECT_FILE = "./config/protection/protection.properties";
  61.     public static final String GUARD_FILE = "./config/protection/guard.properties";
  62.    
  63.     public static final String SKILLS_FILE = "./config/players/skills.properties";
  64.     public static final String PLAYERS_FILE = "./config/players/players.properties";
  65.     public static final String INVENTORY_FILE = "./config/players/inventory.properties";
  66.     public static final String ADMIN_FILE = "./config/players/admins.properties";
  67.    
  68.     public static final String HEXID_FILE = "./config/network/hexid.txt";
  69.     public static final String LOGIN_FILE = "./config/network/loginserver.properties";
  70.     public static final String SERVER_FILE = "./config/network/gameserver.properties";
  71.    
  72.     public static final String SERVICES_FILE = "./config/mods/services.properties";
  73.     public static final String CUSTOMS_FILE = "./config/mods/customs.properties";
  74.     public static final String CHAMPIONS_FILE = "./config/mods/champions.properties";
  75.     public static final String MARRIED_FILE = "./config/mods/married.properties";
  76.     public static final String LOTTERY_FILE = "./config/mods/lottery.properties";
  77.     public static final String FISHING_FILE = "./config/mods/fishing.properties";
  78.     public static final String BUFFER_FILE = "./config/mods/buffer.properties";
  79.    
  80.     public static final String PCBANG_FILE = "./config/mods/events/pcbang.properties";
  81.     public static final String MEDAL_FILE = "./config/mods/events/medals.properties";
  82.     public static final String PVP_REWARD_FILE = "./config/mods/events/pvpreward.properties";
  83.    
  84.     public static final String EVENTS_CAPTURE_TEAM_FLAG_FILE = "./config/mods/fun_events/CaptureTeamFlag.properties";
  85.     public static final String EVENTS_DEATH_MATCH_FILE = "./config/mods/fun_events/DeathMatch.properties";
  86.     public static final String EVENTS_LAST_HERO_FILE = "./config/mods/fun_events/LastHero.properties";
  87.     public static final String EVENTS_TEAM_VS_TEAM_FILE = "./config/mods/fun_events/TeamVsTeam.properties";
  88.    
  89.     // --------------------------------------------------
  90.     // services.properties
  91.     // --------------------------------------------------
  92.     public static boolean NooblesEnabled;
  93.     public static int NoblItemId;
  94.     public static int NoblItemCount;
  95.     public static int HeroItemId;
  96.     public static Map<Integer, Integer> HeroService;
  97.     public static boolean GenderEnabled;
  98.     public static int GenderItemId;
  99.     public static int GenderItemCount;
  100.     public static boolean NullPkEnabled;
  101.     public static int NullPkItemId;
  102.     public static int NullPkItemCount;
  103.     public static boolean ClanLvl6Enabled;
  104.     public static int ClanLvl6ItemId;
  105.     public static int ClanLvl6ItemCount;
  106.     public static boolean ClanLvl7Enabled;
  107.     public static int ClanLvl7ItemId;
  108.     public static int ClanLvl7ItemCount;
  109.     public static boolean ClanLvl8Enabled;
  110.     public static int ClanLvl8ItemId;
  111.     public static int ClanLvl8ItemCount;
  112.     public static boolean ClanSkillEnabled;
  113.     public static int ClanSkillItemId;
  114.     public static int ClanSkillItemCount;
  115.     public static boolean ClanRepEnabled;
  116.     public static int ClanRepItemId;
  117.     public static int ClanRepItemCount;
  118.     public static int ClanRepCount;
  119.     public static int ChangeNameItemId;
  120.     public static int ChangeNameItemCount;
  121.     public static String ChangeNamePattern;
  122.     public static int ChangeNameColorItemId;
  123.     public static int ChangeNameColorItemCount;
  124.     public static int ChangeTitleColorItemId;
  125.     public static int ChangeTitleColorItemCount;
  126.     public static boolean LevelUpEnabled;
  127.     public static int LevelUpItemId;
  128.     public static int LevelUpItemCount;
  129.     public static int LevelUpAdd;
  130.     public static int LevelUpMinLevel;
  131.     public static int LevelUpMaxLevel;
  132.  
  133.     public static boolean DelevelEnabled;
  134.     public static int DelevelItemId;
  135.     public static int DelevelItemCount;
  136.     public static int DelevelMinLevel;
  137.     public static int DelevelLvl;
  138.  
  139.     public static boolean ENABLE_MENU;
  140.     public static boolean ALLOW_EXP;
  141.     public static boolean ALLOW_PM;
  142.     public static boolean ALLOW_TRADE;
  143.     public static boolean ALLOW_LOOT;
  144.     public static boolean ALLOW_REPAIR;
  145.     public static boolean ALLOW_IPBLOCK;
  146.     public static int UP_ONLINE;
  147.     public static boolean OFFLINE_TRADE_ENABLE;
  148.     public static boolean OFFLINE_CRAFT_ENABLE;
  149.     public static boolean RESTORE_OFFLINERS;
  150.     public static int OFFLINE_MAX_DAYS;
  151.     public static boolean OFFLINE_DISCONNECT_FINISHED;
  152.     public static boolean OFFLINE_SET_NAME_COLOR;
  153.     public static int OFFLINE_NAME_COLOR;
  154.     public static boolean OFFLINE_FAME;
  155.     public static boolean OFFLINE_SLEEP_EFFECT;
  156.     public static boolean L2TOPDEMON_ENABLED;
  157.     public static int L2TOPDEMON_POLLINTERVAL;
  158.     public static boolean L2TOPDEMON_IGNOREFIRST;
  159.     public static int L2TOPDEMON_MIN;
  160.     public static int L2TOPDEMON_MAX;
  161.     public static int L2TOPDEMON_ITEM;
  162.     public static String L2TOPDEMON_MESSAGE;
  163.     public static String L2TOPDEMON_URL;
  164.     public static String L2TOPDEMON_PREFIX;
  165.    
  166.     public static boolean MMOTopEnable;
  167.     public static String MMOTopUrl;
  168.     public static int MMOTopRefreshTime;
  169.     public static int MMOTopRewardItemId;
  170.     public static int MMOTopRewardItemCount;
  171.    
  172.     // --------------------------------------------------
  173.     // customs.properties
  174.     // --------------------------------------------------
  175.     public static boolean UNLIM_SHOTS;
  176.     public static boolean UNLIMITED_ARROWS;
  177.     public static boolean ENABLE_CHANGE_PSWD;
  178.     public static int PSWD_LEGHT_MIN;
  179.     public static int PSWD_LEGHT_MAX;
  180.     public static boolean ENABLE_CLAN_REP_ITEM;
  181.     public static int CLAN_REP_COUNT;
  182.     public static int ALT_SUBCLASS_MAX_SUB_COUNT;
  183.     public static boolean ALT_SUBCLASS_WITH_CUSTOM_ITEM;
  184.     public static int ALT_SUBCLASS_WITH_CUSTOM_ITEM_ID;
  185.     public static int ALT_SUBCLASS_WITH_CUSTOM_ITEM_COUNT;
  186.     public static boolean ALT_SUBCLASS_WITH_ITEM_AND_NO_QUEST;
  187.     public static boolean ALT_SUBCLASS_WITHOUT_QUESTS;
  188.     public static boolean ALT_NOBLE_ON_BARAKIEL_KILL;
  189.     public static boolean ALT_SUB_ON_CUSTOM_RAID_KILL;
  190.     public static String ALT_SUB_RAID_IDS;
  191.     public static List<Integer> ALT_SUB_LIST_RAID_IDS;
  192.     public static boolean NEW_CHAR_IS_NOBLE;
  193.     public static int CRUMA_MAX_LEVEL_ENTER;
  194.     public static boolean BUFF_CUSTOM_LEVELS;
  195.     public static int BUFF_MIN_LEVEL;
  196.     public static int BUFF_MAX_LEVEL;
  197.    
  198.     // --------------------------------------------------
  199.     // pvpreward.properties
  200.     // --------------------------------------------------
  201.    
  202.     public static boolean PVP_REWARD_ENABLED;
  203.     public static int PVP_REWARD_PVP_LEVEL_DIF;
  204.     public static int PVP_REWARD_PVP_UPDATE_TIME;
  205.     public static int[] PVP_REWARD_ITEMS;
  206.     public static int[] PVP_REWARD_ITEMS_COUNT;
  207.     public static int[] PVP_REWARD_ITEMS_CHANCE;
  208.     public static int PVP_REWARD_EXP_AMOUNT;
  209.     public static int PVP_REWARD_SP_AMOUNT;
  210.     public static boolean PVP_REWARD_BLOCK_SAME_IP;
  211.    
  212.     public static int PVP_REWARD_PK_LEVEL_DIF;
  213.     public static int PVP_REWARD_PK_UPDATE_TIME;
  214.     public static int[] PVP_REWARD_PK_ITEMS;
  215.     public static int[] PVP_REWARD_PK_ITEMS_COUNT;
  216.     public static int[] PVP_REWARD_PK_ITEMS_CHANCE;
  217.     public static int PVP_REWARD_PK_EXP_AMOUNT;
  218.     public static int PVP_REWARD_PK_SP_AMOUNT;
  219.     public static boolean PVP_REWARD_PK_BLOCK_SAME_IP;
  220.    
  221.     // --------------------------------------------------
  222.     // Clans settings
  223.     // --------------------------------------------------
  224.     public static int ALT_CLAN_JOIN_DAYS;
  225.     public static int ALT_CLAN_CREATE_DAYS;
  226.     public static int ALT_CLAN_DISSOLVE_DAYS;
  227.     public static int ALT_ALLY_JOIN_DAYS_WHEN_LEAVED;
  228.     public static int ALT_ALLY_JOIN_DAYS_WHEN_DISMISSED;
  229.     public static int ALT_ACCEPT_CLAN_DAYS_WHEN_DISMISSED;
  230.     public static int ALT_CREATE_ALLY_DAYS_WHEN_DISSOLVED;
  231.     public static int ALT_MAX_NUM_OF_CLANS_IN_ALLY;
  232.     public static int ALT_CLAN_MEMBERS_FOR_WAR;
  233.     public static int ALT_CLAN_WAR_PENALTY_WHEN_ENDED;
  234.     public static boolean ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH;
  235.     public static boolean REMOVE_CASTLE_CIRCLETS;
  236.     public static int CH_BUY_ITEM_ID;
  237.     public static String REGEX_CLAN_NAME;
  238.    
  239.     /** Manor */
  240.     public static int ALT_MANOR_REFRESH_TIME;
  241.     public static int ALT_MANOR_REFRESH_MIN;
  242.     public static int ALT_MANOR_APPROVE_TIME;
  243.     public static int ALT_MANOR_APPROVE_MIN;
  244.     public static int ALT_MANOR_MAINTENANCE_PERIOD;
  245.     public static boolean ALT_MANOR_SAVE_ALL_ACTIONS;
  246.     public static int ALT_MANOR_SAVE_PERIOD_RATE;
  247.    
  248.     /** Clan Hall function */
  249.     public static long CH_TELE_FEE_RATIO;
  250.     public static int CH_TELE1_FEE;
  251.     public static int CH_TELE2_FEE;
  252.     public static long CH_ITEM_FEE_RATIO;
  253.     public static int CH_ITEM1_FEE;
  254.     public static int CH_ITEM2_FEE;
  255.     public static int CH_ITEM3_FEE;
  256.     public static long CH_MPREG_FEE_RATIO;
  257.     public static int CH_MPREG1_FEE;
  258.     public static int CH_MPREG2_FEE;
  259.     public static int CH_MPREG3_FEE;
  260.     public static int CH_MPREG4_FEE;
  261.     public static int CH_MPREG5_FEE;
  262.     public static long CH_HPREG_FEE_RATIO;
  263.     public static int CH_HPREG1_FEE;
  264.     public static int CH_HPREG2_FEE;
  265.     public static int CH_HPREG3_FEE;
  266.     public static int CH_HPREG4_FEE;
  267.     public static int CH_HPREG5_FEE;
  268.     public static int CH_HPREG6_FEE;
  269.     public static int CH_HPREG7_FEE;
  270.     public static int CH_HPREG8_FEE;
  271.     public static int CH_HPREG9_FEE;
  272.     public static int CH_HPREG10_FEE;
  273.     public static int CH_HPREG11_FEE;
  274.     public static int CH_HPREG12_FEE;
  275.     public static int CH_HPREG13_FEE;
  276.     public static long CH_EXPREG_FEE_RATIO;
  277.     public static int CH_EXPREG1_FEE;
  278.     public static int CH_EXPREG2_FEE;
  279.     public static int CH_EXPREG3_FEE;
  280.     public static int CH_EXPREG4_FEE;
  281.     public static int CH_EXPREG5_FEE;
  282.     public static int CH_EXPREG6_FEE;
  283.     public static int CH_EXPREG7_FEE;
  284.     public static long CH_SUPPORT_FEE_RATIO;
  285.     public static int CH_SUPPORT1_FEE;
  286.     public static int CH_SUPPORT2_FEE;
  287.     public static int CH_SUPPORT3_FEE;
  288.     public static int CH_SUPPORT4_FEE;
  289.     public static int CH_SUPPORT5_FEE;
  290.     public static int CH_SUPPORT6_FEE;
  291.     public static int CH_SUPPORT7_FEE;
  292.     public static int CH_SUPPORT8_FEE;
  293.     public static long CH_CURTAIN_FEE_RATIO;
  294.     public static int CH_CURTAIN1_FEE;
  295.     public static int CH_CURTAIN2_FEE;
  296.     public static long CH_FRONT_FEE_RATIO;
  297.     public static int CH_FRONT1_FEE;
  298.     public static int CH_FRONT2_FEE;
  299.    
  300.     // --------------------------------------------------
  301.     // Events settings
  302.     // --------------------------------------------------
  303.    
  304.     /** Olympiad */
  305.     public static int ALT_OLY_START_TIME;
  306.     public static int ALT_OLY_MIN;
  307.     public static long ALT_OLY_CPERIOD;
  308.     public static long ALT_OLY_BATTLE;
  309.     public static long ALT_OLY_WPERIOD;
  310.     public static long ALT_OLY_VPERIOD;
  311.     public static int ALT_OLY_WAIT_TIME;
  312.     public static int ALT_OLY_WAIT_BATTLE;
  313.     public static int ALT_OLY_WAIT_END;
  314.     public static int ALT_OLY_START_POINTS;
  315.     public static int ALT_OLY_WEEKLY_POINTS;
  316.     public static int ALT_OLY_MIN_MATCHES;
  317.     public static int ALT_OLY_CLASSED;
  318.     public static int ALT_OLY_NONCLASSED;
  319.     public static int[][] ALT_OLY_CLASSED_REWARD;
  320.     public static int[][] ALT_OLY_NONCLASSED_REWARD;
  321.     public static int ALT_OLY_COMP_RITEM;
  322.     public static int ALT_OLY_GP_PER_POINT;
  323.     public static int ALT_OLY_HERO_POINTS;
  324.     public static int ALT_OLY_RANK1_POINTS;
  325.     public static int ALT_OLY_RANK2_POINTS;
  326.     public static int ALT_OLY_RANK3_POINTS;
  327.     public static int ALT_OLY_RANK4_POINTS;
  328.     public static int ALT_OLY_RANK5_POINTS;
  329.     public static int ALT_OLY_MAX_POINTS;
  330.     public static int ALT_OLY_DIVIDER_CLASSED;
  331.     public static int ALT_OLY_DIVIDER_NON_CLASSED;
  332.     public static boolean ALT_OLY_ANNOUNCE_GAMES;
  333.     public static int ALT_OLY_RESET_SKILL_REUSE;
  334.    
  335.     /** SevenSigns Festival */
  336.     public static boolean ALT_GAME_REQUIRE_CLAN_CASTLE;
  337.     public static boolean ALT_GAME_CASTLE_DAWN;
  338.     public static boolean ALT_GAME_CASTLE_DUSK;
  339.     public static int ALT_FESTIVAL_MIN_PLAYER;
  340.     public static int ALT_MAXIMUM_PLAYER_CONTRIB;
  341.     public static long ALT_FESTIVAL_MANAGER_START;
  342.     public static long ALT_FESTIVAL_LENGTH;
  343.     public static long ALT_FESTIVAL_CYCLE_LENGTH;
  344.     public static long ALT_FESTIVAL_FIRST_SPAWN;
  345.     public static long ALT_FESTIVAL_FIRST_SWARM;
  346.     public static long ALT_FESTIVAL_SECOND_SPAWN;
  347.     public static long ALT_FESTIVAL_SECOND_SWARM;
  348.     public static long ALT_FESTIVAL_CHEST_SPAWN;
  349.     public static boolean ALT_SEVENSIGNS_LAZY_UPDATE;
  350.    
  351.     /** Four Sepulchers */
  352.     public static int FS_TIME_ATTACK;
  353.     public static int FS_TIME_COOLDOWN;
  354.     public static int FS_TIME_ENTRY;
  355.     public static int FS_TIME_WARMUP;
  356.     public static int FS_PARTY_MEMBER_COUNT;
  357.    
  358.     /** dimensional rift */
  359.     public static int RIFT_MIN_PARTY_SIZE;
  360.     public static int RIFT_SPAWN_DELAY;
  361.     public static int RIFT_MAX_JUMPS;
  362.     public static int RIFT_AUTO_JUMPS_TIME_MIN;
  363.     public static int RIFT_AUTO_JUMPS_TIME_MAX;
  364.     public static int RIFT_ENTER_COST_RECRUIT;
  365.     public static int RIFT_ENTER_COST_SOLDIER;
  366.     public static int RIFT_ENTER_COST_OFFICER;
  367.     public static int RIFT_ENTER_COST_CAPTAIN;
  368.     public static int RIFT_ENTER_COST_COMMANDER;
  369.     public static int RIFT_ENTER_COST_HERO;
  370.     public static double RIFT_BOSS_ROOM_TIME_MUTIPLY;
  371.    
  372.     /** Wedding system */
  373.     public static boolean ALLOW_WEDDING;
  374.     public static int WEDDING_PRICE;
  375.     public static boolean WEDDING_SAMESEX;
  376.     public static boolean WEDDING_FORMALWEAR;
  377.    
  378.     /** Lottery */
  379.     public static int ALT_LOTTERY_PRIZE;
  380.     public static int ALT_LOTTERY_TICKET_PRICE;
  381.     public static double ALT_LOTTERY_5_NUMBER_RATE;
  382.     public static double ALT_LOTTERY_4_NUMBER_RATE;
  383.     public static double ALT_LOTTERY_3_NUMBER_RATE;
  384.     public static int ALT_LOTTERY_2_AND_1_NUMBER_PRIZE;
  385.    
  386.     /** Fishing tournament */
  387.     public static boolean ALT_FISH_CHAMPIONSHIP_ENABLED;
  388.     public static int ALT_FISH_CHAMPIONSHIP_REWARD_ITEM;
  389.     public static int ALT_FISH_CHAMPIONSHIP_REWARD_1;
  390.     public static int ALT_FISH_CHAMPIONSHIP_REWARD_2;
  391.     public static int ALT_FISH_CHAMPIONSHIP_REWARD_3;
  392.     public static int ALT_FISH_CHAMPIONSHIP_REWARD_4;
  393.     public static int ALT_FISH_CHAMPIONSHIP_REWARD_5;
  394.    
  395.     /** Buffer */
  396.     public static int BUFFER_PRICE_ITEM;
  397.     public static int BUFFER_REMOVE_COST;
  398.     public static int BUFFER_CP_HP_RESTORE_COST;
  399.     public static int BUFFER_MP_RESTORE_COST;
  400.     public static String BUFFER_RESTRICTION;
  401.     public static int BUFFER_RESTORE_DELAY;
  402.     public static boolean BUFFER_ENABLED;
  403.     public static boolean BUFFER_ANIMATION;
  404.     public static int BUFFER_SCHEME_MAX_NAME_LENGTH;
  405.     public static int BUFFER_SCHEME_MIN_NAME_LENGTH;
  406.     public static int BUFFER_MAX_SCHEMES;
  407.    
  408.     // --------------------------------------------------
  409.     // HexID
  410.     // --------------------------------------------------
  411.    
  412.     public static int SERVER_ID;
  413.     public static byte[] HEX_ID;
  414.    
  415.     // --------------------------------------------------
  416.     // FloodProtectors
  417.     // --------------------------------------------------
  418.    
  419.     public static FloodProtectorConfig FLOOD_PROTECTOR_ROLL_DICE;
  420.     public static FloodProtectorConfig FLOOD_PROTECTOR_HERO_VOICE;
  421.     public static FloodProtectorConfig FLOOD_PROTECTOR_SUBCLASS;
  422.     public static FloodProtectorConfig FLOOD_PROTECTOR_DROP_ITEM;
  423.     public static FloodProtectorConfig FLOOD_PROTECTOR_SERVER_BYPASS;
  424.     public static FloodProtectorConfig FLOOD_PROTECTOR_MULTISELL;
  425.     public static FloodProtectorConfig FLOOD_PROTECTOR_MANUFACTURE;
  426.     public static FloodProtectorConfig FLOOD_PROTECTOR_MANOR;
  427.     public static FloodProtectorConfig FLOOD_PROTECTOR_SENDMAIL;
  428.     public static FloodProtectorConfig FLOOD_PROTECTOR_CHARACTER_SELECT;
  429.    
  430.     // --------------------------------------------------
  431.     // Loginserver
  432.     // --------------------------------------------------
  433.    
  434.     public static String LOGIN_BIND_ADDRESS;
  435.     public static int PORT_LOGIN;
  436.    
  437.     public static boolean ACCEPT_NEW_GAMESERVER;
  438.     public static int REQUEST_ID;
  439.     public static boolean ACCEPT_ALTERNATE_ID;
  440.    
  441.     public static int LOGIN_TRY_BEFORE_BAN;
  442.     public static int LOGIN_BLOCK_AFTER_BAN;
  443.    
  444.     public static boolean LOG_LOGIN_CONTROLLER;
  445.    
  446.     public static boolean SHOW_LICENCE;
  447.     public static int IP_UPDATE_TIME;
  448.     public static boolean FORCE_GGAUTH;
  449.    
  450.     // Login Server Crypted Guard
  451.     public static boolean CRYPT_TOKEN;
  452.    
  453.     public static boolean AUTO_CREATE_ACCOUNTS;
  454.    
  455.     public static boolean FLOOD_PROTECTION;
  456.     public static int FAST_CONNECTION_LIMIT;
  457.     public static int NORMAL_CONNECTION_TIME;
  458.     public static int FAST_CONNECTION_TIME;
  459.     public static int MAX_CONNECTION_PER_IP;
  460.     public static int ITEM_AUTO_DESTROY_TIME;
  461.     // --------------------------------------------------
  462.     // NPCs / Monsters
  463.     // --------------------------------------------------
  464.     public static int WAIT_TIME_FRINTEZZA;
  465.     public static boolean CHAMPION_ENABLE;
  466.     public static int CHAMPION_ADENAS_REWARDS_BLUE;
  467.     public static int CHAMPION_ADENAS_REWARDS_RED;
  468.     public static int CHAMPION_EXP_SP_BLUE;
  469.     public static int CHAMPION_EXP_SP_RED;
  470.     public static int CHAMPION_FREQUENCY_BLUE;
  471.     public static int CHAMPION_FREQUENCY_RED;
  472.     public static int CHAMPION_HP_BLUE;
  473.     public static int CHAMPION_HP_RED;
  474.     public static int CHAMPION_HP_REGEN_BLUE;
  475.     public static int CHAMPION_HP_REGEN_RED;
  476.     public static int CHAMPION_MATK_BLUE;
  477.     public static int CHAMPION_MATK_RED;
  478.     public static int CHAMPION_MAX_LVL_BLUE;
  479.     public static int CHAMPION_MAX_LVL_RED;
  480.     public static int CHAMPION_MCRT_RATE_BLUE;
  481.     public static int CHAMPION_MCRT_RATE_RED;
  482.     public static int CHAMPION_MDEF_BLUE;
  483.     public static int CHAMPION_MDEF_RED;
  484.     public static int CHAMPION_MIN_LVL_BLUE;
  485.     public static int CHAMPION_MIN_LVL_RED;
  486.     public static int CHAMPION_PATK_BLUE;
  487.     public static int CHAMPION_PATK_RED;
  488.     public static int CHAMPION_PCRT_RATE_BLUE;
  489.     public static int CHAMPION_PCRT_RATE_RED;
  490.     public static int CHAMPION_PDEF_BLUE;
  491.     public static int CHAMPION_PDEF_RED;
  492.     public static int CHAMPION_REWARD_BLUE;
  493.     public static int CHAMPION_REWARD_ID_BLUE;
  494.     public static int CHAMPION_REWARD_ID_RED;
  495.     public static int CHAMPION_REWARD_QTY_BLUE;
  496.     public static int CHAMPION_REWARD_QTY_RED;
  497.     public static int CHAMPION_REWARD_RED;
  498.     public static int CHAMPION_REWARDS_BLUE;
  499.     public static int CHAMPION_REWARDS_RED;
  500.     public static int CHAMPION_RUN_BLUE;
  501.     public static int CHAMPION_RUN_RED;
  502.     public static int CHAMPION_SPD_ATK_BLUE;
  503.     public static int CHAMPION_SPD_ATK_RED;
  504.     public static int CHAMPION_SPD_MATK_BLUE;
  505.     public static int CHAMPION_SPD_MATK_RED;
  506.     public static int CHAMPION_WALK_BLUE;
  507.     public static int CHAMPION_WALK_RED;
  508.     public static String CHAMPION_TITLE_BLUE;
  509.     public static String CHAMPION_TITLE_RED;
  510.    
  511.     /** Misc */
  512.     public static boolean ALLOW_CLASS_MASTERS;
  513.     public static ClassMasterSettings CLASS_MASTER_SETTINGS;
  514.     public static boolean ALLOW_ENTIRE_TREE;
  515.     public static boolean ANNOUNCE_MAMMON_SPAWN;
  516.     public static boolean ALT_MOB_AGRO_IN_PEACEZONE;
  517.     public static boolean ALT_GAME_FREE_TELEPORT;
  518.     public static boolean SHOW_NPC_LVL;
  519.     public static boolean SHOW_NPC_CREST;
  520.     public static boolean SHOW_SUMMON_CREST;
  521.     public static boolean PET_CAN_FEEL_HUNGRY;
  522.     public static int SKILLS_CAST_TIME_MIN;
  523.    
  524.     /** Wyvern Manager */
  525.     public static boolean WYVERN_ALLOW_UPGRADER;
  526.     public static int WYVERN_REQUIRED_LEVEL;
  527.     public static int WYVERN_REQUIRED_CRYSTALS;
  528.    
  529.     /** Raid Boss */
  530.     public static double RAID_HP_REGEN_MULTIPLIER;
  531.     public static double RAID_MP_REGEN_MULTIPLIER;
  532.     public static double RAID_DEFENCE_MULTIPLIER;
  533.     public static double RAID_MINION_RESPAWN_TIMER;
  534.    
  535.     public static boolean RAID_DISABLE_CURSE;
  536.     public static int RAID_CHAOS_TIME;
  537.     public static int GRAND_CHAOS_TIME;
  538.     public static int MINION_CHAOS_TIME;
  539.    
  540.     public static boolean RAID_RANGE_CHECK;
  541.     public static boolean RAID_REVIVE_HP;
  542.     public static int RAID_RANGE_VALUE;
  543.    
  544.     /** Grand Boss */
  545.     public static int SPAWN_INTERVAL_AQ;
  546.     public static int RANDOM_SPAWN_TIME_AQ;
  547.    
  548.     public static int SPAWN_INTERVAL_ANTHARAS;
  549.     public static int RANDOM_SPAWN_TIME_ANTHARAS;
  550.     public static int WAIT_TIME_ANTHARAS;
  551.    
  552.     public static int SPAWN_INTERVAL_BAIUM;
  553.     public static int RANDOM_SPAWN_TIME_BAIUM;
  554.    
  555.     public static int SPAWN_INTERVAL_CORE;
  556.     public static int RANDOM_SPAWN_TIME_CORE;
  557.    
  558.     public static int SPAWN_INTERVAL_FRINTEZZA;
  559.     public static int RANDOM_SPAWN_TIME_FRINTEZZA;
  560.    
  561.     public static int SPAWN_INTERVAL_ORFEN;
  562.     public static int RANDOM_SPAWN_TIME_ORFEN;
  563.    
  564.     public static int SPAWN_INTERVAL_SAILREN;
  565.     public static int RANDOM_SPAWN_TIME_SAILREN;
  566.     public static int WAIT_TIME_SAILREN;
  567.    
  568.     public static int SPAWN_INTERVAL_VALAKAS;
  569.     public static int RANDOM_SPAWN_TIME_VALAKAS;
  570.     public static int WAIT_TIME_VALAKAS;
  571.    
  572.     public static int SPAWN_INTERVAL_ZAKEN;
  573.     public static int RANDOM_SPAWN_TIME_ZAKEN;
  574.     public static int ZAKEN_MAX_ENTRY_LEVEL;
  575.    
  576.     /** IA */
  577.     public static boolean GUARD_ATTACK_AGGRO_MOB;
  578.     public static int MAX_DRIFT_RANGE;
  579.     public static long KNOWNLIST_UPDATE_INTERVAL;
  580.     public static int MIN_NPC_ANIMATION;
  581.     public static int MAX_NPC_ANIMATION;
  582.     public static int MIN_MONSTER_ANIMATION;
  583.     public static int MAX_MONSTER_ANIMATION;
  584.    
  585.     public static boolean GRIDS_ALWAYS_ON;
  586.     public static int GRID_NEIGHBOR_TURNON_TIME;
  587.     public static int GRID_NEIGHBOR_TURNOFF_TIME;
  588.    
  589.     // --------------------------------------------------
  590.     // Players
  591.     // --------------------------------------------------
  592.    
  593.     /** Misc */
  594.     public static boolean STARTING_CUSTOM_ITEMS;
  595.     public static List<int[]> STARTING_CUSTOM_ITEMS_F = new ArrayList<>();
  596.     public static List<int[]> STARTING_CUSTOM_ITEMS_M = new ArrayList<>();
  597.     public static boolean ALLOW_MOD_TITLE_NCHAR;
  598.     public static String MOD_TITLE_NCHAR;
  599.     public static String REGEX_CHAR_NAME;
  600.     public static String REGEX_PET_NAME;
  601.     public static boolean ALLOW_NEW_CHAR_LEVEL;
  602.     public static double NEW_CHAR_LEVEL;
  603.     public static int STARTING_ADENA;
  604.     public static boolean EFFECT_CANCELING;
  605.     public static double HP_REGEN_MULTIPLIER;
  606.     public static double MP_REGEN_MULTIPLIER;
  607.     public static double CP_REGEN_MULTIPLIER;
  608.     public static int PLAYER_SPAWN_PROTECTION;
  609.     public static boolean PLAYER_SPAWN_PROTECTION_AURA;
  610.     public static int PLAYER_FAKEDEATH_UP_PROTECTION;
  611.     public static double RESPAWN_RESTORE_HP;
  612.     public static int MAX_PVTSTORE_SLOTS_DWARF;
  613.     public static int MAX_PVTSTORE_SLOTS_OTHER;
  614.     public static boolean DEEPBLUE_DROP_RULES;
  615.     public static boolean ALT_GAME_DELEVEL;
  616.     public static int DEATH_PENALTY_CHANCE;
  617.    
  618.     public static int MAX_PATK_SPEED;
  619.     public static int MAX_MATK_SPEED;
  620.    
  621.     public static boolean CHAR_CUSTOM_START_POINT;
  622.     public static HashMap<String, Integer[]> HUMAN_CUSTOM_START_POINT = new HashMap<>();
  623.     public static HashMap<String, Integer[]> ELF_CUSTOM_START_POINT = new HashMap<>();
  624.     public static HashMap<String, Integer[]> DARKELF_CUSTOM_START_POINT = new HashMap<>();
  625.     public static HashMap<String, Integer[]> ORC_CUSTOM_START_POINT = new HashMap<>();
  626.     public static HashMap<String, Integer[]> DWARF_CUSTOM_START_POINT = new HashMap<>();
  627.     public static HashMap<String, HashMap<String, Integer[]>> CUSTOM_START_POINT_HOLDER = new HashMap<>();
  628.     public static int OLY_RESTRICTED_ENCHANT_VALUE;
  629.    
  630.     public static boolean CTF_ENABLED;
  631.     public static boolean CTF_AURA;
  632.     public static boolean CTF_IN_INSTANCE;
  633.     public static boolean CTF_REVIVE_RECOVERY;
  634.     public static boolean CTF_ALLOW_INTERFERENCE;
  635.     public static boolean CTF_ALLOW_POTIONS;
  636.     public static boolean CTF_ALLOW_SUMMON;
  637.     public static boolean CTF_ON_START_REMOVE_ALL_EFFECTS;
  638.     public static boolean CTF_ON_START_UNSUMMON_PET;
  639.     public static boolean CTF_JOIN_CURSED;
  640.     public static int CTF_REVIVE_DELAY;
  641.     public static boolean CTF_CLOSE_COLISEUM_DOORS;
  642.     public static boolean CTF_ALLOW_TEAM_CASTING;
  643.     public static boolean CTF_RETURNORIGINAL;
  644.     public static int CTF_MIN_LVL;
  645.     public static int CTF_MAX_LVL;
  646.     public static int CTF_JOIN_TIME;
  647.     public static int CTF_EVENT_TIME;
  648.     public static int CTF_MIN_PLAYERS;
  649.     public static int CTF_MAX_PLAYERS;
  650.     public static int[] CTF_REWARD_ID;
  651.     public static int[] CTF_REWARD_AMOUNT;
  652.     public static Location CTF_BLUE_TEAM_LOC;
  653.     public static Location CTF_BLUE_FLAG_LOC;
  654.     public static Location CTF_RED_TEAM_LOC;
  655.     public static Location CTF_RED_FLAG_LOC;
  656.    
  657.     public static boolean DM_ENABLED;
  658.     public static boolean DM_ON_START_REMOVE_ALL_EFFECTS;
  659.     public static boolean DM_ON_START_UNSUMMON_PET;
  660.     public static Location DM_EVENT_LOCATION;
  661.     public static boolean DM_RESORE_HP_MP_CP;
  662.     public static boolean DM_ALLOW_POTIONS;
  663.     public static boolean DM_ALLOW_SUMMON;
  664.     public static boolean DM_JOIN_CURSED;
  665.     public static boolean DM_ALLOW_INTERFERENCE;
  666.     public static boolean DM_RESET_SKILL_REUSE;
  667.     public static boolean DM_RETURNORIGINAL;
  668.     public static int DM_REVIVE_DELAY;
  669.     public static int DM_REG_TIME;
  670.     public static int DM_EVENT_TIME;
  671.     public static int DM_MIN_PLAYERS;
  672.     public static int DM_MAX_PLAYERS;
  673.     public static int DM_MIN_LVL;
  674.     public static int DM_MAX_LVL;
  675.     public static int[] DM_REWARD_ITEM;
  676.     public static int[] DM_REWARD_ITEM_COUNT;
  677.    
  678.     public static boolean LH_ENABLED;
  679.    
  680.     public static boolean LH_ON_START_REMOVE_ALL_EFFECTS;
  681.     public static boolean LH_ON_START_UNSUMMON_PET;
  682.     public static boolean LH_RESORE_HP_MP_CP;
  683.     public static boolean LH_ALLOW_POTIONS;
  684.     public static boolean LH_ALLOW_SUMMON;
  685.     public static boolean LH_JOIN_CURSED;
  686.     public static boolean LH_ALLOW_INTERFERENCE;
  687.     public static boolean LH_REWARD_KILLS;
  688.     public static boolean LH_GIVE_HERO;
  689.     public static Location LH_LOC;
  690.     public static int LH_HERO_DAYS;
  691.     public static int LH_REG_TIME;
  692.     public static int LH_EVENT_TIME;
  693.     public static int[] LH_REWARD_ITEM;
  694.     public static int[] LH_REWARD_ITEM_COUNT;
  695.     public static int LH_MIN_PLAYERS;
  696.     public static int LH_MAX_PLAYERS;
  697.     public static int LH_MIN_LVL;
  698.     public static int LH_MAX_LVL;
  699.     public static int LH_SUPER_PRIZE_ID;
  700.     public static int LH_SUPER_PRIZE_COUNT;
  701.    
  702.     public static boolean TVT_ALLOW_POTIONS;
  703.     public static long TVT_REVIVE_DELAY;
  704.     public static boolean TVT_ALLOW_SUMMON;
  705.     public static boolean TVT_ALLOW_ENEMY_HEALING;
  706.     public static boolean TVT_JOIN_CURSED;
  707.     public static boolean TVT_ON_START_REMOVE_ALL_EFFECTS;
  708.     public static boolean TVT_ON_START_RECOVERY;
  709.     public static boolean TVT_ON_START_UNSUMMON_PET;
  710.     public static boolean TVT_CLOSE_COLISEUM_DOORS;
  711.     public static boolean TVT_ALLOW_INTERFERENCE;
  712.     public static boolean TVT_REVIVE_RECOVERY;
  713.     public static boolean TVT_PRICE_NO_KILLS;
  714.     public static boolean TVT_ALLOW_TEAM_CASTING;
  715.     public static boolean TVT_ALLOW_TEAM_ATTACKING;
  716.     public static boolean TVT_ENABLED;
  717.     public static boolean TVT_AURA;
  718.     public static boolean TVT_ININSTANCE;
  719.     public static boolean TVT_ORIGINALRETURN;
  720.     public static int TVT_MIN_LVL;
  721.     public static int TVT_MAX_LVL;
  722.     public static int[] TVT_REWARD_ID;
  723.     public static int[] TVT_REWARD_AMOUNT;
  724.     public static int TVT_JOIN_TIME;
  725.     public static int TVT_EVENT_TIME;
  726.     public static int TVT_MIN_PLAYERS;
  727.     public static int TVT_MAX_PLAYERS;
  728.     public static int[] TVT_BLUE_TEAM_LOC;
  729.     public static int[] TVT_RED_TEAM_LOC;
  730.    
  731.     public static boolean REMOVE_EFFECTS_AFTER_DEATH;
  732.     public static boolean L2OFF_SHOTS;
  733.     static
  734.     {
  735.         CUSTOM_START_POINT_HOLDER.put("HumanCharCustomStartPoint", HUMAN_CUSTOM_START_POINT);
  736.         CUSTOM_START_POINT_HOLDER.put("ElfCharCustomStartPoint", ELF_CUSTOM_START_POINT);
  737.         CUSTOM_START_POINT_HOLDER.put("DarkElfCharCustomStartPoint", DARKELF_CUSTOM_START_POINT);
  738.         CUSTOM_START_POINT_HOLDER.put("OrcCharCustomStartPoint", ORC_CUSTOM_START_POINT);
  739.         CUSTOM_START_POINT_HOLDER.put("DwarfCharCustomStartPoint", DWARF_CUSTOM_START_POINT);
  740.     }
  741.    
  742.     /** Inventory & WH */
  743.     public static int INVENTORY_MAXIMUM_NO_DWARF;
  744.     public static int INVENTORY_MAXIMUM_DWARF;
  745.     public static int INVENTORY_MAXIMUM_QUEST_ITEMS;
  746.     public static int INVENTORY_MAXIMUM_PET;
  747.     public static int MAX_ITEM_IN_PACKET;
  748.     public static double ALT_WEIGHT_LIMIT;
  749.     public static int WAREHOUSE_SLOTS_NO_DWARF;
  750.     public static int WAREHOUSE_SLOTS_DWARF;
  751.     public static int WAREHOUSE_SLOTS_CLAN;
  752.     public static int FREIGHT_SLOTS;
  753.     public static boolean ALT_GAME_FREIGHTS;
  754.     public static int ALT_GAME_FREIGHT_PRICE;
  755.    
  756.     /** Enchant */
  757.     public static double ENCHANT_CHANCE_WEAPON_MAGIC;
  758.     public static double ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS;
  759.     public static double ENCHANT_CHANCE_WEAPON_NONMAGIC;
  760.     public static double ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS;
  761.     public static double ENCHANT_CHANCE_ARMOR;
  762.     public static int ENCHANT_MAX_WEAPON;
  763.     public static int ENCHANT_MAX_ARMOR;
  764.     public static int ENCHANT_SAFE_MAX;
  765.     public static int ENCHANT_SAFE_MAX_FULL;
  766.     public static boolean SCROLL_STACKABLE;
  767.     public static int ENCHANT_FAILED_VALUE;
  768.    
  769.     /** Augmentations */
  770.     public static int AUGMENTATION_NG_SKILL_CHANCE;
  771.     public static int AUGMENTATION_NG_GLOW_CHANCE;
  772.     public static int AUGMENTATION_MID_SKILL_CHANCE;
  773.     public static int AUGMENTATION_MID_GLOW_CHANCE;
  774.     public static int AUGMENTATION_HIGH_SKILL_CHANCE;
  775.     public static int AUGMENTATION_HIGH_GLOW_CHANCE;
  776.     public static int AUGMENTATION_TOP_SKILL_CHANCE;
  777.     public static int AUGMENTATION_TOP_GLOW_CHANCE;
  778.     public static int AUGMENTATION_BASESTAT_CHANCE;
  779.     public static boolean AUGMENT_AVAILABLE_TRADE;
  780.    
  781.     /** Karma & PvP */
  782.     public static boolean KARMA_PLAYER_CAN_BE_KILLED_IN_PZ;
  783.     public static boolean KARMA_PLAYER_CAN_SHOP;
  784.     public static boolean KARMA_PLAYER_CAN_USE_GK;
  785.     public static boolean KARMA_PLAYER_CAN_TELEPORT;
  786.     public static boolean KARMA_PLAYER_CAN_TRADE;
  787.     public static boolean KARMA_PLAYER_CAN_USE_WH;
  788.    
  789.     public static boolean KARMA_DROP_GM;
  790.     public static boolean KARMA_AWARD_PK_KILL;
  791.     public static int KARMA_PK_LIMIT;
  792.    
  793.     public static String KARMA_NONDROPPABLE_PET_ITEMS;
  794.     public static String KARMA_NONDROPPABLE_ITEMS;
  795.     public static int[] KARMA_LIST_NONDROPPABLE_PET_ITEMS;
  796.     public static int[] KARMA_LIST_NONDROPPABLE_ITEMS;
  797.    
  798.     public static int PVP_NORMAL_TIME;
  799.     public static int PVP_PVP_TIME;
  800.    
  801.     /** Party */
  802.     public static String PARTY_XP_CUTOFF_METHOD;
  803.     public static int PARTY_XP_CUTOFF_LEVEL;
  804.     public static double PARTY_XP_CUTOFF_PERCENT;
  805.     public static int ALT_PARTY_RANGE;
  806.     public static int ALT_PARTY_RANGE2;
  807.     public static boolean ALT_LEAVE_PARTY_LEADER;
  808.    
  809.     /** GMs & Admin Stuff */
  810.     public static String RESTRICTED_CHAR_NAMES;
  811.     public static List<String> LIST_RESTRICTED_CHAR_NAMES = new ArrayList<>();
  812.     public static boolean EVERYBODY_HAS_ADMIN_RIGHTS;
  813.     public static int MASTERACCESS_LEVEL;
  814.     public static int MASTERACCESS_NAME_COLOR;
  815.     public static int MASTERACCESS_TITLE_COLOR;
  816.     public static boolean GM_HERO_AURA;
  817.     public static boolean GM_STARTUP_INVULNERABLE;
  818.     public static boolean GM_STARTUP_INVISIBLE;
  819.     public static boolean GM_STARTUP_SILENCE;
  820.     public static boolean GM_STARTUP_AUTO_LIST;
  821.    
  822.     /** petitions */
  823.     public static boolean PETITIONING_ALLOWED;
  824.     public static int MAX_PETITIONS_PER_PLAYER;
  825.     public static int MAX_PETITIONS_PENDING;
  826.    
  827.     /** Crafting **/
  828.     public static boolean IS_CRAFTING_ENABLED;
  829.     public static int DWARF_RECIPE_LIMIT;
  830.     public static int COMMON_RECIPE_LIMIT;
  831.     public static boolean ALT_BLACKSMITH_USE_RECIPES;
  832.    
  833.     /** Skills & Classes **/
  834.     public static boolean ENABLE_MODIFY_SKILL_DURATION;
  835.     public static Map<Integer, Integer> SKILL_DURATION_LIST;
  836.     public static boolean AUTO_LEARN_SKILLS;
  837.     public static boolean ALT_GAME_MAGICFAILURES;
  838.     public static boolean ALT_GAME_SHIELD_BLOCKS;
  839.     public static int ALT_PERFECT_SHLD_BLOCK;
  840.     public static boolean LIFE_CRYSTAL_NEEDED;
  841.     public static boolean SP_BOOK_NEEDED;
  842.     public static boolean ES_SP_BOOK_NEEDED;
  843.     public static boolean DIVINE_SP_BOOK_NEEDED;
  844.     public static double NORMAL_BUFFS_TIME_MULTIPLIER;
  845.     public static double CHANT_BUFFS_TIME_MULTIPLIER;
  846.     public static double DANCE_BUFFS_TIME_MULTIPLIER;
  847.     public static double SONG_BUFFS_TIME_MULTIPLIER;
  848.     public static double SPECIAL_BUFFS_TIME_MULTIPLIER;
  849.     public static double SUMMON_BUFFS_TIME_MULTIPLIER;
  850.     public static double RESIST_BUFFS_TIME_MULTIPLIER;
  851.     public static double PAAGRIO_BUFFS_TIME_MULTIPLIER;
  852.     public static boolean STORE_SKILL_COOLTIME;
  853.     public static int BUFFS_MAX_AMOUNT;
  854.     public static boolean RANDOM_FEAR_MOVE;
  855.     public static String STRIDER_CAST_ALLOW;
  856.     public static String DEMONIC_SWORD_LEFT_SKILLS;
  857.     public static Integer[] STRIDER_CAST_SKILL_LIST;
  858.     public static Integer[] DEMONIC_SWORD_CAST_SKILL_LIST;
  859.  
  860.  
  861.     // --------------------------------------------------
  862.     // Server
  863.     // --------------------------------------------------
  864.    
  865.     public static String GAMESERVER_HOSTNAME;
  866.     public static int PORT_GAME;
  867.     public static String EXTERNAL_HOSTNAME;
  868.     public static String INTERNAL_HOSTNAME;
  869.     public static int GAME_SERVER_LOGIN_PORT;
  870.     public static String GAME_SERVER_LOGIN_HOST;
  871.    
  872.     /** serverList & Test */
  873.     public static boolean SERVER_LIST_BRACKET;
  874.     public static boolean SERVER_LIST_CLOCK;
  875.     public static boolean SERVER_LIST_TESTSERVER;
  876.     public static boolean SERVER_GMONLY;
  877.     public static boolean TEST_SERVER;
  878.    
  879.     /** clients related */
  880.     public static int DELETE_DAYS;
  881.     public static int MAXIMUM_ONLINE_USERS;
  882.     public static int MIN_PROTOCOL_REVISION;
  883.     public static int MAX_PROTOCOL_REVISION;
  884.    
  885.     /** Jail & Punishements **/
  886.     public static boolean JAIL_IS_PVP;
  887.     public static int DEFAULT_PUNISH;
  888.     public static int DEFAULT_PUNISH_PARAM;
  889.     public static String DEFAULT_GLOBAL_CHAT;
  890.     public static String DEFAULT_TRADE_CHAT;
  891.     public static int CHAT_ALL_LEVEL;
  892.     public static int CHAT_TELL_LEVEL;
  893.     public static int CHAT_SHOUT_LEVEL;
  894.     public static int CHAT_TRADE_LEVEL;
  895.    
  896.     /** Auto-loot */
  897.     public static boolean AUTO_LOOT;
  898.     public static boolean AUTO_LOOT_HERBS;
  899.     public static boolean AUTO_LOOT_RAID;
  900.    
  901.     /** Items Management */
  902.     public static boolean ALLOW_DISCARDITEM;
  903.     public static boolean MULTIPLE_ITEM_DROP;
  904.     public static int AUTODESTROY_ITEM_AFTER;
  905.     public static int HERB_AUTO_DESTROY_TIME;
  906.     public static String PROTECTED_ITEMS;
  907.    
  908.     public static List<Integer> LIST_PROTECTED_ITEMS;
  909.    
  910.     public static boolean DESTROY_DROPPED_PLAYER_ITEM;
  911.     public static boolean DESTROY_EQUIPABLE_PLAYER_ITEM;
  912.     public static boolean SAVE_DROPPED_ITEM;
  913.     public static boolean EMPTY_DROPPED_ITEM_TABLE_AFTER_LOAD;
  914.     public static int SAVE_DROPPED_ITEM_INTERVAL;
  915.     public static boolean CLEAR_DROPPED_ITEM_TABLE;
  916.    
  917.     /** Rate control */
  918.     public static double RATE_XP;
  919.     public static double RATE_SP;
  920.     public static double RATE_PARTY_XP;
  921.     public static double RATE_PARTY_SP;
  922.     public static double RATE_DROP_ADENA;
  923.     public static double RATE_CONSUMABLE_COST;
  924.     public static double RATE_DROP_ITEMS;
  925.     public static double RATE_DROP_ITEMS_BY_RAID;
  926.     public static double RATE_DROP_ITEMS_BY_GRAND_RAID;
  927.     public static double RATE_DROP_SPOIL;
  928.     public static int RATE_DROP_MANOR;
  929.    
  930.     public static double RATE_QUEST_DROP;
  931.     public static double RATE_QUEST_REWARD;
  932.     public static double RATE_QUEST_REWARD_XP;
  933.     public static double RATE_QUEST_REWARD_SP;
  934.     public static double RATE_QUEST_REWARD_ADENA;
  935.    
  936.     public static double RATE_KARMA_EXP_LOST;
  937.     public static double RATE_SIEGE_GUARDS_PRICE;
  938.    
  939.     public static int PLAYER_DROP_LIMIT;
  940.     public static int PLAYER_RATE_DROP;
  941.     public static int PLAYER_RATE_DROP_ITEM;
  942.     public static int PLAYER_RATE_DROP_EQUIP;
  943.     public static int PLAYER_RATE_DROP_EQUIP_WEAPON;
  944.    
  945.     public static int KARMA_DROP_LIMIT;
  946.     public static int KARMA_RATE_DROP;
  947.     public static int KARMA_RATE_DROP_ITEM;
  948.     public static int KARMA_RATE_DROP_EQUIP;
  949.     public static int KARMA_RATE_DROP_EQUIP_WEAPON;
  950.    
  951.     public static double PET_XP_RATE;
  952.     public static int PET_FOOD_RATE;
  953.     public static double SINEATER_XP_RATE;
  954.    
  955.     public static double RATE_DROP_COMMON_HERBS;
  956.     public static double RATE_DROP_HP_HERBS;
  957.     public static double RATE_DROP_MP_HERBS;
  958.     public static double RATE_DROP_SPECIAL_HERBS;
  959.    
  960.     /** Allow types */
  961.     public static boolean ALLOW_FREIGHT;
  962.     public static boolean ALLOW_WAREHOUSE;
  963.     public static boolean ALLOW_WEAR;
  964.     public static int WEAR_DELAY;
  965.     public static int WEAR_PRICE;
  966.     public static boolean ALLOW_LOTTERY;
  967.     public static boolean ALLOW_RACE;
  968.     public static boolean ALLOW_WATER;
  969.     public static boolean ALLOWFISHING;
  970.     public static boolean ALLOW_BOAT;
  971.     public static boolean ALLOW_CURSED_WEAPONS;
  972.     public static boolean ALLOW_MANOR;
  973.     public static boolean ENABLE_FALLING_DAMAGE;
  974.    
  975.     /** Debug & Dev */
  976.     public static boolean ALT_DEV_NO_SCRIPTS;
  977.     public static boolean ALT_DEV_NO_SPAWNS;
  978.     public static boolean DEBUG;
  979.     public static boolean DEVELOPER;
  980.     public static boolean PACKET_HANDLER_DEBUG;
  981.    
  982.     /** Deadlock Detector */
  983.     public static boolean DEADLOCK_DETECTOR;
  984.     public static int DEADLOCK_CHECK_INTERVAL;
  985.     public static boolean RESTART_ON_DEADLOCK;
  986.    
  987.     /** Logs */
  988.     public static boolean LOG_CHAT;
  989.     public static boolean LOG_ITEMS;
  990.     public static boolean GMAUDIT;
  991.    
  992.     /** Community Board */
  993.     public static boolean ENABLE_COMMUNITY_BOARD;
  994.     public static String BBS_DEFAULT;
  995.    
  996.     /** Geodata */
  997.     public static int COORD_SYNCHRONIZE;
  998.     public static int GEODATA;
  999.     public static boolean FORCE_GEODATA;
  1000.    
  1001.     public static boolean GEODATA_CELLFINDING;
  1002.     public static String PATHFIND_BUFFERS;
  1003.     public static double LOW_WEIGHT;
  1004.     public static double MEDIUM_WEIGHT;
  1005.     public static double HIGH_WEIGHT;
  1006.     public static boolean ADVANCED_DIAGONAL_STRATEGY;
  1007.     public static double DIAGONAL_WEIGHT;
  1008.     public static int MAX_POSTFILTER_PASSES;
  1009.     public static boolean DEBUG_PATH;
  1010.    
  1011.     /** Misc */
  1012.     public static boolean L2WALKER_PROTECTION;
  1013.     public static boolean AUTODELETE_INVALID_QUEST_DATA;
  1014.     public static boolean GAMEGUARD_ENFORCE;
  1015.     public static boolean SERVER_NEWS;
  1016.     public static int ZONE_TOWN;
  1017.     public static boolean DISABLE_TUTORIAL;
  1018.     public static boolean NIGHT_GK;
  1019.     public static int GK_FREE_TELEPORT_LEVEL;
  1020.     public static boolean NOBLE_TELEPORT_FOR_ALL;
  1021.    
  1022.     // --------------------------------------------------
  1023.     // Those "hidden" settings haven't configs to avoid admins to fuck their server
  1024.     // You still can experiment changing values here. But don't say I didn't warn you.
  1025.     // --------------------------------------------------
  1026.    
  1027.     /** Threads & Packets size */
  1028.     public static int THREAD_P_EFFECTS = 6; // default 6
  1029.     public static int THREAD_P_GENERAL = 15; // default 15
  1030.     public static int GENERAL_PACKET_THREAD_CORE_SIZE = 4; // default 4
  1031.     public static int IO_PACKET_THREAD_CORE_SIZE = 2; // default 2
  1032.     public static int GENERAL_THREAD_CORE_SIZE = 4; // default 4
  1033.     public static int AI_MAX_THREAD = 10; // default 10
  1034.    
  1035.     /** Packet information */
  1036.     public static boolean COUNT_PACKETS = false; // default false
  1037.     public static boolean DUMP_PACKET_COUNTS = false; // default false
  1038.     public static int DUMP_INTERVAL_SECONDS = 60; // default 60
  1039.    
  1040.     /** IA settings */
  1041.     public static int MINIMUM_UPDATE_DISTANCE = 50; // default 50
  1042.     public static int MINIMUN_UPDATE_TIME = 500; // default 500
  1043.     public static int KNOWNLIST_FORGET_DELAY = 10000; // default 10000
  1044.    
  1045.     /** Time after which a packet is considered as lost */
  1046.     public static int PACKET_LIFETIME = 0; // default 0 (unlimited)
  1047.    
  1048.     /** Reserve Host on LoginServerThread */
  1049.     public static boolean RESERVE_HOST_ON_LOGIN = false; // default false
  1050.    
  1051.     /** MMO settings */
  1052.     public static int MMO_SELECTOR_SLEEP_TIME = 20; // default 20
  1053.     public static int MMO_MAX_SEND_PER_PASS = 12; // default 12
  1054.     public static int MMO_MAX_READ_PER_PASS = 12; // default 12
  1055.     public static int MMO_HELPER_BUFFER_COUNT = 20; // default 20
  1056.    
  1057.     /** Client Packets Queue settings */
  1058.     public static int CLIENT_PACKET_QUEUE_SIZE = 14; // default MMO_MAX_READ_PER_PASS + 2
  1059.     public static int CLIENT_PACKET_QUEUE_MAX_BURST_SIZE = 13; // default MMO_MAX_READ_PER_PASS + 1
  1060.     public static int CLIENT_PACKET_QUEUE_MAX_PACKETS_PER_SECOND = 80; // default 80
  1061.     public static int CLIENT_PACKET_QUEUE_MEASURE_INTERVAL = 5; // default 5
  1062.     public static int CLIENT_PACKET_QUEUE_MAX_AVERAGE_PACKETS_PER_SECOND = 40; // default 40
  1063.     public static int CLIENT_PACKET_QUEUE_MAX_FLOODS_PER_MIN = 2; // default 2
  1064.     public static int CLIENT_PACKET_QUEUE_MAX_OVERFLOWS_PER_MIN = 1; // default 1
  1065.     public static int CLIENT_PACKET_QUEUE_MAX_UNDERFLOWS_PER_MIN = 1; // default 1
  1066.     public static int CLIENT_PACKET_QUEUE_MAX_UNKNOWN_PER_MIN = 5; // default 5
  1067.    
  1068.     // --------------------------------------------------
  1069.     public static boolean HOT_DEBUFF_CLEANSE;
  1070.     /** Premium settings */
  1071.     public static boolean PREMIUM_ITEM_ENABLED; // OK
  1072.     public static boolean PREMIUM_FIRST_ITEM_BONUS; // OK
  1073.     public static int[] PREMIUM_ITEM_IDS; // OK
  1074.     public static int[] PREMIUM_ITEM_TIME;
  1075.     public static double[] PREMIUM_ITEM_XP_MULTIPLIERS; // OK
  1076.     public static double[] PREMIUM_ITEM_SP_MULTIPLIERS; // OK
  1077.     public static double[] PREMIUM_ITEM_PARTY_XP_MULTIPLIERS; // OK
  1078.     public static double[] PREMIUM_ITEM_PARTY_SP_MULTIPLIERS; // OK
  1079.     public static double[] PREMIUM_ITEM_DROP_ADENA_MULTIPLIERS; // OK
  1080.     public static double[] PREMIUM_ITEM_DROP_ITEMS_MULTIPLIERS; // OK
  1081.     public static double[] PREMIUM_ITEM_SPOIL_MULTIPLIERS; // OK
  1082.     public static double[] PREMIUM_ITEM_QUEST_ITEMS_MULTIPLIERS; // OK
  1083.     public static double[] PREMIUM_ITEM_BUFFS_TIME_MULTIPLIERS; // OK
  1084.     public static double[] PREMIUM_ITEM_ENCHANT_CHANCE_MULTIPLIERS; // OK
  1085.     public static double[] PREMIUM_ITEM_AUGMENT_CHANCE_MULTIPLIERS; // OK
  1086.     public static double[] PREMIUM_ITEM_DROP_SEAL_STONES_MULTIPLIERS;
  1087.     public static boolean REMOVE_AUGMENTATION_EFFECT;
  1088.    
  1089.     //======================
  1090.     // pcbang.properties
  1091.     //======================
  1092.     public static boolean PCB_ENABLE;
  1093.     public static boolean PCB_WINDOW_ONLINE;
  1094.     public static int PCB_MIN_LEVEL;
  1095.     public static boolean PCB_CHECK_HWID;
  1096.     public static int PCB_POINT_MIN;
  1097.     public static int PCB_POINT_MAX;
  1098.     public static int PCB_CHANCE_DUAL_POINT;
  1099.     public static int PCB_INTERVAL;
  1100.     public static int PCB_LIKE_WINDOW_ONLINE_RATE;
  1101.     public static int PCB_LIKE_WINDOW_INCREASE_RATE;
  1102.    
  1103.     //======================
  1104.     // medals.properties
  1105.     //======================
  1106.     public static boolean MEDAL_DROP;
  1107.     public static int MEDAL_SPAWN_NPC_ID;
  1108.     public static List<Location> MEDAL_SPAWN_NPC_LOC = new ArrayList<>();
  1109.     public static boolean MEDAL_SPAWN;
  1110.     public static int MEDAL_CHANCE1;
  1111.     public static int MEDAL_CHANCE2;
  1112.    
  1113.     //======================
  1114.     // protections.properties
  1115.     //======================
  1116.     public static boolean ENABLE_DEPOSIT_PROTECT;
  1117.     public static String NON_DEPOSIT_ITEMS;
  1118.     public static ArrayList<Integer> NOT_DEPOSITABLE_ITEMS = new ArrayList<>();
  1119.     public static boolean ENABLE_PASSKEY;
  1120.     public static boolean ALLOW_PRIVATE_ANTI_BOT;
  1121.     public static boolean ALLOW_SEQURITY_QUE;
  1122.     public static boolean ALLOW_ANTI_AFK;
  1123.     public static int ENCHANT_BOT_CHANCE;
  1124.     public static int MINUTES_AFK_PLAYERS;
  1125.     public static int SECURITY_QUE_TIME;
  1126.    
  1127.     public static void load()
  1128.     {
  1129.         if (Server.serverMode == Server.MODE_GAMESERVER)
  1130.         {
  1131.             _log.info("Loading flood protectors.");
  1132.             FLOOD_PROTECTOR_ROLL_DICE = new FloodProtectorConfig("RollDiceFloodProtector");
  1133.             FLOOD_PROTECTOR_HERO_VOICE = new FloodProtectorConfig("HeroVoiceFloodProtector");
  1134.             FLOOD_PROTECTOR_SUBCLASS = new FloodProtectorConfig("SubclassFloodProtector");
  1135.             FLOOD_PROTECTOR_DROP_ITEM = new FloodProtectorConfig("DropItemFloodProtector");
  1136.             FLOOD_PROTECTOR_SERVER_BYPASS = new FloodProtectorConfig("ServerBypassFloodProtector");
  1137.             FLOOD_PROTECTOR_MULTISELL = new FloodProtectorConfig("MultiSellFloodProtector");
  1138.             FLOOD_PROTECTOR_MANUFACTURE = new FloodProtectorConfig("ManufactureFloodProtector");
  1139.             FLOOD_PROTECTOR_MANOR = new FloodProtectorConfig("ManorFloodProtector");
  1140.             FLOOD_PROTECTOR_SENDMAIL = new FloodProtectorConfig("SendMailFloodProtector");
  1141.             FLOOD_PROTECTOR_CHARACTER_SELECT = new FloodProtectorConfig("CharacterSelectFloodProtector");
  1142.            
  1143.             _log.info("Loading gameserver configuration files.");
  1144.             ExProperties medalSettings = load(MEDAL_FILE);
  1145.             MEDAL_DROP = medalSettings.getProperty("MedalAddDrop", false);
  1146.             MEDAL_SPAWN = medalSettings.getProperty("MedalSpawnMeneger", false);
  1147.             MEDAL_CHANCE1 = medalSettings.getProperty("Medal1DropChance", 10);
  1148.             MEDAL_CHANCE2 = medalSettings.getProperty("Medal2DropChance", 2);
  1149.             MEDAL_SPAWN_NPC_ID = medalSettings.getProperty("MedalManagerNpcId", 31229);
  1150.             String[] locationMedalManager = medalSettings.getProperty("MedalManagerLocation", "").split(";");
  1151.             try
  1152.             {
  1153.                 int h = 0;
  1154.                 if (locationMedalManager != null)
  1155.                 {
  1156.                     for (String loc : locationMedalManager)
  1157.                     {
  1158.                         String[] pointFinalLoc = loc.split(",");
  1159.                         if (pointFinalLoc.length > 3)
  1160.                         {
  1161.                             h = Integer.parseInt(pointFinalLoc[3]);
  1162.                         }
  1163.                         MEDAL_SPAWN_NPC_LOC.add(new Location(Integer.parseInt(pointFinalLoc[0]), Integer.parseInt(pointFinalLoc[1]), Integer.parseInt(pointFinalLoc[2]), h));
  1164.                     }
  1165.                 }
  1166.             }
  1167.             catch (Exception e)
  1168.             {
  1169.             }
  1170.             ExProperties pcbpSettings = load(PCBANG_FILE);
  1171.             PCB_ENABLE = Boolean.parseBoolean(pcbpSettings.getProperty("PcBangPointEnable", "true"));
  1172.             PCB_MIN_LEVEL = Integer.parseInt(pcbpSettings.getProperty("PcBangPointMinLevel", "20"));
  1173.             PCB_CHECK_HWID = Boolean.parseBoolean(pcbpSettings.getProperty("PcBangCheckHWID", "true"));
  1174.             PCB_POINT_MIN = Integer.parseInt(pcbpSettings.getProperty("PcBangPointMinCount", "20"));
  1175.             PCB_POINT_MAX = Integer.parseInt(pcbpSettings.getProperty("PcBangPointMaxCount", "1000000"));
  1176.            
  1177.             if (PCB_POINT_MAX < 1)
  1178.             {
  1179.                 PCB_POINT_MAX = Integer.MAX_VALUE;
  1180.             }
  1181.            
  1182.             PCB_CHANCE_DUAL_POINT = Integer.parseInt(pcbpSettings.getProperty("PcBangPointDualChance", "20"));
  1183.             PCB_INTERVAL = Integer.parseInt(pcbpSettings.getProperty("PcBangPointTimeStamp", "900"));
  1184.             PCB_WINDOW_ONLINE = Boolean.parseBoolean(pcbpSettings.getProperty("PcBangShowOnlineForm", "false"));
  1185.             PCB_LIKE_WINDOW_ONLINE_RATE = Integer.parseInt(pcbpSettings.getProperty("PcBangShowOnlineFormInterval", "300"));
  1186.             PCB_LIKE_WINDOW_INCREASE_RATE = Integer.parseInt(pcbpSettings.getProperty("PcBangShiwOnlineIncriment", "10"));
  1187.             // Four Sepulchers config
  1188.             ExProperties foursepulchers = load(FS_FILE);
  1189.             FS_TIME_ATTACK = foursepulchers.getProperty("TimeOfAttack", 50);
  1190.             FS_TIME_COOLDOWN = foursepulchers.getProperty("TimeOfCoolDown", 5);
  1191.             FS_TIME_ENTRY = foursepulchers.getProperty("TimeOfEntry", 3);
  1192.             FS_TIME_WARMUP = foursepulchers.getProperty("TimeOfWarmUp", 2);
  1193.             FS_PARTY_MEMBER_COUNT = foursepulchers.getProperty("NumberOfNecessaryPartyMembers", 4);
  1194.            
  1195.             // Clans settings
  1196.             ExProperties clans = load(CLANS_FILE);
  1197.             ALT_CLAN_JOIN_DAYS = clans.getProperty("DaysBeforeJoinAClan", 5);
  1198.             ALT_CLAN_JOIN_DAYS = clans.getProperty("DaysBeforeJoinAClan", 5);
  1199.             ALT_CLAN_CREATE_DAYS = clans.getProperty("DaysBeforeCreateAClan", 10);
  1200.             ALT_MAX_NUM_OF_CLANS_IN_ALLY = clans.getProperty("AltMaxNumOfClansInAlly", 3);
  1201.             ALT_CLAN_MEMBERS_FOR_WAR = clans.getProperty("AltClanMembersForWar", 15);
  1202.             ALT_CLAN_WAR_PENALTY_WHEN_ENDED = clans.getProperty("AltClanWarPenaltyWhenEnded", 5);
  1203.             ALT_CLAN_DISSOLVE_DAYS = clans.getProperty("DaysToPassToDissolveAClan", 7);
  1204.             ALT_ALLY_JOIN_DAYS_WHEN_LEAVED = clans.getProperty("DaysBeforeJoinAllyWhenLeaved", 1);
  1205.             ALT_ALLY_JOIN_DAYS_WHEN_DISMISSED = clans.getProperty("DaysBeforeJoinAllyWhenDismissed", 1);
  1206.             ALT_ACCEPT_CLAN_DAYS_WHEN_DISMISSED = clans.getProperty("DaysBeforeAcceptNewClanWhenDismissed", 1);
  1207.             ALT_CREATE_ALLY_DAYS_WHEN_DISSOLVED = clans.getProperty("DaysBeforeCreateNewAllyWhenDissolved", 10);
  1208.             ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH = clans.getProperty("AltMembersCanWithdrawFromClanWH", false);
  1209.             REMOVE_CASTLE_CIRCLETS = clans.getProperty("RemoveCastleCirclets", true);
  1210.             CH_BUY_ITEM_ID = clans.getProperty("ClanHallBuyItemId", 57);
  1211.            
  1212.             REGEX_CLAN_NAME = clans.getProperty("RegexClanName", "[A-Za-z0-9\\u0410-\\u042f\\u0430-\\u044f]{3,16}");
  1213.            
  1214.             ALT_MANOR_REFRESH_TIME = clans.getProperty("AltManorRefreshTime", 20);
  1215.             ALT_MANOR_REFRESH_MIN = clans.getProperty("AltManorRefreshMin", 0);
  1216.             ALT_MANOR_APPROVE_TIME = clans.getProperty("AltManorApproveTime", 6);
  1217.             ALT_MANOR_APPROVE_MIN = clans.getProperty("AltManorApproveMin", 0);
  1218.             ALT_MANOR_MAINTENANCE_PERIOD = clans.getProperty("AltManorMaintenancePeriod", 360000);
  1219.             ALT_MANOR_SAVE_ALL_ACTIONS = clans.getProperty("AltManorSaveAllActions", false);
  1220.             ALT_MANOR_SAVE_PERIOD_RATE = clans.getProperty("AltManorSavePeriodRate", 2);
  1221.            
  1222.             CH_TELE_FEE_RATIO = clans.getProperty("ClanHallTeleportFunctionFeeRatio", 86400000);
  1223.             CH_TELE1_FEE = clans.getProperty("ClanHallTeleportFunctionFeeLvl1", 7000);
  1224.             CH_TELE2_FEE = clans.getProperty("ClanHallTeleportFunctionFeeLvl2", 14000);
  1225.             CH_SUPPORT_FEE_RATIO = clans.getProperty("ClanHallSupportFunctionFeeRatio", 86400000);
  1226.             CH_SUPPORT1_FEE = clans.getProperty("ClanHallSupportFeeLvl1", 17500);
  1227.             CH_SUPPORT2_FEE = clans.getProperty("ClanHallSupportFeeLvl2", 35000);
  1228.             CH_SUPPORT3_FEE = clans.getProperty("ClanHallSupportFeeLvl3", 49000);
  1229.             CH_SUPPORT4_FEE = clans.getProperty("ClanHallSupportFeeLvl4", 77000);
  1230.             CH_SUPPORT5_FEE = clans.getProperty("ClanHallSupportFeeLvl5", 147000);
  1231.             CH_SUPPORT6_FEE = clans.getProperty("ClanHallSupportFeeLvl6", 252000);
  1232.             CH_SUPPORT7_FEE = clans.getProperty("ClanHallSupportFeeLvl7", 259000);
  1233.             CH_SUPPORT8_FEE = clans.getProperty("ClanHallSupportFeeLvl8", 364000);
  1234.             CH_MPREG_FEE_RATIO = clans.getProperty("ClanHallMpRegenerationFunctionFeeRatio", 86400000);
  1235.             CH_MPREG1_FEE = clans.getProperty("ClanHallMpRegenerationFeeLvl1", 14000);
  1236.             CH_MPREG2_FEE = clans.getProperty("ClanHallMpRegenerationFeeLvl2", 26250);
  1237.             CH_MPREG3_FEE = clans.getProperty("ClanHallMpRegenerationFeeLvl3", 45500);
  1238.             CH_MPREG4_FEE = clans.getProperty("ClanHallMpRegenerationFeeLvl4", 96250);
  1239.             CH_MPREG5_FEE = clans.getProperty("ClanHallMpRegenerationFeeLvl5", 140000);
  1240.             CH_HPREG_FEE_RATIO = clans.getProperty("ClanHallHpRegenerationFunctionFeeRatio", 86400000);
  1241.             CH_HPREG1_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl1", 4900);
  1242.             CH_HPREG2_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl2", 5600);
  1243.             CH_HPREG3_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl3", 7000);
  1244.             CH_HPREG4_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl4", 8166);
  1245.             CH_HPREG5_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl5", 10500);
  1246.             CH_HPREG6_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl6", 12250);
  1247.             CH_HPREG7_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl7", 14000);
  1248.             CH_HPREG8_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl8", 15750);
  1249.             CH_HPREG9_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl9", 17500);
  1250.             CH_HPREG10_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl10", 22750);
  1251.             CH_HPREG11_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl11", 26250);
  1252.             CH_HPREG12_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl12", 29750);
  1253.             CH_HPREG13_FEE = clans.getProperty("ClanHallHpRegenerationFeeLvl13", 36166);
  1254.             CH_EXPREG_FEE_RATIO = clans.getProperty("ClanHallExpRegenerationFunctionFeeRatio", 86400000);
  1255.             CH_EXPREG1_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl1", 21000);
  1256.             CH_EXPREG2_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl2", 42000);
  1257.             CH_EXPREG3_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl3", 63000);
  1258.             CH_EXPREG4_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl4", 105000);
  1259.             CH_EXPREG5_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl5", 147000);
  1260.             CH_EXPREG6_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl6", 163331);
  1261.             CH_EXPREG7_FEE = clans.getProperty("ClanHallExpRegenerationFeeLvl7", 210000);
  1262.             CH_ITEM_FEE_RATIO = clans.getProperty("ClanHallItemCreationFunctionFeeRatio", 86400000);
  1263.             CH_ITEM1_FEE = clans.getProperty("ClanHallItemCreationFunctionFeeLvl1", 210000);
  1264.             CH_ITEM2_FEE = clans.getProperty("ClanHallItemCreationFunctionFeeLvl2", 490000);
  1265.             CH_ITEM3_FEE = clans.getProperty("ClanHallItemCreationFunctionFeeLvl3", 980000);
  1266.             CH_CURTAIN_FEE_RATIO = clans.getProperty("ClanHallCurtainFunctionFeeRatio", 86400000);
  1267.             CH_CURTAIN1_FEE = clans.getProperty("ClanHallCurtainFunctionFeeLvl1", 2002);
  1268.             CH_CURTAIN2_FEE = clans.getProperty("ClanHallCurtainFunctionFeeLvl2", 2625);
  1269.             CH_FRONT_FEE_RATIO = clans.getProperty("ClanHallFrontPlatformFunctionFeeRatio", 86400000);
  1270.             CH_FRONT1_FEE = clans.getProperty("ClanHallFrontPlatformFunctionFeeLvl1", 3031);
  1271.             CH_FRONT2_FEE = clans.getProperty("ClanHallFrontPlatformFunctionFeeLvl2", 9331);
  1272.            
  1273.             //Manor config
  1274.             ExProperties manor = load(MANOR_FILE);
  1275.            
  1276.             ALLOW_MANOR = manor.getProperty("AllowManor", true);
  1277.             ALT_MANOR_REFRESH_TIME = manor.getProperty("AltManorRefreshTime", 20);
  1278.             ALT_MANOR_REFRESH_MIN = manor.getProperty("AltManorRefreshMin", 0);
  1279.             ALT_MANOR_APPROVE_TIME = manor.getProperty("AltManorApproveTime", 6);
  1280.             ALT_MANOR_APPROVE_MIN = manor.getProperty("AltManorApproveMin", 0);
  1281.             ALT_MANOR_MAINTENANCE_PERIOD = manor.getProperty("AltManorMaintenancePeriod", 360000);
  1282.             ALT_MANOR_SAVE_ALL_ACTIONS = manor.getProperty("AltManorSaveAllActions", false);
  1283.             ALT_MANOR_SAVE_PERIOD_RATE = manor.getProperty("AltManorSavePeriodRate", 2);
  1284.            
  1285.             // Seven Sings and Festival config
  1286.             ExProperties sevensings = load(SEVENSINGS_FILE);
  1287.             ALT_GAME_REQUIRE_CLAN_CASTLE = sevensings.getProperty("AltRequireClanCastle", false);
  1288.             ALT_GAME_CASTLE_DAWN = sevensings.getProperty("AltCastleForDawn", true);
  1289.             ALT_GAME_CASTLE_DUSK = sevensings.getProperty("AltCastleForDusk", true);
  1290.             ALT_FESTIVAL_MIN_PLAYER = sevensings.getProperty("AltFestivalMinPlayer", 5);
  1291.             ALT_MAXIMUM_PLAYER_CONTRIB = sevensings.getProperty("AltMaxPlayerContrib", 1000000);
  1292.             ALT_FESTIVAL_MANAGER_START = sevensings.getProperty("AltFestivalManagerStart", 120000);
  1293.             ALT_FESTIVAL_LENGTH = sevensings.getProperty("AltFestivalLength", 1080000);
  1294.             ALT_FESTIVAL_CYCLE_LENGTH = sevensings.getProperty("AltFestivalCycleLength", 2280000);
  1295.             ALT_FESTIVAL_FIRST_SPAWN = sevensings.getProperty("AltFestivalFirstSpawn", 120000);
  1296.             ALT_FESTIVAL_FIRST_SWARM = sevensings.getProperty("AltFestivalFirstSwarm", 300000);
  1297.             ALT_FESTIVAL_SECOND_SPAWN = sevensings.getProperty("AltFestivalSecondSpawn", 540000);
  1298.             ALT_FESTIVAL_SECOND_SWARM = sevensings.getProperty("AltFestivalSecondSwarm", 720000);
  1299.             ALT_FESTIVAL_CHEST_SPAWN = sevensings.getProperty("AltFestivalChestSpawn", 900000);
  1300.             ALT_SEVENSIGNS_LAZY_UPDATE = sevensings.getProperty("AltSevenSignsLazyUpdate", true);
  1301.            
  1302.             // Rift config
  1303.             ExProperties rift = load(RIFT_FILE);
  1304.            
  1305.             RIFT_MIN_PARTY_SIZE = rift.getProperty("RiftMinPartySize", 2);
  1306.             RIFT_MAX_JUMPS = rift.getProperty("MaxRiftJumps", 4);
  1307.             RIFT_SPAWN_DELAY = rift.getProperty("RiftSpawnDelay", 10000);
  1308.             RIFT_AUTO_JUMPS_TIME_MIN = rift.getProperty("AutoJumpsDelayMin", 480);
  1309.             RIFT_AUTO_JUMPS_TIME_MAX = rift.getProperty("AutoJumpsDelayMax", 600);
  1310.             RIFT_ENTER_COST_RECRUIT = rift.getProperty("RecruitCost", 18);
  1311.             RIFT_ENTER_COST_SOLDIER = rift.getProperty("SoldierCost", 21);
  1312.             RIFT_ENTER_COST_OFFICER = rift.getProperty("OfficerCost", 24);
  1313.             RIFT_ENTER_COST_CAPTAIN = rift.getProperty("CaptainCost", 27);
  1314.             RIFT_ENTER_COST_COMMANDER = rift.getProperty("CommanderCost", 30);
  1315.             RIFT_ENTER_COST_HERO = rift.getProperty("HeroCost", 33);
  1316.             RIFT_BOSS_ROOM_TIME_MUTIPLY = rift.getProperty("BossRoomTimeMultiply", 1.);
  1317.            
  1318.             // Married config
  1319.             ExProperties married = load(MARRIED_FILE);
  1320.            
  1321.             ALLOW_WEDDING = married.getProperty("AllowWedding", false);
  1322.             WEDDING_PRICE = married.getProperty("WeddingPrice", 1000000);
  1323.             WEDDING_SAMESEX = married.getProperty("WeddingAllowSameSex", false);
  1324.             WEDDING_FORMALWEAR = married.getProperty("WeddingFormalWear", true);
  1325.            
  1326.             // Lottery config
  1327.             ExProperties lottery = load(LOTTERY_FILE);
  1328.            
  1329.             ALLOW_LOTTERY = lottery.getProperty("AllowLottery", true);
  1330.             ALT_LOTTERY_PRIZE = lottery.getProperty("AltLotteryPrize", 50000);
  1331.             ALT_LOTTERY_TICKET_PRICE = lottery.getProperty("AltLotteryTicketPrice", 2000);
  1332.             ALT_LOTTERY_5_NUMBER_RATE = lottery.getProperty("AltLottery5NumberRate", 0.6);
  1333.             ALT_LOTTERY_4_NUMBER_RATE = lottery.getProperty("AltLottery4NumberRate", 0.2);
  1334.             ALT_LOTTERY_3_NUMBER_RATE = lottery.getProperty("AltLottery3NumberRate", 0.2);
  1335.             ALT_LOTTERY_2_AND_1_NUMBER_PRIZE = lottery.getProperty("AltLottery2and1NumberPrize", 200);
  1336.            
  1337.             // Fishing config
  1338.             ExProperties fishing = load(FISHING_FILE);
  1339.            
  1340.             ALT_FISH_CHAMPIONSHIP_ENABLED = fishing.getProperty("AltFishChampionshipEnabled", true);
  1341.             ALT_FISH_CHAMPIONSHIP_REWARD_ITEM = fishing.getProperty("AltFishChampionshipRewardItemId", 57);
  1342.             ALT_FISH_CHAMPIONSHIP_REWARD_1 = fishing.getProperty("AltFishChampionshipReward1", 800000);
  1343.             ALT_FISH_CHAMPIONSHIP_REWARD_2 = fishing.getProperty("AltFishChampionshipReward2", 500000);
  1344.             ALT_FISH_CHAMPIONSHIP_REWARD_3 = fishing.getProperty("AltFishChampionshipReward3", 300000);
  1345.             ALT_FISH_CHAMPIONSHIP_REWARD_4 = fishing.getProperty("AltFishChampionshipReward4", 200000);
  1346.             ALT_FISH_CHAMPIONSHIP_REWARD_5 = fishing.getProperty("AltFishChampionshipReward5", 100000);
  1347.            
  1348.             // Buffer config
  1349.             ExProperties buffer = load(BUFFER_FILE);
  1350.             BUFFER_ENABLED = buffer.getProperty("BufferEnabled", true);
  1351.             if (BUFFER_ENABLED)
  1352.             {
  1353.                 BUFFER_PRICE_ITEM = buffer.getProperty("BufferPriceItem", 57);
  1354.                 BUFFER_REMOVE_COST = buffer.getProperty("BufferRemoveBuffPrice", 0);
  1355.                 BUFFER_CP_HP_RESTORE_COST = buffer.getProperty("BufferRestoreCPHPPrice", 0);
  1356.                 BUFFER_MP_RESTORE_COST = buffer.getProperty("BufferRestoreMPPrice", 0);
  1357.                 BUFFER_RESTRICTION = buffer.getProperty("BufferRestrictedWhen", "");
  1358.                 BUFFER_RESTORE_DELAY = buffer.getProperty("BufferRestoreDelay", 0);
  1359.                 BUFFER_ANIMATION = buffer.getProperty("BufferAnimation", false);
  1360.                 BUFFER_SCHEME_MIN_NAME_LENGTH = buffer.getProperty("BufferSchemeMinNameLength", 2);
  1361.                 BUFFER_SCHEME_MAX_NAME_LENGTH = buffer.getProperty("BufferSchemeMaxNameLength", 16);
  1362.                 BUFFER_MAX_SCHEMES = buffer.getProperty("BufferMaxSchemes", 5);
  1363.             }
  1364.            
  1365.             // Events config
  1366.             ExProperties pr = Config.load(PVP_REWARD_FILE);
  1367.            
  1368.             PVP_REWARD_ENABLED = pr.getProperty("PvpRewardEnabled", false);
  1369.            
  1370.             PVP_REWARD_PVP_LEVEL_DIF = pr.getProperty("PvPLevelDifference", 10);
  1371.             PVP_REWARD_PVP_UPDATE_TIME = pr.getProperty("PvpProtectTime", 30);
  1372.             PVP_REWARD_ITEMS = pr.getProperty("PvPItemIds", new int[]
  1373.             {
  1374.                 0
  1375.             });
  1376.             PVP_REWARD_ITEMS_COUNT = pr.getProperty("PvPItemsCount", new int[]
  1377.             {
  1378.                 1
  1379.             });
  1380.             PVP_REWARD_ITEMS_CHANCE = pr.getProperty("PvpItemsDropChance", new int[]
  1381.             {
  1382.                 100
  1383.             });
  1384.             PVP_REWARD_EXP_AMOUNT = pr.getProperty("PvPExpAmount", 0);
  1385.             PVP_REWARD_SP_AMOUNT = pr.getProperty("PvPSpAmount", 0);
  1386.             PVP_REWARD_BLOCK_SAME_IP = pr.getProperty("PvPAllowSameIP", false);
  1387.            
  1388.             PVP_REWARD_PK_LEVEL_DIF = pr.getProperty("PkLevelDifference", 10);
  1389.             PVP_REWARD_PK_UPDATE_TIME = pr.getProperty("PkProtectTime", 30);
  1390.             PVP_REWARD_PK_ITEMS = pr.getProperty("PkItemsIds", new int[]
  1391.             {
  1392.                 0
  1393.             });
  1394.             PVP_REWARD_PK_ITEMS_COUNT = pr.getProperty("PkItemsCount", new int[]
  1395.             {
  1396.                 1
  1397.             });
  1398.             PVP_REWARD_PK_ITEMS_CHANCE = pr.getProperty("PkItemsDropChance", new int[]
  1399.             {
  1400.                 100
  1401.             });
  1402.             PVP_REWARD_PK_EXP_AMOUNT = pr.getProperty("PkExpAmount", 0);
  1403.             PVP_REWARD_PK_SP_AMOUNT = pr.getProperty("PkSpAmount", 0);
  1404.             PVP_REWARD_PK_BLOCK_SAME_IP = pr.getProperty("PkAllowSameIP", false);
  1405.            
  1406.             // Olympiad
  1407.             ExProperties olympiad = load(OLYMPIAD_FILE);
  1408.            
  1409.             ALT_OLY_START_TIME = olympiad.getProperty("AltOlyStartTime", 18);
  1410.             ALT_OLY_MIN = olympiad.getProperty("AltOlyMin", 0);
  1411.             ALT_OLY_CPERIOD = olympiad.getProperty("AltOlyCPeriod", 6);
  1412.             ALT_OLY_BATTLE = olympiad.getProperty("AltOlyBattle", 6);
  1413.             ALT_OLY_WPERIOD = olympiad.getProperty("AltOlyWPeriod", 604800000);
  1414.             ALT_OLY_VPERIOD = olympiad.getProperty("AltOlyVPeriod", 86400000);
  1415.             ALT_OLY_WAIT_TIME = olympiad.getProperty("AltOlyWaitTime", 30);
  1416.             ALT_OLY_WAIT_BATTLE = olympiad.getProperty("AltOlyWaitBattle", 60);
  1417.             ALT_OLY_WAIT_END = olympiad.getProperty("AltOlyWaitEnd", 40);
  1418.             ALT_OLY_START_POINTS = olympiad.getProperty("AltOlyStartPoints", 18);
  1419.             ALT_OLY_WEEKLY_POINTS = olympiad.getProperty("AltOlyWeeklyPoints", 3);
  1420.             ALT_OLY_MIN_MATCHES = olympiad.getProperty("AltOlyMinMatchesToBeClassed", 5);
  1421.             ALT_OLY_CLASSED = olympiad.getProperty("AltOlyClassedParticipants", 5);
  1422.             ALT_OLY_NONCLASSED = olympiad.getProperty("AltOlyNonClassedParticipants", 9);
  1423.             ALT_OLY_CLASSED_REWARD = parseItemsList(olympiad.getProperty("AltOlyClassedReward", "6651,50"));
  1424.             ALT_OLY_NONCLASSED_REWARD = parseItemsList(olympiad.getProperty("AltOlyNonClassedReward", "6651,30"));
  1425.             ALT_OLY_COMP_RITEM = olympiad.getProperty("AltOlyCompRewItem", 6651);
  1426.             ALT_OLY_GP_PER_POINT = olympiad.getProperty("AltOlyGPPerPoint", 1000);
  1427.             ALT_OLY_HERO_POINTS = olympiad.getProperty("AltOlyHeroPoints", 300);
  1428.             ALT_OLY_RANK1_POINTS = olympiad.getProperty("AltOlyRank1Points", 100);
  1429.             ALT_OLY_RANK2_POINTS = olympiad.getProperty("AltOlyRank2Points", 75);
  1430.             ALT_OLY_RANK3_POINTS = olympiad.getProperty("AltOlyRank3Points", 55);
  1431.             ALT_OLY_RANK4_POINTS = olympiad.getProperty("AltOlyRank4Points", 40);
  1432.             ALT_OLY_RANK5_POINTS = olympiad.getProperty("AltOlyRank5Points", 30);
  1433.             ALT_OLY_MAX_POINTS = olympiad.getProperty("AltOlyMaxPoints", 10);
  1434.             ALT_OLY_DIVIDER_CLASSED = olympiad.getProperty("AltOlyDividerClassed", 3);
  1435.             ALT_OLY_DIVIDER_NON_CLASSED = olympiad.getProperty("AltOlyDividerNonClassed", 3);
  1436.             ALT_OLY_ANNOUNCE_GAMES = olympiad.getProperty("AltOlyAnnounceGames", true);
  1437.             ALT_OLY_RESET_SKILL_REUSE = olympiad.getProperty("AltOlyResetSkillReuse", -1);
  1438.             OLY_RESTRICTED_ENCHANT_VALUE = olympiad.getProperty("OlyMaxAllowedEnchantValue", -1);
  1439.            
  1440.             ExProperties events = load(EVENTS_CAPTURE_TEAM_FLAG_FILE);
  1441.            
  1442.             CTF_ENABLED = events.getProperty("Enabled", true);
  1443.             CTF_AURA = events.getProperty("Aura", true);
  1444.             CTF_IN_INSTANCE = events.getProperty("InInstance", true);
  1445.             CTF_REVIVE_RECOVERY = events.getProperty("ReviveRecovery", true);
  1446.             CTF_ALLOW_INTERFERENCE = events.getProperty("AllowInterference", false);
  1447.             CTF_ALLOW_POTIONS = events.getProperty("AllowPotions", false);
  1448.             CTF_ALLOW_SUMMON = events.getProperty("AllowSummon", true);
  1449.             CTF_ON_START_REMOVE_ALL_EFFECTS = events.getProperty("OnStartRemoveAllEffects", true);
  1450.             CTF_ON_START_UNSUMMON_PET = events.getProperty("OnStartUnsummonPet", true);
  1451.             CTF_JOIN_CURSED = events.getProperty("JoinWithCursedWeapon", false);
  1452.             CTF_REVIVE_DELAY = events.getProperty("ReviveDelay", 10);
  1453.             CTF_CLOSE_COLISEUM_DOORS = events.getProperty("CloseColiseumDoors", true);
  1454.             CTF_ALLOW_TEAM_CASTING = events.getProperty("AllowTeamCasting", false);
  1455.             CTF_RETURNORIGINAL = events.getProperty("OriginalPosition", false);
  1456.             CTF_MIN_LVL = events.getProperty("MinLevel", 1);
  1457.             CTF_MAX_LVL = events.getProperty("MaxLevel", 80);
  1458.             CTF_JOIN_TIME = events.getProperty("JoinTime", 5);
  1459.             CTF_EVENT_TIME = events.getProperty("EventTime", 15);
  1460.             CTF_MIN_PLAYERS = events.getProperty("MinPlayers", 1);
  1461.             CTF_MAX_PLAYERS = events.getProperty("MaxPlayers", 50);
  1462.             CTF_REWARD_ID = events.getProperty("RewardId", new int[]
  1463.             {
  1464.                 57
  1465.             });
  1466.             CTF_REWARD_AMOUNT = events.getProperty("RewardId", new int[]
  1467.             {
  1468.                 57
  1469.             });
  1470.             CTF_BLUE_TEAM_LOC = new Location(events.getProperty("BlueTeamLoc", "150545 46734 -3415"));
  1471.             CTF_BLUE_FLAG_LOC = new Location(events.getProperty("BlueFlagLoc", "150399 46732 -3390"));
  1472.             CTF_RED_TEAM_LOC = new Location(events.getProperty("RedTeamLoc", "148386 46747 -3415"));
  1473.             CTF_RED_FLAG_LOC = new Location(events.getProperty("RedFlagLoc", "148501 46738 -3390"));
  1474.            
  1475.             events = load(EVENTS_DEATH_MATCH_FILE);
  1476.            
  1477.             DM_ENABLED = events.getProperty("Enabled", true);
  1478.             DM_ON_START_REMOVE_ALL_EFFECTS = events.getProperty("OnStartRemoveAllEffects", true);
  1479.             DM_ON_START_UNSUMMON_PET = events.getProperty("OnStartUnsummonPet", true);
  1480.             DM_RETURNORIGINAL = events.getProperty("OriginalPosition", false);
  1481.             DM_RESORE_HP_MP_CP = events.getProperty("OnStartRestoreHpMpCp", false);
  1482.             DM_ALLOW_POTIONS = events.getProperty("AllowPotion", false);
  1483.             DM_ALLOW_SUMMON = events.getProperty("AllowSummon", false);
  1484.             DM_JOIN_CURSED = events.getProperty("CursedWeapon", false);
  1485.             DM_ALLOW_INTERFERENCE = events.getProperty("AllowInterference", false);
  1486.             DM_RESET_SKILL_REUSE = events.getProperty("ResetAllSkill", false);
  1487.             DM_EVENT_LOCATION = new Location(events.getProperty("EventLocation", "149800 46800 -3412"));
  1488.            
  1489.             DM_REVIVE_DELAY = events.getProperty("ReviveDelay", 10);
  1490.             DM_REG_TIME = events.getProperty("RegTime", 10);
  1491.             DM_EVENT_TIME = events.getProperty("EventTime", 10);
  1492.            
  1493.             DM_MIN_PLAYERS = events.getProperty("MinPlayers", 1);
  1494.             DM_MAX_PLAYERS = events.getProperty("MaxPlayers", 50);
  1495.             DM_MIN_LVL = events.getProperty("MinLevel", 1);
  1496.             DM_MAX_LVL = events.getProperty("MaxLevel", 80);
  1497.             DM_REWARD_ITEM = events.getProperty("RewardItem", new int[]
  1498.             {
  1499.                 57
  1500.             });
  1501.             DM_REWARD_ITEM_COUNT = events.getProperty("RewardItemCount", new int[]
  1502.             {
  1503.                 50000
  1504.             });
  1505.            
  1506.             events = load(EVENTS_LAST_HERO_FILE);
  1507.            
  1508.             LH_ENABLED = events.getProperty("Enabled", true);
  1509.            
  1510.             LH_ON_START_REMOVE_ALL_EFFECTS = events.getProperty("OnStartRemoveAllEffects", true);
  1511.             LH_ON_START_UNSUMMON_PET = events.getProperty("OnStartUnsummonPet", true);
  1512.             LH_RESORE_HP_MP_CP = events.getProperty("OnStartRestoreHpMpCp", false);
  1513.             LH_ALLOW_POTIONS = events.getProperty("AllowPotion", false);
  1514.             LH_ALLOW_SUMMON = events.getProperty("AllowSummon", false);
  1515.             LH_JOIN_CURSED = events.getProperty("CursedWeapon", false);
  1516.             LH_ALLOW_INTERFERENCE = events.getProperty("TAllowInterference", false);
  1517.             LH_REWARD_KILLS = events.getProperty("RewardKills", true);
  1518.             LH_GIVE_HERO = events.getProperty("GiveHero", true);
  1519.            
  1520.             LH_LOC = new Location(events.getProperty("Location", "149800 46800 -3412"));
  1521.             LH_HERO_DAYS = events.getProperty("HeroDays", 0);
  1522.             LH_REG_TIME = events.getProperty("RegTime", 10);
  1523.             LH_EVENT_TIME = events.getProperty("EventTime", 10);
  1524.             LH_REWARD_ITEM = events.getProperty("RewardItem", new int[]
  1525.             {
  1526.                 57
  1527.             });
  1528.             LH_REWARD_ITEM_COUNT = events.getProperty("RewardItemCount", new int[]
  1529.             {
  1530.                 100000
  1531.             });
  1532.             LH_MIN_PLAYERS = events.getProperty("MinPlayers", 1);
  1533.             LH_MAX_PLAYERS = events.getProperty("MaxPlayers", 50);
  1534.             LH_MIN_LVL = events.getProperty("MinLevel", 1);
  1535.             LH_MAX_LVL = events.getProperty("MaxLevel", 80);
  1536.            
  1537.             LH_SUPER_PRIZE_ID = events.getProperty("PrizeId", 6392);
  1538.             LH_SUPER_PRIZE_COUNT = events.getProperty("PrizeCount", 5);
  1539.            
  1540.             events = load(EVENTS_TEAM_VS_TEAM_FILE);
  1541.            
  1542.             TVT_ENABLED = events.getProperty("Enabled", true);
  1543.             TVT_AURA = events.getProperty("Aura", true);
  1544.             TVT_ININSTANCE = events.getProperty("InInstance", true);
  1545.             TVT_JOIN_CURSED = events.getProperty("JoinWithCursedWeapon", false);
  1546.             TVT_ON_START_REMOVE_ALL_EFFECTS = events.getProperty("OnStartRemoveAllEffects", true);
  1547.             TVT_ON_START_RECOVERY = events.getProperty("OnStartRecovery", true);
  1548.             TVT_ON_START_UNSUMMON_PET = events.getProperty("OnStartUnsummonPet", true);
  1549.             TVT_CLOSE_COLISEUM_DOORS = events.getProperty("CloseColiseumDoors", true);
  1550.             TVT_ALLOW_INTERFERENCE = events.getProperty("AllowInterference", false);
  1551.             TVT_ALLOW_POTIONS = events.getProperty("AllowPotions", false);
  1552.             TVT_ALLOW_SUMMON = events.getProperty("AllowSummon", true);
  1553.             TVT_REVIVE_RECOVERY = events.getProperty("ReviveRecovery", true);
  1554.             TVT_REVIVE_DELAY = events.getProperty("ReviveDelay", 10);
  1555.             TVT_ALLOW_ENEMY_HEALING = events.getProperty("AllowEnemyHealing", false);
  1556.             TVT_ALLOW_TEAM_CASTING = events.getProperty("AllowTeamCasting", false);
  1557.             TVT_ALLOW_TEAM_ATTACKING = events.getProperty("AllowTeamAttacking", false);
  1558.             TVT_PRICE_NO_KILLS = events.getProperty("PriceNoKills", false);
  1559.             TVT_ORIGINALRETURN = events.getProperty("OriginalPosition", false);
  1560.            
  1561.             TVT_MIN_LVL = events.getProperty("MinLevel", 1);
  1562.             TVT_MAX_LVL = events.getProperty("MaxLevel", 80);
  1563.            
  1564.             TVT_REWARD_ID = events.getProperty("RewardId", new int[]
  1565.             {
  1566.                 57
  1567.             });
  1568.             TVT_REWARD_AMOUNT = events.getProperty("RewardAmount", new int[]
  1569.             {
  1570.                 100000
  1571.             });
  1572.            
  1573.             TVT_JOIN_TIME = events.getProperty("JoinTime", 5);
  1574.             TVT_EVENT_TIME = events.getProperty("EventTime", 15);
  1575.             TVT_MIN_PLAYERS = events.getProperty("MinPlayers", 1);
  1576.             TVT_MAX_PLAYERS = events.getProperty("MaxPlayers", 50);
  1577.            
  1578.             TVT_BLUE_TEAM_LOC = events.getProperty("BlueTeamLoc", new int[]
  1579.             {
  1580.                 150545,
  1581.                 46734,
  1582.                 -3415
  1583.             });
  1584.             TVT_RED_TEAM_LOC = events.getProperty("RedTeamLoc", new int[]
  1585.             {
  1586.                 150545,
  1587.                 46734,
  1588.                 -3415
  1589.             });
  1590.            
  1591.             // FloodProtector
  1592.             ExProperties security = load(FLOOD_FILE);
  1593.             loadFloodProtectorConfig(security, FLOOD_PROTECTOR_ROLL_DICE, "RollDice", "42");
  1594.             loadFloodProtectorConfig(security, FLOOD_PROTECTOR_HERO_VOICE, "HeroVoice", "100");
  1595.             loadFloodProtectorConfig(security, FLOOD_PROTECTOR_SUBCLASS, "Subclass", "20");
  1596.             loadFloodProtectorConfig(security, FLOOD_PROTECTOR_DROP_ITEM, "DropItem", "10");
  1597.             loadFloodProtectorConfig(security, FLOOD_PROTECTOR_SERVER_BYPASS, "ServerBypass", "5");
  1598.             loadFloodProtectorConfig(security, FLOOD_PROTECTOR_MULTISELL, "MultiSell", "1");
  1599.             loadFloodProtectorConfig(security, FLOOD_PROTECTOR_MANUFACTURE, "Manufacture", "3");
  1600.             loadFloodProtectorConfig(security, FLOOD_PROTECTOR_MANOR, "Manor", "30");
  1601.             loadFloodProtectorConfig(security, FLOOD_PROTECTOR_SENDMAIL, "SendMail", "100");
  1602.             loadFloodProtectorConfig(security, FLOOD_PROTECTOR_CHARACTER_SELECT, "CharacterSelect", "30");
  1603.            
  1604.             ExProperties protections = load(PROTECT_FILE);
  1605.             ENABLE_DEPOSIT_PROTECT = Boolean.parseBoolean(protections.getProperty("EnableDepositProtection", "false"));
  1606.             NON_DEPOSIT_ITEMS = protections.getProperty("ListNonDepositItems");
  1607.             NOT_DEPOSITABLE_ITEMS = new ArrayList<>();
  1608.             for (String id : NON_DEPOSIT_ITEMS.split(","))
  1609.             {
  1610.                 NOT_DEPOSITABLE_ITEMS.add(Integer.parseInt(id));
  1611.             }
  1612.             ENABLE_PASSKEY = protections.getProperty("EnablePasskey", true);
  1613.             ALLOW_SEQURITY_QUE = protections.getProperty("AllowSecurityQuestion", false);
  1614.             SECURITY_QUE_TIME = protections.getProperty("SecurityTime", 20);
  1615.             ALLOW_ANTI_AFK = protections.getProperty("AllowAntiAfk", false);
  1616.             MINUTES_AFK_PLAYERS = protections.getProperty("AntiAfkMinutes", 20);
  1617.             ALLOW_PRIVATE_ANTI_BOT = protections.getProperty("AllowPrivateAntiBot", false);
  1618.             ENCHANT_BOT_CHANCE = protections.getProperty("PrivateBotChance", 15);
  1619.            
  1620.             // HexID
  1621.             ExProperties hexid = load(HEXID_FILE);
  1622.             SERVER_ID = Integer.parseInt(hexid.getProperty("ServerID"));
  1623.             HEX_ID = new BigInteger(hexid.getProperty("HexID"), 16).toByteArray();
  1624.            
  1625.             // Champions config
  1626.             ExProperties champions = load(CHAMPIONS_FILE);
  1627.             CHAMPION_ADENAS_REWARDS_BLUE = champions.getProperty("ChampionAdenasRewardsBlue", 1);
  1628.             CHAMPION_ADENAS_REWARDS_RED = champions.getProperty("ChampionAdenasRewardsRed", 2);
  1629.             CHAMPION_ENABLE = champions.getProperty("ChampionEnable", false);
  1630.             CHAMPION_EXP_SP_BLUE = champions.getProperty("ChampionExpSpBlue", 2);
  1631.             CHAMPION_EXP_SP_RED = champions.getProperty("ChampionExpSpRed", 4);
  1632.             CHAMPION_FREQUENCY_BLUE = champions.getProperty("ChampionFrequencyBlue", 0);
  1633.             CHAMPION_FREQUENCY_RED = champions.getProperty("ChampionFrequencyRed", 0);
  1634.             CHAMPION_HP_BLUE = champions.getProperty("ChampionHpBlue", 8);
  1635.             CHAMPION_HP_RED = champions.getProperty("ChampionHpRed", 16);
  1636.             CHAMPION_HP_REGEN_BLUE = champions.getProperty("ChampionHpRegenBlue", 1);
  1637.             CHAMPION_HP_REGEN_RED = champions.getProperty("ChampionHpRegenRed", 2);
  1638.             CHAMPION_MATK_BLUE = champions.getProperty("ChampionMagicAttackBlue", 1);
  1639.             CHAMPION_MATK_RED = champions.getProperty("ChampionMagicAttackRed", 2);
  1640.             CHAMPION_MAX_LVL_BLUE = champions.getProperty("ChampionMaxLevelBlue", 70);
  1641.             CHAMPION_MAX_LVL_RED = champions.getProperty("ChampionMaxLevelRed", 70);
  1642.             CHAMPION_MCRT_RATE_BLUE = champions.getProperty("ChampionMagicCriticalRateBlue", 1);
  1643.             CHAMPION_MCRT_RATE_RED = champions.getProperty("ChampionMagicCriticalRateRed", 2);
  1644.             CHAMPION_MDEF_BLUE = champions.getProperty("ChampionMagicDefenceBlue", 1);
  1645.             CHAMPION_MDEF_RED = champions.getProperty("ChampionMagicDefenceRed", 2);
  1646.             CHAMPION_MIN_LVL_BLUE = champions.getProperty("ChampionMinLevelBlue", 20);
  1647.             CHAMPION_MIN_LVL_RED = champions.getProperty("ChampionMinLevelRed", 20);
  1648.             CHAMPION_PATK_BLUE = champions.getProperty("ChampionAtkBlue", 1);
  1649.             CHAMPION_PATK_RED = champions.getProperty("ChampionAtkRed", 2);
  1650.             CHAMPION_PCRT_RATE_BLUE = champions.getProperty("ChampionPhysicalCriticalRateBlue", 1);
  1651.             CHAMPION_PCRT_RATE_RED = champions.getProperty("ChampionPhysicalCriticalRateRed", 2);
  1652.             CHAMPION_PDEF_BLUE = champions.getProperty("ChampionPhysicalDefenceBlue", 1);
  1653.             CHAMPION_PDEF_RED = champions.getProperty("ChampionPhysicalDefenceRed", 2);
  1654.             CHAMPION_REWARD_BLUE = champions.getProperty("ChampionRewardItemBlue", 0);
  1655.             CHAMPION_REWARD_ID_BLUE = champions.getProperty("ChampionRewardItemIDBlue", 6393);
  1656.             CHAMPION_REWARD_ID_RED = champions.getProperty("ChampionRewardItemIDRed", 6393);
  1657.             CHAMPION_REWARD_QTY_BLUE = champions.getProperty("ChampionRewardItemQtyBlue", 1);
  1658.             CHAMPION_REWARD_QTY_RED = champions.getProperty("ChampionRewardItemQtyRed", 2);
  1659.             CHAMPION_REWARD_RED = champions.getProperty("ChampionRewardItemRed", 0);
  1660.             CHAMPION_REWARDS_BLUE = champions.getProperty("ChampionRewardsBlue", 8);
  1661.             CHAMPION_REWARDS_RED = champions.getProperty("ChampionRewardsRed", 16);
  1662.             CHAMPION_RUN_BLUE = champions.getProperty("ChampionRunBlue", 1);
  1663.             CHAMPION_RUN_RED = champions.getProperty("ChampionRunRed", 2);
  1664.             CHAMPION_SPD_ATK_BLUE = champions.getProperty("ChampionSpdAtkBlue", 1);
  1665.             CHAMPION_SPD_ATK_RED = champions.getProperty("ChampionSpdAtkRed", 2);
  1666.             CHAMPION_SPD_MATK_BLUE = champions.getProperty("ChampionCastSpeedBlue", 1);
  1667.             CHAMPION_SPD_MATK_RED = champions.getProperty("ChampionCastSpeedRed", 2);
  1668.             CHAMPION_TITLE_BLUE = champions.getProperty("ChampionTitleBlue", "Easy Champ");
  1669.             CHAMPION_TITLE_RED = champions.getProperty("ChampionTitleRed", "Hard Champ");
  1670.             CHAMPION_WALK_BLUE = champions.getProperty("ChampionWalkBlue", 1);
  1671.             CHAMPION_WALK_RED = champions.getProperty("ChampionWalkRed", 2);
  1672.            
  1673.             //NPCS Config
  1674.             ExProperties npcs = load(NPCS_FILE);
  1675.            
  1676.             ALLOW_CLASS_MASTERS = npcs.getProperty("AllowClassMasters", false);
  1677.             ALLOW_ENTIRE_TREE = npcs.getProperty("AllowEntireTree", false);
  1678.             if (ALLOW_CLASS_MASTERS)
  1679.             {
  1680.                 CLASS_MASTER_SETTINGS = new ClassMasterSettings(npcs.getProperty("ConfigClassMaster"));
  1681.             }
  1682.            
  1683.             ANNOUNCE_MAMMON_SPAWN = npcs.getProperty("AnnounceMammonSpawn", true);
  1684.             ALT_MOB_AGRO_IN_PEACEZONE = npcs.getProperty("AltMobAgroInPeaceZone", true);
  1685.             SHOW_NPC_LVL = npcs.getProperty("ShowNpcLevel", false);
  1686.             SHOW_NPC_CREST = npcs.getProperty("ShowNpcCrest", false);
  1687.             SHOW_SUMMON_CREST = npcs.getProperty("ShowSummonCrest", false);
  1688.             WAIT_TIME_FRINTEZZA = npcs.getProperty("FrintezzaWaitTime", 1) * 60000;
  1689.             WYVERN_ALLOW_UPGRADER = npcs.getProperty("AllowWyvernUpgrader", true);
  1690.             WYVERN_REQUIRED_LEVEL = npcs.getProperty("RequiredStriderLevel", 55);
  1691.             WYVERN_REQUIRED_CRYSTALS = npcs.getProperty("RequiredCrystalsNumber", 10);
  1692.            
  1693.             GUARD_ATTACK_AGGRO_MOB = npcs.getProperty("GuardAttackAggroMob", false);
  1694.             MAX_DRIFT_RANGE = npcs.getProperty("MaxDriftRange", 300);
  1695.             KNOWNLIST_UPDATE_INTERVAL = npcs.getProperty("KnownListUpdateInterval", 1250);
  1696.             MIN_NPC_ANIMATION = npcs.getProperty("MinNPCAnimation", 20);
  1697.             MAX_NPC_ANIMATION = npcs.getProperty("MaxNPCAnimation", 40);
  1698.             MIN_MONSTER_ANIMATION = npcs.getProperty("MinMonsterAnimation", 10);
  1699.             MAX_MONSTER_ANIMATION = npcs.getProperty("MaxMonsterAnimation", 40);
  1700.             RAID_RANGE_CHECK = npcs.getProperty("RaidRangeCheck", false);
  1701.             RAID_REVIVE_HP = npcs.getProperty("RaidReviveHpMp", false);
  1702.             RAID_RANGE_VALUE = npcs.getProperty("RaidRangeMaxValue", 350);
  1703.            
  1704.             GRIDS_ALWAYS_ON = npcs.getProperty("GridsAlwaysOn", false);
  1705.             GRID_NEIGHBOR_TURNON_TIME = npcs.getProperty("GridNeighborTurnOnTime", 1);
  1706.             GRID_NEIGHBOR_TURNOFF_TIME = npcs.getProperty("GridNeighborTurnOffTime", 90);
  1707.            
  1708.             RAID_HP_REGEN_MULTIPLIER = npcs.getProperty("RaidHpRegenMultiplier", 1.);
  1709.             RAID_MP_REGEN_MULTIPLIER = npcs.getProperty("RaidMpRegenMultiplier", 1.);
  1710.             RAID_DEFENCE_MULTIPLIER = npcs.getProperty("RaidDefenceMultiplier", 1.);
  1711.             RAID_MINION_RESPAWN_TIMER = npcs.getProperty("RaidMinionRespawnTime", 300000);
  1712.            
  1713.             RAID_DISABLE_CURSE = npcs.getProperty("DisableRaidCurse", false);
  1714.             RAID_CHAOS_TIME = npcs.getProperty("RaidChaosTime", 30);
  1715.             GRAND_CHAOS_TIME = npcs.getProperty("GrandChaosTime", 30);
  1716.             MINION_CHAOS_TIME = npcs.getProperty("MinionChaosTime", 30);
  1717.            
  1718.             SPAWN_INTERVAL_AQ = npcs.getProperty("AntQueenSpawnInterval", 36);
  1719.             RANDOM_SPAWN_TIME_AQ = npcs.getProperty("AntQueenRandomSpawn", 17);
  1720.            
  1721.             SPAWN_INTERVAL_ANTHARAS = npcs.getProperty("AntharasSpawnInterval", 264);
  1722.             RANDOM_SPAWN_TIME_ANTHARAS = npcs.getProperty("AntharasRandomSpawn", 72);
  1723.             WAIT_TIME_ANTHARAS = npcs.getProperty("AntharasWaitTime", 30) * 60000;
  1724.            
  1725.             SPAWN_INTERVAL_BAIUM = npcs.getProperty("BaiumSpawnInterval", 168);
  1726.             RANDOM_SPAWN_TIME_BAIUM = npcs.getProperty("BaiumRandomSpawn", 48);
  1727.            
  1728.             SPAWN_INTERVAL_CORE = npcs.getProperty("CoreSpawnInterval", 60);
  1729.             RANDOM_SPAWN_TIME_CORE = npcs.getProperty("CoreRandomSpawn", 23);
  1730.            
  1731.             SPAWN_INTERVAL_FRINTEZZA = npcs.getProperty("FrintezzaSpawnInterval", 48);
  1732.             RANDOM_SPAWN_TIME_FRINTEZZA = npcs.getProperty("FrintezzaRandomSpawn", 8);
  1733.            
  1734.             SPAWN_INTERVAL_ORFEN = npcs.getProperty("OrfenSpawnInterval", 48);
  1735.             RANDOM_SPAWN_TIME_ORFEN = npcs.getProperty("OrfenRandomSpawn", 20);
  1736.            
  1737.             SPAWN_INTERVAL_SAILREN = npcs.getProperty("SailrenSpawnInterval", 36);
  1738.             RANDOM_SPAWN_TIME_SAILREN = npcs.getProperty("SailrenRandomSpawn", 24);
  1739.             WAIT_TIME_SAILREN = npcs.getProperty("SailrenWaitTime", 5) * 60000;
  1740.            
  1741.             SPAWN_INTERVAL_VALAKAS = npcs.getProperty("ValakasSpawnInterval", 264);
  1742.             RANDOM_SPAWN_TIME_VALAKAS = npcs.getProperty("ValakasRandomSpawn", 72);
  1743.             WAIT_TIME_VALAKAS = npcs.getProperty("ValakasWaitTime", 30) * 60000;
  1744.            
  1745.             SPAWN_INTERVAL_ZAKEN = npcs.getProperty("ZakenSpawnInterval", 60);
  1746.             RANDOM_SPAWN_TIME_ZAKEN = npcs.getProperty("ZakenRandomSpawn", 20);
  1747.             ZAKEN_MAX_ENTRY_LEVEL = npcs.getProperty("ZakenMaxEntryLevel", 69);
  1748.            
  1749.             // Enchant config
  1750.             ExProperties enchant = load(ENCHANT_FILE);
  1751.            
  1752.             ENCHANT_CHANCE_WEAPON_MAGIC = enchant.getProperty("EnchantChanceMagicWeapon", 0.4);
  1753.             ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS = enchant.getProperty("EnchantChanceMagicWeapon15Plus", 0.2);
  1754.             ENCHANT_CHANCE_WEAPON_NONMAGIC = enchant.getProperty("EnchantChanceNonMagicWeapon", 0.7);
  1755.             ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS = enchant.getProperty("EnchantChanceNonMagicWeapon15Plus", 0.35);
  1756.             ENCHANT_CHANCE_ARMOR = enchant.getProperty("EnchantChanceArmor", 0.66);
  1757.             ENCHANT_MAX_WEAPON = enchant.getProperty("EnchantMaxWeapon", 0);
  1758.             ENCHANT_MAX_ARMOR = enchant.getProperty("EnchantMaxArmor", 0);
  1759.             ENCHANT_SAFE_MAX = enchant.getProperty("EnchantSafeMax", 3);
  1760.             ENCHANT_SAFE_MAX_FULL = enchant.getProperty("EnchantSafeMaxFull", 4);
  1761.             SCROLL_STACKABLE = enchant.getProperty("ScrollStackable", false);
  1762.             ENCHANT_FAILED_VALUE = enchant.getProperty("EnchantFailedValue", 0);
  1763.            
  1764.             // Augmentation config
  1765.             ExProperties augmentation = load(AUGMENT_FILE);
  1766.            
  1767.             AUGMENTATION_NG_SKILL_CHANCE = augmentation.getProperty("AugmentationNGSkillChance", 15);
  1768.             AUGMENTATION_NG_GLOW_CHANCE = augmentation.getProperty("AugmentationNGGlowChance", 0);
  1769.             AUGMENTATION_MID_SKILL_CHANCE = augmentation.getProperty("AugmentationMidSkillChance", 30);
  1770.             AUGMENTATION_MID_GLOW_CHANCE = augmentation.getProperty("AugmentationMidGlowChance", 40);
  1771.             AUGMENTATION_HIGH_SKILL_CHANCE = augmentation.getProperty("AugmentationHighSkillChance", 45);
  1772.             AUGMENTATION_HIGH_GLOW_CHANCE = augmentation.getProperty("AugmentationHighGlowChance", 70);
  1773.             AUGMENTATION_TOP_SKILL_CHANCE = augmentation.getProperty("AugmentationTopSkillChance", 60);
  1774.             AUGMENTATION_TOP_GLOW_CHANCE = augmentation.getProperty("AugmentationTopGlowChance", 100);
  1775.             AUGMENTATION_BASESTAT_CHANCE = augmentation.getProperty("AugmentationBaseStatChance", 1);
  1776.             REMOVE_AUGMENTATION_EFFECT = augmentation.getProperty("RemoveAugmentationEffect", false);
  1777.             AUGMENT_AVAILABLE_TRADE = augmentation.getProperty("AugmentAvailableTrade", false);
  1778.            
  1779.             // Skills config
  1780.             ExProperties skills = load(SKILLS_FILE);
  1781.            
  1782.             AUTO_LEARN_SKILLS = skills.getProperty("AutoLearnSkills", false);
  1783.             ALT_GAME_MAGICFAILURES = skills.getProperty("MagicFailures", true);
  1784.             ALT_GAME_SHIELD_BLOCKS = skills.getProperty("AltShieldBlocks", false);
  1785.             ALT_PERFECT_SHLD_BLOCK = skills.getProperty("AltPerfectShieldBlockRate", 10);
  1786.             LIFE_CRYSTAL_NEEDED = skills.getProperty("LifeCrystalNeeded", true);
  1787.             SP_BOOK_NEEDED = skills.getProperty("SpBookNeeded", true);
  1788.             ES_SP_BOOK_NEEDED = skills.getProperty("EnchantSkillSpBookNeeded", true);
  1789.             DIVINE_SP_BOOK_NEEDED = skills.getProperty("DivineInspirationSpBookNeeded", true);
  1790.             HOT_DEBUFF_CLEANSE = skills.getProperty("HotSpringsDebuffsCleanse", true);
  1791.             ENABLE_MODIFY_SKILL_DURATION = skills.getProperty("EnableModifySkillDuration", false);
  1792.             BUFFS_MAX_AMOUNT = skills.getProperty("MaxBuffsAmount", 20);
  1793.             RANDOM_FEAR_MOVE = skills.getProperty("RandomFearMove", false);
  1794.             STRIDER_CAST_ALLOW = skills.getProperty("StriderCastAllow", "Disable");
  1795.             DEMONIC_SWORD_LEFT_SKILLS = skills.getProperty("DemonicLeftSkills", "Disable");
  1796.             STRIDER_CAST_SKILL_LIST = skills.getProperty("StriderCastSkillList", new Integer[0]);
  1797.             DEMONIC_SWORD_CAST_SKILL_LIST = skills.getProperty("DemonicSwordCastSkillList", new Integer[0]);
  1798.             STORE_SKILL_COOLTIME = skills.getProperty("StoreSkillCooltime", true);
  1799.             NORMAL_BUFFS_TIME_MULTIPLIER = skills.getProperty("NormalBuffsTimeMultiplier", 1.0);
  1800.             CHANT_BUFFS_TIME_MULTIPLIER = skills.getProperty("ChantBuffsTimeMultiplier", 1.0);
  1801.             DANCE_BUFFS_TIME_MULTIPLIER = skills.getProperty("DanceBuffsTimeMultiplier", 1.0);
  1802.             SONG_BUFFS_TIME_MULTIPLIER = skills.getProperty("SongBuffsTimeMultiplier", 1.0);
  1803.             SPECIAL_BUFFS_TIME_MULTIPLIER = skills.getProperty("SpecialBuffsTimeMultiplier", 1.0);
  1804.             SUMMON_BUFFS_TIME_MULTIPLIER = skills.getProperty("SummonBuffsTimeMultiplier", 1.0);
  1805.             RESIST_BUFFS_TIME_MULTIPLIER = skills.getProperty("ResistBuffsTimeMultiplier", 1.0);
  1806.             PAAGRIO_BUFFS_TIME_MULTIPLIER = skills.getProperty("PaagrioBuffsTimeMultiplier", 1.0);
  1807.            
  1808.             if (ENABLE_MODIFY_SKILL_DURATION)
  1809.             {
  1810.                 SKILL_DURATION_LIST = new HashMap<>();
  1811.                 String[] propertySplit;
  1812.                 propertySplit = skills.getProperty("SkillDurationList", "").split(";");
  1813.                 for (String skill : propertySplit)
  1814.                 {
  1815.                     String[] skillSplit = skill.split(",");
  1816.                     if (skillSplit.length != 2)
  1817.                     {
  1818.                         _log.warn("[SkillDurationList]: invalid config property -> SkillDurationList \"" + skill + "\"");
  1819.                     }
  1820.                     else
  1821.                     {
  1822.                         try
  1823.                         {
  1824.                             SKILL_DURATION_LIST.put(Integer.parseInt(skillSplit[0]), Integer.parseInt(skillSplit[1]));
  1825.                         }
  1826.                         catch (NumberFormatException nfe)
  1827.                         {
  1828.                             if (!skill.equals(""))
  1829.                             {
  1830.                                 _log.warn("[SkillDurationList]: invalid config property -> SkillList \"" + skillSplit[0] + "\"" + skillSplit[1]);
  1831.                             }
  1832.                         }
  1833.                     }
  1834.                 }
  1835.             }
  1836.            
  1837.             // rates
  1838.             ExProperties rates = load(RATES_FILE);
  1839.             RATE_XP = rates.getProperty("RateXp", 1.);
  1840.             RATE_SP = rates.getProperty("RateSp", 1.);
  1841.             RATE_PARTY_XP = rates.getProperty("RatePartyXp", 1.);
  1842.             RATE_PARTY_SP = rates.getProperty("RatePartySp", 1.);
  1843.             RATE_DROP_ADENA = rates.getProperty("RateDropAdena", 1.);
  1844.             RATE_CONSUMABLE_COST = rates.getProperty("RateConsumableCost", 1.);
  1845.             RATE_DROP_ITEMS = rates.getProperty("RateDropItems", 1.);
  1846.             RATE_DROP_ITEMS_BY_RAID = rates.getProperty("RateRaidDropItems", 1.);
  1847.             RATE_DROP_ITEMS_BY_GRAND_RAID = rates.getProperty("RateGrandRaidItems", 1.);
  1848.             RATE_DROP_SPOIL = rates.getProperty("RateDropSpoil", 1.);
  1849.             RATE_DROP_MANOR = rates.getProperty("RateDropManor", 1);
  1850.             RATE_QUEST_DROP = rates.getProperty("RateQuestDrop", 1.);
  1851.             RATE_QUEST_REWARD = rates.getProperty("RateQuestReward", 1.);
  1852.             RATE_QUEST_REWARD_XP = rates.getProperty("RateQuestRewardXP", 1.);
  1853.             RATE_QUEST_REWARD_SP = rates.getProperty("RateQuestRewardSP", 1.);
  1854.             RATE_QUEST_REWARD_ADENA = rates.getProperty("RateQuestRewardAdena", 1.);
  1855.             RATE_KARMA_EXP_LOST = rates.getProperty("RateKarmaExpLost", 1.);
  1856.             RATE_SIEGE_GUARDS_PRICE = rates.getProperty("RateSiegeGuardsPrice", 1.);
  1857.             RATE_DROP_COMMON_HERBS = rates.getProperty("RateCommonHerbs", 1.);
  1858.             RATE_DROP_HP_HERBS = rates.getProperty("RateHpHerbs", 1.);
  1859.             RATE_DROP_MP_HERBS = rates.getProperty("RateMpHerbs", 1.);
  1860.             RATE_DROP_SPECIAL_HERBS = rates.getProperty("RateSpecialHerbs", 1.);
  1861.             PLAYER_DROP_LIMIT = rates.getProperty("PlayerDropLimit", 3);
  1862.             PLAYER_RATE_DROP = rates.getProperty("PlayerRateDrop", 5);
  1863.             PLAYER_RATE_DROP_ITEM = rates.getProperty("PlayerRateDropItem", 70);
  1864.             PLAYER_RATE_DROP_EQUIP = rates.getProperty("PlayerRateDropEquip", 25);
  1865.             PLAYER_RATE_DROP_EQUIP_WEAPON = rates.getProperty("PlayerRateDropEquipWeapon", 5);
  1866.             PET_XP_RATE = rates.getProperty("PetXpRate", 1.);
  1867.             PET_FOOD_RATE = rates.getProperty("PetFoodRate", 1);
  1868.             SINEATER_XP_RATE = rates.getProperty("SinEaterXpRate", 1.);
  1869.             KARMA_DROP_LIMIT = rates.getProperty("KarmaDropLimit", 10);
  1870.             KARMA_RATE_DROP = rates.getProperty("KarmaRateDrop", 70);
  1871.             KARMA_RATE_DROP_ITEM = rates.getProperty("KarmaRateDropItem", 50);
  1872.             KARMA_RATE_DROP_EQUIP = rates.getProperty("KarmaRateDropEquip", 40);
  1873.             KARMA_RATE_DROP_EQUIP_WEAPON = rates.getProperty("KarmaRateDropEquipWeapon", 10);
  1874.            
  1875.             ExProperties servicessettings = load(SERVICES_FILE);
  1876.             NooblesEnabled = servicessettings.getProperty("NooblesEnabled", false);
  1877.             NoblItemId = servicessettings.getProperty("NoblItemId", 4037);
  1878.             NoblItemCount = servicessettings.getProperty("NoblItemCount", 1);
  1879.            
  1880.             HeroItemId = servicessettings.getProperty("HeroItemId", 4037);
  1881.             HeroService = new HashMap<>();
  1882.             String[] propertySplit = servicessettings.getProperty("HeroPrice", "").split(";");
  1883.             for (String data : propertySplit)
  1884.             {
  1885.                 String[] dataSplit = data.split(",");
  1886.                 if (dataSplit.length != 2)
  1887.                 {
  1888.                     _log.warn("[HeroPrice]: invalid config property -> HeroPrice \"" + data + "\"");
  1889.                 }
  1890.                 else
  1891.                 {
  1892.                     try
  1893.                     {
  1894.                         HeroService.put(Integer.valueOf(Integer.parseInt(dataSplit[0])), Integer.valueOf(Integer.parseInt(dataSplit[1])));
  1895.                     }
  1896.                     catch (NumberFormatException nfe)
  1897.                     {
  1898.                         if (!data.equals(""))
  1899.                         {
  1900.                             _log.warn("[HeroPrice]: invalid config property -> PriceList \"" + dataSplit[0] + "\"" + dataSplit[1]);
  1901.                         }
  1902.                     }
  1903.                    
  1904.                 }
  1905.             }
  1906.            
  1907.             GenderEnabled = servicessettings.getProperty("GenderEnabled", false);
  1908.             GenderItemId = servicessettings.getProperty("GenderItemId", 4037);
  1909.             GenderItemCount = servicessettings.getProperty("GenderItemCount", 1);
  1910.            
  1911.             NullPkEnabled = servicessettings.getProperty("NullPkEnabled", false);
  1912.             NullPkItemId = servicessettings.getProperty("NullPkItemId", 4037);
  1913.             NullPkItemCount = servicessettings.getProperty("NullPkItemCount", 1);
  1914.            
  1915.             ClanLvl6Enabled = servicessettings.getProperty("ClanLvl6Enabled", false);
  1916.             ClanLvl6ItemId = servicessettings.getProperty("ClanLvl6ItemId", 4037);
  1917.             ClanLvl6ItemCount = servicessettings.getProperty("ClanLvl6ItemCount", 1);
  1918.            
  1919.             ClanLvl7Enabled = servicessettings.getProperty("ClanLvl7Enabled", false);
  1920.             ClanLvl7ItemId = servicessettings.getProperty("ClanLvl7ItemId", 4037);
  1921.             ClanLvl7ItemCount = servicessettings.getProperty("ClanLvl7ItemCount", 1);
  1922.            
  1923.             ClanLvl8Enabled = servicessettings.getProperty("ClanLvl8Enabled", false);
  1924.             ClanLvl8ItemId = servicessettings.getProperty("ClanLvl8ItemId", 4037);
  1925.             ClanLvl8ItemCount = servicessettings.getProperty("ClanLvl8ItemCount", 1);
  1926.            
  1927.             ClanSkillEnabled = servicessettings.getProperty("ClanSkillEnabled", false);
  1928.             ClanSkillItemId = servicessettings.getProperty("ClanSkillItemId", 4037);
  1929.             ClanSkillItemCount = servicessettings.getProperty("ClanSkillItemCount", 1);
  1930.            
  1931.             ClanRepEnabled = servicessettings.getProperty("ClanRepEnabled", false);
  1932.             ClanRepItemId = servicessettings.getProperty("ClanRepItemId", 4037);
  1933.             ClanRepItemCount = servicessettings.getProperty("ClanRepItemCount", 1);
  1934.             ClanRepCount = servicessettings.getProperty("ClanRepCount", 10000);
  1935.            
  1936.             ChangeNameItemId = servicessettings.getProperty("ChangeNameItemId", 4037);
  1937.             ChangeNameItemCount = servicessettings.getProperty("ChangeNameItemCount", 1);
  1938.             ChangeNamePattern = servicessettings.getProperty("ChangeNamePattern", ".*");
  1939.             ChangeNameColorItemId = servicessettings.getProperty("ChangeNameColorItemId", 4037);
  1940.             ChangeNameColorItemCount = servicessettings.getProperty("ChangeNameColorItemCount", 1);
  1941.             ChangeTitleColorItemId = servicessettings.getProperty("ChangeTitleColorItemId", 4037);
  1942.             ChangeTitleColorItemCount = servicessettings.getProperty("ChangeTitleColorItemCount", 1);
  1943.  
  1944.             LevelUpEnabled = servicessettings.getProperty("LevelUpEnabled", false);
  1945.             LevelUpItemId = servicessettings.getProperty("LevelUpItemId", 57);
  1946.             LevelUpItemCount = servicessettings.getProperty("LevelUpItemCount", 1);
  1947.             LevelUpAdd = servicessettings.getProperty("LevelUpAdd", 1);
  1948.             LevelUpMinLevel = servicessettings.getProperty("LevelUpMinLevel", 1);
  1949.             LevelUpMaxLevel = servicessettings.getProperty("LevelUpMaxLevel", 81);
  1950.  
  1951.             DelevelEnabled  = servicessettings.getProperty("DelevelEnabled", false);
  1952.             DelevelItemId = servicessettings.getProperty("DelevelItemId", 57);
  1953.             DelevelItemCount = servicessettings.getProperty("DelevelItemCount", 1);
  1954.             DelevelLvl = servicessettings.getProperty("DelevelLvl", 1);
  1955.             DelevelMinLevel = servicessettings.getProperty("DelevelMinLevel", 40);
  1956.  
  1957.             L2TOPDEMON_ENABLED = servicessettings.getProperty("L2TopDeamonEnabled", false);
  1958.             L2TOPDEMON_URL = servicessettings.getProperty("L2TopDeamonURL", "");
  1959.             L2TOPDEMON_POLLINTERVAL = servicessettings.getProperty("L2TopDeamonPollInterval", 5);
  1960.             L2TOPDEMON_PREFIX = servicessettings.getProperty("L2TopDeamonPrefix", "");
  1961.             L2TOPDEMON_ITEM = servicessettings.getProperty("L2TopDeamonRewardItem", 0);
  1962.             L2TOPDEMON_MESSAGE = servicessettings.getProperty("L2TopDeamonMessage", "");
  1963.             L2TOPDEMON_MIN = servicessettings.getProperty("L2TopDeamonMin", 1);
  1964.             L2TOPDEMON_MAX = servicessettings.getProperty("L2TopDeamonMax", 1);
  1965.             L2TOPDEMON_IGNOREFIRST = servicessettings.getProperty("L2TopDeamonDoNotRewardAtFirstTime", false);
  1966.            
  1967.             MMOTopEnable = servicessettings.getProperty("MMOTopEnable", false);
  1968.             MMOTopUrl = servicessettings.getProperty("MMOTopUrl", "");
  1969.             MMOTopRefreshTime = servicessettings.getProperty("MMOTopRefreshTime", 10);
  1970.             MMOTopRewardItemId = servicessettings.getProperty("MMOTopRewardItemId", 0);
  1971.             MMOTopRewardItemCount = servicessettings.getProperty("MMOTopRewardItemCount", 1);
  1972.            
  1973.             ENABLE_MENU = servicessettings.getProperty("AllowMenu", false);
  1974.             ALLOW_EXP = servicessettings.getProperty("AllowExpMenu", false);
  1975.             ALLOW_PM = servicessettings.getProperty("AllowPmMenu", false);
  1976.             ALLOW_TRADE = servicessettings.getProperty("AllowTradeMenu", false);
  1977.             ALLOW_LOOT = servicessettings.getProperty("AllowLootMenu", false);
  1978.             ALLOW_REPAIR = servicessettings.getProperty("AllowRepairMenu", false);
  1979.             ALLOW_IPBLOCK = servicessettings.getProperty("AllowIpBlockMenu", false);
  1980.             UP_ONLINE = servicessettings.getProperty("UpOnline", 0);
  1981.             OFFLINE_TRADE_ENABLE = servicessettings.getProperty("OfflineTradeEnable", false);
  1982.             OFFLINE_CRAFT_ENABLE = servicessettings.getProperty("OfflineCraftEnable", false);
  1983.             OFFLINE_SET_NAME_COLOR = servicessettings.getProperty("OfflineSetNameColor", false);
  1984.             OFFLINE_NAME_COLOR = Integer.decode("0x" + servicessettings.getProperty("OfflineNameColor", "808080"));
  1985.             OFFLINE_FAME = servicessettings.getProperty("OfflineFame", true);
  1986.             RESTORE_OFFLINERS = servicessettings.getProperty("RestoreOffliners", false);
  1987.             OFFLINE_MAX_DAYS = servicessettings.getProperty("OfflineMaxDays", 10);
  1988.             OFFLINE_DISCONNECT_FINISHED = servicessettings.getProperty("OfflineDisconnectFinished", true);
  1989.             OFFLINE_SLEEP_EFFECT = servicessettings.getProperty("OfflineSleepEffect", true);
  1990.             PREMIUM_ITEM_ENABLED = servicessettings.getProperty("PremiumItemEnabled", false);
  1991.             PREMIUM_FIRST_ITEM_BONUS = servicessettings.getProperty("PremiumFirstItemBonus", false);
  1992.            
  1993.             String[] array = servicessettings.getProperty("PremiumItemIds", "0").trim().split(";");
  1994.             final int premium_count = array.length;
  1995.             PREMIUM_ITEM_IDS = new int[premium_count];
  1996.             for (int i = 0; i < array.length; i++)
  1997.             {
  1998.                 PREMIUM_ITEM_IDS[i] = Integer.parseInt(array[i]);
  1999.             }
  2000.            
  2001.             array = servicessettings.getProperty("PremiumItemTime", "7").trim().split(";");
  2002.             PREMIUM_ITEM_TIME = new int[premium_count];
  2003.             for (int i = 0; i < array.length; i++)
  2004.             {
  2005.                 PREMIUM_ITEM_TIME[i] = Integer.parseInt(array[i]);
  2006.             }
  2007.            
  2008.             array = servicessettings.getProperty("PremiumItemXP", "1").trim().split(";");
  2009.             PREMIUM_ITEM_XP_MULTIPLIERS = new double[premium_count];
  2010.             for (int i = 0; i < array.length; i++)
  2011.             {
  2012.                 PREMIUM_ITEM_XP_MULTIPLIERS[i] = Double.parseDouble(array[i]);
  2013.             }
  2014.            
  2015.             array = servicessettings.getProperty("PremiumItemSP", "1").trim().split(";");
  2016.             PREMIUM_ITEM_SP_MULTIPLIERS = new double[premium_count];
  2017.             for (int i = 0; i < array.length; i++)
  2018.             {
  2019.                 PREMIUM_ITEM_SP_MULTIPLIERS[i] = Double.parseDouble(array[i]);
  2020.             }
  2021.            
  2022.             array = servicessettings.getProperty("PremiumItemPartyXP", "1").trim().split(";");
  2023.             PREMIUM_ITEM_PARTY_XP_MULTIPLIERS = new double[premium_count];
  2024.             for (int i = 0; i < array.length; i++)
  2025.             {
  2026.                 PREMIUM_ITEM_PARTY_XP_MULTIPLIERS[i] = Double.parseDouble(array[i]);
  2027.             }
  2028.            
  2029.             array = servicessettings.getProperty("PremiumItemPartySP", "1").trim().split(";");
  2030.             PREMIUM_ITEM_PARTY_SP_MULTIPLIERS = new double[premium_count];
  2031.             for (int i = 0; i < array.length; i++)
  2032.             {
  2033.                 PREMIUM_ITEM_PARTY_SP_MULTIPLIERS[i] = Double.parseDouble(array[i]);
  2034.             }
  2035.            
  2036.             array = servicessettings.getProperty("PremiumItemDropAdena", "1").trim().split(";");
  2037.             PREMIUM_ITEM_DROP_ADENA_MULTIPLIERS = new double[premium_count];
  2038.             for (int i = 0; i < array.length; i++)
  2039.             {
  2040.                 PREMIUM_ITEM_DROP_ADENA_MULTIPLIERS[i] = Double.parseDouble(array[i]);
  2041.             }
  2042.            
  2043.             array = servicessettings.getProperty("PremiumItemDropItems", "1").trim().split(";");
  2044.             PREMIUM_ITEM_DROP_ITEMS_MULTIPLIERS = new double[premium_count];
  2045.             for (int i = 0; i < array.length; i++)
  2046.             {
  2047.                 PREMIUM_ITEM_DROP_ITEMS_MULTIPLIERS[i] = Double.parseDouble(array[i]);
  2048.             }
  2049.            
  2050.             array = servicessettings.getProperty("PremiumItemDropSpoil", "1").trim().split(";");
  2051.             PREMIUM_ITEM_SPOIL_MULTIPLIERS = new double[premium_count];
  2052.             for (int i = 0; i < array.length; i++)
  2053.             {
  2054.                 PREMIUM_ITEM_SPOIL_MULTIPLIERS[i] = Double.parseDouble(array[i]);
  2055.             }
  2056.            
  2057.             array = servicessettings.getProperty("PremiumItemQuests", "1").trim().split(";");
  2058.             PREMIUM_ITEM_QUEST_ITEMS_MULTIPLIERS = new double[premium_count];
  2059.             for (int i = 0; i < array.length; i++)
  2060.             {
  2061.                 PREMIUM_ITEM_QUEST_ITEMS_MULTIPLIERS[i] = Double.parseDouble(array[i]);
  2062.             }
  2063.            
  2064.             array = servicessettings.getProperty("PremiumItemBuffs", "1").trim().split(";");
  2065.             PREMIUM_ITEM_BUFFS_TIME_MULTIPLIERS = new double[premium_count];
  2066.             for (int i = 0; i < array.length; i++)
  2067.             {
  2068.                 PREMIUM_ITEM_BUFFS_TIME_MULTIPLIERS[i] = Double.parseDouble(array[i]);
  2069.             }
  2070.            
  2071.             array = servicessettings.getProperty("PremiumItemEnchantChance", "1").trim().split(";");
  2072.             PREMIUM_ITEM_ENCHANT_CHANCE_MULTIPLIERS = new double[premium_count];
  2073.             for (int i = 0; i < array.length; i++)
  2074.             {
  2075.                 PREMIUM_ITEM_ENCHANT_CHANCE_MULTIPLIERS[i] = Double.parseDouble(array[i]);
  2076.             }
  2077.            
  2078.             array = servicessettings.getProperty("PremiumItemAugmentChance", "1").trim().split(";");
  2079.             PREMIUM_ITEM_AUGMENT_CHANCE_MULTIPLIERS = new double[premium_count];
  2080.             for (int i = 0; i < array.length; i++)
  2081.             {
  2082.                 PREMIUM_ITEM_AUGMENT_CHANCE_MULTIPLIERS[i] = Double.parseDouble(array[i]);
  2083.             }
  2084.            
  2085.             array = servicessettings.getProperty("PremiumItemDropSealStones", "1").trim().split(";");
  2086.             PREMIUM_ITEM_DROP_SEAL_STONES_MULTIPLIERS = new double[premium_count];
  2087.             for (int i = 0; i < array.length; i++)
  2088.             {
  2089.                 PREMIUM_ITEM_DROP_SEAL_STONES_MULTIPLIERS[i] = Double.parseDouble(array[i]);
  2090.             }
  2091.            
  2092.             ExProperties inventory = load(INVENTORY_FILE);
  2093.             AUTO_LOOT = inventory.getProperty("AutoLoot", false);
  2094.             AUTO_LOOT_HERBS = inventory.getProperty("AutoLootHerbs", false);
  2095.             AUTO_LOOT_RAID = inventory.getProperty("AutoLootRaid", false);
  2096.             STARTING_CUSTOM_ITEMS = inventory.getProperty("AllowStartingCustomItems", false);
  2097.             propertySplit = inventory.getProperty("StartingCustomItemsMage", "57,0").split(";");
  2098.             for (String reward : propertySplit)
  2099.             {
  2100.                 String[] rewardSplit = reward.split(",");
  2101.                 if (rewardSplit.length != 2)
  2102.                 {
  2103.                     _log.warn(StringUtil.concat("StartingCustomItemsMage[Config.load()]: invalid config property -> StartingCustomItemsMage \"", reward, "\""));
  2104.                 }
  2105.                 else
  2106.                 {
  2107.                     try
  2108.                     {
  2109.                         STARTING_CUSTOM_ITEMS_M.add(new int[]
  2110.                         {
  2111.                             Integer.parseInt(rewardSplit[0]),
  2112.                             Integer.parseInt(rewardSplit[1])
  2113.                         });
  2114.                     }
  2115.                     catch (NumberFormatException nfe)
  2116.                     {
  2117.                         if (!reward.isEmpty())
  2118.                         {
  2119.                             _log.warn(StringUtil.concat("StartingCustomItemsMage[Config.load()]: invalid config property -> StartingCustomItemsMage \"", reward, "\""));
  2120.                         }
  2121.                     }
  2122.                 }
  2123.             }
  2124.            
  2125.             propertySplit = inventory.getProperty("StartingCustomItemsFighter", "57,0").split(";");
  2126.             for (String reward : propertySplit)
  2127.             {
  2128.                 String[] rewardSplit = reward.split(",");
  2129.                 if (rewardSplit.length != 2)
  2130.                 {
  2131.                     _log.warn(StringUtil.concat("StartingCustomItemsFighter[Config.load()]: invalid config property -> StartingCustomItemsFighter \"", reward, "\""));
  2132.                 }
  2133.                 else
  2134.                 {
  2135.                     try
  2136.                     {
  2137.                         STARTING_CUSTOM_ITEMS_F.add(new int[]
  2138.                         {
  2139.                             Integer.parseInt(rewardSplit[0]),
  2140.                             Integer.parseInt(rewardSplit[1])
  2141.                         });
  2142.                     }
  2143.                     catch (NumberFormatException nfe)
  2144.                     {
  2145.                         if (!reward.isEmpty())
  2146.                         {
  2147.                             _log.warn(StringUtil.concat("StartingCustomItemsFighter[Config.load()]: invalid config property -> StartingCustomItemsFighter \"", reward, "\""));
  2148.                         }
  2149.                     }
  2150.                 }
  2151.             }
  2152.             STARTING_ADENA = inventory.getProperty("StartingAdena", 100);
  2153.             INVENTORY_MAXIMUM_NO_DWARF = inventory.getProperty("MaximumSlotsForNoDwarf", 80);
  2154.             INVENTORY_MAXIMUM_DWARF = inventory.getProperty("MaximumSlotsForDwarf", 100);
  2155.             INVENTORY_MAXIMUM_QUEST_ITEMS = inventory.getProperty("MaximumSlotsForQuestItems", 100);
  2156.             INVENTORY_MAXIMUM_PET = inventory.getProperty("MaximumSlotsForPet", 12);
  2157.             MAX_ITEM_IN_PACKET = Math.max(INVENTORY_MAXIMUM_NO_DWARF, INVENTORY_MAXIMUM_DWARF);
  2158.             ALT_WEIGHT_LIMIT = inventory.getProperty("AltWeightLimit", 1);
  2159.             WAREHOUSE_SLOTS_NO_DWARF = inventory.getProperty("MaximumWarehouseSlotsForNoDwarf", 100);
  2160.             WAREHOUSE_SLOTS_DWARF = inventory.getProperty("MaximumWarehouseSlotsForDwarf", 120);
  2161.             WAREHOUSE_SLOTS_CLAN = inventory.getProperty("MaximumWarehouseSlotsForClan", 150);
  2162.             FREIGHT_SLOTS = inventory.getProperty("MaximumFreightSlots", 20);
  2163.             ALT_GAME_FREIGHTS = inventory.getProperty("AltGameFreights", false);
  2164.             ALT_GAME_FREIGHT_PRICE = inventory.getProperty("AltGameFreightPrice", 1000);
  2165.            
  2166.             ExProperties admin = load(ADMIN_FILE);
  2167.             RESTRICTED_CHAR_NAMES = admin.getProperty("ListOfRestrictedCharNames", "DoctorQ");
  2168.             LIST_RESTRICTED_CHAR_NAMES = new ArrayList<>();
  2169.             for (String name : RESTRICTED_CHAR_NAMES.split(","))
  2170.             {
  2171.                 LIST_RESTRICTED_CHAR_NAMES.add(name.toLowerCase());
  2172.             }
  2173.             EVERYBODY_HAS_ADMIN_RIGHTS = admin.getProperty("EverybodyHasAdminRights", false);
  2174.             MASTERACCESS_LEVEL = admin.getProperty("MasterAccessLevel", 127);
  2175.             MASTERACCESS_NAME_COLOR = Integer.decode(StringUtil.concat("0x", admin.getProperty("MasterNameColor", "00FF00")));
  2176.             MASTERACCESS_TITLE_COLOR = Integer.decode(StringUtil.concat("0x", admin.getProperty("MasterTitleColor", "00FF00")));
  2177.             GM_HERO_AURA = admin.getProperty("GMHeroAura", false);
  2178.             GM_STARTUP_INVULNERABLE = admin.getProperty("GMStartupInvulnerable", true);
  2179.             GM_STARTUP_INVISIBLE = admin.getProperty("GMStartupInvisible", true);
  2180.             GM_STARTUP_SILENCE = admin.getProperty("GMStartupSilence", true);
  2181.             GM_STARTUP_AUTO_LIST = admin.getProperty("GMStartupAutoList", true);
  2182.            
  2183.             PETITIONING_ALLOWED = admin.getProperty("PetitioningAllowed", true);
  2184.             MAX_PETITIONS_PER_PLAYER = admin.getProperty("MaxPetitionsPerPlayer", 5);
  2185.             MAX_PETITIONS_PENDING = admin.getProperty("MaxPetitionsPending", 25);
  2186.            
  2187.             // players
  2188.             ExProperties players = load(PLAYERS_FILE);
  2189.             ALLOW_NEW_CHAR_LEVEL = players.getProperty("NewCharLvlMod", false);
  2190.             NEW_CHAR_LEVEL = players.getProperty("NewCharLvl", 1);
  2191.             ALLOW_MOD_TITLE_NCHAR = players.getProperty("NewCharTitleMod", false);
  2192.             MOD_TITLE_NCHAR = players.getProperty("NewCharTitle", "Welcome");
  2193.             REGEX_CHAR_NAME = players.getProperty("RegexCharName", "[0-9A-Za-z]]{3,16}");
  2194.             REGEX_PET_NAME = players.getProperty("RegexPetName", "[0-9A-Za-z]]{3,16}");
  2195.             EFFECT_CANCELING = players.getProperty("CancelLesserEffect", true);
  2196.             HP_REGEN_MULTIPLIER = players.getProperty("HpRegenMultiplier", 1.);
  2197.             MP_REGEN_MULTIPLIER = players.getProperty("MpRegenMultiplier", 1.);
  2198.             CP_REGEN_MULTIPLIER = players.getProperty("CpRegenMultiplier", 1.);
  2199.             PLAYER_SPAWN_PROTECTION = players.getProperty("PlayerSpawnProtection", 0);
  2200.             PLAYER_SPAWN_PROTECTION_AURA = players.getProperty("PlayerSpawnProtectionAura", false);
  2201.             PLAYER_FAKEDEATH_UP_PROTECTION = players.getProperty("PlayerFakeDeathUpProtection", 0);
  2202.             RESPAWN_RESTORE_HP = players.getProperty("RespawnRestoreHP", 0.7);
  2203.             MAX_PVTSTORE_SLOTS_DWARF = players.getProperty("MaxPvtStoreSlotsDwarf", 5);
  2204.             MAX_PVTSTORE_SLOTS_OTHER = players.getProperty("MaxPvtStoreSlotsOther", 4);
  2205.             DEEPBLUE_DROP_RULES = players.getProperty("UseDeepBlueDropRules", true);
  2206.             ALT_GAME_DELEVEL = players.getProperty("Delevel", true);
  2207.             DEATH_PENALTY_CHANCE = players.getProperty("DeathPenaltyChance", 20);
  2208.            
  2209.             MAX_PATK_SPEED = Integer.parseInt(players.getProperty("MaxPAtkSpeed", "1400"));
  2210.             MAX_MATK_SPEED = Integer.parseInt(players.getProperty("MaxMAtkSpeed", "1600"));
  2211.            
  2212.             NEW_CHAR_IS_NOBLE = players.getProperty("NewCharIsNoble", false);
  2213.             CRUMA_MAX_LEVEL_ENTER = players.getProperty("CrumaMaxLevelEnter", 56);
  2214.            
  2215.             L2OFF_SHOTS = players.getProperty("OfflikeShots", false);
  2216.            
  2217.             KARMA_PLAYER_CAN_BE_KILLED_IN_PZ = players.getProperty("KarmaPlayerCanBeKilledInPeaceZone", false);
  2218.             KARMA_PLAYER_CAN_SHOP = players.getProperty("KarmaPlayerCanShop", true);
  2219.             KARMA_PLAYER_CAN_USE_GK = players.getProperty("KarmaPlayerCanUseGK", false);
  2220.             KARMA_PLAYER_CAN_TELEPORT = players.getProperty("KarmaPlayerCanTeleport", true);
  2221.             KARMA_PLAYER_CAN_TRADE = players.getProperty("KarmaPlayerCanTrade", true);
  2222.             KARMA_PLAYER_CAN_USE_WH = players.getProperty("KarmaPlayerCanUseWareHouse", true);
  2223.             KARMA_DROP_GM = players.getProperty("CanGMDropEquipment", false);
  2224.             KARMA_AWARD_PK_KILL = players.getProperty("AwardPKKillPVPPoint", true);
  2225.             KARMA_PK_LIMIT = players.getProperty("MinimumPKRequiredToDrop", 5);
  2226.             KARMA_NONDROPPABLE_PET_ITEMS = players.getProperty("ListOfPetItems", "2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650");
  2227.             KARMA_NONDROPPABLE_ITEMS = players.getProperty("ListOfNonDroppableItemsForPK", "1147,425,1146,461,10,2368,7,6,2370,2369");
  2228.            
  2229.             array = KARMA_NONDROPPABLE_PET_ITEMS.split(",");
  2230.             KARMA_LIST_NONDROPPABLE_PET_ITEMS = new int[array.length];
  2231.            
  2232.             for (int i = 0; i < array.length; i++)
  2233.             {
  2234.                 KARMA_LIST_NONDROPPABLE_PET_ITEMS[i] = Integer.parseInt(array[i]);
  2235.             }
  2236.            
  2237.             array = KARMA_NONDROPPABLE_ITEMS.split(",");
  2238.             KARMA_LIST_NONDROPPABLE_ITEMS = new int[array.length];
  2239.            
  2240.             for (int i = 0; i < array.length; i++)
  2241.             {
  2242.                 KARMA_LIST_NONDROPPABLE_ITEMS[i] = Integer.parseInt(array[i]);
  2243.             }
  2244.            
  2245.             // sorting so binarySearch can be used later
  2246.             Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
  2247.             Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
  2248.            
  2249.             PVP_NORMAL_TIME = players.getProperty("PvPVsNormalTime", 15000);
  2250.             PVP_PVP_TIME = players.getProperty("PvPVsPvPTime", 30000);
  2251.            
  2252.             PARTY_XP_CUTOFF_METHOD = players.getProperty("PartyXpCutoffMethod", "level");
  2253.             PARTY_XP_CUTOFF_PERCENT = players.getProperty("PartyXpCutoffPercent", 3.);
  2254.             PARTY_XP_CUTOFF_LEVEL = players.getProperty("PartyXpCutoffLevel", 20);
  2255.             ALT_PARTY_RANGE = players.getProperty("AltPartyRange", 1600);
  2256.             ALT_PARTY_RANGE2 = players.getProperty("AltPartyRange2", 1400);
  2257.             ALT_LEAVE_PARTY_LEADER = players.getProperty("AltLeavePartyLeader", false);
  2258.             REMOVE_EFFECTS_AFTER_DEATH = players.getProperty("RemoveEffectsAfterDeath", true);
  2259.            
  2260.             IS_CRAFTING_ENABLED = players.getProperty("CraftingEnabled", true);
  2261.             DWARF_RECIPE_LIMIT = players.getProperty("DwarfRecipeLimit", 50);
  2262.             COMMON_RECIPE_LIMIT = players.getProperty("CommonRecipeLimit", 50);
  2263.             ALT_BLACKSMITH_USE_RECIPES = players.getProperty("AltBlacksmithUseRecipes", true);
  2264.            
  2265.             ExProperties customssettings = load(CUSTOMS_FILE);
  2266.             UNLIM_SHOTS = customssettings.getProperty("DontUseShots", false);
  2267.             UNLIMITED_ARROWS = customssettings.getProperty("DontUseArrows", false);
  2268.             ENABLE_CHANGE_PSWD = customssettings.getProperty("ChangePassword", false);
  2269.             PSWD_LEGHT_MIN = customssettings.getProperty("PasswordMinLeght", 4);
  2270.             PSWD_LEGHT_MAX = customssettings.getProperty("PasswordMaxLeght", 30);
  2271.             ENABLE_CLAN_REP_ITEM = customssettings.getProperty("ClanRepItem", false);
  2272.             CLAN_REP_COUNT = customssettings.getProperty("ClanReputationCount", 1000);
  2273.             ALT_SUBCLASS_MAX_SUB_COUNT = customssettings.getProperty("AltSubclassMaxSubCount", 3);
  2274.             ALT_SUBCLASS_WITH_CUSTOM_ITEM = customssettings.getProperty("AltSubclassWithCustomItem", false);
  2275.             ALT_SUBCLASS_WITH_CUSTOM_ITEM_ID = customssettings.getProperty("AltSubclassWithCustomItemId", 6319);
  2276.             ALT_SUBCLASS_WITH_CUSTOM_ITEM_COUNT = customssettings.getProperty("AltSubclassWithCustomItemCount", 1);
  2277.             ALT_SUBCLASS_WITH_ITEM_AND_NO_QUEST = customssettings.getProperty("AltSubclassWithItemAndNoQuest", false);
  2278.             ALT_SUBCLASS_WITHOUT_QUESTS = customssettings.getProperty("AltSubclassWithoutQuests", false);
  2279.             ALT_NOBLE_ON_BARAKIEL_KILL = customssettings.getProperty("AltNobleOnBarakielKill", false);
  2280.             ALT_SUB_ON_CUSTOM_RAID_KILL = customssettings.getProperty("AltSubOnCustomRaidKill", false);
  2281.             BUFF_CUSTOM_LEVELS = customssettings.getProperty("BuffCustomLevels", false);
  2282.             BUFF_MIN_LEVEL = customssettings.getProperty("BuffMinLevel", 7);
  2283.             BUFF_MAX_LEVEL = customssettings.getProperty("BuffMaxLevel", 25);
  2284.             ALT_SUB_RAID_IDS = customssettings.getProperty("AltSubRaidId", "25035,25220,25126,25054");
  2285.             ALT_SUB_LIST_RAID_IDS = new ArrayList<>();
  2286.             for (String obj : ALT_SUB_RAID_IDS.split(","))
  2287.             {
  2288.                 ALT_SUB_LIST_RAID_IDS.add(Integer.parseInt(obj));
  2289.             }
  2290.            
  2291.             // Alt Settings config
  2292.             ExProperties altsettings = load(ALTSETTINGS_FILE);
  2293.             JAIL_IS_PVP = altsettings.getProperty("JailIsPvp", true);
  2294.             DEFAULT_PUNISH = altsettings.getProperty("DefaultPunish", 2);
  2295.             DEFAULT_PUNISH_PARAM = altsettings.getProperty("DefaultPunishParam", 0);
  2296.             DEFAULT_GLOBAL_CHAT = altsettings.getProperty("GlobalChat", "ON");
  2297.             DEFAULT_TRADE_CHAT = altsettings.getProperty("TradeChat", "ON");
  2298.             CHAT_ALL_LEVEL = altsettings.getProperty("AllChatLevel", 1);
  2299.             CHAT_TELL_LEVEL = altsettings.getProperty("TellChatLevel", 1);
  2300.             CHAT_SHOUT_LEVEL = altsettings.getProperty("ShoutChatLevel", 1);
  2301.             CHAT_TRADE_LEVEL = altsettings.getProperty("TradeChatLevel", 1);
  2302.            
  2303.             ZONE_TOWN = altsettings.getProperty("ZoneTown", 0);
  2304.             SERVER_NEWS = altsettings.getProperty("ShowServerNews", false);
  2305.             DISABLE_TUTORIAL = altsettings.getProperty("DisableTutorial", false);
  2306.             NIGHT_GK = altsettings.getProperty("NightGk", false);
  2307.             GK_FREE_TELEPORT_LEVEL = altsettings.getProperty("GkFree", 40);
  2308.             ALT_GAME_FREE_TELEPORT = altsettings.getProperty("AltFreeTeleporting", false);
  2309.             NOBLE_TELEPORT_FOR_ALL = altsettings.getProperty("AllowNobleTPToAll", false);
  2310.             PET_CAN_FEEL_HUNGRY = altsettings.getProperty("PetCanFeelHungry", true);
  2311.             SKILLS_CAST_TIME_MIN = altsettings.getProperty("SkillsCastTimeMin", 500);
  2312.            
  2313.             CHAR_CUSTOM_START_POINT = altsettings.getProperty("CharCustomStartPoint", false);
  2314.            
  2315.             if (CHAR_CUSTOM_START_POINT)
  2316.             {
  2317.                
  2318.                 for (Map.Entry<String, HashMap<String, Integer[]>> mapItem : CUSTOM_START_POINT_HOLDER.entrySet())
  2319.                 {
  2320.                    
  2321.                     for (String pointsInfo : altsettings.getProperty(mapItem.getKey(), "").split(";"))
  2322.                     {
  2323.                        
  2324.                         if (pointsInfo.length() == 0)
  2325.                         {
  2326.                             continue;
  2327.                         }
  2328.                        
  2329.                         final String[] parseInfo = pointsInfo.split(",");
  2330.                        
  2331.                         if (parseInfo.length < 4)
  2332.                         {
  2333.                             continue;
  2334.                         }
  2335.                        
  2336.                         try
  2337.                         {
  2338.                             mapItem.getValue().put(parseInfo[0].equalsIgnoreCase("fighter") ? "Fighter" : "Mage", new Integer[]
  2339.                             {
  2340.                                 Integer.parseInt(parseInfo[1]),
  2341.                                 Integer.parseInt(parseInfo[2]),
  2342.                                 Integer.parseInt(parseInfo[3])
  2343.                             } //spawn coord: x,y,z
  2344.                             );
  2345.                         }
  2346.                         catch (Exception ex)
  2347.                         {
  2348.                             _log.warn("CharCustomStartPoint [Config.load()]: invalid config property -> null string");
  2349.                         }
  2350.                        
  2351.                     }
  2352.                 }
  2353.             }
  2354.            
  2355.             // GeoData config
  2356.             ExProperties geodata = load(GEODATA_FILE);
  2357.            
  2358.             COORD_SYNCHRONIZE = geodata.getProperty("CoordSynchronize", -1);
  2359.             GEODATA = geodata.getProperty("GeoData", 0);
  2360.             FORCE_GEODATA = geodata.getProperty("ForceGeoData", true);
  2361.            
  2362.             GEODATA_CELLFINDING = geodata.getProperty("CellPathFinding", false);
  2363.             PATHFIND_BUFFERS = geodata.getProperty("PathFindBuffers", "100x6;128x6;192x6;256x4;320x4;384x4;500x2");
  2364.             LOW_WEIGHT = geodata.getProperty("LowWeight", 0.5);
  2365.             MEDIUM_WEIGHT = geodata.getProperty("MediumWeight", 2);
  2366.             HIGH_WEIGHT = geodata.getProperty("HighWeight", 3);
  2367.             ADVANCED_DIAGONAL_STRATEGY = geodata.getProperty("AdvancedDiagonalStrategy", true);
  2368.             DIAGONAL_WEIGHT = geodata.getProperty("DiagonalWeight", 0.707);
  2369.             MAX_POSTFILTER_PASSES = geodata.getProperty("MaxPostfilterPasses", 3);
  2370.             DEBUG_PATH = geodata.getProperty("DebugPath", false);
  2371.            
  2372.             // server
  2373.             ExProperties server = load(SERVER_FILE);
  2374.            
  2375.             GAMESERVER_HOSTNAME = server.getProperty("GameserverHostname");
  2376.             PORT_GAME = server.getProperty("GameserverPort", 7777);
  2377.            
  2378.             EXTERNAL_HOSTNAME = server.getProperty("ExternalHostname", "*");
  2379.             INTERNAL_HOSTNAME = server.getProperty("InternalHostname", "*");
  2380.            
  2381.             GAME_SERVER_LOGIN_PORT = server.getProperty("LoginPort", 9014);
  2382.             GAME_SERVER_LOGIN_HOST = server.getProperty("LoginHost", "127.0.0.1");
  2383.            
  2384.             REQUEST_ID = server.getProperty("RequestServerID", 0);
  2385.             ACCEPT_ALTERNATE_ID = server.getProperty("AcceptAlternateID", true);
  2386.            
  2387.             SERVER_LIST_BRACKET = server.getProperty("ServerListBrackets", false);
  2388.             SERVER_LIST_CLOCK = server.getProperty("ServerListClock", false);
  2389.             SERVER_GMONLY = server.getProperty("ServerGMOnly", false);
  2390.             TEST_SERVER = server.getProperty("TestServer", false);
  2391.             SERVER_LIST_TESTSERVER = server.getProperty("TestServer", false);
  2392.            
  2393.             DELETE_DAYS = server.getProperty("DeleteCharAfterDays", 7);
  2394.             MAXIMUM_ONLINE_USERS = server.getProperty("MaximumOnlineUsers", 100);
  2395.             MIN_PROTOCOL_REVISION = server.getProperty("MinProtocolRevision", 730);
  2396.             MAX_PROTOCOL_REVISION = server.getProperty("MaxProtocolRevision", 746);
  2397.             if (MIN_PROTOCOL_REVISION > MAX_PROTOCOL_REVISION)
  2398.             {
  2399.                 throw new Error("MinProtocolRevision is bigger than MaxProtocolRevision in server.properties.");
  2400.             }
  2401.            
  2402.             ALLOW_DISCARDITEM = server.getProperty("AllowDiscardItem", true);
  2403.             MULTIPLE_ITEM_DROP = server.getProperty("MultipleItemDrop", true);
  2404.             AUTODESTROY_ITEM_AFTER = server.getProperty("AutoDestroyDroppedItemAfter", 0);
  2405.             HERB_AUTO_DESTROY_TIME = server.getProperty("AutoDestroyHerbTime", 15) * 1000;
  2406.             ITEM_AUTO_DESTROY_TIME = server.getProperty("AutoDestroyItemTime", 0) * 1000;
  2407.             PROTECTED_ITEMS = server.getProperty("ListOfProtectedItems");
  2408.            
  2409.             LIST_PROTECTED_ITEMS = new ArrayList<>();
  2410.             for (String id : PROTECTED_ITEMS.split(","))
  2411.             {
  2412.                 LIST_PROTECTED_ITEMS.add(Integer.parseInt(id));
  2413.             }
  2414.            
  2415.             DESTROY_DROPPED_PLAYER_ITEM = server.getProperty("DestroyPlayerDroppedItem", false);
  2416.             DESTROY_EQUIPABLE_PLAYER_ITEM = server.getProperty("DestroyEquipableItem", false);
  2417.             SAVE_DROPPED_ITEM = server.getProperty("SaveDroppedItem", false);
  2418.             EMPTY_DROPPED_ITEM_TABLE_AFTER_LOAD = server.getProperty("EmptyDroppedItemTableAfterLoad", false);
  2419.             SAVE_DROPPED_ITEM_INTERVAL = server.getProperty("SaveDroppedItemInterval", 0) * 60000;
  2420.             CLEAR_DROPPED_ITEM_TABLE = server.getProperty("ClearDroppedItemTable", false);
  2421.            
  2422.             ALLOW_FREIGHT = server.getProperty("AllowFreight", true);
  2423.             ALLOW_WAREHOUSE = server.getProperty("AllowWarehouse", true);
  2424.             ALLOW_WEAR = server.getProperty("AllowWear", true);
  2425.             WEAR_DELAY = server.getProperty("WearDelay", 5);
  2426.             WEAR_PRICE = server.getProperty("WearPrice", 10);
  2427.             ALLOW_RACE = server.getProperty("AllowRace", true);
  2428.             ALLOW_WATER = server.getProperty("AllowWater", true);
  2429.             ALLOWFISHING = server.getProperty("AllowFishing", false);
  2430.             ALLOW_BOAT = server.getProperty("AllowBoat", true);
  2431.             ALLOW_CURSED_WEAPONS = server.getProperty("AllowCursedWeapons", true);
  2432.            
  2433.             String str = server.getProperty("EnableFallingDamage", "auto");
  2434.             ENABLE_FALLING_DAMAGE = "auto".equalsIgnoreCase(str) ? GEODATA > 0 : Boolean.parseBoolean(str);
  2435.            
  2436.             ALT_DEV_NO_SCRIPTS = server.getProperty("NoScripts", false);
  2437.             ALT_DEV_NO_SPAWNS = server.getProperty("NoSpawns", false);
  2438.             DEBUG = server.getProperty("Debug", false);
  2439.             DEVELOPER = server.getProperty("Developer", false);
  2440.             PACKET_HANDLER_DEBUG = server.getProperty("PacketHandlerDebug", false);
  2441.            
  2442.             DEADLOCK_DETECTOR = server.getProperty("DeadLockDetector", false);
  2443.             DEADLOCK_CHECK_INTERVAL = server.getProperty("DeadLockCheckInterval", 20);
  2444.             RESTART_ON_DEADLOCK = server.getProperty("RestartOnDeadlock", false);
  2445.            
  2446.             LOG_CHAT = server.getProperty("LogChat", false);
  2447.             LOG_ITEMS = server.getProperty("LogItems", false);
  2448.             GMAUDIT = server.getProperty("GMAudit", false);
  2449.            
  2450.             ENABLE_COMMUNITY_BOARD = server.getProperty("EnableCommunityBoard", false);
  2451.             BBS_DEFAULT = server.getProperty("BBSDefault", "_bbshome");
  2452.            
  2453.             L2WALKER_PROTECTION = server.getProperty("L2WalkerProtection", false);
  2454.             AUTODELETE_INVALID_QUEST_DATA = server.getProperty("AutoDeleteInvalidQuestData", false);
  2455.             GAMEGUARD_ENFORCE = server.getProperty("GameGuardEnforce", false);
  2456.         }
  2457.         else if (Server.serverMode == Server.MODE_LOGINSERVER)
  2458.         {
  2459.             _log.info("Loading loginserver configuration files.");
  2460.            
  2461.             ExProperties server = load(LOGIN_FILE);
  2462.             GAME_SERVER_LOGIN_HOST = server.getProperty("LoginHostname", "*");
  2463.             GAME_SERVER_LOGIN_PORT = server.getProperty("LoginPort", 9013);
  2464.            
  2465.             LOGIN_BIND_ADDRESS = server.getProperty("LoginserverHostname", "*");
  2466.             PORT_LOGIN = server.getProperty("LoginserverPort", 2106);
  2467.            
  2468.             DEBUG = server.getProperty("Debug", false);
  2469.             DEVELOPER = server.getProperty("Developer", false);
  2470.             PACKET_HANDLER_DEBUG = server.getProperty("PacketHandlerDebug", false);
  2471.             ACCEPT_NEW_GAMESERVER = server.getProperty("AcceptNewGameServer", true);
  2472.             REQUEST_ID = server.getProperty("RequestServerID", 0);
  2473.             ACCEPT_ALTERNATE_ID = server.getProperty("AcceptAlternateID", true);
  2474.            
  2475.             LOGIN_TRY_BEFORE_BAN = server.getProperty("LoginTryBeforeBan", 10);
  2476.             LOGIN_BLOCK_AFTER_BAN = server.getProperty("LoginBlockAfterBan", 600);
  2477.            
  2478.             LOG_LOGIN_CONTROLLER = server.getProperty("LogLoginController", false);
  2479.            
  2480.             INTERNAL_HOSTNAME = server.getProperty("InternalHostname", "localhost");
  2481.             EXTERNAL_HOSTNAME = server.getProperty("ExternalHostname", "localhost");
  2482.            
  2483.             SHOW_LICENCE = server.getProperty("ShowLicence", true);
  2484.             IP_UPDATE_TIME = server.getProperty("IpUpdateTime", 15);
  2485.             FORCE_GGAUTH = server.getProperty("ForceGGAuth", false);
  2486.            
  2487.             CRYPT_TOKEN = server.getProperty("CryptToken", false);
  2488.            
  2489.             AUTO_CREATE_ACCOUNTS = server.getProperty("AutoCreateAccounts", true);
  2490.            
  2491.             FLOOD_PROTECTION = server.getProperty("EnableFloodProtection", true);
  2492.             FAST_CONNECTION_LIMIT = server.getProperty("FastConnectionLimit", 15);
  2493.             NORMAL_CONNECTION_TIME = server.getProperty("NormalConnectionTime", 700);
  2494.             FAST_CONNECTION_TIME = server.getProperty("FastConnectionTime", 350);
  2495.             MAX_CONNECTION_PER_IP = server.getProperty("MaxConnectionPerIP", 50);
  2496.         }
  2497.         else
  2498.         {
  2499.             _log.error("Couldn't load configs: server mode wasn't set.");
  2500.         }
  2501.     }
  2502.    
  2503.     // It has no instances
  2504.     private Config()
  2505.     {
  2506.     }
  2507.    
  2508.     public static void saveHexid(int serverId, String string)
  2509.     {
  2510.         Config.saveHexid(serverId, string, HEXID_FILE);
  2511.     }
  2512.    
  2513.     public static void saveHexid(int serverId, String hexId, String fileName)
  2514.     {
  2515.         try
  2516.         {
  2517.             Properties hexSetting = new Properties();
  2518.             File file = new File(fileName);
  2519.             file.createNewFile();
  2520.            
  2521.             OutputStream out = new FileOutputStream(file);
  2522.             hexSetting.setProperty("ServerID", String.valueOf(serverId));
  2523.             hexSetting.setProperty("HexID", hexId);
  2524.             hexSetting.store(out, "the hexID to auth into login");
  2525.             out.close();
  2526.         }
  2527.         catch (Exception e)
  2528.         {
  2529.             _log.warn("Failed to save hex id to " + fileName + " file.");
  2530.             e.printStackTrace();
  2531.         }
  2532.     }
  2533.    
  2534.     /**
  2535.      * Loads single flood protector configuration.
  2536.      * @param properties L2Properties file reader
  2537.      * @param config flood protector configuration instance
  2538.      * @param configString flood protector configuration string that determines for which flood protector configuration should be read
  2539.      * @param defaultInterval default flood protector interval
  2540.      */
  2541.     private static void loadFloodProtectorConfig(final Properties properties, final FloodProtectorConfig config, final String configString, final String defaultInterval)
  2542.     {
  2543.         config.FLOOD_PROTECTION_INTERVAL = Integer.parseInt(properties.getProperty(StringUtil.concat("FloodProtector", configString, "Interval"), defaultInterval));
  2544.         config.LOG_FLOODING = Boolean.parseBoolean(properties.getProperty(StringUtil.concat("FloodProtector", configString, "LogFlooding"), "False"));
  2545.         config.PUNISHMENT_LIMIT = Integer.parseInt(properties.getProperty(StringUtil.concat("FloodProtector", configString, "PunishmentLimit"), "0"));
  2546.         config.PUNISHMENT_TYPE = properties.getProperty(StringUtil.concat("FloodProtector", configString, "PunishmentType"), "none");
  2547.         config.PUNISHMENT_TIME = Integer.parseInt(properties.getProperty(StringUtil.concat("FloodProtector", configString, "PunishmentTime"), "0"));
  2548.     }
  2549.    
  2550.     public static class ClassMasterSettings
  2551.     {
  2552.         private final Map<Integer, List<ItemHolder>> _claimItems;
  2553.         private final Map<Integer, List<ItemHolder>> _rewardItems;
  2554.         private final Map<Integer, Boolean> _allowedClassChange;
  2555.        
  2556.         public ClassMasterSettings(String configLine)
  2557.         {
  2558.             _allowedClassChange = new HashMap<>(3);
  2559.             _claimItems = new HashMap<>(3);
  2560.             _rewardItems = new HashMap<>(3);
  2561.            
  2562.             if (configLine != null)
  2563.             {
  2564.                 parseConfigLine(configLine.trim());
  2565.             }
  2566.         }
  2567.        
  2568.         private void parseConfigLine(String configLine)
  2569.         {
  2570.             StringTokenizer st = new StringTokenizer(configLine, ";");
  2571.            
  2572.             while (st.hasMoreTokens())
  2573.             {
  2574.                 // get allowed class change
  2575.                 int job = Integer.parseInt(st.nextToken());
  2576.                
  2577.                 _allowedClassChange.put(job, true);
  2578.                
  2579.                 List<ItemHolder> items = new ArrayList<>();
  2580.                 // parse items needed for class change
  2581.                 if (st.hasMoreTokens())
  2582.                 {
  2583.                     StringTokenizer st2 = new StringTokenizer(st.nextToken(), "[],");
  2584.                    
  2585.                     while (st2.hasMoreTokens())
  2586.                     {
  2587.                         StringTokenizer st3 = new StringTokenizer(st2.nextToken(), "()");
  2588.                         items.add(new ItemHolder(Integer.parseInt(st3.nextToken()), Integer.parseInt(st3.nextToken())));
  2589.                     }
  2590.                 }
  2591.                
  2592.                 // Feed the map, and clean the list.
  2593.                 _claimItems.put(job, items);
  2594.                 items = new ArrayList<>();
  2595.                 // parse gifts after class change
  2596.                 if (st.hasMoreTokens())
  2597.                 {
  2598.                     StringTokenizer st2 = new StringTokenizer(st.nextToken(), "[],");
  2599.                    
  2600.                     while (st2.hasMoreTokens())
  2601.                     {
  2602.                         StringTokenizer st3 = new StringTokenizer(st2.nextToken(), "()");
  2603.                         items.add(new ItemHolder(Integer.parseInt(st3.nextToken()), Integer.parseInt(st3.nextToken())));
  2604.                     }
  2605.                 }
  2606.                
  2607.                 _rewardItems.put(job, items);
  2608.             }
  2609.         }
  2610.        
  2611.         public boolean isAllowed(int job)
  2612.         {
  2613.             if (_allowedClassChange == null)
  2614.             {
  2615.                 return false;
  2616.             }
  2617.            
  2618.             if (_allowedClassChange.containsKey(job))
  2619.             {
  2620.                 return _allowedClassChange.get(job);
  2621.             }
  2622.            
  2623.             return false;
  2624.         }
  2625.        
  2626.         public List<ItemHolder> getRewardItems(int job)
  2627.         {
  2628.             return _rewardItems.get(job);
  2629.         }
  2630.        
  2631.         public List<ItemHolder> getRequiredItems(int job)
  2632.         {
  2633.             return _claimItems.get(job);
  2634.         }
  2635.     }
  2636.    
  2637.     /**
  2638.      * itemId1,itemNumber1;itemId2,itemNumber2... to the int[n][2] = [itemId1][itemNumber1],[itemId2][itemNumber2]...
  2639.      * @param line
  2640.      * @return an array consisting of parsed items.
  2641.      */
  2642.     private static int[][] parseItemsList(String line)
  2643.     {
  2644.         final String[] propertySplit = line.split(";");
  2645.         if (propertySplit.length == 0)
  2646.         {
  2647.             return null;
  2648.         }
  2649.        
  2650.         int i = 0;
  2651.         String[] valueSplit;
  2652.         final int[][] result = new int[propertySplit.length][];
  2653.         for (String value : propertySplit)
  2654.         {
  2655.             valueSplit = value.split(",");
  2656.             if (valueSplit.length != 2)
  2657.             {
  2658.                 _log.warn(StringUtil.concat("parseItemsList[Config.load()]: invalid entry -> \"", valueSplit[0], "\", should be itemId,itemNumber"));
  2659.                 return null;
  2660.             }
  2661.            
  2662.             result[i] = new int[2];
  2663.             try
  2664.             {
  2665.                 result[i][0] = Integer.parseInt(valueSplit[0]);
  2666.             }
  2667.             catch (NumberFormatException e)
  2668.             {
  2669.                 _log.warn(StringUtil.concat("parseItemsList[Config.load()]: invalid itemId -> \"", valueSplit[0], "\""));
  2670.                 return null;
  2671.             }
  2672.            
  2673.             try
  2674.             {
  2675.                 result[i][1] = Integer.parseInt(valueSplit[1]);
  2676.             }
  2677.             catch (NumberFormatException e)
  2678.             {
  2679.                 _log.warn(StringUtil.concat("parseItemsList[Config.load()]: invalid item number -> \"", valueSplit[1], "\""));
  2680.                 return null;
  2681.             }
  2682.             i++;
  2683.         }
  2684.         return result;
  2685.     }
  2686.    
  2687.     public static ExProperties load(String filename)
  2688.     {
  2689.         return load(new File(filename));
  2690.     }
  2691.    
  2692.     public static ExProperties load(File file)
  2693.     {
  2694.         ExProperties result = new ExProperties();
  2695.        
  2696.         try
  2697.         {
  2698.             result.load(file);
  2699.         }
  2700.         catch (IOException e)
  2701.         {
  2702.             _log.warn("Error loading config : " + file.getName() + "!");
  2703.         }
  2704.        
  2705.         return result;
  2706.     }
  2707. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement