From 1a410d241918f85010c59827dfd2fa3b1952d238 Mon Sep 17 00:00:00 2001 From: Kenpachi Developer Date: Sun, 9 Feb 2020 07:00:14 +0100 Subject: Add unitiswalking() script command --- doc/script_commands.txt | 31 +++++++++++++++++++++++++++++++ src/map/script.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 1d8ed786b..c1b318beb 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -6957,6 +6957,37 @@ Examples: --------------------------------------- +*unitiswalking({}) + +This command checks, if a unit is walking or not. +If is omitted, the currently attached character is used. +Returns 1 if the unit is walking, 0 if the unit is not walking and -1 on error. + +Note: There's no differentiation between script and client initiated walking. + +Example: + +prontera,155,185,5 script Check Walking 1_F_MARIA,{ + mes("Enter character name."); + mes(""); + input(.@name$); + .@GID = getcharid(CHAR_ID_ACCOUNT, .@name$); + if (.@GID != 0) { + .@iswalking = unitiswalking(.@GID); + if (.@iswalking == 1) + mesf("%s is walking.", .@name$); + else if (.@iswalking == 0) + mesf("%s is not walking.", .@name$); + else + mesf("Can't get %s's walking state.", .@name$); + } else { + mesf("%s not found!", .@name$); + } + close(); +} + +--------------------------------------- + *unitkill() *unitwarp(, , , ) *unitattack(, ) diff --git a/src/map/script.c b/src/map/script.c index 26bd678fe..755a099ec 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -21025,6 +21025,38 @@ static BUILDIN(unitwalk) return true; } +/** + * Checks if a unit is walking. + * + * Returns 1 if unit is walking, 0 if unit is not walking and -1 on error. + * + * @code{.herc} + * unitiswalking({}); + * @endcode + * + **/ +static BUILDIN(unitiswalking) +{ + int gid = script_hasdata(st, 2) ? script_getnum(st, 2) : st->rid; + struct block_list *bl = map->id2bl(gid); + + if (bl == NULL) { + ShowWarning("buildin_unitiswalking: Error in finding object for GID %d!\n", gid); + script_pushint(st, -1); + return false; + } + + if (unit->bl2ud(bl) == NULL) { + ShowWarning("buildin_unitiswalking: Error in finding unit_data for GID %d!\n", gid); + script_pushint(st, -1); + return false; + } + + script_pushint(st, unit->is_walking(bl)); + + return true; +} + /// Kills the unit /// /// unitkill ; @@ -26635,6 +26667,7 @@ static void script_parse_builtin(void) BUILDIN_DEF(getunittitle,"i"), BUILDIN_DEF(setunittitle,"is"), BUILDIN_DEF(unitwalk,"ii?"), + BUILDIN_DEF(unitiswalking, "?"), BUILDIN_DEF(unitkill,"i"), BUILDIN_DEF(unitwarp,"isii"), BUILDIN_DEF(unitattack,"iv?"), -- cgit v1.2.3-70-g09d2