浏览代码

Added close3 script command (#7439)

Thanks to @aleos89 @Lemongrass3110 @vstumpf !
Atemo 2 年之前
父节点
当前提交
526a3fa048
共有 5 个文件被更改,包括 18 次插入11 次删除
  1. 6 0
      doc/script_commands.txt
  2. 0 9
      npc/other/Global_Functions.txt
  3. 2 0
      src/map/npc.cpp
  4. 9 2
      src/map/script.cpp
  5. 1 0
      src/map/script.hpp

+ 6 - 0
doc/script_commands.txt

@@ -1229,6 +1229,12 @@ Don't expect things to run smoothly if you don't make your scripts 'end'.
 
 ---------------------------------------
 
+*close3;
+
+The command is similar to 'close' but the cutin (if any) is cleared after closing.
+
+---------------------------------------
+
 *end;
 
 This command will stop the execution for this particular script. The two

+ 0 - 9
npc/other/Global_Functions.txt

@@ -752,15 +752,6 @@ function	script	F_GetPlatinumSkills	{
 	return;
 }
 
-//////////////////////////////////////////////////////////////////////////////////
-// Shortcut : close button and clear cutin.
-//////////////////////////////////////////////////////////////////////////////////
-function	script	close3	{
-	close2;
-	cutin "",255;
-	end;
-}
-
 //////////////////////////////////////////////////////////////////////////////////
 // Return true if the card is a charm (enchant card), false otherwise.
 //////////////////////////////////////////////////////////////////////////////////

+ 2 - 0
src/map/npc.cpp

@@ -2286,6 +2286,8 @@ bool npc_scriptcont(struct map_session_data* sd, int id, bool closing){
 			// close
 			case CLOSE:
 				sd->st->state = END;
+				if (sd->st->clear_cutin)
+					clif_cutin(sd,"",255);
 				break;
 			// close2
 			case STOP:

+ 9 - 2
src/map/script.cpp

@@ -4977,20 +4977,26 @@ BUILDIN_FUNC(clear)
 /// close;
 BUILDIN_FUNC(close)
 {
-	TBL_PC* sd;
+	struct map_session_data* sd;
 
 	if( !script_rid2sd(sd) )
 		return SCRIPT_CMD_SUCCESS;
 
+	const char* command = script_getfuncname( st );
+
 	if( !st->mes_active ) {
 		st->state = END; // Keep backwards compatibility.
-		ShowWarning("Incorrect use of 'close' command!\n");
+		ShowWarning("buildin_close: Incorrect use of '%s' command!\n", command);
 		script_reportsrc(st);
 	} else {
 		st->state = CLOSE;
 		st->mes_active = 0;
 	}
 
+	if( !strcmp(command, "close3") ){
+		st->clear_cutin = true;
+	}
+
 	clif_scriptclose(sd, st->oid);
 	return SCRIPT_CMD_SUCCESS;
 }
@@ -26890,6 +26896,7 @@ struct script_function buildin_func[] = {
 	BUILDIN_DEF(clear,""),
 	BUILDIN_DEF(close,""),
 	BUILDIN_DEF(close2,""),
+	BUILDIN_DEF2(close, "close3", ""),
 	BUILDIN_DEF(menu,"sl*"),
 	BUILDIN_DEF(select,"s*"), //for future jA script compatibility
 	BUILDIN_DEF(prompt,"s*"),

+ 1 - 0
src/map/script.hpp

@@ -328,6 +328,7 @@ struct script_state {
 	unsigned op2ref : 1;// used by op_2
 	unsigned npc_item_flag : 1;
 	unsigned mes_active : 1;  // Store if invoking character has a NPC dialog box open.
+	unsigned clear_cutin : 1;
 	char* funcname; // Stores the current running function name
 	unsigned int id;
 };