diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 711dc4e31d..0cd78a5e6c 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -3567,24 +3567,35 @@ warg and 0 if they don't. --------------------------------------- *checkvending({""}) -*checkchatting({""}) -Checks if the player is vending or in a chatroom. +Checks if the player is vending or has buyingstore. Name is optional, and defaults to the attached player if omitted. -Return values for 'checkvending' are - 0 = not vending +The returned values are bitmask of. + 0 = not vending, doesn't have buyingstore, & not autotrading 1 = normal vending - 2 = vending using @autotrade - -'checkchatting' returns 1 if they are in a chat room, 0 if they are not. + 2 = using @autotrade + 4 = has buyingstore Examples: - //This will check if Aaron is vending, and if so, put a message in front - //of the attached player saying Aaron is vending. - if (checkvending("Aaron")) + //This will check if Aaron's state + .@state = checkvending("Aaron"); + if (.@state&1) mes "Aaron is currently vending!"; + if (.@state&2) + mes "Aaron is autotrading!"; + if (.@state&4) + mes "Aaron has buying store!"; +--------------------------------------- + +*checkchatting({""}) + +Checks if the player is in a chatroom. +Name is optional, and defaults to the attached player if omitted. +Returns 1 if they are in a chat room, 0 if they are not. + +Examples: //This will check if the attached player in a chat room or not. if (checkchatting()) mes "You are currently in a chat room!"; diff --git a/src/map/script.c b/src/map/script.c index 47db438afc..265c4d1c68 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -15929,19 +15929,37 @@ BUILDIN_FUNC(getmonsterinfo) return SCRIPT_CMD_SUCCESS; } -BUILDIN_FUNC(checkvending) // check vending [Nab4] -{ +/** + * Check player's vending/buyingstore/autotrade state + * checkvending({""}) + * @author [Nab4] + */ +BUILDIN_FUNC(checkvending) { TBL_PC *sd = NULL; - if(script_hasdata(st,2)) - sd = map_nick2sd(script_getstr(st,2)); + if (script_hasdata(st,2)) { + if (!(sd = map_nick2sd(script_getstr(st,2)))) { + ShowError("buildin_checkvending: Player '%s' is not online!\n", script_getstr(st,2)); + return SCRIPT_CMD_FAILURE; + } + } else sd = script_rid2sd(st); - if(sd) - script_pushint(st, sd->state.autotrade ? 2 : sd->state.vending); - else + if (!sd) { script_pushint(st,0); + return SCRIPT_CMD_SUCCESS; + } + else { + int8 ret = 0; + if (sd->state.vending) + ret |= 1; + if (sd->state.autotrade) + ret |= 2; + if (sd->state.buyingstore) + ret |= 4; + script_pushint(st, ret); + } return SCRIPT_CMD_SUCCESS; }