Removed/replaced all calls to map_getallusers (followup to r12195).

Trashed @whozeny (from r269).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@12204 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
ultramage 2008-02-14 19:11:11 +00:00
parent 69ae4766ce
commit 2d67424eb1
4 changed files with 288 additions and 318 deletions

View File

@ -3,6 +3,9 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2008/02/14
* Removed/replaced all calls to map_getallusers (followup to r12195)
* Trashed @whozeny (from r269) [ultramage]
2008/02/13
* Changes to memory manager: [FlavioJS]
- fixed blocks that are fully used not being detected (and not freed) in

View File

@ -1,5 +1,7 @@
Date Added
2008/02/14
* Removed atcommand @whozeny [ultramage]
2008/02/11
* Added 'input_min_value' and 'input_max_value' to script_athena.conf. [FlavioJS]
2008/01/22

View File

@ -238,9 +238,6 @@ whomap3: 20
// @who+@who2+who3
whogm: 20
// Displays a sorted list of the ammount of zeny each conected player has at hand.
whozeny: 20
// Change your appearence to other players to a mob.
disguise: 20

View File

@ -789,8 +789,9 @@ int atcommand_who(const int fd, struct map_session_data* sd, const char* command
*------------------------------------------*/
int atcommand_whomap3(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data *pl_sd, **pl_allsd;
int i, count, users;
struct map_session_data *pl_sd;
struct s_mapiterator* iter;
int count;
int pl_GM_level, GM_level;
int map_id;
char map_name[MAP_NAME_LENGTH_EXT];
@ -808,22 +809,24 @@ int atcommand_whomap3(const int fd, struct map_session_data* sd, const char* com
count = 0;
GM_level = pc_isGM(sd);
pl_allsd = map_getallusers(&users);
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i])) {
pl_GM_level = pc_isGM(pl_sd);
if (!((battle_config.hide_GM_session || (pl_sd->sc.option & OPTION_INVISIBLE)) && (pl_GM_level > GM_level))) { // you can look only lower or same level
if (pl_sd->bl.m == map_id) {
if (pl_GM_level > 0)
sprintf(atcmd_output, "Name: %s (GM:%d) | Location: %s %d %d", pl_sd->status.name, pl_GM_level, mapindex_id2name(pl_sd->mapindex), pl_sd->bl.x, pl_sd->bl.y);
else
sprintf(atcmd_output, "Name: %s | Location: %s %d %d", pl_sd->status.name, mapindex_id2name(pl_sd->mapindex), pl_sd->bl.x, pl_sd->bl.y);
clif_displaymessage(fd, atcmd_output);
count++;
}
}
}
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
{
pl_GM_level = pc_isGM(pl_sd);
if( pl_sd->bl.m != map_id )
continue;
if( (battle_config.hide_GM_session || (pl_sd->sc.option & OPTION_INVISIBLE)) && (pl_GM_level > GM_level) )
continue;
if (pl_GM_level > 0)
sprintf(atcmd_output, "Name: %s (GM:%d) | Location: %s %d %d", pl_sd->status.name, pl_GM_level, mapindex_id2name(pl_sd->mapindex), pl_sd->bl.x, pl_sd->bl.y);
else
sprintf(atcmd_output, "Name: %s | Location: %s %d %d", pl_sd->status.name, mapindex_id2name(pl_sd->mapindex), pl_sd->bl.x, pl_sd->bl.y);
clif_displaymessage(fd, atcmd_output);
count++;
}
mapit_free(iter);
if (count == 0)
sprintf(atcmd_output, msg_txt(54), map[map_id].name); // No player found in map '%s'.
@ -842,8 +845,9 @@ int atcommand_whomap3(const int fd, struct map_session_data* sd, const char* com
*------------------------------------------*/
int atcommand_whomap2(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data *pl_sd, **pl_allsd;
int i, count, users;
struct map_session_data *pl_sd;
struct s_mapiterator* iter;
int count;
int pl_GM_level, GM_level;
int map_id = 0;
char map_name[MAP_NAME_LENGTH_EXT];
@ -863,22 +867,24 @@ int atcommand_whomap2(const int fd, struct map_session_data* sd, const char* com
count = 0;
GM_level = pc_isGM(sd);
pl_allsd = map_getallusers(&users);
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i])) {
pl_GM_level = pc_isGM(pl_sd);
if (!((battle_config.hide_GM_session || (pl_sd->sc.option & OPTION_INVISIBLE)) && (pl_GM_level > GM_level))) { // you can look only lower or same level
if (pl_sd->bl.m == map_id) {
if (pl_GM_level > 0)
sprintf(atcmd_output, "Name: %s (GM:%d) | BLvl: %d | Job: %s (Lvl: %d)", pl_sd->status.name, pl_GM_level, pl_sd->status.base_level, job_name(pl_sd->status.class_), pl_sd->status.job_level);
else
sprintf(atcmd_output, "Name: %s | BLvl: %d | Job: %s (Lvl: %d)", pl_sd->status.name, pl_sd->status.base_level, job_name(pl_sd->status.class_), pl_sd->status.job_level);
clif_displaymessage(fd, atcmd_output);
count++;
}
}
}
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
{
pl_GM_level = pc_isGM(pl_sd);
if( pl_sd->bl.m != map_id )
continue;
if( (battle_config.hide_GM_session || (pl_sd->sc.option & OPTION_INVISIBLE)) && (pl_GM_level > GM_level) )
continue;
if (pl_GM_level > 0)
sprintf(atcmd_output, "Name: %s (GM:%d) | BLvl: %d | Job: %s (Lvl: %d)", pl_sd->status.name, pl_GM_level, pl_sd->status.base_level, job_name(pl_sd->status.class_), pl_sd->status.job_level);
else
sprintf(atcmd_output, "Name: %s | BLvl: %d | Job: %s (Lvl: %d)", pl_sd->status.name, pl_sd->status.base_level, job_name(pl_sd->status.class_), pl_sd->status.job_level);
clif_displaymessage(fd, atcmd_output);
count++;
}
mapit_free(iter);
if (count == 0)
sprintf(atcmd_output, msg_txt(54), map[map_id].name); // No player found in map '%s'.
@ -899,8 +905,9 @@ int atcommand_whomap(const int fd, struct map_session_data* sd, const char* comm
{
char temp0[100];
char temp1[100];
struct map_session_data *pl_sd, **pl_allsd;
int i, count, users;
struct map_session_data *pl_sd;
struct s_mapiterator* iter;
int count;
int pl_GM_level, GM_level;
int map_id = 0;
char map_name[MAP_NAME_LENGTH_EXT];
@ -925,31 +932,31 @@ int atcommand_whomap(const int fd, struct map_session_data* sd, const char* comm
count = 0;
GM_level = pc_isGM(sd);
pl_allsd = map_getallusers(&users);
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i])) {
pl_GM_level = pc_isGM(pl_sd);
if (!((battle_config.hide_GM_session || (pl_sd->sc.option & OPTION_INVISIBLE)) && (pl_GM_level > GM_level))) { // you can look only lower or same level
if (pl_sd->bl.m == map_id) {
g = guild_search(pl_sd->status.guild_id);
if (g == NULL)
sprintf(temp1, "None");
else
sprintf(temp1, "%s", g->name);
p = party_search(pl_sd->status.party_id);
if (p == NULL)
sprintf(temp0, "None");
else
sprintf(temp0, "%s", p->party.name);
if (pl_GM_level > 0)
sprintf(atcmd_output, "Name: %s (GM:%d) | Party: '%s' | Guild: '%s'", pl_sd->status.name, pl_GM_level, temp0, temp1);
else
sprintf(atcmd_output, "Name: %s | Party: '%s' | Guild: '%s'", pl_sd->status.name, temp0, temp1);
clif_displaymessage(fd, atcmd_output);
count++;
}
}
}
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
{
pl_GM_level = pc_isGM(pl_sd);
if( pl_sd->bl.m != map_id )
continue;
if( (battle_config.hide_GM_session || (pl_sd->sc.option & OPTION_INVISIBLE)) && (pl_GM_level > GM_level) )
continue;
g = guild_search(pl_sd->status.guild_id);
if (g == NULL)
sprintf(temp1, "None");
else
sprintf(temp1, "%s", g->name);
p = party_search(pl_sd->status.party_id);
if (p == NULL)
sprintf(temp0, "None");
else
sprintf(temp0, "%s", p->party.name);
if (pl_GM_level > 0)
sprintf(atcmd_output, "Name: %s (GM:%d) | Party: '%s' | Guild: '%s'", pl_sd->status.name, pl_GM_level, temp0, temp1);
else
sprintf(atcmd_output, "Name: %s | Party: '%s' | Guild: '%s'", pl_sd->status.name, temp0, temp1);
clif_displaymessage(fd, atcmd_output);
count++;
}
if (count == 0)
@ -969,8 +976,9 @@ int atcommand_whomap(const int fd, struct map_session_data* sd, const char* comm
*------------------------------------------*/
int atcommand_whogm(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data *pl_sd, **pl_allsd;
int i, j, count, users;
struct map_session_data* pl_sd;
struct s_mapiterator* iter;
int j, count;
int pl_GM_level, GM_level;
char match_text[200];
char player_name[NAME_LENGTH];
@ -990,9 +998,10 @@ int atcommand_whogm(const int fd, struct map_session_data* sd, const char* comma
count = 0;
GM_level = pc_isGM(sd);
pl_allsd = map_getallusers(&users);
for (i = 0; i < users; i++) {
pl_sd = pl_allsd[i];
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
{
pl_GM_level = pc_isGM(pl_sd);
if (!pl_GM_level)
continue;
@ -1034,6 +1043,7 @@ int atcommand_whogm(const int fd, struct map_session_data* sd, const char* comma
clif_displaymessage(fd, atcmd_output);
count++;
}
mapit_free(iter);
if (count == 0)
clif_displaymessage(fd, msg_txt(150)); // No GM found.
@ -1047,81 +1057,6 @@ int atcommand_whogm(const int fd, struct map_session_data* sd, const char* comma
return 0;
}
int atcommand_whozeny(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data *pl_sd, **pl_allsd;
int i, j, count,c, users;
char match_text[100];
char player_name[NAME_LENGTH];
int *zeny;
int *counted;
nullpo_retr(-1, sd);
memset(atcmd_output, '\0', sizeof(atcmd_output));
memset(match_text, '\0', sizeof(match_text));
memset(player_name, '\0', sizeof(player_name));
if (sscanf(message, "%99[^\n]", match_text) < 1)
strcpy(match_text, "");
for (j = 0; match_text[j]; j++)
match_text[j] = TOLOWER(match_text[j]);
count = 0;
pl_allsd = map_getallusers(&users);
if (users < 1)
{
clif_displaymessage(fd, msg_txt(28)); // No player found.
return 0;
}
zeny = (int *)aMallocA(users*sizeof(int));
counted = (int *)aMallocA(users*sizeof(int));
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i])) {
memcpy(player_name, pl_sd->status.name, NAME_LENGTH);
for (j = 0; player_name[j]; j++)
player_name[j] = TOLOWER(player_name[j]);
if (strstr(player_name, match_text) != NULL) { // search with no case sensitive
zeny[count]=pl_sd->status.zeny;
counted[i]=0;
count++;
}
}
}
qsort(zeny, count, sizeof(int), hightolow_compare);
for (c = 0; c < count && c < 50; c++) {
if(!zeny[c])
continue;
for (i = 0; i < users; i++) {
if(!zeny[c])
continue;
if ((pl_sd = pl_allsd[i]) && counted[i]==0) {
if(pl_sd->status.zeny==zeny[c]) {
sprintf(atcmd_output, "Name: %s | Zeny: %d", pl_sd->status.name, pl_sd->status.zeny);
clif_displaymessage(fd, atcmd_output);
zeny[c]=0;
counted[i]=1;
}
}
}
}
if (count == 0)
clif_displaymessage(fd, msg_txt(28)); // No player found.
else if (count == 1)
clif_displaymessage(fd, msg_txt(29)); // 1 player found.
else {
sprintf(atcmd_output, msg_txt(30), count); // %d players found.
clif_displaymessage(fd, atcmd_output);
}
aFree(zeny);
aFree(counted);
return 0;
}
/*==========================================
*
*------------------------------------------*/
@ -2017,11 +1952,6 @@ int atcommand_pvpoff(const int fd, struct map_session_data* sd, const char* comm
{
nullpo_retr(-1, sd);
//if (battle_config.pk_mode) { //disable command if server is in PK mode [Valaris]
// clif_displaymessage(fd, msg_txt(52)); // This option cannot be used in PK Mode.
// return -1;
//}
if (!map[sd->bl.m].flag.pvp) {
clif_displaymessage(fd, msg_txt(160)); // PvP is already Off.
return -1;
@ -2040,40 +1970,39 @@ int atcommand_pvpoff(const int fd, struct map_session_data* sd, const char* comm
/*==========================================
*
*------------------------------------------*/
static int atcommand_pvpon_sub(struct block_list *bl,va_list ap)
{
TBL_PC* sd = (TBL_PC*)bl;
if (sd->pvp_timer == -1) {
sd->pvp_timer = add_timer(gettick() + 200, pc_calc_pvprank_timer, sd->bl.id, 0);
sd->pvp_rank = 0;
sd->pvp_lastusers = 0;
sd->pvp_point = 5;
sd->pvp_won = 0;
sd->pvp_lost = 0;
}
return 0;
}
int atcommand_pvpon(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data *pl_sd, **pl_allsd;
int i, users;
nullpo_retr(-1, sd);
//if (battle_config.pk_mode) { //disable command if server is in PK mode [Valaris]
// clif_displaymessage(fd, msg_txt(52)); // This option cannot be used in PK Mode.
// return -1;
//}
if (!map[sd->bl.m].flag.pvp) {
map[sd->bl.m].flag.pvp = 1;
if (!battle_config.pk_mode)
{
clif_send0199(sd->bl.m, 1);
pl_allsd = map_getallusers(&users);
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i]) && sd->bl.m == pl_sd->bl.m && pl_sd->pvp_timer == -1) {
pl_sd->pvp_timer = add_timer(gettick() + 200, pc_calc_pvprank_timer, pl_sd->bl.id, 0);
pl_sd->pvp_rank = 0;
pl_sd->pvp_lastusers = 0;
pl_sd->pvp_point = 5;
pl_sd->pvp_won = 0;
pl_sd->pvp_lost = 0;
}
}
}
clif_displaymessage(fd, msg_txt(32)); // PvP: On.
} else {
if (map[sd->bl.m].flag.pvp) {
clif_displaymessage(fd, msg_txt(161)); // PvP is already On.
return -1;
}
map[sd->bl.m].flag.pvp = 1;
if (!battle_config.pk_mode)
{// display pvp circle and rank
clif_send0199(sd->bl.m, 1);
map_foreachinmap(atcommand_pvpon_sub,sd->bl.m, BL_PC);
}
clif_displaymessage(fd, msg_txt(32)); // PvP: On.
return 0;
}
@ -2083,16 +2012,17 @@ int atcommand_pvpon(const int fd, struct map_session_data* sd, const char* comma
int atcommand_gvgoff(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
nullpo_retr(-1, sd);
if (map[sd->bl.m].flag.gvg) {
map[sd->bl.m].flag.gvg = 0;
clif_send0199(sd->bl.m, 0);
map_foreachinmap(atcommand_stopattack,sd->bl.m, BL_CHAR, 0);
clif_displaymessage(fd, msg_txt(33)); // GvG: Off.
} else {
if (!map[sd->bl.m].flag.gvg) {
clif_displaymessage(fd, msg_txt(162)); // GvG is already Off.
return -1;
}
map[sd->bl.m].flag.gvg = 0;
clif_send0199(sd->bl.m, 0);
map_foreachinmap(atcommand_stopattack,sd->bl.m, BL_CHAR, 0);
clif_displaymessage(fd, msg_txt(33)); // GvG: Off.
return 0;
}
@ -2102,15 +2032,16 @@ int atcommand_gvgoff(const int fd, struct map_session_data* sd, const char* comm
int atcommand_gvgon(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
nullpo_retr(-1, sd);
if (!map[sd->bl.m].flag.gvg) {
map[sd->bl.m].flag.gvg = 1;
clif_send0199(sd->bl.m, 3);
clif_displaymessage(fd, msg_txt(34)); // GvG: On.
} else {
if (map[sd->bl.m].flag.gvg) {
clif_displaymessage(fd, msg_txt(163)); // GvG is already On.
return -1;
}
map[sd->bl.m].flag.gvg = 1;
clif_send0199(sd->bl.m, 3);
clif_displaymessage(fd, msg_txt(34)); // GvG: On.
return 0;
}
@ -3548,17 +3479,23 @@ int atcommand_day(const int fd, struct map_session_data* sd, const char* command
*------------------------------------------*/
int atcommand_doom(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data *pl_sd, **pl_allsd;
int i, users;
struct map_session_data* pl_sd;
struct s_mapiterator* iter;
nullpo_retr(-1, sd);
clif_specialeffect(&sd->bl,450,ALL_SAMEMAP);
pl_allsd = map_getallusers(&users);
for(i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i]) && pl_sd->fd != fd && pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can doom only lower or same gm level
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
{
if (pl_sd->fd != fd && pc_isGM(sd) >= pc_isGM(pl_sd))
{
status_kill(&pl_sd->bl);
clif_displaymessage(pl_sd->fd, msg_txt(61)); // The holy messenger has given judgement.
}
}
mapit_free(iter);
clif_displaymessage(fd, msg_txt(62)); // Judgement was made.
return 0;
@ -3569,20 +3506,23 @@ int atcommand_doom(const int fd, struct map_session_data* sd, const char* comman
*------------------------------------------*/
int atcommand_doommap(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data *pl_sd, **pl_allsd;
int i, users;
struct map_session_data* pl_sd;
struct s_mapiterator* iter;
nullpo_retr(-1, sd);
clif_specialeffect(&sd->bl,450,ALL_CLIENT);
pl_allsd = map_getallusers(&users);
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i]) && pl_sd->fd != fd && sd->bl.m == pl_sd->bl.m &&
pc_isGM(sd) >= pc_isGM(pl_sd)) // you can doom only lower or same gm level
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
{
if (pl_sd->fd != fd && sd->bl.m == pl_sd->bl.m && pc_isGM(sd) >= pc_isGM(pl_sd))
{
status_kill(&pl_sd->bl);
// clif_specialeffect(&pl_sd->bl,450,1);
clif_displaymessage(pl_sd->fd, msg_txt(61)); // The holy messenger has given judgement.
}
}
mapit_free(iter);
clif_displaymessage(fd, msg_txt(62)); // Judgement was made.
return 0;
@ -3607,16 +3547,16 @@ static void atcommand_raise_sub(struct map_session_data* sd)
*------------------------------------------*/
int atcommand_raise(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
int i, users;
struct map_session_data **all_sd;
struct map_session_data* pl_sd;
struct s_mapiterator* iter;
nullpo_retr(-1, sd);
all_sd = map_getallusers(&users);
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
atcommand_raise_sub(pl_sd);
mapit_free(iter);
for (i = 0; i < users; i++) {
atcommand_raise_sub(all_sd[i]);
}
clif_displaymessage(fd, msg_txt(64)); // Mercy has been granted.
return 0;
@ -3627,17 +3567,17 @@ int atcommand_raise(const int fd, struct map_session_data* sd, const char* comma
*------------------------------------------*/
int atcommand_raisemap(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data **pl_allsd;
int i, users;
struct map_session_data* pl_sd;
struct s_mapiterator* iter;
nullpo_retr(-1, sd);
pl_allsd = map_getallusers(&users);
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
if (sd->bl.m == pl_sd->bl.m)
atcommand_raise_sub(pl_sd);
mapit_free(iter);
for (i = 0; i < users; i++) {
if (sd->bl.m == pl_allsd[i]->bl.m)
atcommand_raise_sub(pl_allsd[i]);
}
clif_displaymessage(fd, msg_txt(64)); // Mercy has been granted.
return 0;
@ -3680,18 +3620,19 @@ int atcommand_kick(const int fd, struct map_session_data* sd, const char* comman
*------------------------------------------*/
int atcommand_kickall(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data *pl_sd, **pl_allsd;
int i, users;
struct map_session_data* pl_sd;
struct s_mapiterator* iter;
nullpo_retr(-1, sd);
pl_allsd = map_getallusers(&users);
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i]) && pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can kick only lower or same gm level
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
{
if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can kick only lower or same gm level
if (sd->status.account_id != pl_sd->status.account_id)
clif_GM_kick(NULL, pl_sd);
}
}
mapit_free(iter);
clif_displaymessage(fd, msg_txt(195)); // All players have been kicked!
@ -3899,15 +3840,17 @@ int atcommand_agitend(const int fd, struct map_session_data* sd, const char* com
*------------------------------------------*/
int atcommand_mapexit(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data *pl_sd, **pl_allsd;
int i, users;
struct map_session_data* pl_sd;
struct s_mapiterator* iter;
nullpo_retr(-1, sd);
pl_allsd = map_getallusers(&users);
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i]) && sd->status.account_id != pl_sd->status.account_id)
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
if (sd->status.account_id != pl_sd->status.account_id)
clif_GM_kick(NULL, pl_sd);
}
mapit_free(iter);
clif_GM_kick(NULL, sd);
flush_fifos();
@ -3958,9 +3901,9 @@ int atcommand_idsearch(const int fd, struct map_session_data* sd, const char* co
*------------------------------------------*/
int atcommand_recallall(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data *pl_sd, **pl_allsd;
int i;
int count, users;
struct map_session_data* pl_sd;
struct s_mapiterator* iter;
int count;
nullpo_retr(-1, sd);
memset(atcmd_output, '\0', sizeof(atcmd_output));
@ -3971,10 +3914,11 @@ int atcommand_recallall(const int fd, struct map_session_data* sd, const char* c
}
count = 0;
pl_allsd = map_getallusers(&users);
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i]) && sd->status.account_id != pl_sd->status.account_id &&
pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can recall only lower or same level
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
{
if (sd->status.account_id != pl_sd->status.account_id && pc_isGM(sd) >= pc_isGM(pl_sd))
{
if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd))
count++;
else {
@ -3986,6 +3930,7 @@ int atcommand_recallall(const int fd, struct map_session_data* sd, const char* c
}
}
}
mapit_free(iter);
clif_displaymessage(fd, msg_txt(92)); // All characters recalled!
if (count) {
@ -4001,8 +3946,9 @@ int atcommand_recallall(const int fd, struct map_session_data* sd, const char* c
*------------------------------------------*/
int atcommand_guildrecall(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data *pl_sd, **pl_allsd;
int i, users, count;
struct map_session_data* pl_sd;
struct s_mapiterator* iter;
int count;
char guild_name[NAME_LENGTH];
struct guild *g;
nullpo_retr(-1, sd);
@ -4020,32 +3966,37 @@ int atcommand_guildrecall(const int fd, struct map_session_data* sd, const char*
return -1;
}
if ((g = guild_searchname(guild_name)) != NULL || // name first to avoid error when name begin with a number
(g = guild_search(atoi(message))) != NULL) {
count = 0;
pl_allsd = map_getallusers(&users);
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i]) && sd->status.account_id != pl_sd->status.account_id &&
pl_sd->status.guild_id == g->guild_id) {
if (pc_isGM(pl_sd) > pc_isGM(sd))
continue; //Skip GMs greater than you.
if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd))
count++;
else
pc_setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, 2);
}
}
sprintf(atcmd_output, msg_txt(93), g->name); // All online characters of the %s guild are near you.
clif_displaymessage(fd, atcmd_output);
if (count) {
sprintf(atcmd_output, "Because you are not authorised to warp from some maps, %d player(s) have not been recalled.", count);
clif_displaymessage(fd, atcmd_output);
}
} else {
if ((g = guild_searchname(guild_name)) == NULL && // name first to avoid error when name begin with a number
(g = guild_search(atoi(message))) == NULL)
{
clif_displaymessage(fd, msg_txt(94)); // Incorrect name/ID, or no one from the guild is online.
return -1;
}
count = 0;
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
{
if (sd->status.account_id != pl_sd->status.account_id && pl_sd->status.guild_id == g->guild_id)
{
if (pc_isGM(pl_sd) > pc_isGM(sd))
continue; //Skip GMs greater than you.
if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd))
count++;
else
pc_setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, 2);
}
}
mapit_free(iter);
sprintf(atcmd_output, msg_txt(93), g->name); // All online characters of the %s guild are near you.
clif_displaymessage(fd, atcmd_output);
if (count) {
sprintf(atcmd_output, "Because you are not authorised to warp from some maps, %d player(s) have not been recalled.", count);
clif_displaymessage(fd, atcmd_output);
}
return 0;
}
@ -4054,11 +4005,11 @@ int atcommand_guildrecall(const int fd, struct map_session_data* sd, const char*
*------------------------------------------*/
int atcommand_partyrecall(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
int i;
struct map_session_data *pl_sd, **pl_allsd;
struct map_session_data* pl_sd;
struct s_mapiterator* iter;
char party_name[NAME_LENGTH];
struct party_data *p;
int count, users;
int count;
nullpo_retr(-1, sd);
memset(party_name, '\0', sizeof(party_name));
@ -4074,33 +4025,37 @@ int atcommand_partyrecall(const int fd, struct map_session_data* sd, const char*
return -1;
}
if ((p = party_searchname(party_name)) != NULL || // name first to avoid error when name begin with a number
(p = party_search(atoi(message))) != NULL) {
count = 0;
pl_allsd = map_getallusers(&users);
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i]) && sd->status.account_id != pl_sd->status.account_id &&
pl_sd->status.party_id == p->party.party_id) {
if (pc_isGM(pl_sd) > pc_isGM(sd))
continue; //Skip GMs greater than you.
if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd))
count++;
else
pc_setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, 2);
}
}
sprintf(atcmd_output, msg_txt(95), p->party.name); // All online characters of the %s party are near you.
clif_displaymessage(fd, atcmd_output);
if (count) {
sprintf(atcmd_output, "Because you are not authorised to warp from some maps, %d player(s) have not been recalled.", count);
clif_displaymessage(fd, atcmd_output);
}
} else {
if ((p = party_searchname(party_name)) == NULL && // name first to avoid error when name begin with a number
(p = party_search(atoi(message))) == NULL)
{
clif_displaymessage(fd, msg_txt(96)); // Incorrect name or ID, or no one from the party is online.
return -1;
}
count = 0;
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
{
if (sd->status.account_id != pl_sd->status.account_id && pl_sd->status.party_id == p->party.party_id)
{
if (pc_isGM(pl_sd) > pc_isGM(sd))
continue; //Skip GMs greater than you.
if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd))
count++;
else
pc_setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, 2);
}
}
mapit_free(iter);
sprintf(atcmd_output, msg_txt(95), p->party.name); // All online characters of the %s party are near you.
clif_displaymessage(fd, atcmd_output);
if (count) {
sprintf(atcmd_output, "Because you are not authorised to warp from some maps, %d player(s) have not been recalled.", count);
clif_displaymessage(fd, atcmd_output);
}
return 0;
}
@ -4271,46 +4226,52 @@ int atcommand_reloadgmdb(const int fd, struct map_session_data* sd, const char*
*------------------------------------------*/
int atcommand_mapinfo(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data *pl_sd, **pl_allsd;
struct map_session_data* pl_sd;
struct s_mapiterator* iter;
struct npc_data *nd = NULL;
struct chat_data *cd = NULL;
char direction[12];
int m_id, i, chat_num, users, list = 0;
int i, m_id, chat_num, list = 0;
unsigned short m_index;
char mapname[24];
nullpo_retr(-1, sd);
memset(atcmd_output, '\0', sizeof(atcmd_output));
memset(atcmd_player_name, '\0', sizeof(atcmd_player_name));
memset(mapname, '\0', sizeof(mapname));
memset(direction, '\0', sizeof(direction));
sscanf(message, "%d %23[^\n]", &list, atcmd_player_name);
sscanf(message, "%d %23[^\n]", &list, mapname);
if (list < 0 || list > 3) {
clif_displaymessage(fd, "Please, enter at least a valid list number (usage: @mapinfo <0-3> [map]).");
return -1;
}
if (atcmd_player_name[0] == '\0') {
safestrncpy(atcmd_player_name, mapindex_id2name(sd->mapindex), MAP_NAME_LENGTH);
if (mapname[0] == '\0') {
safestrncpy(mapname, mapindex_id2name(sd->mapindex), MAP_NAME_LENGTH);
m_id = map_mapindex2mapid(sd->mapindex);
} else {
m_id = map_mapname2mapid(atcmd_player_name);
m_id = map_mapname2mapid(mapname);
}
if (m_id < 0) {
clif_displaymessage(fd, msg_txt(1)); // Map not found.
return -1;
}
m_index = mapindex_name2id(atcmd_player_name); //This one shouldn't fail since the previous seek did not.
m_index = mapindex_name2id(mapname); //This one shouldn't fail since the previous seek did not.
clif_displaymessage(fd, "------ Map Info ------");
// count chats (for initial message)
chat_num = 0;
pl_allsd = map_getallusers(&users);
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i]) && (cd = (struct chat_data*)map_id2bl(pl_sd->chatID))) {
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
if( (cd = (struct chat_data*)map_id2bl(pl_sd->chatID)) != NULL && pl_sd->mapindex == m_index && cd->usersd[0] == pl_sd )
chat_num++;
}
}
sprintf(atcmd_output, "Map Name: %s | Players In Map: %d | NPCs In Map: %d | Chats In Map: %d", atcmd_player_name, map[m_id].users, map[m_id].npc_num, chat_num);
mapit_free(iter);
sprintf(atcmd_output, "Map Name: %s | Players In Map: %d | NPCs In Map: %d | Chats In Map: %d", mapname, map[m_id].users, map[m_id].npc_num, chat_num);
clif_displaymessage(fd, atcmd_output);
clif_displaymessage(fd, "------ Map Flags ------");
strcpy(atcmd_output,"PvP Flags: ");
@ -4431,17 +4392,21 @@ int atcommand_mapinfo(const int fd, struct map_session_data* sd, const char* com
break;
case 1:
clif_displaymessage(fd, "----- Players in Map -----");
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i]) && pl_sd->mapindex == m_index) {
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
{
if (pl_sd->mapindex == m_index) {
sprintf(atcmd_output, "Player '%s' (session #%d) | Location: %d,%d",
pl_sd->status.name, pl_sd->fd, pl_sd->bl.x, pl_sd->bl.y);
clif_displaymessage(fd, atcmd_output);
}
}
mapit_free(iter);
break;
case 2:
clif_displaymessage(fd, "----- NPCs in Map -----");
for (i = 0; i < map[m_id].npc_num;) {
for (i = 0; i < map[m_id].npc_num;)
{
nd = map[m_id].npc[i];
switch(nd->ud.dir) {
case 0: strcpy(direction, "North"); break;
@ -4462,18 +4427,22 @@ int atcommand_mapinfo(const int fd, struct map_session_data* sd, const char* com
break;
case 3:
clif_displaymessage(fd, "----- Chats in Map -----");
for (i = 0; i < users; i++) {
if ((pl_sd = pl_allsd[i]) && (cd = (struct chat_data*)map_id2bl(pl_sd->chatID)) &&
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
{
if ((cd = (struct chat_data*)map_id2bl(pl_sd->chatID)) != NULL &&
pl_sd->mapindex == m_index &&
cd->usersd[0] == pl_sd) {
sprintf(atcmd_output, "Chat %d: %s | Player: %s | Location: %d %d",
i, cd->title, pl_sd->status.name, cd->bl.x, cd->bl.y);
cd->usersd[0] == pl_sd)
{
sprintf(atcmd_output, "Chat: %s | Player: %s | Location: %d %d",
cd->title, pl_sd->status.name, cd->bl.x, cd->bl.y);
clif_displaymessage(fd, atcmd_output);
sprintf(atcmd_output, " Users: %d/%d | Password: %s | Public: %s",
cd->users, cd->limit, cd->pass, (cd->pub) ? "Yes" : "No");
clif_displaymessage(fd, atcmd_output);
}
}
mapit_free(iter);
break;
default: // normally impossible to arrive here
clif_displaymessage(fd, "Please, enter at least a valid list number (usage: @mapinfo <0-3> [map]).");
@ -5213,8 +5182,9 @@ int atcommand_disguise(const int fd, struct map_session_data* sd, const char* co
*------------------------------------------*/
int atcommand_disguiseall(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
int mob_id=0, i=0, users;
struct map_session_data *pl_sd, **pl_allsd;
int mob_id=0, i=0;
struct map_session_data *pl_sd;
struct s_mapiterator* iter;
nullpo_retr(-1, sd);
if (!message || !*message) {
@ -5230,12 +5200,11 @@ int atcommand_disguiseall(const int fd, struct map_session_data* sd, const char*
return -1;
}
pl_allsd = map_getallusers(&users);
for(i=0; i < users; i++)
{
if((pl_sd = pl_allsd[i]))
pc_disguise(pl_sd, mob_id);
}
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
pc_disguise(pl_sd, mob_id);
mapit_free(iter);
clif_displaymessage(fd, msg_txt(122)); // Disguise applied.
return 0;
}
@ -5262,16 +5231,16 @@ int atcommand_undisguise(const int fd, struct map_session_data* sd, const char*
*------------------------------------------*/
int atcommand_undisguiseall(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
struct map_session_data *pl_sd, **pl_allsd;
int i, users;
struct map_session_data *pl_sd;
struct s_mapiterator* iter;
nullpo_retr(-1, sd);
pl_allsd = map_getallusers(&users);
for(i=0; i < users; i++) {
if((pl_sd = pl_allsd[i]) && pl_sd->disguise)
iter = mapit_getallusers();
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
if( pl_sd->disguise )
pc_disguise(pl_sd, 0);
}
mapit_free(iter);
clif_displaymessage(fd, msg_txt(124)); // Undisguise applied.
return 0;
@ -8409,7 +8378,6 @@ AtCommandInfo atcommand_info[] = {
{ "uptime", 1, atcommand_uptime },
{ "changesex", 60, atcommand_changesex },
{ "mute", 80, atcommand_mute },
{ "whozeny", 20, atcommand_whozeny },
{ "refresh", 1, atcommand_refresh },
{ "identify", 40, atcommand_identify },
{ "gmotd", 20, atcommand_gmotd },