From c704d4687a813f3ae5ef49a17ef8d819304fc5e9 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Wed, 31 Jul 2019 10:03:25 +0000 Subject: [PATCH] Configuration adjustments to match other branches. --- .../custom/{CustomServer.ini => Other.ini} | 0 .../dist/game/config/main/Access.ini | 26 +- .../dist/game/config/main/AltSettings.ini | 388 ----- .../dist/game/config/main/Character.ini | 301 ++++ .../dist/game/config/main/Developer.ini | 108 -- .../dist/game/config/main/General.ini | 621 ++++++++ .../dist/game/config/main/Options.ini | 195 --- .../dist/game/config/main/Other.ini | 258 --- .../config/main/{Boss.ini => RaidBoss.ini} | 53 +- .../main/{GameServer.ini => Server.ini} | 68 + .../dist/game/config/protected/Daemons.ini | 15 +- .../java/org/l2jmobius/Config.java | 1384 ++++++++--------- .../commons/util/OlympiadLogger.java | 13 - .../commons/util/object/L2ObjectHashMap.java | 22 - .../commons/util/object/L2ObjectHashSet.java | 18 - .../l2jmobius/gameserver/model/Inventory.java | 16 - .../gameserver/model/ObjectPosition.java | 10 - .../gameserver/model/WorldObject.java | 40 - .../gameserver/model/WorldRegion.java | 10 - .../model/actor/instance/ItemInstance.java | 30 - .../network/clientpackets/EnterWorld.java | 7 - .../clientpackets/ProtocolVersion.java | 6 +- 22 files changed, 1707 insertions(+), 1882 deletions(-) rename L2J_Mobius_C6_Interlude/dist/game/config/custom/{CustomServer.ini => Other.ini} (100%) delete mode 100644 L2J_Mobius_C6_Interlude/dist/game/config/main/AltSettings.ini create mode 100644 L2J_Mobius_C6_Interlude/dist/game/config/main/Character.ini delete mode 100644 L2J_Mobius_C6_Interlude/dist/game/config/main/Developer.ini create mode 100644 L2J_Mobius_C6_Interlude/dist/game/config/main/General.ini delete mode 100644 L2J_Mobius_C6_Interlude/dist/game/config/main/Options.ini delete mode 100644 L2J_Mobius_C6_Interlude/dist/game/config/main/Other.ini rename L2J_Mobius_C6_Interlude/dist/game/config/main/{Boss.ini => RaidBoss.ini} (78%) rename L2J_Mobius_C6_Interlude/dist/game/config/main/{GameServer.ini => Server.ini} (61%) diff --git a/L2J_Mobius_C6_Interlude/dist/game/config/custom/CustomServer.ini b/L2J_Mobius_C6_Interlude/dist/game/config/custom/Other.ini similarity index 100% rename from L2J_Mobius_C6_Interlude/dist/game/config/custom/CustomServer.ini rename to L2J_Mobius_C6_Interlude/dist/game/config/custom/Other.ini diff --git a/L2J_Mobius_C6_Interlude/dist/game/config/main/Access.ini b/L2J_Mobius_C6_Interlude/dist/game/config/main/Access.ini index e93352dc32..9934d46e57 100644 --- a/L2J_Mobius_C6_Interlude/dist/game/config/main/Access.ini +++ b/L2J_Mobius_C6_Interlude/dist/game/config/main/Access.ini @@ -1,10 +1,11 @@ -#============================================================# -# Access Level # -#============================================================# +# --------------------------------------------------------------------------- +# Access Level +# --------------------------------------------------------------------------- -# -------------------------------------- -# Section: Admin Rights -# -------------------------------------- + +# --------------------------------------------------------------------------- +# Admin Rights +# --------------------------------------------------------------------------- # If next switch set to true every created character will have Admin access. EverybodyHasAdminRights = False @@ -19,9 +20,10 @@ MasterAccessLevel = 1 # Default = 0 - Max. 255 UserAccessLevel = 0 -# -------------------------------------- -# Section: GM Rights -# -------------------------------------- + +# --------------------------------------------------------------------------- +# GM Rights +# --------------------------------------------------------------------------- # The way //admin panel looks can be "modern" or "classic" # (default is modern while classic provides more compatibility) GMAdminMenuStyle = modern @@ -48,11 +50,15 @@ GMStartupBuilderHide = True # Show message when GM Login and GM will not invis/silence as default ShowGMLogin = False -# Show the GM's name who made the announcement. +# Show the GMs name who made the announcement. # example: "Announce: hi [GMNAME]" # only works when you use the command //announce AnnounceGmName = False +# Use GM name when sending critical announce. +# Default: False +CritAnnounceName = False + # Earthquake around a GM that logs in GmLoginSpecialEffect = False diff --git a/L2J_Mobius_C6_Interlude/dist/game/config/main/AltSettings.ini b/L2J_Mobius_C6_Interlude/dist/game/config/main/AltSettings.ini deleted file mode 100644 index 56e5086300..0000000000 --- a/L2J_Mobius_C6_Interlude/dist/game/config/main/AltSettings.ini +++ /dev/null @@ -1,388 +0,0 @@ -#==============================================================# -# AltSettings Properties # -#==============================================================# - -# ------------------------ -# Server Config -# ------------------------ -# AutoLoot enable. True to enable, False to disable -AutoLoot = False - -# If False herbs will drop on ground even if AutoLoot is enabled -AutoLootHerbs = False - -# Auto loot from Raid Boss's drop -AutoLootBoss = False - -# AutoLearnSkills: True to enable, False to disable -AutoLearnSkills = False - -# AutoLearn DivineInspiration: True to enable, False to disable -AutoLearnDivineInspiration = False - -# When you made damage to a mob and are inside this range, you will be considered as player to reward. -# Checks for party range to mob to calculate rewards(exp, items). -# Default: 1500 -AltPartyRange = 1500 - -# Weight Limit multiplier - default 1 -# If >1 - Weight Limit Double -AltWeightLimit = 1 - -# If XP loss (and deleveling) is enabled, default is 'true' -Delevel = True - -# If disabled, magic dmg has always 100% chance of success, default is 'true' -MagicFailures = True - -# Alternative cancel of attack (bow, cast, all) -AltGameCancelByHit = cast - -# Alternative rules for shields - if they block, the damage is powerAtk-shieldDef, -# otherwise it's powerAttack / (shieldDef + powerDef) -AltShieldBlocks = False - -# Alternative Rate Value for Perfect Shield Block Rate. -AltPerfectShieldBlockRate = 5 - -# Alternative AltGameMobAttackAI, like C1 -AltGameMobAttackAI = False - -# Alternative mob behavior in peace zones -# Default = True; Set to False to prevent mobs from auto-agro against players in peace zones -AltMobAgroInPeaceZone = True - -# Alternative Freight mode. If true, freights can be withdrawed from any place. -# Also, possibility to change Freight price (in adena) for each item slot in freight. -# NOTE: AltGameFreightPrice WILL NOT change the value shown to the player, but the -# player will actually get charged for the value set in here. -AltGameFreights = True -AltGameFreightPrice = 1000 - -# Alternative Xp/Sp rewards, if not 0, then calculated as 2^((mob.level-player.level) / coef), -# A few examples for "AltGameExponentXp = 5." and "AltGameExponentSp = 3." -# diff = 0 (player and mob has the same level), XP bonus rate = 1, SP bonus rate = 1 -# diff = 3 (mob is 3 levels above), XP bonus rate = 1.52, SP bonus rate = 2 -# diff = 5 (mob is 5 levels above), XP bonus rate = 2, SP bonus rate = 3.17 -# diff = -8 (mob is 8 levels below), XP bonus rate = 0.4, SP bonus rate = 0.16 -AltGameExponentXp = 0 -AltGameExponentSp = 0 - -# Use tiredness (instead of combat points) -AltGameTiredness = False - -# Allow free teleportation around the world. -AltFreeTeleporting = False - -# Set true for disallow recommend character twice or more a day -AltRecommend = False - -# Alternative Max Recommendation Number -AltMaxRecommendationNumber = 255 - -# ----------------------- -# Class Master -# ----------------------- -# Allow Change Class with ClassMaster -AllowClassMasters = False -# Allow Upgrade Strider with ClassMaster -AllowClassMastersStriderUpdate = False - -# Allow to define which class is allowed to be assigned through class master -AllowClassMastersFirstClass = True -AllowClassMastersSecondClass = True -AllowClassMastersThirdClass = True - -# Config for special Class Master npc that can change players occupation -# If you need change occupation only use quest then set this to False (Default) -# Syntax: occupation number;[required item id(count)],[],...;[reward item id(count)],[],...;occupation number... -# Examples: -# -# ConfigClassMaster = 1;[57(100000)];[];2;[57(1000000)];[];3;[57(10000000)],[5575(1000000)];[6622(1)] -# 1st occupation change for 100.000 Adena (item id 57) -# 2nd occupation change for 1.000.0000 Adena (item id 57) -# 3rd occupation change for 10.000.0000 Adena (item id 57) and 1.000.000 Ancient Adena (item id 5575) -# On 3rd occupation change player will be rewarded with 1 Book of Giants (item id 6622) -# -# ConfigClassMaster = 1;[];[];2;[];[];3;[];[] -# 1st, 2nd, 3rd occupation change for free, without rewards -ConfigClassMaster = 1;[];[];2;[];[];3;[];[] - -# Class Manager Handled Remotely at Level 20/40/76 -AllowRemoteClassMasters = True - -# Life crystal needed to learn clan skills -LifeCrystalNeeded = True - -# Spell Books needed to learn skills -SpBookNeeded = True -# Books needed to enchant skills -EnchantSkillSpBookNeeded = True -# Books needed to Divine Inspiration -DivineInspirationSpBookNeeded = True - -# Alternative skill learn rules: -# - all classes can learn all skills -# - skills of another class costs x2 SP -# - skills of another race costs x2 SP -# - skills of fighters/mages costs x3 SP -AltGameSkillLearn = False - -# Allow player sub-class addition without checking for unique quest items. -AltSubClassWithoutQuests = False - -# Restore Buffs On Subclass Change. -# IMPORTANT: It's better put it False to avoid exploit -AltRestoreEffectOnSub = False - -# ---------------------- -# Buffs Config -# ---------------------- -# Maximum number of buffs (default = 20 + 4 Divine Inspiration in C5) -MaxBuffAmount = 20 -# Maximum number of debuffs -MaxDebuffAmount = 6 - -# ----------------------- -# Clans Config -# ----------------------- -# Number of days you have to wait before : -# - joining another clan -DaysBeforeJoinAClan = 1 -# - creating a new clan -DaysBeforeCreateAClan = 10 -# Number of days it takes to dissolve a clan -DaysToPassToDissolveAClan = 7 -# Number of days before joining a new alliance when clan voluntarily leave an alliance -DaysBeforeJoinAllyWhenLeaved = 1 -# Number of days before joining a new alliance when clan was dismissed from an alliance -DaysBeforeJoinAllyWhenDismissed = 1 -# Number of days before accepting a new clan for alliance when clan was dismissed from an alliance -DaysBeforeAcceptNewClanWhenDismissed = 1 -# Number of days before creating a new alliance when dissolved an alliance -DaysBeforeCreateNewAllyWhenDissolved = 10 - -# Maximum number of clans in ally -AltMaxNumOfClansInAlly = 3 - -# Number of members needed to request a clan war -AltClanMembersForWar = 15 - -# All new characters of the same account are newbies, not only first one -AltNewCharAlwaysIsNewbie = True - -# Privilege browse warehouse enables at the same time also withdraw from warehouse! -AltMembersCanWithdrawFromClanWH = False - -# Remove Castle circlets after a clan lose its castle or a player leaves a clan? - default true -RemoveCastleCirclets = True - -# Reputation score gained per clan member listed as top raid killers. -1stRaidRankingPoints = 1250 -2ndRaidRankingPoints = 900 -3rdRaidRankingPoints = 700 -4thRaidRankingPoints = 600 -5thRaidRankingPoints = 450 -6thRaidRankingPoints = 350 -7thRaidRankingPoints = 300 -8thRaidRankingPoints = 200 -9thRaidRankingPoints = 150 -10thRaidRankingPoints = 100 -UpTo50thRaidRankingPoints = 25 -UpTo100thRaidRankingPoints = 12 - -# ------------------------ -# Manor Config -# ------------------------ -# Manor Refresh Time in Military hours Default 8pm (20) -AltManorRefreshTime = 20 - -# Manor Refresh Time for Min's, Default 00 so at the start of the hour. -AltManorRefreshMin = 00 - -# Manor Next Period Approve Time in Military hours Default 6am -AltManorApproveTime = 6 - -# Manor Next Period Approve Time for Min's, Default 00 so at the start of the hour. -AltManorApproveMin = 00 - -# Manor Maintenance time, Default 6 minutes. -AltManorMaintenancePeriod = 360000 - -# Manor Save Type. 1-Save data into db after every action; -# Default false -AltManorSaveAllActions = True - -# Manor Save Period (used only if AltManorSaveAllActions = False) Default very 2 hours -AltManorSavePeriodRate = 2 - -# ------------------------- -# Lottery Config -# ------------------------- -# Initial Lottery prize -AltLotteryPrize = 50000 - -# Lottery Ticket Price -AltLotteryTicketPrice = 2000 - -# What part of Jackpot amount should receive characters who pick 5 wining numbers -AltLottery5NumberRate = 0.6 - -# What part of Jackpot amount should receive characters who pick 4 wining numbers -AltLottery4NumberRate = 0.2 - -# What part of Jackpot amount should receive characters who pick 3 wining numbers -AltLottery3NumberRate = 0.2 - -# How much adena receive characters who pick two or less of the winning number -AltLottery2and1NumberPrize = 200 - - -# ------------------------------------- -# Fishing Tournament -# ------------------------------------- -# Enable or disable the Fishing Tournament system -AltFishChampionshipEnabled = True - -# Item Id used as reward -AltFishChampionshipRewardItemId = 57 - -# Item count used as reward (for the 5 first winners) -AltFishChampionshipReward1 = 800000 -AltFishChampionshipReward2 = 500000 -AltFishChampionshipReward3 = 300000 -AltFishChampionshipReward4 = 200000 -AltFishChampionshipReward5 = 100000 - - -# ------------------------------------- -# Dimension Rift Config -# ------------------------------------- -# Minimal party size to enter rift. Min = 2, Max = 9. -# If in rift party will become smaller all members will be teleported back -RiftMinPartySize = 5 - -# Number of maximum jumps between rooms allowed, after this time party will be teleported back -MaxRiftJumps = 4 - -# Time in ms the party has to wait until the mobs spawn when entering a room. C4 retail: 10s -RiftSpawnDelay = 10000 - -# Time between automatic jumps in seconds -AutoJumpsDelayMin = 480 -AutoJumpsDelayMax = 600 - -# Time Multiplier for stay in the boss room -BossRoomTimeMultiply = 1.5 - -# Cost in dimension fragments to enter the rift, each party member must own this amount -RecruitCost = 18 -SoldierCost = 21 -OfficerCost = 24 -CaptainCost = 27 -CommanderCost = 30 -HeroCost = 33 - -# On / off infinite nipples (SS/BSS) -DontDestroySS = False - -# Maximum level players who can not be attacked -MaxLevelNewbie = 20 - -# When char lost newbie status > = value -MaxLevelNewbieStatus = 40 - -# NPC respawn time (default 180 seconds) -StandardRespawnDelay = 180 - -# Disable tutorial on new player enter into Game -# Please remember its sometimes important to novice players -# Default: False -DisableTutorial = False - -# ExpertisePenalty, to disable grade penalty -# False: Players can use equip S grade at level 1. -# True: Players can't use equip S grade at level 1. -ExpertisePenalty = True - -# MasteryPenalty, to disable Heavy expertise. -# True: Players like dagger or archer can't use Heavy armor. -MasteryPenalty = False -# MasteryPenalty starting level. -# Default from 20 -LevelToGetPenalty = 20 - -# MasteryWeaponPenalty, to disable weapons expertise. -# True: Players that have not weapon mastery cannot use that weapon type. -MasteryWeaponPenality = False -# MasteryWeaponPenality starting level. -# Default from 20 -LevelToGetWeaponPenalty = 20 - -#Augmentation Active skills start time: time in seconds that the -#players need to wait until an active augment skill is available -#once the augmented weapon is equipped. After the first time wait, -#the players will be able to use the skill with correct reuse time -#xml defined. -AugmStartReuseTime = 0 - - -# ---------------------------------------------- # -# Npc # -# ---------------------------------------------- # -# Npc Attackable -# True: You can attack Npcs -# False: Npc/Mobs don't take damages -NpcAttackable = True - -# Npc List Invul eg. 51,90,... -InvulNpcList = 93000 - -# If True ActiveChar will not be able to Attack the Listed Npc Types. -DisableAttackToNpcs = False - -# List of NPC's that allow casting skills on them -# Any other type will not allow casting -AllowedNPCTypes = GrandBoss,Chest,FestivalMonster,Minion,Monster,Pet,RaidBoss,SiegeGuard,SiegeNpc,ControlTower,Artefact,PenaltyMonster,FeedableBeast,SiegeFlag,RiftInvader,Guard,GuardNoHTML - -# Allows Players to Shift-click Mobs and view their Stats and Droplist -AltGameViewNpc = False - -# Custom Private store SELL/BUY -# For example you can use private store with Event Medal or Gold Bar -# Default: False (Adena) -SellByItem = False -# Custom Item ID -SellItem = 6392 - -# Number of allowed Subclasses -AllowedSubclass = 3 - -# Starting level for subclasses. -# Default: 40 -BaseSubclassLevel = 40 - -# Maximum subclass level. 81 is liv 80 99% -# Default: 81 -MaxSubclassLevel = 81 - -# Monster stats (PAtk,Pdef,etc..) based just on Database Values -# and without STR,WIT,CON,MEN,INT,DEX influences. -# ATTENTION: enabling this option, monster instances could be simple to kill, -# check your database to increase their stats.. -# -# True: All Monster Instances haven't the Bonus of Stats. (Easy to kill) -# False: All Monster Instances have the Bonus of Stats. (Hard to kill) -# We got the correct value on database, so disable it. -# Default: True -AltMobsStatsBonus = True -# Monster stats (PAtk,Pdef,etc..) based just on Database Values -# and without STR,WIT,CON,MEN,INT,DEX influences. -# ATTENTION: enabling this option, monster instances could be simple to kill, -# check your database to increase their stats.. -# -# True: All Monster Instances haven't the Bonus of Stats. (Easy to kill) -# False: All Monster Instances have the Bonus of Stats. (Hard to kill) -# We got the correct value on database, so disable it. -# Default: True -AltPetsStatsBonus = True \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/dist/game/config/main/Character.ini b/L2J_Mobius_C6_Interlude/dist/game/config/main/Character.ini new file mode 100644 index 0000000000..7b20d19f4d --- /dev/null +++ b/L2J_Mobius_C6_Interlude/dist/game/config/main/Character.ini @@ -0,0 +1,301 @@ +# --------------------------------------------------------------------------- +# Character Settings +# --------------------------------------------------------------------------- + +# AutoLoot enable. True to enable, False to disable +AutoLoot = False + +# If False herbs will drop on ground even if AutoLoot is enabled +AutoLootHerbs = False + +# Auto loot from Raid Boss's drop +AutoLootBoss = False + +# AutoLearnSkills: True to enable, False to disable +AutoLearnSkills = False + +# AutoLearn DivineInspiration: True to enable, False to disable +AutoLearnDivineInspiration = False + +# Life crystal needed to learn clan skills +LifeCrystalNeeded = True + +# Spell Books needed to learn skills +SpBookNeeded = True +# Books needed to enchant skills +EnchantSkillSpBookNeeded = True +# Books needed to Divine Inspiration +DivineInspirationSpBookNeeded = True + +# Alternative skill learn rules: +# - all classes can learn all skills +# - skills of another class costs x2 SP +# - skills of another race costs x2 SP +# - skills of fighters/mages costs x3 SP +AltGameSkillLearn = False + +# Number of allowed Subclasses +AllowedSubclass = 3 + +# Starting level for subclasses. +# Default: 40 +BaseSubclassLevel = 40 + +# Maximum subclass level. 81 is level 80 99% +# Default: 81 +MaxSubclassLevel = 81 + +# Allow player sub-class addition without checking for unique quest items. +AltSubClassWithoutQuests = False + +# Restore Buffs On Subclass Change. +# IMPORTANT: It's better put it False to avoid exploit +AltRestoreEffectOnSub = False + +# When you made damage to a mob and are inside this range, you will be considered as player to reward. +# Checks for party range to mob to calculate rewards(exp, items). +# Default: 1500 +AltPartyRange = 1500 + +# Weight Limit multiplier - default 1 +# If >1 - Weight Limit Double +AltWeightLimit = 1 + +# If XP loss (and deleveling) is enabled, default is 'true' +Delevel = True + +# If disabled, magic dmg has always 100% chance of success, default is 'true' +MagicFailures = True + +# Alternative cancel of attack (bow, cast, all) +AltGameCancelByHit = cast + +# Alternative rules for shields - if they block, the damage is powerAtk-shieldDef, +# otherwise it's powerAttack / (shieldDef + powerDef) +AltShieldBlocks = False + +# Alternative Rate Value for Perfect Shield Block Rate. +AltPerfectShieldBlockRate = 5 + +# Alternative AltGameMobAttackAI, like C1 +AltGameMobAttackAI = False + +# Alternative mob behavior in peace zones +# Default = True; Set to False to prevent mobs from auto-agro against players in peace zones +AltMobAgroInPeaceZone = True + +# Alternative Freight mode. If true, freights can be withdrawed from any place. +# Also, possibility to change Freight price (in adena) for each item slot in freight. +# NOTE: AltGameFreightPrice WILL NOT change the value shown to the player, but the +# player will actually get charged for the value set in here. +AltGameFreights = True +AltGameFreightPrice = 1000 + +# Alternative Xp/Sp rewards, if not 0, then calculated as 2^((mob.level-player.level) / coef), +# A few examples for "AltGameExponentXp = 5." and "AltGameExponentSp = 3." +# diff = 0 (player and mob has the same level), XP bonus rate = 1, SP bonus rate = 1 +# diff = 3 (mob is 3 levels above), XP bonus rate = 1.52, SP bonus rate = 2 +# diff = 5 (mob is 5 levels above), XP bonus rate = 2, SP bonus rate = 3.17 +# diff = -8 (mob is 8 levels below), XP bonus rate = 0.4, SP bonus rate = 0.16 +AltGameExponentXp = 0 +AltGameExponentSp = 0 + +# Use tiredness (instead of combat points) +AltGameTiredness = False + +# Allow free teleportation around the world. +AltFreeTeleporting = False + +# Set true for disallow recommend character twice or more a day +AltRecommend = False + +# Alternative Max Recommendation Number +AltMaxRecommendationNumber = 255 + +# Maximum number of chars per account - Default 7 (0 = unlimited [7 is the client limit]) +CharMaxNumber = 7 + +# Maximum level players who can not be attacked +MaxLevelNewbie = 20 + +# When char lost newbie status > = value +MaxLevelNewbieStatus = 40 + +# Disable tutorial on new player enter into Game +# Please remember its sometimes important to novice players +# Default: False +DisableTutorial = False + +# Amount of adena/AA that a new character is given +StartingAdena = 0 +StartingAncientAdena = 0 + +# Enable this if you want the below configuration to work. +# Default: False +CustomStarterItemsEnabled = False +# Starting itens for fighter's classes +StartingCustomItemsFighter = 57,1000; +# Starting itens for mage's classes +StartingCustomItemsMage = 57,1000; + +# Inventory space limits +# All race without dwarf +MaximumSlotsForNoDwarf = 80 +# Dwarf race +MaximumSlotsForDwarf = 100 +# GM char +MaximumSlotsForGMPlayer = 250 + +# Warehouse space limits (Must be < 300 for prevent client crash) +# Dwarfs will get bonus from lvl 60 +MaximumWarehouseSlotsForDwarf = 120 +MaximumWarehouseSlotsForNoDwarf = 100 +MaximumWarehouseSlotsForClan = 200 +MaximumFreightSlots = 20 + +# The maximum number of slots for the purchase / sale (for dwarves and other races) +# By default, dwarf 5 slots, the other 4 races +MaxPvtStoreSlotsDwarf = 5 +MaxPvtStoreSlotsOther = 4 + +# % regeneration of normal regeneration speed +HpRegenMultiplier = 100 +MpRegenMultiplier = 100 +CpRegenMultiplier = 100 + +# Enable keyboard movement. +# Retail: True +KeyboardMovement = True + +# Unstuck interval, seconds, default is 300 sec. +UnstuckInterval = 300 + +# Player Protection on login in seconds, 0 for disabled +PlayerSpawnProtection = 0 + +# Player Protection after teleporting, 0 for disabled +PlayerTeleportProtection = 0 + +# Player Protection from (agro) mobs after getting up from fake death; in seconds, 0 for disabled +PlayerFakeDeathUpProtection = 0 + +# If True, the following deep blue mobs' drop penalties will be applied: +# - When player's level is 9 times greater than mob's level, drops got divided by 3 +# - After 9 lvl's of difference between player and deep blue mobs, drop chance is +# lowered by 9% each lvl that difference increases. (9lvls diff = -9%; 10lvls diff = -18%; ...) +# NOTE1: These rules are applied to both normal and sweep drops +# NOTE2: These rules ignores the server's rate when drop is of adena type (Complies with retail server) +UseDeepBlueDropRules = True + +# PARTY XP DISTRIBUTION +# The first option can be set to auto, percentage, level, none. +# When is "auto" member of the party receives less Exp / SP, where its level is low +# If the party received a bonus for him (30% for 2 members of the party) +# In this case, he will not get Exp / SP of the party, and will not receive a bonus party +# Not used quite too high values of the parameter "percentage"! +# Not used quite too low values of the parameter "level"! +# If you do not want to be the distribution of XP for the members of the Party +# Just put "none". Default:, 3.0, 30 +PartyXpCutoffMethod = auto +PartyXpCutoffPercent = 3.0 +PartyXpCutoffLevel = 30 + +# Levels restore HP, MP, and CP after death +# Values are specified in percentage +RespawnRestoreCP = 70 +RespawnRestoreHP = 70 +RespawnRestoreMP = 70 + +# Allow random regeneration in cities, indicating the maximum displacement +# From the main origin. +RespawnRandomInTown = True +RespawnRandomMaxOffset = 20 + +# Allow player to send petition? +PetitioningAllowed = True +# The number of petitions per session +MaxPetitionsPerPlayer = 5 +# The number of petitions, which may consider GM +MaxPetitionsPending = 25 + +# Chance to get Death Penalty +DeathPenaltyChance = 20 + +# If True, when effects of the same stack group are used, lesser +# effects will be canceled if stronger effects are used. New effects +# that are added will be canceled if they are of lesser priority to the old one. +# If False, they will not be canceled, and it will switch to them after the +# stronger one runs out, if the lesser one is still in effect. +CancelLesserEffect = True + +# Keep the effects buffs and debuff when you exit the game +StoreSkillCooltime = True + + +# --------------------------------------------------------------------------- +# Buffs +# --------------------------------------------------------------------------- +# Maximum number of buffs (default = 20 + 4 Divine Inspiration in C5) +MaxBuffAmount = 20 +# Maximum number of debuffs +MaxDebuffAmount = 6 + + +# -------------------------------------- +# Alternative time buffs +# -------------------------------------- +# When the reads, buff, and their duration. +# Default: False +EnableModifySkillDuration = False +# Format: id_skill time; id_skill2, time2 ;.... +# Example: +#SkillDurationList = 264,3660;265,3660;266,3660;267,3660;268,3660;\ +#269,3660;270,3660;304,3660;305,3660;306,3660;308,3660;349,3660;\ +#363,3660;364,3660;529,3660;271,3660;272,3660;273,3660;274,3660;\ +#275,3660;276,3660;277,3660;307,3660;309,3660;310,3660;311,3660;\ +#305,3660;366,3660;530,3660;365,3660;\ +#1086,3660;1240,3660;1242,3660;1243,3660;1388,3660;1389,3660;336,3660;\ +#1035,3660;1043,3660;1044,3660;1062,3660;1268,3660;1040,3660;1393,3660;\ +#1077,3660;1078,3660;1085,3660;1204,3660;1036,3660;1045,3660;1048,3660;\ +#1007,3660;1006,3660;1009,3660;1251,3660;1252,3660;1253,3660;1307,3660;\ +#1284,3660;1308,3660;1309,3660;1310,3660;1390,3660;1391,3660;1362,3660;\ +#1303,3660;1087,3660;1259,3660;1059,3660;1311,3660;1033,3660;1002,3660;\ +#1068,3660;1397,3660;1032,3660;1189,3660;1191,3660;1182,3660;1365,3660;\ +#1010,3660;1282,3660;1004,3660;1008,3660;1249,3660;1250,3660;1260,3660;\ +#1261,3660;1364,3660;1259,3660;1073,3660;1257,3660;1304,3660;1460,3660;\ +#1353,3660;1354,3660;1003,3660;1005,3660;\ +#1352,3660;1442,3660;1392,3660;\ +#1355,3660;1356,3660;1357,3660;1363,3660;1461,3660;1413,3660;1414,3660 +SkillDurationList = + + +# --------------------------------------------------------------------------- +# Class Master +# --------------------------------------------------------------------------- +# Allow Change Class with ClassMaster +AllowClassMasters = False +# Allow Upgrade Strider with ClassMaster +AllowClassMastersStriderUpdate = False + +# Allow to define which class is allowed to be assigned through class master +AllowClassMastersFirstClass = True +AllowClassMastersSecondClass = True +AllowClassMastersThirdClass = True + +# Config for special Class Master npc that can change players occupation +# If you need change occupation only use quest then set this to False (Default) +# Syntax: occupation number;[required item id(count)],[],...;[reward item id(count)],[],...;occupation number... +# Examples: +# +# ConfigClassMaster = 1;[57(100000)];[];2;[57(1000000)];[];3;[57(10000000)],[5575(1000000)];[6622(1)] +# 1st occupation change for 100.000 Adena (item id 57) +# 2nd occupation change for 1.000.0000 Adena (item id 57) +# 3rd occupation change for 10.000.0000 Adena (item id 57) and 1.000.000 Ancient Adena (item id 5575) +# On 3rd occupation change player will be rewarded with 1 Book of Giants (item id 6622) +# +# ConfigClassMaster = 1;[];[];2;[];[];3;[];[] +# 1st, 2nd, 3rd occupation change for free, without rewards +ConfigClassMaster = 1;[];[];2;[];[];3;[];[] + +# Class Manager Handled Remotely at Level 20/40/76 +AllowRemoteClassMasters = True diff --git a/L2J_Mobius_C6_Interlude/dist/game/config/main/Developer.ini b/L2J_Mobius_C6_Interlude/dist/game/config/main/Developer.ini deleted file mode 100644 index 063fe010fd..0000000000 --- a/L2J_Mobius_C6_Interlude/dist/game/config/main/Developer.ini +++ /dev/null @@ -1,108 +0,0 @@ -#============================================================# -# Dev Properties # -#============================================================# - -# BETA SERVER: Use this config for better testing during your BETA -# All players on login (also no GM char) will got Gm Speed 4 for better testing. -BetaServer = False - -#--------------------------------------------- -# Debug & Developer Config -#--------------------------------------------- -# Don't load quests -AltDevNoQuests = False - -# Don't load spawntable -AltDevNoSpawns = False - -# Don't load Script's -AltDevNoScript = False - -# Don't load RaidBoss -AltDevNoRB = False - -#------------------------------------------- -# Additional server settings -#------------------------------------------- -Assert = False - -# if true the server will be a test server (listed by test server clients only) -TestServer = False - -# Setting for serverList -# Displays [] in front of server name -ServerListBrackets = False - -# Displays a clock next to the server name -ServerListClock = False - -# If true, the server will be set as GM only -ServerGMOnly = False - -# Accept Geoeditor Conection (Default = False) -AcceptGeoeditorConn = False -# IP Geoeditor -GeoEditorHost = 127.0.0.1 -# Port GeoEditor -GeoEditorPort = 2109 - -# Define character name template -# Example to use only : CnameTemplate = [A-Z][a-z]{3,3}[A-Za-z0-9]* -# will allow names with first capital letter, next three small letters, -# and any (capital or not) letter or number, like ZbigN1eW -# Most rational to have CnameTemplate = [A-Z][a-z]* -# meaning names only of letters with first one capital, like Zbigniew -# Default .* - any namy of any symbols -CnameTemplate = .* -PetNameTemplate = .* -ClanNameTemplate = .* -AllyNameTemplate = .* - -# Maximum number of chars per account - Default 7 (0 = unlimited [7 is the client limit]) -CharMaxNumber = 7 - -# Minimum and maximum protocol revision that server allow to connect. -# You must keep MinProtocolRevision <= MaxProtocolRevision. -# Retail 740 - 746 -MinProtocolRevision = 740 -MaxProtocolRevision = 746 - -#------------------------------ -# Logging features -#------------------------------ -# Log GM actions -GMAudit = True - -# Logging ChatWindow -LogChat = False - -# Logging Item handling (Trades,Drops,Pickups,Actions) -# NOTE: This can be very space consuming if enabled for all items. -LogItems = False - -# --------------------------------------------------------------------------- -# Thread Configuration -# --------------------------------------------------------------------------- -# Specifies how many threads will be in the scheduled pool. -# Default: 40 -ScheduledThreadPoolCount = 40 - -# Specifies how many threads will be in the single instant pool. -# Default: 20 -InstantThreadPoolCount = 20 - -# This is the server id that the gameserver will request (i.e. 1 is Bartz) -RequestServerID = 1 - -# If set to true, the login will give an other id to the server if the requested id is already reserved -AcceptAlternateID = True - -# Define how many players are allowed to play simultaneously on your server. -MaximumOnlineUsers = 2000 - -# Set the html cache's lazy loading True or False -# (Load html's into cache only on first time requested) -LazyCache = True - -# Interval in ms to check for deadlocks, 0 to disable -DeadLockCheck = 0 diff --git a/L2J_Mobius_C6_Interlude/dist/game/config/main/General.ini b/L2J_Mobius_C6_Interlude/dist/game/config/main/General.ini new file mode 100644 index 0000000000..e1828d602f --- /dev/null +++ b/L2J_Mobius_C6_Interlude/dist/game/config/main/General.ini @@ -0,0 +1,621 @@ +# --------------------------------------------------------------------------- +# General Server Settings +# --------------------------------------------------------------------------- + +# --------------------------------------------------------------------------- +# Debug +# --------------------------------------------------------------------------- +# Don't load quests +AltDevNoQuests = False + +# Don't load spawntable +AltDevNoSpawns = False + +# Don't load Script's +AltDevNoScript = False + +# Don't load RaidBoss +AltDevNoRB = False + + +# --------------------------------------------------------------------------- +# Logging +# --------------------------------------------------------------------------- +# Log GM actions +GMAudit = True + +# Logging ChatWindow +LogChat = False + +# Logging Item handling (Trades,Drops,Pickups,Actions) +# NOTE: This can be very space consuming if enabled for all items. +LogItems = False + + +# --------------------------------------------------------------------------- +# Server +# --------------------------------------------------------------------------- + +# Set the html cache's lazy loading True or False +# (Load html's into cache only on first time requested) +LazyCache = True + +# If true the server will be a test server (listed by test server clients only) +TestServer = False + +# If true, the server will be set as GM only +ServerGMOnly = False + +# Accept Geoeditor Conection (Default = False) +AcceptGeoeditorConn = False +# IP Geoeditor +GeoEditorHost = 127.0.0.1 +# Port GeoEditor +GeoEditorPort = 2109 + + +# --------------------------------------------------------------------------- +# Clans +# --------------------------------------------------------------------------- +# Number of days you have to wait before : +# - joining another clan +DaysBeforeJoinAClan = 1 +# - creating a new clan +DaysBeforeCreateAClan = 10 +# Number of days it takes to dissolve a clan +DaysToPassToDissolveAClan = 7 +# Number of days before joining a new alliance when clan voluntarily leave an alliance +DaysBeforeJoinAllyWhenLeaved = 1 +# Number of days before joining a new alliance when clan was dismissed from an alliance +DaysBeforeJoinAllyWhenDismissed = 1 +# Number of days before accepting a new clan for alliance when clan was dismissed from an alliance +DaysBeforeAcceptNewClanWhenDismissed = 1 +# Number of days before creating a new alliance when dissolved an alliance +DaysBeforeCreateNewAllyWhenDissolved = 10 + +# Maximum number of clans in ally +AltMaxNumOfClansInAlly = 3 + +# Number of members needed to request a clan war +AltClanMembersForWar = 15 + +# All new characters of the same account are newbies, not only first one +AltNewCharAlwaysIsNewbie = True + +# Privilege browse warehouse enables at the same time also withdraw from warehouse! +AltMembersCanWithdrawFromClanWH = False + +# Remove Castle circlets after a clan lose its castle or a player leaves a clan? - default true +RemoveCastleCirclets = True + +# Reputation score gained per clan member listed as top raid killers. +1stRaidRankingPoints = 1250 +2ndRaidRankingPoints = 900 +3rdRaidRankingPoints = 700 +4thRaidRankingPoints = 600 +5thRaidRankingPoints = 450 +6thRaidRankingPoints = 350 +7thRaidRankingPoints = 300 +8thRaidRankingPoints = 200 +9thRaidRankingPoints = 150 +10thRaidRankingPoints = 100 +UpTo50thRaidRankingPoints = 25 +UpTo100thRaidRankingPoints = 12 + + +# --------------------------------------------------------------------------- +# Manor +# --------------------------------------------------------------------------- +# Manor Refresh Time in Military hours Default 8pm (20) +AltManorRefreshTime = 20 + +# Manor Refresh Time for Min's, Default 00 so at the start of the hour. +AltManorRefreshMin = 00 + +# Manor Next Period Approve Time in Military hours Default 6am +AltManorApproveTime = 6 + +# Manor Next Period Approve Time for Min's, Default 00 so at the start of the hour. +AltManorApproveMin = 00 + +# Manor Maintenance time, Default 6 minutes. +AltManorMaintenancePeriod = 360000 + +# Manor Save Type. 1-Save data into db after every action; +# Default false +AltManorSaveAllActions = True + +# Manor Save Period (used only if AltManorSaveAllActions = False) Default very 2 hours +AltManorSavePeriodRate = 2 + + +# --------------------------------------------------------------------------- +# Lottery +# --------------------------------------------------------------------------- +# Initial Lottery prize +AltLotteryPrize = 50000 + +# Lottery Ticket Price +AltLotteryTicketPrice = 2000 + +# What part of Jackpot amount should receive characters who pick 5 wining numbers +AltLottery5NumberRate = 0.6 + +# What part of Jackpot amount should receive characters who pick 4 wining numbers +AltLottery4NumberRate = 0.2 + +# What part of Jackpot amount should receive characters who pick 3 wining numbers +AltLottery3NumberRate = 0.2 + +# How much adena receive characters who pick two or less of the winning number +AltLottery2and1NumberPrize = 200 + + +# --------------------------------------------------------------------------- +# Fishing Tournament +# --------------------------------------------------------------------------- +# Enable or disable the Fishing Tournament system +AltFishChampionshipEnabled = True + +# Item Id used as reward +AltFishChampionshipRewardItemId = 57 + +# Item count used as reward (for the 5 first winners) +AltFishChampionshipReward1 = 800000 +AltFishChampionshipReward2 = 500000 +AltFishChampionshipReward3 = 300000 +AltFishChampionshipReward4 = 200000 +AltFishChampionshipReward5 = 100000 + + +# --------------------------------------------------------------------------- +# Dimension Rift +# --------------------------------------------------------------------------- +# Minimal party size to enter rift. Min = 2, Max = 9. +# If in rift party will become smaller all members will be teleported back +RiftMinPartySize = 5 + +# Number of maximum jumps between rooms allowed, after this time party will be teleported back +MaxRiftJumps = 4 + +# Time in ms the party has to wait until the mobs spawn when entering a room. C4 retail: 10s +RiftSpawnDelay = 10000 + +# Time between automatic jumps in seconds +AutoJumpsDelayMin = 480 +AutoJumpsDelayMax = 600 + +# Time Multiplier for stay in the boss room +BossRoomTimeMultiply = 1.5 + +# Cost in dimension fragments to enter the rift, each party member must own this amount +RecruitCost = 18 +SoldierCost = 21 +OfficerCost = 24 +CaptainCost = 27 +CommanderCost = 30 +HeroCost = 33 + +# Infinite shots (SS/BSS) +DontDestroySS = False + +# NPC respawn time (default 180 seconds) +StandardRespawnDelay = 180 + +# ExpertisePenalty, to disable grade penalty +# False: Players can use equip S grade at level 1. +# True: Players can't use equip S grade at level 1. +ExpertisePenalty = True + +# MasteryPenalty, to disable Heavy expertise. +# True: Players like dagger or archer can't use Heavy armor. +MasteryPenalty = False +# MasteryPenalty starting level. +# Default from 20 +LevelToGetPenalty = 20 + +# MasteryWeaponPenalty, to disable weapons expertise. +# True: Players that have not weapon mastery cannot use that weapon type. +MasteryWeaponPenality = False +# MasteryWeaponPenality starting level. +# Default from 20 +LevelToGetWeaponPenalty = 20 + +#Augmentation Active skills start time: time in seconds that the +#players need to wait until an active augment skill is available +#once the augmented weapon is equipped. After the first time wait, +#the players will be able to use the skill with correct reuse time +#xml defined. +AugmStartReuseTime = 0 + + +# --------------------------------------------------------------------------- +# NPCs +# --------------------------------------------------------------------------- +# NPC attackable +# True: You can attack NPCs +# False: Npc/Mobs don't take damage +NpcAttackable = True + +# NPC invulnerable list eg. 51,90,... +InvulNpcList = 93000 + +# If True ActiveChar will not be able to Attack the Listed Npc Types. +DisableAttackToNpcs = False + +# List of NPC's that allow casting skills on them +# Any other type will not allow casting +AllowedNPCTypes = GrandBoss,Chest,FestivalMonster,Minion,Monster,Pet,RaidBoss,SiegeGuard,SiegeNpc,ControlTower,Artefact,PenaltyMonster,FeedableBeast,SiegeFlag,RiftInvader,Guard,GuardNoHTML + +# Allows Players to Shift-click Mobs and view their Stats and Droplist +AltGameViewNpc = False + +# Custom Private store SELL/BUY +# For example you can use private store with Event Medal or Gold Bar +# Default: False (Adena) +SellByItem = False +# Custom Item ID +SellItem = 6392 + +# Monster stats (PAtk,Pdef,etc..) based just on Database Values +# and without STR,WIT,CON,MEN,INT,DEX influences. +# ATTENTION: enabling this option, monster instances could be simple to kill, +# check your database to increase their stats.. +# +# True: All Monster Instances haven't the Bonus of Stats. (Easy to kill) +# False: All Monster Instances have the Bonus of Stats. (Hard to kill) +# We got the correct value on database, so disable it. +# Default: True +AltMobsStatsBonus = True + +# Monster stats (PAtk,Pdef,etc..) based just on Database Values +# and without STR,WIT,CON,MEN,INT,DEX influences. +# ATTENTION: enabling this option, monster instances could be simple to kill, +# check your database to increase their stats.. +# +# True: All Monster Instances haven't the Bonus of Stats. (Easy to kill) +# False: All Monster Instances have the Bonus of Stats. (Hard to kill) +# We got the correct value on database, so disable it. +# Default: True +AltPetsStatsBonus = True + +# % regeneration and defence for RaidBoss and their minions +RaidHpRegenMultiplier = 100 +RaidMpRegenMultiplier = 100 +RaidPhysicalDefenceMultiplier = 100 +RaidMagicalDefenceMultiplier = 100 + +#Configure Minimum and Maximum multiplier time between RaidBoss respawn. +#By Default 12Hours*1.0 for Minimum Time and 24Hours*1.0 for Maximum Time. +RaidMinRespawnMultiplier = 1.0 +RaidMaxRespawnMultiplier = 1.0 + +# Minions respawn timer 300000 = 5 mins +RaidMinionRespawnTime = 300000 + +# Click task delay when targeting an NPC. +# Leave as default if you don't know what this is. +# Default: 50 +ClickTaskDelay = 50 + + +# --------------------------------------------------------------------------- +# Pets +# --------------------------------------------------------------------------- +# movement speed for strider and wyvern +WyvernSpeed = 100 +StriderSpeed = 80 + +#Allow the wyvern manager located in every castle to train wyverns and striders from hatchlings +AllowWyvernUpgrader = True + +# Rent with pets (wyvern and Strider). Example: 111,222,333 +ListPetRentNpc = 30827 + + +# --------------------------------------------------------------------------- +# Jail +# --------------------------------------------------------------------------- +# Set jail as PvP zone. +JailIsPvp = False + +# Turn off all chats except basics. +JailDisableChat = True + + +# --------------------------------------------------------------------------- +# Chat Filter System +# --------------------------------------------------------------------------- +# Enable chat filter default: false +UseChatFilter = False + +# Replace illegal words with following chars +ChatFilterChars = -_- + +# Punishment for bad words: +# Options: +# off - there is no punishment for the words +# Karma - karma giving +# Jail - jail +# Chat - chat ban +ChatFilterPunishment = off + +# How long penalty minutes +ChatFilterPunishmentParam1 = 5 + +# How to give karma for the bad word +ChatFilterPunishmentParam2 = 1000 + + +# --------------------------------------------------------------------------- +# Four Sepulchers +# --------------------------------------------------------------------------- +# The time allowed for the attack +TimeOfAttack = 50 + +# The time allowed for rest +TimeOfCoolDown = 5 + +# The time allowed to the input +TimeOfEntry = 3 + +# The time allowed for warm-up +TimeOfWarmUp = 2 + +# Minimum players in the party +NumberOfNecessaryPartyMembers = 4 + + +# --------------------------------------------------------------------------- +# Quake / Killing Spree System +# --------------------------------------------------------------------------- +# Enable The Killing Spree System +# When a Player Hits an Amount of pvp's an announcement appears +AllowQuakeSystem = False + +# Enable Messages to GMs on 4-5 consecutive pvp of a player +# Why? to see if a char are farming! +EnableAntiPvpFarmMsg = True + + +# --------------------------------------------------------------------------- +# Aio System +# --------------------------------------------------------------------------- +# Enable Aion System +EnableAioSystem = True + +# Name Color +AllowAioNameColor = True +AioNameColor = 88AA88 + +# Title Color +AllowAioTitleColor = True +AioTitleColor = 88AA88 + +# List of Aio Skills +# Format : skillid,skilllvl;skillid2,skilllvl2;....skillidn,skilllvln +AioSkills = 1085,3;1304,3;1087,3;1354,1;1062,2;1005,3;1243,6;1045,6;1048,6;\ +1311,6;168,3;213,8;1007,3;1309,3;1552,3;1006,3;1229,15;1308,3;1253,3;1284,3;\ +1009,3;1310,4;1363,1;1362,1;1397,3;1292,6;1078,6;307,1;276,1;309,1;274,1;275,1;\ +272,1;277,1;273,1;311,1;366,1;365,1;310,1;271,1;1242,3;1257,3;1353,3;1391,3;\ +1352,1;229,7;228,3;1077,3;1218,33;1059,3;1219,33;1217,33;1388,3;1389,3;1240,3;\ +1086,2;1032,3;1073,2;1036,2;1035,4;1068,3;1003,3;1282,2;1356,1;1355,1;1357,33;\ +1044,3;1182,3;1191,3;1033,3;1189,3;1259,4;1306,6;234,23;1040,3;364,1;264,1;306,1;\ +269,1;270,1;265,1;363,1;349,1;308,1;305,1;304,1;267,1;266,1;268,1;1390,3;1303,2;\ +1204,2;1268,4;1413,1;4699,8;4700,8;4703,8 + +# Aio Buffers can use GK? +AllowAioUseGk = False + +# Aio Buffers can speak to Class Master? +AllowAioUseClassMaster = False + +# Allow AIO in events? +AllowAioInEvents = False + + +# --------------------------------------------------------------------------- +# Additional Settings +# --------------------------------------------------------------------------- + +# Announce castle lords on enter game. default = False +AnnounceCastleLords = False + +# Declare the location of Mammon NPCs to players during the ratification of the press. +AnnounceMammonSpawn = False + +# If you wish to disable the use of guards against aggressive monsters. +# Default is False. +AllowGuards = False + +# Configure zones +# 0 = World Peace +# 1 = PVP sieges in +# 2 = PVP everywhere +ZoneTown = 0 + +# Configure IM +# Global Chat (ON (region), OFF, GM, GLOBAL) +GlobalChat = ON +# Global Trade chat (ON, OFF, GM, LIMITED (region)) +TradeChat = LIMITED + +# Who can write in the global chat if is it trade? +# True = only players with the pvpamount, false = all +TradeChatWithPvP = False +TradePvPAmount = 100 + +# Who can write in the global chat if is it global? +# True = only players with the pvpamount, false = all +GlobalChatWithPvP = False +GlobalPvPAmount = 100 + +# Who can write in the trade chat if is it global? +# True = only nubless, false = all +TradeChatIsNooble = False + +# Maximum number of characters for chat phrase +MaxChatLength = 100 + +# The penalty for illegal character of +# 1 - Sending GM reporting the action +# 2 - Throw a player (kick) +# 3 - Throw and ban +# 4 - Jail player +DefaultPunish = 2 +# Minutes to stay in jail if punishment is jail +DefaultPunishParam = 0 + +# On / Off Warehouse +AllowWarehouse = True + +# On / Off hashing Warehouse +WarehouseCache = False + +# How much memory should occupy hash Warehouse +WarehouseCacheTime = 15 + +# On / Off use Freight Warehouse +AllowFreight = True + +# If True player can try on weapon and armor in shop. +# Default: True +AllowWear = True + +# Default: 5 +WearDelay = 5 + +#Adena cost to try on an item. +# Default: 10 +WearPrice = 10 + + +# --------------------------------------------------------------------------- +# Enable/Disable features +# --------------------------------------------------------------------------- +AllowLottery = True +AllowRace = True +AllowRentPet = False +AllowFishing = True +AllowBoat = True +AllowCursedWeapons = True +AllowManor = True +AllowNpcWalkers = True + + +# --------------------------------------------------------------------------- +# Server Optimization +# --------------------------------------------------------------------------- + +# Remove the character from account +DeleteCharAfterDays = 7 + +# Allow players to drop items on the ground. +AllowDiscardItem = True + +# Delete dropped reward items from world after a specified amount of seconds. Disabled = 0. +AutoDestroyDroppedItemAfter = 0 + +# Time in secs after which dropped herb will be auto-destroyed +AutoDestroyHerbTime = 15 + +# List of item id that will not be destroyed (separated by "," like 57,5575,6673). +# Notes: +# Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers! +# Items on this list will be protected regardless of the following options. +ListOfProtectedItems = 57,5575,6673 + +# Just delete the stuff that fell out of players +# WARNING: only works when AutoDestroyDroppedItemAfter> 0 +DestroyPlayerDroppedItem = False + +# Just to destroy such things as: armor, weapons, jewelry +# WARNING: only works when DestroyPlayerDroppedItem = True +DestroyEquipableItem = False + +# Keep discarded things in the database to be restored after restarting the server +SaveDroppedItem = False + +# Clean up the table after loading things into memory - Safe Settings +# If the server crashes before you save things at next start will be restored old things +# And the players will be able to collect some of them - that will prevent duplicate +EmptyDroppedItemTableAfterLoad = False + +# Time in minutes to save the discarded items in the database, 0 to disable +# WARNING: If this option is disabled SaveDroppedItemInterval, +# Things will remain in the database only when you restart the server +SaveDroppedItemInterval = 60 + +# Delete all saved items from the database at next start +# WARNING: only works when SaveDroppedItem = False +ClearDroppedItemTable = False + +# Remove broken quests player +AutoDeleteInvalidQuestData = False + +# Set to false can improve the performance of servers with high concurrence +PreciseDropCalculation = False + +# Allow create spliced things +MultipleItemDrop = True + +# Sending information about all the things your character, and not only that with which the operation takes place. +# WARNING: Incredible traffic loads. +ForceInventoryUpdate = False + +# Sending information about all the stats your character, and not only that with which the operation takes place. +# WARNING: Higher traffic loads. +ForceCompletePlayerStatusUpdate = True + +# The maximum deviation from the point of Spawn mobs +MaxDriftRange = 200 + +# Minimum and maximum variables in seconds for NPC animation delay. +# You must keep MinNpcAnimation lower or equal to MaxNpcAnimation. +# Set values to 0 for disabling random animations. +# Default: 5 +MinNpcAnimation = 5 +# Default: 60 +MaxNpcAnimation = 60 +# Default: 5 +MinMonsterAnimation = 5 +# Default: 60 +MaxMonsterAnimation = 60 + +# Show the lvl and type of aggro mobs? +ShowNpcLevel = False + +# Record the location of the characters in the file before the off / restarting the server? +ActivatePositionRecorder = False + +# On/Off Hight rate Server. +# Only Adena, LifeStones, SealStones, Boss Jewels Drop Option +HighRateServerDrops = False + + +# --------------------------------------------------------------------------- +# Community board +# --------------------------------------------------------------------------- +# Activate or no the community board. +EnableCommunityBoard = True + +# Show this community board section when you open it. +BBSDefault = _bbshome + + +# Options grid: Grid can be enabled or disabled. This also will affect +# Loading and processing of all tasks of artificial intelligence and geodata to work in conjunction with the grid. +# When playing in this place the character begins to work immediately grid and in addition +# Start lining up for a specified number of seconds from 8 neighboring character grids. +# After exiting the main square and adjacent characters within a few seconds is +# Coordinates, if all this time in the area had no players. +# Enabling this option allows grids to be always active. +GridsAlwaysOn = False +GridNeighborTurnOnTime = 30 +GridNeighborTurnOffTime = 300 + +# Combining streams prioritized implementation +# The default values -1,0,1 (group low / med / high) +ExecutorPriLow = -1 +ExecutorPriMed = 0 +ExecutorPriHigh = 1 diff --git a/L2J_Mobius_C6_Interlude/dist/game/config/main/Options.ini b/L2J_Mobius_C6_Interlude/dist/game/config/main/Options.ini deleted file mode 100644 index ca5498151a..0000000000 --- a/L2J_Mobius_C6_Interlude/dist/game/config/main/Options.ini +++ /dev/null @@ -1,195 +0,0 @@ -#=============================================================# -# Option Settings # -#=============================================================# - -# Configure zones -# 0 = World Peace -# 1 = PVP sieges in -# 2 = PVP everywhere -ZoneTown = 0 - -# Configure IM -# Global Chat (ON (region), OFF, GM, GLOBAL) -GlobalChat = ON -# Global Trade chat (ON, OFF, GM, LIMITED (region)) -TradeChat = LIMITED - -# Who can write in the global chat if is it trade? -# True = only players with the pvpamount, false = all -TradeChatWithPvP = False -TradePvPAmount = 100 - -# Who can write in the global chat if is it global? -# True = only players with the pvpamount, false = all -GlobalChatWithPvP = False -GlobalPvPAmount = 100 - -# Who can write in the trade chat if is it global? -# True = only nubless, false = all -TradeChatIsNooble = False - -# Maximum number of characters for chat phrase -MaxChatLength = 100 - -# The penalty for illegal character of -# 1 - Sending GM reporting the action -# 2 - Throw a player (kick) -# 3 - Throw and ban -# 4 - Jail player -DefaultPunish = 2 -# Minutes to stay in jail if punishment is jail -DefaultPunishParam = 0 - -# ----------------------------------- -# Server Optimization -# ----------------------------------- - -# Remove the character from account -DeleteCharAfterDays = 7 - -# Allow players to drop items on the ground. -AllowDiscardItem = True - -# Delete dropped reward items from world after a specified amount of seconds. Disabled = 0. -AutoDestroyDroppedItemAfter = 0 - -# Time in secs after which dropped herb will be auto-destroyed -AutoDestroyHerbTime = 15 - -# List of item id that will not be destroyed (separated by "," like 57,5575,6673). -# Notes: -# Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers! -# Items on this list will be protected regardless of the following options. -ListOfProtectedItems = 57,5575,6673 - -# Just delete the stuff that fell out of players -# WARNING: only works when AutoDestroyDroppedItemAfter> 0 -DestroyPlayerDroppedItem = False - -# Just to destroy such things as: armor, weapons, jewelry -# WARNING: only works when DestroyPlayerDroppedItem = True -DestroyEquipableItem = False - -# Keep discarded things in the database to be restored after restarting the server -SaveDroppedItem = False - -# Clean up the table after loading things into memory - Safe Settings -# If the server crashes before you save things at next start will be restored old things -# And the players will be able to collect some of them - that will prevent duplicate -EmptyDroppedItemTableAfterLoad = False - -# Time in minutes to save the discarded items in the database, 0 to disable -# WARNING: If this option is disabled SaveDroppedItemInterval, -# Things will remain in the database only when you restart the server -SaveDroppedItemInterval = 60 - -# Delete all saved items from the database at next start -# WARNING: only works when SaveDroppedItem = False -ClearDroppedItemTable = False - -# Remove broken quests player -AutoDeleteInvalidQuestData = False - -# Set to false can improve the performance of servers with high concurrence -PreciseDropCalculation = False - -# Allow create spliced things -MultipleItemDrop = True - -# Sending information about all the things your character, and not only that with which the operation takes place. -# WARNING: Incredible traffic loads. -ForceInventoryUpdate = False - -# Sending information about all the stats your character, and not only that with which the operation takes place. -# WARNING: Higher traffic loads. -ForceCompletePlayerStatusUpdate = True - -# The maximum deviation from the point of Spawn mobs -MaxDriftRange = 200 - -# Minimum and maximum variables in seconds for NPC animation delay. -# You must keep MinNpcAnimation lower or equal to MaxNpcAnimation. -# Set values to 0 for disabling random animations. -# Default: 5 -MinNpcAnimation = 5 -# Default: 60 -MaxNpcAnimation = 60 -# Default: 5 -MinMonsterAnimation = 5 -# Default: 60 -MaxMonsterAnimation = 60 - -# Show the lvl and type of aggro mobs? -ShowNpcLevel = False - -# Record the location of the characters in the file before the off / restarting the server? -ActivatePositionRecorder = False - -# On/Off Hight rate Server. -# Only Adena, LifeStones, SealStones, Boss Jewels Drop Option -HighRateServerDrops = False - -# ---------------------------------- -# Additional Settings -# ---------------------------------- -# On / Off Warehouse -AllowWarehouse = True - -# On / Off hashing Warehouse -WarehouseCache = False - -# How much memory should occupy hash Warehouse -WarehouseCacheTime = 15 - -# On / Off use Freight Warehouse -AllowFreight = True - -# If True player can try on weapon and armor in shop. -# Default: True -AllowWear = True -# Default: 5 -WearDelay = 5 -#Adena cost to try on an item. -# Default: 10 -WearPrice = 10 - - -# ======= Test configuration ======# -# True Enabled / False Disabled # -AllowLottery = True -AllowRace = True -AllowRentPet = False -AllowFishing = True -AllowBoat = True -AllowCursedWeapons = True -AllowManor = True -AllowNpcWalkers = True -# ============================= - - -# ------------------------------- -# Community board -# ------------------------------- -# Activate or no the community board. -EnableCommunityBoard = True - -# Show this community board section when you open it. -BBSDefault = _bbshome - - -# Options grid: Grid can be enabled or disabled. This also will affect -# Loading and processing of all tasks of artificial intelligence and geodata to work in conjunction with the grid. -# When playing in this place the character begins to work immediately grid and in addition -# Start lining up for a specified number of seconds from 8 neighboring character grids. -# After exiting the main square and adjacent characters within a few seconds is -# Coordinates, if all this time in the area had no players. -# Enabling this option allows grids to be always active. -GridsAlwaysOn = False -GridNeighborTurnOnTime = 30 -GridNeighborTurnOffTime = 300 - -# Combining streams prioritized implementation -# The default values -1,0,1 (group low / med / high) -ExecutorPriLow = -1 -ExecutorPriMed = 0 -ExecutorPriHigh = 1 \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/dist/game/config/main/Other.ini b/L2J_Mobius_C6_Interlude/dist/game/config/main/Other.ini deleted file mode 100644 index e687c6e41e..0000000000 --- a/L2J_Mobius_C6_Interlude/dist/game/config/main/Other.ini +++ /dev/null @@ -1,258 +0,0 @@ -#============================================================# -# Other Settings # -#============================================================# - -#Amount of adena/AA that a new character is given -StartingAdena = 0 -StartingAncientAdena = 0 - -# Enable this if you want the below configuration to work. -# Default: False -CustomStarterItemsEnabled = False -# Starting itens for fighter's classes -StartingCustomItemsFighter = 57,1000; -# Starting itens for mage's classes -StartingCustomItemsMage = 57,1000; - -# movement speed for strider and wyvern -WyvernSpeed = 100 -StriderSpeed = 80 - -#Allow the wyvern manager located in every castle to train wyverns and striders from hatchlings -AllowWyvernUpgrader = True - -# If True, when effects of the same stack group are used, lesser -# effects will be canceled if stronger effects are used. New effects -# that are added will be canceled if they are of lesser priority to the old one. -# If False, they will not be canceled, and it will switch to them after the -# stronger one runs out, if the lesser one is still in effect. -CancelLesserEffect = True - -# If you wish to disable the use of guards agains agressive monsters. -# Default is False. -AllowGuards = False - -# If True, the following deep blue mobs' drop penalties will be applied: -# - When player's level is 9 times greater than mob's level, drops got divided by 3 -# - After 9 lvl's of difference between player and deep blue mobs, drop chance is -# lowered by 9% each lvl that difference increases. (9lvls diff = -9%; 10lvls diff = -18%; ...) -# NOTE1: These rules are applied to both normal and sweep drops -# NOTE2: These rules ignores the server's rate when drop is of adena type (Complies with retail server) -UseDeepBlueDropRules = True - -# Inventory space limits -# All race without dwarf -MaximumSlotsForNoDwarf = 80 -# Dwarf race -MaximumSlotsForDwarf = 100 -# GM char -MaximumSlotsForGMPlayer = 250 - -# Warehouse space limits (Must be < 300 for prevent client crash) -# Dwarfs will get bonus from lvl 60 -MaximumWarehouseSlotsForDwarf = 120 -MaximumWarehouseSlotsForNoDwarf = 100 -MaximumWarehouseSlotsForClan = 200 -MaximumFreightSlots = 20 - -# % regeneration of normal regeneration speed -HpRegenMultiplier = 100 -MpRegenMultiplier = 100 -CpRegenMultiplier = 100 - -# % regeneration and defence for RaidBoss and their minions -RaidHpRegenMultiplier = 100 -RaidMpRegenMultiplier = 100 -RaidPhysicalDefenceMultiplier = 100 -RaidMagicalDefenceMultiplier = 100 - -#Configure Minimum and Maximum multiplier time between RaidBoss respawn. -#By Default 12Hours*1.0 for Minimum Time and 24Hours*1.0 for Maximum Time. -RaidMinRespawnMultiplier = 1.0 -RaidMaxRespawnMultiplier = 1.0 - -# Minions respawn timer 300000 = 5 mins -RaidMinionRespawnTime = 300000 - -# Enable keyboard movement. -# Retail: True -KeyboardMovement = True - -# Unstuck interval, seconds, default is 300 sec. -UnstuckInterval = 300 - -# Player Protection on login in seconds, 0 for disabled -PlayerSpawnProtection = 0 - -# Player Protection after teleporting, 0 for disabled -PlayerTeleportProtection = 0 - -# Player Protection from (agro) mobs after getting up from fake death; in seconds, 0 for disabled -PlayerFakeDeathUpProtection = 0 - -# PARTY XP DISTRIBUTION -# The first option can be set to auto, percentage, level, none. -# When is "auto" member of the party receives less Exp / SP, where its level is low -# If the party received a bonus for him (30% for 2 members of the party) -# In this case, he will not get Exp / SP of the party, and will not receive a bonus party -# Not used quite too high values of the parameter "percentage"! -# Not used quite too low values of the parameter "level"! -# If you do not want to be the distribution of XP for the members of the Party -# Just put "none". Default:, 3.0, 30 -PartyXpCutoffMethod = auto -PartyXpCutoffPercent = 3.0 -PartyXpCutoffLevel = 30 - -# Levels restore HP, MP, and CP after death -# Values are specified in percentage -RespawnRestoreCP = 70 -RespawnRestoreHP = 70 -RespawnRestoreMP = 70 - -# Allow random regeneration in cities, indicating the maximum displacement -# From the main origin. -RespawnRandomInTown = True -RespawnRandomMaxOffset = 20 - -# The maximum number of slots for the purchase / sale (for dwarves and other races) -# By default, dwarf 5 slots, the other 4 races -MaxPvtStoreSlotsDwarf = 5 -MaxPvtStoreSlotsOther = 4 - -# Keep the effects buffs and debuff when you exit the game -StoreSkillCooltime = True - -# Rent with pets (wyvern and Strider). Example: 111,222,333 -ListPetRentNpc = 30827 - -# Declare the location of Mammon NPCs to players during the ratification of the press. -AnnounceMammonSpawn = False - -# Allow player to send petition? -PetitioningAllowed = True -# The number of petitions per session -MaxPetitionsPerPlayer = 5 -# The number of petitions, which may consider GM -MaxPetitionsPending = 25 - -# ------------------------------ -# Configure prison -# ------------------------------ -# PvP zone? -JailIsPvp = False -# Turn off all chats except basics? -JailDisableChat = True - -# Chance to get Death Penalty -DeathPenaltyChance = 20 - -# -------------------------------------- -# Alternative time buffs -# -------------------------------------- -# When the reads, buff, and their duration. -# Default: False -EnableModifySkillDuration = False -# Format: id_skill time; id_skill2, time2 ;.... -# Example: -#SkillDurationList = 264,3660;265,3660;266,3660;267,3660;268,3660;\ -#269,3660;270,3660;304,3660;305,3660;306,3660;308,3660;349,3660;\ -#363,3660;364,3660;529,3660;271,3660;272,3660;273,3660;274,3660;\ -#275,3660;276,3660;277,3660;307,3660;309,3660;310,3660;311,3660;\ -#305,3660;366,3660;530,3660;365,3660;\ -#1086,3660;1240,3660;1242,3660;1243,3660;1388,3660;1389,3660;336,3660;\ -#1035,3660;1043,3660;1044,3660;1062,3660;1268,3660;1040,3660;1393,3660;\ -#1077,3660;1078,3660;1085,3660;1204,3660;1036,3660;1045,3660;1048,3660;\ -#1007,3660;1006,3660;1009,3660;1251,3660;1252,3660;1253,3660;1307,3660;\ -#1284,3660;1308,3660;1309,3660;1310,3660;1390,3660;1391,3660;1362,3660;\ -#1303,3660;1087,3660;1259,3660;1059,3660;1311,3660;1033,3660;1002,3660;\ -#1068,3660;1397,3660;1032,3660;1189,3660;1191,3660;1182,3660;1365,3660;\ -#1010,3660;1282,3660;1004,3660;1008,3660;1249,3660;1250,3660;1260,3660;\ -#1261,3660;1364,3660;1259,3660;1073,3660;1257,3660;1304,3660;1460,3660;\ -#1353,3660;1354,3660;1003,3660;1005,3660;\ -#1352,3660;1442,3660;1392,3660;\ -#1355,3660;1356,3660;1357,3660;1363,3660;1461,3660;1413,3660;1414,3660 -SkillDurationList = - -# -------------------------------- -# Chat Filter System -# -------------------------------- -# Enable chat filter default: false -UseChatFilter = False -# Replace illegal words with following chars -ChatFilterChars = -_- -# Punishment for bad words: -# Options: -# off - there is no punishment for the words -# Karma - karma giving -# Jail - jail -# Chat - chat ban -ChatFilterPunishment = off -# How long penalty minutes -ChatFilterPunishmentParam1 = 5 -# How to give karma for the bad word -ChatFilterPunishmentParam2 = 1000 - -# ----------------------------- -# Four Sepulchers -# ----------------------------- -# The time allowed for the attack -TimeOfAttack = 50 -# The time allowed for rest -TimeOfCoolDown = 5 -# The time allowed to the input -TimeOfEntry = 3 -# The time allowed for warm-up -TimeOfWarmUp = 2 -# Minimum players in the party -NumberOfNecessaryPartyMembers = 4 - -# -------------------------------------------------- -# Quake / Killing Spree System -# -------------------------------------------------- -# Enable The Killing Spree System -# When a Player Hits an Amount of pvp's an announcement appears -AllowQuakeSystem = False - -# Enable Messages to GMs on 4-5 consecutive pvp of a player -# Why? to see if a char are farming! -EnableAntiPvpFarmMsg = True - -# ----------------------------------------- -# Aio System -# ----------------------------------------- -# Enable / Disable Aion System -EnableAioSystem = True -# Enable / Disable Name Color -AllowAioNameColor = True -AioNameColor = 88AA88 -# Enable / Disable Title Color -AllowAioTitleColor = True -AioTitleColor = 88AA88 -# List of Aio Skills -# Format : skillid,skilllvl;skillid2,skilllvl2;....skillidn,skilllvln -AioSkills = 1085,3;1304,3;1087,3;1354,1;1062,2;1005,3;1243,6;1045,6;1048,6;\ -1311,6;168,3;213,8;1007,3;1309,3;1552,3;1006,3;1229,15;1308,3;1253,3;1284,3;\ -1009,3;1310,4;1363,1;1362,1;1397,3;1292,6;1078,6;307,1;276,1;309,1;274,1;275,1;\ -272,1;277,1;273,1;311,1;366,1;365,1;310,1;271,1;1242,3;1257,3;1353,3;1391,3;\ -1352,1;229,7;228,3;1077,3;1218,33;1059,3;1219,33;1217,33;1388,3;1389,3;1240,3;\ -1086,2;1032,3;1073,2;1036,2;1035,4;1068,3;1003,3;1282,2;1356,1;1355,1;1357,33;\ -1044,3;1182,3;1191,3;1033,3;1189,3;1259,4;1306,6;234,23;1040,3;364,1;264,1;306,1;\ -269,1;270,1;265,1;363,1;349,1;308,1;305,1;304,1;267,1;266,1;268,1;1390,3;1303,2;\ -1204,2;1268,4;1413,1;4699,8;4700,8;4703,8 -# Aio Buffers can use GK? -AllowAioUseGk = False -# Aio Buffers can speak to Class Master? -AllowAioUseClassMaster = False -# Allow AIO in events? -AllowAioInEvents = False - -# Announce castle lords on enter game. default = False -AnnounceCastleLords = False - -# Click task when target an Npc -# Leave as default if you don't know what you are changing -# Default: 50 -ClickTask = 50 - -# Crit announce -GMShowCritAnnouncerName = False \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/dist/game/config/main/Boss.ini b/L2J_Mobius_C6_Interlude/dist/game/config/main/RaidBoss.ini similarity index 78% rename from L2J_Mobius_C6_Interlude/dist/game/config/main/Boss.ini rename to L2J_Mobius_C6_Interlude/dist/game/config/main/RaidBoss.ini index 2055982956..ff8f535bab 100644 --- a/L2J_Mobius_C6_Interlude/dist/game/config/main/Boss.ini +++ b/L2J_Mobius_C6_Interlude/dist/game/config/main/RaidBoss.ini @@ -1,6 +1,6 @@ -#=========================================# -# Boss Configuration # -#=========================================# +# --------------------------------------------------------------------------- +# Raidboss Settings +# --------------------------------------------------------------------------- # If True: Player can heal RB # If False: Player can't heal RB @@ -42,9 +42,10 @@ AllowDirectTeleportToBossRoom = False # Raid Info IDs showed RaidInfoIDs = 29001,29006,29014,29019,29020,29022,29028,29045 -# ----------------- + +# --------------------------------------------------------------------------- # Antharas -# ----------------- +# --------------------------------------------------------------------------- # If true, the Interlude Script is used, meanwhile if you want new # script feature (different Antharas Instances since weak to strong # Antharas as for Freya) just set false @@ -66,9 +67,10 @@ AntharasWaitTime = 30 # Default 1.0 = retail AntharasPowerMultiplier = 1.0 -# -------------- + +# --------------------------------------------------------------------------- # Baium -# -------------- +# --------------------------------------------------------------------------- # Time left Baium into hibernation after the last attack on him. # The value in seconds. BaiumSleep = 1800 @@ -81,9 +83,10 @@ BaiumRespSecond = 16 # Default 1.0 = retail BaiumPowerMultiplier = 1.0 -# ----------- + +# --------------------------------------------------------------------------- # Core -# ----------- +# --------------------------------------------------------------------------- # Time minion respawn after their murder. # The value in seconds. CoreRespMinion = 60 @@ -99,9 +102,10 @@ CoreRingChance = 0 # Default 1.0 = retail CorePowerMultiplier = 1.0 -# ----------- + +# --------------------------------------------------------------------------- # Zaken -# ----------- +# --------------------------------------------------------------------------- # Time respawn core after the murder. Total time respawn shield as follows: # The first value + value in the range from 0 up to the second value. # Value in hours. @@ -114,9 +118,10 @@ ZakenEarringChance = 0 # Default 1.0 = retail ZakenPowerMultiplier = 1.0 -# ----------- + +# --------------------------------------------------------------------------- # Orfen -# ----------- +# --------------------------------------------------------------------------- # Time respawn core after the murder. Total time respawn shield as follows: # The first value + value in the range from 0 up to the second value. # Value in hours. @@ -129,9 +134,10 @@ OrfenEarringChance = 0 # Default 1.0 = retail OrfenPowerMultiplier = 1.0 -# ----------- + +# --------------------------------------------------------------------------- # Valakas -# ----------- +# --------------------------------------------------------------------------- # Time respawn valakas after the murder. Total time respawn shield as follows: # The first value + value in the range from 0 up to the second value. # Value in hours. @@ -144,9 +150,10 @@ ValakasWaitTime = 30 ValakasDespawnTime = 240 ValakasPowerMultiplier = 1.0 -# -------------------- + +# --------------------------------------------------------------------------- # Queen Ant -# ------------------- +# --------------------------------------------------------------------------- # Time minion respawn after their murder. # The value in seconds. # Nurses @@ -165,9 +172,10 @@ QARingChance = 0 # Default 1.0 = retail QueenAntPowerMultiplier = 1.0 -# -------------------- -# Frintezza - -# ------------------- + +# --------------------------------------------------------------------------- +# Frintezza +# --------------------------------------------------------------------------- # Frintezza respawn time after the murder. Total time respawn shield as follows: # The first value + value in the range from 0 up to the second value. # Value in hours. @@ -188,9 +196,10 @@ BypassPartiesCheck = False # in this mode: power = retail_power * ((level_diff/10)*LevelDiffMultiplier) LevelDiffMultiplierMinion = 0.5 -# -------------------------------------- + +# --------------------------------------------------------------------------- # High Priest van Halter -# -------------------------------------- +# --------------------------------------------------------------------------- # Time for the High Priest van Halter. # Value in seconds. Interval 300-864000 # The time taken from random FixIntervalOfVanHalter before FixIntervalOfVanHalter + RandomIntervalOfVanHalter. diff --git a/L2J_Mobius_C6_Interlude/dist/game/config/main/GameServer.ini b/L2J_Mobius_C6_Interlude/dist/game/config/main/Server.ini similarity index 61% rename from L2J_Mobius_C6_Interlude/dist/game/config/main/GameServer.ini rename to L2J_Mobius_C6_Interlude/dist/game/config/main/Server.ini index b2b75a048b..7e69e7e4ae 100644 --- a/L2J_Mobius_C6_Interlude/dist/game/config/main/GameServer.ini +++ b/L2J_Mobius_C6_Interlude/dist/game/config/main/Server.ini @@ -81,6 +81,15 @@ BackupDays = 30 # Misc Server Settings # --------------------------------------------------------------------------- +# This is the server ID that the Game Server will request. +# Example: 1 = Bartz +# Default: 1 +RequestServerID = 1 + +# True = The Login Server will give an other ID to the server if the requested ID is already reserved. +# Default: True +AcceptAlternateID = True + # Datapack root directory. # Defaults to current directory from which the server is started unless the below line is uncommented. # WARNING: If the specified path is invalid, it will lead to multiple errors! @@ -89,3 +98,62 @@ DatapackRoot = . # Scripts root directory. ScriptRoot = ./data/scripts + +# Define how many players are allowed to play simultaneously on your server. +# Default: 2000 +MaximumOnlineUsers = 2000 + +# Minimum and maximum protocol revision that server allow to connect. +# You must keep MinProtocolRevision <= MaxProtocolRevision. +# Retail 740 - 746 +MinProtocolRevision = 740 +MaxProtocolRevision = 746 + +# Setting for serverList. +# Displays [] in front of server name. +# Default: False +ServerListBrackets = False + +# Displays a clock next to the server name. +# Default: False +ServerListClock = False + + +# --------------------------------------------------------------------------- +# Thread Configuration +# --------------------------------------------------------------------------- + +# Specifies how many threads will be in the scheduled pool. +# Default: 40 +ScheduledThreadPoolCount = 40 + +# Specifies how many threads will be in the single instant pool. +# Default: 20 +InstantThreadPoolCount = 20 + + +# --------------------------------------------------------------------------- +# Misc Player Settings +# --------------------------------------------------------------------------- + +# Character name template. +# Examples: +# CnameTemplate = [A-Z][a-z]{3,3}[A-Za-z0-9]* +# The above setting will allow names with first capital letter, next three small letters, +# and any letter (case insensitive) or number, like OmfgWTF1 +# CnameTemplate = [A-Z][a-z]* +# The above setting will allow names only of letters with first one capital, like Omfgwtf +# Default .* (allows any symbol) +CnameTemplate = .* + +# This setting restricts names players can give to their pets. +# See CnameTemplate for details +PetNameTemplate = .* + +# This setting restricts clan/subpledge names players can set. +# See CnameTemplate for details +ClanNameTemplate = .* + +# This setting restricts ally names players can set. +# See CnameTemplate for details +AllyNameTemplate = .* diff --git a/L2J_Mobius_C6_Interlude/dist/game/config/protected/Daemons.ini b/L2J_Mobius_C6_Interlude/dist/game/config/protected/Daemons.ini index d8692709fa..b70c661bdd 100644 --- a/L2J_Mobius_C6_Interlude/dist/game/config/protected/Daemons.ini +++ b/L2J_Mobius_C6_Interlude/dist/game/config/protected/Daemons.ini @@ -1,3 +1,6 @@ +# --------------------------------------------------------------------------- +# Daemons settings +# --------------------------------------------------------------------------- # Preamble: # Standard set up is possible only two parameters of demons: # - Pereodichnost run in milliseconds @@ -29,8 +32,12 @@ CheckTeleportZombiesDelay = 60000 CleanDBInitial = 300000 CleanDBDelay = 900000 -# DEAD LOCK CHECK DAEMON: -# Allows to block the flow and see what they blocked -# More details: http://en.wikipedia.org/wiki/Deadlock + +# --------------------------------------------------------------------------- +# Dead Lock Detector (separate thread for detecting deadlocks) +# --------------------------------------------------------------------------- +# For improved crash logs and automatic restart in deadlock case if enabled. +# Check interval is in seconds. +# Default: 0 (disabled) DeadLockCheck = 0 -DeadLockDelay = 0 \ No newline at end of file +DeadLockDelay = 0 diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/Config.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/Config.java index 8348c98fad..54574e4e8f 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/Config.java @@ -56,23 +56,21 @@ public final class Config private static final String HEXID_FILE = "./config/hexid.txt"; // main private static final String ACCESS_CONFIG_FILE = "./config/main/Access.ini"; - private static final String ALT_SETTINGS_CONFIG_FILE = "./config/main/AltSettings.ini"; - private static final String BOSS_CONFIG_FILE = "./config/main/Boss.ini"; + private static final String CHARACTER_CONFIG_FILE = "./config/main/Character.ini"; private static final String CLANHALL_CONFIG_FILE = "./config/main/Clanhall.ini"; public static final String CLASS_DAMAGE_CONFIG_FILE = "./config/main/ClassDamage.ini"; private static final String CRAFTING_CONFIG_FILE = "./config/main/Crafting.ini"; - private static final String DEVELOPER_CONFIG_FILE = "./config/main/Developer.ini"; private static final String ELIT_CLANHALL_CONFIG_FILE = "./config/main/EliteClanhall.ini"; private static final String ENCHANT_CONFIG_FILE = "./config/main/Enchant.ini"; public static final String FORTSIEGE_CONFIG_FILE = "./config/main/Fort.ini"; - private static final String SERVER_CONFIG_FILE = "./config/main/GameServer.ini"; + private static final String GENERAL_CONFIG_FILE = "./config/main/General.ini"; private static final String GEODATA_CONFIG_FILE = "./config/main/GeoEngine.ini"; private static final String OLYMP_CONFIG_FILE = "./config/main/Olympiad.ini"; - private static final String OPTIONS_CONFIG_FILE = "./config/main/Options.ini"; - private static final String OTHER_CONFIG_FILE = "./config/main/Other.ini"; private static final String PHYSICS_CONFIG_FILE = "./config/main/Physics.ini"; private static final String PVP_CONFIG_FILE = "./config/main/PvP.ini"; + private static final String RAIDBOSS_CONFIG_FILE = "./config/main/RaidBoss.ini"; private static final String RATES_CONFIG_FILE = "./config/main/Rates.ini"; + private static final String SERVER_CONFIG_FILE = "./config/main/Server.ini"; private static final String SEVENSIGNS_CONFIG_FILE = "./config/main/SevenSigns.ini"; public static final String SIEGE_CONFIG_FILE = "./config/main/Siege.ini"; // protected @@ -92,8 +90,8 @@ public final class Config private static final String BANK_CONFIG_FILE = "./config/custom/Bank.ini"; private static final String BUFFER_CONFIG_FILE = "./config/custom/Buffer.ini"; private static final String EVENT_CHAMPION_CONFIG_FILE = "./config/custom/Champion.ini"; - private static final String CUSTOM_SERVER_CONFIG_FILE = "./config/custom/CustomServer.ini"; private static final String OFFLINE_CONFIG_FILE = "./config/custom/Offline.ini"; + private static final String OTHER_CONFIG_FILE = "./config/custom/Other.ini"; private static final String EVENT_REBIRTH_CONFIG_FILE = "./config/custom/Rebirth.ini"; private static final String EVENT_WEDDING_CONFIG_FILE = "./config/custom/Wedding.ini"; // login @@ -126,6 +124,7 @@ public final class Config public static boolean GM_STARTUP_BUILDER_HIDE; public static boolean GM_STARTUP_INVULNERABLE; public static boolean GM_ANNOUNCER_NAME; + public static boolean GM_CRITANNOUNCER_NAME; public static boolean GM_DEBUG_HTML_PATHS; public static boolean USE_SUPER_HASTE_AS_GM_SPEED; @@ -220,36 +219,15 @@ public final class Config public static ObjectMapType MAP_TYPE; public static ObjectSetType SET_TYPE; - public static int MAX_ITEM_IN_PACKET; public static boolean JAIL_IS_PVP; public static boolean JAIL_DISABLE_CHAT; public static int WYVERN_SPEED; public static int STRIDER_SPEED; public static boolean ALLOW_WYVERN_UPGRADER; - public static int INVENTORY_MAXIMUM_NO_DWARF; - public static int INVENTORY_MAXIMUM_DWARF; - public static int INVENTORY_MAXIMUM_GM; - 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 String NONDROPPABLE_ITEMS; public static List LIST_NONDROPPABLE_ITEMS = new ArrayList<>(); public static String PET_RENT_NPC; public static List LIST_PET_RENT_NPC = new ArrayList<>(); - 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 double RAID_HP_REGEN_MULTIPLIER; - public static double RAID_MP_REGEN_MULTIPLIER; - public static double RAID_P_DEFENCE_MULTIPLIER; - public static double RAID_M_DEFENCE_MULTIPLIER; - public static double RAID_MINION_RESPAWN_TIMER; - public static float RAID_MIN_RESPAWN_MULTIPLIER; - public static float RAID_MAX_RESPAWN_MULTIPLIER; - public static int STARTING_ADENA; - public static int STARTING_AA; public static boolean ENABLE_AIO_SYSTEM; public static Map AIO_SKILLS; public static boolean ALLOW_AIO_NCOLOR; @@ -259,34 +237,6 @@ public final class Config public static boolean ALLOW_AIO_USE_GK; public static boolean ALLOW_AIO_USE_CM; public static boolean ALLOW_AIO_IN_EVENTS; - public static boolean ANNOUNCE_CASTLE_LORDS; - public static boolean CUSTOM_STARTER_ITEMS_ENABLED; - public static List STARTING_CUSTOM_ITEMS_F = new ArrayList<>(); - public static List STARTING_CUSTOM_ITEMS_M = new ArrayList<>(); - public static boolean DEEPBLUE_DROP_RULES; - public static boolean ENABLE_KEYBOARD_MOVEMENT; - public static int UNSTUCK_INTERVAL; - public static int DEATH_PENALTY_CHANCE; - public static int PLAYER_SPAWN_PROTECTION; - public static int PLAYER_TELEPORT_PROTECTION; - public static boolean EFFECT_TELEPORT_PROTECTION; - public static int PLAYER_FAKEDEATH_UP_PROTECTION; - public static String PARTY_XP_CUTOFF_METHOD; - public static int PARTY_XP_CUTOFF_LEVEL; - public static double PARTY_XP_CUTOFF_PERCENT; - public static double RESPAWN_RESTORE_CP; - public static double RESPAWN_RESTORE_HP; - public static double RESPAWN_RESTORE_MP; - 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 PETITIONING_ALLOWED; - public static int MAX_PETITIONS_PER_PLAYER; - public static int MAX_PETITIONS_PENDING; - public static boolean ANNOUNCE_MAMMON_SPAWN; - public static boolean ENABLE_MODIFY_SKILL_DURATION; - public static Map SKILL_DURATION_LIST; public static int CHAT_FILTER_PUNISHMENT_PARAM1; public static int CHAT_FILTER_PUNISHMENT_PARAM2; public static int CHAT_FILTER_PUNISHMENT_PARAM3; @@ -301,7 +251,6 @@ public final class Config public static int FS_PARTY_MEMBER_COUNT; public static boolean ALLOW_QUAKE_SYSTEM; public static boolean ENABLE_ANTI_PVP_FARM_MSG; - public static long CLICK_TASK; public static float RATE_XP; public static float RATE_SP; public static float RATE_PARTY_XP; @@ -344,30 +293,8 @@ public final class Config public static float SPOIL_RAID; public static float SPOIL_MINON; - public static boolean AUTO_LOOT; - public static boolean AUTO_LOOT_BOSS; - public static boolean AUTO_LOOT_HERBS; public static boolean REMOVE_CASTLE_CIRCLETS; - public static double ALT_WEIGHT_LIMIT; - public static boolean ALT_GAME_SKILL_LEARN; - public static boolean AUTO_LEARN_SKILLS; - public static boolean ALT_GAME_CANCEL_BOW; - public static boolean ALT_GAME_CANCEL_CAST; - public static boolean ALT_GAME_TIREDNESS; - public static int ALT_PARTY_RANGE; - public static boolean ALT_GAME_SHIELD_BLOCKS; - public static int ALT_PERFECT_SHLD_BLOCK; - public static boolean ALT_GAME_MOB_ATTACK_AI; - public static boolean ALT_MOB_AGRO_IN_PEACEZONE; - public static boolean ALT_GAME_FREIGHTS; - public static int ALT_GAME_FREIGHT_PRICE; public static float ALT_GAME_SKILL_HIT_RATE; - public static boolean ALT_GAME_DELEVEL; - public static boolean ALT_GAME_MAGICFAILURES; - public static boolean ALT_GAME_FREE_TELEPORT; - public static boolean ALT_RECOMMEND; - public static boolean ALT_GAME_SUBCLASS_WITHOUT_QUESTS; - public static boolean ALT_RESTORE_EFFECTS_ON_SUBCLASS_CHANGE; public static boolean ALT_GAME_VIEWNPC; public static int ALT_CLAN_MEMBERS_FOR_WAR; public static int ALT_CLAN_JOIN_DAYS; @@ -380,9 +307,6 @@ public final class Config public static boolean ALT_GAME_NEW_CHAR_ALWAYS_IS_NEWBIE; public static boolean ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH; public static int ALT_MAX_NUM_OF_CLANS_IN_ALLY; - public static boolean LIFE_CRYSTAL_NEEDED; - public static boolean SP_BOOK_NEEDED; - public static boolean ES_SP_BOOK_NEEDED; public static boolean ALT_PRIVILEGES_SECURE_CHECK; public static int ALT_PRIVILEGES_DEFAULT_LEVEL; public static int ALT_MANOR_REFRESH_TIME; @@ -417,16 +341,7 @@ public final class Config public static int RIFT_ENTER_COST_COMMANDER; public static int RIFT_ENTER_COST_HERO; public static float RIFT_BOSS_ROOM_TIME_MUTIPLY; - public static float ALT_GAME_EXPONENT_XP; - public static float ALT_GAME_EXPONENT_SP; public static boolean FORCE_INVENTORY_UPDATE; - public static boolean ALLOW_GUARDS; - public static boolean ALLOW_CLASS_MASTERS; - public static boolean ALLOW_CLASS_MASTERS_FIRST_CLASS; - public static boolean ALLOW_CLASS_MASTERS_SECOND_CLASS; - public static boolean ALLOW_CLASS_MASTERS_THIRD_CLASS; - public static boolean CLASS_MASTER_STRIDER_UPDATE; - public static ClassMasterSettings CLASS_MASTER_SETTINGS; public static boolean ALT_GAME_KARMA_PLAYER_CAN_BE_KILLED_IN_PEACEZONE; public static boolean ALT_GAME_KARMA_PLAYER_CAN_SHOP; public static boolean ALT_GAME_KARMA_PLAYER_CAN_USE_GK; @@ -434,16 +349,8 @@ public final class Config public static boolean ALT_GAME_KARMA_PLAYER_CAN_TRADE; public static boolean ALT_GAME_KARMA_PLAYER_CAN_USE_WAREHOUSE; public static boolean ALT_KARMA_TELEPORT_TO_FLORAN; - public static byte BUFFS_MAX_AMOUNT; - public static byte DEBUFFS_MAX_AMOUNT; - public static boolean AUTO_LEARN_DIVINE_INSPIRATION; - public static boolean DIVINE_SP_BOOK_NEEDED; - public static boolean ALLOW_REMOTE_CLASS_MASTERS; public static boolean DONT_DESTROY_SS; - public static int MAX_LEVEL_NEWBIE; - public static int MAX_LEVEL_NEWBIE_STATUS; public static int STANDARD_RESPAWN_DELAY; - public static int ALT_RECOMMENDATIONS_NUMBER; public static int RAID_RANKING_1ST; public static int RAID_RANKING_2ND; public static int RAID_RANKING_3RD; @@ -456,7 +363,6 @@ public final class Config public static int RAID_RANKING_10TH; public static int RAID_RANKING_UP_TO_50TH; public static int RAID_RANKING_UP_TO_100TH; - public static boolean DISABLE_TUTORIAL; public static boolean EXPERTISE_PENALTY; public static boolean MASTERY_PENALTY; public static int LEVEL_TO_GET_PENALTY; @@ -470,13 +376,21 @@ public final class Config public static List LIST_ALLOWED_NPC_TYPES = new ArrayList<>(); public static boolean SELL_BY_ITEM; public static int SELL_ITEM; - public static int ALLOWED_SUBCLASS; - public static byte BASE_SUBCLASS_LEVEL; - public static byte MAX_SUBCLASS_LEVEL; public static String DISABLE_BOW_CLASSES_STRING; public static List DISABLE_BOW_CLASSES = new ArrayList<>(); public static boolean ALT_MOBS_STATS_BONUS; public static boolean ALT_PETS_STATS_BONUS; + public static double RAID_HP_REGEN_MULTIPLIER; + public static double RAID_MP_REGEN_MULTIPLIER; + public static double RAID_P_DEFENCE_MULTIPLIER; + public static double RAID_M_DEFENCE_MULTIPLIER; + public static double RAID_MINION_RESPAWN_TIMER; + public static float RAID_MIN_RESPAWN_MULTIPLIER; + public static float RAID_MAX_RESPAWN_MULTIPLIER; + public static long CLICK_TASK; + public static boolean ANNOUNCE_CASTLE_LORDS; + public static boolean ANNOUNCE_MAMMON_SPAWN; + public static boolean ALLOW_GUARDS; public static boolean ALT_GAME_REQUIRE_CASTLE_DAWN; public static boolean ALT_GAME_REQUIRE_CLAN_CASTLE; @@ -630,29 +544,12 @@ public final class Config public static boolean ALT_DEV_NO_SPAWNS; public static boolean ALT_DEV_NO_SCRIPT; public static boolean ALT_DEV_NO_RB; - public static boolean ASSERT; public static boolean SERVER_LIST_TESTSERVER; - public static boolean BETASERVER; - public static boolean SERVER_LIST_BRACKET; - public static boolean SERVER_LIST_CLOCK; public static boolean SERVER_GMONLY; - public static int REQUEST_ID; - public static boolean ACCEPT_ALTERNATE_ID; - public static int MAXIMUM_ONLINE_USERS; - public static String CNAME_TEMPLATE; - public static String PET_NAME_TEMPLATE; - public static String CLAN_NAME_TEMPLATE; - public static String ALLY_NAME_TEMPLATE; - public static int MAX_CHARACTERS_NUMBER_PER_ACCOUNT; - public static int MIN_PROTOCOL_REVISION; - public static int MAX_PROTOCOL_REVISION; public static boolean GMAUDIT; public static boolean LOG_CHAT; public static boolean LOG_ITEMS; - public static int SCHEDULED_THREAD_POOL_COUNT; - public static int INSTANT_THREAD_POOL_COUNT; - public static boolean LAZY_CACHE; public static boolean IS_CRAFTING_ENABLED; @@ -820,7 +717,6 @@ public final class Config public static String PVP1_CUSTOM_MESSAGE; public static String PVP2_CUSTOM_MESSAGE; public static boolean GM_TRADE_RESTRICTED_ITEMS; - public static boolean GM_CRITANNOUNCER_NAME; public static boolean GM_RESTART_FIGHTING; public static boolean PM_MESSAGE_ON_START; public static boolean SERVER_TIME_ON_START; @@ -1133,6 +1029,93 @@ public final class Config public static String RAID_INFO_IDS; public static List RAID_INFO_IDS_LIST = new ArrayList<>(); + public static boolean AUTO_LOOT; + public static boolean AUTO_LOOT_HERBS; + public static boolean AUTO_LOOT_BOSS; + public static boolean AUTO_LEARN_SKILLS; + public static boolean AUTO_LEARN_DIVINE_INSPIRATION; + 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_SKILL_LEARN; + public static int ALLOWED_SUBCLASS; + public static byte BASE_SUBCLASS_LEVEL; + public static byte MAX_SUBCLASS_LEVEL; + public static boolean ALT_GAME_SUBCLASS_WITHOUT_QUESTS; + public static boolean ALT_RESTORE_EFFECTS_ON_SUBCLASS_CHANGE; + public static int ALT_PARTY_RANGE; + public static double ALT_WEIGHT_LIMIT; + public static boolean ALT_GAME_DELEVEL; + public static boolean ALT_GAME_MAGICFAILURES; + public static boolean ALT_GAME_CANCEL_CAST; + public static boolean ALT_GAME_CANCEL_BOW; + public static boolean ALT_GAME_SHIELD_BLOCKS; + public static int ALT_PERFECT_SHLD_BLOCK; + public static boolean ALT_GAME_MOB_ATTACK_AI; + public static boolean ALT_MOB_AGRO_IN_PEACEZONE; + public static boolean ALT_GAME_FREIGHTS; + public static int ALT_GAME_FREIGHT_PRICE; + public static float ALT_GAME_EXPONENT_XP; + public static float ALT_GAME_EXPONENT_SP; + public static boolean ALT_GAME_TIREDNESS; + public static boolean ALT_GAME_FREE_TELEPORT; + public static boolean ALT_RECOMMEND; + public static int ALT_RECOMMENDATIONS_NUMBER; + public static int MAX_CHARACTERS_NUMBER_PER_ACCOUNT; + public static int MAX_LEVEL_NEWBIE; + public static int MAX_LEVEL_NEWBIE_STATUS; + public static boolean DISABLE_TUTORIAL; + public static int STARTING_ADENA; + public static int STARTING_AA; + public static boolean CUSTOM_STARTER_ITEMS_ENABLED; + public static List STARTING_CUSTOM_ITEMS_F = new ArrayList<>(); + public static List STARTING_CUSTOM_ITEMS_M = new ArrayList<>(); + public static int INVENTORY_MAXIMUM_NO_DWARF; + public static int INVENTORY_MAXIMUM_DWARF; + public static int INVENTORY_MAXIMUM_GM; + public static int MAX_ITEM_IN_PACKET; + public static int WAREHOUSE_SLOTS_DWARF; + public static int WAREHOUSE_SLOTS_NO_DWARF; + public static int WAREHOUSE_SLOTS_CLAN; + public static int FREIGHT_SLOTS; + public static int MAX_PVTSTORE_SLOTS_DWARF; + public static int MAX_PVTSTORE_SLOTS_OTHER; + public static double HP_REGEN_MULTIPLIER; + public static double MP_REGEN_MULTIPLIER; + public static double CP_REGEN_MULTIPLIER; + public static boolean ENABLE_KEYBOARD_MOVEMENT; + public static int UNSTUCK_INTERVAL; + public static int PLAYER_SPAWN_PROTECTION; + public static int PLAYER_TELEPORT_PROTECTION; + public static int PLAYER_FAKEDEATH_UP_PROTECTION; + public static boolean DEEPBLUE_DROP_RULES; + public static String PARTY_XP_CUTOFF_METHOD; + public static double PARTY_XP_CUTOFF_PERCENT; + public static int PARTY_XP_CUTOFF_LEVEL; + public static double RESPAWN_RESTORE_CP; + public static double RESPAWN_RESTORE_HP; + public static double RESPAWN_RESTORE_MP; + public static boolean RESPAWN_RANDOM_ENABLED; + public static int RESPAWN_RANDOM_MAX_OFFSET; + public static boolean PETITIONING_ALLOWED; + public static int MAX_PETITIONS_PER_PLAYER; + public static int MAX_PETITIONS_PENDING; + public static int DEATH_PENALTY_CHANCE; + public static boolean EFFECT_CANCELING; + public static boolean STORE_SKILL_COOLTIME; + public static byte BUFFS_MAX_AMOUNT; + public static byte DEBUFFS_MAX_AMOUNT; + public static boolean ENABLE_MODIFY_SKILL_DURATION; + public static Map SKILL_DURATION_LIST; + public static boolean ALLOW_CLASS_MASTERS; + public static boolean CLASS_MASTER_STRIDER_UPDATE; + public static boolean ALLOW_CLASS_MASTERS_FIRST_CLASS; + public static boolean ALLOW_CLASS_MASTERS_SECOND_CLASS; + public static boolean ALLOW_CLASS_MASTERS_THIRD_CLASS; + public static ClassMasterSettings CLASS_MASTER_SETTINGS; + public static boolean ALLOW_REMOTE_CLASS_MASTERS; + public static long AUTOSAVE_INITIAL_TIME; public static long AUTOSAVE_DELAY_TIME; public static long CHECK_CONNECTION_INACTIVITY_TIME; @@ -1153,14 +1136,27 @@ public final class Config public static String LOGIN_BIND_ADDRESS; public static int LOGIN_TRY_BEFORE_BAN; public static int LOGIN_BLOCK_AFTER_BAN; - public static File DATAPACK_ROOT; - public static File SCRIPT_ROOT; public static int GAME_SERVER_LOGIN_PORT; public static String GAME_SERVER_LOGIN_HOST; public static String INTERNAL_HOSTNAME; public static String EXTERNAL_HOSTNAME; + public static int REQUEST_ID; + public static boolean ACCEPT_ALTERNATE_ID; + public static File DATAPACK_ROOT; + public static File SCRIPT_ROOT; + public static int MAXIMUM_ONLINE_USERS; + public static boolean SERVER_LIST_BRACKET; + public static boolean SERVER_LIST_CLOCK; + public static int MIN_PROTOCOL_REVISION; + public static int MAX_PROTOCOL_REVISION; + public static int SCHEDULED_THREAD_POOL_COUNT; + public static int INSTANT_THREAD_POOL_COUNT; + public static String CNAME_TEMPLATE; + public static String PET_NAME_TEMPLATE; + public static String CLAN_NAME_TEMPLATE; + public static String ALLY_NAME_TEMPLATE; + public static int IP_UPDATE_TIME; - public static boolean STORE_SKILL_COOLTIME; public static boolean SHOW_LICENCE; public static boolean FORCE_GGAUTH; public static boolean FLOOD_PROTECTION; @@ -1178,30 +1174,31 @@ public final class Config { try { - final Properties AccessSettings = new Properties(); + final Properties accessSettings = new Properties(); final InputStream is = new FileInputStream(new File(ACCESS_CONFIG_FILE)); - AccessSettings.load(is); + accessSettings.load(is); is.close(); - EVERYBODY_HAS_ADMIN_RIGHTS = Boolean.parseBoolean(AccessSettings.getProperty("EverybodyHasAdminRights", "false")); - MASTERACCESS_LEVEL = Integer.parseInt(AccessSettings.getProperty("MasterAccessLevel", "1")); - MASTERACCESS_NAME_COLOR_ENABLED = Boolean.parseBoolean(AccessSettings.getProperty("MasterNameColorEnabled", "false")); - MASTERACCESS_TITLE_COLOR_ENABLED = Boolean.parseBoolean(AccessSettings.getProperty("MasterTitleColorEnabled", "false")); - MASTERACCESS_NAME_COLOR = Integer.decode("0x" + AccessSettings.getProperty("MasterNameColor", "00FF00")); - MASTERACCESS_TITLE_COLOR = Integer.decode("0x" + AccessSettings.getProperty("MasterTitleColor", "00FF00")); - USERACCESS_LEVEL = Integer.parseInt(AccessSettings.getProperty("UserAccessLevel", "0")); - GM_STARTUP_AUTO_LIST = Boolean.parseBoolean(AccessSettings.getProperty("GMStartupAutoList", "true")); - GM_ADMIN_MENU_STYLE = AccessSettings.getProperty("GMAdminMenuStyle", "modern"); - GM_HERO_AURA = Boolean.parseBoolean(AccessSettings.getProperty("GMHeroAura", "false")); - GM_STARTUP_BUILDER_HIDE = Boolean.parseBoolean(AccessSettings.getProperty("GMStartupBuilderHide", "true")); - GM_STARTUP_INVULNERABLE = Boolean.parseBoolean(AccessSettings.getProperty("GMStartupInvulnerable", "true")); - GM_ANNOUNCER_NAME = Boolean.parseBoolean(AccessSettings.getProperty("AnnounceGmName", "false")); - SHOW_GM_LOGIN = Boolean.parseBoolean(AccessSettings.getProperty("ShowGMLogin", "false")); - GM_STARTUP_INVISIBLE = Boolean.parseBoolean(AccessSettings.getProperty("GMStartupInvisible", "true")); - GM_SPECIAL_EFFECT = Boolean.parseBoolean(AccessSettings.getProperty("GmLoginSpecialEffect", "false")); - GM_STARTUP_SILENCE = Boolean.parseBoolean(AccessSettings.getProperty("GMStartupSilence", "true")); - GM_DEBUG_HTML_PATHS = Boolean.parseBoolean(AccessSettings.getProperty("GMDebugHtmlPaths", "true")); - USE_SUPER_HASTE_AS_GM_SPEED = Boolean.parseBoolean(AccessSettings.getProperty("UseSuperHasteAsGMSpeed", "false")); + EVERYBODY_HAS_ADMIN_RIGHTS = Boolean.parseBoolean(accessSettings.getProperty("EverybodyHasAdminRights", "false")); + MASTERACCESS_LEVEL = Integer.parseInt(accessSettings.getProperty("MasterAccessLevel", "1")); + MASTERACCESS_NAME_COLOR_ENABLED = Boolean.parseBoolean(accessSettings.getProperty("MasterNameColorEnabled", "false")); + MASTERACCESS_TITLE_COLOR_ENABLED = Boolean.parseBoolean(accessSettings.getProperty("MasterTitleColorEnabled", "false")); + MASTERACCESS_NAME_COLOR = Integer.decode("0x" + accessSettings.getProperty("MasterNameColor", "00FF00")); + MASTERACCESS_TITLE_COLOR = Integer.decode("0x" + accessSettings.getProperty("MasterTitleColor", "00FF00")); + USERACCESS_LEVEL = Integer.parseInt(accessSettings.getProperty("UserAccessLevel", "0")); + GM_STARTUP_AUTO_LIST = Boolean.parseBoolean(accessSettings.getProperty("GMStartupAutoList", "true")); + GM_ADMIN_MENU_STYLE = accessSettings.getProperty("GMAdminMenuStyle", "modern"); + GM_HERO_AURA = Boolean.parseBoolean(accessSettings.getProperty("GMHeroAura", "false")); + GM_STARTUP_BUILDER_HIDE = Boolean.parseBoolean(accessSettings.getProperty("GMStartupBuilderHide", "true")); + GM_STARTUP_INVULNERABLE = Boolean.parseBoolean(accessSettings.getProperty("GMStartupInvulnerable", "true")); + GM_ANNOUNCER_NAME = Boolean.parseBoolean(accessSettings.getProperty("AnnounceGmName", "false")); + GM_CRITANNOUNCER_NAME = Boolean.parseBoolean(accessSettings.getProperty("CritAnnounceName", "false")); + SHOW_GM_LOGIN = Boolean.parseBoolean(accessSettings.getProperty("ShowGMLogin", "false")); + GM_STARTUP_INVISIBLE = Boolean.parseBoolean(accessSettings.getProperty("GMStartupInvisible", "true")); + GM_SPECIAL_EFFECT = Boolean.parseBoolean(accessSettings.getProperty("GmLoginSpecialEffect", "false")); + GM_STARTUP_SILENCE = Boolean.parseBoolean(accessSettings.getProperty("GMStartupSilence", "true")); + GM_DEBUG_HTML_PATHS = Boolean.parseBoolean(accessSettings.getProperty("GMDebugHtmlPaths", "true")); + USE_SUPER_HASTE_AS_GM_SPEED = Boolean.parseBoolean(accessSettings.getProperty("UseSuperHasteAsGMSpeed", "false")); } catch (Exception e) { @@ -1210,114 +1207,6 @@ public final class Config } } - public static void loadOptionsConfig() - { - try - { - final Properties optionsSettings = new Properties(); - final InputStream is = new FileInputStream(new File(OPTIONS_CONFIG_FILE)); - optionsSettings.load(is); - is.close(); - - AUTODESTROY_ITEM_AFTER = Integer.parseInt(optionsSettings.getProperty("AutoDestroyDroppedItemAfter", "0")); - HERB_AUTO_DESTROY_TIME = Integer.parseInt(optionsSettings.getProperty("AutoDestroyHerbTime", "15")) * 1000; - PROTECTED_ITEMS = optionsSettings.getProperty("ListOfProtectedItems"); - LIST_PROTECTED_ITEMS = new ArrayList<>(); - for (String id : PROTECTED_ITEMS.split(",")) - { - LIST_PROTECTED_ITEMS.add(Integer.parseInt(id)); - } - DESTROY_DROPPED_PLAYER_ITEM = Boolean.valueOf(optionsSettings.getProperty("DestroyPlayerDroppedItem", "false")); - DESTROY_EQUIPABLE_PLAYER_ITEM = Boolean.valueOf(optionsSettings.getProperty("DestroyEquipableItem", "false")); - SAVE_DROPPED_ITEM = Boolean.valueOf(optionsSettings.getProperty("SaveDroppedItem", "false")); - EMPTY_DROPPED_ITEM_TABLE_AFTER_LOAD = Boolean.valueOf(optionsSettings.getProperty("EmptyDroppedItemTableAfterLoad", "false")); - SAVE_DROPPED_ITEM_INTERVAL = Integer.parseInt(optionsSettings.getProperty("SaveDroppedItemInterval", "0")) * 60000; - CLEAR_DROPPED_ITEM_TABLE = Boolean.valueOf(optionsSettings.getProperty("ClearDroppedItemTable", "false")); - - PRECISE_DROP_CALCULATION = Boolean.valueOf(optionsSettings.getProperty("PreciseDropCalculation", "true")); - MULTIPLE_ITEM_DROP = Boolean.valueOf(optionsSettings.getProperty("MultipleItemDrop", "true")); - - ALLOW_WAREHOUSE = Boolean.valueOf(optionsSettings.getProperty("AllowWarehouse", "true")); - WAREHOUSE_CACHE = Boolean.valueOf(optionsSettings.getProperty("WarehouseCache", "false")); - WAREHOUSE_CACHE_TIME = Integer.parseInt(optionsSettings.getProperty("WarehouseCacheTime", "15")); - ALLOW_FREIGHT = Boolean.valueOf(optionsSettings.getProperty("AllowFreight", "true")); - ALLOW_WEAR = Boolean.valueOf(optionsSettings.getProperty("AllowWear", "false")); - WEAR_DELAY = Integer.parseInt(optionsSettings.getProperty("WearDelay", "5")); - WEAR_PRICE = Integer.parseInt(optionsSettings.getProperty("WearPrice", "10")); - ALLOW_LOTTERY = Boolean.valueOf(optionsSettings.getProperty("AllowLottery", "false")); - ALLOW_RACE = Boolean.valueOf(optionsSettings.getProperty("AllowRace", "false")); - ALLOW_RENTPET = Boolean.valueOf(optionsSettings.getProperty("AllowRentPet", "false")); - ALLOW_DISCARDITEM = Boolean.valueOf(optionsSettings.getProperty("AllowDiscardItem", "true")); - ALLOWFISHING = Boolean.valueOf(optionsSettings.getProperty("AllowFishing", "false")); - ALLOW_MANOR = Boolean.parseBoolean(optionsSettings.getProperty("AllowManor", "false")); - ALLOW_BOAT = Boolean.valueOf(optionsSettings.getProperty("AllowBoat", "false")); - ALLOW_NPC_WALKERS = Boolean.valueOf(optionsSettings.getProperty("AllowNpcWalkers", "true")); - ALLOW_CURSED_WEAPONS = Boolean.valueOf(optionsSettings.getProperty("AllowCursedWeapons", "false")); - - DEFAULT_GLOBAL_CHAT = optionsSettings.getProperty("GlobalChat", "ON"); - DEFAULT_TRADE_CHAT = optionsSettings.getProperty("TradeChat", "ON"); - MAX_CHAT_LENGTH = Integer.parseInt(optionsSettings.getProperty("MaxChatLength", "100")); - - TRADE_CHAT_IS_NOOBLE = Boolean.valueOf(optionsSettings.getProperty("TradeChatIsNooble", "false")); - TRADE_CHAT_WITH_PVP = Boolean.valueOf(optionsSettings.getProperty("TradeChatWithPvP", "false")); - TRADE_PVP_AMOUNT = Integer.parseInt(optionsSettings.getProperty("TradePvPAmount", "800")); - GLOBAL_CHAT_WITH_PVP = Boolean.valueOf(optionsSettings.getProperty("GlobalChatWithPvP", "false")); - GLOBAL_PVP_AMOUNT = Integer.parseInt(optionsSettings.getProperty("GlobalPvPAmount", "1500")); - - ENABLE_COMMUNITY_BOARD = Boolean.valueOf(optionsSettings.getProperty("EnableCommunityBoard", "true")); - BBS_DEFAULT = optionsSettings.getProperty("BBSDefault", "_bbshome"); - - ZONE_TOWN = Integer.parseInt(optionsSettings.getProperty("ZoneTown", "0")); - - MAX_DRIFT_RANGE = Integer.parseInt(optionsSettings.getProperty("MaxDriftRange", "300")); - - MIN_NPC_ANIMATION = Integer.parseInt(optionsSettings.getProperty("MinNpcAnimation", "5")); - MAX_NPC_ANIMATION = Integer.parseInt(optionsSettings.getProperty("MaxNpcAnimation", "60")); - MIN_MONSTER_ANIMATION = Integer.parseInt(optionsSettings.getProperty("MinMonsterAnimation", "5")); - MAX_MONSTER_ANIMATION = Integer.parseInt(optionsSettings.getProperty("MaxMonsterAnimation", "60")); - - SHOW_NPC_LVL = Boolean.valueOf(optionsSettings.getProperty("ShowNpcLevel", "false")); - - FORCE_INVENTORY_UPDATE = Boolean.valueOf(optionsSettings.getProperty("ForceInventoryUpdate", "false")); - - FORCE_COMPLETE_STATUS_UPDATE = Boolean.valueOf(optionsSettings.getProperty("ForceCompletePlayerStatusUpdate", "true")); - - AUTODELETE_INVALID_QUEST_DATA = Boolean.valueOf(optionsSettings.getProperty("AutoDeleteInvalidQuestData", "false")); - - DELETE_DAYS = Integer.parseInt(optionsSettings.getProperty("DeleteCharAfterDays", "7")); - - DEFAULT_PUNISH = Integer.parseInt(optionsSettings.getProperty("DefaultPunish", "2")); - DEFAULT_PUNISH_PARAM = Integer.parseInt(optionsSettings.getProperty("DefaultPunishParam", "0")); - - GRIDS_ALWAYS_ON = Boolean.parseBoolean(optionsSettings.getProperty("GridsAlwaysOn", "false")); - GRID_NEIGHBOR_TURNON_TIME = Integer.parseInt(optionsSettings.getProperty("GridNeighborTurnOnTime", "30")); - GRID_NEIGHBOR_TURNOFF_TIME = Integer.parseInt(optionsSettings.getProperty("GridNeighborTurnOffTime", "300")); - - USE_3D_MAP = Boolean.valueOf(optionsSettings.getProperty("Use3DMap", "false")); - - PATH_NODE_RADIUS = Integer.parseInt(optionsSettings.getProperty("PathNodeRadius", "50")); - NEW_NODE_ID = Integer.parseInt(optionsSettings.getProperty("NewNodeId", "7952")); - SELECTED_NODE_ID = Integer.parseInt(optionsSettings.getProperty("NewNodeId", "7952")); - LINKED_NODE_ID = Integer.parseInt(optionsSettings.getProperty("NewNodeId", "7952")); - NEW_NODE_TYPE = optionsSettings.getProperty("NewNodeType", "npc"); - - COUNT_PACKETS = Boolean.valueOf(optionsSettings.getProperty("CountPacket", "false")); - DUMP_PACKET_COUNTS = Boolean.valueOf(optionsSettings.getProperty("DumpPacketCounts", "false")); - DUMP_INTERVAL_SECONDS = Integer.parseInt(optionsSettings.getProperty("PacketDumpInterval", "60")); - - MINIMUM_UPDATE_DISTANCE = Integer.parseInt(optionsSettings.getProperty("MaximumUpdateDistance", "50")); - MINIMUN_UPDATE_TIME = Integer.parseInt(optionsSettings.getProperty("MinimumUpdateTime", "500")); - KNOWNLIST_FORGET_DELAY = Integer.parseInt(optionsSettings.getProperty("KnownListForgetDelay", "10000")); - - HIGH_RATE_SERVER_DROPS = Boolean.valueOf(optionsSettings.getProperty("HighRateServerDrops", "false")); - } - catch (Exception e) - { - e.printStackTrace(); - throw new Error("Failed to Load " + OPTIONS_CONFIG_FILE + " File."); - } - } - public static void loadServerConfig() { try @@ -1347,8 +1236,31 @@ public final class Config BACKUP_PATH = serverSettings.getProperty("BackupPath", "../backup/"); BACKUP_DAYS = Integer.parseInt(serverSettings.getProperty("BackupDays", "30")); + REQUEST_ID = Integer.parseInt(serverSettings.getProperty("RequestServerID", "0")); + ACCEPT_ALTERNATE_ID = Boolean.parseBoolean(serverSettings.getProperty("AcceptAlternateID", "true")); + DATAPACK_ROOT = new File(serverSettings.getProperty("DatapackRoot", ".")).getCanonicalFile(); SCRIPT_ROOT = new File(serverSettings.getProperty("ScriptRoot", "./data/scripts").replaceAll("\\\\", "/")).getCanonicalFile(); + + MAXIMUM_ONLINE_USERS = Integer.parseInt(serverSettings.getProperty("MaximumOnlineUsers", "100")); + + SERVER_LIST_BRACKET = Boolean.valueOf(serverSettings.getProperty("ServerListBrackets", "false")); + SERVER_LIST_CLOCK = Boolean.valueOf(serverSettings.getProperty("ServerListClock", "false")); + + MIN_PROTOCOL_REVISION = Integer.parseInt(serverSettings.getProperty("MinProtocolRevision", "660")); + MAX_PROTOCOL_REVISION = Integer.parseInt(serverSettings.getProperty("MaxProtocolRevision", "665")); + if (MIN_PROTOCOL_REVISION > MAX_PROTOCOL_REVISION) + { + throw new Error("MinProtocolRevision is bigger than MaxProtocolRevision in server configuration file."); + } + + SCHEDULED_THREAD_POOL_COUNT = Integer.parseInt(serverSettings.getProperty("ScheduledThreadPoolCount", "40")); + INSTANT_THREAD_POOL_COUNT = Integer.parseInt(serverSettings.getProperty("InstantThreadPoolCount", "20")); + + CNAME_TEMPLATE = serverSettings.getProperty("CnameTemplate", ".*"); + PET_NAME_TEMPLATE = serverSettings.getProperty("PetNameTemplate", ".*"); + CLAN_NAME_TEMPLATE = serverSettings.getProperty("ClanNameTemplate", ".*"); + ALLY_NAME_TEMPLATE = serverSettings.getProperty("AllyNameTemplate", ".*"); } catch (Exception e) { @@ -1412,279 +1324,6 @@ public final class Config } } - public static void loadOtherConfig() - { - try - { - final Properties otherSettings = new Properties(); - final InputStream is = new FileInputStream(new File(OTHER_CONFIG_FILE)); - otherSettings.load(is); - is.close(); - - DEEPBLUE_DROP_RULES = Boolean.parseBoolean(otherSettings.getProperty("UseDeepBlueDropRules", "true")); - ALLOW_GUARDS = Boolean.valueOf(otherSettings.getProperty("AllowGuards", "false")); - EFFECT_CANCELING = Boolean.valueOf(otherSettings.getProperty("CancelLesserEffect", "true")); - WYVERN_SPEED = Integer.parseInt(otherSettings.getProperty("WyvernSpeed", "100")); - STRIDER_SPEED = Integer.parseInt(otherSettings.getProperty("StriderSpeed", "80")); - ALLOW_WYVERN_UPGRADER = Boolean.valueOf(otherSettings.getProperty("AllowWyvernUpgrader", "false")); - - /* Select hit task */ - CLICK_TASK = Integer.parseInt(otherSettings.getProperty("ClickTask", "50")); - - GM_CRITANNOUNCER_NAME = Boolean.parseBoolean(otherSettings.getProperty("GMShowCritAnnouncerName", "false")); - - /* Inventory slots limits */ - INVENTORY_MAXIMUM_NO_DWARF = Integer.parseInt(otherSettings.getProperty("MaximumSlotsForNoDwarf", "80")); - INVENTORY_MAXIMUM_DWARF = Integer.parseInt(otherSettings.getProperty("MaximumSlotsForDwarf", "100")); - INVENTORY_MAXIMUM_GM = Integer.parseInt(otherSettings.getProperty("MaximumSlotsForGMPlayer", "250")); - MAX_ITEM_IN_PACKET = Math.max(INVENTORY_MAXIMUM_NO_DWARF, Math.max(INVENTORY_MAXIMUM_DWARF, INVENTORY_MAXIMUM_GM)); - - /* Inventory slots limits */ - WAREHOUSE_SLOTS_NO_DWARF = Integer.parseInt(otherSettings.getProperty("MaximumWarehouseSlotsForNoDwarf", "100")); - WAREHOUSE_SLOTS_DWARF = Integer.parseInt(otherSettings.getProperty("MaximumWarehouseSlotsForDwarf", "120")); - WAREHOUSE_SLOTS_CLAN = Integer.parseInt(otherSettings.getProperty("MaximumWarehouseSlotsForClan", "150")); - FREIGHT_SLOTS = Integer.parseInt(otherSettings.getProperty("MaximumFreightSlots", "20")); - - /* If different from 100 (ie 100%) heal rate is modified acordingly */ - HP_REGEN_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("HpRegenMultiplier", "100")) / 100; - MP_REGEN_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("MpRegenMultiplier", "100")) / 100; - CP_REGEN_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("CpRegenMultiplier", "100")) / 100; - - RAID_HP_REGEN_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("RaidHpRegenMultiplier", "100")) / 100; - RAID_MP_REGEN_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("RaidMpRegenMultiplier", "100")) / 100; - RAID_P_DEFENCE_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("RaidPhysicalDefenceMultiplier", "100")) / 100; - RAID_M_DEFENCE_MULTIPLIER = Double.parseDouble(otherSettings.getProperty("RaidMagicalDefenceMultiplier", "100")) / 100; - RAID_MINION_RESPAWN_TIMER = Integer.parseInt(otherSettings.getProperty("RaidMinionRespawnTime", "300000")); - RAID_MIN_RESPAWN_MULTIPLIER = Float.parseFloat(otherSettings.getProperty("RaidMinRespawnMultiplier", "1.0")); - RAID_MAX_RESPAWN_MULTIPLIER = Float.parseFloat(otherSettings.getProperty("RaidMaxRespawnMultiplier", "1.0")); - ENABLE_AIO_SYSTEM = Boolean.parseBoolean(otherSettings.getProperty("EnableAioSystem", "true")); - ALLOW_AIO_NCOLOR = Boolean.parseBoolean(otherSettings.getProperty("AllowAioNameColor", "true")); - AIO_NCOLOR = Integer.decode("0x" + otherSettings.getProperty("AioNameColor", "88AA88")); - ALLOW_AIO_TCOLOR = Boolean.parseBoolean(otherSettings.getProperty("AllowAioTitleColor", "true")); - AIO_TCOLOR = Integer.decode("0x" + otherSettings.getProperty("AioTitleColor", "88AA88")); - ALLOW_AIO_USE_GK = Boolean.parseBoolean(otherSettings.getProperty("AllowAioUseGk", "false")); - ALLOW_AIO_USE_CM = Boolean.parseBoolean(otherSettings.getProperty("AllowAioUseClassMaster", "false")); - ALLOW_AIO_IN_EVENTS = Boolean.parseBoolean(otherSettings.getProperty("AllowAioInEvents", "false")); - ANNOUNCE_CASTLE_LORDS = Boolean.parseBoolean(otherSettings.getProperty("AnnounceCastleLords", "false")); - if (ENABLE_AIO_SYSTEM) // create map if system is enabled - { - final String[] AioSkillsSplit = otherSettings.getProperty("AioSkills", "").split(";"); - AIO_SKILLS = new HashMap<>(AioSkillsSplit.length); - for (String skill : AioSkillsSplit) - { - final String[] skillSplit = skill.split(","); - if (skillSplit.length != 2) - { - LOGGER.info("[Aio System]: invalid config property in " + OTHER_CONFIG_FILE + " -> AioSkills \"" + skill + "\""); - } - else - { - try - { - AIO_SKILLS.put(Integer.parseInt(skillSplit[0]), Integer.parseInt(skillSplit[1])); - } - catch (NumberFormatException nfe) - { - if (!skill.equals("")) - { - LOGGER.info("[Aio System]: invalid config property in " + OTHER_CONFIG_FILE + " -> AioSkills \"" + skillSplit[0] + "\"" + skillSplit[1]); - } - } - } - } - } - STARTING_ADENA = Integer.parseInt(otherSettings.getProperty("StartingAdena", "100")); - STARTING_AA = Integer.parseInt(otherSettings.getProperty("StartingAncientAdena", "0")); - - CUSTOM_STARTER_ITEMS_ENABLED = Boolean.parseBoolean(otherSettings.getProperty("CustomStarterItemsEnabled", "false")); - if (CUSTOM_STARTER_ITEMS_ENABLED) - { - String[] propertySplit = otherSettings.getProperty("StartingCustomItemsMage", "57,0").split(";"); - STARTING_CUSTOM_ITEMS_M.clear(); - for (String reward : propertySplit) - { - final String[] rewardSplit = reward.split(","); - if (rewardSplit.length != 2) - { - LOGGER.warning("StartingCustomItemsMage[Config.load()]: invalid config property -> StartingCustomItemsMage \"" + reward + "\""); - } - else - { - try - { - STARTING_CUSTOM_ITEMS_M.add(new int[] - { - Integer.parseInt(rewardSplit[0]), - Integer.parseInt(rewardSplit[1]) - }); - } - catch (NumberFormatException nfe) - { - if (!reward.isEmpty()) - { - LOGGER.warning("StartingCustomItemsMage[Config.load()]: invalid config property -> StartingCustomItemsMage \"" + reward + "\""); - } - } - } - } - - propertySplit = otherSettings.getProperty("StartingCustomItemsFighter", "57,0").split(";"); - STARTING_CUSTOM_ITEMS_F.clear(); - for (String reward : propertySplit) - { - final String[] rewardSplit = reward.split(","); - if (rewardSplit.length != 2) - { - LOGGER.warning("StartingCustomItemsFighter[Config.load()]: invalid config property -> StartingCustomItemsFighter \"" + reward + "\""); - } - else - { - try - { - STARTING_CUSTOM_ITEMS_F.add(new int[] - { - Integer.parseInt(rewardSplit[0]), - Integer.parseInt(rewardSplit[1]) - }); - } - catch (NumberFormatException nfe) - { - if (!reward.isEmpty()) - { - LOGGER.warning("StartingCustomItemsFighter[Config.load()]: invalid config property -> StartingCustomItemsFighter \"" + reward + "\""); - } - } - } - } - } - - ENABLE_KEYBOARD_MOVEMENT = Boolean.parseBoolean(otherSettings.getProperty("KeyboardMovement", "true")); - UNSTUCK_INTERVAL = Integer.parseInt(otherSettings.getProperty("UnstuckInterval", "300")); - - /* Player protection after teleport or login */ - PLAYER_SPAWN_PROTECTION = Integer.parseInt(otherSettings.getProperty("PlayerSpawnProtection", "0")); - PLAYER_TELEPORT_PROTECTION = Integer.parseInt(otherSettings.getProperty("PlayerTeleportProtection", "0")); - EFFECT_TELEPORT_PROTECTION = Boolean.parseBoolean(otherSettings.getProperty("EffectTeleportProtection", "false")); - - /* Player protection after recovering from fake death (works against mobs only) */ - PLAYER_FAKEDEATH_UP_PROTECTION = Integer.parseInt(otherSettings.getProperty("PlayerFakeDeathUpProtection", "0")); - - /* Defines some Party XP related values */ - PARTY_XP_CUTOFF_METHOD = otherSettings.getProperty("PartyXpCutoffMethod", "percentage"); - PARTY_XP_CUTOFF_PERCENT = Double.parseDouble(otherSettings.getProperty("PartyXpCutoffPercent", "3.")); - PARTY_XP_CUTOFF_LEVEL = Integer.parseInt(otherSettings.getProperty("PartyXpCutoffLevel", "30")); - - /* Amount of HP, MP, and CP is restored */ - RESPAWN_RESTORE_CP = Double.parseDouble(otherSettings.getProperty("RespawnRestoreCP", "0")) / 100; - RESPAWN_RESTORE_HP = Double.parseDouble(otherSettings.getProperty("RespawnRestoreHP", "70")) / 100; - RESPAWN_RESTORE_MP = Double.parseDouble(otherSettings.getProperty("RespawnRestoreMP", "70")) / 100; - - RESPAWN_RANDOM_ENABLED = Boolean.parseBoolean(otherSettings.getProperty("RespawnRandomInTown", "false")); - RESPAWN_RANDOM_MAX_OFFSET = Integer.parseInt(otherSettings.getProperty("RespawnRandomMaxOffset", "50")); - - /* Maximum number of available slots for pvt stores */ - MAX_PVTSTORE_SLOTS_DWARF = Integer.parseInt(otherSettings.getProperty("MaxPvtStoreSlotsDwarf", "5")); - MAX_PVTSTORE_SLOTS_OTHER = Integer.parseInt(otherSettings.getProperty("MaxPvtStoreSlotsOther", "4")); - - STORE_SKILL_COOLTIME = Boolean.parseBoolean(otherSettings.getProperty("StoreSkillCooltime", "true")); - - PET_RENT_NPC = otherSettings.getProperty("ListPetRentNpc", "30827"); - LIST_PET_RENT_NPC = new ArrayList<>(); - for (String id : PET_RENT_NPC.split(",")) - { - LIST_PET_RENT_NPC.add(Integer.parseInt(id)); - } - NONDROPPABLE_ITEMS = otherSettings.getProperty("ListOfNonDroppableItems", "1147,425,1146,461,10,2368,7,6,2370,2369,5598"); - - LIST_NONDROPPABLE_ITEMS = new ArrayList<>(); - for (String id : NONDROPPABLE_ITEMS.split(",")) - { - LIST_NONDROPPABLE_ITEMS.add(Integer.parseInt(id)); - } - - ANNOUNCE_MAMMON_SPAWN = Boolean.parseBoolean(otherSettings.getProperty("AnnounceMammonSpawn", "true")); - PETITIONING_ALLOWED = Boolean.parseBoolean(otherSettings.getProperty("PetitioningAllowed", "true")); - MAX_PETITIONS_PER_PLAYER = Integer.parseInt(otherSettings.getProperty("MaxPetitionsPerPlayer", "5")); - MAX_PETITIONS_PENDING = Integer.parseInt(otherSettings.getProperty("MaxPetitionsPending", "25")); - JAIL_IS_PVP = Boolean.valueOf(otherSettings.getProperty("JailIsPvp", "true")); - JAIL_DISABLE_CHAT = Boolean.valueOf(otherSettings.getProperty("JailDisableChat", "true")); - DEATH_PENALTY_CHANCE = Integer.parseInt(otherSettings.getProperty("DeathPenaltyChance", "20")); - // //////////// - ENABLE_MODIFY_SKILL_DURATION = Boolean.parseBoolean(otherSettings.getProperty("EnableModifySkillDuration", "false")); - if (ENABLE_MODIFY_SKILL_DURATION) - { - SKILL_DURATION_LIST = new HashMap<>(); - - String[] propertySplit; - propertySplit = otherSettings.getProperty("SkillDurationList", "").split(";"); - - for (String skill : propertySplit) - { - final String[] skillSplit = skill.split(","); - if (skillSplit.length != 2) - { - LOGGER.info("[SkillDurationList]: invalid config property -> SkillDurationList \"" + skill + "\""); - } - else - { - try - { - SKILL_DURATION_LIST.put(Integer.parseInt(skillSplit[0]), Integer.parseInt(skillSplit[1])); - } - catch (NumberFormatException nfe) - { - if (!skill.equals("")) - { - LOGGER.info("[SkillDurationList]: invalid config property -> SkillList \"" + skillSplit[0] + "\"" + skillSplit[1]); - } - } - } - } - } - - USE_SAY_FILTER = Boolean.parseBoolean(otherSettings.getProperty("UseChatFilter", "false")); - CHAT_FILTER_CHARS = otherSettings.getProperty("ChatFilterChars", "[I love L2jMobius]"); - CHAT_FILTER_PUNISHMENT = otherSettings.getProperty("ChatFilterPunishment", "off"); - CHAT_FILTER_PUNISHMENT_PARAM1 = Integer.parseInt(otherSettings.getProperty("ChatFilterPunishmentParam1", "1")); - CHAT_FILTER_PUNISHMENT_PARAM2 = Integer.parseInt(otherSettings.getProperty("ChatFilterPunishmentParam2", "1000")); - - FS_TIME_ATTACK = Integer.parseInt(otherSettings.getProperty("TimeOfAttack", "50")); - FS_TIME_COOLDOWN = Integer.parseInt(otherSettings.getProperty("TimeOfCoolDown", "5")); - FS_TIME_ENTRY = Integer.parseInt(otherSettings.getProperty("TimeOfEntry", "3")); - FS_TIME_WARMUP = Integer.parseInt(otherSettings.getProperty("TimeOfWarmUp", "2")); - FS_PARTY_MEMBER_COUNT = Integer.parseInt(otherSettings.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; - } - - ALLOW_QUAKE_SYSTEM = Boolean.parseBoolean(otherSettings.getProperty("AllowQuakeSystem", "false")); - ENABLE_ANTI_PVP_FARM_MSG = Boolean.parseBoolean(otherSettings.getProperty("EnableAntiPvpFarmMsg", "false")); - } - catch (Exception e) - { - e.printStackTrace(); - throw new Error("Failed to Load " + OTHER_CONFIG_FILE + " File."); - } - } - public static void loadRatesConfig() { try @@ -1748,145 +1387,107 @@ public final class Config } } - public static void loadAltConfig() + public static void loadGeneralConfig() { try { - final Properties altSettings = new Properties(); - final InputStream is = new FileInputStream(new File(ALT_SETTINGS_CONFIG_FILE)); - altSettings.load(is); + final Properties generalSettings = new Properties(); + final InputStream is = new FileInputStream(new File(GENERAL_CONFIG_FILE)); + generalSettings.load(is); is.close(); - /* General Information */ - ALT_GAME_TIREDNESS = Boolean.parseBoolean(altSettings.getProperty("AltGameTiredness", "false")); - ALT_WEIGHT_LIMIT = Double.parseDouble(altSettings.getProperty("AltWeightLimit", "1")); - ALT_GAME_SKILL_LEARN = Boolean.parseBoolean(altSettings.getProperty("AltGameSkillLearn", "false")); - AUTO_LEARN_SKILLS = Boolean.parseBoolean(altSettings.getProperty("AutoLearnSkills", "false")); - ALT_GAME_CANCEL_BOW = altSettings.getProperty("AltGameCancelByHit", "Cast").equalsIgnoreCase("bow") || altSettings.getProperty("AltGameCancelByHit", "Cast").equalsIgnoreCase("all"); - ALT_GAME_CANCEL_CAST = altSettings.getProperty("AltGameCancelByHit", "Cast").equalsIgnoreCase("cast") || altSettings.getProperty("AltGameCancelByHit", "Cast").equalsIgnoreCase("all"); - ALT_GAME_SHIELD_BLOCKS = Boolean.parseBoolean(altSettings.getProperty("AltShieldBlocks", "false")); - ALT_PERFECT_SHLD_BLOCK = Integer.parseInt(altSettings.getProperty("AltPerfectShieldBlockRate", "10")); - ALT_GAME_DELEVEL = Boolean.parseBoolean(altSettings.getProperty("Delevel", "true")); - ALT_GAME_MAGICFAILURES = Boolean.parseBoolean(altSettings.getProperty("MagicFailures", "false")); - ALT_GAME_MOB_ATTACK_AI = Boolean.parseBoolean(altSettings.getProperty("AltGameMobAttackAI", "false")); - ALT_MOB_AGRO_IN_PEACEZONE = Boolean.parseBoolean(altSettings.getProperty("AltMobAgroInPeaceZone", "true")); - ALT_GAME_EXPONENT_XP = Float.parseFloat(altSettings.getProperty("AltGameExponentXp", "0.")); - ALT_GAME_EXPONENT_SP = Float.parseFloat(altSettings.getProperty("AltGameExponentSp", "0.")); - AUTO_LEARN_DIVINE_INSPIRATION = Boolean.parseBoolean(altSettings.getProperty("AutoLearnDivineInspiration", "false")); - DIVINE_SP_BOOK_NEEDED = Boolean.parseBoolean(altSettings.getProperty("DivineInspirationSpBookNeeded", "true")); - ALLOW_CLASS_MASTERS = Boolean.valueOf(altSettings.getProperty("AllowClassMasters", "false")); - CLASS_MASTER_STRIDER_UPDATE = Boolean.valueOf(altSettings.getProperty("AllowClassMastersStriderUpdate", "false")); - CLASS_MASTER_SETTINGS = new ClassMasterSettings(altSettings.getProperty("ConfigClassMaster")); - ALLOW_REMOTE_CLASS_MASTERS = Boolean.valueOf(altSettings.getProperty("AllowRemoteClassMasters", "false")); - ALLOW_CLASS_MASTERS_FIRST_CLASS = Boolean.valueOf(altSettings.getProperty("AllowClassMastersFirstClass", "true")); - ALLOW_CLASS_MASTERS_SECOND_CLASS = Boolean.valueOf(altSettings.getProperty("AllowClassMastersSecondClass", "true")); - ALLOW_CLASS_MASTERS_THIRD_CLASS = Boolean.valueOf(altSettings.getProperty("AllowClassMastersThirdClass", "true")); + SERVER_LIST_TESTSERVER = Boolean.parseBoolean(generalSettings.getProperty("TestServer", "false")); + SERVER_GMONLY = Boolean.valueOf(generalSettings.getProperty("ServerGMOnly", "false")); + ALT_DEV_NO_QUESTS = Boolean.parseBoolean(generalSettings.getProperty("AltDevNoQuests", "false")); + ALT_DEV_NO_SPAWNS = Boolean.parseBoolean(generalSettings.getProperty("AltDevNoSpawns", "false")); + ALT_DEV_NO_SCRIPT = Boolean.parseBoolean(generalSettings.getProperty("AltDevNoScript", "false")); + ALT_DEV_NO_RB = Boolean.parseBoolean(generalSettings.getProperty("AltDevNoRB", "false")); - ALT_GAME_FREIGHTS = Boolean.parseBoolean(altSettings.getProperty("AltGameFreights", "false")); - ALT_GAME_FREIGHT_PRICE = Integer.parseInt(altSettings.getProperty("AltGameFreightPrice", "1000")); - ALT_PARTY_RANGE = Integer.parseInt(altSettings.getProperty("AltPartyRange", "1500")); - REMOVE_CASTLE_CIRCLETS = Boolean.parseBoolean(altSettings.getProperty("RemoveCastleCirclets", "true")); - LIFE_CRYSTAL_NEEDED = Boolean.parseBoolean(altSettings.getProperty("LifeCrystalNeeded", "true")); - SP_BOOK_NEEDED = Boolean.parseBoolean(altSettings.getProperty("SpBookNeeded", "true")); - ES_SP_BOOK_NEEDED = Boolean.parseBoolean(altSettings.getProperty("EnchantSkillSpBookNeeded", "true")); - AUTO_LOOT = altSettings.getProperty("AutoLoot").equalsIgnoreCase("true"); - AUTO_LOOT_BOSS = altSettings.getProperty("AutoLootBoss").equalsIgnoreCase("true"); - AUTO_LOOT_HERBS = altSettings.getProperty("AutoLootHerbs").equalsIgnoreCase("true"); - ALT_GAME_FREE_TELEPORT = Boolean.parseBoolean(altSettings.getProperty("AltFreeTeleporting", "false")); - ALT_RECOMMEND = Boolean.parseBoolean(altSettings.getProperty("AltRecommend", "false")); - ALT_GAME_SUBCLASS_WITHOUT_QUESTS = Boolean.parseBoolean(altSettings.getProperty("AltSubClassWithoutQuests", "false")); - ALT_RESTORE_EFFECTS_ON_SUBCLASS_CHANGE = Boolean.parseBoolean(altSettings.getProperty("AltRestoreEffectOnSub", "false")); - ALT_GAME_VIEWNPC = Boolean.parseBoolean(altSettings.getProperty("AltGameViewNpc", "false")); - ALT_GAME_NEW_CHAR_ALWAYS_IS_NEWBIE = Boolean.parseBoolean(altSettings.getProperty("AltNewCharAlwaysIsNewbie", "false")); - ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH = Boolean.parseBoolean(altSettings.getProperty("AltMembersCanWithdrawFromClanWH", "false")); - ALT_MAX_NUM_OF_CLANS_IN_ALLY = Integer.parseInt(altSettings.getProperty("AltMaxNumOfClansInAlly", "3")); + GMAUDIT = Boolean.valueOf(generalSettings.getProperty("GMAudit", "false")); + LOG_CHAT = Boolean.valueOf(generalSettings.getProperty("LogChat", "false")); + LOG_ITEMS = Boolean.valueOf(generalSettings.getProperty("LogItems", "false")); - ALT_CLAN_MEMBERS_FOR_WAR = Integer.parseInt(altSettings.getProperty("AltClanMembersForWar", "15")); - ALT_CLAN_JOIN_DAYS = Integer.parseInt(altSettings.getProperty("DaysBeforeJoinAClan", "5")); - ALT_CLAN_CREATE_DAYS = Integer.parseInt(altSettings.getProperty("DaysBeforeCreateAClan", "10")); - ALT_CLAN_DISSOLVE_DAYS = Integer.parseInt(altSettings.getProperty("DaysToPassToDissolveAClan", "7")); - ALT_ALLY_JOIN_DAYS_WHEN_LEAVED = Integer.parseInt(altSettings.getProperty("DaysBeforeJoinAllyWhenLeaved", "1")); - ALT_ALLY_JOIN_DAYS_WHEN_DISMISSED = Integer.parseInt(altSettings.getProperty("DaysBeforeJoinAllyWhenDismissed", "1")); - ALT_ACCEPT_CLAN_DAYS_WHEN_DISMISSED = Integer.parseInt(altSettings.getProperty("DaysBeforeAcceptNewClanWhenDismissed", "1")); - ALT_CREATE_ALLY_DAYS_WHEN_DISSOLVED = Integer.parseInt(altSettings.getProperty("DaysBeforeCreateNewAllyWhenDissolved", "10")); + LAZY_CACHE = Boolean.valueOf(generalSettings.getProperty("LazyCache", "false")); - ALT_MANOR_REFRESH_TIME = Integer.parseInt(altSettings.getProperty("AltManorRefreshTime", "20")); - ALT_MANOR_REFRESH_MIN = Integer.parseInt(altSettings.getProperty("AltManorRefreshMin", "00")); - ALT_MANOR_APPROVE_TIME = Integer.parseInt(altSettings.getProperty("AltManorApproveTime", "6")); - ALT_MANOR_APPROVE_MIN = Integer.parseInt(altSettings.getProperty("AltManorApproveMin", "00")); - ALT_MANOR_MAINTENANCE_PERIOD = Integer.parseInt(altSettings.getProperty("AltManorMaintenancePeriod", "360000")); - ALT_MANOR_SAVE_ALL_ACTIONS = Boolean.parseBoolean(altSettings.getProperty("AltManorSaveAllActions", "false")); - ALT_MANOR_SAVE_PERIOD_RATE = Integer.parseInt(altSettings.getProperty("AltManorSavePeriodRate", "2")); + REMOVE_CASTLE_CIRCLETS = Boolean.parseBoolean(generalSettings.getProperty("RemoveCastleCirclets", "true")); + ALT_GAME_VIEWNPC = Boolean.parseBoolean(generalSettings.getProperty("AltGameViewNpc", "false")); + ALT_GAME_NEW_CHAR_ALWAYS_IS_NEWBIE = Boolean.parseBoolean(generalSettings.getProperty("AltNewCharAlwaysIsNewbie", "false")); + ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH = Boolean.parseBoolean(generalSettings.getProperty("AltMembersCanWithdrawFromClanWH", "false")); + ALT_MAX_NUM_OF_CLANS_IN_ALLY = Integer.parseInt(generalSettings.getProperty("AltMaxNumOfClansInAlly", "3")); - ALT_LOTTERY_PRIZE = Integer.parseInt(altSettings.getProperty("AltLotteryPrize", "50000")); - ALT_LOTTERY_TICKET_PRICE = Integer.parseInt(altSettings.getProperty("AltLotteryTicketPrice", "2000")); - ALT_LOTTERY_5_NUMBER_RATE = Float.parseFloat(altSettings.getProperty("AltLottery5NumberRate", "0.6")); - ALT_LOTTERY_4_NUMBER_RATE = Float.parseFloat(altSettings.getProperty("AltLottery4NumberRate", "0.2")); - ALT_LOTTERY_3_NUMBER_RATE = Float.parseFloat(altSettings.getProperty("AltLottery3NumberRate", "0.2")); - ALT_LOTTERY_2_AND_1_NUMBER_PRIZE = Integer.parseInt(altSettings.getProperty("AltLottery2and1NumberPrize", "200")); + ALT_CLAN_MEMBERS_FOR_WAR = Integer.parseInt(generalSettings.getProperty("AltClanMembersForWar", "15")); + ALT_CLAN_JOIN_DAYS = Integer.parseInt(generalSettings.getProperty("DaysBeforeJoinAClan", "5")); + ALT_CLAN_CREATE_DAYS = Integer.parseInt(generalSettings.getProperty("DaysBeforeCreateAClan", "10")); + ALT_CLAN_DISSOLVE_DAYS = Integer.parseInt(generalSettings.getProperty("DaysToPassToDissolveAClan", "7")); + ALT_ALLY_JOIN_DAYS_WHEN_LEAVED = Integer.parseInt(generalSettings.getProperty("DaysBeforeJoinAllyWhenLeaved", "1")); + ALT_ALLY_JOIN_DAYS_WHEN_DISMISSED = Integer.parseInt(generalSettings.getProperty("DaysBeforeJoinAllyWhenDismissed", "1")); + ALT_ACCEPT_CLAN_DAYS_WHEN_DISMISSED = Integer.parseInt(generalSettings.getProperty("DaysBeforeAcceptNewClanWhenDismissed", "1")); + ALT_CREATE_ALLY_DAYS_WHEN_DISSOLVED = Integer.parseInt(generalSettings.getProperty("DaysBeforeCreateNewAllyWhenDissolved", "10")); - ALT_FISH_CHAMPIONSHIP_ENABLED = Boolean.parseBoolean(altSettings.getProperty("AltFishChampionshipEnabled", "true")); - ALT_FISH_CHAMPIONSHIP_REWARD_ITEM = Integer.parseInt(altSettings.getProperty("AltFishChampionshipRewardItemId", "57")); - ALT_FISH_CHAMPIONSHIP_REWARD_1 = Integer.parseInt(altSettings.getProperty("AltFishChampionshipReward1", "800000")); - ALT_FISH_CHAMPIONSHIP_REWARD_2 = Integer.parseInt(altSettings.getProperty("AltFishChampionshipReward2", "500000")); - ALT_FISH_CHAMPIONSHIP_REWARD_3 = Integer.parseInt(altSettings.getProperty("AltFishChampionshipReward3", "300000")); - ALT_FISH_CHAMPIONSHIP_REWARD_4 = Integer.parseInt(altSettings.getProperty("AltFishChampionshipReward4", "200000")); - ALT_FISH_CHAMPIONSHIP_REWARD_5 = Integer.parseInt(altSettings.getProperty("AltFishChampionshipReward5", "100000")); + ALT_MANOR_REFRESH_TIME = Integer.parseInt(generalSettings.getProperty("AltManorRefreshTime", "20")); + ALT_MANOR_REFRESH_MIN = Integer.parseInt(generalSettings.getProperty("AltManorRefreshMin", "00")); + ALT_MANOR_APPROVE_TIME = Integer.parseInt(generalSettings.getProperty("AltManorApproveTime", "6")); + ALT_MANOR_APPROVE_MIN = Integer.parseInt(generalSettings.getProperty("AltManorApproveMin", "00")); + ALT_MANOR_MAINTENANCE_PERIOD = Integer.parseInt(generalSettings.getProperty("AltManorMaintenancePeriod", "360000")); + ALT_MANOR_SAVE_ALL_ACTIONS = Boolean.parseBoolean(generalSettings.getProperty("AltManorSaveAllActions", "false")); + ALT_MANOR_SAVE_PERIOD_RATE = Integer.parseInt(generalSettings.getProperty("AltManorSavePeriodRate", "2")); - BUFFS_MAX_AMOUNT = Byte.parseByte(altSettings.getProperty("MaxBuffAmount", "24")); - DEBUFFS_MAX_AMOUNT = Byte.parseByte(altSettings.getProperty("MaxDebuffAmount", "6")); + ALT_LOTTERY_PRIZE = Integer.parseInt(generalSettings.getProperty("AltLotteryPrize", "50000")); + ALT_LOTTERY_TICKET_PRICE = Integer.parseInt(generalSettings.getProperty("AltLotteryTicketPrice", "2000")); + ALT_LOTTERY_5_NUMBER_RATE = Float.parseFloat(generalSettings.getProperty("AltLottery5NumberRate", "0.6")); + ALT_LOTTERY_4_NUMBER_RATE = Float.parseFloat(generalSettings.getProperty("AltLottery4NumberRate", "0.2")); + ALT_LOTTERY_3_NUMBER_RATE = Float.parseFloat(generalSettings.getProperty("AltLottery3NumberRate", "0.2")); + ALT_LOTTERY_2_AND_1_NUMBER_PRIZE = Integer.parseInt(generalSettings.getProperty("AltLottery2and1NumberPrize", "200")); - // Dimensional Rift Config - RIFT_MIN_PARTY_SIZE = Integer.parseInt(altSettings.getProperty("RiftMinPartySize", "5")); - RIFT_MAX_JUMPS = Integer.parseInt(altSettings.getProperty("MaxRiftJumps", "4")); - RIFT_SPAWN_DELAY = Integer.parseInt(altSettings.getProperty("RiftSpawnDelay", "10000")); - RIFT_AUTO_JUMPS_TIME_MIN = Integer.parseInt(altSettings.getProperty("AutoJumpsDelayMin", "480")); - RIFT_AUTO_JUMPS_TIME_MAX = Integer.parseInt(altSettings.getProperty("AutoJumpsDelayMax", "600")); - RIFT_ENTER_COST_RECRUIT = Integer.parseInt(altSettings.getProperty("RecruitCost", "18")); - RIFT_ENTER_COST_SOLDIER = Integer.parseInt(altSettings.getProperty("SoldierCost", "21")); - RIFT_ENTER_COST_OFFICER = Integer.parseInt(altSettings.getProperty("OfficerCost", "24")); - RIFT_ENTER_COST_CAPTAIN = Integer.parseInt(altSettings.getProperty("CaptainCost", "27")); - RIFT_ENTER_COST_COMMANDER = Integer.parseInt(altSettings.getProperty("CommanderCost", "30")); - RIFT_ENTER_COST_HERO = Integer.parseInt(altSettings.getProperty("HeroCost", "33")); - RIFT_BOSS_ROOM_TIME_MUTIPLY = Float.parseFloat(altSettings.getProperty("BossRoomTimeMultiply", "1.5")); + ALT_FISH_CHAMPIONSHIP_ENABLED = Boolean.parseBoolean(generalSettings.getProperty("AltFishChampionshipEnabled", "true")); + ALT_FISH_CHAMPIONSHIP_REWARD_ITEM = Integer.parseInt(generalSettings.getProperty("AltFishChampionshipRewardItemId", "57")); + ALT_FISH_CHAMPIONSHIP_REWARD_1 = Integer.parseInt(generalSettings.getProperty("AltFishChampionshipReward1", "800000")); + ALT_FISH_CHAMPIONSHIP_REWARD_2 = Integer.parseInt(generalSettings.getProperty("AltFishChampionshipReward2", "500000")); + ALT_FISH_CHAMPIONSHIP_REWARD_3 = Integer.parseInt(generalSettings.getProperty("AltFishChampionshipReward3", "300000")); + ALT_FISH_CHAMPIONSHIP_REWARD_4 = Integer.parseInt(generalSettings.getProperty("AltFishChampionshipReward4", "200000")); + ALT_FISH_CHAMPIONSHIP_REWARD_5 = Integer.parseInt(generalSettings.getProperty("AltFishChampionshipReward5", "100000")); - // Destroy ss - DONT_DESTROY_SS = Boolean.parseBoolean(altSettings.getProperty("DontDestroySS", "false")); + RIFT_MIN_PARTY_SIZE = Integer.parseInt(generalSettings.getProperty("RiftMinPartySize", "5")); + RIFT_MAX_JUMPS = Integer.parseInt(generalSettings.getProperty("MaxRiftJumps", "4")); + RIFT_SPAWN_DELAY = Integer.parseInt(generalSettings.getProperty("RiftSpawnDelay", "10000")); + RIFT_AUTO_JUMPS_TIME_MIN = Integer.parseInt(generalSettings.getProperty("AutoJumpsDelayMin", "480")); + RIFT_AUTO_JUMPS_TIME_MAX = Integer.parseInt(generalSettings.getProperty("AutoJumpsDelayMax", "600")); + RIFT_ENTER_COST_RECRUIT = Integer.parseInt(generalSettings.getProperty("RecruitCost", "18")); + RIFT_ENTER_COST_SOLDIER = Integer.parseInt(generalSettings.getProperty("SoldierCost", "21")); + RIFT_ENTER_COST_OFFICER = Integer.parseInt(generalSettings.getProperty("OfficerCost", "24")); + RIFT_ENTER_COST_CAPTAIN = Integer.parseInt(generalSettings.getProperty("CaptainCost", "27")); + RIFT_ENTER_COST_COMMANDER = Integer.parseInt(generalSettings.getProperty("CommanderCost", "30")); + RIFT_ENTER_COST_HERO = Integer.parseInt(generalSettings.getProperty("HeroCost", "33")); + RIFT_BOSS_ROOM_TIME_MUTIPLY = Float.parseFloat(generalSettings.getProperty("BossRoomTimeMultiply", "1.5")); - // Max level newbie - MAX_LEVEL_NEWBIE = Integer.parseInt(altSettings.getProperty("MaxLevelNewbie", "20")); - // Level when Char lost Newbie status - MAX_LEVEL_NEWBIE_STATUS = Integer.parseInt(altSettings.getProperty("MaxLevelNewbieStatus", "40")); + DONT_DESTROY_SS = Boolean.parseBoolean(generalSettings.getProperty("DontDestroySS", "false")); - STANDARD_RESPAWN_DELAY = Integer.parseInt(altSettings.getProperty("StandardRespawnDelay", "180")); - ALT_RECOMMENDATIONS_NUMBER = Integer.parseInt(altSettings.getProperty("AltMaxRecommendationNumber", "255")); + STANDARD_RESPAWN_DELAY = Integer.parseInt(generalSettings.getProperty("StandardRespawnDelay", "180")); - RAID_RANKING_1ST = Integer.parseInt(altSettings.getProperty("1stRaidRankingPoints", "1250")); - RAID_RANKING_2ND = Integer.parseInt(altSettings.getProperty("2ndRaidRankingPoints", "900")); - RAID_RANKING_3RD = Integer.parseInt(altSettings.getProperty("3rdRaidRankingPoints", "700")); - RAID_RANKING_4TH = Integer.parseInt(altSettings.getProperty("4thRaidRankingPoints", "600")); - RAID_RANKING_5TH = Integer.parseInt(altSettings.getProperty("5thRaidRankingPoints", "450")); - RAID_RANKING_6TH = Integer.parseInt(altSettings.getProperty("6thRaidRankingPoints", "350")); - RAID_RANKING_7TH = Integer.parseInt(altSettings.getProperty("7thRaidRankingPoints", "300")); - RAID_RANKING_8TH = Integer.parseInt(altSettings.getProperty("8thRaidRankingPoints", "200")); - RAID_RANKING_9TH = Integer.parseInt(altSettings.getProperty("9thRaidRankingPoints", "150")); - RAID_RANKING_10TH = Integer.parseInt(altSettings.getProperty("10thRaidRankingPoints", "100")); - RAID_RANKING_UP_TO_50TH = Integer.parseInt(altSettings.getProperty("UpTo50thRaidRankingPoints", "25")); - RAID_RANKING_UP_TO_100TH = Integer.parseInt(altSettings.getProperty("UpTo100thRaidRankingPoints", "12")); + RAID_RANKING_1ST = Integer.parseInt(generalSettings.getProperty("1stRaidRankingPoints", "1250")); + RAID_RANKING_2ND = Integer.parseInt(generalSettings.getProperty("2ndRaidRankingPoints", "900")); + RAID_RANKING_3RD = Integer.parseInt(generalSettings.getProperty("3rdRaidRankingPoints", "700")); + RAID_RANKING_4TH = Integer.parseInt(generalSettings.getProperty("4thRaidRankingPoints", "600")); + RAID_RANKING_5TH = Integer.parseInt(generalSettings.getProperty("5thRaidRankingPoints", "450")); + RAID_RANKING_6TH = Integer.parseInt(generalSettings.getProperty("6thRaidRankingPoints", "350")); + RAID_RANKING_7TH = Integer.parseInt(generalSettings.getProperty("7thRaidRankingPoints", "300")); + RAID_RANKING_8TH = Integer.parseInt(generalSettings.getProperty("8thRaidRankingPoints", "200")); + RAID_RANKING_9TH = Integer.parseInt(generalSettings.getProperty("9thRaidRankingPoints", "150")); + RAID_RANKING_10TH = Integer.parseInt(generalSettings.getProperty("10thRaidRankingPoints", "100")); + RAID_RANKING_UP_TO_50TH = Integer.parseInt(generalSettings.getProperty("UpTo50thRaidRankingPoints", "25")); + RAID_RANKING_UP_TO_100TH = Integer.parseInt(generalSettings.getProperty("UpTo100thRaidRankingPoints", "12")); - DISABLE_TUTORIAL = Boolean.parseBoolean(altSettings.getProperty("DisableTutorial", "false")); - EXPERTISE_PENALTY = Boolean.parseBoolean(altSettings.getProperty("ExpertisePenalty", "true")); - MASTERY_PENALTY = Boolean.parseBoolean(altSettings.getProperty("MasteryPenalty", "false")); - LEVEL_TO_GET_PENALTY = Integer.parseInt(altSettings.getProperty("LevelToGetPenalty", "20")); + EXPERTISE_PENALTY = Boolean.parseBoolean(generalSettings.getProperty("ExpertisePenalty", "true")); + MASTERY_PENALTY = Boolean.parseBoolean(generalSettings.getProperty("MasteryPenalty", "false")); + LEVEL_TO_GET_PENALTY = Integer.parseInt(generalSettings.getProperty("LevelToGetPenalty", "20")); - MASTERY_WEAPON_PENALTY = Boolean.parseBoolean(altSettings.getProperty("MasteryWeaponPenality", "false")); - LEVEL_TO_GET_WEAPON_PENALTY = Integer.parseInt(altSettings.getProperty("LevelToGetWeaponPenalty", "20")); + MASTERY_WEAPON_PENALTY = Boolean.parseBoolean(generalSettings.getProperty("MasteryWeaponPenality", "false")); + LEVEL_TO_GET_WEAPON_PENALTY = Integer.parseInt(generalSettings.getProperty("LevelToGetWeaponPenalty", "20")); - /** augmentation start reuse time **/ - ACTIVE_AUGMENTS_START_REUSE_TIME = Integer.parseInt(altSettings.getProperty("AugmStartReuseTime", "0")); + ACTIVE_AUGMENTS_START_REUSE_TIME = Integer.parseInt(generalSettings.getProperty("AugmStartReuseTime", "0")); INVUL_NPC_LIST = new ArrayList<>(); - final String t = altSettings.getProperty("InvulNpcList", "30001-32132,35092-35103,35142-35146,35176-35187,35218-35232,35261-35278,35308-35319,35352-35367,35382-35407,35417-35427,35433-35469,35497-35513,35544-35587,35600-35617,35623-35628,35638-35640,35644,35645,50007,70010,99999"); + final String t = generalSettings.getProperty("InvulNpcList", "30001-32132,35092-35103,35142-35146,35176-35187,35218-35232,35261-35278,35308-35319,35352-35367,35382-35407,35417-35427,35433-35469,35497-35513,35544-35587,35600-35617,35623-35628,35638-35640,35644,35645,50007,70010,99999"); String as[]; final int k = (as = t.split(",")).length; for (int j = 0; j < k; j++) @@ -1906,29 +1507,224 @@ public final class Config INVUL_NPC_LIST.add(Integer.valueOf(Integer.parseInt(t2))); } } - DISABLE_ATTACK_NPC_TYPE = Boolean.parseBoolean(altSettings.getProperty("DisableAttackToNpcs", "false")); - ALLOWED_NPC_TYPES = altSettings.getProperty("AllowedNPCTypes"); + DISABLE_ATTACK_NPC_TYPE = Boolean.parseBoolean(generalSettings.getProperty("DisableAttackToNpcs", "false")); + ALLOWED_NPC_TYPES = generalSettings.getProperty("AllowedNPCTypes"); LIST_ALLOWED_NPC_TYPES = new ArrayList<>(); for (String npc_type : ALLOWED_NPC_TYPES.split(",")) { LIST_ALLOWED_NPC_TYPES.add(npc_type); } - NPC_ATTACKABLE = Boolean.parseBoolean(altSettings.getProperty("NpcAttackable", "false")); + NPC_ATTACKABLE = Boolean.parseBoolean(generalSettings.getProperty("NpcAttackable", "false")); - SELL_BY_ITEM = Boolean.parseBoolean(altSettings.getProperty("SellByItem", "false")); - SELL_ITEM = Integer.parseInt(altSettings.getProperty("SellItem", "57")); + SELL_BY_ITEM = Boolean.parseBoolean(generalSettings.getProperty("SellByItem", "false")); + SELL_ITEM = Integer.parseInt(generalSettings.getProperty("SellItem", "57")); - ALLOWED_SUBCLASS = Integer.parseInt(altSettings.getProperty("AllowedSubclass", "3")); - BASE_SUBCLASS_LEVEL = Byte.parseByte(altSettings.getProperty("BaseSubclassLevel", "40")); - MAX_SUBCLASS_LEVEL = Byte.parseByte(altSettings.getProperty("MaxSubclassLevel", "81")); + ALT_MOBS_STATS_BONUS = Boolean.parseBoolean(generalSettings.getProperty("AltMobsStatsBonus", "true")); + ALT_PETS_STATS_BONUS = Boolean.parseBoolean(generalSettings.getProperty("AltPetsStatsBonus", "true")); - ALT_MOBS_STATS_BONUS = Boolean.parseBoolean(altSettings.getProperty("AltMobsStatsBonus", "true")); - ALT_PETS_STATS_BONUS = Boolean.parseBoolean(altSettings.getProperty("AltPetsStatsBonus", "true")); + RAID_HP_REGEN_MULTIPLIER = Double.parseDouble(generalSettings.getProperty("RaidHpRegenMultiplier", "100")) / 100; + RAID_MP_REGEN_MULTIPLIER = Double.parseDouble(generalSettings.getProperty("RaidMpRegenMultiplier", "100")) / 100; + RAID_P_DEFENCE_MULTIPLIER = Double.parseDouble(generalSettings.getProperty("RaidPhysicalDefenceMultiplier", "100")) / 100; + RAID_M_DEFENCE_MULTIPLIER = Double.parseDouble(generalSettings.getProperty("RaidMagicalDefenceMultiplier", "100")) / 100; + RAID_MINION_RESPAWN_TIMER = Integer.parseInt(generalSettings.getProperty("RaidMinionRespawnTime", "300000")); + RAID_MIN_RESPAWN_MULTIPLIER = Float.parseFloat(generalSettings.getProperty("RaidMinRespawnMultiplier", "1.0")); + RAID_MAX_RESPAWN_MULTIPLIER = Float.parseFloat(generalSettings.getProperty("RaidMaxRespawnMultiplier", "1.0")); + + CLICK_TASK = Integer.parseInt(generalSettings.getProperty("ClickTaskDelay", "50")); + + WYVERN_SPEED = Integer.parseInt(generalSettings.getProperty("WyvernSpeed", "100")); + STRIDER_SPEED = Integer.parseInt(generalSettings.getProperty("StriderSpeed", "80")); + ALLOW_WYVERN_UPGRADER = Boolean.valueOf(generalSettings.getProperty("AllowWyvernUpgrader", "false")); + + ENABLE_AIO_SYSTEM = Boolean.parseBoolean(generalSettings.getProperty("EnableAioSystem", "true")); + ALLOW_AIO_NCOLOR = Boolean.parseBoolean(generalSettings.getProperty("AllowAioNameColor", "true")); + AIO_NCOLOR = Integer.decode("0x" + generalSettings.getProperty("AioNameColor", "88AA88")); + ALLOW_AIO_TCOLOR = Boolean.parseBoolean(generalSettings.getProperty("AllowAioTitleColor", "true")); + AIO_TCOLOR = Integer.decode("0x" + generalSettings.getProperty("AioTitleColor", "88AA88")); + ALLOW_AIO_USE_GK = Boolean.parseBoolean(generalSettings.getProperty("AllowAioUseGk", "false")); + ALLOW_AIO_USE_CM = Boolean.parseBoolean(generalSettings.getProperty("AllowAioUseClassMaster", "false")); + ALLOW_AIO_IN_EVENTS = Boolean.parseBoolean(generalSettings.getProperty("AllowAioInEvents", "false")); + if (ENABLE_AIO_SYSTEM) + { + final String[] AioSkillsSplit = generalSettings.getProperty("AioSkills", "").split(";"); + AIO_SKILLS = new HashMap<>(AioSkillsSplit.length); + for (String skill : AioSkillsSplit) + { + final String[] skillSplit = skill.split(","); + if (skillSplit.length != 2) + { + LOGGER.info("[Aio System]: invalid config property in " + GENERAL_CONFIG_FILE + " -> AioSkills \"" + skill + "\""); + } + else + { + try + { + AIO_SKILLS.put(Integer.parseInt(skillSplit[0]), Integer.parseInt(skillSplit[1])); + } + catch (NumberFormatException nfe) + { + if (!skill.equals("")) + { + LOGGER.info("[Aio System]: invalid config property in " + GENERAL_CONFIG_FILE + " -> AioSkills \"" + skillSplit[0] + "\"" + skillSplit[1]); + } + } + } + } + } + + PET_RENT_NPC = generalSettings.getProperty("ListPetRentNpc", "30827"); + LIST_PET_RENT_NPC = new ArrayList<>(); + for (String id : PET_RENT_NPC.split(",")) + { + LIST_PET_RENT_NPC.add(Integer.parseInt(id)); + } + NONDROPPABLE_ITEMS = generalSettings.getProperty("ListOfNonDroppableItems", "1147,425,1146,461,10,2368,7,6,2370,2369,5598"); + + LIST_NONDROPPABLE_ITEMS = new ArrayList<>(); + for (String id : NONDROPPABLE_ITEMS.split(",")) + { + LIST_NONDROPPABLE_ITEMS.add(Integer.parseInt(id)); + } + + JAIL_IS_PVP = Boolean.valueOf(generalSettings.getProperty("JailIsPvp", "true")); + JAIL_DISABLE_CHAT = Boolean.valueOf(generalSettings.getProperty("JailDisableChat", "true")); + + USE_SAY_FILTER = Boolean.parseBoolean(generalSettings.getProperty("UseChatFilter", "false")); + CHAT_FILTER_CHARS = generalSettings.getProperty("ChatFilterChars", "[I love L2jMobius]"); + CHAT_FILTER_PUNISHMENT = generalSettings.getProperty("ChatFilterPunishment", "off"); + CHAT_FILTER_PUNISHMENT_PARAM1 = Integer.parseInt(generalSettings.getProperty("ChatFilterPunishmentParam1", "1")); + CHAT_FILTER_PUNISHMENT_PARAM2 = Integer.parseInt(generalSettings.getProperty("ChatFilterPunishmentParam2", "1000")); + + FS_TIME_ATTACK = Integer.parseInt(generalSettings.getProperty("TimeOfAttack", "50")); + FS_TIME_COOLDOWN = Integer.parseInt(generalSettings.getProperty("TimeOfCoolDown", "5")); + FS_TIME_ENTRY = Integer.parseInt(generalSettings.getProperty("TimeOfEntry", "3")); + FS_TIME_WARMUP = Integer.parseInt(generalSettings.getProperty("TimeOfWarmUp", "2")); + FS_PARTY_MEMBER_COUNT = Integer.parseInt(generalSettings.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; + } + + ALLOW_QUAKE_SYSTEM = Boolean.parseBoolean(generalSettings.getProperty("AllowQuakeSystem", "false")); + ENABLE_ANTI_PVP_FARM_MSG = Boolean.parseBoolean(generalSettings.getProperty("EnableAntiPvpFarmMsg", "false")); + + ANNOUNCE_CASTLE_LORDS = Boolean.parseBoolean(generalSettings.getProperty("AnnounceCastleLords", "false")); + ANNOUNCE_MAMMON_SPAWN = Boolean.parseBoolean(generalSettings.getProperty("AnnounceMammonSpawn", "true")); + ALLOW_GUARDS = Boolean.valueOf(generalSettings.getProperty("AllowGuards", "false")); + + AUTODESTROY_ITEM_AFTER = Integer.parseInt(generalSettings.getProperty("AutoDestroyDroppedItemAfter", "0")); + HERB_AUTO_DESTROY_TIME = Integer.parseInt(generalSettings.getProperty("AutoDestroyHerbTime", "15")) * 1000; + PROTECTED_ITEMS = generalSettings.getProperty("ListOfProtectedItems"); + LIST_PROTECTED_ITEMS = new ArrayList<>(); + for (String id : PROTECTED_ITEMS.split(",")) + { + LIST_PROTECTED_ITEMS.add(Integer.parseInt(id)); + } + DESTROY_DROPPED_PLAYER_ITEM = Boolean.valueOf(generalSettings.getProperty("DestroyPlayerDroppedItem", "false")); + DESTROY_EQUIPABLE_PLAYER_ITEM = Boolean.valueOf(generalSettings.getProperty("DestroyEquipableItem", "false")); + SAVE_DROPPED_ITEM = Boolean.valueOf(generalSettings.getProperty("SaveDroppedItem", "false")); + EMPTY_DROPPED_ITEM_TABLE_AFTER_LOAD = Boolean.valueOf(generalSettings.getProperty("EmptyDroppedItemTableAfterLoad", "false")); + SAVE_DROPPED_ITEM_INTERVAL = Integer.parseInt(generalSettings.getProperty("SaveDroppedItemInterval", "0")) * 60000; + CLEAR_DROPPED_ITEM_TABLE = Boolean.valueOf(generalSettings.getProperty("ClearDroppedItemTable", "false")); + + PRECISE_DROP_CALCULATION = Boolean.valueOf(generalSettings.getProperty("PreciseDropCalculation", "true")); + MULTIPLE_ITEM_DROP = Boolean.valueOf(generalSettings.getProperty("MultipleItemDrop", "true")); + + ALLOW_WAREHOUSE = Boolean.valueOf(generalSettings.getProperty("AllowWarehouse", "true")); + WAREHOUSE_CACHE = Boolean.valueOf(generalSettings.getProperty("WarehouseCache", "false")); + WAREHOUSE_CACHE_TIME = Integer.parseInt(generalSettings.getProperty("WarehouseCacheTime", "15")); + ALLOW_FREIGHT = Boolean.valueOf(generalSettings.getProperty("AllowFreight", "true")); + ALLOW_WEAR = Boolean.valueOf(generalSettings.getProperty("AllowWear", "false")); + WEAR_DELAY = Integer.parseInt(generalSettings.getProperty("WearDelay", "5")); + WEAR_PRICE = Integer.parseInt(generalSettings.getProperty("WearPrice", "10")); + ALLOW_LOTTERY = Boolean.valueOf(generalSettings.getProperty("AllowLottery", "false")); + ALLOW_RACE = Boolean.valueOf(generalSettings.getProperty("AllowRace", "false")); + ALLOW_RENTPET = Boolean.valueOf(generalSettings.getProperty("AllowRentPet", "false")); + ALLOW_DISCARDITEM = Boolean.valueOf(generalSettings.getProperty("AllowDiscardItem", "true")); + ALLOWFISHING = Boolean.valueOf(generalSettings.getProperty("AllowFishing", "false")); + ALLOW_MANOR = Boolean.parseBoolean(generalSettings.getProperty("AllowManor", "false")); + ALLOW_BOAT = Boolean.valueOf(generalSettings.getProperty("AllowBoat", "false")); + ALLOW_NPC_WALKERS = Boolean.valueOf(generalSettings.getProperty("AllowNpcWalkers", "true")); + ALLOW_CURSED_WEAPONS = Boolean.valueOf(generalSettings.getProperty("AllowCursedWeapons", "false")); + + DEFAULT_GLOBAL_CHAT = generalSettings.getProperty("GlobalChat", "ON"); + DEFAULT_TRADE_CHAT = generalSettings.getProperty("TradeChat", "ON"); + MAX_CHAT_LENGTH = Integer.parseInt(generalSettings.getProperty("MaxChatLength", "100")); + + TRADE_CHAT_IS_NOOBLE = Boolean.valueOf(generalSettings.getProperty("TradeChatIsNooble", "false")); + TRADE_CHAT_WITH_PVP = Boolean.valueOf(generalSettings.getProperty("TradeChatWithPvP", "false")); + TRADE_PVP_AMOUNT = Integer.parseInt(generalSettings.getProperty("TradePvPAmount", "800")); + GLOBAL_CHAT_WITH_PVP = Boolean.valueOf(generalSettings.getProperty("GlobalChatWithPvP", "false")); + GLOBAL_PVP_AMOUNT = Integer.parseInt(generalSettings.getProperty("GlobalPvPAmount", "1500")); + + ENABLE_COMMUNITY_BOARD = Boolean.valueOf(generalSettings.getProperty("EnableCommunityBoard", "true")); + BBS_DEFAULT = generalSettings.getProperty("BBSDefault", "_bbshome"); + + ZONE_TOWN = Integer.parseInt(generalSettings.getProperty("ZoneTown", "0")); + + MAX_DRIFT_RANGE = Integer.parseInt(generalSettings.getProperty("MaxDriftRange", "300")); + + MIN_NPC_ANIMATION = Integer.parseInt(generalSettings.getProperty("MinNpcAnimation", "5")); + MAX_NPC_ANIMATION = Integer.parseInt(generalSettings.getProperty("MaxNpcAnimation", "60")); + MIN_MONSTER_ANIMATION = Integer.parseInt(generalSettings.getProperty("MinMonsterAnimation", "5")); + MAX_MONSTER_ANIMATION = Integer.parseInt(generalSettings.getProperty("MaxMonsterAnimation", "60")); + + SHOW_NPC_LVL = Boolean.valueOf(generalSettings.getProperty("ShowNpcLevel", "false")); + + FORCE_INVENTORY_UPDATE = Boolean.valueOf(generalSettings.getProperty("ForceInventoryUpdate", "false")); + + FORCE_COMPLETE_STATUS_UPDATE = Boolean.valueOf(generalSettings.getProperty("ForceCompletePlayerStatusUpdate", "true")); + + AUTODELETE_INVALID_QUEST_DATA = Boolean.valueOf(generalSettings.getProperty("AutoDeleteInvalidQuestData", "false")); + + DELETE_DAYS = Integer.parseInt(generalSettings.getProperty("DeleteCharAfterDays", "7")); + + DEFAULT_PUNISH = Integer.parseInt(generalSettings.getProperty("DefaultPunish", "2")); + DEFAULT_PUNISH_PARAM = Integer.parseInt(generalSettings.getProperty("DefaultPunishParam", "0")); + + GRIDS_ALWAYS_ON = Boolean.parseBoolean(generalSettings.getProperty("GridsAlwaysOn", "false")); + GRID_NEIGHBOR_TURNON_TIME = Integer.parseInt(generalSettings.getProperty("GridNeighborTurnOnTime", "30")); + GRID_NEIGHBOR_TURNOFF_TIME = Integer.parseInt(generalSettings.getProperty("GridNeighborTurnOffTime", "300")); + + USE_3D_MAP = Boolean.valueOf(generalSettings.getProperty("Use3DMap", "false")); + + PATH_NODE_RADIUS = Integer.parseInt(generalSettings.getProperty("PathNodeRadius", "50")); + NEW_NODE_ID = Integer.parseInt(generalSettings.getProperty("NewNodeId", "7952")); + SELECTED_NODE_ID = Integer.parseInt(generalSettings.getProperty("NewNodeId", "7952")); + LINKED_NODE_ID = Integer.parseInt(generalSettings.getProperty("NewNodeId", "7952")); + NEW_NODE_TYPE = generalSettings.getProperty("NewNodeType", "npc"); + + COUNT_PACKETS = Boolean.valueOf(generalSettings.getProperty("CountPacket", "false")); + DUMP_PACKET_COUNTS = Boolean.valueOf(generalSettings.getProperty("DumpPacketCounts", "false")); + DUMP_INTERVAL_SECONDS = Integer.parseInt(generalSettings.getProperty("PacketDumpInterval", "60")); + + MINIMUM_UPDATE_DISTANCE = Integer.parseInt(generalSettings.getProperty("MaximumUpdateDistance", "50")); + MINIMUN_UPDATE_TIME = Integer.parseInt(generalSettings.getProperty("MinimumUpdateTime", "500")); + KNOWNLIST_FORGET_DELAY = Integer.parseInt(generalSettings.getProperty("KnownListForgetDelay", "10000")); + + HIGH_RATE_SERVER_DROPS = Boolean.valueOf(generalSettings.getProperty("HighRateServerDrops", "false")); } catch (Exception e) { e.printStackTrace(); - throw new Error("Failed to Load " + ALT_SETTINGS_CONFIG_FILE + " File."); + throw new Error("Failed to Load " + GENERAL_CONFIG_FILE + " File."); } } @@ -2238,60 +2034,6 @@ public final class Config } } - public static void loadDevConfig() - { - try - { - final Properties devSettings = new Properties(); - final InputStream is = new FileInputStream(new File(DEVELOPER_CONFIG_FILE)); - devSettings.load(is); - is.close(); - - ASSERT = Boolean.parseBoolean(devSettings.getProperty("Assert", "false")); - SERVER_LIST_TESTSERVER = Boolean.parseBoolean(devSettings.getProperty("TestServer", "false")); - BETASERVER = Boolean.parseBoolean(devSettings.getProperty("BetaServer", "false")); - SERVER_LIST_BRACKET = Boolean.valueOf(devSettings.getProperty("ServerListBrackets", "false")); - SERVER_LIST_CLOCK = Boolean.valueOf(devSettings.getProperty("ServerListClock", "false")); - SERVER_GMONLY = Boolean.valueOf(devSettings.getProperty("ServerGMOnly", "false")); - ALT_DEV_NO_QUESTS = Boolean.parseBoolean(devSettings.getProperty("AltDevNoQuests", "false")); - ALT_DEV_NO_SPAWNS = Boolean.parseBoolean(devSettings.getProperty("AltDevNoSpawns", "false")); - ALT_DEV_NO_SCRIPT = Boolean.parseBoolean(devSettings.getProperty("AltDevNoScript", "false")); - ALT_DEV_NO_RB = Boolean.parseBoolean(devSettings.getProperty("AltDevNoRB", "false")); - - REQUEST_ID = Integer.parseInt(devSettings.getProperty("RequestServerID", "0")); - ACCEPT_ALTERNATE_ID = Boolean.parseBoolean(devSettings.getProperty("AcceptAlternateID", "true")); - - CNAME_TEMPLATE = devSettings.getProperty("CnameTemplate", ".*"); - PET_NAME_TEMPLATE = devSettings.getProperty("PetNameTemplate", ".*"); - CLAN_NAME_TEMPLATE = devSettings.getProperty("ClanNameTemplate", ".*"); - ALLY_NAME_TEMPLATE = devSettings.getProperty("AllyNameTemplate", ".*"); - MAX_CHARACTERS_NUMBER_PER_ACCOUNT = Integer.parseInt(devSettings.getProperty("CharMaxNumber", "0")); - - MAXIMUM_ONLINE_USERS = Integer.parseInt(devSettings.getProperty("MaximumOnlineUsers", "100")); - - MIN_PROTOCOL_REVISION = Integer.parseInt(devSettings.getProperty("MinProtocolRevision", "660")); - MAX_PROTOCOL_REVISION = Integer.parseInt(devSettings.getProperty("MaxProtocolRevision", "665")); - if (MIN_PROTOCOL_REVISION > MAX_PROTOCOL_REVISION) - { - throw new Error("MinProtocolRevision is bigger than MaxProtocolRevision in server configuration file."); - } - - GMAUDIT = Boolean.valueOf(devSettings.getProperty("GMAudit", "false")); - LOG_CHAT = Boolean.valueOf(devSettings.getProperty("LogChat", "false")); - LOG_ITEMS = Boolean.valueOf(devSettings.getProperty("LogItems", "false")); - - SCHEDULED_THREAD_POOL_COUNT = Integer.parseInt(devSettings.getProperty("ScheduledThreadPoolCount", "40")); - INSTANT_THREAD_POOL_COUNT = Integer.parseInt(devSettings.getProperty("InstantThreadPoolCount", "20")); - - LAZY_CACHE = Boolean.valueOf(devSettings.getProperty("LazyCache", "false")); - } - catch (Exception e) - { - e.printStackTrace(); - throw new Error("Failed to Load " + DEVELOPER_CONFIG_FILE + " File."); - } - } - public static void loadCraftConfig() { try @@ -2502,7 +2244,7 @@ public final class Config try { final Properties CustomServerSettings = new Properties(); - final InputStream is = new FileInputStream(new File(CUSTOM_SERVER_CONFIG_FILE)); + final InputStream is = new FileInputStream(new File(OTHER_CONFIG_FILE)); CustomServerSettings.load(is); is.close(); @@ -2623,7 +2365,7 @@ public final class Config catch (Exception e) { e.printStackTrace(); - throw new Error("Failed to Load " + CUSTOM_SERVER_CONFIG_FILE + " File."); + throw new Error("Failed to Load " + OTHER_CONFIG_FILE + " File."); } } @@ -3347,7 +3089,7 @@ public final class Config try { final Properties bossSettings = new Properties(); - final InputStream is = new FileInputStream(new File(BOSS_CONFIG_FILE)); + final InputStream is = new FileInputStream(new File(RAIDBOSS_CONFIG_FILE)); bossSettings.load(is); is.close(); @@ -3532,7 +3274,193 @@ public final class Config catch (Exception e) { e.printStackTrace(); - throw new Error("Failed to Load " + BOSS_CONFIG_FILE + " File."); + throw new Error("Failed to Load " + RAIDBOSS_CONFIG_FILE + " File."); + } + } + + public static void loadCharacterConfig() + { + try + { + final L2Properties characterSettings = new L2Properties(CHARACTER_CONFIG_FILE); + + AUTO_LOOT = characterSettings.getProperty("AutoLoot").equalsIgnoreCase("true"); + AUTO_LOOT_HERBS = characterSettings.getProperty("AutoLootHerbs").equalsIgnoreCase("true"); + AUTO_LOOT_BOSS = characterSettings.getProperty("AutoLootBoss").equalsIgnoreCase("true"); + AUTO_LEARN_SKILLS = Boolean.parseBoolean(characterSettings.getProperty("AutoLearnSkills", "false")); + AUTO_LEARN_DIVINE_INSPIRATION = Boolean.parseBoolean(characterSettings.getProperty("AutoLearnDivineInspiration", "false")); + LIFE_CRYSTAL_NEEDED = Boolean.parseBoolean(characterSettings.getProperty("LifeCrystalNeeded", "true")); + SP_BOOK_NEEDED = Boolean.parseBoolean(characterSettings.getProperty("SpBookNeeded", "true")); + ES_SP_BOOK_NEEDED = Boolean.parseBoolean(characterSettings.getProperty("EnchantSkillSpBookNeeded", "true")); + DIVINE_SP_BOOK_NEEDED = Boolean.parseBoolean(characterSettings.getProperty("DivineInspirationSpBookNeeded", "true")); + ALT_GAME_SKILL_LEARN = Boolean.parseBoolean(characterSettings.getProperty("AltGameSkillLearn", "false")); + ALLOWED_SUBCLASS = Integer.parseInt(characterSettings.getProperty("AllowedSubclass", "3")); + BASE_SUBCLASS_LEVEL = Byte.parseByte(characterSettings.getProperty("BaseSubclassLevel", "40")); + MAX_SUBCLASS_LEVEL = Byte.parseByte(characterSettings.getProperty("MaxSubclassLevel", "81")); + ALT_GAME_SUBCLASS_WITHOUT_QUESTS = Boolean.parseBoolean(characterSettings.getProperty("AltSubClassWithoutQuests", "false")); + ALT_RESTORE_EFFECTS_ON_SUBCLASS_CHANGE = Boolean.parseBoolean(characterSettings.getProperty("AltRestoreEffectOnSub", "false")); + ALT_PARTY_RANGE = Integer.parseInt(characterSettings.getProperty("AltPartyRange", "1500")); + ALT_WEIGHT_LIMIT = Double.parseDouble(characterSettings.getProperty("AltWeightLimit", "1")); + ALT_GAME_DELEVEL = Boolean.parseBoolean(characterSettings.getProperty("Delevel", "true")); + ALT_GAME_MAGICFAILURES = Boolean.parseBoolean(characterSettings.getProperty("MagicFailures", "false")); + ALT_GAME_CANCEL_CAST = characterSettings.getProperty("AltGameCancelByHit", "Cast").equalsIgnoreCase("cast") || characterSettings.getProperty("AltGameCancelByHit", "Cast").equalsIgnoreCase("all"); + ALT_GAME_CANCEL_BOW = characterSettings.getProperty("AltGameCancelByHit", "Cast").equalsIgnoreCase("bow") || characterSettings.getProperty("AltGameCancelByHit", "Cast").equalsIgnoreCase("all"); + ALT_GAME_SHIELD_BLOCKS = Boolean.parseBoolean(characterSettings.getProperty("AltShieldBlocks", "false")); + ALT_PERFECT_SHLD_BLOCK = Integer.parseInt(characterSettings.getProperty("AltPerfectShieldBlockRate", "10")); + ALT_GAME_MOB_ATTACK_AI = Boolean.parseBoolean(characterSettings.getProperty("AltGameMobAttackAI", "false")); + ALT_MOB_AGRO_IN_PEACEZONE = Boolean.parseBoolean(characterSettings.getProperty("AltMobAgroInPeaceZone", "true")); + ALT_GAME_FREIGHTS = Boolean.parseBoolean(characterSettings.getProperty("AltGameFreights", "false")); + ALT_GAME_FREIGHT_PRICE = Integer.parseInt(characterSettings.getProperty("AltGameFreightPrice", "1000")); + ALT_GAME_EXPONENT_XP = Float.parseFloat(characterSettings.getProperty("AltGameExponentXp", "0.")); + ALT_GAME_EXPONENT_SP = Float.parseFloat(characterSettings.getProperty("AltGameExponentSp", "0.")); + ALT_GAME_TIREDNESS = Boolean.parseBoolean(characterSettings.getProperty("AltGameTiredness", "false")); + ALT_GAME_FREE_TELEPORT = Boolean.parseBoolean(characterSettings.getProperty("AltFreeTeleporting", "false")); + ALT_RECOMMEND = Boolean.parseBoolean(characterSettings.getProperty("AltRecommend", "false")); + ALT_RECOMMENDATIONS_NUMBER = Integer.parseInt(characterSettings.getProperty("AltMaxRecommendationNumber", "255")); + MAX_CHARACTERS_NUMBER_PER_ACCOUNT = Integer.parseInt(characterSettings.getProperty("CharMaxNumber", "0")); + MAX_LEVEL_NEWBIE = Integer.parseInt(characterSettings.getProperty("MaxLevelNewbie", "20")); + MAX_LEVEL_NEWBIE_STATUS = Integer.parseInt(characterSettings.getProperty("MaxLevelNewbieStatus", "40")); + DISABLE_TUTORIAL = Boolean.parseBoolean(characterSettings.getProperty("DisableTutorial", "false")); + STARTING_ADENA = Integer.parseInt(characterSettings.getProperty("StartingAdena", "100")); + STARTING_AA = Integer.parseInt(characterSettings.getProperty("StartingAncientAdena", "0")); + CUSTOM_STARTER_ITEMS_ENABLED = Boolean.parseBoolean(characterSettings.getProperty("CustomStarterItemsEnabled", "false")); + if (CUSTOM_STARTER_ITEMS_ENABLED) + { + STARTING_CUSTOM_ITEMS_M.clear(); + String[] propertySplit = characterSettings.getProperty("StartingCustomItemsMage", "57,0").split(";"); + for (String reward : propertySplit) + { + final String[] rewardSplit = reward.split(","); + if (rewardSplit.length != 2) + { + LOGGER.warning("StartingCustomItemsMage[Config.load()]: invalid config property -> StartingCustomItemsMage \"" + reward + "\""); + } + else + { + try + { + STARTING_CUSTOM_ITEMS_M.add(new int[] + { + Integer.parseInt(rewardSplit[0]), + Integer.parseInt(rewardSplit[1]) + }); + } + catch (NumberFormatException nfe) + { + if (!reward.isEmpty()) + { + LOGGER.warning("StartingCustomItemsMage[Config.load()]: invalid config property -> StartingCustomItemsMage \"" + reward + "\""); + } + } + } + } + + STARTING_CUSTOM_ITEMS_F.clear(); + propertySplit = characterSettings.getProperty("StartingCustomItemsFighter", "57,0").split(";"); + for (String reward : propertySplit) + { + final String[] rewardSplit = reward.split(","); + if (rewardSplit.length != 2) + { + LOGGER.warning("StartingCustomItemsFighter[Config.load()]: invalid config property -> StartingCustomItemsFighter \"" + reward + "\""); + } + else + { + try + { + STARTING_CUSTOM_ITEMS_F.add(new int[] + { + Integer.parseInt(rewardSplit[0]), + Integer.parseInt(rewardSplit[1]) + }); + } + catch (NumberFormatException nfe) + { + if (!reward.isEmpty()) + { + LOGGER.warning("StartingCustomItemsFighter[Config.load()]: invalid config property -> StartingCustomItemsFighter \"" + reward + "\""); + } + } + } + } + } + INVENTORY_MAXIMUM_NO_DWARF = Integer.parseInt(characterSettings.getProperty("MaximumSlotsForNoDwarf", "80")); + INVENTORY_MAXIMUM_DWARF = Integer.parseInt(characterSettings.getProperty("MaximumSlotsForDwarf", "100")); + INVENTORY_MAXIMUM_GM = Integer.parseInt(characterSettings.getProperty("MaximumSlotsForGMPlayer", "250")); + MAX_ITEM_IN_PACKET = Math.max(INVENTORY_MAXIMUM_NO_DWARF, Math.max(INVENTORY_MAXIMUM_DWARF, INVENTORY_MAXIMUM_GM)); + WAREHOUSE_SLOTS_DWARF = Integer.parseInt(characterSettings.getProperty("MaximumWarehouseSlotsForDwarf", "120")); + WAREHOUSE_SLOTS_NO_DWARF = Integer.parseInt(characterSettings.getProperty("MaximumWarehouseSlotsForNoDwarf", "100")); + WAREHOUSE_SLOTS_CLAN = Integer.parseInt(characterSettings.getProperty("MaximumWarehouseSlotsForClan", "150")); + FREIGHT_SLOTS = Integer.parseInt(characterSettings.getProperty("MaximumFreightSlots", "20")); + MAX_PVTSTORE_SLOTS_DWARF = Integer.parseInt(characterSettings.getProperty("MaxPvtStoreSlotsDwarf", "5")); + MAX_PVTSTORE_SLOTS_OTHER = Integer.parseInt(characterSettings.getProperty("MaxPvtStoreSlotsOther", "4")); + HP_REGEN_MULTIPLIER = Double.parseDouble(characterSettings.getProperty("HpRegenMultiplier", "100")) / 100; + MP_REGEN_MULTIPLIER = Double.parseDouble(characterSettings.getProperty("MpRegenMultiplier", "100")) / 100; + CP_REGEN_MULTIPLIER = Double.parseDouble(characterSettings.getProperty("CpRegenMultiplier", "100")) / 100; + ENABLE_KEYBOARD_MOVEMENT = Boolean.parseBoolean(characterSettings.getProperty("KeyboardMovement", "true")); + UNSTUCK_INTERVAL = Integer.parseInt(characterSettings.getProperty("UnstuckInterval", "300")); + PLAYER_SPAWN_PROTECTION = Integer.parseInt(characterSettings.getProperty("PlayerSpawnProtection", "0")); + PLAYER_TELEPORT_PROTECTION = Integer.parseInt(characterSettings.getProperty("PlayerTeleportProtection", "0")); + PLAYER_FAKEDEATH_UP_PROTECTION = Integer.parseInt(characterSettings.getProperty("PlayerFakeDeathUpProtection", "0")); + DEEPBLUE_DROP_RULES = Boolean.parseBoolean(characterSettings.getProperty("UseDeepBlueDropRules", "true")); + PARTY_XP_CUTOFF_METHOD = characterSettings.getProperty("PartyXpCutoffMethod", "percentage"); + PARTY_XP_CUTOFF_PERCENT = Double.parseDouble(characterSettings.getProperty("PartyXpCutoffPercent", "3.")); + PARTY_XP_CUTOFF_LEVEL = Integer.parseInt(characterSettings.getProperty("PartyXpCutoffLevel", "30")); + RESPAWN_RESTORE_CP = Double.parseDouble(characterSettings.getProperty("RespawnRestoreCP", "0")) / 100; + RESPAWN_RESTORE_HP = Double.parseDouble(characterSettings.getProperty("RespawnRestoreHP", "70")) / 100; + RESPAWN_RESTORE_MP = Double.parseDouble(characterSettings.getProperty("RespawnRestoreMP", "70")) / 100; + RESPAWN_RANDOM_ENABLED = Boolean.parseBoolean(characterSettings.getProperty("RespawnRandomInTown", "false")); + RESPAWN_RANDOM_MAX_OFFSET = Integer.parseInt(characterSettings.getProperty("RespawnRandomMaxOffset", "50")); + PETITIONING_ALLOWED = Boolean.parseBoolean(characterSettings.getProperty("PetitioningAllowed", "true")); + MAX_PETITIONS_PER_PLAYER = Integer.parseInt(characterSettings.getProperty("MaxPetitionsPerPlayer", "5")); + MAX_PETITIONS_PENDING = Integer.parseInt(characterSettings.getProperty("MaxPetitionsPending", "25")); + DEATH_PENALTY_CHANCE = Integer.parseInt(characterSettings.getProperty("DeathPenaltyChance", "20")); + EFFECT_CANCELING = Boolean.valueOf(characterSettings.getProperty("CancelLesserEffect", "true")); + STORE_SKILL_COOLTIME = Boolean.parseBoolean(characterSettings.getProperty("StoreSkillCooltime", "true")); + BUFFS_MAX_AMOUNT = Byte.parseByte(characterSettings.getProperty("MaxBuffAmount", "24")); + DEBUFFS_MAX_AMOUNT = Byte.parseByte(characterSettings.getProperty("MaxDebuffAmount", "6")); + ENABLE_MODIFY_SKILL_DURATION = Boolean.parseBoolean(characterSettings.getProperty("EnableModifySkillDuration", "false")); + if (ENABLE_MODIFY_SKILL_DURATION) + { + SKILL_DURATION_LIST = new HashMap<>(); + + String[] propertySplit; + propertySplit = characterSettings.getProperty("SkillDurationList", "").split(";"); + + for (String skill : propertySplit) + { + final String[] skillSplit = skill.split(","); + if (skillSplit.length != 2) + { + LOGGER.info("[SkillDurationList]: invalid config property -> SkillDurationList \"" + skill + "\""); + } + else + { + try + { + SKILL_DURATION_LIST.put(Integer.parseInt(skillSplit[0]), Integer.parseInt(skillSplit[1])); + } + catch (NumberFormatException nfe) + { + if (!skill.equals("")) + { + LOGGER.info("[SkillDurationList]: invalid config property -> SkillList \"" + skillSplit[0] + "\"" + skillSplit[1]); + } + } + } + } + } + ALLOW_CLASS_MASTERS = Boolean.valueOf(characterSettings.getProperty("AllowClassMasters", "false")); + CLASS_MASTER_STRIDER_UPDATE = Boolean.valueOf(characterSettings.getProperty("AllowClassMastersStriderUpdate", "false")); + ALLOW_CLASS_MASTERS_FIRST_CLASS = Boolean.valueOf(characterSettings.getProperty("AllowClassMastersFirstClass", "true")); + ALLOW_CLASS_MASTERS_SECOND_CLASS = Boolean.valueOf(characterSettings.getProperty("AllowClassMastersSecondClass", "true")); + ALLOW_CLASS_MASTERS_THIRD_CLASS = Boolean.valueOf(characterSettings.getProperty("AllowClassMastersThirdClass", "true")); + CLASS_MASTER_SETTINGS = new ClassMasterSettings(characterSettings.getProperty("ConfigClassMaster")); + ALLOW_REMOTE_CLASS_MASTERS = Boolean.valueOf(characterSettings.getProperty("AllowRemoteClassMasters", "false")); + } + catch (Exception e) + { + LOGGER.warning("Failed to load " + CHARACTER_CONFIG_FILE + " file."); } } @@ -3540,18 +3468,18 @@ public final class Config { try { - final L2Properties p = new L2Properties(DAEMONS_CONFIG_FILE); + final L2Properties daemonsSettings = new L2Properties(DAEMONS_CONFIG_FILE); - AUTOSAVE_INITIAL_TIME = Long.parseLong(p.getProperty("AutoSaveInitial", "300000")); - AUTOSAVE_DELAY_TIME = Long.parseLong(p.getProperty("AutoSaveDelay", "900000")); - CHECK_CONNECTION_INITIAL_TIME = Long.parseLong(p.getProperty("CheckConnectionInitial", "300000")); - CHECK_CONNECTION_DELAY_TIME = Long.parseLong(p.getProperty("CheckConnectionDelay", "900000")); - CHECK_CONNECTION_INACTIVITY_TIME = Long.parseLong(p.getProperty("CheckConnectionInactivityTime", "90000")); - CLEANDB_INITIAL_TIME = Long.parseLong(p.getProperty("CleanDBInitial", "300000")); - CLEANDB_DELAY_TIME = Long.parseLong(p.getProperty("CleanDBDelay", "900000")); - CHECK_TELEPORT_ZOMBIE_DELAY_TIME = Long.parseLong(p.getProperty("CheckTeleportZombiesDelay", "90000")); - DEADLOCKCHECK_INTIAL_TIME = Long.parseLong(p.getProperty("DeadLockCheck", "0")); - DEADLOCKCHECK_DELAY_TIME = Long.parseLong(p.getProperty("DeadLockDelay", "0")); + AUTOSAVE_INITIAL_TIME = Long.parseLong(daemonsSettings.getProperty("AutoSaveInitial", "300000")); + AUTOSAVE_DELAY_TIME = Long.parseLong(daemonsSettings.getProperty("AutoSaveDelay", "900000")); + CHECK_CONNECTION_INITIAL_TIME = Long.parseLong(daemonsSettings.getProperty("CheckConnectionInitial", "300000")); + CHECK_CONNECTION_DELAY_TIME = Long.parseLong(daemonsSettings.getProperty("CheckConnectionDelay", "900000")); + CHECK_CONNECTION_INACTIVITY_TIME = Long.parseLong(daemonsSettings.getProperty("CheckConnectionInactivityTime", "90000")); + CLEANDB_INITIAL_TIME = Long.parseLong(daemonsSettings.getProperty("CleanDBInitial", "300000")); + CLEANDB_DELAY_TIME = Long.parseLong(daemonsSettings.getProperty("CleanDBDelay", "900000")); + CHECK_TELEPORT_ZOMBIE_DELAY_TIME = Long.parseLong(daemonsSettings.getProperty("CheckTeleportZombiesDelay", "90000")); + DEADLOCKCHECK_INTIAL_TIME = Long.parseLong(daemonsSettings.getProperty("DeadLockCheck", "0")); + DEADLOCKCHECK_DELAY_TIME = Long.parseLong(daemonsSettings.getProperty("DeadLockDelay", "0")); } catch (Exception e) { @@ -3896,14 +3824,10 @@ public final class Config // Load system loadIdFactoryConfig(); - // Load developer parameters - loadDevConfig(); - // Head - loadOptionsConfig(); - loadOtherConfig(); loadRatesConfig(); - loadAltConfig(); + loadCharacterConfig(); + loadGeneralConfig(); load7sConfig(); loadCHConfig(); loadElitCHConfig(); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/OlympiadLogger.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/OlympiadLogger.java index 3623071b41..a263085111 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/OlympiadLogger.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/OlympiadLogger.java @@ -23,8 +23,6 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.Logger; -import org.l2jmobius.Config; - public class OlympiadLogger { private static final Logger LOGGER = Logger.getLogger(OlympiadLogger.class.getName()); @@ -69,15 +67,4 @@ public class OlympiadLogger add(text, null); } } - - public static final void Assert(boolean exp, String cmt) - { - if (exp || !Config.ASSERT) - { - return; - } - - LOGGER.info("Assertion error [" + cmt + "]"); - Thread.dumpStack(); - } } \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/object/L2ObjectHashMap.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/object/L2ObjectHashMap.java index 82b1e70171..bfffa0e147 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/object/L2ObjectHashMap.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/object/L2ObjectHashMap.java @@ -20,7 +20,6 @@ import java.util.Iterator; import java.util.NoSuchElementException; import java.util.logging.Logger; -import org.l2jmobius.Config; import org.l2jmobius.gameserver.model.WorldObject; /** @@ -213,10 +212,6 @@ public final class L2ObjectHashMapextends L2ObjectMap expand(); } final int hashcode = obj.getObjectId(); - if (Config.ASSERT) - { - assert hashcode > 0; - } int seed = hashcode; final int incr = 1 + (((seed >> 5) + 1) % (_table.length - 1)); int ntry = 0; @@ -255,11 +250,6 @@ public final class L2ObjectHashMapextends L2ObjectMap { return; } - // this should never happen - if (Config.ASSERT) - { - assert obj.getObjectId() != _table[pos].getObjectId(); - } // if there was no collisions at this slot, and we found a free // slot previously - use found slot if ((slot >= 0) && (_keys[pos] > 0)) @@ -300,10 +290,6 @@ public final class L2ObjectHashMapextends L2ObjectMap public synchronized void remove(T obj) { final int hashcode = obj.getObjectId(); - if (Config.ASSERT) - { - assert hashcode > 0; - } int seed = hashcode; final int incr = 1 + (((seed >> 5) + 1) % (_table.length - 1)); int ntry = 0; @@ -418,10 +404,6 @@ public final class L2ObjectHashMapextends L2ObjectMap continue; } final int hashcode = _keys[i] & 0x7FFFFFFF; - if (Config.ASSERT) - { - assert hashcode == obj.getObjectId(); - } int seed = hashcode; final int incr = 1 + (((seed >> 5) + 1) % (newSize - 1)); int ntry = 0; @@ -430,10 +412,6 @@ public final class L2ObjectHashMapextends L2ObjectMap final int pos = (seed % newSize) & 0x7FFFFFFF; if (newTable[pos] == null) { - if (Config.ASSERT) - { - assert (newKeys[pos] == 0) && (hashcode != 0); - } // found an empty slot without previous collisions, // but use previously found slot newKeys[pos] = hashcode; diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/object/L2ObjectHashSet.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/object/L2ObjectHashSet.java index ca910f9c00..0a7b51f522 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/object/L2ObjectHashSet.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/object/L2ObjectHashSet.java @@ -20,7 +20,6 @@ import java.util.Iterator; import java.util.NoSuchElementException; import java.util.logging.Logger; -import org.l2jmobius.Config; import org.l2jmobius.gameserver.model.WorldObject; /** @@ -174,10 +173,6 @@ public final class L2ObjectHashSetextends L2ObjectSet expand(); } final int hashcode = obj.getObjectId(); - if (Config.ASSERT) - { - assert hashcode > 0; - } int seed = hashcode; final int incr = 1 + (((seed >> 5) + 1) % (_table.length - 1)); int ntry = 0; @@ -211,11 +206,6 @@ public final class L2ObjectHashSetextends L2ObjectSet { return; } - // this should never happen - if (Config.ASSERT) - { - assert obj.getObjectId() != _table[pos].getObjectId(); - } // if there was no collisions at this slot, and we found a free // slot previously - use found slot if ((slot >= 0) && ((_collisions[pos >> 5] & (1 << (pos & 31))) == 0)) @@ -252,10 +242,6 @@ public final class L2ObjectHashSetextends L2ObjectSet return; } final int hashcode = obj.getObjectId(); - if (Config.ASSERT) - { - assert hashcode > 0; - } int seed = hashcode; final int incr = 1 + (((seed >> 5) + 1) % (_table.length - 1)); int ntry = 0; @@ -307,10 +293,6 @@ public final class L2ObjectHashSetextends L2ObjectSet return false; } final int hashcode = obj.getObjectId(); - if (Config.ASSERT) - { - assert hashcode > 0; - } int seed = hashcode; final int incr = 1 + (((seed >> 5) + 1) % (size - 1)); int ntry = 0; diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/Inventory.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/Inventory.java index a5ffd5dff1..1d36d3b131 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/Inventory.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/Inventory.java @@ -22,7 +22,6 @@ import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; -import org.l2jmobius.Config; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.datatables.SkillTable; import org.l2jmobius.gameserver.datatables.sql.ArmorSetsTable; @@ -196,11 +195,6 @@ public abstract class Inventory extends ItemContainer return; } - if (Config.ASSERT) - { - assert null == getPaperdollItem(PAPERDOLL_LRHAND); - } - if (item.getItemType() == WeaponType.BOW) { ItemInstance arrow = getPaperdollItem(PAPERDOLL_LHAND); @@ -234,11 +228,6 @@ public abstract class Inventory extends ItemContainer return; } - if (Config.ASSERT) - { - assert item == getPaperdollItem(PAPERDOLL_LRHAND); - } - if (item.getItemType() == WeaponType.BOW) { ItemInstance arrow = findArrowForBow(item.getItem()); @@ -889,11 +878,6 @@ public abstract class Inventory extends ItemContainer */ public synchronized void addPaperdollListener(PaperdollListener listener) { - if (Config.ASSERT) - { - assert !_paperdollListeners.contains(listener); - } - _paperdollListeners.add(listener); } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/ObjectPosition.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/ObjectPosition.java index d7598d19e5..bb685f9f08 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/ObjectPosition.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/ObjectPosition.java @@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.model; import java.util.logging.Logger; -import org.l2jmobius.Config; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -58,11 +57,6 @@ public class ObjectPosition */ public final void setXYZ(int x, int y, int z) { - if (Config.ASSERT) - { - assert getWorldRegion() != null; - } - setWorldPosition(x, y, z); try @@ -110,10 +104,6 @@ public class ObjectPosition */ public final void setXYZInvisible(int x, int y, int z) { - if (Config.ASSERT) - { - assert getWorldRegion() == null; - } if (x > World.MAP_MAX_X) { x = World.MAP_MAX_X - 5000; diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/WorldObject.java index bba6a1a8fb..648af2f696 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -109,31 +109,16 @@ public abstract class WorldObject public final int getX() { - if (Config.ASSERT) - { - assert (getPosition().getWorldRegion() != null) || _isVisible; - } - return getPosition().getX(); } public final int getY() { - if (Config.ASSERT) - { - assert (getPosition().getWorldRegion() != null) || _isVisible; - } - return getPosition().getY(); } public final int getZ() { - if (Config.ASSERT) - { - assert (getPosition().getWorldRegion() != null) || _isVisible; - } - return getPosition().getZ(); } @@ -158,11 +143,6 @@ public abstract class WorldObject */ public final void decayMe() { - if (Config.ASSERT) - { - assert getPosition().getWorldRegion() != null; - } - // Remove the WorldObject from the world _isVisible = false; World.getInstance().removeVisibleObject(this, getPosition().getWorldRegion()); @@ -198,16 +178,6 @@ public abstract class WorldObject */ public final void pickupMe(Creature creature) // NOTE: Should move this function into ItemInstance because it does not apply to Creature { - if (Config.ASSERT) - { - assert this instanceof ItemInstance; - } - - if (Config.ASSERT) - { - assert getPosition().getWorldRegion() != null; - } - WorldRegion oldregion = getPosition().getWorldRegion(); // Create a server->client GetItem packet to pick up the ItemInstance @@ -264,11 +234,6 @@ public abstract class WorldObject */ public final void spawnMe() { - if (Config.ASSERT) - { - assert (getPosition().getWorldRegion() == null) && (getPosition().getWorldPosition().getX() != 0) && (getPosition().getWorldPosition().getY() != 0) && (getPosition().getWorldPosition().getZ() != 0); - } - synchronized (this) { // Set the x,y,z position of the WorldObject spawn and update its _worldregion @@ -291,11 +256,6 @@ public abstract class WorldObject public final void spawnMe(int x, int y, int z) { - if (Config.ASSERT) - { - assert getPosition().getWorldRegion() == null; - } - synchronized (this) { // Set the x,y,z position of the WorldObject spawn and update its _worldregion diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/WorldRegion.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/WorldRegion.java index 402f447c09..a72bf3785a 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/WorldRegion.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/WorldRegion.java @@ -339,11 +339,6 @@ public final class WorldRegion */ public void addVisibleObject(WorldObject object) { - if (Config.ASSERT) - { - assert object.getWorldRegion() == this; - } - if (object == null) { return; @@ -372,11 +367,6 @@ public final class WorldRegion */ public void removeVisibleObject(WorldObject object) { - if (Config.ASSERT) - { - assert (object.getWorldRegion() == this) || (object.getWorldRegion() == null); - } - if (object == null) { return; diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/ItemInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/ItemInstance.java index 29fa559332..09c841af91 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/ItemInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/ItemInstance.java @@ -353,11 +353,6 @@ public final class ItemInstance extends WorldObject */ public int getEquipSlot() { - if (Config.ASSERT) - { - assert (_loc == ItemLocation.PAPERDOLL) || (_loc == ItemLocation.PET_EQUIP) || (_loc == ItemLocation.FREIGHT); - } - return _locData; } @@ -1162,11 +1157,6 @@ public final class ItemInstance extends WorldObject */ public final void dropMe(Creature dropper, int x, int y, int z) { - if (Config.ASSERT) - { - assert getPosition().getWorldRegion() == null; - } - if (Config.PATHFINDING && (dropper != null)) { Location dropDest = GeoEngine.getInstance().canMoveToTargetLoc(dropper.getX(), dropper.getY(), dropper.getZ(), x, y, z, dropper.getInstanceId()); @@ -1207,11 +1197,6 @@ public final class ItemInstance extends WorldObject */ private void updateInDb() { - if (Config.ASSERT) - { - assert _existsInDb; - } - if (_wear) { return; @@ -1257,11 +1242,6 @@ public final class ItemInstance extends WorldObject return; } - if (Config.ASSERT) - { - assert !_existsInDb && (getObjectId() != 0); - } - try (Connection con = DatabaseFactory.getConnection()) { PreparedStatement statement = con.prepareStatement("INSERT INTO items (owner_id,item_id,count,loc,loc_data,enchant_level,price_sell,price_buy,object_id,custom_type1,custom_type2,mana_left) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"); @@ -1299,11 +1279,6 @@ public final class ItemInstance extends WorldObject return; } - if (Config.ASSERT) - { - assert _existsInDb; - } - // delete augmentation data if (isAugmented()) { @@ -1470,11 +1445,6 @@ public final class ItemInstance extends WorldObject */ public int getLocationSlot() { - if (Config.ASSERT) - { - assert (_loc == ItemLocation.PAPERDOLL) || (_loc == ItemLocation.PET_EQUIP) || (_loc == ItemLocation.FREIGHT) || (_loc == ItemLocation.INVENTORY); - } - return _locData; } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java index 4f24fa2865..05d6c8fdf3 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java @@ -550,13 +550,6 @@ public class EnterWorld extends GameClientPacket player.removeSkill(3628, true); } - // If it's a Beta server all players got GM SPEED skill for better testing - if (Config.BETASERVER) - { - player.addSkill(SkillTable.getInstance().getInfo(7029, 4), true); - player.sendMessage("Server is on Beta mode. Skill Gm Haste 4 added for better testing."); - } - // Send all skills to char player.sendSkillList(); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/ProtocolVersion.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/ProtocolVersion.java index 0fed2f9439..d8b9242801 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/ProtocolVersion.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/ProtocolVersion.java @@ -36,7 +36,11 @@ public final class ProtocolVersion extends GameClientPacket @Override protected void runImpl() { - if ((_version < Config.MIN_PROTOCOL_REVISION) || (_version > Config.MAX_PROTOCOL_REVISION)) + if ((_version == 65534) || (_version == -2)) // Ping + { + getClient().close((GameServerPacket) null); + } + else if ((_version < Config.MIN_PROTOCOL_REVISION) || (_version > Config.MAX_PROTOCOL_REVISION)) { LOGGER.info("Client: " + getClient() + " -> Protocol Revision: " + _version + " is invalid. Minimum is " + Config.MIN_PROTOCOL_REVISION + " and Maximum is " + Config.MAX_PROTOCOL_REVISION + " are supported. Closing connection."); LOGGER.warning("Wrong Protocol Version " + _version);