From 01ef119703ed9ce8276e9a899d3260ec05495d0a Mon Sep 17 00:00:00 2001 From: stfx Date: Sat, 24 Nov 2012 14:37:01 +0100 Subject: Fix receiving whispers while being dnd Signed-off-by: Nay --- src/server/game/Entities/Player/Player.cpp | 33 +++++++++--------------------- 1 file changed, 10 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index bca94517ef4..7dab5e15788 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -20089,42 +20089,29 @@ void Player::Whisper(const std::string& text, uint32 language, uint64 receiver) std::string _text(text); sScriptMgr->OnPlayerChat(this, CHAT_MSG_WHISPER, language, _text, rPlayer); - // when player you are whispering to is dnd, he cannot receive your message, unless you are in gm mode - if (!rPlayer->isDND() || isGameMaster()) - { - WorldPacket data(SMSG_MESSAGECHAT, 200); - BuildPlayerChat(&data, CHAT_MSG_WHISPER, _text, language); - rPlayer->GetSession()->SendPacket(&data); - - // not send confirmation for addon messages - if (!isAddonMessage) - { - data.Initialize(SMSG_MESSAGECHAT, 200); - rPlayer->BuildPlayerChat(&data, CHAT_MSG_WHISPER_INFORM, _text, language); - GetSession()->SendPacket(&data); - } - } - else if (!isAddonMessage) - // announce to player that player he is whispering to is dnd and cannot receive his message - ChatHandler(GetSession()).PSendSysMessage(LANG_PLAYER_DND, rPlayer->GetName().c_str(), rPlayer->dndMsg.c_str()); + WorldPacket data(SMSG_MESSAGECHAT, 200); + BuildPlayerChat(&data, CHAT_MSG_WHISPER, _text, language); + rPlayer->GetSession()->SendPacket(&data); // rest stuff shouldn't happen in case of addon message if (isAddonMessage) return; + data.Initialize(SMSG_MESSAGECHAT, 200); + rPlayer->BuildPlayerChat(&data, CHAT_MSG_WHISPER_INFORM, _text, language); + GetSession()->SendPacket(&data); + if (!isAcceptWhispers() && !isGameMaster() && !rPlayer->isGameMaster()) { SetAcceptWhispers(true); ChatHandler(GetSession()).SendSysMessage(LANG_COMMAND_WHISPERON); } - // announce to player that player he is whispering to is afk + // announce afk or dnd message if (rPlayer->isAFK()) ChatHandler(GetSession()).PSendSysMessage(LANG_PLAYER_AFK, rPlayer->GetName().c_str(), rPlayer->afkMsg.c_str()); - - // if player whisper someone, auto turn of dnd to be able to receive an answer - if (isDND() && !rPlayer->isGameMaster()) - ToggleDND(); + else if (rPlayer->isDND()) + ChatHandler(GetSession()).PSendSysMessage(LANG_PLAYER_DND, rPlayer->GetName().c_str(), rPlayer->dndMsg.c_str()); } void Player::PetSpellInitialize() -- cgit v1.2.3 From 51fadb57e0f0071064599509caab34c6b883b17b Mon Sep 17 00:00:00 2001 From: stfx Date: Sat, 24 Nov 2012 14:54:52 +0100 Subject: Allow setting afk/dnd message in afk/dnd state Also use the same variable to store the message for AFK and DND Signed-off-by: Nay --- src/server/game/Entities/Player/Player.cpp | 16 +++------- src/server/game/Entities/Player/Player.h | 7 ++-- src/server/game/Handlers/ChatHandler.cpp | 51 ++++++++++++++++++------------ 3 files changed, 39 insertions(+), 35 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 7dab5e15788..87a7b2e6277 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2031,24 +2031,18 @@ bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data) return true; } -bool Player::ToggleAFK() +void Player::ToggleAFK() { ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK); - bool state = HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK); - // afk player not allowed in battleground - if (state && InBattleground() && !InArena()) + if (isAFK() && InBattleground() && !InArena()) LeaveBattleground(); - - return state; } -bool Player::ToggleDND() +void Player::ToggleDND() { ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_DND); - - return HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_DND); } uint8 Player::GetChatTag() const @@ -20109,9 +20103,9 @@ void Player::Whisper(const std::string& text, uint32 language, uint64 receiver) // announce afk or dnd message if (rPlayer->isAFK()) - ChatHandler(GetSession()).PSendSysMessage(LANG_PLAYER_AFK, rPlayer->GetName().c_str(), rPlayer->afkMsg.c_str()); + ChatHandler(GetSession()).PSendSysMessage(LANG_PLAYER_AFK, rPlayer->GetName().c_str(), rPlayer->autoReplyMsg.c_str()); else if (rPlayer->isDND()) - ChatHandler(GetSession()).PSendSysMessage(LANG_PLAYER_DND, rPlayer->GetName().c_str(), rPlayer->dndMsg.c_str()); + ChatHandler(GetSession()).PSendSysMessage(LANG_PLAYER_DND, rPlayer->GetName().c_str(), rPlayer->autoReplyMsg.c_str()); } void Player::PetSpellInitialize() diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 1e8b6aedb3e..8fc13e1dda9 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1108,13 +1108,12 @@ class Player : public Unit, public GridObject Creature* GetNPCIfCanInteractWith(uint64 guid, uint32 npcflagmask); GameObject* GetGameObjectIfCanInteractWith(uint64 guid, GameobjectTypes type) const; - bool ToggleAFK(); - bool ToggleDND(); + void ToggleAFK(); + void ToggleDND(); bool isAFK() const { return HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK); } bool isDND() const { return HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_DND); } uint8 GetChatTag() const; - std::string afkMsg; - std::string dndMsg; + std::string autoReplyMsg; uint32 GetBarberShopCost(uint8 newhairstyle, uint8 newhaircolor, uint8 newfacialhair, BarberShopStyleEntry const* newSkin=NULL); diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index e4989816998..560cc904974 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -440,40 +440,51 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) } break; case CHAT_MSG_AFK: { - if ((msg.empty() || !_player->isAFK()) && !_player->isInCombat()) + if (!_player->isInCombat()) { - if (!_player->isAFK()) + if (_player->isAFK()) // Already AFK { if (msg.empty()) - msg = GetTrinityString(LANG_PLAYER_AFK_DEFAULT); - _player->afkMsg = msg; + _player->ToggleAFK(); // Remove AFK + else + _player->autoReplyMsg = msg; // Update message } + else // New AFK mode + { + _player->autoReplyMsg = msg.empty() ? GetTrinityString(LANG_PLAYER_AFK_DEFAULT) : msg; - sScriptMgr->OnPlayerChat(_player, type, lang, msg); + if (_player->isDND()) + _player->ToggleDND(); + + _player->ToggleAFK(); + } - _player->ToggleAFK(); - if (_player->isAFK() && _player->isDND()) - _player->ToggleDND(); + sScriptMgr->OnPlayerChat(_player, type, lang, msg); } - } break; + break; + } case CHAT_MSG_DND: { - if (msg.empty() || !_player->isDND()) + if (_player->isDND()) // Already DND { - if (!_player->isDND()) - { - if (msg.empty()) - msg = GetTrinityString(LANG_PLAYER_DND_DEFAULT); - _player->dndMsg = msg; - } + if (msg.empty()) + _player->ToggleDND(); // Remove DND + else + _player->autoReplyMsg = msg; // Update message + } + else // New DND mode + { + _player->autoReplyMsg = msg.empty() ? GetTrinityString(LANG_PLAYER_DND_DEFAULT) : msg; - sScriptMgr->OnPlayerChat(_player, type, lang, msg); + if (_player->isAFK()) + _player->ToggleAFK(); _player->ToggleDND(); - if (_player->isDND() && _player->isAFK()) - _player->ToggleAFK(); } - } break; + + sScriptMgr->OnPlayerChat(_player, type, lang, msg); + break; + } default: sLog->outError(LOG_FILTER_NETWORKIO, "CHAT: unknown message type %u, lang: %u", type, lang); break; -- cgit v1.2.3 From c33a1724ae96de3759d299038b1eabd7b93a631f Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 23 Dec 2012 13:21:00 -0500 Subject: Core/Spells: Spells that are usable while stunned should no longer have problems with stun auras that don't apply any mechanic. --- src/server/game/Spells/Spell.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index bb51d9d0e34..3cee51949bc 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -5615,7 +5615,7 @@ SpellCastResult Spell::CheckCasterAuras() const Unit::AuraEffectList const& stunAuras = m_caster->GetAuraEffectsByType(SPELL_AURA_MOD_STUN); for (Unit::AuraEffectList::const_iterator i = stunAuras.begin(); i != stunAuras.end(); ++i) { - if (!((*i)->GetSpellInfo()->GetAllEffectsMechanicMask() & (1<GetSpellInfo()->GetAllEffectsMechanicMask() && !((*i)->GetSpellInfo()->GetAllEffectsMechanicMask() & (1<