Forráskód Böngészése

Another follow up 5f21afb2555d73bba219fd9fdb1d117c0e1950b1

Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
Cydh Ramdh 10 éve
szülő
commit
d7964edbda
1 módosított fájl, 96 hozzáadás és 54 törlés
  1. 96 54
      src/map/script.c

+ 96 - 54
src/map/script.c

@@ -173,43 +173,35 @@ enum { LABEL_NEXTLINE=1,LABEL_START };
 TBL_PC *script_rid2sd(struct script_state *st);
 
 /**
- * Get `sd` from an account id in `loc` param instead of attached rid
+ * Get `sd` from a account id in `loc` param instead of attached rid
+ * @param st Script
  * @param loc Location to look account id in script parameter
  * @param sd Variable that will be assigned
- * @param ret Optional action when fail to get sd
  **/
-#define script_accid2sd(loc, sd, ret) {\
-	if (script_hasdata(st, (loc))) {\
-		if (!((sd) = map_id2sd(script_getnum(st, loc)))) {\
-			ShowError("%s: Player with account id %d is not found.\n", __FUNCTION__, script_getnum(st, (loc)));\
-			(ret);\
-			return SCRIPT_CMD_FAILURE;\
-		}\
-	}\
-	else if (!((sd) = script_rid2sd(st))) {\
-		(ret);\
-		return SCRIPT_CMD_FAILURE;\
-	}\
+static void script_accid2sd_(struct script_state *st, uint8 loc, struct map_session_data **sd, const char *func) {
+	if (script_hasdata(st, loc)) {
+		int id_ = script_getnum(st, loc);
+		if (!(*sd = map_id2sd(id_)))
+			ShowError("%s: Player with account id '%s' is not found.\n", func, id_);
+	}
+	else
+		*sd = script_rid2sd(st);
 }
 
 /**
  * Get `sd` from a char id in `loc` param instead of attached rid
+ * @param st Script
  * @param loc Location to look char id in script parameter
  * @param sd Variable that will be assigned
- * @param ret Optional action when fail to get sd
  **/
-#define script_charid2sd(loc, sd, ret) {\
-	if (script_hasdata(st, (loc))) {\
-		if (!((sd) = map_charid2sd(script_getnum(st, loc)))) {\
-			ShowError("%s: Player with char id %d is not found.\n", __FUNCTION__, script_getnum(st, (loc)));\
-			(ret);\
-			return SCRIPT_CMD_FAILURE;\
-		}\
-	}\
-	else if (!((sd) = script_rid2sd(st))) {\
-		(ret);\
-		return SCRIPT_CMD_FAILURE;\
-	}\
+static void script_charid2sd_(struct script_state *st, uint8 loc, struct map_session_data **sd, const char *func) {
+	if (script_hasdata(st, loc)) {
+		int id_ = script_getnum(st, loc);
+		if (!(*sd = map_charid2sd(id_)))
+			ShowError("%s: Player with char id '%d' is not found.\n", func, id_);
+	}
+	else
+		*sd = script_rid2sd(st);
 }
 
 /**
@@ -217,17 +209,19 @@ TBL_PC *script_rid2sd(struct script_state *st);
  * @param st Script
  * @param loc Location to look nick in script parameter
  * @param sd Variable that will be assigned
- * @param ret Optional action when fail to get sd
  **/
-static void script_nick2sd_(struct script_state *st, uint8 loc, struct map_session_data **sd, const char *func) {
+static bool script_nick2sd_(struct script_state *st, uint8 loc, struct map_session_data **sd, const char *func) {
 	if (script_hasdata(st, loc)) {
-		if (!(*sd = map_nick2sd(script_getstr(st, loc))))
-			ShowError("%s: Player with nick %s is not found.\n", func, script_getstr(st, loc));
+		const char *name_ = script_getstr(st, loc);
+		if (!(*sd = map_nick2sd(name_)))
+			ShowError("%s: Player with nick '%s' is not found.\n", func, name_);
 	}
 	else
 		*sd = script_rid2sd(st);
 }
 
+#define script_accid2sd(loc,sd) script_accid2sd_(st,(loc),&(sd),__FUNCTION__)
+#define script_charid2sd(loc,sd) script_charid2sd_(st,(loc),&(sd),__FUNCTION__)
 #define script_nick2sd(loc,sd) script_nick2sd_(st,(loc),&(sd),__FUNCTION__)
 
 /// temporary buffer for passing around compiled bytecode
@@ -5743,7 +5737,9 @@ BUILDIN_FUNC(set)
 	prefix = *name;
 
 	if (not_server_variable(prefix)) {
-		script_charid2sd(4,sd,NULL);
+		script_charid2sd(4,sd);
+		if (!sd)
+			return SCRIPT_CMD_FAILURE;
 	}
 
 #if 0
@@ -6750,7 +6746,9 @@ BUILDIN_FUNC(rentitem) {
 	data = script_getdata(st,2);
 	get_val(st,data);
 
-	script_accid2sd(4,sd,NULL);
+	script_accid2sd(4,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	if( data_isstring(data) )
 	{
@@ -6810,7 +6808,9 @@ BUILDIN_FUNC(rentitem2) {
 	data = script_getdata(st,2);
 	get_val(st,data);
 
-	script_accid2sd(11,sd,NULL);
+	script_accid2sd(11,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	if( data_isstring(data) ) {
 		const char *name = conv_str(st,data);
@@ -7725,7 +7725,11 @@ BUILDIN_FUNC(strcharinfo)
 	struct guild* g;
 	struct party_data* p;
 
-	script_charid2sd(3,sd,script_pushconststr(st,""));
+	script_charid2sd(3,sd);
+	if (!sd) {
+		script_pushconststr(st,"");
+		return SCRIPT_CMD_FAILURE;
+	}
 
 	num=script_getnum(st,2);
 	switch(num){
@@ -7992,7 +7996,9 @@ BUILDIN_FUNC(repair)
 	int repaircounter=0;
 	TBL_PC *sd;
 
-	script_charid2sd(3,sd,NULL);
+	script_charid2sd(3,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	num=script_getnum(st,2);
 	for(i=0; i<MAX_INVENTORY; i++) {
@@ -8019,7 +8025,9 @@ BUILDIN_FUNC(repairall)
 	int i, repaircounter = 0;
 	TBL_PC *sd;
 
-	script_charid2sd(2,sd,NULL);
+	script_charid2sd(2,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	for(i = 0; i < MAX_INVENTORY; i++)
 	{
@@ -8051,7 +8059,9 @@ BUILDIN_FUNC(getequipisequiped)
 
 	num = script_getnum(st,2);
 
-	script_charid2sd(3,sd,NULL);
+	script_charid2sd(3,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	if (num > 0 && num <= ARRAYLENGTH(equip))
 		i=pc_checkequip(sd,equip[num-1]);
@@ -8321,7 +8331,9 @@ BUILDIN_FUNC(delequip) {
 	TBL_PC *sd;
 
 	pos = script_getnum(st,2);
-	script_charid2sd(3,sd,NULL);
+	script_charid2sd(3,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	if (pos > 0 && pos <= ARRAYLENGTH(equip))
 		i = pc_checkequip(sd,equip[pos-1]);
@@ -8348,7 +8360,9 @@ BUILDIN_FUNC(breakequip) {
 	TBL_PC *sd;
 
 	pos = script_getnum(st,2);
-	script_charid2sd(3,sd,NULL);
+	script_charid2sd(3,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	if (pos > 0 && pos <= ARRAYLENGTH(equip))
 		i = pc_checkequip(sd,equip[pos-1]);
@@ -9338,7 +9352,9 @@ BUILDIN_FUNC(getexp)
 	int base=0,job=0;
 	double bonus;
 
-	script_charid2sd(4,sd,NULL);
+	script_charid2sd(4,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	base=script_getnum(st,2);
 	job =script_getnum(st,3);
@@ -12853,7 +12869,9 @@ BUILDIN_FUNC(clearitem)
 	TBL_PC *sd;
 	int i;
 
-	script_charid2sd(2,sd,NULL);
+	script_charid2sd(2,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	for (i=0; i<MAX_INVENTORY; i++) {
 		if (sd->status.inventory[i].amount) {
@@ -14363,7 +14381,9 @@ BUILDIN_FUNC(unequip) {
 	int pos;
 	TBL_PC *sd;
 
-	script_charid2sd(3,sd,NULL);
+	script_charid2sd(3,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	pos = script_getnum(st,2);
 	if (pos >= 1 && pos <= ARRAYLENGTH(equip)) {
@@ -14384,7 +14404,9 @@ BUILDIN_FUNC(equip) {
 	TBL_PC *sd;
 	struct item_data *item_data;
 
-	script_charid2sd(3,sd,NULL);
+	script_charid2sd(3,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	nameid = script_getnum(st,2);
 	if ((item_data = itemdb_exists(nameid))) {
@@ -15439,7 +15461,9 @@ BUILDIN_FUNC(setd)
 
 	if( not_server_variable(*varname) )
 	{
-		script_charid2sd(4,sd,NULL);
+		script_charid2sd(4,sd);
+		if (!sd)
+			return SCRIPT_CMD_FAILURE;
 	}
 
 	if( is_string_variable(varname) ) {
@@ -16647,7 +16671,9 @@ BUILDIN_FUNC(openmail)
 {
 	TBL_PC* sd;
 
-	script_charid2sd(2,sd,NULL);
+	script_charid2sd(2,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	mail_openmail(sd);
 
@@ -16658,7 +16684,9 @@ BUILDIN_FUNC(openauction)
 {
 	TBL_PC* sd;
 
-	script_charid2sd(2,sd,NULL);
+	script_charid2sd(2,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	if( !battle_config.feature_auction ) {
 		clif_colormes(sd, color_table[COLOR_RED], msg_txt(sd, 517));
@@ -16969,7 +16997,9 @@ BUILDIN_FUNC(setquest)
 
 	quest_id = script_getnum(st, 2);
 
-	script_charid2sd(3,sd,NULL);
+	script_charid2sd(3,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	quest_add(sd, quest_id);
 
@@ -16991,7 +17021,9 @@ BUILDIN_FUNC(erasequest)
 {
 	struct map_session_data *sd;
 
-	script_charid2sd(3,sd,NULL);
+	script_charid2sd(3,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	quest_delete(sd, script_getnum(st, 2));
 	return SCRIPT_CMD_SUCCESS;
@@ -17001,7 +17033,9 @@ BUILDIN_FUNC(completequest)
 {
 	struct map_session_data *sd;
 
-	script_charid2sd(3,sd,NULL);
+	script_charid2sd(3,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	quest_update_status(sd, script_getnum(st, 2), Q_COMPLETE);
 	return SCRIPT_CMD_SUCCESS;
@@ -17011,7 +17045,9 @@ BUILDIN_FUNC(changequest)
 {
 	struct map_session_data *sd;
 	
-	script_charid2sd(4,sd,NULL);
+	script_charid2sd(4,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	quest_change(sd, script_getnum(st, 2),script_getnum(st, 3));
 	return SCRIPT_CMD_SUCCESS;
@@ -17025,7 +17061,9 @@ BUILDIN_FUNC(checkquest)
 	if( script_hasdata(st, 3) )
 		type = (enum quest_check_type)script_getnum(st, 3);
 
-	script_charid2sd(4,sd,NULL);
+	script_charid2sd(4,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	script_pushint(st, quest_check(sd, script_getnum(st, 2), type));
 
@@ -17037,7 +17075,9 @@ BUILDIN_FUNC(isbegin_quest)
 	struct map_session_data *sd;
 	int i;
 
-	script_charid2sd(3,sd,NULL);
+	script_charid2sd(3,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	i = quest_check(sd, script_getnum(st, 2), (enum quest_check_type) HAVEQUEST);
 	script_pushint(st, i + (i < 1));
@@ -17051,7 +17091,9 @@ BUILDIN_FUNC(showevent)
 	struct npc_data *nd = map_id2nd(st->oid);
 	int icon, color = 0;
 
-	script_charid2sd(4,sd,NULL);
+	script_charid2sd(4,sd);
+	if (!sd)
+		return SCRIPT_CMD_FAILURE;
 
 	if( sd == NULL || nd == NULL )
 		return 0;