Browse Source

- Fixed nocommand mapflag causing the "you can't use commands on this map" message to trigger one very single chat, instead of only for actual @/# command invocation.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8817 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 18 years ago
parent
commit
7c23227861
3 changed files with 25 additions and 18 deletions
  1. 3 0
      Changelog-Trunk.txt
  2. 11 8
      src/map/atcommand.c
  3. 11 10
      src/map/charcommand.c

+ 3 - 0
Changelog-Trunk.txt

@@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/09/19
+	* Fixed nocommand mapflag causing the "you can't use commands on this map"
+	  message to trigger one very single chat, instead of only for actual @/#
+	  command invocation. [Skotlex]
 	* Added support for skipping empty string menu entries for the select()
 	  command (just as `menu` has it already) [Skotlex]
 	* Fixed pc_set_hate_mob letting you place mobs on any of the three

+ 11 - 8
src/map/atcommand.c

@@ -807,17 +807,20 @@ is_atcommand(const int fd, struct map_session_data* sd, const char* message, int
 	if (!*str)
 		return AtCommand_None;
 
-	if (map[sd->bl.m].nocommand &&
-		(gmlvl > 0? gmlvl:pc_isGM(sd)) < map[sd->bl.m].nocommand)
-	{	//Command not allowed on this map.
-		sprintf(atcmd_output, msg_txt(143)); 
-		clif_displaymessage(fd, atcmd_output);
-		return AtCommand_None;
-	}	
-	type = atcommand(sd, gmlvl > 0 ? gmlvl : pc_isGM(sd), str, &info);
+	if (!gmlvl) gmlvl = pc_isGM(sd);
+	type = atcommand(sd,  gmlvl, str, &info);
 	if (type != AtCommand_None) {
 		char command[100];
 		const char* p = str;
+
+		if (map[sd->bl.m].nocommand &&
+			gmlvl < map[sd->bl.m].nocommand)
+		{	//Command not allowed on this map.
+			sprintf(atcmd_output, msg_txt(143)); 
+			clif_displaymessage(fd, atcmd_output);
+			return AtCommand_None;
+		}
+
 		malloc_tsetdword(command, '\0', sizeof(command));
 		malloc_tsetdword(atcmd_output, '\0', sizeof(atcmd_output));
 		while (*p && !isspace(*p))

+ 11 - 10
src/map/charcommand.c

@@ -148,20 +148,21 @@ is_charcommand(const int fd, struct map_session_data* sd, const char* message, i
 	if (!*str)
 		return CharCommand_None;
 
-	if (map[sd->bl.m].nocommand &&
-		(gmlvl > 0? gmlvl:pc_isGM(sd)) < map[sd->bl.m].nocommand)
-	{	//Command not allowed on this map.
-		char output[200];
-		sprintf(output, msg_table[143]); 
-		clif_displaymessage(fd, output);
-		return AtCommand_None;
-	}	
-
-	type = charcommand(sd, gmlvl > 0 ? gmlvl : pc_isGM(sd), str, &info);
+	if (!gmlvl) gmlvl = pc_isGM(sd);
+	type = charcommand(sd, gmlvl, str, &info);
 	if (type != CharCommand_None) {
 		char command[100];
 		char output[200];
 		const char* p = str;
+
+		if (map[sd->bl.m].nocommand &&
+			gmlvl < map[sd->bl.m].nocommand)
+		{	//Command not allowed on this map.
+			sprintf(output, msg_txt(143)); 
+			clif_displaymessage(fd, output);
+			return AtCommand_None;
+		}
+
 		malloc_tsetdword(command, '\0', sizeof(command));
 		malloc_tsetdword(output, '\0', sizeof(output));
 		while (*p && !isspace(*p))