diff options
author | Haru <haru@dotalux.com> | 2014-05-29 19:24:42 +0200 |
---|---|---|
committer | Haru <haru@dotalux.com> | 2014-05-29 19:24:42 +0200 |
commit | a1df5eec5dc3c36838dbcf78128a83cf98a9b1ac (patch) | |
tree | 46eee6a2262848609f0420a53cf3055f4600d09f | |
parent | 407502abc921bb4cf06ff462ab6e2f23a327e950 (diff) | |
download | hercules-a1df5eec5dc3c36838dbcf78128a83cf98a9b1ac.tar.gz hercules-a1df5eec5dc3c36838dbcf78128a83cf98a9b1ac.tar.bz2 hercules-a1df5eec5dc3c36838dbcf78128a83cf98a9b1ac.tar.xz hercules-a1df5eec5dc3c36838dbcf78128a83cf98a9b1ac.zip |
Fixed a bug causing players to see unrelated guilds' #ally channels
- The issue would only happen if the #ally channel is on auto-join, when
a guild is first loaded.
- Follow-up to cd2f5e4a687b2abbdb9d795e5c91b874aa0d2546
- Special thanks to Ind.
Signed-off-by: Haru <haru@dotalux.com>
-rw-r--r-- | src/map/guild.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/src/map/guild.c b/src/map/guild.c index 042a6e801..4bf9c9da0 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -487,21 +487,27 @@ int guild_recv_info(struct guild *sg) { } for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) ) { - if( sd->status.guild_id ) { - if( sd->status.guild_id == sg->guild_id ) { - clif->chsys_join(channel,sd); - sd->guild = g; - } - + if (!sd->status.guild_id) + continue; // Not interested in guildless users + + if (sd->status.guild_id == sg->guild_id) { + // Guild member + clif->chsys_join(channel,sd); + sd->guild = g; + for (i = 0; i < MAX_GUILDALLIANCE; i++) { - if( sg->alliance[i].opposition == 0 && sg->alliance[i].guild_id ) { - if( sg->alliance[i].guild_id == sd->status.guild_id ) { - clif->chsys_join(channel,sd); - } else if( tg[i] != NULL ) { - if( !(tg[i]->channel->banned && idb_exists(tg[i]->channel->banned, sd->status.account_id))) - clif->chsys_join(tg[i]->channel,sd); - } - } + // Join channels from allied guilds + if (tg[i] && !(tg[i]->channel->banned && idb_exists(tg[i]->channel->banned, sd->status.account_id))) + clif->chsys_join(tg[i]->channel, sd); + } + continue; + } + + for (i = 0; i < MAX_GUILDALLIANCE; i++) { + if (tg[i] && sd->status.guild_id == tg[i]->guild_id) { // Shortcut to skip the alliance checks again + // Alliance member + if( !(channel->banned && idb_exists(channel->banned, sd->status.account_id))) + clif->chsys_join(channel, sd); } } } |