diff options
author | Haru <haru@dotalux.com> | 2016-02-13 15:38:23 +0100 |
---|---|---|
committer | Haru <haru@dotalux.com> | 2016-08-19 21:32:26 +0200 |
commit | 6cdb1e5ec2daa295b388d6c3a920b6cffe4193ce (patch) | |
tree | e4d67ff2bb7e80b6cab693f9ec24dac47b3a27a4 | |
parent | c0e59c874786cdf3bc5863090934b8e18ba0336d (diff) | |
download | hercules-6cdb1e5ec2daa295b388d6c3a920b6cffe4193ce.tar.gz hercules-6cdb1e5ec2daa295b388d6c3a920b6cffe4193ce.tar.bz2 hercules-6cdb1e5ec2daa295b388d6c3a920b6cffe4193ce.tar.xz hercules-6cdb1e5ec2daa295b388d6c3a920b6cffe4193ce.zip |
Ported battle.conf to libconfig
Ported to modern Hercules and cleaned up from Panikon's commits: 44fea0b3cdba6901599265220228ba4359b1f96d, 9cba05bc0811e638bbaaa6cff887d0b2c9872560
Signed-off-by: Haru <haru@dotalux.com>
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | conf/battle.conf | 61 | ||||
-rw-r--r-- | conf/battle/battleground.conf | 17 | ||||
-rw-r--r-- | conf/battle/feature.conf | 34 | ||||
-rw-r--r-- | conf/battle/gm.conf | 42 | ||||
-rw-r--r-- | conf/battle/guild.conf | 50 | ||||
-rw-r--r-- | conf/battle/homunc.conf | 45 | ||||
-rw-r--r-- | conf/battle/status.conf | 24 | ||||
-rw-r--r-- | conf/import-tmpl/battle.conf | 32 | ||||
-rw-r--r-- | conf/import-tmpl/battle_conf.txt | 0 | ||||
-rw-r--r-- | conf/map/battle.conf | 87 | ||||
-rw-r--r-- | conf/map/battle/battle.conf (renamed from conf/battle/battle.conf) | 59 | ||||
-rw-r--r-- | conf/map/battle/battleground.conf | 40 | ||||
-rw-r--r-- | conf/map/battle/client.conf (renamed from conf/battle/client.conf) | 75 | ||||
-rw-r--r-- | conf/map/battle/drops.conf (renamed from conf/battle/drops.conf) | 45 | ||||
-rw-r--r-- | conf/map/battle/exp.conf (renamed from conf/battle/exp.conf) | 49 | ||||
-rw-r--r-- | conf/map/battle/feature.conf | 58 | ||||
-rw-r--r-- | conf/map/battle/gm.conf | 66 | ||||
-rw-r--r-- | conf/map/battle/guild.conf | 73 | ||||
-rw-r--r-- | conf/map/battle/homunc.conf | 68 | ||||
-rw-r--r-- | conf/map/battle/items.conf (renamed from conf/battle/items.conf) | 69 | ||||
-rw-r--r-- | conf/map/battle/misc.conf (renamed from conf/battle/misc.conf) | 99 | ||||
-rw-r--r-- | conf/map/battle/monster.conf (renamed from conf/battle/monster.conf) | 77 | ||||
-rw-r--r-- | conf/map/battle/party.conf (renamed from conf/battle/party.conf) | 49 | ||||
-rw-r--r-- | conf/map/battle/pet.conf (renamed from conf/battle/pet.conf) | 55 | ||||
-rw-r--r-- | conf/map/battle/player.conf (renamed from conf/battle/player.conf) | 86 | ||||
-rw-r--r-- | conf/map/battle/skill.conf (renamed from conf/battle/skill.conf) | 89 | ||||
-rw-r--r-- | conf/map/battle/status.conf | 47 | ||||
-rw-r--r-- | conf/readme.txt | 4 | ||||
-rw-r--r-- | src/common/HPM.c | 49 | ||||
-rw-r--r-- | src/common/HPM.h | 5 | ||||
-rw-r--r-- | src/map/atcommand.c | 2 | ||||
-rw-r--r-- | src/map/battle.c | 156 | ||||
-rw-r--r-- | src/map/battle.h | 9 | ||||
-rw-r--r-- | src/map/map.c | 7 | ||||
-rwxr-xr-x | tools/configconverter.pl | 403 |
36 files changed, 1538 insertions, 594 deletions
diff --git a/.gitignore b/.gitignore index ce3a5c14f..8957156d3 100644 --- a/.gitignore +++ b/.gitignore @@ -60,7 +60,6 @@ Thumbs.db # /conf/ /conf/import/*.conf -/conf/import/battle_conf.txt /conf/import/msg_conf.txt # /log/ diff --git a/conf/battle.conf b/conf/battle.conf deleted file mode 100644 index 1eddfae35..000000000 --- a/conf/battle.conf +++ /dev/null @@ -1,61 +0,0 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -// Splitted up into multiple files by Skotlex. -//-------------------------------------------------------------- - -//General battle-related settings. -import: conf/battle/battle.conf - -//Settings specific to the client. -import: conf/battle/client.conf - -//General drop-related configs. -import: conf/battle/drops.conf - -//Experience rates, exp penalties, stats and max level settings. -import: conf/battle/exp.conf - -//GM levels, atcommands and hack-related configs. -import: conf/battle/gm.conf - -//Guild and WoE settings -import: conf/battle/guild.conf - -//Battleground settings -import: conf/battle/battleground.conf - -//Item/card-specific and crafting related options. -import: conf/battle/items.conf - -//Mob related configuration -import: conf/battle/monster.conf - -//Party related configuration -import: conf/battle/party.conf - -//Pet related configuration -import: conf/battle/pet.conf - -//Homunc related configuration -import: conf/battle/homunc.conf - -//Player specific settings -import: conf/battle/player.conf - -//Skill related settings -import: conf/battle/skill.conf - -//Status change related settings -import: conf/battle/status.conf - -//Feature control (on/off) settings -import: conf/battle/feature.conf - -// Anything else that didn't fit anywhere else. -// Includes duel, day/night, mute/manner, log settings. -import: conf/battle/misc.conf - -//Your custom config goes here. -import: conf/import/battle_conf.txt diff --git a/conf/battle/battleground.conf b/conf/battle/battleground.conf deleted file mode 100644 index b4c0b2fbd..000000000 --- a/conf/battle/battleground.conf +++ /dev/null @@ -1,17 +0,0 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) -// Note 2: Value is in percents (100 means 100%) -// Note 3: Value is a bit field. If no description is given, -// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun) -//-------------------------------------------------------------- - -// Flee penalty on BG grounds. -// NOTE: It's %, not absolute, so 20 is -20% of your total flee -bg_flee_penalty: 20 - -// Interval before updating the bg-member map mini-dots (milliseconds) -bg_update_interval: 1000 diff --git a/conf/battle/feature.conf b/conf/battle/feature.conf deleted file mode 100644 index 000bc318b..000000000 --- a/conf/battle/feature.conf +++ /dev/null @@ -1,34 +0,0 @@ -//-------------------------------------------------------------- -// Hercules Feature Configuration File -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) -// Note 2: Value is in percents (100 means 100%) -// Note 3: Value is a bit field. If no description is given, -// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun) -//-------------------------------------------------------------- - -// Buying store (Note 1) -// Requires: 2010-04-27aRagexeRE or later -feature.buying_store: on - -// Search stores (Note 1) -// Requires: 2010-08-03aRagexeRE or later -feature.search_stores: on - -// Atcommand suggestions (Note 1) -// If one type incomplete atcommand, it will suggest the complete ones. -feature.atcommand_suggestions: off - -// Banking (Note 1) -// Requires: 2013-07-24aRagexe or later -feature.banking: on - -// Auction (Note 1) -// Feature became unstable on clients 2012 onwards (exact date not known), -// it has been fixed on clients 2013-05-15 onwards however. -feature.auction: off - -// Roulette (Note 1) -// Requires: 2014-10-22bRagexe or later -// Off by default while test version is out; enable at your own risk -- the mean dev. -feature.roulette: off diff --git a/conf/battle/gm.conf b/conf/battle/gm.conf deleted file mode 100644 index dc70bc6ca..000000000 --- a/conf/battle/gm.conf +++ /dev/null @@ -1,42 +0,0 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) -// Note 2: Value is in percents (100 means 100%) -//-------------------------------------------------------------- - -// The maximum quantity of monsters that can be summoned per GM command (0 denotes an unlimited quantity) -atcommand_spawn_quantity_limit: 100 - -// Maximum number of slave-clones that can be have by using the @slaveclone at command. (0 denotes unlimited quantity) -atcommand_slave_clone_limit: 25 - -// If 'no', commands require exact player name. If 'yes', entering a partial -// name will work, as long as there's only one match from all players in the -// current map server. -partial_name_scan: yes - -// (@) @allstats/@str/@agi/@vit/@int/@dex/@luk -// allow gms to bypass the maximum stat parameter? ( if yes gm stats can go up to 32k ) default: no -atcommand_max_stat_bypass: no - -// Ban people that try trade dupe. -// Duration of the ban, in minutes (default: 5). To disable the ban, set 0. -ban_hack_trade: 5 - -// requires RENEWAL_DROP to be enabled (src/map/config/renewal.h) -// modifies @mobinfo to display the users' real drop rate as per renewal_drop formula -// modifies @iteminfo to not display the minimum item drop rate (since it can't tell the mob level) -atcommand_mobinfo_type: 0 - -// Ignore warpable area configuration. -// Set the minimum group id to ignore invalid cells when warping. -// Default group is 2. Use 100 to disable this setting. -gm_ignore_warpable_area: 2 - -// Should atcommands trigger level up events for NPCs? (Note 1) -// This option is for @baselevelup and @joblevelup -// Default: no -atcommand_levelup_events: no diff --git a/conf/battle/guild.conf b/conf/battle/guild.conf deleted file mode 100644 index 59fc78c51..000000000 --- a/conf/battle/guild.conf +++ /dev/null @@ -1,50 +0,0 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) -// Note 2: Value is in percents (100 means 100%) -//-------------------------------------------------------------- - -// When making a guild, an Emperium is consumed? (Note 1) -guild_emperium_check: yes - -// Maximum tax limit on a guild member. -guild_exp_limit: 50 - -// Maximum castles one guild can own (0 = unlimited) -guild_max_castles: 0 - -// Restart guild skills cooldown by relog? (Note 1) -// When "no", you relog with the same cooldown remaining as from when you -// logged out, "yes" restarts the cooldown upon login to its full duration. -guild_skill_relog_delay: no - -// Damage adjustments for WOE battles against defending Guild monsters (Note 2) -castle_defense_rate: 100 - -// Flee penalty on gvg grounds. Official value is 20 (Note 2) -// NOTE: It's %, not absolute, so 20 is -20% of your total flee -gvg_flee_penalty: 20 - -// Can the 'Glory of Guild' skill be learnt in the Guild window, -// and does changing emblems require it? (Note 1) -// P.S: This skill is not implemented on official servers -require_glory_guild: no - -// Limit Guild alliances. Value is 0 to 3. -// If you want to change this value, clear the guild alliance table. -// Default is 3 -max_guild_alliance: 3 - -// When to re-display the guild notice -// Upon teleporting (regardless of changing maps): 2 (official) -// Upon changing maps: 1 -// Do not re-display: 0 (disabled) -guild_notice_changemap: 2 - -// Can guild members invite/expel members inside guild castles in WoE/GvG? (Note 1) -// default: no -guild_castle_invite: no -guild_castle_expulsion: no diff --git a/conf/battle/homunc.conf b/conf/battle/homunc.conf deleted file mode 100644 index a33eab8ea..000000000 --- a/conf/battle/homunc.conf +++ /dev/null @@ -1,45 +0,0 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) -// Note 2: Value is in percents (100 means 100%) -// Note 3: Value is a bit field. If no description is given, -// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun) -//-------------------------------------------------------------- - -// Homunculus setting (Note 3) -// Activates various 'quirks' that makes them behave unlike normal characters. -// 0x001: Can't be targetted by support skills (except for their master) -// 0x004: Mobs will always go after them instead of players until attacked -// 0x008: Copy their master's speed on spawn/map-change -// 0x010: They display luk/3+1 instead of their actual critical in the -// stat window (by default they don't crit) -// 0x020: Their Min-Matk is always the same as their max -// 0x040: Skill re-use delay is reset when they are vaporized. -hom_setting: 0x1D - -// The rate a homunculus will get friendly by feeding it. (Note 2) -homunculus_friendly_rate: 100 - -// Can you name a homunculus more then once? (Note 1) -hom_rename: no - -// Intimacy needed to use Evolved Vanilmirth's Bio Explosion -hvan_explosion_intimate: 45000 - -// Show stat growth to the owner when an Homunculus levels up -homunculus_show_growth: yes - -// Does autoloot work, when a monster is killed by homunculus only? -homunculus_autoloot: yes - -// Should homunculi Vaporize when Master dies? -homunculus_auto_vapor: yes - -// Max level for regular Homunculus -homunculus_max_level: 99 - -// Max level for Homunculus S -homunculus_S_max_level: 150 diff --git a/conf/battle/status.conf b/conf/battle/status.conf deleted file mode 100644 index 172706817..000000000 --- a/conf/battle/status.conf +++ /dev/null @@ -1,24 +0,0 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) -// Note 2: Value is in percents (100 means 100%) -// Note 3: Value is a bit field. If no description is given, -// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun) -//-------------------------------------------------------------- - -// Should skill casting be canceled when inflicted by curse/stun/sleep/etc (includes silence) (Note 3)? -status_cast_cancel: 0 - -// Adjustment for the natural rate of resistance from status changes. -// If 50, status defense is halved, and you need twice as much stats to block -// them (eg: 200 vit to completely block stun) -pc_status_def_rate: 100 -mob_status_def_rate: 100 - -// Maximum resistance to status changes. (100 = 100%) -// NOTE: Cards and equipment can go over this limit, so it only applies to natural resist. -pc_max_status_def: 100 -mob_max_status_def: 100 diff --git a/conf/import-tmpl/battle.conf b/conf/import-tmpl/battle.conf new file mode 100644 index 000000000..4080eed72 --- /dev/null +++ b/conf/import-tmpl/battle.conf @@ -0,0 +1,32 @@ +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +//= Battle local configuration file. +//========================================================================= + +battle_configuration: { + // See conf/map/battle.conf for details +} diff --git a/conf/import-tmpl/battle_conf.txt b/conf/import-tmpl/battle_conf.txt deleted file mode 100644 index e69de29bb..000000000 --- a/conf/import-tmpl/battle_conf.txt +++ /dev/null diff --git a/conf/map/battle.conf b/conf/map/battle.conf new file mode 100644 index 000000000..f17748fb6 --- /dev/null +++ b/conf/map/battle.conf @@ -0,0 +1,87 @@ +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +//= Battle Configuration File +//========================================================================= + +battle_configuration: { + // General battle-related settings. + @include "conf/map/battle/battle.conf" + + // Settings specific to the client. + @include "conf/map/battle/client.conf" + + // General drop-related configs. + @include "conf/map/battle/drops.conf" + + // Experience rates, exp penalties, stats and max level settings. + @include "conf/map/battle/exp.conf" + + // GM levels, atcommands and hack-related configs. + @include "conf/map/battle/gm.conf" + + // Guild and WoE settings + @include "conf/map/battle/guild.conf" + + // Battleground settings + @include "conf/map/battle/battleground.conf" + + // Item/card-specific and crafting related options. + @include "conf/map/battle/items.conf" + + // Mob related configuration + @include "conf/map/battle/monster.conf" + + // Party related configuration + @include "conf/map/battle/party.conf" + + // Pet related configuration + @include "conf/map/battle/pet.conf" + + // Homunc related configuration + @include "conf/map/battle/homunc.conf" + + // Player specific settings + @include "conf/map/battle/player.conf" + + // Skill related settings + @include "conf/map/battle/skill.conf" + + // Status change related settings + @include "conf/map/battle/status.conf" + + // Feature control (on/off) settings + @include "conf/map/battle/feature.conf" + + // Anything else that didn't fit anywhere else. + // Includes duel, day/night, mute/manner, log settings. + @include "conf/map/battle/misc.conf" + + // Your custom config goes here. + @include "conf/import/battle.conf" +} + +import: "conf/import/battle.conf" diff --git a/conf/battle/battle.conf b/conf/map/battle/battle.conf index 8c9447ccb..2e73a0aa8 100644 --- a/conf/battle/battle.conf +++ b/conf/map/battle/battle.conf @@ -1,13 +1,36 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Battle) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) // Note 2: Value is in percents (100 means 100%) // Note 3: Value is a bit field. If no description is given, // assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary) -//-------------------------------------------------------------- +//========================================================================= // Who should have a baseatk value (makes str affect damage)? (Note 3) enable_baseatk: 9 @@ -24,7 +47,7 @@ mob_critical_rate: 100 critical_rate: 100 // Should normal attacks give you a walk delay? (Note 3) -// If no, characters can move as soon as they start an attack (attack animation +// If false, characters can move as soon as they start an attack (attack animation // or walk animation may be omitted client-side, causing cropped attacks or // monsters that teleport to you) // Otherwise, the delay is equal to the 'attack animation' (amotion) @@ -44,7 +67,7 @@ damage_walk_delay_rate: 100 multihit_delay: 80 // Damaged delay rate for players (Note 2) -// (Setting to no/0 will be like always endure) +// (Setting to false/0 will be like always endure) player_damage_delay_rate: 100 // Should race or element be used to consider someone undead? @@ -55,7 +78,7 @@ undead_detect_type: 0 // Does HP recover if hit by an attribute that's same as your own? (Note 1) // (Will not work in Renewal) -attribute_recover: no +attribute_recover: false // What is the minimum and maximum hitrate of normal attacks? min_hitrate: 5 @@ -131,8 +154,8 @@ equip_self_break_rate: 100 equip_skill_break_rate: 100 // Do weapon attacks have a attack speed delay before actual damage is applied? (Note 1) -// NOTE: The official setting is yes, even thought it degrades performance a bit. -delay_battle_damage: yes +// NOTE: The official setting is true, even thought it degrades performance a bit. +delay_battle_damage: true // Are arrows/ammo consumed when used on a bow/gun? // 0 = No @@ -143,15 +166,15 @@ delay_battle_damage: yes arrow_decrement: 1 // Should the item script bonus 'Autospell' check for range/obstacles before casting? -// Official behavior is "no", setting this to "yes" will make skills use their defined +// Official behavior is false, setting this to true will make skills use their defined // range. For example, Sonic Blow requires a 2 cell distance before autocasting is allowed. // This setting also affects autospellwhenhit. -autospell_check_range: no +autospell_check_range: false // If both the attacker and the target are on the same tile, should the target be knocked back to the left? -// Official behavior is "yes", setting this to "no" will knock the target back behind the attacker. -knockback_left: yes +// Official behavior is true, setting this to false will knock the target back behind the attacker. +knockback_left: true // Should the target be able of dodging damage by snapping away to the edge of the screen? -// Official behavior is "no" -snap_dodge: no +// Official behavior is false +snap_dodge: false diff --git a/conf/map/battle/battleground.conf b/conf/map/battle/battleground.conf new file mode 100644 index 000000000..629a664f7 --- /dev/null +++ b/conf/map/battle/battleground.conf @@ -0,0 +1,40 @@ +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Battlegrounds) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) +// Note 2: Value is in percents (100 means 100%) +// Note 3: Value is a bit field. If no description is given, +// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary) +//========================================================================= + +// Flee penalty on BG grounds. +// NOTE: It's %, not absolute, so 20 is -20% of your total flee +bg_flee_penalty: 20 + +// Interval before updating the bg-member map mini-dots (milliseconds) +bg_update_interval: 1000 diff --git a/conf/battle/client.conf b/conf/map/battle/client.conf index 6ca2f67e0..818db3142 100644 --- a/conf/battle/client.conf +++ b/conf/map/battle/client.conf @@ -1,13 +1,36 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Client) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) // Note 2: Value is in percents (100 means 100%) // Note 3: Value is a bit field. If no description is given, // assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary) -//-------------------------------------------------------------- +//========================================================================= // Whether to enable the official packet obfuscation support (good vs WPE) // 0: disabled @@ -29,10 +52,10 @@ max_cloth_color: 4 min_body_style: 0 max_body_style: 4 -// When set to yes, the damage field in packets sent from woe maps will be set +// When set to true, the damage field in packets sent from woe maps will be set // to -1, making it impossible for GMs, Bots and Hexed clients to know the // actual damage caused by attacks. (Note 1) -hide_woe_damage: yes +hide_woe_damage: true // "hair style" number that identifies pet. // NOTE: The client uses the "hair style" field in the mob packet to tell them apart from mobs. @@ -72,53 +95,53 @@ aura_lv: 99 client_limit_unit_lv: 0 // Will tuxedo and wedding dresses be shown when worn? (Note 1) -wedding_modifydisplay: no +wedding_modifydisplay: false // Save Clothes color. (This will degrade performance) (Note 1) -save_clothcolor: yes +save_clothcolor: true // Save body styles? (Note 1) // Note: Don't turn this on unless you know what your doing. // Sprites are not released officially. -save_body_style: no +save_body_style: false // Do not display cloth colors for the wedding costume? // Note: Both save_clothcolor and wedding_modifydisplay have to be enabled -// for this option to take effect. Set this to yes if your cloth palettes +// for this option to take effect. Set this to true if your cloth palettes // pack doesn't has wedding palettes (or has less than the other jobs) -wedding_ignorepalette: no +wedding_ignorepalette: false // Do not display cloth colors for the Xmas costume? -// Set this to yes if your cloth palettes pack doesn't has Xmas palettes (or has less than the other jobs) -xmas_ignorepalette: no +// Set this to true if your cloth palettes pack doesn't has Xmas palettes (or has less than the other jobs) +xmas_ignorepalette: false // Do not display cloth colors for the Summer costume? -// Set this to yes if your cloth palettes pack doesn't has Summer palettes (or has less than the other jobs) -summer_ignorepalette: no +// Set this to true if your cloth palettes pack doesn't has Summer palettes (or has less than the other jobs) +summer_ignorepalette: false // Do not display cloth colors for the Hanbok costume? -// Set this to yes if your cloth palettes pack doesn't has Hanbok palettes (or has less than the other jobs) -hanbok_ignorepalette: no +// Set this to true if your cloth palettes pack doesn't has Hanbok palettes (or has less than the other jobs) +hanbok_ignorepalette: false // Show Hercules version to users when the login? -display_version: no +display_version: false // When affected with the "Hallucination" status effect, send the effect to client? (Note 1) -// Note: Set to 'no' if the client lags due to the "Wavy" screen effect. -display_hallucination: yes +// Note: Set to false if the client lags due to the "Wavy" screen effect. +display_hallucination: true // Set this to 1 if your client supports status change timers and you want to use them // Clients from 2009 onward support this -display_status_timers: yes +display_status_timers: true // Randomizes the dice emoticon server-side, to prevent clients from forging // packets for the desired number. (Note 1) -client_reshuffle_dice: yes +client_reshuffle_dice: true // Sorts the character and guild storage before it is sent to the client. // Official servers do not sort storage. (Note 1) // NOTE: Enabling this option degrades performance. -client_sort_storage: no +client_sort_storage: false // Duration of client's self mute in minutes. // Note: Do not enable this, if you enabled commands for players, diff --git a/conf/battle/drops.conf b/conf/map/battle/drops.conf index ec122002a..547a4ae4e 100644 --- a/conf/battle/drops.conf +++ b/conf/map/battle/drops.conf @@ -1,14 +1,37 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Drops) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) // Note 2: Value is in percents (100 means 100%) -//-------------------------------------------------------------- +//========================================================================= // If an item is dropped, does it go straight into the users inventory? (Note 1) -item_auto_get: no +item_auto_get: false // How long does it take for an item to disappear from the floor after it is dropped? (in milliseconds) flooritem_lifetime: 60000 @@ -101,11 +124,11 @@ item_drop_treasure_max: 10000 //10000 | 1.00 1.67 3.25 5.28 8.44 15.24 23.19 34.26 54.57 72.67 91.13 //20000 | 2.00 3.26 6.09 9.59 14.83 25.49 37.21 52.55 77.70 97.95 100% //50000 | 5.00 7.87 13.98 21.12 31.23 50.31 69.56 92.48 100% 100% 100% -item_logarithmic_drops: no +item_logarithmic_drops: false // Can the monster's drop rate become 0? (Note 1) -// Default: no (as in official servers). -drop_rate0item: no +// Default: false (as in official servers). +drop_rate0item: false // Makes your LUK value affect drop rates on an absolute basis. // Setting to 100 means each luk adds 0.01% chance to find items diff --git a/conf/battle/exp.conf b/conf/map/battle/exp.conf index 88c5d9c7a..3a38c1c6c 100644 --- a/conf/battle/exp.conf +++ b/conf/map/battle/exp.conf @@ -1,13 +1,36 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Experience) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) // Note 2: Value is in percents (100 means 100%) // Note 3: The max level of classes is stored in the exp table. // See files db/exp.txt and db/exp2.txt to change them. -//-------------------------------------------------------------- +//========================================================================= // Rate at which exp. is given. (Note 2) base_exp_rate: 100 @@ -16,7 +39,7 @@ base_exp_rate: 100 job_exp_rate: 100 // Turn this on to allow a player to level up more than once from a kill. (Note 1) -multi_level_up: no +multi_level_up: false // Setting this can cap the max experience one can get per kill specified as a // % of the current exp bar. (Every 10 = 1.0%) @@ -61,7 +84,7 @@ shop_exp: 0 // PVP exp. Do players get exp in PvP maps // (Note: NOT exp from players, but from normal leveling) -pvp_exp: yes +pvp_exp: true // When a player dies, how should we penalize them? // 0 = No penalty. @@ -80,12 +103,12 @@ death_penalty_job: 100 zeny_penalty: 0 // Will display experience gained from killing a monster. (Note 1) -disp_experience: no +disp_experience: false // Will display zeny earned (from mobs, trades, etc) (Note 1) -disp_zeny: no +disp_zeny: false // Use the contents of db/statpoint.txt when doing a stats reset and leveling up? (Note 1) -// If no, an equation will be used which preserves statpoints earned/lost +// If false, an equation will be used which preserves statpoints earned/lost // through external means (ie: stat point buyers/sellers) -use_statpoint_table: yes +use_statpoint_table: true diff --git a/conf/map/battle/feature.conf b/conf/map/battle/feature.conf new file mode 100644 index 000000000..003e4c75a --- /dev/null +++ b/conf/map/battle/feature.conf @@ -0,0 +1,58 @@ +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Feature) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) +//========================================================================= + +features: { + // Buying store (Note 1) + // Requires: 2010-04-27aRagexeRE or later + buying_store: true + + // Search stores (Note 1) + // Requires: 2010-08-03aRagexeRE or later + search_stores: true + + // Atcommand suggestions (Note 1) + // If one type incomplete atcommand, it will suggest the complete ones. + atcommand_suggestions: false + + // Banking (Note 1) + // Requires: 2013-07-24aRagexe or later + banking: true + + // Auction (Note 1) + // Feature became unstable on clients 2012 onwards (exact date not known), + // it has been fixed on clients 2013-05-15 onwards however. + auction: false + + // Roulette (Note 1) + // Requires: 2014-10-22bRagexe or later + // Disabled by default while test version is out; enable at your own risk -- the mean dev. + roulette: false +} diff --git a/conf/map/battle/gm.conf b/conf/map/battle/gm.conf new file mode 100644 index 000000000..bcc70b63b --- /dev/null +++ b/conf/map/battle/gm.conf @@ -0,0 +1,66 @@ +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (GM) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) +// Note 2: Value is in percents (100 means 100%) +//========================================================================= + +// The maximum quantity of monsters that can be summoned per GM command (0 denotes an unlimited quantity) +atcommand_spawn_quantity_limit: 100 + +// Maximum number of slave-clones that can be have by using the @slaveclone at command. (0 denotes unlimited quantity) +atcommand_slave_clone_limit: 25 + +// If false, commands require exact player name. If true, entering a partial +// name will work, as long as there's only one match from all players in the +// current map server. +partial_name_scan: true + +// (@) @allstats/@str/@agi/@vit/@int/@dex/@luk +// allow gms to bypass the maximum stat parameter? ( if true gm stats can go up to 32k ) +// default: false +atcommand_max_stat_bypass: false + +// Ban people that try trade dupe. +// Duration of the ban, in minutes (default: 5). To disable the ban, set 0. +ban_hack_trade: 5 + +// requires RENEWAL_DROP to be enabled (src/map/config/renewal.h) +// modifies @mobinfo to display the users' real drop rate as per renewal_drop formula +// modifies @iteminfo to not display the minimum item drop rate (since it can't tell the mob level) +atcommand_mobinfo_type: 0 + +// Ignore warpable area configuration. +// Set the minimum group id to ignore invalid cells when warping. +// Default group is 2. Use 100 to disable this setting. +gm_ignore_warpable_area: 2 + +// Should atcommands trigger level up events for NPCs? (Note 1) +// This option is for @baselevelup and @joblevelup +// Default: false +atcommand_levelup_events: false diff --git a/conf/map/battle/guild.conf b/conf/map/battle/guild.conf new file mode 100644 index 000000000..c8f8db8c3 --- /dev/null +++ b/conf/map/battle/guild.conf @@ -0,0 +1,73 @@ +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Guild) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) +// Note 2: Value is in percents (100 means 100%) +//========================================================================= + +// When making a guild, an Emperium is consumed? (Note 1) +guild_emperium_check: true + +// Maximum tax limit on a guild member. +guild_exp_limit: 50 + +// Maximum castles one guild can own (0 = unlimited) +guild_max_castles: 0 + +// Restart guild skills cooldown by relog? (Note 1) +// When false, you relog with the same cooldown remaining as from when you +// logged out, true restarts the cooldown upon login to its full duration. +guild_skill_relog_delay: false + +// Damage adjustments for WOE battles against defending Guild monsters (Note 2) +castle_defense_rate: 100 + +// Flee penalty on gvg grounds. Official value is 20 (Note 2) +// NOTE: It's %, not absolute, so 20 is -20% of your total flee +gvg_flee_penalty: 20 + +// Can the 'Glory of Guild' skill be learnt in the Guild window, +// and does changing emblems require it? (Note 1) +// P.S: This skill is not implemented on official servers +require_glory_guild: false + +// Limit Guild alliances. Value is 0 to 3. +// If you want to change this value, clear the guild alliance table. +// Default is 3 +max_guild_alliance: 3 + +// When to re-display the guild notice +// Upon teleporting (regardless of changing maps): 2 (official) +// Upon changing maps: 1 +// Do not re-display: 0 (disabled) +guild_notice_changemap: 2 + +// Can guild members invite/expel members inside guild castles in WoE/GvG? (Note 1) +// default: false +guild_castle_invite: false +guild_castle_expulsion: false diff --git a/conf/map/battle/homunc.conf b/conf/map/battle/homunc.conf new file mode 100644 index 000000000..0bf2a4b98 --- /dev/null +++ b/conf/map/battle/homunc.conf @@ -0,0 +1,68 @@ +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Homunculus) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) +// Note 2: Value is in percents (100 means 100%) +// Note 3: Value is a bit field. If no description is given, +// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary) +//========================================================================= + +// Homunculus setting (Note 3) +// Activates various 'quirks' that makes them behave unlike normal characters. +// 0x001: Can't be targetted by support skills (except for their master) +// 0x004: Mobs will always go after them instead of players until attacked +// 0x008: Copy their master's speed on spawn/map-change +// 0x010: They display luk/3+1 instead of their actual critical in the +// stat window (by default they don't crit) +// 0x020: Their Min-Matk is always the same as their max +// 0x040: Skill re-use delay is reset when they are vaporized. +hom_setting: 0x1D + +// The rate a homunculus will get friendly by feeding it. (Note 2) +homunculus_friendly_rate: 100 + +// Can you name a homunculus more then once? (Note 1) +hom_rename: false + +// Intimacy needed to use Evolved Vanilmirth's Bio Explosion +hvan_explosion_intimate: 45000 + +// Show stat growth to the owner when an Homunculus levels up +homunculus_show_growth: true + +// Does autoloot work, when a monster is killed by homunculus only? +homunculus_autoloot: true + +// Should homunculi Vaporize when Master dies? +homunculus_auto_vapor: true + +// Max level for regular Homunculus +homunculus_max_level: 99 + +// Max level for Homunculus S +homunculus_S_max_level: 150 diff --git a/conf/battle/items.conf b/conf/map/battle/items.conf index e2358b6d6..8ff2cbb3b 100644 --- a/conf/battle/items.conf +++ b/conf/map/battle/items.conf @@ -1,20 +1,43 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Items) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) // Note 2: Value is in percents (100 means 100%) // Note 3: Value is a bit field. If no description is given, -// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun) -//-------------------------------------------------------------- +// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary) +//========================================================================= // The highest value at which an item can be sold via the merchant vend skill. (in zeny) vending_max_value: 1000000000 // Whether to allow buying from vending chars that are at their max. zeny limit. -// If set to yes, the rest of the zeny above the char's capacity will disappear. -vending_over_max: yes +// If set to true, the rest of the zeny above the char's capacity will disappear. +vending_over_max: true // Tax to apply to all vending transactions (eg: 10000 = 100%, 50 = 0.50%) // When a tax is applied, the item's full price is charged to the buyer, but @@ -22,7 +45,7 @@ vending_over_max: yes vending_tax: 200 // Show the buyer's name when successfully vended an item -buyer_name: yes +buyer_name: true // Forging success rate. (Note 2) weapon_produce_rate: 100 @@ -40,23 +63,23 @@ potion_produce_rate: 100 produce_item_name_input: 0x03 // Is a monster summoned via dead branch aggressive? (Note 1) -dead_branch_active: yes +dead_branch_active: true // Should summoned monsters check the player's base level? (dead branches) (Note 1) -// On officials this is no - monsters summoned from dead/bloody branches can be ANY level. -// Change to 'yes' to only summon monsters less than or equal to the player's base level. -random_monster_checklv: no +// On officials this is false - monsters summoned from dead/bloody branches can be ANY level. +// Change to true to only summon monsters less than or equal to the player's base level. +random_monster_checklv: false // Can any player equip any item regardless of the gender restrictions // NOTE: Wedding Rings and Whips/Musical Instruments will check gender regardless of setting. -ignore_items_gender: yes +ignore_items_gender: true // Item check? (Note 1) // On map change it will check for items not tagged as "available" and // auto-delete them from inventory/cart. // NOTE: An item is not available if it was not loaded from the item_db or you // specify it as unavailable in db/item_avail.txt -item_check: no +item_check: false // How much time must pass between item uses? // Only affects the delay between using items, prevents healing item abuse. Recommended ~500 ms @@ -74,18 +97,16 @@ gtb_sc_immunity: 50 // Enable autospell card effects to stack? // NOTE: Different cards that grant the same skill will both // always work independently of each other regardless of setting. -autospell_stacking: no +autospell_stacking: false // Will disabled consumables (disabled by map_zone_db.conf) be consumed when trying to use them? -// 1 (official): yes -// 0: no -item_restricted_consumption_type: 1 +// Default: true (official) +item_restricted_consumption_type: true // Enable all NPC to allow changing of equipments while interacting? (Note 1) // Script commands 'enable_items/disable_items' will not be override. (see doc/script_commands.txt) -// 1 : yes(official) -// 0 : no -item_enabled_npc: 1 +// Default: true (official) +item_enabled_npc: true // Unequip the equipments that has disabled by map_zone_db.conf ? // 0 : disabled equipments and cards are nullify (official) diff --git a/conf/battle/misc.conf b/conf/map/battle/misc.conf index a3c6ed26a..bc97b716a 100644 --- a/conf/battle/misc.conf +++ b/conf/map/battle/misc.conf @@ -1,13 +1,36 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Misc) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) // Note 2: Value is in percents (100 means 100%) // Note 3: Value is a bit field. If no description is given, -// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun) -//-------------------------------------------------------------- +// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary) +//========================================================================= // PK Server Mode. // Turns entire server pvp(excluding towns). @@ -17,7 +40,7 @@ // There is a nopvp.txt for setting up maps not to have pk on in this mode. // Novices cannot be attacked and cannot attack. // Normal pvp counter and rank display are disabled as well. -// Note: If pk_mode is set to 2 instead of 1 (yes), players will receive a +// Note: If pk_mode is set to 2 instead of 1, players will receive a // manner penalty of 5 each time they kill another player (see manner_system // config to adjust how this will affect players) pk_mode: 0 @@ -39,22 +62,22 @@ pk_min_level: 55 // players to let them attack each other. 0 disables said limit. pk_level_range: 0 -// Display skill usage in console? (for debug only) (default: off) (Note 3) -skill_log: off +// Display skill usage in console? (for debug only) (default: false) (Note 3) +skill_log: false -// Display battle log? (for debug only) (default: off) (Note 1) -battle_log: off +// Display battle log? (for debug only) (default: false) (Note 1) +battle_log: false -// Display other stuff? (for debug only) (default: off) (Note 1) -etc_log: off +// Display other stuff? (for debug only) (default: false) (Note 1) +etc_log: false -// Do you want to debug warp points? If set to yes, warp points will appear as flags.(Note 1) +// Do you want to debug warp points? If set to true, warp points will appear as flags.(Note 1) // It will also run on start-up a warp-check to print out which warp points lead directly on // top of on-touch npcs (which can lead to infinite loopback warping situations) -warp_point_debug: no +warp_point_debug: false -// Choose if server begin with night (yes) or day (no) -night_at_start: no +// Choose if server begin with night (true) or day (false) +night_at_start: false // Define duration in msec of the day (default: 7200000 = 2 hours) // Set to 0 to disable day cycle (but not @day GM command). @@ -67,22 +90,22 @@ day_duration: 0 night_duration: 0 // Using duel on pvp-maps -duel_allow_pvp: no +duel_allow_pvp: false // Using duel on gvg-maps -duel_allow_gvg: no +duel_allow_gvg: false // Allow using teleport/warp when dueling -duel_allow_teleport: no +duel_allow_teleport: false // Autoleave duel when die -duel_autoleave_when_die: yes +duel_autoleave_when_die: true // Delay between using @duel in minutes duel_time_interval: 60 // Restrict duel usage to same map -duel_only_on_same_map: no +duel_only_on_same_map: false // Determines max number of characters that can stack within a single cell. // Official - Only affects the walking routines of characters, including monsters. @@ -94,14 +117,14 @@ duel_only_on_same_map: no official_cell_stack_limit: 1 custom_cell_stack_limit: 1 -// If 0 while walking not check occupied cells -// If 1 while walking check occupied cells -check_occupied_cells: 1 +// If false while walking not check occupied cells +// If true while walking check occupied cells +check_occupied_cells: true // Allow autotrade only in map with autotrade flag? -// Set this to "no" will allow autotrade where no "autotrade" mapflag is set -// Set this to "yes" to only allow autotrade on maps with "autotrade" mapflag -at_mapflag: no +// Set this to "false" will allow autotrade where no "autotrade" mapflag is set +// Set this to "true" to only allow autotrade on maps with "autotrade" mapflag +at_mapflag: false // Set this to the amount of minutes autotrade chars will be kicked from the server. at_timeout: 0 @@ -120,8 +143,8 @@ searchstore_querydelay: 10 searchstore_maxresults: 30 // Whether or not gaining and loosing of cash points is displayed (Note 1). -// Default: no -cashshop_show_points: no +// Default: false +cashshop_show_points: false // Whether or not mail box status is displayed upon login. // Default: 0 @@ -131,20 +154,20 @@ cashshop_show_points: no mail_show_status: 0 // Is monster transformation disabled during Guild Wars? -// If set to yes, monster transforming is automatically removed/disabled when entering castles during WoE times -mon_trans_disable_in_gvg: no +// If set to true, monster transforming is automatically removed/disabled when entering castles during WoE times +mon_trans_disable_in_gvg: false // Whether AegisName and SpriteName lookups are case sensitive -// Default: yes (as in official servers) -// When this is set to yes, item and monster lookups through atcommands and +// Default: true (as in official servers) +// When this is set to true, item and monster lookups through atcommands and // script commands will match AegisNames and SpriteNames only when the case // matches. Display name lookups are not affected by this setting. // Example: Given the two items: // - { Id: 553, AegisName: "Bun", Name: "Bao" } // - { Id: 6115, AegisName: "Bun_", Name: "Bun" } -// query when 'yes' when 'no' +// query when true when false // @item bun # 6115 # 553 // @item Bun # 553 # 553 // @item Bao # 553 # 553 // @item Bun_ # 6115 # 6115 -case_sensitive_aegisnames: yes +case_sensitive_aegisnames: true diff --git a/conf/battle/monster.conf b/conf/map/battle/monster.conf index 23087ec78..48e476161 100644 --- a/conf/battle/monster.conf +++ b/conf/map/battle/monster.conf @@ -1,13 +1,36 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Monster) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) // Note 2: Value is in percents (100 means 100%) // Note 3: Value is a bit field. If no description is given, -// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun) -//-------------------------------------------------------------- +// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary) +//========================================================================= // The HP rate of MVPs. (Note 2) mvp_hp_rate: 100 @@ -82,7 +105,7 @@ view_range_rate: 100 chase_range_rate: 100 // Allow monsters to be aggresive and attack first? (Note 1) -monster_active_enable: yes +monster_active_enable: true // Should the mob_db names override the mob names specified in the spawn files? // 0: No @@ -90,8 +113,8 @@ monster_active_enable: yes // 2: always use the mob_db JName column (original Kro mob name) override_mob_names: 0 -// Monster damage delay rate (Note 1) -// Setting to no/0 is like they always have endure. +// Monster damage delay rate (Note 2) +// Setting to 0 is like they always have endure. monster_damage_delay_rate: 100 // Looting monster actions. @@ -129,9 +152,9 @@ boss_spawn_delay: 100 no_spawn_on_player: 0 // Should spawn coordinates in the mob-spawn files be ignored? (Note 1) -// If set to yes, all monsters will have a random respawn spot across the whole +// If set to true, all monsters will have a random respawn spot across the whole // map regardless of what the mob-spawn file says. -force_random_spawn: no +force_random_spawn: false // Do summon slaves inherit the passive/aggressive traits of their master? // 0: No, retain original mode. @@ -151,20 +174,20 @@ slaves_inherit_speed: 3 // Will summoned monsters (alchemists, or @summon'ed monsters) attack cause a // chance of triggering the master's autospell cards? (Note 1) -summons_trigger_autospells: yes +summons_trigger_autospells: true // When a mob is attacked by another monster, will the mob retaliate against the master of said mob instead of the mob itself? // NOTE: Summoned mobs are both those acquired via @summon and summoned by Alchemists -retaliate_to_master: yes +retaliate_to_master: true // Whether mobs should change target temporarily when a skill triggers a counter mob skill (Note 1) -// eg: Mob attacks player B, and player A casts a skill C. If set to yes and the +// eg: Mob attacks player B, and player A casts a skill C. If set to true and the // mob has a skill that is triggered by skill C, then A will be the target of // the skill, otherwise B will be targetted by the reaction skill. -mob_changetarget_byskill: no +mob_changetarget_byskill: false // If monster's class is changed will it fully recover HP? (Note 1) -monster_class_change_full_recover: yes +monster_class_change_full_recover: true // Display some mob info next to their name? (add as needed) // (does not works on guardian or Emperium) @@ -174,20 +197,20 @@ monster_class_change_full_recover: yes show_mob_info: 0 // Zeny from mobs -zeny_from_mobs: no +zeny_from_mobs: false // Monsters level up (monster will level up each time a player is killed and they will grow stronger) // Exp rate is calculated ((monster level-original monster level)*(exp*(mobs_level_up_exp rate/100))) // NOTE: Does not apply to WoE Guardians. -mobs_level_up: no +mobs_level_up: false mobs_level_up_exp_rate: 1 // Dynamic Mobs Options // Use dynamic mobs? (recommended for small-medium sized servers) -dynamic_mobs: yes +dynamic_mobs: true // Remove Mobs even if they are hurt -mob_remove_damaged: yes +mob_remove_damaged: true // Delay before removing mobs from empty maps (default 5 min = 300 secs) mob_remove_delay: 300000 @@ -205,21 +228,21 @@ mob_npc_event_type: 1 ksprotection: 0 // Should MVP slaves retain their target when summoned back to their master? -mob_slave_keep_target: yes +mob_slave_keep_target: true // Whether or not to spawn the mvp tomb. // See http://irowiki.org/wiki/MVP#Gravestone -mvp_tomb_enabled: yes +mvp_tomb_enabled: true // Show hp bar on monsters? (Default: yes) // NOTE: only works on client 2012-04-04aRagexeRE onwards -show_monster_hp_bar: yes +show_monster_hp_bar: true // Whether or not the size of specially summoned mobs influences experience, drop rates, // and stats. The rates will be doubled for large mobs, and halved for small ones. // This is only invoked under the 'monster' command, @monsterbig, and @monstersmall. (Note 1) -// Default: no -mob_size_influence: no +// Default: false +mob_size_influence: false // How should a monster be trapped by an icewall casted directly on it? // On official servers, monsters can only leave an icewall to the west and south. If their target is north or east of diff --git a/conf/battle/party.conf b/conf/map/battle/party.conf index 72a22b94a..07a0bdaea 100644 --- a/conf/battle/party.conf +++ b/conf/map/battle/party.conf @@ -1,14 +1,37 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Party) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) // Note 2: Value is in percents (100 means 100%) -//-------------------------------------------------------------- +//========================================================================= // If someone steals (gank/steal skills), show name in party? (Note 1) -show_steal_in_same_party: no +show_steal_in_same_party: false // Interval before updating the party-member map mini-dots (milliseconds) party_update_interval: 1000 @@ -20,14 +43,14 @@ party_hp_mode: 0 // When 'Party Share' item sharing is enabled in a party, // announce in the party which party-member received the item and what's he received? (Note 1) -show_party_share_picker: yes +show_party_share_picker: true // What types of items are going to be announced when 'show_party_share_picker' is active? // 1: IT_HEALING, 2: IT_UNKNOWN, 4: IT_USABLE, 8: IT_ETC, // 16: IT_WEAPON, 32: IT_ARMOR, 64: IT_CARD, 128: IT_PETEGG, // 256: IT_PETARMOR, 512: IT_UNKNOWN2, 1024: IT_AMMO, 2048: IT_DELAYCONSUME // 262144: IT_CASH -show_picker.item_type: 112 +show_picker_item_type: 112 // Method of distribution when item party share is enabled in a party: // 0: Normal (item goes to a random party member) @@ -37,11 +60,11 @@ show_picker.item_type: 112 party_item_share_type: 0 // Is exp/item sharing disabled for idle members in the party? -// Set to no, or the amount of seconds (NOT milliseconds) that need to pass before considering +// Set to 0, or the amount of seconds (NOT milliseconds) that need to pass before considering // a character idle. // Characters in a chat/vending are always considered idle. // A character's idle status is reset upon item use/skill use/attack (auto attack counts too)/movement. -idle_no_share: no +idle_no_share: 0 // Give additional experience bonus per party-member involved on even-share parties (excluding yourself)? // ex. If set to 10, an even-share party of 5 people will receive +40% exp (4 members * 10% exp): @@ -50,4 +73,4 @@ party_even_share_bonus: 0 // Display party name regardless if player is in a guild. // Official servers do not display party name unless the user is in a guild. (Note 1) -display_party_name: no +display_party_name: false diff --git a/conf/battle/pet.conf b/conf/map/battle/pet.conf index 594184b35..6dfe5076c 100644 --- a/conf/battle/pet.conf +++ b/conf/map/battle/pet.conf @@ -1,19 +1,42 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Pet) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) // Note 2: Value is in percents (100 means 100%) // Note 3: Value is a bit field. If no description is given, -// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun) -//-------------------------------------------------------------- +// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary) +//========================================================================= // Rate for catching pets (Note 2) pet_catch_rate: 100 // Can you name a pet more then once? (Note 1) -pet_rename: no +pet_rename: false // The rate a pet will get friendly by feeding it. (Note 2) pet_friendly_rate: 100 @@ -26,13 +49,13 @@ pet_hungry_delay_rate: 100 pet_hungry_friendly_decrease: 5 // Does the pet need its equipment before it does its skill? (Note 1) -pet_equip_required: yes +pet_equip_required: true // When the master attacks a monster, whether or not the pet will also attack. (Note 1) -pet_attack_support: no +pet_attack_support: false // When the master receives damage from the monster, whether or not the pet attacks back. (Note 1) -pet_damage_support: no +pet_damage_support: false // Minimum intimacy necessary for a pet to support their master. Default is 900 // (intimacy goes from 0 to 1000). At this minimum, support rate is 50% of pet's normal value. @@ -45,14 +68,14 @@ pet_equip_min_friendly: 900 // Whether or not the pet's will use skills. (Note 1) // Note: Offensive pet skills need at least pet_attack_support or // pet_damage_support to work (they trigger while the pet is attacking). -pet_status_support: no +pet_status_support: false // Rate at which a pet will support it's owner in battle. (Note 2) // Affects pet_attack_support & pet_damage_support. pet_support_rate: 100 // Does the pets owner receive exp from the pets damage? -pet_attack_exp_to_master: no +pet_attack_exp_to_master: false // The rate exp. is gained from the pet attacking monsters pet_attack_exp_rate: 100 @@ -72,6 +95,6 @@ pet_max_atk1: 500 pet_max_atk2: 1000 // Are pets disabled during Guild Wars? -// If set to yes, pets are automatically returned to egg when entering castles during WoE times +// If set to true, pets are automatically returned to egg when entering castles during WoE times // and hatching is forbidden within as well. -pet_disable_in_gvg: no +pet_disable_in_gvg: false diff --git a/conf/battle/player.conf b/conf/map/battle/player.conf index 9168a6320..e478a92a1 100644 --- a/conf/battle/player.conf +++ b/conf/map/battle/player.conf @@ -1,12 +1,35 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Player) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) // Note 2: Value is in percents (100 means 100%) // Note 3: Value is a bit field. -//-------------------------------------------------------------- +//========================================================================= // Players' maximum HP rate? (Default is 100) hp_rate: 100 @@ -15,8 +38,8 @@ hp_rate: 100 sp_rate: 100 // Whether or not cards and attributes of the left hand are applied to the right hand attack (Note 1) -// (It is 'yes' on official servers) -left_cardfix_to_right: yes +// (It is true on official servers) +left_cardfix_to_right: true // The amount of HP a player will respawn with, 0 is default. // (Unit is in percentage of total HP, 100 is full heal of HP, 0 is respawn with 1HP total.) @@ -27,23 +50,23 @@ restart_hp_rate: 0 restart_sp_rate: 0 // Can a normal player by-pass the skill tree? (Note 1) -player_skillfree: no +player_skillfree: false -// When set to yes, forces skill points gained from 1st class to be put into 1st class +// When set to true, forces skill points gained from 1st class to be put into 1st class // skills, and forces novice skill points to be put into the basic skill. (Note 1) -player_skillup_limit: yes +player_skillup_limit: true // Quest skills can be learned? (Note 1) -// Setting this to yes can open an exploit on your server! -quest_skill_learn: no +// Setting this to true can open an exploit on your server! +quest_skill_learn: false // When skills are reset, quest skills are reset as well? (Note 1) -// Setting this to yes can open an exploit on your server! -// NOTE: If you have quest_skill_learn set to yes, quest skills are always reset. -quest_skill_reset: no +// Setting this to true can open an exploit on your server! +// NOTE: If you have quest_skill_learn set to true, quest skills are always reset. +quest_skill_reset: false // You must have basic skills to be able to sit, trade, form a party or create a chatroom? (Note 1) -basic_skill_check: yes +basic_skill_check: true // When teleporting, or spawning to a map, how long before a monster sees you if you don't move? (time is in milliseconds) // That is, when you go to a map and don't move, how long before the monsters will notice you. @@ -115,22 +138,23 @@ max_cart_weight: 8000 prevent_logout: 10000 // Display the drained hp/sp values from normal attacks? (Ie: Hunter Fly card) -show_hp_sp_drain: no +show_hp_sp_drain: false // Display the gained hp/sp values from killing mobs? (Ie: Sky Deleter Card) -show_hp_sp_gain: yes +show_hp_sp_gain: true -// Show the critical bonus for katar class weapon in player status window? -// On official server, the critical bonus from katar class weapon isn't display. (Default: no) -show_katar_crit_bonus: no +// Show the critical bonus for katar class weapon in player status window? On +// official server, the critical bonus from katar class weapon isn't display. +// (Default: false) +show_katar_crit_bonus: false // If set, when A accepts B as a friend, B will also be added to A's friend // list, otherwise, only A appears in B's friend list. // NOTE: this setting only enables friend auto-adding; auto-deletion does not work yet -friend_auto_add: yes +friend_auto_add: true // Are simultaneous trade/party/guild invite requests automatically rejected? -invite_request_check: yes +invite_request_check: true // Players' will drop a 'Skull' when killed? // 0 = Disabled @@ -157,7 +181,7 @@ min_npc_vendchat_distance: 3 // If min_npc_vendchat_distance is enabled, // can players vend/chat room nearby hidden npc? (Ie: FAKE_NPC/HIDDEN_WARP_NPC) -vendchat_near_hiddennpc: no +vendchat_near_hiddennpc: false // Super Novice's fury is enabled to increments of 10%, such as at 10.0%, 20.0% - 80.0%, 90.0% // Changing snovice_call_type config to 1 enables its use at 0%, for maxed super novices. @@ -182,10 +206,10 @@ idletime_criteria: 0x1F // Can players get ATK/DEF from refinements on costume/shadow equips? // Default: yes (Official behavior not known) -costume_refine_def: yes -shadow_refine_def: yes -shadow_refine_atk: yes +costume_refine_def: true +shadow_refine_def: true +shadow_refine_atk: true // Keep player facing direction after warping? -// Default: no (on official servers players always faces north) -player_warp_keep_direction: yes +// Default: false (on official servers players always faces north) +player_warp_keep_direction: true diff --git a/conf/battle/skill.conf b/conf/map/battle/skill.conf index 7622968f8..8d7c9df44 100644 --- a/conf/battle/skill.conf +++ b/conf/map/battle/skill.conf @@ -1,13 +1,36 @@ -//-------------------------------------------------------------- -// Hercules Battle Configuration File -// Originally Translated by Peter Kieser <pfak@telus.net> -// Made in to plainer English by Ancyker -//-------------------------------------------------------------- -// Note 1: Value is a config switch (on/off, yes/no or 1/0) +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Skill) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) // Note 2: Value is in percents (100 means 100%) // Note 3: Value is a bit field. If no description is given, // assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary) -//-------------------------------------------------------------- +//========================================================================= // The rate of time it takes to cast a spell (Note 2, 0 = No casting time) casting_rate: 100 @@ -17,8 +40,8 @@ delay_rate: 100 // Does the delay time depend on the caster's DEX and/or AGI? (Note 1) // Note: On Official servers, neither Dex nor Agi affect delay time -delay_dependon_dex: no -delay_dependon_agi: no +delay_dependon_dex: false +delay_dependon_agi: false // Minimum allowed delay for ANY skills after casting (in milliseconds) (Note 1) // Note: Setting this to anything above 0 can stop speedhacks. @@ -52,7 +75,7 @@ vcast_stat_scale: 530 skill_amotion_leniency: 90 // Will normal attacks be able to ignore the delay after skills? (Note 1) -skill_delay_attack_enable: yes +skill_delay_attack_enable: true // Range added to skills after their cast time finishes. // Decides how far away the target can walk away after the skill began casting before the skill fails. @@ -60,7 +83,7 @@ skill_delay_attack_enable: yes skill_add_range: 0 // If the target moves out of range while casting, do we take the items and SP for the skill anyway? (Note 1) -skill_out_range_consume: no +skill_out_range_consume: false // Does the distance between caster and target define if the skill is a ranged skill? (Note 3) // If set, when the distance between caster and target is greater than 3 the skill is considered long-range, otherwise it's a melee range. @@ -74,9 +97,9 @@ skillrange_by_distance: 14 skillrange_from_weapon: 0 // Should a check on the caster's status be performed in all skill attacks? -// When set to yes, meteors, storm gust and any other ground skills will have +// When set to true, meteors, storm gust and any other ground skills will have // no effect while the caster is unable to fight (eg: stunned). -skill_caster_check: yes +skill_caster_check: true // Should ground placed skills be removed as soon as the caster dies? (Note 3) clear_skills_on_death: 0 @@ -84,10 +107,10 @@ clear_skills_on_death: 0 // Should ground placed skills be removed when the caster changes maps? (Note 3) clear_skills_on_warp: 15 -//Setting this to YES will override the target mode of ground-based skills with the flag 0x01 to "No Enemies" -//The two skills affected by default are Pneuma and Safety Wall (if set to yes, those two skills will not protect everyone, but only allies) +//Setting this to true will override the target mode of ground-based skills with the flag 0x01 to "No Enemies" +//The two skills affected by default are Pneuma and Safety Wall (if set to true, those two skills will not protect everyone, but only allies) //See db/skill_unit_db.txt for more info. -defunit_not_enemy: no +defunit_not_enemy: false // Do skills do at least 'hits' damage when they don't miss/are blocked? //(for example, will firebolts always do "number of bolts" damage versus plants?) @@ -112,7 +135,7 @@ skill_reiteration: 0 skill_nofootset: 1 // Should traps (hunter traps + quagmire) change their target to "all" inside gvg/pvp grounds? (Note 3) -// Default on official servers: yes for player-traps +// Default on official servers: true for player-traps gvg_traps_target_all: 1 // Some traps settings (add as necessary): @@ -136,7 +159,7 @@ song_timer_reset: 0 // Whether placed down skills will check walls (Note 1) // (Makes it so that Storm Gust/Lord of Vermillion/etc when cast next to a wall, won't hit on the other side) -skill_wall_check: yes +skill_wall_check: true // When cloaking, Whether the wall is checked or not. (Note 1) // Note: When the skill does not checks for walls, you will always be considered @@ -161,7 +184,7 @@ land_skill_limit: 9 display_skill_fail: 0 // Can a player in chat room (in-game), be warped by a warp portal? (Note 1) -chat_warpportal: no +chat_warpportal: false // What should the wizard's "Sense" skill display on the defense fields? // 0: Do not show defense @@ -176,9 +199,9 @@ sense_type: 1 finger_offensive_type: 0 // Grandcross Settings (Don't mess with these) -// If set to no, hit interval is increased based on the amount of mobs standing on the same cell +// If set to false, hit interval is increased based on the amount of mobs standing on the same cell // (means that when there's stacked mobs in the same cell, they won't receive all hits) -gx_allhit: no +gx_allhit: false // Grandcross display type (Default 1) // 0: Yellow character @@ -188,8 +211,8 @@ gx_disptype: 1 // Max Level Difference for Devotion devotion_level_difference: 10 -// If no than you can use the ensemble skills alone. (Note 1) -player_skill_partner_check: yes +// If false than you can use the ensemble skills alone. (Note 1) +player_skill_partner_check: true // Remove trap type // 0 = Aegis system : Returns 1 'Trap' item @@ -197,7 +220,7 @@ player_skill_partner_check: yes skill_removetrap_type: 0 // Does using bow to do a backstab give a 50% damage penalty? (Note 1) -backstab_bow_penalty: yes +backstab_bow_penalty: true // How many times you could try to steal from a mob. // Note: It helps to avoid stealing exploit on monsters with few rare items @@ -212,7 +235,7 @@ skill_steal_max_tries: 0 copyskill_restrict: 2 // Does Berserk/Frenzy cancel other self-buffs when used? -berserk_cancels_buffs: no +berserk_cancels_buffs: false // Level and Strength of "MVP heal". When someone casts a heal of this level or // above, the heal formula is bypassed and this value is used instead. @@ -243,13 +266,13 @@ guild_aura: 31 // Allows players to skip menu when casting Teleport level 1 // Menu contains two options. "Random" and "Cancel" -skip_teleport_lv1_menu: no +skip_teleport_lv1_menu: false // Allow use of SG skills without proper day (Sun/Moon/Star) ? -allow_skill_without_day: no +allow_skill_without_day: false // Allow use of ES-type magic on players? -allow_es_magic_player: no +allow_es_magic_player: false // Miracle of the Sun, Moon and Stars skill ratio (100% = 10000) sg_miracle_skill_ratio: 2 @@ -267,17 +290,17 @@ skill_add_heal_rate: 7 // Whether the damage of EarthQuake with a single target on screen is able to be reflected. // Note: On official server, EQ is reflectable when there is only one target on the screen, // which might be an exploit to hunt the MVPs. -eq_single_target_reflectable: yes +eq_single_target_reflectable: true // On official server, you will receive damage from Reflection and some Tarot Card even in invincible status. // When this setting is enabled, it allows you to immune to all kinds of damage, including those stated previous. // (The number will show but no actual damage will be done) -invincible.nodamage: no +invincible_nodamage: false // Dancing Weapon Switch // On official server, a fix is in place that prevents the switching of weapons to cancel songs. -// Default: yes -dancing_weaponswitch_fix: yes +// Default: true +dancing_weaponswitch_fix: true // Skill Trap Type (GvG) // 0: (official) Traps in GvG only make player stop moving after its walk path is complete, and it activates other traps on the way. @@ -300,4 +323,4 @@ bowling_bash_area: 0 // edges will be away from SG. Knockback direction can also be influenced by Ganbantein and Land Protector. If you // punch a hole into SG it will for example create a "suck in" effect. // If you disable this setting, the knockback direction will be completely random (eAthena style). -stormgust_knockback: yes +stormgust_knockback: true diff --git a/conf/map/battle/status.conf b/conf/map/battle/status.conf new file mode 100644 index 000000000..37b2e013d --- /dev/null +++ b/conf/map/battle/status.conf @@ -0,0 +1,47 @@ +//================= Hercules Configuration ================================ +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2014-2016 Hercules Dev Team +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see <http://www.gnu.org/licenses/>. +//========================================================================= +// Battle (Status) Configuration File +//========================================================================= +// Note 1: Value is a config switch (true/false) +// Note 2: Value is in percents (100 means 100%) +// Note 3: Value is a bit field. If no description is given, +// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary) +//========================================================================= + +// Should skill casting be canceled when inflicted by curse/stun/sleep/etc (includes silence) (Note 3)? +status_cast_cancel: 0 + +// Adjustment for the natural rate of resistance from status changes. +// If 50, status defense is halved, and you need twice as much stats to block +// them (eg: 200 vit to completely block stun) +pc_status_def_rate: 100 +mob_status_def_rate: 100 + +// Maximum resistance to status changes. (100 = 100%) +// NOTE: Cards and equipment can go over this limit, so it only applies to natural resist. +pc_max_status_def: 100 +mob_max_status_def: 100 diff --git a/conf/readme.txt b/conf/readme.txt index 3323b5689..28ff254b6 100644 --- a/conf/readme.txt +++ b/conf/readme.txt @@ -9,12 +9,12 @@ How does this work? ------------------------------------------------------------------------------- Place only the settings you have changed in the import files. -For example, if you want to change a value in conf/battle/exp.conf: +For example, if you want to change a value in conf/map/battle/exp.conf: // Rate at which exp. is given. (Note 2) base_exp_rate: 700 -You could instead copy the setting into conf/import/battle_conf.txt, +You could instead copy the setting into conf/import/battle.conf, and you'll eliminate any problems updating in the future. Neat, isn't it? diff --git a/src/common/HPM.c b/src/common/HPM.c index 8e0bbe992..17dc4408e 100644 --- a/src/common/HPM.c +++ b/src/common/HPM.c @@ -2,7 +2,7 @@ * This file is part of Hercules. * http://herc.ws - http://github.com/HerculesWS/Hercules * - * Copyright (C) 2013-2015 Hercules Dev Team + * Copyright (C) 2013-2016 Hercules Dev Team * * Hercules is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -859,6 +859,52 @@ bool hplugins_get_battle_conf(const char *w1, int *value) } /** + * Parses battle config entries registered by plugins. + * + * @param config The configuration file to parse. + * @param filename Path to configuration file. + * @param imported Whether the current config is imported from another file. + * @retval false in case of error. + */ +bool hplugins_parse_battle_conf(const struct config_t *config, const char *filename, bool imported) +{ + const struct config_setting_t *setting = NULL; + int i, val, type; + char str[1024]; + bool retval = true; + + nullpo_retr(false, config); + + for (i = 0; i < VECTOR_LENGTH(HPM->config_listeners[HPCT_BATTLE]); i++) { + const struct HPConfListenStorage *entry = &VECTOR_INDEX(HPM->config_listeners[HPCT_BATTLE], i); + const char *config_name = entry->key; + if ((setting = libconfig->lookup(config, config_name)) == NULL) { + if (!imported) { + ShowWarning("Missing configuration '%s' in file %s!\n", config_name, filename); + retval = false; + } + continue; + } + + switch ((type = config_setting_type(setting))) { + case CONFIG_TYPE_INT: + val = libconfig->setting_get_int(setting); + break; + case CONFIG_TYPE_BOOL: + val = libconfig->setting_get_bool(setting); + break; + default: // Unsupported type + ShowWarning("Setting %s has unsupported type %d, ignoring...\n", config_name, type); + retval = false; + continue; + } + sprintf(str, "%d", val); // FIXME: Remove this when support to int's as value is added + entry->parse_func(config_name, str); + } + return retval; +} + +/** * Helper to destroy an interface's hplugin_data store and release any owned memory. * * The pointer will be cleared. @@ -1074,6 +1120,7 @@ void hpm_defaults(void) HPM->parse_packets = hplugins_parse_packets; HPM->load_sub = NULL; HPM->parseConf = hplugins_parse_conf; + HPM->parse_battle_conf = hplugins_parse_battle_conf; HPM->getBattleConf = hplugins_get_battle_conf; HPM->DataCheck = HPM_DataCheck; HPM->datacheck_init = HPM_datacheck_init; diff --git a/src/common/HPM.h b/src/common/HPM.h index 0b1275fde..104522090 100644 --- a/src/common/HPM.h +++ b/src/common/HPM.h @@ -2,7 +2,7 @@ * This file is part of Hercules. * http://herc.ws - http://github.com/HerculesWS/Hercules * - * Copyright (C) 2013-2015 Hercules Dev Team + * Copyright (C) 2013-2016 Hercules Dev Team * * Hercules is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -65,7 +65,9 @@ #endif // WIN32 +/* Forward Declarations */ struct HPMHooking_core_interface; +struct config_t; struct hplugin { DLL dll; @@ -155,6 +157,7 @@ struct HPM_interface { void *(*import_symbol) (char *name, unsigned int pID); void (*share) (void *value, const char *name); void (*config_read) (void); + bool (*parse_battle_conf) (const struct config_t *config, const char *filename, bool imported); char *(*pid2name) (unsigned int pid); unsigned char (*parse_packets) (int fd, int packet_id, enum HPluginPacketHookingPoints point); void (*load_sub) (struct hplugin *plugin); diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 8d4aa317f..3f916eb42 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -3611,7 +3611,7 @@ ACMD(reloadbattleconf) struct Battle_Config prev_config; memcpy(&prev_config, &battle_config, sizeof(prev_config)); - battle->config_read(map->BATTLE_CONF_FILENAME); + battle->config_read(map->BATTLE_CONF_FILENAME, false); if (prev_config.feature_roulette == 0 && battle_config.feature_roulette == 1 && !clif->parse_roulette_db()) battle_config.feature_roulette = 0; diff --git a/src/map/battle.c b/src/map/battle.c index 908f0364b..c564b81cd 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -41,6 +41,7 @@ #include "map/status.h" #include "common/HPM.h" #include "common/cbasetypes.h" +#include "common/conf.h" #include "common/ers.h" #include "common/memmgr.h" #include "common/nullpo.h" @@ -7018,7 +7019,7 @@ static const struct battle_data { { "show_steal_in_same_party", &battle_config.show_steal_in_same_party, 0, 0, 1, }, { "party_hp_mode", &battle_config.party_hp_mode, 0, 0, 1, }, { "show_party_share_picker", &battle_config.party_show_share_picker, 1, 0, 1, }, - { "show_picker.item_type", &battle_config.show_picker_item_type, 112, 0, INT_MAX, }, + { "show_picker_item_type", &battle_config.show_picker_item_type, 112, 0, INT_MAX, }, { "party_update_interval", &battle_config.party_update_interval, 1000, 100, INT_MAX, }, { "party_item_share_type", &battle_config.party_share_type, 0, 0, 1|2|3, }, { "attack_attr_none", &battle_config.attack_attr_none, ~BL_PC, BL_NUL, BL_ALL, }, @@ -7177,14 +7178,14 @@ static const struct battle_data { { "display_status_timers", &battle_config.display_status_timers, 1, 0, 1, }, { "skill_add_heal_rate", &battle_config.skill_add_heal_rate, 7, 0, INT_MAX, }, { "eq_single_target_reflectable", &battle_config.eq_single_target_reflectable, 1, 0, 1, }, - { "invincible.nodamage", &battle_config.invincible_nodamage, 0, 0, 1, }, + { "invincible_nodamage", &battle_config.invincible_nodamage, 0, 0, 1, }, { "mob_slave_keep_target", &battle_config.mob_slave_keep_target, 0, 0, 1, }, { "autospell_check_range", &battle_config.autospell_check_range, 0, 0, 1, }, { "knockback_left", &battle_config.knockback_left, 1, 0, 1, }, { "client_reshuffle_dice", &battle_config.client_reshuffle_dice, 0, 0, 1, }, { "client_sort_storage", &battle_config.client_sort_storage, 0, 0, 1, }, - { "feature.buying_store", &battle_config.feature_buying_store, 1, 0, 1, }, - { "feature.search_stores", &battle_config.feature_search_stores, 1, 0, 1, }, + { "features/buying_store", &battle_config.feature_buying_store, 1, 0, 1, }, + { "features/search_stores", &battle_config.feature_search_stores, 1, 0, 1, }, { "searchstore_querydelay", &battle_config.searchstore_querydelay, 10, 0, INT_MAX, }, { "searchstore_maxresults", &battle_config.searchstore_maxresults, 30, 1, INT_MAX, }, { "display_party_name", &battle_config.display_party_name, 0, 0, 1, }, @@ -7204,7 +7205,7 @@ static const struct battle_data { { "atcommand_max_stat_bypass", &battle_config.atcommand_max_stat_bypass, 0, 0, 100, }, { "skill_amotion_leniency", &battle_config.skill_amotion_leniency, 90, 0, 300 }, { "mvp_tomb_enabled", &battle_config.mvp_tomb_enabled, 1, 0, 1 }, - { "feature.atcommand_suggestions", &battle_config.atcommand_suggestions_enabled, 0, 0, 1 }, + { "features/atcommand_suggestions", &battle_config.atcommand_suggestions_enabled, 0, 0, 1 }, { "min_npc_vendchat_distance", &battle_config.min_npc_vendchat_distance, 3, 0, 100 }, { "vendchat_near_hiddennpc", &battle_config.vendchat_near_hiddennpc, 0, 0, 1 }, { "atcommand_mobinfo_type", &battle_config.atcommand_mobinfo_type, 0, 0, 1 }, @@ -7225,8 +7226,8 @@ static const struct battle_data { { "client_accept_chatdori", &battle_config.client_accept_chatdori, 0, 0, INT_MAX, }, { "snovice_call_type", &battle_config.snovice_call_type, 0, 0, 1, }, { "guild_notice_changemap", &battle_config.guild_notice_changemap, 2, 0, 2, }, - { "feature.banking", &battle_config.feature_banking, 1, 0, 1, }, - { "feature.auction", &battle_config.feature_auction, 0, 0, 2, }, + { "features/banking", &battle_config.feature_banking, 1, 0, 1, }, + { "features/auction", &battle_config.feature_auction, 0, 0, 2, }, { "idletime_criteria", &battle_config.idletime_criteria, 0x25, 1, INT_MAX, }, { "mon_trans_disable_in_gvg", &battle_config.mon_trans_disable_in_gvg, 0, 0, 1, }, { "case_sensitive_aegisnames", &battle_config.case_sensitive_aegisnames, 1, 0, 1, }, @@ -7238,7 +7239,7 @@ static const struct battle_data { { "monster_chase_refresh", &battle_config.mob_chase_refresh, 1, 0, 30, }, { "mob_icewall_walk_block", &battle_config.mob_icewall_walk_block, 75, 0, 255, }, { "boss_icewall_walk_block", &battle_config.boss_icewall_walk_block, 0, 0, 255, }, - { "feature.roulette", &battle_config.feature_roulette, 1, 0, 1, }, + { "features/roulette", &battle_config.feature_roulette, 1, 0, 1, }, { "show_monster_hp_bar", &battle_config.show_monster_hp_bar, 1, 0, 1, }, { "fix_warp_hit_delay_abuse", &battle_config.fix_warp_hit_delay_abuse, 0, 0, 1, }, { "costume_refine_def", &battle_config.costume_refine_def, 1, 0, 1, }, @@ -7413,28 +7414,36 @@ static int Hercules_report_timer(int tid, int64 tick, int id, intptr_t data) { } #endif -int battle_set_value(const char* w1, const char* w2) +bool battle_set_value_sub(int index, int value) { - int val = config_switch(w2); + Assert_retr(false, index >= 0); + if (value < battle_data[index].min || value > battle_data[index].max) { + ShowWarning("Value for setting '%s': %d is invalid (min:%d max:%d)! Defaulting to %d...\n", + battle_data[index].str, value, battle_data[index].min, battle_data[index].max, battle_data[index].defval); + value = battle_data[index].defval; + } + *battle_data[index].val = value; + return true; +} + +bool battle_set_value(const char *param, const char *value) +{ + int val; int i; - nullpo_retr(1, w1); - nullpo_retr(1, w2); - ARR_FIND(0, ARRAYLENGTH(battle_data), i, strcmpi(w1, battle_data[i].str) == 0); - if (i == ARRAYLENGTH(battle_data)) { - if( HPM->parseConf(w1,w2,HPCT_BATTLE) ) /* if plugin-owned, succeed */ - return 1; - return 0; // not found - } + nullpo_retr(false, param); + nullpo_retr(false, value); - if (val < battle_data[i].min || val > battle_data[i].max) - { - ShowWarning("Value for setting '%s': %s is invalid (min:%i max:%i)! Defaulting to %i...\n", w1, w2, battle_data[i].min, battle_data[i].max, battle_data[i].defval); - val = battle_data[i].defval; + val = config_switch(value); + + ARR_FIND(0, ARRAYLENGTH(battle_data), i, strcmpi(param, battle_data[i].str) == 0); + if (i == ARRAYLENGTH(battle_data)) { + if (HPM->parseConf(param, value, HPCT_BATTLE)) /* if plugin-owned, succeed */ + return true; + return false; // not found } - *battle_data[i].val = val; - return 1; + return battle->config_set_value_sub(i, val); } bool battle_get_value(const char *w1, int *value) @@ -7485,36 +7494,36 @@ void battle_adjust_conf(void) { #if PACKETVER < 20100427 if( battle_config.feature_buying_store ) { - ShowWarning("conf/battle/feature.conf buying_store is enabled but it requires PACKETVER 2010-04-27 or newer, disabling...\n"); + ShowWarning("conf/map/battle/feature.conf buying_store is enabled but it requires PACKETVER 2010-04-27 or newer, disabling...\n"); battle_config.feature_buying_store = 0; } #endif #if PACKETVER < 20100803 if( battle_config.feature_search_stores ) { - ShowWarning("conf/battle/feature.conf search_stores is enabled but it requires PACKETVER 2010-08-03 or newer, disabling...\n"); + ShowWarning("conf/map/battle/feature.conf search_stores is enabled but it requires PACKETVER 2010-08-03 or newer, disabling...\n"); battle_config.feature_search_stores = 0; } #endif #if PACKETVER < 20130724 if( battle_config.feature_banking ) { - ShowWarning("conf/battle/feature.conf banking is enabled but it requires PACKETVER 2013-07-24 or newer, disabling...\n"); + ShowWarning("conf/map/battle/feature.conf banking is enabled but it requires PACKETVER 2013-07-24 or newer, disabling...\n"); battle_config.feature_banking = 0; } #endif #if PACKETVER < 20141022 if( battle_config.feature_roulette ) { - ShowWarning("conf/battle/feature.conf roulette is enabled but it requires PACKETVER 2014-10-22 or newer, disabling...\n"); + ShowWarning("conf/map/battle/feature.conf roulette is enabled but it requires PACKETVER 2014-10-22 or newer, disabling...\n"); battle_config.feature_roulette = 0; } #endif #if PACKETVER > 20120000 && PACKETVER < 20130515 /* exact date (when it started) not known */ if( battle_config.feature_auction == 1 ) { - ShowWarning("conf/battle/feature.conf:feature.auction is enabled but it is not stable on PACKETVER "EXPAND_AND_QUOTE(PACKETVER)", disabling...\n"); - ShowWarning("conf/battle/feature.conf:feature.auction change value to '2' to silence this warning and maintain it enabled\n"); + ShowWarning("conf/map/battle/feature.conf:features/auction is enabled but it is not stable on PACKETVER "EXPAND_AND_QUOTE(PACKETVER)", disabling...\n"); + ShowWarning("conf/map/battle/feature.conf:features/auction change value to '2' to silence this warning and maintain it enabled\n"); battle_config.feature_auction = 0; } #endif @@ -7525,48 +7534,78 @@ void battle_adjust_conf(void) { #endif } -int battle_config_read(const char* cfgName) +/** + * Dynamically reads battle configuration and initializes required variables. + * + * @param filename Path to configuration file. + * @param imported Whether the current config is imported from another file. + * @retval false in case of error. + */ +bool battle_config_read(const char *filename, bool imported) { - FILE* fp; - static int count = 0; + struct config_t config; + const struct config_setting_t *setting = NULL; + int i; + const char *import = NULL; + bool retval = true; + + nullpo_retr(false, filename); - nullpo_ret(cfgName); + if (!libconfig->load_file(&config, filename)) + return false; // Error message is already shown by libconfig->load_file() - if (count == 0) + if (!imported) battle->config_set_defaults(); - count++; + for (i = 0; i < ARRAYLENGTH(battle_data); i++) { + int type, val; + char config_name[256]; + safesnprintf(config_name, sizeof config_name, "battle_configuration/%s", battle_data[i].str); - fp = fopen(cfgName,"r"); - if (fp == NULL) - ShowError("File not found: %s\n", cfgName); - else - { - char line[1024], w1[1024], w2[1024]; - while(fgets(line, sizeof(line), fp)) - { - if (line[0] == '/' && line[1] == '/') - continue; - if (sscanf(line, "%1023[^:]:%1023s", w1, w2) != 2) - continue; - if (strcmpi(w1, "import") == 0) - battle->config_read(w2); - else - if (battle->config_set_value(w1, w2) == 0) - ShowWarning("Unknown setting '%s' in file %s\n", w1, cfgName); + if ((setting = libconfig->lookup(&config, config_name)) == NULL) { + if (!imported) { + ShowWarning("Missing configuration '%s' in file %s!\n", config_name, filename); + retval = false; + } + continue; } - fclose(fp); + switch ((type = config_setting_type(setting))) { + case CONFIG_TYPE_INT: + val = libconfig->setting_get_int(setting); + break; + case CONFIG_TYPE_BOOL: + val = libconfig->setting_get_bool(setting); + break; + default: // Unsupported type + ShowWarning("Setting %s has unsupported type %d, ignoring...\n", config_name, type); + retval = false; + continue; + } + + if (!battle->config_set_value_sub(i, val)) + retval = false; } - count--; + if (!HPM->parse_battle_conf(&config, filename, imported)) + retval = false; + + // import should overwrite any previous configuration, so it should be called last + if (libconfig->lookup_string(&config, "import", &import) == CONFIG_TRUE) { + if (strcmp(import, filename) == 0 || strcmp(import, map->BATTLE_CONF_FILENAME) == 0) { + ShowWarning("battle_config_read: Loop detected! Skipping 'import'...\n"); + } else { + if (!battle->config_read(import, true)) + retval = false; + } + } - if (count == 0) { + libconfig->destroy(&config); + if (!imported) { battle->config_adjust(); clif->bc_ready(); } - - return 0; + return retval; } void do_init_battle(bool minimal) { @@ -7645,6 +7684,7 @@ void battle_defaults(void) { battle->calc_drain = battle_calc_drain; battle->config_read = battle_config_read; battle->config_set_defaults = battle_set_defaults; + battle->config_set_value_sub = battle_set_value_sub; battle->config_set_value = battle_set_value; battle->config_get_value = battle_get_value; battle->config_adjust = battle_adjust_conf; diff --git a/src/map/battle.h b/src/map/battle.h index e04a713ae..ebfa0e305 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -2,7 +2,7 @@ * This file is part of Hercules. * http://herc.ws - http://github.com/HerculesWS/Hercules * - * Copyright (C) 2012-2015 Hercules Dev Team + * Copyright (C) 2012-2016 Hercules Dev Team * Copyright (C) Athena Dev Teams * * Hercules is free software: you can redistribute it and/or modify @@ -663,10 +663,11 @@ struct battle_interface { int (*adjust_skill_damage) (int m, unsigned short skill_id); int64 (*add_mastery) (struct map_session_data *sd,struct block_list *target,int64 dmg,int type); int (*calc_drain) (int64 damage, int rate, int per); - /* - battle_config */ - int (*config_read) (const char *cfgName); + /* battle_config */ + bool (*config_read) (const char *filename, bool imported); void (*config_set_defaults) (void); - int (*config_set_value) (const char *w1, const char *w2); + bool (*config_set_value_sub) (int index, int value); + bool (*config_set_value) (const char *param, const char *value); bool (*config_get_value) (const char *w1, int *value); void (*config_adjust) (void); /* ----------------------------------------- */ diff --git a/src/map/map.c b/src/map/map.c index 17c025ff3..40bcd9263 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -6367,7 +6367,7 @@ int do_init(int argc, char *argv[]) map->INTER_CONF_NAME = aStrdup("conf/common/inter-server.conf"); map->LOG_CONF_NAME = aStrdup("conf/map/logs.conf"); map->MAP_CONF_NAME = aStrdup("conf/map/map-server.conf"); - map->BATTLE_CONF_FILENAME = aStrdup("conf/battle.conf"); + map->BATTLE_CONF_FILENAME = aStrdup("conf/map/battle.conf"); map->ATCOMMAND_CONF_FILENAME = aStrdup("conf/atcommand.conf"); map->SCRIPT_CONF_NAME = aStrdup("conf/map/script.conf"); map->MSG_CONF_NAME = aStrdup("conf/messages.conf"); @@ -6402,6 +6402,7 @@ int do_init(int argc, char *argv[]) CHECK_OLD_LOCAL_CONF("conf/import/log_conf.txt", "conf/import/logs.conf"); CHECK_OLD_LOCAL_CONF("conf/import/script_conf.txt", "conf/import/script.conf"); CHECK_OLD_LOCAL_CONF("conf/import/packet_conf.txt", "conf/import/socket.conf"); + CHECK_OLD_LOCAL_CONF("conf/import/battle_conf.txt", "conf/import/battle.conf"); #undef CHECK_OLD_LOCAL_CONF } @@ -6432,7 +6433,7 @@ int do_init(int argc, char *argv[]) chrif->setip(ip_str); } - battle->config_read(map->BATTLE_CONF_FILENAME); + battle->config_read(map->BATTLE_CONF_FILENAME, false); atcommand->msg_read(map->MSG_CONF_NAME, false); map->inter_config_read(map->INTER_CONF_NAME, false); logs->config_read(map->LOG_CONF_NAME, false); @@ -6596,7 +6597,7 @@ void map_defaults(void) { map->INTER_CONF_NAME="conf/common/inter-server.conf"; map->LOG_CONF_NAME="conf/map/logs.conf"; map->MAP_CONF_NAME = "conf/map/map-server.conf"; - map->BATTLE_CONF_FILENAME = "conf/battle.conf"; + map->BATTLE_CONF_FILENAME = "conf/map/battle.conf"; map->ATCOMMAND_CONF_FILENAME = "conf/atcommand.conf"; map->SCRIPT_CONF_NAME = "conf/map/script.conf"; map->MSG_CONF_NAME = "conf/messages.conf"; diff --git a/tools/configconverter.pl b/tools/configconverter.pl index 669e3741c..4fafd1f64 100755 --- a/tools/configconverter.pl +++ b/tools/configconverter.pl @@ -531,6 +531,409 @@ my @defaults = ( import => {parse => \&parsecfg_string, print => \&printcfg_nil, path => "", default => "conf/import/packet_conf.txt"}, } }, + { + files => ['battle.conf', 'battle/battle.conf', 'battle/client.conf', 'battle/drops.conf', 'battle/exp.conf', 'battle/gm.conf', 'battle/guild.conf', 'battle/battleground.conf', 'battle/items.conf', 'battle/monster.conf', 'battle/party.conf', 'battle/pet.conf', 'battle/homunc.conf', 'battle/player.conf', 'battle/skill.conf', 'battle/status.conf', 'battle/feature.conf', 'battle/misc.conf', 'import/battle_conf.txt'], + settings => { + bg_flee_penalty => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battleground:", default => 20}, + bg_update_interval => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battleground:", default => 1000}, + 'feature.buying_store' => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "feature:features/buying_store", default => "true"}, + 'feature.search_stores' => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "feature:features/search_stores", default => "true"}, + 'feature.atcommand_suggestions' => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "feature:features/atcommand_suggestions", default => "false"}, + 'feature.banking' => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "feature:features/banking", default => "true"}, + 'feature.auction' => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "feature:features/auction", default => "false"}, + 'feature.roulette' => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "feature:features/roulette", default => "false"}, + atcommand_spawn_quantity_limit => {parse => \&parsecfg_int, print => \&printcfg_int, path => "gm:", default => 100}, + atcommand_slave_clone_limit => {parse => \&parsecfg_int, print => \&printcfg_int, path => "gm:", default => 25}, + partial_name_scan => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "gm:", default => "true"}, + atcommand_max_stat_bypass => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "gm:", default => "false"}, + ban_hack_trade => {parse => \&parsecfg_int, print => \&printcfg_int, path => "gm:", default => 5}, + atcommand_mobinfo_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "gm:", default => 0}, + gm_ignore_warpable_area => {parse => \&parsecfg_int, print => \&printcfg_int, path => "gm:", default => 2}, + atcommand_levelup_events => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "gm:", default => "false"}, + guild_emperium_check => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "guild:", default => "true"}, + guild_exp_limit => {parse => \&parsecfg_int, print => \&printcfg_int, path => "guild:", default => 50}, + guild_max_castles => {parse => \&parsecfg_int, print => \&printcfg_int, path => "guild:", default => 0}, + guild_skill_relog_delay => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "guild:", default => "false"}, + castle_defense_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "guild:", default => 100}, + gvg_flee_penalty => {parse => \&parsecfg_int, print => \&printcfg_int, path => "guild:", default => 20}, + require_glory_guild => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "guild:", default => "false"}, + max_guild_alliance => {parse => \&parsecfg_int, print => \&printcfg_int, path => "guild:", default => 3}, + guild_notice_changemap => {parse => \&parsecfg_int, print => \&printcfg_int, path => "guild:", default => 2}, + guild_castle_invite => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "guild:", default => "false"}, + guild_castle_expulsion => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "guild:", default => "false"}, + hom_setting => {parse => \&parsecfg_int, print => \&printcfg_hexint, path => "homunc:", default => 0x1D}, + homunculus_friendly_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "homunc:", default => 100}, + hom_rename => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "homunc:", default => "false"}, + hvan_explosion_intimate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "homunc:", default => 45000}, + homunculus_show_growth => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "homunc:", default => "true"}, + homunculus_autoloot => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "homunc:", default => "true"}, + homunculus_auto_vapor => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "homunc:", default => "true"}, + homunculus_max_level => {parse => \&parsecfg_int, print => \&printcfg_int, path => "homunc:", default => 99}, + homunculus_S_max_level => {parse => \&parsecfg_int, print => \&printcfg_int, path => "homunc:", default => 150}, + enable_baseatk => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 9}, + enable_perfect_flee => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 1}, + enable_critical => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 17}, + mob_critical_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 100}, + critical_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 100}, + attack_walk_delay => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 15}, + pc_damage_walk_delay_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 20}, + damage_walk_delay_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 100}, + multihit_delay => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 80}, + player_damage_delay_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 100}, + undead_detect_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 0}, + attribute_recover => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "battle:", default => "false"}, + min_hitrate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 5}, + max_hitrate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 100}, + agi_penalty_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 1}, + agi_penalty_target => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 1}, + agi_penalty_count => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 3}, + agi_penalty_num => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 10}, + vit_penalty_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 1}, + vit_penalty_target => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 1}, + vit_penalty_count => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 3}, + vit_penalty_num => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 5}, + weapon_defense_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 0}, + magic_defense_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 0}, + attack_direction_change => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 0}, + attack_attr_none => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 14}, + equip_natural_break_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 0}, + equip_self_break_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 100}, + equip_skill_break_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 100}, + delay_battle_damage => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "battle:", default => "true"}, + arrow_decrement => {parse => \&parsecfg_int, print => \&printcfg_int, path => "battle:", default => 1}, + autospell_check_range => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "battle:", default => "false"}, + knockback_left => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "battle:", default => "true"}, + snap_dodge => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "battle:", default => "false"}, + packet_obfuscation => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 1}, + min_chat_delay => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 0}, + min_hair_style => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 0}, + max_hair_style => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 29}, + min_hair_color => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 0}, + max_hair_color => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 8}, + min_cloth_color => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 0}, + max_cloth_color => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 4}, + min_body_style => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 0}, + max_body_style => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 4}, + hide_woe_damage => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "client:", default => "true"}, + pet_hair_style => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 100}, + area_size => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 14}, + max_walk_path => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 17}, + max_lv => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 99}, + aura_lv => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 99}, + client_limit_unit_lv => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 0}, + wedding_modifydisplay => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "client:", default => "false"}, + save_clothcolor => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "client:", default => "true"}, + save_body_style => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "client:", default => "false"}, + wedding_ignorepalette => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "client:", default => "false"}, + xmas_ignorepalette => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "client:", default => "false"}, + summer_ignorepalette => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "client:", default => "false"}, + hanbok_ignorepalette => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "client:", default => "false"}, + display_version => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "client:", default => "false"}, + display_hallucination => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "client:", default => "true"}, + display_status_timers => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "client:", default => "true"}, + client_reshuffle_dice => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "client:", default => "true"}, + client_sort_storage => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "client:", default => "false"}, + client_accept_chatdori => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 0}, + client_emblem_max_blank_percent => {parse => \&parsecfg_int, print => \&printcfg_int, path => "client:", default => 100}, + item_auto_get => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "drops:", default => "false"}, + flooritem_lifetime => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 60000}, + item_first_get_time => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 3000}, + item_second_get_time => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 1000}, + item_third_get_time => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 1000}, + mvp_item_first_get_time => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 10000}, + mvp_item_second_get_time => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 10000}, + mvp_item_third_get_time => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 2000}, + item_rate_common => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 100}, + item_rate_common_boss => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 100}, + item_drop_common_min => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 1}, + item_drop_common_max => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 10000}, + item_rate_heal => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 100}, + item_rate_heal_boss => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 100}, + item_drop_heal_min => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 1}, + item_drop_heal_max => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 10000}, + item_rate_use => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 100}, + item_rate_use_boss => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 100}, + item_drop_use_min => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 1}, + item_drop_use_max => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 10000}, + item_rate_equip => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 100}, + item_rate_equip_boss => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 100}, + item_drop_equip_min => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 1}, + item_drop_equip_max => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 10000}, + item_rate_card => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 100}, + item_rate_card_boss => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 100}, + item_drop_card_min => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 1}, + item_drop_card_max => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 10000}, + item_rate_mvp => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 100}, + item_drop_mvp_min => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 1}, + item_drop_mvp_max => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 10000}, + item_rate_adddrop => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 100}, + item_drop_add_min => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 1}, + item_drop_add_max => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 10000}, + item_rate_treasure => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 100}, + item_drop_treasure_min => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 1}, + item_drop_treasure_max => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 10000}, + item_logarithmic_drops => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "drops:", default => "false"}, + drop_rate0item => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "drops:", default => "false"}, + drops_by_luk => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 0}, + drops_by_luk2 => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 0}, + alchemist_summon_reward => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 1}, + rare_drop_announce => {parse => \&parsecfg_int, print => \&printcfg_int, path => "drops:", default => 0}, + base_exp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 100}, + job_exp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 100}, + multi_level_up => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "exp:", default => "false"}, + max_exp_gain_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 0}, + exp_calc_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 0}, + exp_bonus_attacker => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 25}, + exp_bonus_max_attacker => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 12}, + mvp_exp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 100}, + quest_exp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 100}, + heal_exp => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 0}, + resurrection_exp => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 0}, + shop_exp => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 0}, + pvp_exp => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "exp:", default => "true"}, + death_penalty_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 1}, + death_penalty_base => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 100}, + death_penalty_job => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 100}, + zeny_penalty => {parse => \&parsecfg_int, print => \&printcfg_int, path => "exp:", default => 0}, + disp_experience => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "exp:", default => "false"}, + disp_zeny => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "exp:", default => "false"}, + use_statpoint_table => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "exp:", default => "true"}, + vending_max_value => {parse => \&parsecfg_int, print => \&printcfg_int, path => "items:", default => 1000000000}, + vending_over_max => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "items:", default => "true"}, + vending_tax => {parse => \&parsecfg_int, print => \&printcfg_int, path => "items:", default => 200}, + buyer_name => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "items:", default => "true"}, + weapon_produce_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "items:", default => 100}, + potion_produce_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "items:", default => 100}, + produce_item_name_input => {parse => \&parsecfg_int, print => \&printcfg_hexint, path => "items:", default => 0x03}, + dead_branch_active => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "items:", default => "true"}, + random_monster_checklv => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "items:", default => "false"}, + ignore_items_gender => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "items:", default => "true"}, + item_check => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "items:", default => "false"}, + item_use_interval => {parse => \&parsecfg_int, print => \&printcfg_int, path => "items:", default => 100}, + cashfood_use_interval => {parse => \&parsecfg_int, print => \&printcfg_int, path => "items:", default => 60000}, + gtb_sc_immunity => {parse => \&parsecfg_int, print => \&printcfg_int, path => "items:", default => 50}, + autospell_stacking => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "items:", default => "false"}, + item_restricted_consumption_type => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "items:", default => "true"}, + item_enabled_npc => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "items:", default => "true"}, + unequip_restricted_equipment => {parse => \&parsecfg_int, print => \&printcfg_int, path => "items:", default => 0}, + pk_mode => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 0}, + manner_system => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 31}, + pk_min_level => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 55}, + pk_level_range => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 0}, + skill_log => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "false"}, + battle_log => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "false"}, + etc_log => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "false"}, + warp_point_debug => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "false"}, + night_at_start => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "false"}, + day_duration => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 0}, + night_duration => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 0}, + duel_allow_pvp => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "false"}, + duel_allow_gvg => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "false"}, + duel_allow_teleport => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "false"}, + duel_autoleave_when_die => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "true"}, + duel_time_interval => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 60}, + duel_only_on_same_map => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "false"}, + official_cell_stack_limit => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 1}, + custom_cell_stack_limit => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 1}, + check_occupied_cells => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "true"}, + at_mapflag => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "false"}, + at_timeout => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 0}, + auction_feeperhour => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 12000}, + auction_maximumprice => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 500000000}, + searchstore_querydelay => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 10}, + searchstore_maxresults => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 30}, + cashshop_show_points => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "false"}, + mail_show_status => {parse => \&parsecfg_int, print => \&printcfg_int, path => "misc:", default => 0}, + mon_trans_disable_in_gvg => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "false"}, + case_sensitive_aegisnames => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "misc:", default => "true"}, + mvp_hp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 100}, + monster_hp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 100}, + monster_max_aspd => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 199}, + monster_ai => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 0}, + monster_chase_refresh => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 3}, + mob_warp => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 0}, + mob_active_time => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 0}, + boss_active_time => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 0}, + view_range_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 100}, + chase_range_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 100}, + monster_active_enable => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "true"}, + override_mob_names => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 0}, + monster_damage_delay_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 100}, + monster_loot_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 0}, + mob_skill_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 100}, + mob_skill_delay => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 100}, + mob_count_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 100}, + mob_spawn_delay => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 100}, + plant_spawn_delay => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 100}, + boss_spawn_delay => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 100}, + no_spawn_on_player => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 0}, + force_random_spawn => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "false"}, + slaves_inherit_mode => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 2}, + slaves_inherit_speed => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 3}, + summons_trigger_autospells => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "true"}, + retaliate_to_master => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "true"}, + mob_changetarget_byskill => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "false"}, + monster_class_change_full_recover => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "true"}, + show_mob_info => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 0}, + zeny_from_mobs => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "false"}, + mobs_level_up => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "false"}, + mobs_level_up_exp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 1}, + dynamic_mobs => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "true"}, + mob_remove_damaged => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "true"}, + mob_remove_delay => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 300000}, + mob_npc_event_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 1}, + ksprotection => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 0}, + mob_slave_keep_target => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "true"}, + mvp_tomb_enabled => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "true"}, + show_monster_hp_bar => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "true"}, + mob_size_influence => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "monster:", default => "false"}, + mob_icewall_walk_block => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 220}, + boss_icewall_walk_block => {parse => \&parsecfg_int, print => \&printcfg_int, path => "monster:", default => 1}, + show_steal_in_same_party => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "party:", default => "false"}, + party_update_interval => {parse => \&parsecfg_int, print => \&printcfg_int, path => "party:", default => 1000}, + party_hp_mode => {parse => \&parsecfg_int, print => \&printcfg_int, path => "party:", default => 0}, + show_party_share_picker => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "party:", default => "true"}, + 'show_picker.item_type' => {parse => \&parsecfg_int, print => \&printcfg_int, path => "party:show_picker_item_type", default => 112}, + party_item_share_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "party:", default => 0}, + idle_no_share => {parse => \&parsecfg_int, print => \&printcfg_int, path => "party:", default => 0}, + party_even_share_bonus => {parse => \&parsecfg_int, print => \&printcfg_int, path => "party:", default => 0}, + display_party_name => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "party:", default => "false"}, + pet_catch_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "pet:", default => 100}, + pet_rename => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "pet:", default => "false"}, + pet_friendly_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "pet:", default => 100}, + pet_hungry_delay_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "pet:", default => 100}, + pet_hungry_friendly_decrease => {parse => \&parsecfg_int, print => \&printcfg_int, path => "pet:", default => 5}, + pet_equip_required => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "pet:", default => "true"}, + pet_attack_support => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "pet:", default => "false"}, + pet_damage_support => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "pet:", default => "false"}, + pet_support_min_friendly => {parse => \&parsecfg_int, print => \&printcfg_int, path => "pet:", default => 900}, + pet_equip_min_friendly => {parse => \&parsecfg_int, print => \&printcfg_int, path => "pet:", default => 900}, + pet_status_support => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "pet:", default => "false"}, + pet_support_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "pet:", default => 100}, + pet_attack_exp_to_master => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "pet:", default => "false"}, + pet_attack_exp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "pet:", default => 100}, + pet_lv_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "pet:", default => 0}, + pet_max_stats => {parse => \&parsecfg_int, print => \&printcfg_int, path => "pet:", default => 99}, + pet_max_atk1 => {parse => \&parsecfg_int, print => \&printcfg_int, path => "pet:", default => 500}, + pet_max_atk2 => {parse => \&parsecfg_int, print => \&printcfg_int, path => "pet:", default => 1000}, + pet_disable_in_gvg => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "pet:", default => "false"}, + hp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 100}, + sp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 100}, + left_cardfix_to_right => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "true"}, + restart_hp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 0}, + restart_sp_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 0}, + player_skillfree => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "false"}, + player_skillup_limit => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "true"}, + quest_skill_learn => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "false"}, + quest_skill_reset => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "false"}, + basic_skill_check => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "true"}, + player_invincible_time => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 5000}, + fix_warp_hit_delay_abuse => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "false"}, + natural_healhp_interval => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 6000}, + natural_healsp_interval => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 8000}, + natural_heal_skill_interval => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 10000}, + natural_heal_weight_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 50}, + max_aspd => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 190}, + max_third_aspd => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 193}, + max_walk_speed => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 300}, + max_hp => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 1000000}, + max_sp => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 1000000}, + max_parameter => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 99}, + max_third_parameter => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 130}, + max_extended_parameter => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 125}, + max_baby_parameter => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 80}, + max_baby_third_parameter => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 117}, + max_def => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 99}, + over_def_bonus => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 0}, + max_cart_weight => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 8000}, + prevent_logout => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 10000}, + show_hp_sp_drain => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "false"}, + show_hp_sp_gain => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "true"}, + show_katar_crit_bonus => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "false"}, + friend_auto_add => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "true"}, + invite_request_check => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "true"}, + bone_drop => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 0}, + character_size => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 0}, + idle_no_autoloot => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 0}, + min_npc_vendchat_distance => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 3}, + vendchat_near_hiddennpc => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "false"}, + snovice_call_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "player:", default => 0}, + idletime_criteria => {parse => \&parsecfg_int, print => \&printcfg_hexint, path => "player:", default => 0x1F}, + costume_refine_def => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "true"}, + shadow_refine_def => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "true"}, + shadow_refine_atk => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "true"}, + player_warp_keep_direction => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "player:", default => "true"}, + casting_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 100}, + delay_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 100}, + delay_dependon_dex => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "false"}, + delay_dependon_agi => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "false"}, + min_skill_delay_limit => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 100}, + default_walk_delay => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 300}, + no_skill_delay => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 2}, + castrate_dex_scale => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 150}, + vcast_stat_scale => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 530}, + skill_amotion_leniency => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 90}, + skill_delay_attack_enable => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "true"}, + skill_add_range => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 0}, + skill_out_range_consume => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "false"}, + skillrange_by_distance => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 14}, + skillrange_from_weapon => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 0}, + skill_caster_check => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "true"}, + clear_skills_on_death => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 0}, + clear_skills_on_warp => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 15}, + defunit_not_enemy => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "false"}, + skill_min_damage => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 6}, + combo_delay_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 100}, + auto_counter_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 15}, + skill_reiteration => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 0}, + skill_nofootset => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 1}, + gvg_traps_target_all => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 1}, + traps_setting => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 0}, + summon_flora_setting => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 3}, + song_timer_reset => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 0}, + skill_wall_check => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "true"}, + player_cloak_check_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 1}, + monster_cloak_check_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 4}, + land_skill_limit => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 9}, + display_skill_fail => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 0}, + chat_warpportal => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "false"}, + sense_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 1}, + finger_offensive_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 0}, + gx_allhit => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "false"}, + gx_disptype => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 1}, + devotion_level_difference => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 10}, + player_skill_partner_check => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "true"}, + skill_removetrap_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 0}, + backstab_bow_penalty => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "true"}, + skill_steal_max_tries => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 0}, + copyskill_restrict => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 2}, + berserk_cancels_buffs => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "false"}, + max_heal => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 9999}, + max_heal_lv => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 11}, + emergency_call => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 11}, + guild_aura => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 31}, + skip_teleport_lv1_menu => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "false"}, + allow_skill_without_day => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "false"}, + allow_es_magic_player => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "false"}, + sg_miracle_skill_ratio => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 2}, + sg_miracle_skill_duration => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 3600000}, + sg_angel_skill_ratio => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 10}, + skill_add_heal_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 7}, + eq_single_target_reflectable => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "true"}, + 'invincible.nodamage' => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "false"}, + dancing_weaponswitch_fix => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "true"}, + skill_trap_type => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 0}, + mob_max_skilllvl => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 100}, + bowling_bash_area => {parse => \&parsecfg_int, print => \&printcfg_int, path => "skill:", default => 0}, + stormgust_knockback => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "skill:", default => "true"}, + status_cast_cancel => {parse => \&parsecfg_int, print => \&printcfg_int, path => "status:", default => 0}, + pc_status_def_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "status:", default => 100}, + mob_status_def_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "status:", default => 100}, + pc_max_status_def => {parse => \&parsecfg_int, print => \&printcfg_int, path => "status:", default => 100}, + mob_max_status_def => {parse => \&parsecfg_int, print => \&printcfg_int, path => "status:", default => 100}, + import => {parse => \&parsecfg_stringarr, print => \&printcfg_nil, path => "", default => ['conf/battle/battle.conf', 'conf/battle/client.conf', 'conf/battle/drops.conf', 'conf/battle/exp.conf', 'conf/battle/gm.conf', 'conf/battle/guild.conf', 'conf/battle/battleground.conf', 'conf/battle/items.conf', 'conf/battle/monster.conf', 'conf/battle/party.conf', 'conf/battle/pet.conf', 'conf/battle/homunc.conf', 'conf/battle/player.conf', 'conf/battle/skill.conf', 'conf/battle/status.conf', 'conf/battle/feature.conf', 'conf/battle/misc.conf', 'conf/import/battle_conf.txt']}, + } + }, ); for (@ARGV) { |