summaryrefslogtreecommitdiff
path: root/src/map/script.c
diff options
context:
space:
mode:
authorHaru <haru@dotalux.com>2017-05-15 01:25:39 +0200
committerGitHub <noreply@github.com>2017-05-15 01:25:39 +0200
commitbe118c7fad6df29dc691452ef511ac12fea37a06 (patch)
tree36c9f9e7714ffea7d1b9d21b86ddc7ed61e955c0 /src/map/script.c
parentab333a87fb891793321b0e4467d8389c8f80be35 (diff)
parent8669002016bc60019a317124ae088a8053a0238b (diff)
downloadhercules-be118c7fad6df29dc691452ef511ac12fea37a06.tar.gz
hercules-be118c7fad6df29dc691452ef511ac12fea37a06.tar.bz2
hercules-be118c7fad6df29dc691452ef511ac12fea37a06.tar.xz
hercules-be118c7fad6df29dc691452ef511ac12fea37a06.zip
Merge pull request #1719 from mekolat/channel2
add channel handler events
Diffstat (limited to 'src/map/script.c')
-rw-r--r--src/map/script.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/map/script.c b/src/map/script.c
index b0922e3f8..599285e1e 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -22925,6 +22925,55 @@ BUILDIN(channelmes)
return true;
}
+BUILDIN(addchannelhandler)
+{
+ int i;
+ const char *channelname = script_getstr(st, 2);
+ const char *eventname = script_getstr(st, 3);
+ struct channel_data *chan = channel->search(channelname, NULL);
+
+ if (!chan) {
+ script_pushint(st, 0);
+ return true;
+ }
+
+ ARR_FIND(0, MAX_EVENTQUEUE, i, chan->handlers[i][0] == '\0');
+
+ if (i < MAX_EVENTQUEUE) {
+ safestrncpy(chan->handlers[i], eventname, EVENT_NAME_LENGTH); //Event enqueued.
+ script_pushint(st, 1);
+ return true;
+ }
+
+ ShowWarning("script:addchannelhandler: too many handlers for channel %s.\n", channelname);
+ script_pushint(st, 0);
+ return true;
+}
+
+BUILDIN(removechannelhandler)
+{
+ int i;
+ const char *channelname = script_getstr(st, 2);
+ const char *eventname = script_getstr(st, 3);
+ struct channel_data *chan = channel->search(channelname, NULL);
+
+ if (!chan) {
+ script_pushint(st, 0);
+ return true;
+ }
+
+ for (i = 0; i < MAX_EVENTQUEUE; i++) {
+ if (strcmp(chan->handlers[i], eventname) == 0) {
+ chan->handlers[i][0] = '\0';
+ script_pushint(st, 1);
+ return true;
+ }
+ }
+
+ script_pushint(st, 0);
+ return true;
+}
+
/** By Cydh
Display script message
showscript "<message>"{,<GID>};
@@ -23721,6 +23770,8 @@ void script_parse_builtin(void) {
BUILDIN_DEF(navigateto, "s??????"),
BUILDIN_DEF(channelmes, "ss"),
+ BUILDIN_DEF(addchannelhandler, "ss"),
+ BUILDIN_DEF(removechannelhandler, "ss"),
BUILDIN_DEF(showscript, "s?"),
BUILDIN_DEF(mergeitem,""),
BUILDIN_DEF(_,"s"),