summaryrefslogtreecommitdiff
path: root/src/map/map.c
diff options
context:
space:
mode:
authorHaru <haru@dotalux.com>2014-03-11 05:06:38 +0100
committerHaru <haru@dotalux.com>2014-03-16 23:21:08 +0100
commit0e58529609ae84540ca340193abf9ca1e8166b72 (patch)
tree28f11daa6e662267e5f1ecd5655cbc46c277c076 /src/map/map.c
parentab878900afdb9c9caa58b7f84f0a12b6283edf2b (diff)
downloadhercules-0e58529609ae84540ca340193abf9ca1e8166b72.tar.gz
hercules-0e58529609ae84540ca340193abf9ca1e8166b72.tar.bz2
hercules-0e58529609ae84540ca340193abf9ca1e8166b72.tar.xz
hercules-0e58529609ae84540ca340193abf9ca1e8166b72.zip
Added --load-script commandline argument
Signed-off-by: Haru <haru@dotalux.com>
Diffstat (limited to 'src/map/map.c')
-rw-r--r--src/map/map.c59
1 files changed, 40 insertions, 19 deletions
diff --git a/src/map/map.c b/src/map/map.c
index b2d50292e..9dbe19666 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -3559,8 +3559,8 @@ void map_reloadnpc_sub(char *cfgName)
fclose(fp);
}
-void map_reloadnpc(bool clear)
-{
+void map_reloadnpc(bool clear, const char * const *extra_scripts, int extra_scripts_count) {
+ int i;
if (clear)
npc->addsrcfile("clear"); // this will clear the current script list
@@ -3569,6 +3569,11 @@ void map_reloadnpc(bool clear)
#else
map->reloadnpc_sub("npc/pre-re/scripts_main.conf");
#endif
+
+ // Append extra scripts
+ for( i = 0; i < extra_scripts_count; i++ ) {
+ npc->addsrcfile(extra_scripts[i]);
+ }
}
int inter_config_read(char *cfgName) {
@@ -5355,7 +5360,9 @@ void map_helpscreen(bool do_exit)
ShowInfo(" --grf-path <file> Alternative GRF path configuration.\n");
ShowInfo(" --inter-config <file> Alternative inter-server configuration.\n");
ShowInfo(" --log-config <file> Alternative logging configuration.\n");
- ShowInfo(" --script-check <file> Tests a script for errors, without running the server.\n");
+ ShowInfo(" --script-check Doesn't run the server, only tests the\n");
+ ShowInfo(" scripts passed through --load-script.\n");
+ ShowInfo(" --load-script <file> Loads an additional script (can be repeated).\n");
ShowInfo(" --load-plugin <name> Loads an additional plugin (can be repeated).\n");
HPM->arg_help();/* display help for commands implemented thru HPM */
if( do_exit )
@@ -5566,9 +5573,9 @@ void map_load_defaults(void) {
int do_init(int argc, char *argv[])
{
bool minimal = false;
- char *scriptcheck = NULL;
- int i, extra_plugins_count = 0;
- const char **extra_plugins = NULL;
+ bool scriptcheck = false;
+ int i, load_extras_count = 0;
+ const char **load_extras = NULL;
#ifdef GCOLLECT
GC_enable_incremental();
@@ -5585,16 +5592,16 @@ int do_init(int argc, char *argv[])
const char* arg = argv[i];
if( strcmp(arg, "--load-plugin") == 0 ) {
if( map->arg_next_value(arg, i, argc, true) ) {
- RECREATE(extra_plugins, const char *, ++extra_plugins_count);
- extra_plugins[extra_plugins_count-1] = argv[++i];
+ RECREATE(load_extras, const char *, ++load_extras_count);
+ load_extras[load_extras_count-1] = argv[++i];
}
}
}
- HPM->config_read(extra_plugins, extra_plugins_count);
- if (extra_plugins) {
- aFree(extra_plugins);
- extra_plugins = NULL;
- extra_plugins_count = 0;
+ HPM->config_read(load_extras, load_extras_count);
+ if (load_extras) {
+ aFree(load_extras);
+ load_extras = NULL;
+ load_extras_count = 0;
}
HPM->event(HPET_PRE_INIT);
@@ -5643,11 +5650,15 @@ int do_init(int argc, char *argv[])
} else if( strcmp(arg, "script-check") == 0 ) {
map->minimal = true;
runflag = CORE_ST_STOP;
- if( map->arg_next_value(arg, i, argc, true) )
- scriptcheck = argv[++i];
+ scriptcheck = true;
} else if( strcmp(arg, "load-plugin") == 0 ) {
if( map->arg_next_value(arg, i, argc, true) )
i++;
+ } else if( strcmp(arg, "load-script") == 0 ) {
+ if( map->arg_next_value(arg, i, argc, true) ) {
+ RECREATE(load_extras, const char *, ++load_extras_count);
+ load_extras[load_extras_count-1] = argv[++i];
+ }
} else {
ShowError("Unknown option '%s'.\n", argv[i]);
exit(EXIT_FAILURE);
@@ -5675,7 +5686,7 @@ int do_init(int argc, char *argv[])
map->config_read_sub(map->MAP_CONF_NAME);
// loads npcs
- map->reloadnpc(false);
+ map->reloadnpc(false, load_extras, load_extras_count);
chrif->checkdefaultlogin();
@@ -5785,9 +5796,19 @@ int do_init(int argc, char *argv[])
vending->init(minimal);
if (scriptcheck) {
- if (npc->parsesrcfile(scriptcheck, false) == 0)
- exit(EXIT_SUCCESS);
- exit(EXIT_FAILURE);
+ bool failed = load_extras_count > 0 ? false : true;
+ for (i = 0; i < load_extras_count; i++) {
+ if (npc->parsesrcfile(load_extras[i], false) != 0)
+ failed = true;
+ }
+ if (failed)
+ exit(EXIT_FAILURE);
+ exit(EXIT_SUCCESS);
+ }
+ if (load_extras) {
+ aFree(load_extras);
+ load_extras = NULL;
+ load_extras_count = 0;
}
if( minimal ) {