Index:Guild.h =================================================================== --- Guild.h (revision 748) +++ Guild.h (revision 749) @@ -168,6 +168,7 @@ GUILD_INVITE_S = 0x01, GUILD_QUIT_S = 0x02, GUILD_FOUNDER_S = 0x0C, + GUILD_OFFICER_S = 0x0D, }; enum GuildRankRights Index:ChatHandler.cpp =================================================================== --- ChatHandler.cpp (revision 748) +++ ChatHandler.cpp (revision 749) @@ -158,7 +158,18 @@ { Guild *pGuild = objmgr.GetGuild( GetPlayer()->GetGuildId() ); if(pGuild) - pGuild->OfficerChannelChat(this, msg); + { + if(pGuild->HasRankRight(GetPlayer()->GetGuildRank(), GR_RIGHT_OFFCHATSPEAK)) + pGuild->OfficerChannelChat(this, msg); + else + { + WorldPacket data2(SMSG_GUILD_COMMAND_RESULT, 100); + data2 << uint32(GUILD_OFFICER_S); + data2 << pGuild->GetGuildName(); + data2 << uint32(C_R_DONT_HAVE_PERMISSION); + SendPacket(&data2); + } + } } sLog.outString("[officer] %s: %s", _player->GetName(), msg.c_str()); } break; @@ -274,11 +285,8 @@ else { GetPlayer()->SetFlag(PLAYER_FLAGS, 0x02); - data = sChatHandler.FillMessageData(CHAT_MSG_AFK, LANG_UNIVERSAL, reason.c_str(),_player->GetGUID()); - GetPlayer()->SendMessageToSet(data, false); if(sWorld.GetKickAFKPlayerTime()) sEventMgr.AddEvent(GetPlayer(),&Player::SoftDisconnect,EVENT_PLAYER_SOFT_DISCONNECT,sWorld.GetKickAFKPlayerTime(),1); - delete data; } } break; case CHAT_MSG_DND: @@ -291,9 +299,6 @@ else { GetPlayer()->SetFlag(PLAYER_FLAGS, 0x04); - data = sChatHandler.FillMessageData(CHAT_MSG_DND, LANG_UNIVERSAL, reason.c_str(),_player->GetGUID()); - GetPlayer()->SendMessageToSet(data, false); - delete data; } } break; default: