summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/map/script.conf5
-rw-r--r--src/map/npc.c4
-rw-r--r--src/map/script.c2
-rw-r--r--src/map/script.h1
4 files changed, 11 insertions, 1 deletions
diff --git a/conf/map/script.conf b/conf/map/script.conf
index cda25d546..4eb84edf4 100644
--- a/conf/map/script.conf
+++ b/conf/map/script.conf
@@ -64,6 +64,11 @@ script_configuration: {
// "public" keyword should be treated as "private" by default.
// Default: true
functions_private_by_default: true
+
+ // Specifies whether public functions can be invoked as NPC events. This
+ // allows, for example, to use a `public function OnDeath { ... }` instead
+ // of a `OnDeath:` label for mob death events.
+ functions_as_events: false
}
import: "conf/import/script.conf"
diff --git a/src/map/npc.c b/src/map/npc.c
index 570305ba1..2f03623e4 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -390,7 +390,9 @@ static int npc_event_export(struct npc_data *nd, int i)
lname = nd->u.scr.label_list[i].name;
pos = nd->u.scr.label_list[i].pos;
- if ((nd->u.scr.label_list[i].flags & LABEL_IS_EXTERN) != 0 && (nd->u.scr.label_list[i].flags & LABEL_IS_USERFUNC) == 0) {
+ if ((nd->u.scr.label_list[i].flags & LABEL_IS_EXTERN) != 0
+ && ((nd->u.scr.label_list[i].flags & LABEL_IS_USERFUNC) == 0
+ || script->config.functions_as_events)) {
struct event_data *ev;
struct linkdb_node **label_linkdb = NULL;
char buf[EVENT_NAME_LENGTH];
diff --git a/src/map/script.c b/src/map/script.c
index 6f21f2a82..bf9348645 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -4973,6 +4973,7 @@ static bool script_config_read(const char *filename, bool imported)
libconfig->setting_lookup_bool_real(setting, "warn_func_mismatch_paramnum", &script->config.warn_func_mismatch_paramnum);
libconfig->setting_lookup_bool_real(setting, "warn_func_mismatch_argtypes", &script->config.warn_func_mismatch_argtypes);
libconfig->setting_lookup_bool_real(setting, "functions_private_by_default", &script->config.functions_private_by_default);
+ libconfig->setting_lookup_bool_real(setting, "functions_as_events", &script->config.functions_as_events);
libconfig->setting_lookup_int(setting, "check_cmdcount", &script->config.check_cmdcount);
libconfig->setting_lookup_int(setting, "check_gotocount", &script->config.check_gotocount);
libconfig->setting_lookup_int(setting, "input_min_value", &script->config.input_min_value);
@@ -28576,6 +28577,7 @@ void script_defaults(void)
script->config.ontouch2_name = "OnTouch"; //ontouch2_name (run whenever a char walks into the OnTouch area)
script->config.onuntouch_name = "OnUnTouch"; //onuntouch_name (run whenever a char walks from the OnTouch area)
script->config.functions_private_by_default = true;
+ script->config.functions_as_events = false;
// for ENABLE_CASE_CHECK
script->calc_hash_ci = calc_hash_ci;
diff --git a/src/map/script.h b/src/map/script.h
index 0a6a21f1b..5a031e9f5 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -585,6 +585,7 @@ struct Script_Config {
bool warn_func_mismatch_argtypes;
bool warn_func_mismatch_paramnum;
bool functions_private_by_default;
+ bool functions_as_events;
int check_cmdcount;
int check_gotocount;
int input_min_value;