diff options
author | Haru <haru@dotalux.com> | 2017-05-15 01:25:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-15 01:25:39 +0200 |
commit | be118c7fad6df29dc691452ef511ac12fea37a06 (patch) | |
tree | 36c9f9e7714ffea7d1b9d21b86ddc7ed61e955c0 /src/map/script.c | |
parent | ab333a87fb891793321b0e4467d8389c8f80be35 (diff) | |
parent | 8669002016bc60019a317124ae088a8053a0238b (diff) | |
download | hercules-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.c | 51 |
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"), |