summaryrefslogtreecommitdiff
path: root/src/emap/script_buildins.c
diff options
context:
space:
mode:
authorgumi <git@gumi.ca>2020-07-24 15:11:14 -0400
committergumi <git@gumi.ca>2020-07-24 15:11:14 -0400
commit6d131f828e155ab0ed56d582cee1130291ab4a60 (patch)
tree352caf80e7f61a2859583716764aa135dec65343 /src/emap/script_buildins.c
parent4cf52a75e983abd5bda18da87fe1498e382fef23 (diff)
downloadplugin-6d131f828e155ab0ed56d582cee1130291ab4a60.tar.gz
plugin-6d131f828e155ab0ed56d582cee1130291ab4a60.tar.bz2
plugin-6d131f828e155ab0ed56d582cee1130291ab4a60.tar.xz
plugin-6d131f828e155ab0ed56d582cee1130291ab4a60.zip
add a script command to kick players offline
Diffstat (limited to 'src/emap/script_buildins.c')
-rw-r--r--src/emap/script_buildins.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/emap/script_buildins.c b/src/emap/script_buildins.c
index 3e1a15a..86cf32f 100644
--- a/src/emap/script_buildins.c
+++ b/src/emap/script_buildins.c
@@ -2537,3 +2537,37 @@ BUILDIN(aggravate)
script_pushint(st, true);
return true;
}
+
+BUILDIN(kick)
+{
+ struct map_session_data *tsd = NULL;
+
+ if (script_isstringtype(st, 2)) {
+ tsd = map->nick2sd(script_getstr(st, 2), false);
+ } else {
+ tsd = map->id2sd(script_getnum(st, 2));
+ }
+
+ if (tsd == NULL) {
+ // silently fail
+ script_pushint(st, 0);
+ return true;
+ }
+
+ // clif_authfail_fd reason
+ // see https://github.com/ManaPlus/ManaPlus/blob/master/src/net/eathena/generalrecv.cpp#L48
+ int reason = 15; // default: 15 - disconnection forced by a GM
+
+ if (script_hasdata(st, 3)) {
+ reason = script_getnum(st, 3);
+ }
+
+ if (tsd->fd > 0) {
+ clif->authfail_fd(tsd->fd, reason);
+ } else {
+ map->quit(tsd);
+ }
+
+ script_pushint(st, 1);
+ return true;
+}