Browse Source

Expand 'checkvending' script
* Added returned values for buying store.
* Made returned values as bitmask. &1 - Vending, &2 - Autotrading, &4 - Buyingstore

Signed-off-by: Cydh Ramdh <house.bad@gmail.com>

Cydh Ramdh 10 years ago
parent
commit
bbe733e236
2 changed files with 46 additions and 17 deletions
  1. 21 10
      doc/script_commands.txt
  2. 25 7
      src/map/script.c

+ 21 - 10
doc/script_commands.txt

@@ -3567,24 +3567,35 @@ warg and 0 if they don't.
 ---------------------------------------
 ---------------------------------------
 
 
 *checkvending({"<Player Name>"})
 *checkvending({"<Player Name>"})
-*checkchatting({"<Player Name>"})
 
 
-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.
 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
   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:
 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!";
 		mes "Aaron is currently vending!";
+	if (.@state&2)
+		mes "Aaron is autotrading!";
+	if (.@state&4)
+		mes "Aaron has buying store!";
 
 
+---------------------------------------
+
+*checkchatting({"<Player Name>"})
+
+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.
 	//This will check if the attached player in a chat room or not.
 	if (checkchatting())
 	if (checkchatting())
 		mes "You are currently in a chat room!";
 		mes "You are currently in a chat room!";

+ 25 - 7
src/map/script.c

@@ -15929,19 +15929,37 @@ BUILDIN_FUNC(getmonsterinfo)
 	return SCRIPT_CMD_SUCCESS;
 	return SCRIPT_CMD_SUCCESS;
 }
 }
 
 
-BUILDIN_FUNC(checkvending) // check vending [Nab4]
-{
+/**
+ * Check player's vending/buyingstore/autotrade state
+ * checkvending({"<Player Name>"})
+ * @author [Nab4]
+ */
+BUILDIN_FUNC(checkvending) {
 	TBL_PC *sd = NULL;
 	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
 	else
 		sd = script_rid2sd(st);
 		sd = script_rid2sd(st);
 
 
-	if(sd)
-		script_pushint(st, sd->state.autotrade ? 2 : sd->state.vending);
-	else
+	if (!sd) {
 		script_pushint(st,0);
 		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;
 	return SCRIPT_CMD_SUCCESS;
 }
 }