From ea9ceb17bdf4ea4acf28dca84508b62bd7e94fd4 Mon Sep 17 00:00:00 2001 From: Haru Date: Mon, 7 Sep 2015 01:42:31 +0200 Subject: Ported inter-server.conf to libconfig Ported to modern Hercules and cleaned up from Panikon's commits: 40f9ec33868e2240cab013308897898ed252b3e0, a9d646da19e25ab6fcf44dbd1ae7d90c30f6686c, 1aa8581a0aecbfd53e877686c399ffb731dcd75e, 72c645b015ae6130ca7d4309d0fb1413340e7f23, f8c906a0496b9acdae1d8244b1544fa03592061e, 51d88a58983c9552dfd1a0f059e5a031742aed61, 443684b3c77f4c32fe7877a7f8d62debf73b1e93, cf93eafef1f322cd1583226272b7d4008f562da4 Signed-off-by: Haru --- src/map/map.c | 174 +++++++++++++++++++++++++++++++++++---------------- src/map/map.h | 7 ++- src/map/mapreg.h | 6 +- src/map/mapreg_sql.c | 21 ++++--- 4 files changed, 142 insertions(+), 66 deletions(-) (limited to 'src/map') diff --git a/src/map/map.c b/src/map/map.c index d6425b94e..56af8113b 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -3997,63 +3997,125 @@ void map_reloadnpc(bool clear) { } } -int inter_config_read(char *cfgName) { - char line[1024],w1[1024],w2[1024]; - FILE *fp; +/** + * Reads inter-server.conf 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 inter_config_read(const char *filename, bool imported) +{ + struct config_t config; + const struct config_setting_t *setting = NULL; + const char *import = NULL; + bool retval = true; - nullpo_retr(1, cfgName); - if (!(fp = fopen(cfgName,"r"))) { - ShowError("File not found: %s\n",cfgName); - return 1; + nullpo_retr(false, filename); + + if (!libconfig->load_file(&config, filename)) + return false; + + if ((setting = libconfig->lookup(&config, "inter_configuration")) == NULL) { + libconfig->destroy(&config); + if (imported) + return true; + ShowError("inter_config_read: inter_configuration was not found in %s!\n", filename); + return false; } - while (fgets(line, sizeof(line), fp)) { - if (line[0] == '/' && line[1] == '/') - continue; - if (sscanf(line,"%1023[^:]: %1023[^\r\n]", w1, w2) < 2) - continue; - /* map sql stuff */ - if(strcmpi(w1,"map_server_ip")==0) - safestrncpy(map->server_ip, w2, sizeof(map->server_ip)); - else if(strcmpi(w1,"map_server_port")==0) - map->server_port=atoi(w2); - else if(strcmpi(w1,"map_server_id")==0) - safestrncpy(map->server_id, w2, sizeof(map->server_id)); - else if(strcmpi(w1,"map_server_pw")==0) - safestrncpy(map->server_pw, w2, sizeof(map->server_pw)); - else if(strcmpi(w1,"map_server_db")==0) - safestrncpy(map->server_db, w2, sizeof(map->server_db)); - else if(strcmpi(w1,"default_codepage")==0) - safestrncpy(map->default_codepage, w2, sizeof(map->default_codepage)); - else if(strcmpi(w1,"autotrade_merchants_db")==0) - safestrncpy(map->autotrade_merchants_db, w2, sizeof(map->autotrade_merchants_db)); - else if(strcmpi(w1,"autotrade_data_db")==0) - safestrncpy(map->autotrade_data_db, w2, sizeof(map->autotrade_data_db)); - else if(strcmpi(w1,"npc_market_data_db")==0) - safestrncpy(map->npc_market_data_db, w2, sizeof(map->npc_market_data_db)); - /* sql log db */ - else if(strcmpi(w1,"log_db_ip")==0) - safestrncpy(logs->db_ip, w2, sizeof(logs->db_ip)); - else if(strcmpi(w1,"log_db_id")==0) - safestrncpy(logs->db_id, w2, sizeof(logs->db_id)); - else if(strcmpi(w1,"log_db_pw")==0) - safestrncpy(logs->db_pw, w2, sizeof(logs->db_pw)); - else if(strcmpi(w1,"log_db_port")==0) - logs->db_port = atoi(w2); - else if(strcmpi(w1,"log_db_db")==0) - safestrncpy(logs->db_name, w2, sizeof(logs->db_name)); - /* mapreg */ - else if( mapreg->config_read(w1,w2) ) - continue; - /* import */ - else if(strcmpi(w1,"import")==0) - map->inter_config_read(w2); - else - HPM->parseConf(w1, w2, HPCT_MAP_INTER); + if (!map->inter_config_read_database_names(filename, &config, imported)) + retval = false; + if (!map->inter_config_read_connection(filename, &config, imported)) + retval = false; + + // TODO HPM->parseConf(w1, w2, HPCT_MAP_INTER); + + // 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->INTER_CONF_NAME) == 0) { + ShowWarning("inter_config_read: Loop detected in %s! Skipping 'import'...\n", filename); + } else { + if (!map->inter_config_read(import, true)) + retval = false; + } } - fclose(fp); - return 0; + libconfig->destroy(&config); + return retval; +} + +/** + * Reads the 'inter_configuration/log/sql_connection' config entry 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 inter_config_read_connection(const char *filename, const struct config_t *config, bool imported) +{ + const struct config_setting_t *setting = NULL; + + nullpo_retr(false, filename); + nullpo_retr(false, config); + + if ((setting = libconfig->lookup(config, "inter_configuration/log/sql_connection")) == NULL) { + if (imported) + return true; + ShowError("inter_config_read: inter_configuration/log/sql_connection was not found in %s!\n", filename); + return false; + } + + libconfig->setting_lookup_int(setting, "port", &logs->db_port); + libconfig->setting_lookup_mutable_string(setting, "db_hostname", logs->db_ip, sizeof(logs->db_ip)); + libconfig->setting_lookup_mutable_string(setting, "db_username", logs->db_id, sizeof(logs->db_id)); + libconfig->setting_lookup_mutable_string(setting, "db_password", logs->db_pw, sizeof(logs->db_pw)); + libconfig->setting_lookup_mutable_string(setting, "db_database", logs->db_name, sizeof(logs->db_name)); + + return true; +} + +/** + * Reads the 'inter_configuration/database_names' config entry 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 inter_config_read_database_names(const char *filename, const struct config_t *config, bool imported) +{ + const struct config_setting_t *setting = NULL; + bool retval = true; + + nullpo_retr(false, filename); + nullpo_retr(false, config); + + if ((setting = libconfig->lookup(config, "inter_configuration/database_names")) == NULL) { + if (imported) + return true; + ShowError("inter_config_read: inter_configuration/database_names was not found in %s!\n", filename); + return false; + } + + libconfig->setting_lookup_mutable_string(setting, "autotrade_merchants_db", map->autotrade_merchants_db, sizeof(map->autotrade_merchants_db)); + libconfig->setting_lookup_mutable_string(setting, "autotrade_data_db", map->autotrade_data_db, sizeof(map->autotrade_data_db)); + libconfig->setting_lookup_mutable_string(setting, "npc_market_data_db", map->npc_market_data_db, sizeof(map->npc_market_data_db)); + + if (!mapreg->config_read(filename, setting, imported)) + retval = false; + + if ((setting = libconfig->lookup(config, "inter_configuration/database_names/registry")) == NULL) { + if (imported) + return retval; + ShowError("inter_config_read: inter_configuration/database_names/registry was not found in %s!\n", filename); + return false; + } + return retval; } /*======================================= @@ -6077,7 +6139,7 @@ int do_init(int argc, char *argv[]) map_load_defaults(); - map->INTER_CONF_NAME = aStrdup("conf/inter-server.conf"); + 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->BATTLE_CONF_FILENAME = aStrdup("conf/battle.conf"); @@ -6128,7 +6190,7 @@ int do_init(int argc, char *argv[]) battle->config_read(map->BATTLE_CONF_FILENAME); atcommand->msg_read(map->MSG_CONF_NAME, false); - map->inter_config_read(map->INTER_CONF_NAME); + map->inter_config_read(map->INTER_CONF_NAME, false); logs->config_read(map->LOG_CONF_NAME); } script->config_read(map->SCRIPT_CONF_NAME); @@ -6288,7 +6350,7 @@ void map_defaults(void) { map->night_flag = 0; // 0=day, 1=night [Yor] map->enable_spy = 0; //To enable/disable @spy commands, which consume too much cpu time when sending packets. [Skotlex] - map->INTER_CONF_NAME="conf/inter-server.conf"; + 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->BATTLE_CONF_FILENAME = "conf/battle.conf"; @@ -6502,6 +6564,8 @@ void map_defaults(void) { map->config_read_sub = map_config_read_sub; map->reloadnpc_sub = map_reloadnpc_sub; map->inter_config_read = inter_config_read; + map->inter_config_read_database_names = inter_config_read_database_names; + map->inter_config_read_connection = inter_config_read_connection; map->sql_init = map_sql_init; map->sql_close = map_sql_close; map->zone_mf_cache = map_zone_mf_cache; diff --git a/src/map/map.h b/src/map/map.h index dbd30febf..f98e1cb7f 100644 --- a/src/map/map.h +++ b/src/map/map.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 @@ -33,6 +33,7 @@ /* Forward Declarations */ struct Sql; // common/sql.h +struct config_t; // common/conf.h struct mob_data; struct npc_data; struct channel_data; @@ -1190,7 +1191,9 @@ END_ZEROED_BLOCK; int (*config_read) (char *cfgName); int (*config_read_sub) (char *cfgName); void (*reloadnpc_sub) (char *cfgName); - int (*inter_config_read) (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); + bool (*inter_config_read_connection) (const char *filename, const struct config_t *config, bool imported); int (*sql_init) (void); int (*sql_close) (void); bool (*zone_mf_cache) (int m, char *flag, char *params); diff --git a/src/map/mapreg.h b/src/map/mapreg.h index d19b2bb80..642bce48e 100644 --- a/src/map/mapreg.h +++ b/src/map/mapreg.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 @@ -25,6 +25,8 @@ #include "common/hercules.h" #include "common/db.h" +/* Forward Declarations */ +struct config_setting_t; // common/conf.h struct eri; /** Container for a mapreg value */ @@ -61,7 +63,7 @@ struct mapreg_interface { int (*save_timer) (int tid, int64 tick, int id, intptr_t data); int (*destroyreg) (union DBKey key, struct DBData *data, va_list ap); void (*reload) (void); - bool (*config_read) (const char *w1, const char *w2); + bool (*config_read) (const char *filename, const struct config_setting_t *config, bool imported); }; #ifdef HERCULES_CORE diff --git a/src/map/mapreg_sql.c b/src/map/mapreg_sql.c index 82ce39d64..4cdb91b21 100644 --- a/src/map/mapreg_sql.c +++ b/src/map/mapreg_sql.c @@ -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 @@ -25,6 +25,7 @@ #include "map/map.h" // map-"mysql_handle #include "map/script.h" #include "common/cbasetypes.h" +#include "common/conf.h" #include "common/db.h" #include "common/ers.h" #include "common/memmgr.h" @@ -349,13 +350,19 @@ void mapreg_init(void) { /** * Loads the mapreg configuration file. + * + * @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 mapreg_config_read(const char* w1, const char* w2) { - nullpo_retr(false, w1); - nullpo_retr(false, w2); - if(!strcmpi(w1, "mapreg_db")) - safestrncpy(mapreg->table, w2, sizeof(mapreg->table)); - else +bool mapreg_config_read(const char *filename, const struct config_setting_t *config, bool imported) +{ + nullpo_retr(false, filename); + nullpo_retr(false, config); + + if (libconfig->setting_lookup_mutable_string(config, "mapreg_db", mapreg->table, sizeof(mapreg->table)) != CONFIG_TRUE) return false; return true; -- cgit v1.2.3-70-g09d2 From 85d10885379bbe52930c233f02bf1c94ec86ac30 Mon Sep 17 00:00:00 2001 From: Haru Date: Thu, 11 Feb 2016 13:28:18 +0100 Subject: Ported map-server.conf to libconfig Ported to modern Hercules and cleaned up from Panikon's commits: ee48838b12d15902fc14738cfa46d58b39080d11, 55498ebb7ac5d28444d0b01506c88ef6874f6055, 6d1f8f50b0e7349bdab2c53bb172d0b036e47c04, 25dde7e46524ace330b83cb4bf0255cc4d796792 Signed-off-by: Haru --- .gitignore | 1 - conf/atcommand.conf | 2 +- conf/charhelp.txt | 28 - conf/global/console.conf | 8 + conf/help.txt | 307 ---------- conf/import-tmpl/map-server.conf | 32 + conf/import-tmpl/map_conf.txt | 0 conf/map-server.conf | 119 ---- conf/map/charhelp.txt | 28 + conf/map/help.txt | 307 ++++++++++ conf/map/map-server.conf | 117 ++++ conf/map/maps.conf | 1252 ++++++++++++++++++++++++++++++++++++++ conf/maps.conf | 1225 ------------------------------------- src/map/map.c | 449 ++++++++++---- src/map/map.h | 7 +- tools/configconverter.pl | 35 +- 16 files changed, 2111 insertions(+), 1806 deletions(-) delete mode 100644 conf/charhelp.txt delete mode 100644 conf/help.txt create mode 100644 conf/import-tmpl/map-server.conf delete mode 100644 conf/import-tmpl/map_conf.txt delete mode 100644 conf/map-server.conf create mode 100644 conf/map/charhelp.txt create mode 100644 conf/map/help.txt create mode 100644 conf/map/map-server.conf create mode 100644 conf/map/maps.conf delete mode 100644 conf/maps.conf (limited to 'src/map') 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/charhelp.txt b/conf/charhelp.txt deleted file mode 100644 index e3acddbb4..000000000 --- a/conf/charhelp.txt +++ /dev/null @@ -1,28 +0,0 @@ - 40:--- CHARACTER CMD --- - 40:#statsall - Set all stats of a player to maximum. - 40:#itemlist - Displays all items of a player. - 40:#storagelist - Displays all items of a player's storage. - 40:#stats - Displays a characters stats. - 60:#option - Like @option command but only to target character. - 50:#mountpeco - Give/remove to a player a peco (Class is required, but not skill). - 50:#petrename - Re-enable pet rename to a player. - 60:#save - Changes the target players respawn point. - 60:#baselvl/#blvl <#> - Change a characters base level. - 60:#joblvl/#jlvl <#> - Change a characters job level. - 60:#job/#jobchange - Changes target characters job. - 60:#zeny - Give/take a players Zeny - 60:#cash - Give/take a player cash points - 60:#points - Give/take a player Kafra points - 60:#stpoint - Give/take a players stat points - 60:#skpoint - give/take a players skill points - 60:#skreset - Reset skills of a character. - 60:#streset - Reset stats of a character. - 60:#reset - Reset stats AND skills of a character. - 60:#questskill <#> - Gives to a player the specified quest skill. - 60:#lostskill <#> - Takes away the specified quest skill from the player. - 60:#delitem - Remove items from a character - 50:#model - Changes a player's model - 60:#disguise - Changes disguise of a player - 60:#undisguise - Cancels disguise of a player - 60:#changesex - Changes sex of a player (all characters of the account) - 60:#warp/#rura+ - Warps character to location of choice 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/help.txt b/conf/help.txt deleted file mode 100644 index a65c7de70..000000000 --- a/conf/help.txt +++ /dev/null @@ -1,307 +0,0 @@ -// This is help file that contains help messages for atcommands/charcommands. - -// Format: -// : "" - -// This file uses libconfig syntax. - -help: "Params: \n" "Shows help for specified command." -noask: "Auto rejects deals/invites." -me: "Params: \n" "Displays normal text as a message in this format: *name message* (like /me in mIRC)." -fakename: "Params: \n" "Changes your name to your choice temporarily." -npctalk: "Params: \n" "Forces a NPC to display a message in normal chat." -broadcast: "Params: \n" "Broadcasts a message with your name (in yellow)." -kami: "Params: \n" "Broadcasts a message without your name (in yellow)." -kamib: "Params: \n" "Broadcasts a message without your name (in blue)." -localbroadcast: "Params: \n" "Broadcasts a message with your name (in yellow) only on your map." -commands: "Displays a list of commands that you can use." -rates: "Displays the server's current rates." -uptime: "Displays how long the server has been online." -showdelay: "Shows/hides the \"There is a delay after this skill\" message." -exp: "Displays current levels and % progress." -mobinfo: "Params: \n" "Shows monster info (stats, exp, drops etc)." -iteminfo: "Params: \n" "Shows item info (type, price etc)." -whodrops: "Params: \n" "Shows who drops an item (monster with highest drop rates)." -version: "Displays SVN version of the server." -email: "Params: \n" "Changes your account e-mail address." -where: "Params: \n" "Tells you the location of a character." -time: "Shows the date and time of the server." -showexp: "Displays/hides experience gained." -showzeny: "Displays/hides Zeny gained." -mobsearch: "Params: \n" "Shows the location of a certain mob on the current map." -who: "Params: []\n" "Shows a list of online players and their party and guild." -who2: "Params: []\n" "Shows a list of online players and their job." -who3: "Params: []\n" "Shows a list of online players and their location." -whomap: "@whomap/@whomap2/@whomap3 [map] - like @who/@who2/@who3 but only for specified map." -whogm: "Params: [match_text] - Like @who+@who2+who3, but only for GM." -guildspy: "Params: - You will receive all messages of the guild channel (Chat logging must be enabled)" -partyspy: "@partyspy - You will receive all messages of the party channel (Chat logging must be enabled)" -mapinfo: "Params: [<0-3> [map]] - Give information about a map (general info +: 0: no more, 1: players, 2: NPC, 3: shops/chat)." -go: "Params: \n" "Warps you to a city.\n" - " -3: (Memo point 2) 14: louyang 31: mora\n" - " -2: (Memo point 1) 15: start point 32: dewata\n" - " -1: (Memo point 0) 16: prison/jail 33: malangdo island\n" - " 0: prontera 17: jawaii 34: malaya port\n" - " 1: morocc 18: ayothaya 35: eclage\n" - " 2: geffen 19: einbroch\n" - " 3: payon 20: lighthalzen\n" - " 4: alberta 21: einbech\n" - " 5: izlude 22: hugel\n" - " 6: aldebaran 23: rachel\n" - " 7: xmas (lutie) 24: veins\n" - " 8: comodo 25: moscovia\n" - " 9: yuno 26: midgard camp\n" - " 10: amatsu 27: manuk\n" - " 11: gonryun 28: splendide\n" - " 12: umbala 29: brasilis\n" - " 13: niflheim 30: el dicastes\n" -jumpto: "Params: \n" "Warps you to selected character." -follow: "Params: \n" "Follow a player." -mount: "Give/remove you a peco (Class is required, but not skill)" -disguise: "Params: \n" "Change your appearence to other players to a mob." -undisguise: "Restore your normal appearance." -disguiseguild: "Disguises all online characters of a guild." -undisguiseguild: "Restore the normal appearance of all characters of a guild." -model: "Params: - Changes your characters appearence." -size: "Params: <1-3> Changes your size (1-Smallest 2-Biggest 3-Normal)" -sizeall: "Changes the size of all players." -sizeguild: "Changes the size of all online characters of a guild." -hide: "Makes you character invisible (GM invisibility). Type again to become visible." -save: "Sets respawn point to current spot." -load: "Warps you to your save point." -warp: "Params: [ ]\n" "Warps you to the selected map and position." -jump: "Params: [ []]\n" "Randomly warps you like a flywing." -jobchange: "Params: \n" "Changes your job.\n" - "----- Novice / 1st Class -----\n" - " 0 Novice 1 Swordman 2 Magician 3 Archer\n" - " 4 Acolyte 5 Merchant 6 Thief\n" - "----- 2nd Class -----\n" - " 7 Knight 8 Priest 9 Wizard 10 Blacksmith\n" - " 11 Hunter 12 Assassin 14 Crusader 15 Monk\n" - " 16 Sage 17 Rogue 18 Alchemist 19 Bard\n" - " 20 Dancer\n" - "----- High Novice / High 1st Class -----\n" - "4001 Novice High 4002 Swordman High 4003 Magician High 4004 Archer High\n" - "4005 Acolyte High 4006 Merchant High 4007 Thief High\n" - "----- Transcendent 2nd Class -----\n" - "4008 Lord Knight 4009 High Priest 4010 High Wizard 4011 Whitesmith\n" - "4012 Sniper 4013 Assassin Cross 4015 Paladin 4016 Champion\n" - "4017 Professor 4018 Stalker 4019 Creator 4020 Clown\n" - "4021 Gypsy\n" - "----- 3rd Class (Regular) -----\n" - "4054 Rune Knight 4055 Warlock 4056 Ranger 4057 Arch Bishop\n" - "4058 Mechanic 4059 Guillotine Cross 4066 Royal Guard 4067 Sorcerer\n" - "4068 Minstrel 4069 Wanderer 4070 Sura 4071 Genetic\n" - "4072 Shadow Chaser\n" - "----- 3rd Class (Transcendent) -----\n" - "4060 Rune Knight 4061 Warlock 4062 Ranger 4063 Arch Bishop\n" - "4064 Mechanic 4065 Guillotine Cross 4073 Royal Guard 4074 Sorcerer\n" - "4075 Minstrel 4076 Wanderer 4077 Sura 4078 Genetic\n" - "4079 Shadow Chaser\n" - "----- Expanded Class -----\n" - " 23 Super Novice 24 Gunslinger 25 Ninja 4045 Super Baby\n" - "4046 Taekwon 4047 Star Gladiator 4049 Soul Linker 4050 Gangsi\n" - "4051 Death Knight 4052 Dark Collector 4190 Ex. Super Novice 4191 Ex. Super Baby\n" - "4211 Kagerou 4212 Oboro 4215 Rebellion\n" - "----- Baby Novice And Baby 1st Class -----\n" - "4023 Baby Novice 4024 Baby Swordman 4025 Baby Magician 4026 Baby Archer\n" - "4027 Baby Acolyte 4028 Baby Merchant 4029 Baby Thief\n" - "---- Baby 2nd Class ----\n" - "4030 Baby Knight 4031 Baby Priest 4032 Baby Wizard 4033 Baby Blacksmith\n" - "4034 Baby Hunter 4035 Baby Assassin 4037 Baby Crusader 4038 Baby Monk\n" - "4039 Baby Sage 4040 Baby Rogue 4041 Baby Alchemist 4042 Baby Bard\n" - "4043 Baby Dancer\n" - "---- Baby 3rd Class ----\n" - "4096 Baby Rune Knight 4097 Baby Warlock 4098 Baby Ranger 4099 Baby Arch Bishop\n" - "4100 Baby Mechanic 4101 Baby Glt. Cross 4102 Baby Royal Guard 4103 Baby Sorcerer\n" - "4104 Baby Minstrel 4105 Baby Wanderer 4106 Baby Sura 4107 Baby Genetic\n" - "4108 Baby Shadow Chaser\n" - "---- Modes And Others ----\n" - " 22 Wedding 26 Christmas 27 Summer 4048 Star Gladiator (Union)\n" -option: "Params: (stackable) (stackable)\n" "Adds different visual effects on or around your character.\n" -" \n" -"01: Stone 01: Sight 01: Sight 512: Cart Lv. 4\n" -"02: Frozen 02: Curse 02: Hiding 1024: Cart Lv. 5\n" -"03: Stun 04: Silence 04: Cloaking 2048: Orc Head\n" -"04: Sleep 08: Signum 08: Cart Lv. 1 4096: Wedding\n" -"06: Petrify 16: Blind 16: Falcon 8192: Ruwach\n" -"07: Burning 32: Angelus 32: Riding 16384: Chasewalk\n" -"08: Imprison 64: Bleeding 64: Invisible\n" -"16: (Nothing) 128: D. Poison 128: Cart Lv. 2\n" -"32: (Nothing) 256: Fear 256: Cart Lv. 3" -heal: "Params: [ ]\n" "Heals the desired amount of HP and SP. No value specified will do a full heal." -dye: "Params: \n" "Changes your characters clothes color." -hairstyle: "Params: \n" "Changes your hair style." -haircolor: "Params \n" "Changes your hair color." -speed: "Params: <1-1000>\n" "Changes you walking speed. 1 being the fastest and 1000 the slowest. Default is 150." -effect: "Params: []\n" "Give an effect to your character." -dropall: "Throws all your possession on the ground." -storeall: "Puts all your possessions in storage." -killable: "Make your character killable." -memo: "Params: [memo position]\n" "Set/change a memo location (no position: display memo points)." -spiritball: "Params: <1-100>\n" "Gives you \"spirit spheres\" like from the skill \"Call Spirits\".\n" -questskill: "Params: <#>\n" "Gives you the specified quest skill\n" -"Novice = 142: First Aid, 143: Act Dead\n" -"Archer = 147: Create Arrow, 148: Charge Arrow\n" -"Swordman = 144: Moving HP Recovery, 145: Attack Weak Point, 146: Auto Berserk\n" -"Acolyte = 156: Holy Light\n" -"Thief = 149: Throw Sand, 150: Back Sliding, 151: Take Stone, 152: Throw Stone\n" -"Merchant = 153: Cart Revolution, 154: Change Cart, 155: Crazy Uproar, 2535: Open Buying Store\n" -"Magician = 157: Energy Coat\n" -"Hunter = 1009: Phantasmic Arrow\n" -"Bard = 1010: Pang Voice\n" -"Dancer = 1011: Wink of Charm\n" -"Knight = 1001: Charge Attack\n" -"Crusader = 1002: Shrink\n" -"Priest = 1014: Redemptio\n" -"Monk = 1015: Ki Translation, 1016: Ki Explosio\n" -"Assassin = 1003: Sonic Acceleration, 1004: Throw Venom Knife\n" -"Rogue = 1005: Close Confine\n" -"Blacksmith = 1012: Unfair Trick, 1013: Greed\n" -"Alchemist = 238: Basis of Life\n" -"Wizard = 1006: Sight Blaster\n" -"Sage = 1007: Create Elemental Converter, 1008: Elemental Change (Water), 1017: Elemental Change (Earth), 1018: Elemental Change (Fire), 1019: Elemental Change (Wind)" -lostskill: "Params: <#>\n" "Takes away the specified quest skill from you\n" -"Novice = 142: First Aid, 143: Act Dead\n" -"Archer = 147: Create Arrow, 148: Charge Arrow\n" -"Swordman = 144: Moving HP Recovery, 145: Attack Weak Point, 146: Auto Berserk\n" -"Acolyte = 156: Holy Light\n" -"Thief = 149: Throw Sand, 150: Back Sliding, 151: Take Stone, 152: Throw Stone\n" -"Merchant = 153: Cart Revolution, 154: Change Cart, 155: Crazy Uproar, 2535: Open Buying Store\n" -"Magician = 157: Energy Coat\n" -"Hunter = 1009: Phantasmic Arrow\n" -"Bard = 1010: Pang Voice\n" -"Dancer = 1011: Wink of Charm\n" -"Knight = 1001: Charge Attack\n" -"Crusader = 1002: Shrink\n" -"Priest = 1014: Redemptio\n" -"Monk = 1015: Ki Translation, 1016: Ki Explosio\n" -"Assassin = 1003: Sonic Acceleration, 1004: Throw Venom Knife\n" -"Rogue = 1005: Close Confine\n" -"Blacksmith = 1012: Unfair Trick, 1013: Greed\n" -"Alchemist = 238: Basis of Life\n" -"Wizard = 1006: Sight Blaster\n" -"Sage = 1007: Create Elemental Converter, 1008: Elemental Change (Water), 1017: Elemental Change (Earth), 1018: Elemental Change (Fire), 1019: Elemental Change (Wind)" -skillid: "Params: \n" "Look up a skill by name" -useskill: "Params: \n" "Use a skill on target" -skilltree: "Params: \n" "Prints the skill tree needed to get a skill for the target player." -marry: "Params: \n" "Marry another player." -divorce: "Divorce player." -alive: "Revives yourself from death." -blvl: "Params: \n" "Raises your base level the desired number of levels." -jlvl: "Params: \n" "Raises your job level the desired number of levels." -allskill: "Give you all skills." -stpoint: "Params: - Gives you the desired number of stat points." -skpoint: "Params: - Gives you the desired number of skill points." -zeny: "Params: - Gives you desired amount of Zeny." -cash: "Params: - Gives you the specified amount of cash points." -points: "Params: - Gives you the specified amount of Kafra Points." -str: "Params: \n" "Raises STR by given amount." -agi: "Params: \n" "Raises AGI by given amount." -dex: "Params: \n" "Raises DEX by given amount." -vit: "Params: \n" "Raises VIT by given amount." -int: "Params: \n" "Raises INT by given amount." -luk: "Params: \n" "Raises LUK by given amount." -allstats: "Params: \n" "Adds value in all stats (maximum if no value)." -addwarp: "Params: \n" -killmonster2: "Kills all monsters of your map (without drops)." -monster: "Params: [ [ [ []]]]\n" - "@monster2 [ [ []]]\n" -"@spawn/@monster/@summon/@monster2 \"desired monster name\" [ [ []]]\n" -"@spawn/@monster/@summon/@monster2 \"desired monster name\" [ [ []]]\n" -" Spawns the desired monster with any desired name." -monstersmall: "Params: \n" "Spawns a smaller version of a monster." -monsterbig: "Params: \n" "Spawns a larger version of a monster." -killmonster: "Params: \n" "Kill all monsters of the map (they drop)" -autoloot: "Params: \n" "Makes items go straight into your inventory." -autotrade: "Allows you to vend while you are offline." -changegm: "Params: \n" "Changes the leader of your guild (You must be guild leader)" -changeleader: "Params: \n" "Changes the leader of your party (You must be party leader)" -request: "Params: \n" "Sends a message to all connected GMs (via the gm whisper system)" -sound: "Params: \n" "Plays a sound from the data folder or GRF file located on the client." -clone: "Params: \n" "Spawns a supportive clone of the given player." -slaveclone: "Params: \n" "Spawns a supportive clone of the given player that follows the creator around." -evilclone: "Params: \n" "Spawns an aggressive clone of the given player." -changesex: "Changes your gender." -duel: "Starts a duel." -invite: "Invites a player to a duel." -accept: "Accepts an invitation to a duel." -reject: "Rejects an invitation to a duel." -leave: "Leaves a duel." -mail: "Open mail box." -storage: "Opens storage." -itemreset: "Remove all your items." -guildstorage: "Opens guild storage." -idsearch: "Params: \n" "Search all items that name have part_of_item_name" -refine: "Params: <+/- amount>" -produce: "Params: <# of very's>\n" -" Element: 0=None 1=Ice 2=Earth 3=Fire 4=Wind\n" -" You can add up to 3 Star Crumbs and 1 element\n" -repairall: "Repair all items of your inventory" -item: "Params: \n" "Gives you the desired item." -item2: "Params: \n" "Gives you the desired item." -pvpon: "Turns pvp on on the current map" -pvpoff: "Turns pvp off on the current map" -gvgon: "Turns gvg on on the current map" -gvgoff: "Turns gvg off on the current map" -agitstart: "Starts War of Emperium" -agitend: "End War of Emperium" -party: "Params: \n" "Create a party." -guild: "Params: \n" "Create a guild." -glvl: "Params: <# of levels>\n" "Raise Guild by desired number of levels" -guildrecall: "Params: \n" "Warps all online characters of a guild to you." -partyrecall: "Params: \n" "Warps all online characters of a party to you." -petrename: "Re-enable pet rename" -pettalk: "Params: \n" "Makes your pet say a message." -petfriendly: "Params: <#>\n" "Set pet friendly amount (0-1000) 1000 = Max" -pethungry: "Params: <#>\n" "Set pet hungry amount (0-100) 100 = Max" -hatch: "Create a pet from your inventory eggs list." -makeegg: "Params: \n" "Gives pet egg for monster number in pet DB" -kick: "Params: \n" "Kicks specified character off the server" -unjail: "Params: \n" "Discharges specified character/prisoner" -kill: "Params: \n" "Kills player." -recall: "Params: \n" "Warps target character to you." -raise: "Params: \n" "Revives target character." -block: "Params: \n" "Permanently blocks an account." -unblock: "Params: \n" "Unblocks an account." -ban: "Params: