diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 38951f33e6..8570b9508f 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -6850,30 +6850,32 @@ Examples: --------------------------------------- -*mapwarp "","",,{,,}; +*mapwarp "","",{,,,}; -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 and warp them +wholesale to the same point on the , 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 and 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: // 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 . +There are also three special 'map names' you can use for : "Random" will warp the player randomly on the current map. "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 diff --git a/src/map/script.c b/src/map/script.c index 730c79aaa7..cf654bc357 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -13127,33 +13127,47 @@ BUILDIN_FUNC(failedremovecards) { /** * Warp a given map - * mapwarp "","",,{,,}; + * mapwarp "","",{,,,}; * @author [Reddozen], [RoVeRT]; improved by [Lance] */ 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; mapname = script_getstr(st, 2); 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)){ type = script_getnum(st, 6); 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; + } 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); if (g) { for (i = 0; i < g->max_member; i++) { @@ -13162,7 +13176,7 @@ BUILDIN_FUNC(mapwarp) } } break; - case 2: + case MAPWARP_PARTY: p = party_search(type_id); if (p) { for (i = 0; i < MAX_PARTY; i++) { @@ -13171,7 +13185,7 @@ BUILDIN_FUNC(mapwarp) } } break; - case 3: + case MAPWARP_CLAN: c = clan_search(type_id); if (c) { for (i = 0; i < MAX_CLAN; i++) { @@ -13181,8 +13195,8 @@ BUILDIN_FUNC(mapwarp) } break; 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; } @@ -23417,7 +23431,7 @@ struct script_function buildin_func[] = { BUILDIN_DEF(specialeffect,"i??"), // npc skill effect [Valaris] BUILDIN_DEF(specialeffect2,"i??"), // skill effect on players[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_DEF2(atcommand,"charcommand","s"), // [MouseJstr] BUILDIN_DEF(movenpc,"sii?"), // [MouseJstr] diff --git a/src/map/script.h b/src/map/script.h index 4b38de54c2..6ffa156864 100644 --- a/src/map/script.h +++ b/src/map/script.h @@ -699,6 +699,13 @@ enum vip_status_type { VIP_STATUS_REMAINING }; +enum mapwarp_type { + MAPWARP_ALL = 0, + MAPWARP_GUILD, + MAPWARP_PARTY, + MAPWARP_CLAN +}; + /** * used to generate quick script_array entries **/ diff --git a/src/map/script_constants.h b/src/map/script_constants.h index abcab8268f..6904b69d00 100644 --- a/src/map/script_constants.h +++ b/src/map/script_constants.h @@ -3311,6 +3311,12 @@ export_constant(VIP_STATUS_EXPIRE); 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 */ export_constant(IG_BLUEBOX); export_constant(IG_VIOLETBOX);