summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xscript-checker19
-rw-r--r--script-checker.bat2
-rw-r--r--src/map/atcommand.c2
-rw-r--r--src/map/map.c59
-rw-r--r--src/map/map.h2
5 files changed, 57 insertions, 27 deletions
diff --git a/script-checker b/script-checker
index 521cf9025..f4a277e2d 100755
--- a/script-checker
+++ b/script-checker
@@ -14,12 +14,21 @@ if [ -z "$1" ]; then
echo "Usage: $0 <path to the script>"
echo " (you may use a relative or absolute path)"
exit -1
-elif [[ "$1" =~ ^\/ ]]; then
- FILE="$1"
-else
- FILE="${ORIG_CWD}/$1"
fi
if [ ! -x "$EXECUTABLE" ]; then
exit -1
fi
-"$EXECUTABLE" --script-check "${FILE}" 2>&1
+
+while [ -n "$1" ]; do
+ [ -n "$FILES" ] && FILES="${FILES}!"
+ if [[ "$1" =~ ^\/ ]]; then
+ FILES="${FILES}--load-script!$1"
+ else
+ FILES="${FILES}--load-script!${ORIG_CWD}/$1"
+ fi
+ shift
+done
+
+# We assume that filenames don't contain exclamation marks.
+IFS=!
+"$EXECUTABLE" --script-check $FILES 2>&1
diff --git a/script-checker.bat b/script-checker.bat
index e05eda64e..d81277971 100644
--- a/script-checker.bat
+++ b/script-checker.bat
@@ -24,6 +24,6 @@ ECHO.
:LOOP
SET /P SCRIPT="Enter path/to/your/script.txt: " %=%
- map-server.exe --script-check %SCRIPT%
+ map-server.exe --script-check --load-script %SCRIPT%
ECHO.
GOTO LOOP
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 50ec913c4..4c35999d6 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -3666,7 +3666,7 @@ ACMD(reloadscript) {
mapit->free(iter);
flush_fifos();
- map->reloadnpc(true); // reload config files seeking for npcs
+ map->reloadnpc(true, NULL, 0); // reload config files seeking for npcs
script->reload();
npc->reload();
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 ) {
diff --git a/src/map/map.h b/src/map/map.h
index 270931689..c1eaeb40d 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -992,7 +992,7 @@ struct map_interface {
struct mob_data * (*getmob_boss) (int16 m);
struct mob_data * (*id2boss) (int id);
// reload config file looking only for npcs
- void (*reloadnpc) (bool clear);
+ void (*reloadnpc) (bool clear, const char * const *extra_scripts, int extra_scripts_count);
int (*check_dir) (int s_dir,int t_dir);
uint8 (*calc_dir) (struct block_list *src,int16 x,int16 y);