Index: src/game/ChatHandler.cpp =================================================================== --- src/game/ChatHandler.cpp (revision 748) +++ src/game/ChatHandler.cpp (working copy) @@ -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,11 @@ else { GetPlayer()->SetFlag(PLAYER_FLAGS, 0x02); - data = sChatHandler.FillMessageData(CHAT_MSG_AFK, LANG_UNIVERSAL, reason.c_str(),_player->GetGUID()); - GetPlayer()->SendMessageToSet(data, false); + //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; + //delete data; } } break; case CHAT_MSG_DND: @@ -291,9 +302,9 @@ 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; + //data = sChatHandler.FillMessageData(CHAT_MSG_DND, LANG_UNIVERSAL, reason.c_str(),_player->GetGUID()); + //GetPlayer()->SendMessageToSet(data, false); + //delete data; } } break; default: Index: src/game/Guild.h =================================================================== --- src/game/Guild.h (revision 748) +++ src/game/Guild.h (working copy) @@ -168,6 +168,7 @@ GUILD_INVITE_S = 0x01, GUILD_QUIT_S = 0x02, GUILD_FOUNDER_S = 0x0C, + GUILD_OFFICER_S = 0x0D, }; enum GuildRankRights Index: src/game/InstanceSaveMgr.cpp =================================================================== --- src/game/InstanceSaveMgr.cpp (revision 748) +++ src/game/InstanceSaveMgr.cpp (working copy) @@ -37,6 +37,9 @@ void InstanceSavingManagement::BuildSavedInstancesForPlayer(Player *pPlayer) { + if(!pPlayer) + return; + bool result = false; bool hasBeenSaved = false; WorldPacket data; @@ -102,6 +105,9 @@ void InstanceSavingManagement::SavePlayerToInstance(Player *pPlayer, uint32 mapid) { + if(!pPlayer) + return; + WorldPacket data; instanceInfoListMutex.Acquire(); @@ -146,6 +152,9 @@ void InstanceSavingManagement::ResetSavedInstancesForPlayer(Player *pPlayer) { + if(!pPlayer) + return; + bool result; WorldPacket data; @@ -209,6 +218,9 @@ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++ bool InstanceSavingManagement::IsPlayerSavedToMap(uint32 mapid, Player *pPlayer) { + if(!pPlayer) + return; + instanceInfoListMutex.Acquire(); InstanceInfo::iterator itr = mInstanceInfoList.find( mapid ); @@ -230,6 +242,9 @@ } bool InstanceSavingManagement::IsPlayerSavedToInstanceId(uint32 mapid, uint32 instanceid, Player *pPlayer) { + if(!pPlayer) + return; + instanceInfoListMutex.Acquire(); InstanceInfo::iterator itr = mInstanceInfoList.find( mapid ); @@ -358,6 +373,9 @@ } void InstanceSavingManagement::SaveObjectStateToInstance(Unit *pUnit) { + if(!pUnit) + return; + instanceInfoListMutex.Acquire(); InstanceInfo::iterator itr = mInstanceInfoList.find( pUnit->GetMapId() ); if(itr != mInstanceInfoList.end()) @@ -392,6 +410,9 @@ Instance_Map_InstanceId_Holder *InstanceSavingManagement::GetRaidAndMMInstance(uint32 mapid, Player * pPlayer) { + if(!pPlayer) + return; + instanceInfoListMutex.Acquire(); InstanceInfo::iterator itr = mInstanceInfoList.find( mapid ); if(itr != mInstanceInfoList.end()) @@ -413,6 +434,9 @@ void InstanceSavingManagement::BuildRaidSavedInstancesForPlayer(Player *pPlayer) { + if(!pPlayer) + return; + /*hmm packet structure for this one? counter, mapid time instanceid */