diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | conf/atcommand.conf | 2 | ||||
-rw-r--r-- | conf/global/console.conf | 8 | ||||
-rw-r--r-- | conf/import-tmpl/map-server.conf | 32 | ||||
-rw-r--r-- | conf/import-tmpl/map_conf.txt | 0 | ||||
-rw-r--r-- | conf/map-server.conf | 119 | ||||
-rw-r--r-- | conf/map/charhelp.txt (renamed from conf/charhelp.txt) | 0 | ||||
-rw-r--r-- | conf/map/help.txt (renamed from conf/help.txt) | 0 | ||||
-rw-r--r-- | conf/map/map-server.conf | 117 | ||||
-rw-r--r-- | conf/map/maps.conf | 1252 | ||||
-rw-r--r-- | conf/maps.conf | 1225 | ||||
-rw-r--r-- | src/map/map.c | 449 | ||||
-rw-r--r-- | src/map/map.h | 7 | ||||
-rwxr-xr-x | tools/configconverter.pl | 35 |
14 files changed, 1776 insertions, 1471 deletions
diff --git a/.gitignore b/.gitignore index bd33fac60..eaf7a3aa3 100644 --- a/.gitignore +++ b/.gitignore @@ -62,7 +62,6 @@ Thumbs.db /conf/import/*.conf /conf/import/battle_conf.txt /conf/import/log_conf.txt -/conf/import/map_conf.txt /conf/import/msg_conf.txt /conf/import/packet_conf.txt /conf/import/script_conf.txt diff --git a/conf/atcommand.conf b/conf/atcommand.conf index df4972067..175286eb0 100644 --- a/conf/atcommand.conf +++ b/conf/atcommand.conf @@ -68,5 +68,5 @@ nolog: { /* Commands help file */ help: { - @include "conf/help.txt" + @include "conf/map/help.txt" } diff --git a/conf/global/console.conf b/conf/global/console.conf index d26c48352..21ee46bd0 100644 --- a/conf/global/console.conf +++ b/conf/global/console.conf @@ -56,4 +56,12 @@ console: { // [CHAR] Display information on the console whenever characters/guilds/parties/pets are loaded/saved? save_log: true + + // [MAP] Makes server log selected message types to a file in the /log/ folder + //1: Log Warning Messages + //2: Log Error and SQL Error messages. + //4: Log Debug Messages + //Example: "console_msg_log: 7" logs all 3 kinds + //Messages logged by this overrides console_silent setting + console_msg_log: 0 } diff --git a/conf/import-tmpl/map-server.conf b/conf/import-tmpl/map-server.conf new file mode 100644 index 000000000..2c9b16531 --- /dev/null +++ b/conf/import-tmpl/map-server.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/>. +//========================================================================= +//= Map Server local configuration file. +//========================================================================= + +map_configuration: { + // See conf/map/map-server.conf for details +} diff --git a/conf/import-tmpl/map_conf.txt b/conf/import-tmpl/map_conf.txt deleted file mode 100644 index e69de29bb..000000000 --- a/conf/import-tmpl/map_conf.txt +++ /dev/null diff --git a/conf/map-server.conf b/conf/map-server.conf deleted file mode 100644 index d0749e85e..000000000 --- a/conf/map-server.conf +++ /dev/null @@ -1,119 +0,0 @@ -//-------------------------------------------------------------- -// Hercules Map-Server Configuration File -//-------------------------------------------------------------- - -// Note: "Comments" are all text on the right side of a double slash "//" -// Whatever text is commented will not be parsed by the servers, and serves -// only as information/reference. - -//-------------------------------------------------------------- -// Configuration Info -//-------------------------------------------------------------- -// Interserver communication passwords, set in account.txt (or equiv.) -userid: s1 -passwd: p1 - -// Character Server IP -// The map server connects to the character server using this IP address. -// NOTE: This is useful when you are running behind a firewall or are on -// a machine with multiple interfaces. -//char_ip: 127.0.0.1 - -// The map server listens on the interface with this IP address. -// NOTE: This allows you to run multiple servers on multiple interfaces -// while using the same ports for each server. -//bind_ip: 127.0.0.1 - -// Character Server Port -char_port: 6121 - -// Map Server IP -// The IP address which clients will use to connect. -// Set this to what your server's public IP address is. -//map_ip: 127.0.0.1 - -// Map Server Port -map_port: 5121 - -//Time-stamp format which will be printed before all messages. -//Can at most be 20 characters long. -//Common formats: -// %I:%M:%S %p (hour:minute:second 12 hour, AM/PM format) -// %H:%M:%S (hour:minute:second, 24 hour format) -// %d/%b/%Y (day/Month/year) -//For full format information, consult the strftime() manual. -//timestamp_format: [%d/%b %H:%M] - -//If redirected output contains escape sequences (color codes) -stdout_with_ansisequence: no - -//Makes server log selected message types to a file in the /log/ folder -//1: Log Warning Messages -//2: Log Error and SQL Error messages. -//4: Log Debug Messages -//Example: "console_msg_log: 7" logs all 3 kinds -//Messages logged by this overrides console_silent setting -console_msg_log: 0 - -//Makes server output more silent by omitting certain types of messages: -//1: Hide Information messages -//2: Hide Status messages -//4: Hide Notice Messages -//8: Hide Warning Messages -//16: Hide Error and SQL Error messages. -//32: Hide Debug Messages -//Example: "console_silent: 7" Hides information, status and notice messages (1+2+4) -console_silent: 0 - -//Where should all database data be read from? -db_path: db - -// Enable the @guildspy and @partyspy at commands? -// Note that enabling them decreases packet sending performance. -enable_spy: no - -// Read map data from GATs and RSWs in GRF files or a data directory -// as referenced by grf-files.txt rather than from the mapcache? -use_grf: no - -// Database autosave time -// All characters are saved on this time in seconds (example: -// autosave of 60 secs with 60 characters online -> one char is saved every -// second) -autosave_time: 300 - -// Min database save intervals (in ms) -// Prevent saving characters faster than at this rate (prevents char-server -// save-load getting too high as character-count increases) -minsave_time: 100 - -// Apart from the autosave_time, players will also get saved when involved -// in the following (add as needed): -// 1: After every successful trade -// 2: After every vending transaction -// 4: After closing storage/guild storage. -// 8: After hatching/returning to egg a pet. -// 16: After successfully sending a mail with attachment -// 32: After successfully submitting an item for auction -// 64: After successfully get/delete/complete a quest -// 128: After every buying store transaction -// 256: After every bank transaction (deposit/withdraw) -// NOTE: These settings decrease the chance of dupes/lost items when there's a -// server crash at the expense of increasing the map/char server lag. If your -// server rarely crashes, but experiences interserver lag, you may want to set -// these off. -save_settings: 511 - -//When employing more than one language (see db/translations.conf), -//this setting is used as a fallback -default_language: English - -// When @help or @h is typed when you are a gm, this is displayed for helping new gms understand gm commands. -help_txt: conf/help.txt -help2_txt: conf/help2.txt -charhelp_txt: conf/charhelp.txt - -// Maps: -import: conf/maps.conf - -import: conf/import/map_conf.txt diff --git a/conf/charhelp.txt b/conf/map/charhelp.txt index e3acddbb4..e3acddbb4 100644 --- a/conf/charhelp.txt +++ b/conf/map/charhelp.txt diff --git a/conf/help.txt b/conf/map/help.txt index a65c7de70..a65c7de70 100644 --- a/conf/help.txt +++ b/conf/map/help.txt diff --git a/conf/map/map-server.conf b/conf/map/map-server.conf new file mode 100644 index 000000000..b489e948b --- /dev/null +++ b/conf/map/map-server.conf @@ -0,0 +1,117 @@ +//================= 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/>. +//========================================================================= +//= Map Server Configuration File +//========================================================================= + +map_configuration: { + @include "conf/global/console.conf" + @include "conf/global/sql_connection.conf" + + // map_list and map_removed + @include "conf/map/maps.conf" + + // When @help or @h is typed when you are a gm, this is displayed for helping new gms understand gm commands. + help_txt: "conf/map/help.txt" + charhelp_txt: "conf/map/charhelp.txt" + + // Enable the @guildspy and @partyspy at commands? + // Note that enabling them decreases packet sending performance. + enable_spy: false + + // Read map data from GATs and RSWs in GRF files or a data directory + // as referenced by grf-files.txt rather than from the mapcache? + use_grf: false + + // When employing more than one language (see db/translations.conf), + // this setting is used as a fallback + default_language: "English" + + // Information related to inter-server behavior + inter: { + // Interserver communication passwords, set in the login server database + userid: "s1" + passwd: "p1" + + // Character Server IP + // The map server connects to the character server using this IP address. + // NOTE: This is useful when you are running behind a firewall or are on + // a machine with multiple interfaces. + //char_ip: "127.0.0.1" + + // The map server listens on the interface with this IP address. + // NOTE: This allows you to run multiple servers on multiple interfaces + // while using the same ports for each server. + //bind_ip: "127.0.0.1" + + // Character Server Port + char_port: 6121 + + // Map Server IP + // The IP address which clients will use to connect. + // Set this to what your server's public IP address is. + //map_ip: "127.0.0.1" + + // Map Server Port + map_port: 5121 + } + + database: { + // Where should all database data be read from? + db_path: "db" + + // Database autosave time + // All characters are saved on this time in seconds (example: + // autosave of 60 secs with 60 characters online -> one char is + // saved every second) + autosave_time: 300 + + // Min database save intervals (in ms) + // Prevent saving characters faster than at this rate (prevents + // char-server save-load getting too high as character-count + // increases) + minsave_time: 100 + + // Apart from the autosave_time, players will also get saved + // when involved in the following (add as needed): + // 0x001: After every successful trade + // 0x002: After every vending transaction + // 0x004: After closing storage/guild storage. + // 0x008: After hatching/returning to egg a pet. + // 0x010: After successfully sending a mail with attachment + // 0x020: After successfully submitting an item for auction + // 0x040: After successfully get/delete/complete a quest + // 0x080: After every buying store transaction + // 0x100: After every bank transaction (deposit/withdraw) + // NOTE: These settings decrease the chance of dupes/lost items + // when there's a server crash at the expense of increasing the + // map/char server lag. If your server rarely crashes, but + // experiences interserver lag, you may want to set these off. + save_settings: 0x1ff + } +} + +import: "conf/import/map-server.conf" diff --git a/conf/map/maps.conf b/conf/map/maps.conf new file mode 100644 index 000000000..dc4798354 --- /dev/null +++ b/conf/map/maps.conf @@ -0,0 +1,1252 @@ +//================= 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/>. +//========================================================================= +//= Hercules map configuration file. +//========================================================================= +// Used to know which maps are currently being supported by Hercules +//========================================================================= + +// Maps that are in map_list but are not supported by your server +map_removed: ( + //"mapname", +) + +// Added maps +map_list: ( + //------------------------- Normal Maps --------------------------- + "alb_ship", + "alb2trea", + "alberta", + "alberta_in", + "alde_dun01", + "alde_dun02", + "alde_dun03", + "alde_dun04", + "aldeba_in", + "aldebaran", + "anthell01", + "anthell02", + "arena_room", + "c_tower1", + "c_tower2", + "c_tower3", + "c_tower4", + //"force_map1", + //"force_map2", + //"force_map3", + "force_1-1", + "force_2-1", + "force_3-1", + "force_4-1", + "force_5-1", + "force_1-2", + "force_2-2", + "force_3-2", + "force_1-3", + "force_2-3", + "force_3-3", + "gef_dun00", + "gef_dun01", + "gef_dun02", + "gef_dun03", + "gef_fild00", + "gef_fild01", + "gef_fild02", + "gef_fild03", + "gef_fild04", + "gef_fild05", + "gef_fild06", + "gef_fild07", + "gef_fild08", + "gef_fild09", + "gef_fild10", + "gef_fild11", + "gef_fild12", + "gef_fild13", + "gef_fild14", + "gef_tower", + "geffen", + "geffen_in", + "gl_cas01", + "gl_cas02", + "gl_church", + "gl_chyard", + "gl_dun01", + "gl_dun02", + "gl_in01", + "gl_knt01", + "gl_knt02", + "gl_prison", + "gl_prison1", + "gl_sew01", + "gl_sew02", + "gl_sew03", + "gl_sew04", + "gl_step", + "glast_01", + //"hunter_1-1", + //"hunter_2-1", + //"hunter_3-1", + "in_hunter", + "in_moc_16", + "in_orcs01", + "in_sphinx1", + "in_sphinx2", + "in_sphinx3", + "in_sphinx4", + "in_sphinx5", + "iz_dun00", + "iz_dun01", + "iz_dun02", + "iz_dun03", + "iz_dun04", + "izlu2dun", + "izlude", + "izlude_in", + "job_thief1", + //"knight_1-1", + //"knight_2-1", + //"knight_3-1", + "mjo_dun01", + "mjo_dun02", + "mjo_dun03", + "mjolnir_01", + "mjolnir_02", + "mjolnir_03", + "mjolnir_04", + "mjolnir_05", + "mjolnir_06", + "mjolnir_07", + "mjolnir_08", + "mjolnir_09", + "mjolnir_10", + "mjolnir_11", + "mjolnir_12", + "moc_castle", + "moc_fild01", + "moc_fild02", + "moc_fild03", + //"moc_fild04", + //"moc_fild05", + //"moc_fild06", + "moc_fild07", + //"moc_fild08", + //"moc_fild09", + //"moc_fild10", + "moc_fild11", + "moc_fild12", + "moc_fild13", + //"moc_fild14", + //"moc_fild15", + "moc_fild16", + "moc_fild17", + "moc_fild18", + "moc_fild19", + "moc_pryd01", + "moc_pryd02", + "moc_pryd03", + "moc_pryd04", + "moc_pryd05", + "moc_pryd06", + "moc_prydb1", + "moc_ruins", + "monk_in", + "morocc", + "morocc_in", + "new_zone01", + "new_zone02", + "new_zone03", + "new_zone04", + "new_1-1", + "new_1-2", + "new_1-3", + "new_1-4", + "new_2-1", + "new_2-2", + "new_2-3", + "new_2-4", + "new_3-1", + "new_3-2", + "new_3-3", + "new_3-4", + "new_4-1", + "new_4-2", + "new_4-3", + "new_4-4", + "new_5-1", + "new_5-2", + "new_5-3", + "new_5-4", + "orcsdun01", + "orcsdun02", + //"ordeal_a00", + //"ordeal_a02", + "ordeal_1-1", + "ordeal_1-2", + //"ordeal_1-3", + //"ordeal_1-4", + "ordeal_2-1", + "ordeal_2-2", + //"ordeal_2-3", + //"ordeal_2-4", + "ordeal_3-1", + "ordeal_3-2", + //"ordeal_3-3", + //"ordeal_3-4", + "pay_arche", + "pay_dun00", + "pay_dun01", + "pay_dun02", + "pay_dun03", + "pay_dun04", + "pay_fild01", + "pay_fild02", + "pay_fild03", + "pay_fild04", + "pay_fild05", + "pay_fild06", + "pay_fild07", + "pay_fild08", + "pay_fild09", + "pay_fild10", + "pay_fild11", + //"priest_1-1", + //"priest_2-1", + //"priest_3-1", + "prontera", + "prt_are_in", + "prt_are01", + "prt_castle", + "prt_church", + "prt_fild00", + "prt_fild01", + "prt_fild02", + "prt_fild03", + "prt_fild04", + "prt_fild05", + "prt_fild06", + "prt_fild07", + "prt_fild08", + "prt_fild09", + "prt_fild10", + "prt_fild11", + "prt_in", + "prt_maze01", + "prt_maze02", + "prt_maze03", + "prt_monk", + "prt_sewb1", + "prt_sewb2", + "prt_sewb3", + "prt_sewb4", + "pvp_room", + "pvp_2vs2", + "pvp_c_room", + "pvp_n_1-1", + "pvp_n_1-2", + "pvp_n_1-3", + "pvp_n_1-4", + "pvp_n_1-5", + "pvp_n_2-1", + "pvp_n_2-2", + "pvp_n_2-3", + "pvp_n_2-4", + "pvp_n_2-5", + "pvp_n_3-1", + "pvp_n_3-2", + "pvp_n_3-3", + "pvp_n_3-4", + "pvp_n_3-5", + "pvp_n_4-1", + "pvp_n_4-2", + "pvp_n_4-3", + "pvp_n_4-4", + "pvp_n_4-5", + "pvp_n_5-1", + "pvp_n_5-2", + "pvp_n_5-3", + "pvp_n_5-4", + "pvp_n_5-5", + "pvp_n_6-1", + "pvp_n_6-2", + "pvp_n_6-3", + "pvp_n_6-4", + "pvp_n_6-5", + "pvp_n_7-1", + "pvp_n_7-2", + "pvp_n_7-3", + "pvp_n_7-4", + "pvp_n_7-5", + "pvp_n_8-1", + "pvp_n_8-2", + "pvp_n_8-3", + "pvp_n_8-4", + "pvp_n_8-5", + "pvp_n_room", + "pvp_y_1-1", + "pvp_y_1-2", + "pvp_y_1-3", + "pvp_y_1-4", + "pvp_y_1-5", + "pvp_y_2-1", + "pvp_y_2-2", + "pvp_y_2-3", + "pvp_y_2-4", + "pvp_y_2-5", + "pvp_y_3-1", + "pvp_y_3-2", + "pvp_y_3-3", + "pvp_y_3-4", + "pvp_y_3-5", + "pvp_y_4-1", + "pvp_y_4-2", + "pvp_y_4-3", + "pvp_y_4-4", + "pvp_y_4-5", + "pvp_y_5-1", + "pvp_y_5-2", + "pvp_y_5-3", + "pvp_y_5-4", + "pvp_y_5-5", + "pvp_y_6-1", + "pvp_y_6-2", + "pvp_y_6-3", + "pvp_y_6-4", + "pvp_y_6-5", + "pvp_y_7-1", + "pvp_y_7-2", + "pvp_y_7-3", + "pvp_y_7-4", + "pvp_y_7-5", + "pvp_y_8-1", + "pvp_y_8-2", + "pvp_y_8-3", + "pvp_y_8-4", + "pvp_y_8-5", + "pvp_y_room", + "sword_1-1", + "sword_2-1", + "sword_3-1", + "treasure01", + "treasure02", + //"wizard_1-1", + //"wizard_2-1", + //"wizard_3-1", + "xmas", + "xmas_dun01", + "xmas_dun02", + "xmas_fild01", + "xmas_in", + + //---Ep3.0 Comodo --- + "beach_dun", + "beach_dun2", + "beach_dun3", + "cmd_fild01", + "cmd_fild02", + "cmd_fild03", + "cmd_fild04", + "cmd_fild05", + "cmd_fild06", + "cmd_fild07", + "cmd_fild08", + "cmd_fild09", + "cmd_in01", + "cmd_in02", + "comodo", + + //---EP3.1 Quiz Revolution --- + "quiz_00", + "quiz_01", + "g_room1-1", + "g_room1-2", + "g_room1-3", + "g_room2", + + //--- Ep4.0 Turtle Island --- + "tur_dun01", + "tur_dun02", + "tur_dun03", + "tur_dun04", + "tur_dun05", + "tur_dun06", + + //--- Ep4.1 The War of Emperium --- + "alde_gld", + "aldeg_cas01", + "aldeg_cas02", + "aldeg_cas03", + "aldeg_cas04", + "aldeg_cas05", + "gefg_cas01", + "gefg_cas02", + "gefg_cas03", + "gefg_cas04", + "gefg_cas05", + "gld_dun01", + "gld_dun02", + "gld_dun03", + "gld_dun04", + "guild_room", + "guild_vs1", + "guild_vs2", + "guild_vs3", + "guild_vs4", + "guild_vs5", + "guild_vs1-1", + "guild_vs1-2", + "guild_vs1-3", + "guild_vs1-4", + "guild_vs2-1", + "guild_vs2-2", + //"job_hunter", + "job_hunte", + //"job_knight", + "job_knt", + //"job_priest", + "job_prist", + "job_sword1", + //"job_wizard", + "job_wiz", + "pay_gld", + "payg_cas01", + "payg_cas02", + "payg_cas03", + "payg_cas04", + "payg_cas05", + "prt_gld", + "prtg_cas01", + "prtg_cas02", + "prtg_cas03", + "prtg_cas04", + "prtg_cas05", + + //--- Ep5.0 Juno --- + "alde_alche", + "in_rogue", + "job_cru", + "job_duncer", + "job_monk", + "job_sage", + "mag_dun01", + "mag_dun02", + "monk_test", + "quiz_test", + "yuno", + "yuno_fild01", + "yuno_fild02", + "yuno_fild03", + "yuno_fild04", + "yuno_in01", + "yuno_in02", + "yuno_in03", + "yuno_in04", + "yuno_in05", + + //--- Ep6.0 - Amatsu --- + // Requires: kRO 08-10-03 or newer + // or kRO Sakray 09-09-03 or newer + "ama_dun01", + "ama_dun02", + "ama_dun03", + "ama_fild01", + "ama_in01", + "ama_in02", + "ama_test", + "amatsu", + + //--- Ep6.1 - Kunlun --- + "gon_dun01", + "gon_dun02", + "gon_dun03", + "gon_fild01", + "gon_in", + "gon_test", + "gonryun", + "sec_in01", + "sec_in02", + "sec_pri", + + //--- Ep6.2 - Umbala --- + // Requires: kRO 01-27-04 or newer + // or kRO Sakray 12-02-03 or newer + // or Akaru's SuperGRF 1.22 or newer + "umbala", + "um_dun01", + "um_dun02", + "um_fild01", + "um_fild02", + "um_fild03", + "um_fild04", + "um_in", + + //--- Ep6.3 - Niflheim --- + // Requires: kRO 02-23-04 or newer + // or kRO Sakray 01-09-04 or newer + // or Akaru's SuperGRF 1.32 or newer + "niflheim", + "nif_fild01", + "nif_fild02", + "nif_in", + "yggdrasil01", + + //--- Ep6.4 - Valkyrie --- + // Requires: kRO ??-??-04 or newer + // or kRO Sakray 02-03-04 or newer + // or Akaru's SuperGRF 1.34 or newer + "valkyrie", + "himinn", + + //--- Ep6.5 - Louyang --- + // Requires kRO Sakray 03-30 or newer + //(Akaru's SuperGRF required version: 1.52) + "lou_in01", + "lou_in02", + "lou_dun03", + "lou_dun02", + "lou_dun01", + "lou_fild01", + "louyang", + + //--- Ep6.6 - Novice Guild Siege --- + //Requires kRO Sakray 04-07 or newer + //(Akaru's SuperGRF required version: 1.53) + //"siege_test", + "n_castle", + "nguild_gef", + "nguild_prt", + "nguild_pay", + "nguild_alde", + + //--- Ep6.7 - Jawaii --- + //Requires kRO Sakray 06-22 or newer + //(Akaru's SuperGRF required version: 1.63) + "jawaii", + "jawaii_in", + + // --- Ep6.8 - Geffenia --- + // Requires kRO Sakray 07-13 or newer + // (Akaru's SuperGRF required version: 1.64) + "gefenia01", + "gefenia02", + "gefenia03", + "gefenia04", + + // --- Ep6.9 - New Payon --- + // Requires kRO Sakray 09-03 + "payon", + "payon_in01", + "payon_in02", + "payon_in03", + //same names as old maps except that payon_in03 got added + + // --- Ep? - Ayothaya --- + // Requires kRO Sakray 09-21 + // -- 2004-10-19sdata_k.gpf -- + "ayothaya", + "ayo_in01", + "ayo_in02", + "ayo_fild01", + "ayo_fild02", + "ayo_dun01", + "ayo_dun02", + + // --- God item quests maps --- + // -- 2004-10-12sdata_k3.gpf -- + "que_god01", + "que_god02", + + // --- Ep? - Schwarzwald Republic --- + // -- 2004-12-28sdata_k.gpf -- + "yuno_fild05", + "yuno_fild07", + "yuno_fild08", + "yuno_fild09", + "yuno_fild11", + "yuno_fild12", + + // --- Turbo Track Arena --- + // -- 2005-03-08sdata_k.gpf -- + "alde_tt02", + "turbo_n_1", + "turbo_n_4", + "turbo_n_8", + "turbo_n_16", + "turbo_e_4", + "turbo_e_8", + "turbo_e_16", + "turbo_room", + + // --- Einbroch/Einbech --- + // -- 2005-03-15sdata_k.gpf -- + "airplane", + "airport", + "einbech", + "einbroch", + "ein_dun01", + "ein_dun02", + "ein_fild06", + "ein_fild07", + "ein_fild08", + "ein_fild09", + "ein_fild10", + "ein_in01", + "que_sign01", + "que_sign02", + + // --- Einbroch and Lightalzen --- + // -- 2005-05-10sdata_k.gpf -- + "ein_fild03", + "ein_fild04", + "lhz_fild02", + "lhz_fild03", + + // --- Lighthalzen and Juperos Dungeon --- + // -- 2005-06-14sdata_k.gpf -- + "yuno_pre", + "lhz_fild01", + "lighthalzen", + "lhz_in01", + "lhz_in02", + "lhz_in03", + "lhz_que01", + "lhz_dun01", + "lhz_dun02", + "lhz_dun03", + "lhz_cube", + "juperos_01", + "juperos_02", + "jupe_area1", + "jupe_area2", + "jupe_core", + "jupe_ele", + "jupe_ele_r", + "jupe_gate", + + // --- Lighthalzen & Juno Airport --- + // -- resnametable clones of airport and airplane -- + "y_airport", + "lhz_airport", + "airplane_01", + + // --- Juperos Dungeon --- + // -- 2005-06-28sdata_k.gpf -- + "jupe_cave", + + // --- Quiz Revolution --- + // -- 2005-08-02sdata_k.gpf -- + "quiz_02", + + // --- Hugel Field --- + // -- 2005-08-23sdata_k.gpf -- + "hu_fild07", + "hu_fild05", + "hu_fild04", + "hu_fild01", + "yuno_fild06", + + // --- Star Knight And Soul Linker Job Change Maps --- + // -- 2005-08-23sdata_k.gpf -- + "job_soul", + "job_star", + + // --- Abyss Lake, Thanatos Tower -- + // -- 2005-09-13sdata_k.gpf - 2005-09-13sdata_k6.gpf -- + "que_job01", + "que_job02", + "que_job03", + "abyss_01", + "abyss_02", + "abyss_03", + "thana_step", + "thana_boss", + "tha_scene01", + "tha_t01", + "tha_t02", + "tha_t03", + "tha_t04", + "tha_t07", + "tha_t05", + "tha_t06", + "tha_t08", + + // --- Thanatos Tower --- + // -- 2005-09-21sdata_k.gpf -- ", + "tha_t09", + "tha_t10", + "tha_t11", + "tha_t12", + + // --- Auction Market --- + // -- 2005-11-29sdata_k.gpf -- + "auction_01", + "auction_02", + + // ??? + // -- 2005-12-06gdata_k.gpf -- + "alde_tt03", + + // --- Garden City Hugel / Kiehl --- + // -- 2005-12-20sdata_k.gpf -- + "hugel", + "hu_in01", + "que_bingo", + "que_hugel", + "p_track01", + "p_track02", + "odin_tem01", + "odin_tem02", + "odin_tem03", + "hu_fild02", + "hu_fild03", + "hu_fild06", + "ein_fild01", + "ein_fild02", + "ein_fild05", + "yuno_fild10", + "kh_kiehl02", + "kh_kiehl01", + "kh_dun02", + "kh_dun01", + "kh_mansion", + "kh_rossi", + "kh_school", + "kh_vila", + + // --- Poring Arena (?) & Gunslinger/Ninja Job Map --- + // -- 2006-03-28sdata_k.gpf -- + //"poring_c01", + //"poring_c02", + "que_ng", + + // --- Arunafeltz & Ice Dungeon --- + // -- 2006-05-30sdata_k.gpf -- + "rachel", + "ra_in01", + "ra_fild01", + "ra_fild02", + "ra_fild03", + "ra_fild04", + "ra_fild05", + "ra_fild06", + "ra_fild07", + "ra_fild08", + "ra_fild09", + "ra_fild10", + "ra_fild11", + "ra_fild12", + "ra_fild13", + "ra_san01", + "ra_san02", + "ra_san03", + "ra_san04", + "ra_san05", + "ra_temin", + "ra_temple", + "ra_temsky", + "que_rachel", + "que_san04", + "ice_dun01", + "ice_dun02", + "ice_dun03", + "ice_dun04", + + // --- Veins & Thor Dungeon --- + // -- 2006-12-19sdata_k.gpf -- + "que_thor", + "thor_camp", + "thor_v01", + "thor_v02", + "thor_v03", + "veins", + "ve_in", + "ve_in02", + "ve_fild01", + "ve_fild02", + "ve_fild03", + "ve_fild04", + "ve_fild05", + "ve_fild06", + "ve_fild07", + + // --- Nameless Island & Abbey Dungeon --- + // -- 2007-04-03sdata_k.gpf -- + "nameless_i", + "nameless_n", + "nameless_in", + "abbey01", + "abbey02", + "abbey03", + "poring_w01", + "poring_w02", + + // --- ??? --- + // -- 2007-??-?? -- + "06guild_r", + "06guild_01", + "06guild_02", + "06guild_03", + "06guild_04", + "06guild_05", + "06guild_06", + "06guild_07", + "06guild_08", + "z_agit", + "que_temsky", + "itemmall", + "bossnia_01", + "bossnia_02", + "bossnia_03", + "bossnia_04", + + // --- Moscovia --- + // -- 2007-06-??? -- + "moscovia", + "mosk_in", + "mosk_ship", + "mosk_fild01", + "mosk_fild02", + "mosk_dun01", + "mosk_dun02", + "mosk_dun03", + "mosk_que", + + // --- Episode 12: Satan Morroc & Schwarzwald Siege --- + // -- 2007-09-19sdata_k.gpf -- + "schg_cas01", + "schg_cas02", + "schg_cas03", + "schg_cas04", + "schg_cas05", + "sch_gld", + "cave", + "moc_fild20", + "moc_fild21", + "moc_fild22", + "que_ba", + "que_moc_16", + "que_moon", + + // Arunafeltz Seige + // -- 2007-10-24sdata_k.gpf -- + "arug_cas01", + "arug_cas02", + "arug_cas03", + "arug_cas04", + "arug_cas05", + "aru_gld", + + // PVP Battle Fields: Tierra Valley, and Flavius + // -- 2007-11-14sdata_k.gpf -- + "bat_room", + "bat_a01", + "bat_a02", + "bat_b01", + "bat_b02", + "que_qsch01", + "que_qsch02", + "que_qsch03", + "que_qsch04", + "que_qsch05", + "que_qaru01", + "que_qaru02", + "que_qaru03", + "que_qaru04", + "que_qaru05", + + // Endless Tower Memorial Dungeon + // -- 2007-11-28sdata_k.gpf -- + "1@cata", + "2@cata", + "e_tower", + "1@tower", + "2@tower", + "3@tower", + "4@tower", + "5@tower", + "6@tower", + + // 13.1 Another World + // -- 2008-05-28sdata_k.gpf -- + "mid_camp", + "mid_campin", + "man_fild01", + "man_fild03", + "spl_fild02", + "spl_fild03", + "moc_fild22b", + "que_dan01", + "que_dan02", + "schg_que01", + "schg_dun01", + "arug_que01", + "arug_dun01", + "1@orcs", + "2@orcs", + + // KvM Battleground + // -- 2008-??-??? -- + "bat_c01", + "bat_c02", + "bat_c03", + + // 13.2 Another World + // -- 2008-11-26 -- + "1@nyd", + "2@nyd", + "nyd_dun01", + "nyd_dun02", + "manuk", + "man_fild02", + "man_in01", + "splendide", + "spl_fild01", + "spl_in01", + "spl_in02", + + // 3rd Job Maps + // -- 2009-01-29rdata_k2.gpf -- + "job3_arch01", + "job3_arch02", + "job3_arch03", + "job3_guil01", + "job3_guil02", + "job3_guil03", + "job3_rang01", + "job3_rang02", + "job3_rune01", + "job3_rune02", + "job3_rune03", + "job3_war01", + "job3_war02", + "jupe_core2", + + // ??? + // -- 2009-05-27rdata_k.gpf -- + "moc_para01", + + // Brasilis Maps + // -- 2009-08-05rdata_k.gpf -- + "brasilis", + "bra_in01", + "bra_fild01", + "bra_dun01", + "bra_dun02", + + // ??? + // -- 2009-09-30rdata_k.gpf -- + "s_atelier", + + // 13.3 El Discastes + // -- 2009-12-09rdata_k.gpf -- + "dicastes01", + "dicastes02", + "dic_in01", + "dic_fild01", + "dic_fild02", + "dic_dun01", + "dic_dun02", + "job3_gen01", + "job3_sha01", + + // Localized Event Maps + //"evt_zombie", + //"evt_coke", + + // Unknown Maps + //"ac_sl_area", + //"ac_cl_hall", + //"ac_cl_room", + //"jp_s_dun11", + + // 14.1 Bifrost + // -- 2010-06-09rdata_x.gpf -- + "mora", + "bif_fild01", + "bif_fild02", + "1@mist", + + // Dewata + // -- 2010-09-15rdata_x.gpf -- + "dewata", + "dew_in01", + "dew_fild01", + "dew_dun01", + "dew_dun02", + + // ??? + // -- 2010-10-06rdata_x.gpf -- + "que_house_s", + + // Malangdo + // -- 2010-11-03rdata_x.gpf -- + "malangdo", + "mal_in01", + "mal_in02", + "mal_dun01", + "1@pump", + "2@pump", + "1@cash", + + // Undersea Tunnel Expansion + // -- 2010-11-10rdata_x.gpf -- + "iz_dun05", + + // ??? + // -- 2010-12-01data_x.gpf -- + "evt_mobroom", + + // ??? + "dic_dun03", + //"mjolnir_04_1", + //"evt_swar_b", + //"evt_swar_r", + //"evt_swar_s", + //"evt_swar_t", + + // Lighthalzen Dungeon F4, Wolfchev's Laboratory + // -- 2011-03-16rdata_x.gpf -- + "1@lhz", + "lhz_dun04", + "que_lhz", + + // Hall Of Abyss + // -- 2011-06-15data_x.gpf -- + "gld_dun01_2", + "gld_dun02_2", + "gld_dun03_2", + "gld_dun04_2", + "gld2_ald", + "gld2_gef", + "gld2_pay", + "gld2_prt", + + // Malaya Port + // -- 2011-08-30data_x.gpf -- + "malaya", + "ma_fild01", + "ma_fild02", + "ma_scene01", + "ma_in01", + "ma_dun01", + "1@ma_h", + "1@ma_c", + "1@ma_b", + "ma_zif01", + "ma_zif02", + "ma_zif03", + "ma_zif04", + "ma_zif05", + "ma_zif06", + "ma_zif07", + "ma_zif08", + "ma_zif09", + "job_ko", + + // 14.2 Eclage + // -- 2011-11-30data_x.gpf -- + "eclage", + "ecl_fild01", + "ecl_in01", + "ecl_in02", + "ecl_in03", + "ecl_in04", + "1@ecl", + "ecl_tdun01", + "ecl_tdun02", + "ecl_tdun03", + "ecl_tdun04", + "ecl_hub01", + "que_avan01", + + // Pyramids Basement Nightmare Mode + "moc_prydn1", + "moc_prydn2", + + // Izlude Novice Academy & Tutorial + // New Maps added 2013-02-10 + "iz_int", + "iz_int01", + "iz_int02", + "iz_int03", + "iz_int04", + "iz_ac01", + "iz_ac02", + "iz_ng01", + "treasure_n1", + "treasure_n2", + "iz_ac01_d", + "iz_ac02_d", + "iz_ac01_c", + "iz_ac02_c", + "iz_ac01_b", + "iz_ac02_b", + "iz_ac01_a", + "iz_ac02_a", + "izlude_d", + "izlude_c", + "izlude_b", + "izlude_a", + + "prt_fild08d", + "prt_fild08c", + "prt_fild08b", + "prt_fild08a", + + // War of Emperium - Third Edition (TE) + "te_prt_gld", + "te_prtcas01", + "te_prtcas02", + "te_prtcas03", + "te_prtcas04", + "te_prtcas05", + "teg_dun01", + "teg_dun02", + "te_alde_gld", + "te_aldecas1", + "te_aldecas2", + "te_aldecas3", + "te_aldecas4", + "te_aldecas5", + + // Glast Heim Memorial & Nightmare + "gl_cas02_", + "gl_chyard_", + "1@gl_k", + "2@gl_k", + + "silk_lair", + "evt_bomb", + + // Wave Mode Memorial Dungeon + "1@def01", + "1@def02", + "1@def03", + + // Heroes' Trails - Part 1 + "1@face", + "1@sara", + "1@tnm1", + "1@tnm2", + "1@tnm3", + "1@ge_st", + "1@gef", + "1@gef_in", + "1@spa", + "dali", + "dali02", + + // Episode 14.3 + "moro_vol", + "moro_cav", + "1@dth1", + "1@dth2", + "1@dth3", + "1@rev", + "1@xm_d", + "1@eom", + "1@jtb", + + // Clock Tower Nightmare Mode + "c_tower2_", + "c_tower3_", + + //------------------------- Clone Maps --------------------------- + //------------------------- Extra Maps --------------------------- + + // Ragnarok World Championship 2004 + // Requires: RWC 2004 Client + // or Akaru's SuperGRF 1.64 or newer + //"rwc01", + //"rwc02", + //"rwc03", + + // Ragnarok World Championship 2009 + // Requires: RWC 2009 Map files + //"2009rwc_f01", + //"2009rwc_01", + //"2009rwc_02", + //"2009rwc_03", + //"2009rwc_04", + + // Ragnarok World Championship 2008? + // Requires: RWC 2008 Map files? + //"2008rwc_04", + + //Christmas & Sakura Special + //Requires Akaru's SuperGRF 1.1 or newer + //"prontera_x", + //"alberta_x", + //"aldebaran_x", + //"geffen_x", + //"izlude_x", + //"prt_church_x", + //"prontera_s", + //"pay_arche_s", + + //Fenced Lutie", + //Requires Akaru's SuperGRF 1.23 or newer", + //"xmas_old", + + //Alpha Maps + //Requires adata.grf containing alpha maps and data + //"fay_vilg00", + //"fay_vilg01", + //"gef_vilg00", + //"gef_vilg01", + //"moc_dugn01", + //"moc_dugn02", + //"moc_fild01", + //"moc_fild02", + //"moc_fild03", + //"moc_fild04", + //"moc_intr00", + //"moc_intr01", + //"moc_intr02", + //"moc_intr04", + //"moc_vilg00", + //"moc_vilg01", + //"moc_vilg02", + //"probemap", + //"probemap02", + //"prt_cstl01", + //"prt_dugn00", + //"prt_dugn01", + //"prt_fild00", + //"prt_fild01", + //"prt_fild03", + //"prt_fild04", + //"prt_fild05", + //"prt_intr01", + //"prt_intr01_a", + //"prt_intr02", + //"prt_vilg00", + //"prt_vilg01", + //"prt_vilg02", + //"tank_test", + //"tank_test2", + //"test", +) //map_list diff --git a/conf/maps.conf b/conf/maps.conf deleted file mode 100644 index 529afa9ce..000000000 --- a/conf/maps.conf +++ /dev/null @@ -1,1225 +0,0 @@ -//------------------------- Normal Maps --------------------------- -map: alb_ship -map: alb2trea -map: alberta -map: alberta_in -map: alde_dun01 -map: alde_dun02 -map: alde_dun03 -map: alde_dun04 -map: aldeba_in -map: aldebaran -map: anthell01 -map: anthell02 -map: arena_room -map: c_tower1 -map: c_tower2 -map: c_tower3 -map: c_tower4 -//map: force_map1 -//map: force_map2 -//map: force_map3 -map: force_1-1 -map: force_2-1 -map: force_3-1 -map: force_4-1 -map: force_5-1 -map: force_1-2 -map: force_2-2 -map: force_3-2 -map: force_1-3 -map: force_2-3 -map: force_3-3 -map: gef_dun00 -map: gef_dun01 -map: gef_dun02 -map: gef_dun03 -map: gef_fild00 -map: gef_fild01 -map: gef_fild02 -map: gef_fild03 -map: gef_fild04 -map: gef_fild05 -map: gef_fild06 -map: gef_fild07 -map: gef_fild08 -map: gef_fild09 -map: gef_fild10 -map: gef_fild11 -map: gef_fild12 -map: gef_fild13 -map: gef_fild14 -map: gef_tower -map: geffen -map: geffen_in -map: gl_cas01 -map: gl_cas02 -map: gl_church -map: gl_chyard -map: gl_dun01 -map: gl_dun02 -map: gl_in01 -map: gl_knt01 -map: gl_knt02 -map: gl_prison -map: gl_prison1 -map: gl_sew01 -map: gl_sew02 -map: gl_sew03 -map: gl_sew04 -map: gl_step -map: glast_01 -//map: hunter_1-1 -//map: hunter_2-1 -//map: hunter_3-1 -map: in_hunter -map: in_moc_16 -map: in_orcs01 -map: in_sphinx1 -map: in_sphinx2 -map: in_sphinx3 -map: in_sphinx4 -map: in_sphinx5 -map: iz_dun00 -map: iz_dun01 -map: iz_dun02 -map: iz_dun03 -map: iz_dun04 -map: izlu2dun -map: izlude -map: izlude_in -map: job_thief1 -//map: knight_1-1 -//map: knight_2-1 -//map: knight_3-1 -map: mjo_dun01 -map: mjo_dun02 -map: mjo_dun03 -map: mjolnir_01 -map: mjolnir_02 -map: mjolnir_03 -map: mjolnir_04 -map: mjolnir_05 -map: mjolnir_06 -map: mjolnir_07 -map: mjolnir_08 -map: mjolnir_09 -map: mjolnir_10 -map: mjolnir_11 -map: mjolnir_12 -map: moc_castle -map: moc_fild01 -map: moc_fild02 -map: moc_fild03 -//map: moc_fild04 -//map: moc_fild05 -//map: moc_fild06 -map: moc_fild07 -//map: moc_fild08 -//map: moc_fild09 -//map: moc_fild10 -map: moc_fild11 -map: moc_fild12 -map: moc_fild13 -//map: moc_fild14 -//map: moc_fild15 -map: moc_fild16 -map: moc_fild17 -map: moc_fild18 -map: moc_fild19 -map: moc_pryd01 -map: moc_pryd02 -map: moc_pryd03 -map: moc_pryd04 -map: moc_pryd05 -map: moc_pryd06 -map: moc_prydb1 -map: moc_ruins -map: monk_in -map: morocc -map: morocc_in -map: new_zone01 -map: new_zone02 -map: new_zone03 -map: new_zone04 -map: new_1-1 -map: new_1-2 -map: new_1-3 -map: new_1-4 -map: new_2-1 -map: new_2-2 -map: new_2-3 -map: new_2-4 -map: new_3-1 -map: new_3-2 -map: new_3-3 -map: new_3-4 -map: new_4-1 -map: new_4-2 -map: new_4-3 -map: new_4-4 -map: new_5-1 -map: new_5-2 -map: new_5-3 -map: new_5-4 -map: orcsdun01 -map: orcsdun02 -//map: ordeal_a00 -//map: ordeal_a02 -map: ordeal_1-1 -map: ordeal_1-2 -//map: ordeal_1-3 -//map: ordeal_1-4 -map: ordeal_2-1 -map: ordeal_2-2 -//map: ordeal_2-3 -//map: ordeal_2-4 -map: ordeal_3-1 -map: ordeal_3-2 -//map: ordeal_3-3 -//map: ordeal_3-4 -map: pay_arche -map: pay_dun00 -map: pay_dun01 -map: pay_dun02 -map: pay_dun03 -map: pay_dun04 -map: pay_fild01 -map: pay_fild02 -map: pay_fild03 -map: pay_fild04 -map: pay_fild05 -map: pay_fild06 -map: pay_fild07 -map: pay_fild08 -map: pay_fild09 -map: pay_fild10 -map: pay_fild11 -//map: priest_1-1 -//map: priest_2-1 -//map: priest_3-1 -map: prontera -map: prt_are_in -map: prt_are01 -map: prt_castle -map: prt_church -map: prt_fild00 -map: prt_fild01 -map: prt_fild02 -map: prt_fild03 -map: prt_fild04 -map: prt_fild05 -map: prt_fild06 -map: prt_fild07 -map: prt_fild08 -map: prt_fild09 -map: prt_fild10 -map: prt_fild11 -map: prt_in -map: prt_maze01 -map: prt_maze02 -map: prt_maze03 -map: prt_monk -map: prt_sewb1 -map: prt_sewb2 -map: prt_sewb3 -map: prt_sewb4 -map: pvp_room -map: pvp_2vs2 -map: pvp_c_room -map: pvp_n_1-1 -map: pvp_n_1-2 -map: pvp_n_1-3 -map: pvp_n_1-4 -map: pvp_n_1-5 -map: pvp_n_2-1 -map: pvp_n_2-2 -map: pvp_n_2-3 -map: pvp_n_2-4 -map: pvp_n_2-5 -map: pvp_n_3-1 -map: pvp_n_3-2 -map: pvp_n_3-3 -map: pvp_n_3-4 -map: pvp_n_3-5 -map: pvp_n_4-1 -map: pvp_n_4-2 -map: pvp_n_4-3 -map: pvp_n_4-4 -map: pvp_n_4-5 -map: pvp_n_5-1 -map: pvp_n_5-2 -map: pvp_n_5-3 -map: pvp_n_5-4 -map: pvp_n_5-5 -map: pvp_n_6-1 -map: pvp_n_6-2 -map: pvp_n_6-3 -map: pvp_n_6-4 -map: pvp_n_6-5 -map: pvp_n_7-1 -map: pvp_n_7-2 -map: pvp_n_7-3 -map: pvp_n_7-4 -map: pvp_n_7-5 -map: pvp_n_8-1 -map: pvp_n_8-2 -map: pvp_n_8-3 -map: pvp_n_8-4 -map: pvp_n_8-5 -map: pvp_n_room -map: pvp_y_1-1 -map: pvp_y_1-2 -map: pvp_y_1-3 -map: pvp_y_1-4 -map: pvp_y_1-5 -map: pvp_y_2-1 -map: pvp_y_2-2 -map: pvp_y_2-3 -map: pvp_y_2-4 -map: pvp_y_2-5 -map: pvp_y_3-1 -map: pvp_y_3-2 -map: pvp_y_3-3 -map: pvp_y_3-4 -map: pvp_y_3-5 -map: pvp_y_4-1 -map: pvp_y_4-2 -map: pvp_y_4-3 -map: pvp_y_4-4 -map: pvp_y_4-5 -map: pvp_y_5-1 -map: pvp_y_5-2 -map: pvp_y_5-3 -map: pvp_y_5-4 -map: pvp_y_5-5 -map: pvp_y_6-1 -map: pvp_y_6-2 -map: pvp_y_6-3 -map: pvp_y_6-4 -map: pvp_y_6-5 -map: pvp_y_7-1 -map: pvp_y_7-2 -map: pvp_y_7-3 -map: pvp_y_7-4 -map: pvp_y_7-5 -map: pvp_y_8-1 -map: pvp_y_8-2 -map: pvp_y_8-3 -map: pvp_y_8-4 -map: pvp_y_8-5 -map: pvp_y_room -map: sword_1-1 -map: sword_2-1 -map: sword_3-1 -map: treasure01 -map: treasure02 -//map: wizard_1-1 -//map: wizard_2-1 -//map: wizard_3-1 -map: xmas -map: xmas_dun01 -map: xmas_dun02 -map: xmas_fild01 -map: xmas_in - -//---Ep3.0 Comodo --- - -map: beach_dun -map: beach_dun2 -map: beach_dun3 -map: cmd_fild01 -map: cmd_fild02 -map: cmd_fild03 -map: cmd_fild04 -map: cmd_fild05 -map: cmd_fild06 -map: cmd_fild07 -map: cmd_fild08 -map: cmd_fild09 -map: cmd_in01 -map: cmd_in02 -map: comodo - -//---EP3.1 Quiz Revolution --- - -map: quiz_00 -map: quiz_01 -map: g_room1-1 -map: g_room1-2 -map: g_room1-3 -map: g_room2 - -//--- Ep4.0 Turtle Island --- - -map: tur_dun01 -map: tur_dun02 -map: tur_dun03 -map: tur_dun04 -map: tur_dun05 -map: tur_dun06 - -//--- Ep4.1 The War of Emperium --- - -map: alde_gld -map: aldeg_cas01 -map: aldeg_cas02 -map: aldeg_cas03 -map: aldeg_cas04 -map: aldeg_cas05 -map: gefg_cas01 -map: gefg_cas02 -map: gefg_cas03 -map: gefg_cas04 -map: gefg_cas05 -map: gld_dun01 -map: gld_dun02 -map: gld_dun03 -map: gld_dun04 -map: guild_room -map: guild_vs1 -map: guild_vs2 -map: guild_vs3 -map: guild_vs4 -map: guild_vs5 -map: guild_vs1-1 -map: guild_vs1-2 -map: guild_vs1-3 -map: guild_vs1-4 -map: guild_vs2-1 -map: guild_vs2-2 -//map: job_hunter -map: job_hunte -//map: job_knight -map: job_knt -//map: job_priest -map: job_prist -map: job_sword1 -//map: job_wizard -map: job_wiz -map: pay_gld -map: payg_cas01 -map: payg_cas02 -map: payg_cas03 -map: payg_cas04 -map: payg_cas05 -map: prt_gld -map: prtg_cas01 -map: prtg_cas02 -map: prtg_cas03 -map: prtg_cas04 -map: prtg_cas05 - - -//--- Ep5.0 Yuno --- - -map: alde_alche -map: in_rogue -map: job_cru -map: job_duncer -map: job_monk -map: job_sage -map: mag_dun01 -map: mag_dun02 -map: monk_test -map: quiz_test -map: yuno -map: yuno_fild01 -map: yuno_fild02 -map: yuno_fild03 -map: yuno_fild04 -map: yuno_in01 -map: yuno_in02 -map: yuno_in03 -map: yuno_in04 -map: yuno_in05 - -//--- Ep6.0 - Amatsu --- -// Requires: kRO 08-10-03 or newer -// or kRO Sakray 09-09-03 or newer - -map: ama_dun01 -map: ama_dun02 -map: ama_dun03 -map: ama_fild01 -map: ama_in01 -map: ama_in02 -map: ama_test -map: amatsu - -//--- Ep6.1 - Gon Ryun --- - -map: gon_dun01 -map: gon_dun02 -map: gon_dun03 -map: gon_fild01 -map: gon_in -map: gon_test -map: gonryun -map: sec_in01 -map: sec_in02 -map: sec_pri - -//--- Ep6.2 - Umbala --- -// Requires: kRO 01-27-04 or newer -// or kRO Sakray 12-02-03 or newer -// or Akaru's SuperGRF 1.22 or newer -map: umbala -map: um_dun01 -map: um_dun02 -map: um_fild01 -map: um_fild02 -map: um_fild03 -map: um_fild04 -map: um_in - -//--- Ep6.3 - Niflheim --- -// Requires: kRO 02-23-04 or newer -// or kRO Sakray 01-09-04 or newer -// or Akaru's SuperGRF 1.32 or newer -map: niflheim -map: nif_fild01 -map: nif_fild02 -map: nif_in -map: yggdrasil01 - -//--- Ep6.4 - Valkyrie --- -// Requires: kRO ??-??-04 or newer -// or kRO Sakray 02-03-04 or newer -// or Akaru's SuperGRF 1.34 or newer -map: valkyrie -map: himinn - -//--- Ep6.5 - Castle of Dragon (LouYang) --- -// Requires kRO Sakray 03-30 or newer -//(Akaru's SuperGRF required version: 1.52) -map: lou_in01 -map: lou_in02 -map: lou_dun03 -map: lou_dun02 -map: lou_dun01 -map: lou_fild01 -map: louyang - -//--- Ep6.6 - Novice Guild Siege --- -//Requires kRO Sakray 04-07 or newer -//(Akaru's SuperGRF required version: 1.53) -//map: siege_test -map: n_castle -map: nguild_gef -map: nguild_prt -map: nguild_pay -map: nguild_alde - -//--- Ep6.7 - Jawaii --- -//Requires kRO Sakray 06-22 or newer -//(Akaru's SuperGRF required version: 1.63) -map: jawaii -map: jawaii_in - -// --- Ep6.8 - Geffenia --- -// Requires kRO Sakray 07-13 or newer -// (Akaru's SuperGRF required version: 1.64) -map: gefenia01 -map: gefenia02 -map: gefenia03 -map: gefenia04 - -// --- Ep6.9 - New Payon --- -// Requires kRO Sakray 09-03 -// -- dunno -- -map: payon -map: payon_in01 -map: payon_in02 -map: payon_in03 -//same names as old maps except that payon_in03 got added - -// --- Ep? - Ayothaya --- -// Requires kRO Sakray 09-21 -// -- 2004-10-19sdata_k.gpf -- -map: ayothaya -map: ayo_in01 -map: ayo_in02 -map: ayo_fild01 -map: ayo_fild02 -map: ayo_dun01 -map: ayo_dun02 - -// --- God item quests maps --- -// -- 2004-10-12sdata_k3.gpf -- -map: que_god01 -map: que_god02 - -// --- Ep? - Schwarzwald Republic --- -// -- 2004-12-28sdata_k.gpf -- -map: yuno_fild05 -map: yuno_fild07 -map: yuno_fild08 -map: yuno_fild09 -map: yuno_fild11 -map: yuno_fild12 - -// --- Turbo Track Arena --- -// -- 2005-03-08sdata_k.gpf -- -map: alde_tt02 -map: turbo_n_1 -map: turbo_n_4 -map: turbo_n_8 -map: turbo_n_16 -map: turbo_e_4 -map: turbo_e_8 -map: turbo_e_16 -map: turbo_room - -// --- Einbroch/Einbech --- -// -- 2005-03-15sdata_k.gpf -- -map: airplane -map: airport -map: einbech -map: einbroch -map: ein_dun01 -map: ein_dun02 -map: ein_fild06 -map: ein_fild07 -map: ein_fild08 -map: ein_fild09 -map: ein_fild10 -map: ein_in01 -map: que_sign01 -map: que_sign02 - -// --- Einbroch and Lightalzen --- -// -- 2005-05-10sdata_k.gpf -- -map: ein_fild03 -map: ein_fild04 -map: lhz_fild02 -map: lhz_fild03 - -// --- Lighthalzen and Juperos Dungeon --- -// -- 2005-06-14sdata_k.gpf -- -map: yuno_pre -map: lhz_fild01 -map: lighthalzen -map: lhz_in01 -map: lhz_in02 -map: lhz_in03 -map: lhz_que01 -map: lhz_dun01 -map: lhz_dun02 -map: lhz_dun03 -map: lhz_cube -map: juperos_01 -map: juperos_02 -map: jupe_area1 -map: jupe_area2 -map: jupe_core -map: jupe_ele -map: jupe_ele_r -map: jupe_gate - -// --- Lighthalzen & Juno Airport --- -// -- resnametable clones of airport and airplane -- -map: y_airport -map: lhz_airport -map: airplane_01 - -// --- Juperos Dungeon --- -// -- 2005-06-28sdata_k.gpf -- -map: jupe_cave - -// --- Quiz Revolution --- -// -- 2005-08-02sdata_k.gpf -- -map: quiz_02 - -// --- Hugel Field --- -// -- 2005-08-23sdata_k.gpf -- -map: hu_fild07 -map: hu_fild05 -map: hu_fild04 -map: hu_fild01 -map: yuno_fild06 - -// --- Star Knight And Soul Linker Job Change Maps --- -// -- 2005-08-23sdata_k.gpf -- -map: job_soul -map: job_star - -// --- Abyss Lake, Thanatos Tower -- -// -- 2005-09-13sdata_k.gpf - 2005-09-13sdata_k6.gpf -- -map: que_job01 -map: que_job02 -map: que_job03 -map: abyss_01 -map: abyss_02 -map: abyss_03 -map: thana_step -map: thana_boss -map: tha_scene01 -map: tha_t01 -map: tha_t02 -map: tha_t03 -map: tha_t04 -map: tha_t07 -map: tha_t05 -map: tha_t06 -map: tha_t08 - -// --- Thanatos Tower --- -// -- 2005-09-21sdata_k.gpf -- -map: tha_t09 -map: tha_t10 -map: tha_t11 -map: tha_t12 - -// --- Auction Market --- -// -- 2005-11-29sdata_k.gpf -- -map: auction_01 -map: auction_02 - -// ??? -// -- 2005-12-06gdata_k.gpf -map: alde_tt03 - -// --- Garden City Hugel / Kiehl --- -// -- 2005-12-20sdata_k.gpf -- -map: hugel -map: hu_in01 -map: que_bingo -map: que_hugel -map: p_track01 -map: p_track02 -map: odin_tem01 -map: odin_tem02 -map: odin_tem03 -map: hu_fild02 -map: hu_fild03 -map: hu_fild06 -map: ein_fild01 -map: ein_fild02 -map: ein_fild05 -map: yuno_fild10 -map: kh_kiehl02 -map: kh_kiehl01 -map: kh_dun02 -map: kh_dun01 -map: kh_mansion -map: kh_rossi -map: kh_school -map: kh_vila - -// --- Poring Arena (?) & Gunslinger/Ninja Job Map --- -// -- 2006-03-28sdata_k.gpf -- -//map: poring_c01 -//map: poring_c02 -map: que_ng - -// --- Arunafeltz & Ice Dungeon --- -// -- 2006-05-30sdata_k.gpf -- -map: rachel -map: ra_in01 -map: ra_fild01 -map: ra_fild02 -map: ra_fild03 -map: ra_fild04 -map: ra_fild05 -map: ra_fild06 -map: ra_fild07 -map: ra_fild08 -map: ra_fild09 -map: ra_fild10 -map: ra_fild11 -map: ra_fild12 -map: ra_fild13 -map: ra_san01 -map: ra_san02 -map: ra_san03 -map: ra_san04 -map: ra_san05 -map: ra_temin -map: ra_temple -map: ra_temsky -map: que_rachel -map: que_san04 -map: ice_dun01 -map: ice_dun02 -map: ice_dun03 -map: ice_dun04 - -// --- Veins & Thor Dungeon --- -// -- 2006-12-19sdata_k.gpf -- -map: que_thor -map: thor_camp -map: thor_v01 -map: thor_v02 -map: thor_v03 -map: veins -map: ve_in -map: ve_in02 -map: ve_fild01 -map: ve_fild02 -map: ve_fild03 -map: ve_fild04 -map: ve_fild05 -map: ve_fild06 -map: ve_fild07 - -// --- Nameless Island & Abbey Dungeon --- -// -- 2007-04-03sdata_k.gpf -map: nameless_i -map: nameless_n -map: nameless_in -map: abbey01 -map: abbey02 -map: abbey03 -map: poring_w01 -map: poring_w02 - -// --- ??? --- -// -- 2007-??-?? -map: 06guild_r -map: 06guild_01 -map: 06guild_02 -map: 06guild_03 -map: 06guild_04 -map: 06guild_05 -map: 06guild_06 -map: 06guild_07 -map: 06guild_08 -map: z_agit -map: que_temsky -map: itemmall -map: bossnia_01 -map: bossnia_02 -map: bossnia_03 -map: bossnia_04 - -// --- Moscovia --- -// -- 2007-06-??? -map: moscovia -map: mosk_in -map: mosk_ship -map: mosk_fild01 -map: mosk_fild02 -map: mosk_dun01 -map: mosk_dun02 -map: mosk_dun03 -map: mosk_que - -// --- Episode 12: Satan Morroc & Schwaltzvalt Seige --- -// -- 2007-09-19sdata_k.gpf -map: schg_cas01 -map: schg_cas02 -map: schg_cas03 -map: schg_cas04 -map: schg_cas05 -map: sch_gld -map: cave -map: moc_fild20 -map: moc_fild21 -map: moc_fild22 -map: que_ba -map: que_moc_16 -map: que_moon - -// Arunafeltz Seige -// -- 2007-10-24sdata_k.gpf -map: arug_cas01 -map: arug_cas02 -map: arug_cas03 -map: arug_cas04 -map: arug_cas05 -map: aru_gld - -// PVP Battle Fields: Tierra Valley, and Frebeus -// -- 2007-11-14sdata_k.gpf -map: bat_room -map: bat_a01 -map: bat_a02 -map: bat_b01 -map: bat_b02 -map: que_qsch01 -map: que_qsch02 -map: que_qsch03 -map: que_qsch04 -map: que_qsch05 -map: que_qaru01 -map: que_qaru02 -map: que_qaru03 -map: que_qaru04 -map: que_qaru05 - -// Memorial Dungeon -// -- 2007-11-28sdata_k.gpf -map: 1@cata -map: 2@cata -map: e_tower -map: 1@tower -map: 2@tower -map: 3@tower -map: 4@tower -map: 5@tower -map: 6@tower - -// 13.1 Another World -// -- 2008-05-28sdata_k.gpf -map: mid_camp -map: mid_campin -map: man_fild01 -map: man_fild03 -map: spl_fild02 -map: spl_fild03 -map: moc_fild22b -map: que_dan01 -map: que_dan02 -map: schg_que01 -map: schg_dun01 -map: arug_que01 -map: arug_dun01 -map: 1@orcs -map: 2@orcs - -// Additional Battleground. -// -- 2008-??-??? -map: bat_c01 -map: bat_c02 -map: bat_c03 - -// 13.2 Another World -// -- 2008-11-26 -map: 1@nyd -map: 2@nyd -map: nyd_dun01 -map: nyd_dun02 -map: manuk -map: man_fild02 -map: man_in01 -map: splendide -map: spl_fild01 -map: spl_in01 -map: spl_in02 - -// 3rd Job Maps -// -- 2009-01-29rdata_k2.gpf -map: job3_arch01 -map: job3_arch02 -map: job3_arch03 -map: job3_guil01 -map: job3_guil02 -map: job3_guil03 -map: job3_rang01 -map: job3_rang02 -map: job3_rune01 -map: job3_rune02 -map: job3_rune03 -map: job3_war01 -map: job3_war02 -map: jupe_core2 - -// ??? -// -- 2009-05-27rdata_k.gpf -map: moc_para01 - -// Brasilis Maps -// -- 2009-08-05rdata_k.gpf -map: brasilis -map: bra_in01 -map: bra_fild01 -map: bra_dun01 -map: bra_dun02 - -// ??? -// -- 2009-09-30rdata_k.gpf -map: s_atelier - -// 13.3 El Discastes -// -- 2009-12-09rdata_k.gpf -map: dicastes01 -map: dicastes02 -map: dic_in01 -map: dic_fild01 -map: dic_fild02 -map: dic_dun01 -map: dic_dun02 -map: job3_gen01 -map: job3_sha01 - -// Localized Event Maps -//map: evt_zombie -//map: evt_coke - -// Unknown Maps -//ac_sl_area -//ac_cl_hall -//ac_cl_room -//jp_s_dun11 - -// 14.1 Bifrost -// -- 2010-06-09rdata_x.gpf -map: mora -map: bif_fild01 -map: bif_fild02 -map: 1@mist - -// Dewata Maps -// -- 2010-09-15rdata_x.gpf -map: dewata -map: dew_in01 -map: dew_fild01 -map: dew_dun01 -map: dew_dun02 - -// ??? -// -- 2010-10-06rdata_x.gpf -map: que_house_s - -// Malangdo Maps -// -- 2010-11-03rdata_x.gpf -map: malangdo -map: mal_in01 -map: mal_in02 -map: mal_dun01 -map: 1@pump -map: 2@pump -map: 1@cash - -// Undersea Tunnel Expansion -// -- 2010-11-10rdata_x.gpf -map: iz_dun05 - -// ??? -// -- 2010-12-01data_x.gpf -map: evt_mobroom - -// ??? -map: dic_dun03 -//map: mjolnir_04_1 -//map: evt_swar_b -//map: evt_swar_r -//map: evt_swar_s -//map: evt_swar_t - -// Lighthalzen Dungeon F4, Wolfchev's Laboratory -// -- 2011-03-16rdata_x.gpf -map: 1@lhz -map: lhz_dun04 -map: que_lhz - -// Hall Of Abyss -// -- 2011-06-15data_x.gpf -map: gld_dun01_2 -map: gld_dun02_2 -map: gld_dun03_2 -map: gld_dun04_2 -map: gld2_ald -map: gld2_gef -map: gld2_pay -map: gld2_prt - -// Malaya Port -// -- 2011-08-30data_x.gpf -map: malaya -map: ma_fild01 -map: ma_fild02 -map: ma_scene01 -map: ma_in01 -map: ma_dun01 -map: 1@ma_h -map: 1@ma_c -map: 1@ma_b -map: ma_zif01 -map: ma_zif02 -map: ma_zif03 -map: ma_zif04 -map: ma_zif05 -map: ma_zif06 -map: ma_zif07 -map: ma_zif08 -map: ma_zif09 -map: job_ko - -// 14.2 Eclage -// -- 2011-11-30data_x.gpf -map: eclage -map: ecl_fild01 -map: ecl_in01 -map: ecl_in02 -map: ecl_in03 -map: ecl_in04 -map: 1@ecl -map: ecl_tdun01 -map: ecl_tdun02 -map: ecl_tdun03 -map: ecl_tdun04 -map: ecl_hub01 -map: que_avan01 - -// Pyramids Basement Nightmare Mode -map: moc_prydn1 -map: moc_prydn2 - -// =============================== -// New Maps added 2013-02-10 (Thanks Streusel!) -// Credits to Baneado for reporting some -// =============================== -// Izlude Novice Academy & Tutorial -map: iz_int -map: iz_int01 -map: iz_int02 -map: iz_int03 -map: iz_int04 -map: iz_ac01 -map: iz_ac02 -map: iz_ng01 -map: treasure_n1 -map: treasure_n2 -map: iz_ac01_d -map: iz_ac02_d -map: iz_ac01_c -map: iz_ac02_c -map: iz_ac01_b -map: iz_ac02_b -map: iz_ac01_a -map: iz_ac02_a -map: izlude_d -map: izlude_c -map: izlude_b -map: izlude_a - -map: prt_fild08d -map: prt_fild08c -map: prt_fild08b -map: prt_fild08a - -// War of Emperium - Third Edition (TE) -map: te_prt_gld -map: te_prtcas01 -map: te_prtcas02 -map: te_prtcas03 -map: te_prtcas04 -map: te_prtcas05 -map: teg_dun01 -map: teg_dun02 -map: te_alde_gld -map: te_aldecas1 -map: te_aldecas2 -map: te_aldecas3 -map: te_aldecas4 -map: te_aldecas5 - -// Glast Heim Memorial & Nightmare -map: gl_cas02_ -map: gl_chyard_ -map: 1@gl_k -map: 2@gl_k - -map: silk_lair -map: evt_bomb - -// Wave Mode Memorial Dungeon -map: 1@def01 -map: 1@def02 -map: 1@def03 - -// Heroes' Trails - Part 1 -map: 1@face -map: 1@sara -map: 1@tnm1 -map: 1@tnm2 -map: 1@tnm3 -map: 1@ge_st -map: 1@gef -map: 1@gef_in -map: 1@spa -map: dali -map: dali02 - -// Episode 14.3 -map: moro_vol -map: moro_cav -map: 1@dth1 -map: 1@dth2 -map: 1@dth3 -map: 1@rev -map: 1@xm_d -map: 1@eom -map: 1@jtb - -// Clock Tower Nightmare Mode -map: c_tower2_ -map: c_tower3_ - -//------------------------- Clone Maps --------------------------- -//------------------------- Extra Maps --------------------------- - -// Ragnarok World Championship 2004 -// Requires: RWC 2004 Client -// or Akaru's SuperGRF 1.64 or newer -//map: rwc01 -//map: rwc02 -//map: rwc03 - -// Ragnarok World Championship 2009 -// Requires: RWC 2009 Map files -//map: 2009rwc_f01 -//map: 2009rwc_01 -//map: 2009rwc_02 -//map: 2009rwc_03 -//map: 2009rwc_04 - -// Ragnarok World Championship 2008? -// Requires: RWC 2008 Map files? -//map: 2008rwc_04 - -//Christmas & Sakura Special -//Requires Akaru's SuperGRF 1.1 or newer -//map: prontera_x -//map: alberta_x -//map: aldebaran_x -//map: geffen_x -//map: izlude_x -//map: prt_church_x -//map: prontera_s -//map: pay_arche_s - -//Fenced Lutie -//Requires Akaru's SuperGRF 1.23 or newer -//map: xmas_old - -//Alpha Maps -//Requires adata.grf containing alpha maps and data -//map: fay_vilg00 -//map: fay_vilg01 -//map: gef_vilg00 -//map: gef_vilg01 -//map: moc_dugn01 -//map: moc_dugn02 -//map: moc_fild01 -//map: moc_fild02 -//map: moc_fild03 -//map: moc_fild04 -//map: moc_intr00 -//map: moc_intr01 -//map: moc_intr02 -//map: moc_intr04 -//map: moc_vilg00 -//map: moc_vilg01 -//map: moc_vilg02 -//map: probemap -//map: probemap02 -//map: prt_cstl01 -//map: prt_dugn00 -//map: prt_dugn01 -//map: prt_fild00 -//map: prt_fild01 -//map: prt_fild03 -//map: prt_fild04 -//map: prt_fild05 -//map: prt_intr01 -//map: prt_intr01_a -//map: prt_intr02 -//map: prt_vilg00 -//map: prt_vilg01 -//map: prt_vilg02 -//map: tank_test -//map: tank_test2 -//map: test diff --git a/src/map/map.c b/src/map/map.c index 56af8113b..469747eef 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -79,6 +79,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <sys/stat.h> #ifndef _WIN32 #include <unistd.h> #endif @@ -3798,143 +3799,333 @@ int map_readallmaps (void) { return 0; } -/*========================================== - * Read map server configuration files (conf/map_server.conf...) - *------------------------------------------*/ -int map_config_read(char *cfgName) { - char line[1024], w1[1024], w2[1024]; - FILE *fp; +/** + * Reads 'map_configuration/console' and initializes required variables. + * + * @param filename Path to configuration file (used in error and warning messages). + * @param config The current config being parsed. + * @param imported Whether the current config is imported from another file. + * + * @retval false in case of error. + */ +bool map_config_read_console(const char *filename, struct config_t *config, bool imported) +{ + struct config_setting_t *setting = NULL; - nullpo_retr(1, cfgName); + nullpo_retr(false, filename); + nullpo_retr(false, config); - fp = fopen(cfgName,"r"); - if( fp == NULL ) { - ShowError("Map configuration file not found at: %s\n", cfgName); - return 1; + if ((setting = libconfig->lookup(config, "map_configuration/console")) == NULL) { + if (imported) + return true; + ShowError("map_config_read: map_configuration/console was not found in %s!\n", filename); + return false; } - while (fgets(line, sizeof(line), fp)) { - char* ptr; + libconfig->setting_lookup_bool_real(setting, "stdout_with_ansisequence", &showmsg->stdout_with_ansisequence); + if (libconfig->setting_lookup_int(setting, "console_silent", &showmsg->silent) == CONFIG_TRUE) { + if (showmsg->silent) // only bother if its actually enabled + ShowInfo("Console Silent Setting: %d\n", showmsg->silent); + } + libconfig->setting_lookup_mutable_string(setting, "timestamp_format", showmsg->timestamp_format, sizeof(showmsg->timestamp_format)); + libconfig->setting_lookup_int(setting, "console_msg_log", &showmsg->console_log); - if (line[0] == '/' && line[1] == '/') - continue; - if ((ptr = strstr(line, "//")) != NULL) - *ptr = '\n'; //Strip comments - if (sscanf(line, "%1023[^:]: %1023[^\t\r\n]", w1, w2) < 2) - continue; + return true; +} - //Strip trailing spaces - ptr = w2 + strlen(w2); - while (--ptr >= w2 && *ptr == ' '); - ptr++; - *ptr = '\0'; +/** + * Reads 'map_configuration/sql_connection' and initializes required variables. + * + * @param filename Path to configuration file (used in error and warning messages). + * @param config The current config being parsed. + * @param imported Whether the current config is imported from another file. + * + * @retval false in case of error. + */ +bool map_config_read_connection(const char *filename, struct config_t *config, bool imported) +{ + struct config_setting_t *setting = NULL; - if(strcmpi(w1,"timestamp_format")==0) - safestrncpy(showmsg->timestamp_format, w2, 20); - else if(strcmpi(w1,"stdout_with_ansisequence")==0) - showmsg->stdout_with_ansisequence = config_switch(w2) ? true : false; - else if(strcmpi(w1,"console_silent")==0) { - showmsg->silent = atoi(w2); - if (showmsg->silent) // only bother if its actually enabled - ShowInfo("Console Silent Setting: %d\n", atoi(w2)); - } else if (strcmpi(w1, "userid")==0) - chrif->setuserid(w2); - else if (strcmpi(w1, "passwd") == 0) - chrif->setpasswd(w2); - else if (strcmpi(w1, "char_ip") == 0) - map->char_ip_set = chrif->setip(w2); - else if (strcmpi(w1, "char_port") == 0) - chrif->setport(atoi(w2)); - else if (strcmpi(w1, "map_ip") == 0) - map->ip_set = clif->setip(w2); - else if (strcmpi(w1, "bind_ip") == 0) - clif->setbindip(w2); - else if (strcmpi(w1, "map_port") == 0) { - clif->setport(atoi(w2)); - map->port = (atoi(w2)); - } else if (strcmpi(w1, "map") == 0) - map->count++; - else if (strcmpi(w1, "delmap") == 0) - map->count--; - else if (strcmpi(w1, "npc") == 0) - npc->addsrcfile(w2); - else if (strcmpi(w1, "delnpc") == 0) - npc->delsrcfile(w2); - else if (strcmpi(w1, "autosave_time") == 0) { - map->autosave_interval = atoi(w2); - if (map->autosave_interval < 1) //Revert to default saving. - map->autosave_interval = DEFAULT_AUTOSAVE_INTERVAL; - else - map->autosave_interval *= 1000; //Pass from sec to ms - } else if (strcmpi(w1, "minsave_time") == 0) { - map->minsave_interval= atoi(w2); - if (map->minsave_interval < 1) - map->minsave_interval = 1; - } else if (strcmpi(w1, "save_settings") == 0) - map->save_settings = atoi(w2); - else if (strcmpi(w1, "help_txt") == 0) - strcpy(map->help_txt, w2); - else if (strcmpi(w1, "help2_txt") == 0) - strcpy(map->help2_txt, w2); - else if (strcmpi(w1, "charhelp_txt") == 0) - strcpy(map->charhelp_txt, w2); - else if(strcmpi(w1,"db_path") == 0) - safestrncpy(map->db_path,w2,255); - else if (strcmpi(w1, "enable_spy") == 0) - map->enable_spy = config_switch(w2); - else if (strcmpi(w1, "use_grf") == 0) - map->enable_grf = config_switch(w2); - else if (strcmpi(w1, "console_msg_log") == 0) - showmsg->console_log = atoi(w2);//[Ind] - else if (strcmpi(w1, "default_language") == 0) - safestrncpy(map->default_lang_str, w2, sizeof(map->default_lang_str)); - else if (strcmpi(w1, "import") == 0) - map->config_read(w2); + nullpo_retr(false, filename); + nullpo_retr(false, config); + + if ((setting = libconfig->lookup(config, "map_configuration/sql_connection")) == NULL) { + if (imported) + return true; + ShowError("map_config_read: map_configuration/sql_connection was not found in %s!\n", filename); + ShowWarning("map_config_read_connection: Defaulting sql_connection...\n"); + return false; + } + + libconfig->setting_lookup_int(setting, "db_port", &map->server_port); + libconfig->setting_lookup_mutable_string(setting, "db_hostname", map->server_ip, sizeof(map->server_ip)); + libconfig->setting_lookup_mutable_string(setting, "db_username", map->server_id, sizeof(map->server_id)); + libconfig->setting_lookup_mutable_string(setting, "db_password", map->server_pw, sizeof(map->server_pw)); + libconfig->setting_lookup_mutable_string(setting, "db_database", map->server_db, sizeof(map->server_db)); + libconfig->setting_lookup_mutable_string(setting, "default_codepage", map->default_codepage, sizeof(map->default_codepage)); + return true; +} + +/** + * Reads 'map_configuration/inter' and initializes required variables. + * + * @param filename Path to configuration file (used in error and warning messages). + * @param config The current config being parsed. + * @param imported Whether the current config is imported from another file. + * + * @retval false in case of error. + */ +bool map_config_read_inter(const char *filename, struct config_t *config, bool imported) +{ + struct config_setting_t *setting = NULL; + const char *str = NULL; + char temp[24]; + uint16 port; + + nullpo_retr(false, filename); + nullpo_retr(false, config); + + if ((setting = libconfig->lookup(config, "map_configuration/inter")) == NULL) { + if (imported) + return true; + ShowError("map_config_read: map_configuration/inter was not found in %s!\n", filename); + return false; + } + + // Login information + if (libconfig->setting_lookup_mutable_string(setting, "userid", temp, sizeof(temp)) == CONFIG_TRUE) + chrif->setuserid(temp); + if (libconfig->setting_lookup_mutable_string(setting, "passwd", temp, sizeof(temp)) == CONFIG_TRUE) + chrif->setpasswd(temp); + + // Char and map-server information + if (libconfig->setting_lookup_string(setting, "char_ip", &str) == CONFIG_TRUE) + map->char_ip_set = chrif->setip(str); + if (libconfig->setting_lookup_uint16(setting, "char_port", &port) == CONFIG_TRUE) + chrif->setport(port); + + if (libconfig->setting_lookup_string(setting, "map_ip", &str) == CONFIG_TRUE) + map->ip_set = clif->setip(str); + if (libconfig->setting_lookup_uint16(setting, "map_port", &port) == CONFIG_TRUE) { + clif->setport(port); + map->port = port; + } + if (libconfig->setting_lookup_string(setting, "bind_ip", &str) == CONFIG_TRUE) + clif->setbindip(str); + + return true; +} + +/** + * Reads 'map_configuration/database' and initializes required variables + * + * @param filename Path to configuration file (used in error and warning messages). + * @param config The current config being parsed. + * @param imported Whether the current config is imported from another file. + * + * @retval false in case of error. + */ +bool map_config_read_database(const char *filename, struct config_t *config, bool imported) +{ + struct config_setting_t *setting = NULL; + + nullpo_retr(false, filename); + nullpo_retr(false, config); + + if ((setting = libconfig->lookup(config, "map_configuration/database")) == NULL) { + if (imported) + return true; + ShowError("map_config_read: map_configuration/database was not found in %s!\n", filename); + return false; + } + libconfig->setting_lookup_mutable_string(setting, "db_path", map->db_path, sizeof(map->db_path)); + libconfig->setting_lookup_int(setting, "save_settings", &map->save_settings); + + if (libconfig->setting_lookup_int(setting, "autosave_time", &map->autosave_interval) == CONFIG_TRUE) { + if (map->autosave_interval < 1) // Revert to default saving + map->autosave_interval = DEFAULT_AUTOSAVE_INTERVAL; else - ShowWarning("Unknown setting '%s' in file %s\n", w1, cfgName); + map->autosave_interval *= 1000; // Pass from s to ms + } + if (libconfig->setting_lookup_int(setting, "minsave_time", &map->minsave_interval) == CONFIG_TRUE) { + if (map->minsave_interval < 1) + map->minsave_interval = 1; } - fclose(fp); - return 0; + return true; } -int map_config_read_sub(char *cfgName) { - char line[1024], w1[1024], w2[1024]; - FILE *fp; - nullpo_retr(1, cfgName); - fp = fopen(cfgName,"r"); - if (fp == NULL) { - ShowError("Map configuration file not found at: %s\n", cfgName); - return 1; +/** + * Reads 'map_configuration/map_list' and initializes required variables + * + * @param filename Path to configuration file (used in error and warning messages). + * @param config The current config being parsed. + * @param imported Whether the current config is imported from another file. + * + * @retval false in case of error. + */ +bool map_config_read_map_list(const char *filename, struct config_t *config, bool imported) +{ + // FIXME: There's no need to run this separately anymore (it can be done in one step when loading the maps) + struct config_setting_t *setting = NULL; + int count; + + nullpo_retr(false, filename); + nullpo_retr(false, config); + + if ((setting = libconfig->lookup(config, "map_configuration/map_list")) == NULL) { + if (imported) + return true; + ShowError("map_config_read: map_configuration/map_list was not found in %s!\n", filename); + return false; } - while (fgets(line, sizeof(line), fp)) { - char* ptr; + count = libconfig->setting_length(setting); + if (count == 0) { + ShowWarning("map_config_read: no maps found in %s!\n", filename); + return false; + } + map->count += count; - if (line[0] == '/' && line[1] == '/') + // Find how many maps should be removed + if ((setting = libconfig->lookup(config, "map_configuration/map_removed")) != NULL) { + if ((count = libconfig->setting_length(setting)) > 0) + map->count -= count; + } + + return true; +} + +/** + * Reads 'map_configuration/map_list'/'map_configuration/map_removed' and adds + * or removes maps from map-server. + * + * @param filename Path to configuration file (used in error and warning messages). + * + * @retval false in case of error. + */ +bool map_config_read_sub(char *filename) +{ + // FIXME: This should be called by map->config_read, rather than re-opening the file! + struct config_t config; + struct config_setting_t *setting = NULL; + int i, count = 0; + struct DBMap *deleted_maps; + + nullpo_retr(false, filename); + + if (!libconfig->load_file(&config, filename)) + return false; + + deleted_maps = strdb_alloc(DB_OPT_DUP_KEY|DB_OPT_RELEASE_KEY, MAP_NAME_LENGTH); + + // Remove maps + if ((setting = libconfig->lookup(&config, "map_configuration/map_removed")) != NULL) { + count = libconfig->setting_length(setting); + for (i = 0; i < count; i++) { + const char *mapname; + + if ((mapname = libconfig->setting_get_string_elem(setting, i)) == NULL || mapname[0] == '\0') + continue; + + strdb_put(deleted_maps, mapname, NULL); + // map->delmap is not used because the map is removed from the list before it's added [Panikon] + // map->delmap(mapname); + } + } + + if ((setting = libconfig->lookup(&config, "map_configuration/map_list")) == NULL) { + ShowError("map_config_read_sub: map_configuration/map_list was not found in %s!\n", filename); + db_destroy(deleted_maps); + libconfig->destroy(&config); + return false; + } + + // Add maps to map->list + count = libconfig->setting_length(setting); + if (count <= 0) { + ShowWarning("map_config_read_sub: no maps found in %s!\n", filename); + db_destroy(deleted_maps); + libconfig->destroy(&config); + return false; + } + for (i = 0; i < count; i++) { + const char *mapname; + + if ((mapname = libconfig->setting_get_string_elem(setting, i)) == NULL || mapname[0] == '\0') continue; - if ((ptr = strstr(line, "//")) != NULL) - *ptr = '\n'; //Strip comments - if (sscanf(line, "%1023[^:]: %1023[^\t\r\n]", w1, w2) < 2) + + if (strdb_exists(deleted_maps, mapname)) continue; - //Strip trailing spaces - ptr = w2 + strlen(w2); - while (--ptr >= w2 && *ptr == ' '); - ptr++; - *ptr = '\0'; + map->addmap(mapname); + } - if (strcmpi(w1, "map") == 0) - map->addmap(w2); - else if (strcmpi(w1, "delmap") == 0) - map->delmap(w2); - else if (strcmpi(w1, "import") == 0) - map->config_read_sub(w2); + db_destroy(deleted_maps); + libconfig->destroy(&config); + return true; +} + +/** + * Reads map-server configuration files (map-server.conf) and initialises + * 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 map_config_read(const char *filename, bool imported) +{ + struct config_t config; + struct config_setting_t *setting = NULL; + const char *import = NULL; + bool retval = true; + + nullpo_retr(false, filename); + + if (!libconfig->load_file(&config, filename)) + return false; + + if ((setting = libconfig->lookup(&config, "map_configuration")) == NULL) { + libconfig->destroy(&config); + if (imported) + return true; + ShowError("map_config_read: map_configuration was not found in %s!\n", filename); + return false; } - fclose(fp); - return 0; + libconfig->setting_lookup_mutable_string(setting, "help_txt", map->help_txt, sizeof(map->help_txt)); + libconfig->setting_lookup_mutable_string(setting, "charhelp_txt", map->charhelp_txt, sizeof(map->charhelp_txt)); + libconfig->setting_lookup_bool(setting, "enable_spy", &map->enable_spy); + libconfig->setting_lookup_bool(setting, "use_grf", &map->enable_grf); + libconfig->setting_lookup_mutable_string(setting, "default_language", map->default_lang_str, sizeof(map->default_lang_str)); + + if (!map_config_read_console(filename, &config, imported)) + retval = false; + if (!map_config_read_connection(filename, &config, imported)) + retval = false; + if (!map_config_read_inter(filename, &config, imported)) + retval = false; + if (!map_config_read_database(filename, &config, imported)) + retval = false; + if (!map_config_read_map_list(filename, &config, 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->MAP_CONF_NAME) == 0) { + ShowWarning("map_config_read: Loop detected! Skipping 'import'...\n"); + } else { + if (!map->config_read(import, true)) + retval = false; + } + } + + libconfig->destroy(&config); + return retval; } + void map_reloadnpc_sub(char *cfgName) { char line[1024], w1[1024], w2[1024]; FILE *fp; @@ -6141,7 +6332,7 @@ int do_init(int argc, char *argv[]) map->INTER_CONF_NAME = aStrdup("conf/common/inter-server.conf"); map->LOG_CONF_NAME = aStrdup("conf/logs.conf"); - map->MAP_CONF_NAME = aStrdup("conf/map-server.conf"); + map->MAP_CONF_NAME = aStrdup("conf/map/map-server.conf"); map->BATTLE_CONF_FILENAME = aStrdup("conf/battle.conf"); map->ATCOMMAND_CONF_FILENAME = aStrdup("conf/atcommand.conf"); map->SCRIPT_CONF_NAME = aStrdup("conf/script.conf"); @@ -6157,11 +6348,30 @@ int do_init(int argc, char *argv[]) cmdline->exec(argc, argv, CMDLINE_OPT_NORMAL); minimal = map->minimal;/* temp (perhaps make minimal a mask with options of what to load? e.g. plugin 1 does minimal |= mob_db; */ if (!minimal) { - map->config_read(map->MAP_CONF_NAME); + map->config_read(map->MAP_CONF_NAME, false); CREATE(map->list,struct map_data,map->count); map->count = 0; map->config_read_sub(map->MAP_CONF_NAME); + { + // TODO: Remove this when no longer needed. +#define CHECK_OLD_LOCAL_CONF(oldname, newname) do { \ + if (stat((oldname), &fileinfo) == 0 && fileinfo.st_size > 0) { \ + ShowWarning("An old configuration file \"%s\" was found.\n", (oldname)); \ + ShowWarning("If it contains settings you wish to keep, please merge them into \"%s\".\n", (newname)); \ + ShowWarning("Otherwise, just delete it.\n"); \ + ShowInfo("Resuming in 10 seconds...\n"); \ + HSleep(10); \ + } \ +} while (0) + struct stat fileinfo; + + CHECK_OLD_LOCAL_CONF("conf/import/map_conf.txt", "conf/import/map-server.conf"); + CHECK_OLD_LOCAL_CONF("conf/import/inter_conf.txt", "conf/import/inter-server.conf"); + +#undef CHECK_OLD_LOCAL_CONF + } + // loads npcs map->reloadnpc(false); @@ -6172,7 +6382,7 @@ int do_init(int argc, char *argv[]) sockt->ip2str(sockt->addr_[0], ip_str); #ifndef BUILDBOT - ShowWarning("Not all IP addresses in /conf/map-server.conf configured, auto-detecting...\n"); + ShowWarning("Not all IP addresses in /conf/map/map-server.conf configured, auto-detecting...\n"); #endif if (sockt->naddr_ == 0) @@ -6337,7 +6547,6 @@ void map_defaults(void) { sprintf(map->db_path ,"db"); sprintf(map->help_txt ,"conf/help.txt"); - sprintf(map->help2_txt ,"conf/help2.txt"); sprintf(map->charhelp_txt ,"conf/charhelp.txt"); sprintf(map->wisp_server_name ,"Server"); // can be modified in char-server configuration file @@ -6352,7 +6561,7 @@ void map_defaults(void) { map->INTER_CONF_NAME="conf/common/inter-server.conf"; map->LOG_CONF_NAME="conf/logs.conf"; - map->MAP_CONF_NAME = "conf/map-server.conf"; + map->MAP_CONF_NAME = "conf/map/map-server.conf"; map->BATTLE_CONF_FILENAME = "conf/battle.conf"; map->ATCOMMAND_CONF_FILENAME = "conf/atcommand.conf"; map->SCRIPT_CONF_NAME = "conf/script.conf"; diff --git a/src/map/map.h b/src/map/map.h index f98e1cb7f..646e39448 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -968,7 +968,6 @@ struct map_interface { char db_path[256]; char help_txt[256]; - char help2_txt[256]; char charhelp_txt[256]; char wisp_server_name[NAME_LENGTH]; @@ -997,7 +996,7 @@ struct map_interface { char server_db[32]; struct Sql *mysql_handle; - int port; + uint16 port; int users; int enable_grf; //To enable/disable reading maps from GRF files, bypassing mapcache [blackhole89] bool ip_set; @@ -1188,8 +1187,8 @@ END_ZEROED_BLOCK; int (*waterheight) (char *mapname); int (*readgat) (struct map_data *m); int (*readallmaps) (void); - int (*config_read) (char *cfgName); - int (*config_read_sub) (char *cfgName); + bool (*config_read) (const char *filename, bool imported); + bool (*config_read_sub) (char *filename); void (*reloadnpc_sub) (char *cfgName); bool (*inter_config_read) (const char *filename, bool imported); bool (*inter_config_read_database_names) (const char *filename, const struct config_t *config, bool imported); diff --git a/tools/configconverter.pl b/tools/configconverter.pl index 435e4b246..2d5eebe72 100755 --- a/tools/configconverter.pl +++ b/tools/configconverter.pl @@ -169,6 +169,12 @@ sub printcfg_int($$$) { indent("$variable: $value\n", $nestlevel); } +sub printcfg_hexint($$$) { + my ($variable, $value, $nestlevel) = @_; + + indent(sprintf("%s: 0x%x\n", $variable, $value), $nestlevel); +} + sub printcfg_bool($$$) { my ($variable, $value, $nestlevel) = @_; @@ -441,7 +447,34 @@ my @defaults = ( 'account.sql.accreg_db' => {parse => \&parsecfg_string, print => \&printcfg_nil, path => "", default => "global_reg_value"}, import => {parse => \&parsecfg_stringarr, print => \&printcfg_nil, path => "", default => ["conf/inter-server.conf", "conf/import/login_conf.txt"]}, } - } + }, + { + files => ['map-server.conf', 'import/map_conf.txt'], + settings => { + userid => {parse => \&parsecfg_string, print => \&printcfg_string, path => "map-server:map_configuration/inter/", default => "s1"}, + passwd => {parse => \&parsecfg_string, print => \&printcfg_string, path => "map-server:map_configuration/inter/", default => "p1"}, + char_ip => {parse => \&parsecfg_string, print => \&printcfg_string, path => "map-server:map_configuration/inter/", default => "127.0.0.1"}, + bind_ip => {parse => \&parsecfg_string, print => \&printcfg_string, path => "map-server:map_configuration/inter/", default => "127.0.0.1"}, + char_port => {parse => \&parsecfg_int, print => \&printcfg_int, path => "map-server:map_configuration/inter/", default => 6121}, + map_ip => {parse => \&parsecfg_string, print => \&printcfg_string, path => "map-server:map_configuration/inter/", default => "127.0.0.1"}, + map_port => {parse => \&parsecfg_int, print => \&printcfg_int, path => "map-server:map_configuration/inter/", default => 5121}, + timestamp_format => {parse => \&parsecfg_string, print => \&printcfg_string, path => "console:console/", default => "[%d/%b %H:%M]"}, + stdout_with_ansisequence => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "console:console/", default => "false"}, + console_msg_log => {parse => \&parsecfg_int, print => \&printcfg_int, path => "console:console/", default => 0}, + console_silent => {parse => \&parsecfg_int, print => \&printcfg_int, path => "console:console/", default => 0}, + db_path => {parse => \&parsecfg_string, print => \&printcfg_string, path => "map-server:map_configuration/database/", default => "db"}, + enable_spy => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "map-server:map_configuration/", default => "false"}, + use_grf => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "map-server:map_configuration/", default => "false"}, + autosave_time => {parse => \&parsecfg_int, print => \&printcfg_int, path => "map-server:map_configuration/database/", default => 300}, + minsave_time => {parse => \&parsecfg_int, print => \&printcfg_int, path => "map-server:map_configuration/database/", default => 100}, + save_settings => {parse => \&parsecfg_int, print => \&printcfg_hexint, path => "map-server:map_configuration/database/", default => 511}, + default_language => {parse => \&parsecfg_string, print => \&printcfg_string, path => "map-server:map_configuration/", default => "English"}, + help_txt => {parse => \&parsecfg_string, print => \&printcfg_string, path => "map-server:map_configuration/", default => "conf/help.txt"}, + charhelp_txt => {parse => \&parsecfg_string, print => \&printcfg_string, path => "map-server:map_configuration/", default => "conf/charhelp.txt"}, + help2_txt => {parse => \&parsecfg_string, print => \&printcfg_nil, path => "", default => "conf/help2.txt"}, + import => {parse => \&parsecfg_stringarr, print => \&printcfg_nil, path => "", default => ["conf/maps.conf", "conf/import/map_conf.txt"]}, + } + }, ); for (@ARGV) { |