Explorar el Código

mapwarp cleanup

Lemongrass3110 hace 8 años
padre
commit
7cd69f40e8
Se han modificado 4 ficheros con 56 adiciones y 27 borrados
  1. 14 12
      doc/script_commands.txt
  2. 29 15
      src/map/script.c
  3. 7 0
      src/map/script.h
  4. 6 0
      src/map/script_constants.h

+ 14 - 12
doc/script_commands.txt

@@ -6850,30 +6850,32 @@ Examples:
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*mapwarp "<from map>","<to map>",<x>,<y>{,<type>,<ID>};
+*mapwarp "<from map>","<to map>",{<x>,<y>,<type>,<ID>};
 
 
-This command will collect all characters located on the From map and warp them 
-wholesale to the same point on the To map, or randomly distribute them there if 
-the coordinates are zero. "Random" is understood as a special To map name and 
-will mean randomly shuffling everyone on the same map.
+This command will collect all characters located on the <from map> and warp them 
+wholesale to the same point on the <to map>, or randomly distribute them there if 
+the coordinates are zero or left out.
 
 
-Optionally, a type and ID can be specified. Available types are:
+Optionally, a <type> and <ID> can be specified. Available types are:
 
 
- 0 - Everyone
- 1 - Guild
- 2 - Party
- 3 - Clan
+ MAPWARP_ALL - Everyone
+ MAPWARP_GUILD - Guild
+ MAPWARP_PARTY - Party
+ MAPWARP_CLAN - Clan
 
 
 Example:
 Example:
 
 
 // Will warp all members of guild with ID 63 on map prontera to map alberta.
 // Will warp all members of guild with ID 63 on map prontera to map alberta.
-	mapwarp "prontera","alberta",150,150,1,63;
+	mapwarp "prontera","alberta",150,150,MAPWARP_GUILD,63;
 
 
-There are also three special 'map names' you can use for <to map>.
+There are also three special 'map names' you can use for <to map>:
 
 
 "Random" will warp the player randomly on the current map.
 "Random" will warp the player randomly on the current map.
 "Save" and "SavePoint" will warp the player back to their save point.
 "Save" and "SavePoint" will warp the player back to their save point.
 
 
+It is recommended that you do not supply any target coordinates if you use one of
+these maps, because they will be ignored anyway.
+
 ---------------------------------------
 ---------------------------------------
 \\
 \\
 5,2.- Guild-related commands
 5,2.- Guild-related commands

+ 29 - 15
src/map/script.c

@@ -13127,33 +13127,47 @@ BUILDIN_FUNC(failedremovecards) {
 
 
 /**
 /**
  * Warp a given map
  * Warp a given map
- * mapwarp "<from map>","<to map>",<x>,<y>{,<type>,<ID>};
+ * mapwarp "<from map>","<to map>",{<x>,<y>,<type>,<ID>};
  * @author [Reddozen], [RoVeRT]; improved by [Lance]
  * @author [Reddozen], [RoVeRT]; improved by [Lance]
  */
  */
 BUILDIN_FUNC(mapwarp)
 BUILDIN_FUNC(mapwarp)
 {
 {
-	int16 x, y, m, type = 0, i = 0;
-	int type_id = 0;
-	struct guild *g = NULL;
-	struct party_data *p = NULL;
-	struct clan *c = NULL;
+	int16 x, y, m, i;
+	int type, type_id;
+	struct guild *g;
+	struct party_data *p;
+	struct clan *c;
 	const char *str, *mapname;
 	const char *str, *mapname;
 
 
 	mapname = script_getstr(st, 2);
 	mapname = script_getstr(st, 2);
 	str = script_getstr(st, 3);
 	str = script_getstr(st, 3);
-	x = script_getnum(st, 4);
-	y = script_getnum(st, 5);
+	
+	if (script_hasdata(st, 5)){
+		x = script_getnum(st, 4);
+		y = script_getnum(st, 5);
+	}else{
+		x = 0;
+		y = 0;
+	}
 
 
 	if (script_hasdata(st, 7)){
 	if (script_hasdata(st, 7)){
 		type = script_getnum(st, 6);
 		type = script_getnum(st, 6);
 		type_id = script_getnum(st, 7);
 		type_id = script_getnum(st, 7);
+	}else{
+		type = MAPWARP_ALL;
+		type_id = 0;
 	}
 	}
 
 
-	if ((m = map_mapname2mapid(mapname)) < 0)
+	if ((m = map_mapname2mapid(mapname)) < 0){
+		ShowError("buildin_mapwarp: Unknown source map \"%s\"\n", mapname);
 		return SCRIPT_CMD_FAILURE;
 		return SCRIPT_CMD_FAILURE;
+	}
 
 
 	switch (type) {
 	switch (type) {
-		case 1:
+		case MAPWARP_ALL:
+			map_foreachinmap(buildin_areawarp_sub, m, BL_PC, mapindex_name2id(str), x, y, 0, 0, str);
+			break;
+		case MAPWARP_GUILD:
 			g = guild_search(type_id);
 			g = guild_search(type_id);
 			if (g) {
 			if (g) {
 				for (i = 0; i < g->max_member; i++) {
 				for (i = 0; i < g->max_member; i++) {
@@ -13162,7 +13176,7 @@ BUILDIN_FUNC(mapwarp)
 				}
 				}
 			}
 			}
 			break;
 			break;
-		case 2:
+		case MAPWARP_PARTY:
 			p = party_search(type_id);
 			p = party_search(type_id);
 			if (p) {
 			if (p) {
 				for (i = 0; i < MAX_PARTY; i++) {
 				for (i = 0; i < MAX_PARTY; i++) {
@@ -13171,7 +13185,7 @@ BUILDIN_FUNC(mapwarp)
 				}
 				}
 			}
 			}
 			break;
 			break;
-		case 3:
+		case MAPWARP_CLAN:
 			c = clan_search(type_id);
 			c = clan_search(type_id);
 			if (c) {
 			if (c) {
 				for (i = 0; i < MAX_CLAN; i++) {
 				for (i = 0; i < MAX_CLAN; i++) {
@@ -13181,8 +13195,8 @@ BUILDIN_FUNC(mapwarp)
 			}
 			}
 			break;
 			break;
 		default:
 		default:
-			map_foreachinmap(buildin_areawarp_sub, m, BL_PC, mapindex_name2id(str), x, y, 0, 0, str);
-			break;
+			ShowError("buildin_mapwarp: Unknown type '%d'\n", type);
+			return SCRIPT_CMD_FAILURE;
 	}
 	}
 	return SCRIPT_CMD_SUCCESS;
 	return SCRIPT_CMD_SUCCESS;
 }
 }
@@ -23417,7 +23431,7 @@ struct script_function buildin_func[] = {
 	BUILDIN_DEF(specialeffect,"i??"), // npc skill effect [Valaris]
 	BUILDIN_DEF(specialeffect,"i??"), // npc skill effect [Valaris]
 	BUILDIN_DEF(specialeffect2,"i??"), // skill effect on players[Valaris]
 	BUILDIN_DEF(specialeffect2,"i??"), // skill effect on players[Valaris]
 	BUILDIN_DEF(nude,"?"), // nude command [Valaris]
 	BUILDIN_DEF(nude,"?"), // nude command [Valaris]
-	BUILDIN_DEF(mapwarp,"ssii??"),		// Added by RoVeRT
+	BUILDIN_DEF(mapwarp,"ss????"),		// Added by RoVeRT
 	BUILDIN_DEF(atcommand,"s"), // [MouseJstr]
 	BUILDIN_DEF(atcommand,"s"), // [MouseJstr]
 	BUILDIN_DEF2(atcommand,"charcommand","s"), // [MouseJstr]
 	BUILDIN_DEF2(atcommand,"charcommand","s"), // [MouseJstr]
 	BUILDIN_DEF(movenpc,"sii?"), // [MouseJstr]
 	BUILDIN_DEF(movenpc,"sii?"), // [MouseJstr]

+ 7 - 0
src/map/script.h

@@ -699,6 +699,13 @@ enum vip_status_type {
 	VIP_STATUS_REMAINING
 	VIP_STATUS_REMAINING
 };
 };
 
 
+enum mapwarp_type {
+	MAPWARP_ALL = 0,
+	MAPWARP_GUILD,
+	MAPWARP_PARTY,
+	MAPWARP_CLAN
+};
+
 /**
 /**
  * used to generate quick script_array entries
  * used to generate quick script_array entries
  **/
  **/

+ 6 - 0
src/map/script_constants.h

@@ -3311,6 +3311,12 @@
 	export_constant(VIP_STATUS_EXPIRE);
 	export_constant(VIP_STATUS_EXPIRE);
 	export_constant(VIP_STATUS_REMAINING);
 	export_constant(VIP_STATUS_REMAINING);
 
 
+	/* mapwarp types */
+	export_constant(MAPWARP_ALL);
+	export_constant(MAPWARP_GUILD);
+	export_constant(MAPWARP_PARTY);
+	export_constant(MAPWARP_CLAN);
+
 	/* item groups */
 	/* item groups */
 	export_constant(IG_BLUEBOX);
 	export_constant(IG_BLUEBOX);
 	export_constant(IG_VIOLETBOX);
 	export_constant(IG_VIOLETBOX);