summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/atcommand.c598
1 files changed, 283 insertions, 315 deletions
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 35e644681..956d32040 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -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,15 +2012,16 @@ 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,14 +2032,15 @@ 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 },