Index: src/map/atcommand.c =================================================================== --- src/map/atcommand.c (revision 17295) +++ src/map/atcommand.c (working copy) @@ -1482,8 +1482,10 @@ map[sd->bl.m].flag.pvp = 0; - if (!battle_config.pk_mode) + if (!battle_config.pk_mode){ clif_map_property_mapall(sd->bl.m, MAPPROPERTY_NOTHING); + clif_maptypeproperty2(&sd->bl,ALL_SAMEMAP); + } map_foreachinmap(atcommand_pvpoff_sub,sd->bl.m, BL_PC); map_foreachinmap(atcommand_stopattack,sd->bl.m, BL_CHAR, 0); clif_displaymessage(fd, msg_txt(sd,31)); // PvP: Off. @@ -1521,6 +1523,7 @@ if (!battle_config.pk_mode) {// display pvp circle and rank clif_map_property_mapall(sd->bl.m, MAPPROPERTY_FREEPVPZONE); + clif_maptypeproperty2(&sd->bl,ALL_SAMEMAP); map_foreachinmap(atcommand_pvpon_sub,sd->bl.m, BL_PC); } @@ -1543,6 +1546,7 @@ map[sd->bl.m].flag.gvg = 0; clif_map_property_mapall(sd->bl.m, MAPPROPERTY_NOTHING); + clif_maptypeproperty2(&sd->bl,ALL_SAMEMAP); map_foreachinmap(atcommand_stopattack,sd->bl.m, BL_CHAR, 0); clif_displaymessage(fd, msg_txt(sd,33)); // GvG: Off. @@ -1563,6 +1567,7 @@ map[sd->bl.m].flag.gvg = 1; clif_map_property_mapall(sd->bl.m, MAPPROPERTY_AGITZONE); + clif_maptypeproperty2(&sd->bl,ALL_SAMEMAP); clif_displaymessage(fd, msg_txt(sd,34)); // GvG: On. return 0; @@ -8894,10 +8899,12 @@ return channel_pcunbind(sd); } else if ( strcmpi(key,"ban") == 0 ) { return channel_pcban(sd,sub1,map_nick2sd(sub2),0); - } else if ( strcmpi(key,"unban") == 0 ) { + } else if ( strcmpi(key,"unban") == 0 ) { return channel_pcban(sd,sub1,map_nick2sd(sub2),1); } else if ( strcmpi(key,"unbanall") == 0 ) { return channel_pcban(sd,sub1,NULL,2); + } else if ( strcmpi(key,"banlist") == 0 ) { + return channel_pcban(sd,sub1,NULL,3); } else if ( strcmpi(key,"setopt") == 0 ) { return channel_pcsetopt(sd,sub1,sub2,sub3); } else { Index: src/map/channel.c =================================================================== --- src/map/channel.c (revision 17295) +++ src/map/channel.c (working copy) @@ -20,6 +20,11 @@ static DBMap* channel_db; // channels DBMap* channel_get_db(void){ return channel_db; } +struct chan_banentry { + int char_id; + char char_name[NAME_LENGTH]; +} chan_banentry; + /* * Create *channel * - will then add it in channel_db if type not map or ally @@ -37,7 +42,7 @@ CREATE( channel, struct Channel, 1 ); //will exit on fail allocation channel->users = idb_alloc(DB_OPT_BASE); - channel->banned = idb_alloc(DB_OPT_BASE); + channel->banned = idb_alloc(DB_OPT_BASE|DB_OPT_RELEASE_DATA); channel->opt = CHAN_OPT_BASE; channel->type = chantype; channel->color = color; @@ -846,11 +851,16 @@ //let properly alter the list now switch(flag){ - case 0: - idb_put(channel->banned, tsd->status.char_id, tsd); + case 0: { + struct chan_banentry *cbe; + CREATE(cbe, struct chan_banentry, 1); + cbe->char_id = tsd->status.char_id; + strcpy(cbe->char_name,tsd->status.name); + idb_put(channel->banned, tsd->status.char_id, cbe); channel_clean(channel,tsd,0); sprintf(output, msg_txt(sd,1437),tsd->status.name,chname); // Player '%s' has now been banned from '%s' channel break; + } case 1: idb_remove(channel->banned, tsd->status.char_id); sprintf(output, msg_txt(sd,1441),tsd->status.name,chname); // Player '%s' has now been unbanned from the '%s' channel @@ -861,16 +871,16 @@ break; case 3: { DBIterator *iter = db_iterator(channel->banned); - struct map_session_data *pl_sd; + struct chan_banentry *cbe; sprintf(output, msg_txt(sd,1443), channel->name);// -- '%s' ban list clif_displaymessage(sd->fd, output); - for( pl_sd = dbi_first(iter); dbi_exists(iter); pl_sd = dbi_next(iter) ) { //for all users - sprintf(output, msg_txt(sd,1444),pl_sd->status.char_id,pl_sd->status.name); // %d: %s + for( cbe = dbi_first(iter); dbi_exists(iter); cbe = dbi_next(iter) ) { //for all users + sprintf(output, "%d %s",cbe->char_id,cbe->char_name); // %d: %s clif_displaymessage(sd->fd, output); } dbi_destroy(iter); } - break; + return 0; } clif_displaymessage(sd->fd, output); Index: src/map/clif.c =================================================================== --- src/map/clif.c (revision 17295) +++ src/map/clif.c (working copy) @@ -729,7 +729,7 @@ uint32 header=0x84b; #else uint8 buf[17]; - uint32 header=0x09b; + uint32 header=0x09e; #endif int view, offset=0; @@ -9159,9 +9159,7 @@ sd->pvp_lost = 0; } clif_map_property(sd, MAPPROPERTY_FREEPVPZONE); - } else - // set flag, if it's a duel [LuzZza] - if(sd->duel_group) + } else if(sd->duel_group) // set flag, if it's a duel [LuzZza] clif_map_property(sd, MAPPROPERTY_FREEPVPZONE); if (map[sd->bl.m].flag.gvg_dungeon)