summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaru <haru@dotalux.com>2016-02-13 15:38:23 +0100
committerHaru <haru@dotalux.com>2016-08-19 21:32:26 +0200
commit6cdb1e5ec2daa295b388d6c3a920b6cffe4193ce (patch)
treee4d67ff2bb7e80b6cab693f9ec24dac47b3a27a4
parentc0e59c874786cdf3bc5863090934b8e18ba0336d (diff)
downloadhercules-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--.gitignore1
-rw-r--r--conf/battle.conf61
-rw-r--r--conf/battle/battleground.conf17
-rw-r--r--conf/battle/feature.conf34
-rw-r--r--conf/battle/gm.conf42
-rw-r--r--conf/battle/guild.conf50
-rw-r--r--conf/battle/homunc.conf45
-rw-r--r--conf/battle/status.conf24
-rw-r--r--conf/import-tmpl/battle.conf32
-rw-r--r--conf/import-tmpl/battle_conf.txt0
-rw-r--r--conf/map/battle.conf87
-rw-r--r--conf/map/battle/battle.conf (renamed from conf/battle/battle.conf)59
-rw-r--r--conf/map/battle/battleground.conf40
-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.conf58
-rw-r--r--conf/map/battle/gm.conf66
-rw-r--r--conf/map/battle/guild.conf73
-rw-r--r--conf/map/battle/homunc.conf68
-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.conf47
-rw-r--r--conf/readme.txt4
-rw-r--r--src/common/HPM.c49
-rw-r--r--src/common/HPM.h5
-rw-r--r--src/map/atcommand.c2
-rw-r--r--src/map/battle.c156
-rw-r--r--src/map/battle.h9
-rw-r--r--src/map/map.c7
-rwxr-xr-xtools/configconverter.pl403
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) {