diff options
author | Emistry <Equinox1991@gmail.com> | 2015-12-26 17:05:38 +0800 |
---|---|---|
committer | Emistry <Equinox1991@gmail.com> | 2015-12-26 17:05:38 +0800 |
commit | dabadbcff26890dc153ddc1602d0b1bf19009997 (patch) | |
tree | 897c0f790d406372de32145dcd4f2c1d12afd7b7 | |
parent | 44832129713a048f27ad4ae464fb88fe5beecfe0 (diff) | |
download | hercules-dabadbcff26890dc153ddc1602d0b1bf19009997.tar.gz hercules-dabadbcff26890dc153ddc1602d0b1bf19009997.tar.bz2 hercules-dabadbcff26890dc153ddc1602d0b1bf19009997.tar.xz hercules-dabadbcff26890dc153ddc1602d0b1bf19009997.zip |
Add *setgroupid script commands.
Useful for scripts that temporary adjust the group id of players.
-rw-r--r-- | doc/script_commands.txt | 8 | ||||
-rw-r--r-- | src/map/script.c | 25 |
2 files changed, 33 insertions, 0 deletions
diff --git a/doc/script_commands.txt b/doc/script_commands.txt index c08596f9a..c6ee8fc76 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -3167,6 +3167,14 @@ behave specially when talked to by GMs. --------------------------------------- +*setgroupid(<new group id>{,"<character name>"|<account id>}) + +This function will temporary adjust the id of player group the account to which the +player specified if the new group id is available. +Return 1 if success, otherwise it will return 0. + +--------------------------------------- + *getgroupid() This function will return the id of player group the account to which the diff --git a/src/map/script.c b/src/map/script.c index af790ccf5..b29794ec3 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -9068,6 +9068,30 @@ BUILDIN(getgmlevel) return true; } +/// set the group ID of the player. +/// setgroupid(<new group id>{,"<character name>"|<account id>}) +/// return 1 on success, 0 if failed. +BUILDIN(setgroupid) { + struct map_session_data* sd = NULL; + int new_group = script_getnum(st, 2); + + if (script_hasdata(st, 3)) { + if (script_isstringtype(st, 3)) + sd = script->nick2sd(st, script_getstr(st, 3)); + else + sd = script->id2sd(st, script_getnum(st, 3)); + } + else + sd = script->rid2sd(st); + + if (sd == NULL) + return true; // no player attached, report source + + script_pushint(st, !pc->set_group(sd, new_group)); + + return true; +} + /// Returns the group ID of the player. /// /// getgroupid() -> <int> @@ -20254,6 +20278,7 @@ void script_parse_builtin(void) { BUILDIN_DEF(getgdskilllv,"iv"), BUILDIN_DEF(basicskillcheck,""), BUILDIN_DEF(getgmlevel,""), + BUILDIN_DEF(setgroupid, "i?"), BUILDIN_DEF(getgroupid,""), BUILDIN_DEF(end,""), BUILDIN_DEF(checkoption,"i"), |