Index: conf/atcommand_athena.conf =================================================================== --- conf/atcommand_athena.conf (revision 15132) +++ conf/atcommand_athena.conf (working copy) @@ -667,6 +667,9 @@ // Set the server to night. night: 80,100 +// Recalls everyone in spesific map to your coordinates +recallmap: 80,80 + // Recalls Everyone To Your Coordinates recallall: 80,80 Index: conf/msg_athena.conf =================================================================== --- conf/msg_athena.conf (revision 15132) +++ conf/msg_athena.conf (working copy) @@ -573,5 +573,7 @@ 650: Baby Shadow Chaser 651: Unknown Job +999: All characters from %s recalled! + //Custom translations import: conf/import/msg_conf.txt Index: src/map/atcommand.c =================================================================== --- src/map/atcommand.c (revision 15132) +++ src/map/atcommand.c (working copy) @@ -4058,6 +4058,64 @@ } /*========================================== + * Recall all characters from spesific map + * to your location [FatalEror] + *------------------------------------------*/ +ACMD_FUNC(recallmap) +{ + struct map_session_data* pl_sd; + struct s_mapiterator* iter; + unsigned short mapindex; + int m = -1; + + nullpo_retr(-1, sd); + + memset(atcmd_output, '\0', sizeof(atcmd_output)); + + if (!message || !*message) { + clif_displaymessage(fd, "Please, enter a map name (usage: @recallmap )."); + return -1; + } + + mapindex = mapindex_name2id(message); + if (mapindex) + m = map_mapindex2mapid(mapindex); + + if (!mapindex) { + clif_displaymessage(fd, msg_txt(1)); // Map not found. + return -1; + } + + if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) { + clif_displaymessage(fd, "You are not authorised to warp somenone to your actual map."); + return -1; + } + + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + { + if (pl_sd->bl.m == m && sd->status.account_id != pl_sd->status.account_id && pc_isGM(sd) >= pc_isGM(pl_sd)) + { + if (!map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level < pc_isGM(sd)) { + if (pl_sd->state.autotrade) //Can't recall player in Autotrade mode + continue; + if (pc_isdead(pl_sd)) { //Wake them up + pc_setstand(pl_sd); + pc_setrestartvalue(pl_sd,1); + } + pc_setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, CLR_RESPAWN); + } + } + } + mapit_free(iter); + + sprintf(atcmd_output, msg_txt(999), map[m].name); //All characters from %s recalled! + clif_displaymessage(fd, atcmd_output); + + return 0; +} + +/*========================================== * Recall All Characters Online To Your Location *------------------------------------------*/ ACMD_FUNC(recallall) @@ -8922,6 +8980,7 @@ { "idsearch", 60,60, atcommand_idsearch }, { "broadcast", 40,40, atcommand_broadcast }, // + /b and /nb { "localbroadcast", 40,40, atcommand_localbroadcast }, // + /lb and /nlb + { "recallmap", 80,80, atcommand_recallmap }, { "recallall", 80,80, atcommand_recallall }, { "reloaditemdb", 99,99, atcommand_reloaditemdb }, { "reloadmobdb", 99,99, atcommand_reloadmobdb },