/* * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that * it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If * not, see <http://www.gnu.org/licenses/>. */ package silentium.gameserver.configs; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.Arrays; import java.util.Properties; import silentium.commons.utils.StringUtil; public final class PlayersConfig extends ConfigEngine { public static int STARTING_ADENA; public static boolean EFFECT_CANCELING; public static double HP_REGEN_MULTIPLIER; public static double MP_REGEN_MULTIPLIER; public static double CP_REGEN_MULTIPLIER; public static int PLAYER_SPAWN_PROTECTION; public static int PLAYER_FAKEDEATH_UP_PROTECTION; public static double RESPAWN_RESTORE_HP; public static boolean RESPAWN_RANDOM_ENABLED; public static int RESPAWN_RANDOM_MAX_OFFSET; public static int MAX_PVTSTORE_SLOTS_DWARF; public static int MAX_PVTSTORE_SLOTS_OTHER; public static boolean DEEPBLUE_DROP_RULES; public static boolean ALT_GAME_DELEVEL; public static int DEATH_PENALTY_CHANCE; public static int INVENTORY_MAXIMUM_NO_DWARF; public static int INVENTORY_MAXIMUM_DWARF; public static int INVENTORY_MAXIMUM_QUEST_ITEMS; public static int INVENTORY_MAXIMUM_PET; public static int MAX_ITEM_IN_PACKET; public static double ALT_WEIGHT_LIMIT; public static int WAREHOUSE_SLOTS_NO_DWARF; public static int WAREHOUSE_SLOTS_DWARF; public static int WAREHOUSE_SLOTS_CLAN; public static int FREIGHT_SLOTS; public static boolean ALT_GAME_FREIGHTS; public static int ALT_GAME_FREIGHT_PRICE; public static double ENCHANT_CHANCE_WEAPON_MAGIC; public static double ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS; public static double ENCHANT_CHANCE_WEAPON_NONMAGIC; public static double ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS; public static double ENCHANT_CHANCE_ARMOR; public static int ENCHANT_MAX_WEAPON; public static int ENCHANT_MAX_ARMOR; public static int ENCHANT_SAFE_MAX; public static int ENCHANT_SAFE_MAX_FULL; public static int AUGMENTATION_NG_SKILL_CHANCE; public static int AUGMENTATION_NG_GLOW_CHANCE; public static int AUGMENTATION_MID_SKILL_CHANCE; public static int AUGMENTATION_MID_GLOW_CHANCE; public static int AUGMENTATION_HIGH_SKILL_CHANCE; public static int AUGMENTATION_HIGH_GLOW_CHANCE; public static int AUGMENTATION_TOP_SKILL_CHANCE; public static int AUGMENTATION_TOP_GLOW_CHANCE; public static int AUGMENTATION_BASESTAT_CHANCE; public static boolean KARMA_PLAYER_CAN_BE_KILLED_IN_PZ; public static boolean KARMA_PLAYER_CAN_SHOP; public static boolean KARMA_PLAYER_CAN_USE_GK; public static boolean KARMA_PLAYER_CAN_TELEPORT; public static boolean KARMA_PLAYER_CAN_TRADE; public static boolean KARMA_PLAYER_CAN_USE_WH; public static int KARMA_MIN_KARMA; public static int KARMA_MAX_KARMA; public static int KARMA_XP_DIVIDER; public static int KARMA_LOST_BASE; public static boolean KARMA_DROP_GM; public static boolean KARMA_AWARD_PK_KILL; public static int KARMA_PK_LIMIT; public static String KARMA_NONDROPPABLE_PET_ITEMS; public static String KARMA_NONDROPPABLE_ITEMS; public static int[] KARMA_LIST_NONDROPPABLE_PET_ITEMS; public static int[] KARMA_LIST_NONDROPPABLE_ITEMS; public static int PVP_NORMAL_TIME; public static int PVP_PVP_TIME; public static String PARTY_XP_CUTOFF_METHOD; public static int PARTY_XP_CUTOFF_LEVEL; public static double PARTY_XP_CUTOFF_PERCENT; public static int ALT_PARTY_RANGE; public static int ALT_PARTY_RANGE2; public static boolean EVERYBODY_HAS_ADMIN_RIGHTS; public static int MASTERACCESS_LEVEL; public static int MASTERACCESS_NAME_COLOR; public static int MASTERACCESS_TITLE_COLOR; public static boolean GM_HERO_AURA; public static boolean GM_STARTUP_INVULNERABLE; public static boolean GM_STARTUP_INVISIBLE; public static boolean GM_STARTUP_SILENCE; public static boolean GM_STARTUP_AUTO_LIST; public static boolean PETITIONING_ALLOWED; public static int MAX_PETITIONS_PER_PLAYER; public static int MAX_PETITIONS_PENDING; public static boolean IS_CRAFTING_ENABLED; public static int DWARF_RECIPE_LIMIT; public static int COMMON_RECIPE_LIMIT; public static boolean ALT_BLACKSMITH_USE_RECIPES; public static boolean AUTO_LEARN_SKILLS; public static boolean ALT_GAME_MAGICFAILURES; public static boolean ALT_GAME_SHIELD_BLOCKS; public static int ALT_PERFECT_SHLD_BLOCK; public static boolean LIFE_CRYSTAL_NEEDED; public static boolean SP_BOOK_NEEDED; public static boolean ES_SP_BOOK_NEEDED; public static boolean DIVINE_SP_BOOK_NEEDED; public static boolean ALT_GAME_SUBCLASS_WITHOUT_QUESTS; public static boolean STORE_SKILL_COOLTIME; public static byte BUFFS_MAX_AMOUNT; public static void load() { try (InputStream is = new FileInputStream(new File(PLAYERS_FILE))) { Properties players = new Properties(); players.load(is); is.close(); STARTING_ADENA = Integer.parseInt(players.getProperty("StartingAdena", "100")); EFFECT_CANCELING = Boolean.parseBoolean(players.getProperty("CancelLesserEffect", "True")); HP_REGEN_MULTIPLIER = Double.parseDouble(players.getProperty("HpRegenMultiplier", "100")) / 100; MP_REGEN_MULTIPLIER = Double.parseDouble(players.getProperty("MpRegenMultiplier", "100")) / 100; CP_REGEN_MULTIPLIER = Double.parseDouble(players.getProperty("CpRegenMultiplier", "100")) / 100; PLAYER_SPAWN_PROTECTION = Integer.parseInt(players.getProperty("PlayerSpawnProtection", "0")); PLAYER_FAKEDEATH_UP_PROTECTION = Integer.parseInt(players.getProperty("PlayerFakeDeathUpProtection", "0")); RESPAWN_RESTORE_HP = Double.parseDouble(players.getProperty("RespawnRestoreHP", "70")) / 100; RESPAWN_RANDOM_ENABLED = Boolean.parseBoolean(players.getProperty("RespawnRandomInTown", "False")); RESPAWN_RANDOM_MAX_OFFSET = Integer.parseInt(players.getProperty("RespawnRandomMaxOffset", "50")); MAX_PVTSTORE_SLOTS_DWARF = Integer.parseInt(players.getProperty("MaxPvtStoreSlotsDwarf", "5")); MAX_PVTSTORE_SLOTS_OTHER = Integer.parseInt(players.getProperty("MaxPvtStoreSlotsOther", "4")); DEEPBLUE_DROP_RULES = Boolean.parseBoolean(players.getProperty("UseDeepBlueDropRules", "True")); ALT_GAME_DELEVEL = Boolean.parseBoolean(players.getProperty("Delevel", "True")); DEATH_PENALTY_CHANCE = Integer.parseInt(players.getProperty("DeathPenaltyChance", "20")); INVENTORY_MAXIMUM_NO_DWARF = Integer.parseInt(players.getProperty("MaximumSlotsForNoDwarf", "80")); INVENTORY_MAXIMUM_DWARF = Integer.parseInt(players.getProperty("MaximumSlotsForDwarf", "100")); INVENTORY_MAXIMUM_QUEST_ITEMS = Integer.parseInt(players.getProperty("MaximumSlotsForQuestItems", "100")); INVENTORY_MAXIMUM_PET = Integer.parseInt(players.getProperty("MaximumSlotsForPet", "12")); MAX_ITEM_IN_PACKET = Math.max(INVENTORY_MAXIMUM_NO_DWARF, INVENTORY_MAXIMUM_DWARF); ALT_WEIGHT_LIMIT = Double.parseDouble(players.getProperty("AltWeightLimit", "1")); WAREHOUSE_SLOTS_NO_DWARF = Integer.parseInt(players.getProperty("MaximumWarehouseSlotsForNoDwarf", "100")); WAREHOUSE_SLOTS_DWARF = Integer.parseInt(players.getProperty("MaximumWarehouseSlotsForDwarf", "120")); WAREHOUSE_SLOTS_CLAN = Integer.parseInt(players.getProperty("MaximumWarehouseSlotsForClan", "150")); FREIGHT_SLOTS = Integer.parseInt(players.getProperty("MaximumFreightSlots", "20")); ALT_GAME_FREIGHTS = Boolean.parseBoolean(players.getProperty("AltGameFreights", "False")); ALT_GAME_FREIGHT_PRICE = Integer.parseInt(players.getProperty("AltGameFreightPrice", "1000")); ENCHANT_CHANCE_WEAPON_MAGIC = Double.parseDouble(players.getProperty("EnchantChanceMagicWeapon", "0.4")); ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS = Double.parseDouble(players.getProperty("EnchantChanceMagicWeapon15Plus", "0.2")); ENCHANT_CHANCE_WEAPON_NONMAGIC = Double.parseDouble(players.getProperty("EnchantChanceNonMagicWeapon", "0.7")); ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS = Double.parseDouble(players.getProperty("EnchantChanceNonMagicWeapon15Plus", "0.35")); ENCHANT_CHANCE_ARMOR = Double.parseDouble(players.getProperty("EnchantChanceArmor", "0.66")); ENCHANT_MAX_WEAPON = Integer.parseInt(players.getProperty("EnchantMaxWeapon", "0")); ENCHANT_MAX_ARMOR = Integer.parseInt(players.getProperty("EnchantMaxArmor", "0")); ENCHANT_SAFE_MAX = Integer.parseInt(players.getProperty("EnchantSafeMax", "3")); ENCHANT_SAFE_MAX_FULL = Integer.parseInt(players.getProperty("EnchantSafeMaxFull", "4")); AUGMENTATION_NG_SKILL_CHANCE = Integer.parseInt(players.getProperty("AugmentationNGSkillChance", "15")); AUGMENTATION_NG_GLOW_CHANCE = Integer.parseInt(players.getProperty("AugmentationNGGlowChance", "0")); AUGMENTATION_MID_SKILL_CHANCE = Integer.parseInt(players.getProperty("AugmentationMidSkillChance", "30")); AUGMENTATION_MID_GLOW_CHANCE = Integer.parseInt(players.getProperty("AugmentationMidGlowChance", "40")); AUGMENTATION_HIGH_SKILL_CHANCE = Integer.parseInt(players.getProperty("AugmentationHighSkillChance", "45")); AUGMENTATION_HIGH_GLOW_CHANCE = Integer.parseInt(players.getProperty("AugmentationHighGlowChance", "70")); AUGMENTATION_TOP_SKILL_CHANCE = Integer.parseInt(players.getProperty("AugmentationTopSkillChance", "60")); AUGMENTATION_TOP_GLOW_CHANCE = Integer.parseInt(players.getProperty("AugmentationTopGlowChance", "100")); AUGMENTATION_BASESTAT_CHANCE = Integer.parseInt(players.getProperty("AugmentationBaseStatChance", "1")); KARMA_PLAYER_CAN_BE_KILLED_IN_PZ = Boolean.parseBoolean(players.getProperty("KarmaPlayerCanBeKilledInPeaceZone", "False")); KARMA_PLAYER_CAN_SHOP = Boolean.parseBoolean(players.getProperty("KarmaPlayerCanShop", "True")); KARMA_PLAYER_CAN_USE_GK = Boolean.parseBoolean(players.getProperty("KarmaPlayerCanUseGK", "False")); KARMA_PLAYER_CAN_TELEPORT = Boolean.parseBoolean(players.getProperty("KarmaPlayerCanTeleport", "True")); KARMA_PLAYER_CAN_TRADE = Boolean.parseBoolean(players.getProperty("KarmaPlayerCanTrade", "True")); KARMA_PLAYER_CAN_USE_WH = Boolean.parseBoolean(players.getProperty("KarmaPlayerCanUseWareHouse", "True")); KARMA_MIN_KARMA = Integer.parseInt(players.getProperty("MinKarma", "240")); KARMA_MAX_KARMA = Integer.parseInt(players.getProperty("MaxKarma", "10000")); KARMA_XP_DIVIDER = Integer.parseInt(players.getProperty("XPDivider", "260")); KARMA_LOST_BASE = Integer.parseInt(players.getProperty("BaseKarmaLost", "0")); KARMA_DROP_GM = Boolean.parseBoolean(players.getProperty("CanGMDropEquipment", "false")); KARMA_AWARD_PK_KILL = Boolean.parseBoolean(players.getProperty("AwardPKKillPVPPoint", "true")); KARMA_PK_LIMIT = Integer.parseInt(players.getProperty("MinimumPKRequiredToDrop", "5")); KARMA_NONDROPPABLE_PET_ITEMS = players.getProperty("ListOfPetItems", "2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650"); KARMA_NONDROPPABLE_ITEMS = players.getProperty("ListOfNonDroppableItemsForPK", "1147,425,1146,461,10,2368,7,6,2370,2369"); String[] array = KARMA_NONDROPPABLE_PET_ITEMS.split(","); KARMA_LIST_NONDROPPABLE_PET_ITEMS = new int[array.length]; for (int i = 0; i < array.length; i++) KARMA_LIST_NONDROPPABLE_PET_ITEMS[i] = Integer.parseInt(array[i]); array = KARMA_NONDROPPABLE_ITEMS.split(","); KARMA_LIST_NONDROPPABLE_ITEMS = new int[array.length]; for (int i = 0; i < array.length; i++) KARMA_LIST_NONDROPPABLE_ITEMS[i] = Integer.parseInt(array[i]); // sorting so binarySearch can be used later Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); PVP_NORMAL_TIME = Integer.parseInt(players.getProperty("PvPVsNormalTime", "15000")); PVP_PVP_TIME = Integer.parseInt(players.getProperty("PvPVsPvPTime", "30000")); PARTY_XP_CUTOFF_METHOD = players.getProperty("PartyXpCutoffMethod", "level"); PARTY_XP_CUTOFF_PERCENT = Double.parseDouble(players.getProperty("PartyXpCutoffPercent", "3.")); PARTY_XP_CUTOFF_LEVEL = Integer.parseInt(players.getProperty("PartyXpCutoffLevel", "20")); ALT_PARTY_RANGE = Integer.parseInt(players.getProperty("AltPartyRange", "1600")); ALT_PARTY_RANGE2 = Integer.parseInt(players.getProperty("AltPartyRange2", "1400")); EVERYBODY_HAS_ADMIN_RIGHTS = Boolean.parseBoolean(players.getProperty("EverybodyHasAdminRights", "False")); MASTERACCESS_LEVEL = Integer.parseInt(players.getProperty("MasterAccessLevel", "127")); MASTERACCESS_NAME_COLOR = Integer.decode(StringUtil.concat("0x", players.getProperty("MasterNameColor", "00FF00"))); MASTERACCESS_TITLE_COLOR = Integer.decode(StringUtil.concat("0x", players.getProperty("MasterTitleColor", "00FF00"))); GM_HERO_AURA = Boolean.parseBoolean(players.getProperty("GMHeroAura", "False")); GM_STARTUP_INVULNERABLE = Boolean.parseBoolean(players.getProperty("GMStartupInvulnerable", "True")); GM_STARTUP_INVISIBLE = Boolean.parseBoolean(players.getProperty("GMStartupInvisible", "True")); GM_STARTUP_SILENCE = Boolean.parseBoolean(players.getProperty("GMStartupSilence", "True")); GM_STARTUP_AUTO_LIST = Boolean.parseBoolean(players.getProperty("GMStartupAutoList", "True")); PETITIONING_ALLOWED = Boolean.parseBoolean(players.getProperty("PetitioningAllowed", "True")); MAX_PETITIONS_PER_PLAYER = Integer.parseInt(players.getProperty("MaxPetitionsPerPlayer", "5")); MAX_PETITIONS_PENDING = Integer.parseInt(players.getProperty("MaxPetitionsPending", "25")); IS_CRAFTING_ENABLED = Boolean.parseBoolean(players.getProperty("CraftingEnabled", "True")); DWARF_RECIPE_LIMIT = Integer.parseInt(players.getProperty("DwarfRecipeLimit", "50")); COMMON_RECIPE_LIMIT = Integer.parseInt(players.getProperty("CommonRecipeLimit", "50")); ALT_BLACKSMITH_USE_RECIPES = Boolean.parseBoolean(players.getProperty("AltBlacksmithUseRecipes", "True")); AUTO_LEARN_SKILLS = Boolean.parseBoolean(players.getProperty("AutoLearnSkills", "false")); ALT_GAME_MAGICFAILURES = Boolean.parseBoolean(players.getProperty("MagicFailures", "True")); ALT_GAME_SHIELD_BLOCKS = Boolean.parseBoolean(players.getProperty("AltShieldBlocks", "false")); ALT_PERFECT_SHLD_BLOCK = Integer.parseInt(players.getProperty("AltPerfectShieldBlockRate", "10")); LIFE_CRYSTAL_NEEDED = Boolean.parseBoolean(players.getProperty("LifeCrystalNeeded", "true")); SP_BOOK_NEEDED = Boolean.parseBoolean(players.getProperty("SpBookNeeded", "true")); ES_SP_BOOK_NEEDED = Boolean.parseBoolean(players.getProperty("EnchantSkillSpBookNeeded", "true")); DIVINE_SP_BOOK_NEEDED = Boolean.parseBoolean(players.getProperty("DivineInspirationSpBookNeeded", "true")); ALT_GAME_SUBCLASS_WITHOUT_QUESTS = Boolean.parseBoolean(players.getProperty("AltSubClassWithoutQuests", "False")); BUFFS_MAX_AMOUNT = Byte.parseByte(players.getProperty("MaxBuffsAmount", "20")); STORE_SKILL_COOLTIME = Boolean.parseBoolean(players.getProperty("StoreSkillCooltime", "true")); } catch (Exception e) { e.printStackTrace(); throw new Error("Server failed to load " + PLAYERS_FILE + " file."); } } }