/* * 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.Properties; import silentium.commons.utils.StringUtil; public final class EventsConfig extends ConfigEngine { public static int ALT_OLY_START_TIME; public static int ALT_OLY_MIN; public static long ALT_OLY_CPERIOD; public static long ALT_OLY_BATTLE; public static long ALT_OLY_WPERIOD; public static long ALT_OLY_VPERIOD; public static int ALT_OLY_WAIT_TIME; public static int ALT_OLY_START_POINTS; public static int ALT_OLY_WEEKLY_POINTS; public static int ALT_OLY_MIN_MATCHES; public static int ALT_OLY_CLASSED; public static int ALT_OLY_NONCLASSED; public static int[][] ALT_OLY_CLASSED_REWARD; public static int[][] ALT_OLY_NONCLASSED_REWARD; public static int ALT_OLY_COMP_RITEM; public static int ALT_OLY_GP_PER_POINT; public static int ALT_OLY_HERO_POINTS; public static int ALT_OLY_RANK1_POINTS; public static int ALT_OLY_RANK2_POINTS; public static int ALT_OLY_RANK3_POINTS; public static int ALT_OLY_RANK4_POINTS; public static int ALT_OLY_RANK5_POINTS; public static int ALT_OLY_MAX_POINTS; public static int ALT_OLY_DIVIDER_CLASSED; public static int ALT_OLY_DIVIDER_NON_CLASSED; public static boolean ALT_OLY_ANNOUNCE_GAMES; public static boolean ALT_GAME_REQUIRE_CLAN_CASTLE; public static boolean ALT_GAME_CASTLE_DAWN; public static boolean ALT_GAME_CASTLE_DUSK; public static int ALT_FESTIVAL_MIN_PLAYER; public static int ALT_MAXIMUM_PLAYER_CONTRIB; public static long ALT_FESTIVAL_MANAGER_START; public static long ALT_FESTIVAL_LENGTH; public static long ALT_FESTIVAL_CYCLE_LENGTH; public static long ALT_FESTIVAL_FIRST_SPAWN; public static long ALT_FESTIVAL_FIRST_SWARM; public static long ALT_FESTIVAL_SECOND_SPAWN; public static long ALT_FESTIVAL_SECOND_SWARM; public static long ALT_FESTIVAL_CHEST_SPAWN; public static boolean ALT_SEVENSIGNS_LAZY_UPDATE; public static int FS_TIME_ATTACK; public static int FS_TIME_COOLDOWN; public static int FS_TIME_ENTRY; public static int FS_TIME_WARMUP; public static int FS_PARTY_MEMBER_COUNT; public static int RIFT_MIN_PARTY_SIZE; public static int RIFT_SPAWN_DELAY; public static int RIFT_MAX_JUMPS; public static int RIFT_AUTO_JUMPS_TIME_MIN; public static int RIFT_AUTO_JUMPS_TIME_MAX; public static int RIFT_ENTER_COST_RECRUIT; public static int RIFT_ENTER_COST_SOLDIER; public static int RIFT_ENTER_COST_OFFICER; public static int RIFT_ENTER_COST_CAPTAIN; public static int RIFT_ENTER_COST_COMMANDER; public static int RIFT_ENTER_COST_HERO; public static float RIFT_BOSS_ROOM_TIME_MUTIPLY; public static boolean ALLOW_WEDDING; public static int WEDDING_PRICE; public static boolean WEDDING_SAMESEX; public static boolean WEDDING_FORMALWEAR; public static int ALT_LOTTERY_PRIZE; public static int ALT_LOTTERY_TICKET_PRICE; public static float ALT_LOTTERY_5_NUMBER_RATE; public static float ALT_LOTTERY_4_NUMBER_RATE; public static float ALT_LOTTERY_3_NUMBER_RATE; public static int ALT_LOTTERY_2_AND_1_NUMBER_PRIZE; public static void load() { try (InputStream is = new FileInputStream(new File(EVENTS_FILE))) { Properties events = new Properties(); events.load(is); is.close(); ALT_OLY_START_TIME = Integer.parseInt(events.getProperty("AltOlyStartTime", "18")); ALT_OLY_MIN = Integer.parseInt(events.getProperty("AltOlyMin", "00")); ALT_OLY_CPERIOD = Long.parseLong(events.getProperty("AltOlyCPeriod", "21600000")); ALT_OLY_BATTLE = Long.parseLong(events.getProperty("AltOlyBattle", "180000")); ALT_OLY_WPERIOD = Long.parseLong(events.getProperty("AltOlyWPeriod", "604800000")); ALT_OLY_VPERIOD = Long.parseLong(events.getProperty("AltOlyVPeriod", "86400000")); ALT_OLY_WAIT_TIME = Integer.parseInt(events.getProperty("AltOlyWaitTime", "30")); ALT_OLY_START_POINTS = Integer.parseInt(events.getProperty("AltOlyStartPoints", "18")); ALT_OLY_WEEKLY_POINTS = Integer.parseInt(events.getProperty("AltOlyWeeklyPoints", "3")); ALT_OLY_MIN_MATCHES = Integer.parseInt(events.getProperty("AltOlyMinMatchesToBeClassed", "5")); ALT_OLY_CLASSED = Integer.parseInt(events.getProperty("AltOlyClassedParticipants", "5")); ALT_OLY_NONCLASSED = Integer.parseInt(events.getProperty("AltOlyNonClassedParticipants", "9")); ALT_OLY_CLASSED_REWARD = parseItemsList(events.getProperty("AltOlyClassedReward", "6651,50")); ALT_OLY_NONCLASSED_REWARD = parseItemsList(events.getProperty("AltOlyNonClassedReward", "6651,30")); ALT_OLY_COMP_RITEM = Integer.parseInt(events.getProperty("AltOlyCompRewItem", "6651")); ALT_OLY_GP_PER_POINT = Integer.parseInt(events.getProperty("AltOlyGPPerPoint", "1000")); ALT_OLY_HERO_POINTS = Integer.parseInt(events.getProperty("AltOlyHeroPoints", "300")); ALT_OLY_RANK1_POINTS = Integer.parseInt(events.getProperty("AltOlyRank1Points", "100")); ALT_OLY_RANK2_POINTS = Integer.parseInt(events.getProperty("AltOlyRank2Points", "75")); ALT_OLY_RANK3_POINTS = Integer.parseInt(events.getProperty("AltOlyRank3Points", "55")); ALT_OLY_RANK4_POINTS = Integer.parseInt(events.getProperty("AltOlyRank4Points", "40")); ALT_OLY_RANK5_POINTS = Integer.parseInt(events.getProperty("AltOlyRank5Points", "30")); ALT_OLY_MAX_POINTS = Integer.parseInt(events.getProperty("AltOlyMaxPoints", "10")); ALT_OLY_DIVIDER_CLASSED = Integer.parseInt(events.getProperty("AltOlyDividerClassed", "3")); ALT_OLY_DIVIDER_NON_CLASSED = Integer.parseInt(events.getProperty("AltOlyDividerNonClassed", "3")); ALT_OLY_ANNOUNCE_GAMES = Boolean.parseBoolean(events.getProperty("AltOlyAnnounceGames", "True")); ALT_GAME_REQUIRE_CLAN_CASTLE = Boolean.parseBoolean(events.getProperty("AltRequireClanCastle", "False")); ALT_GAME_CASTLE_DAWN = Boolean.parseBoolean(events.getProperty("AltCastleForDawn", "True")); ALT_GAME_CASTLE_DUSK = Boolean.parseBoolean(events.getProperty("AltCastleForDusk", "True")); ALT_FESTIVAL_MIN_PLAYER = Integer.parseInt(events.getProperty("AltFestivalMinPlayer", "5")); ALT_MAXIMUM_PLAYER_CONTRIB = Integer.parseInt(events.getProperty("AltMaxPlayerContrib", "1000000")); ALT_FESTIVAL_MANAGER_START = Long.parseLong(events.getProperty("AltFestivalManagerStart", "120000")); ALT_FESTIVAL_LENGTH = Long.parseLong(events.getProperty("AltFestivalLength", "1080000")); ALT_FESTIVAL_CYCLE_LENGTH = Long.parseLong(events.getProperty("AltFestivalCycleLength", "2280000")); ALT_FESTIVAL_FIRST_SPAWN = Long.parseLong(events.getProperty("AltFestivalFirstSpawn", "120000")); ALT_FESTIVAL_FIRST_SWARM = Long.parseLong(events.getProperty("AltFestivalFirstSwarm", "300000")); ALT_FESTIVAL_SECOND_SPAWN = Long.parseLong(events.getProperty("AltFestivalSecondSpawn", "540000")); ALT_FESTIVAL_SECOND_SWARM = Long.parseLong(events.getProperty("AltFestivalSecondSwarm", "720000")); ALT_FESTIVAL_CHEST_SPAWN = Long.parseLong(events.getProperty("AltFestivalChestSpawn", "900000")); ALT_SEVENSIGNS_LAZY_UPDATE = Boolean.parseBoolean(events.getProperty("AltSevenSignsLazyUpdate", "True")); FS_TIME_ATTACK = Integer.parseInt(events.getProperty("TimeOfAttack", "50")); FS_TIME_COOLDOWN = Integer.parseInt(events.getProperty("TimeOfCoolDown", "5")); FS_TIME_ENTRY = Integer.parseInt(events.getProperty("TimeOfEntry", "3")); FS_TIME_WARMUP = Integer.parseInt(events.getProperty("TimeOfWarmUp", "2")); FS_PARTY_MEMBER_COUNT = Integer.parseInt(events.getProperty("NumberOfNecessaryPartyMembers", "4")); if (FS_TIME_ATTACK <= 0) FS_TIME_ATTACK = 50; if (FS_TIME_COOLDOWN <= 0) FS_TIME_COOLDOWN = 5; if (FS_TIME_ENTRY <= 0) FS_TIME_ENTRY = 3; if (FS_TIME_WARMUP <= 0) FS_TIME_WARMUP = 2; if (FS_PARTY_MEMBER_COUNT <= 0) FS_PARTY_MEMBER_COUNT = 4; RIFT_MIN_PARTY_SIZE = Integer.parseInt(events.getProperty("RiftMinPartySize", "2")); RIFT_MAX_JUMPS = Integer.parseInt(events.getProperty("MaxRiftJumps", "4")); RIFT_SPAWN_DELAY = Integer.parseInt(events.getProperty("RiftSpawnDelay", "10000")); RIFT_AUTO_JUMPS_TIME_MIN = Integer.parseInt(events.getProperty("AutoJumpsDelayMin", "480")); RIFT_AUTO_JUMPS_TIME_MAX = Integer.parseInt(events.getProperty("AutoJumpsDelayMax", "600")); RIFT_ENTER_COST_RECRUIT = Integer.parseInt(events.getProperty("RecruitCost", "18")); RIFT_ENTER_COST_SOLDIER = Integer.parseInt(events.getProperty("SoldierCost", "21")); RIFT_ENTER_COST_OFFICER = Integer.parseInt(events.getProperty("OfficerCost", "24")); RIFT_ENTER_COST_CAPTAIN = Integer.parseInt(events.getProperty("CaptainCost", "27")); RIFT_ENTER_COST_COMMANDER = Integer.parseInt(events.getProperty("CommanderCost", "30")); RIFT_ENTER_COST_HERO = Integer.parseInt(events.getProperty("HeroCost", "33")); RIFT_BOSS_ROOM_TIME_MUTIPLY = Float.parseFloat(events.getProperty("BossRoomTimeMultiply", "1.0")); ALLOW_WEDDING = Boolean.parseBoolean(events.getProperty("AllowWedding", "False")); WEDDING_PRICE = Integer.parseInt(events.getProperty("WeddingPrice", "1000000")); WEDDING_SAMESEX = Boolean.parseBoolean(events.getProperty("WeddingAllowSameSex", "False")); WEDDING_FORMALWEAR = Boolean.parseBoolean(events.getProperty("WeddingFormalWear", "True")); ALT_LOTTERY_PRIZE = Integer.parseInt(events.getProperty("AltLotteryPrize", "50000")); ALT_LOTTERY_TICKET_PRICE = Integer.parseInt(events.getProperty("AltLotteryTicketPrice", "2000")); ALT_LOTTERY_5_NUMBER_RATE = Float.parseFloat(events.getProperty("AltLottery5NumberRate", "0.6")); ALT_LOTTERY_4_NUMBER_RATE = Float.parseFloat(events.getProperty("AltLottery4NumberRate", "0.2")); ALT_LOTTERY_3_NUMBER_RATE = Float.parseFloat(events.getProperty("AltLottery3NumberRate", "0.2")); ALT_LOTTERY_2_AND_1_NUMBER_PRIZE = Integer.parseInt(events.getProperty("AltLottery2and1NumberPrize", "200")); } catch (Exception e) { e.printStackTrace(); throw new Error("Server failed to load " + EVENTS_FILE + " file."); } } private static int[][] parseItemsList(String line) { final String[] propertySplit = line.split(";"); if (propertySplit.length == 0) return null; int i = 0; String[] valueSplit; final int[][] result = new int[propertySplit.length][]; for (String value : propertySplit) { valueSplit = value.split(","); if (valueSplit.length != 2) { log.warn(StringUtil.concat("parseItemsList[MainConfig.load()]: invalid entry -> \"", valueSplit[0], "\", should be itemId,itemNumber")); return null; } result[i] = new int[2]; try { result[i][0] = Integer.parseInt(valueSplit[0]); } catch (NumberFormatException e) { log.warn(StringUtil.concat("parseItemsList[MainConfig.load()]: invalid itemId -> \"", valueSplit[0], "\"")); return null; } try { result[i][1] = Integer.parseInt(valueSplit[1]); } catch (NumberFormatException e) { log.warn(StringUtil.concat("parseItemsList[MainConfig.load()]: invalid item number -> \"", valueSplit[1], "\"")); return null; } i++; } return result; } }