diff options
author | Badgersson <83663557+Dekz120@users.noreply.github.com> | 2022-12-04 18:08:10 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-04 16:08:10 +0100 |
commit | 297541e9c9bf90d410922db397d2f94dff9592cc (patch) | |
tree | ec9ab2f971cac8ce7ef1d6ecf8e7f6c69d23b153 /src | |
parent | 31e7516b83aa84685b1f1cbbce2eb3bb24695585 (diff) |
Core/Player: Vertical "Say" distance (#28544)
* Core/Player: chat messages use 3d distance Fix #26593
* Core/Player: chat messages use 3d distance
new arg in SendMessageToSetInRange
Fix #26593
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
-rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiers.cpp | 36 | ||||
-rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiers.h | 4 |
4 files changed, 39 insertions, 13 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 9f7dd645f9d..444f00206fd 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -6358,12 +6358,12 @@ void Player::SendMessageToSetInRange(WorldPacket const* data, float dist, bool s Cell::VisitWorldObjects(this, notifier, dist); } -void Player::SendMessageToSetInRange(WorldPacket const* data, float dist, bool self, bool own_team_only) const +void Player::SendMessageToSetInRange(WorldPacket const* data, float dist, bool self, bool own_team_only, bool required3dDist /*= false*/) const { if (self) SendDirectMessage(data); - Trinity::MessageDistDeliverer notifier(this, data, dist, own_team_only); + Trinity::MessageDistDeliverer notifier(this, data, dist, own_team_only, nullptr, required3dDist); Cell::VisitWorldObjects(this, notifier, dist); } @@ -20782,7 +20782,7 @@ void Player::Say(std::string_view text, Language language, WorldObject const* /* WorldPacket data; ChatHandler::BuildChatPacket(data, CHAT_MSG_SAY, language, this, this, _text); - SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), true); + SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), true, false, true); } void Player::Say(uint32 textId, WorldObject const* target /*= nullptr*/) @@ -20797,7 +20797,7 @@ void Player::Yell(std::string_view text, Language language, WorldObject const* / WorldPacket data; ChatHandler::BuildChatPacket(data, CHAT_MSG_YELL, language, this, this, _text); - SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL), true); + SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL), true, false, true); } void Player::Yell(uint32 textId, WorldObject const* target /*= nullptr*/) @@ -20812,7 +20812,7 @@ void Player::TextEmote(std::string_view text, WorldObject const* /*= nullptr*/, WorldPacket data; ChatHandler::BuildChatPacket(data, CHAT_MSG_EMOTE, LANG_UNIVERSAL, this, this, _text); - SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), true, !GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHAT)); + SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), true, !GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHAT), true); } void Player::TextEmote(uint32 textId, WorldObject const* target /*= nullptr*/, bool /*isBossEmote = false*/) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 1a8841338f2..673374441ca 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1691,7 +1691,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SendMessageToSet(WorldPacket const* data, bool self) const override { SendMessageToSetInRange(data, GetVisibilityRange(), self); } void SendMessageToSetInRange(WorldPacket const* data, float dist, bool self) const override; - void SendMessageToSetInRange(WorldPacket const* data, float dist, bool self, bool own_team_only) const; + void SendMessageToSetInRange(WorldPacket const* data, float dist, bool self, bool own_team_only, bool required3dDist = false) const; void SendMessageToSet(WorldPacket const* data, Player const* skipped_rcvr) const override; Corpse* GetCorpse() const; diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp index 9612ace80ba..5c5ad3a948d 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp +++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp @@ -258,8 +258,16 @@ void MessageDistDeliverer::Visit(PlayerMapType &m) if (!target->InSamePhase(i_phaseMask)) continue; - if (target->GetExactDist2dSq(i_source) > i_distSq) - continue; + if (required3dDist) + { + if (target->GetExactDistSq(i_source) > i_distSq) + continue; + } + else + { + if (target->GetExactDist2dSq(i_source) > i_distSq) + continue; + } // Send packet to all who are sharing the player's vision if (target->HasSharedVision()) @@ -283,8 +291,16 @@ void MessageDistDeliverer::Visit(CreatureMapType &m) if (!target->InSamePhase(i_phaseMask)) continue; - if (target->GetExactDist2dSq(i_source) > i_distSq) - continue; + if (required3dDist) + { + if (target->GetExactDistSq(i_source) > i_distSq) + continue; + } + else + { + if (target->GetExactDist2dSq(i_source) > i_distSq) + continue; + } // Send packet to all who are sharing the creature's vision if (target->HasSharedVision()) @@ -305,8 +321,16 @@ void MessageDistDeliverer::Visit(DynamicObjectMapType &m) if (!target->InSamePhase(i_phaseMask)) continue; - if (target->GetExactDist2dSq(i_source) > i_distSq) - continue; + if (required3dDist) + { + if (target->GetExactDistSq(i_source) > i_distSq) + continue; + } + else + { + if (target->GetExactDist2dSq(i_source) > i_distSq) + continue; + } if (Unit* caster = target->GetCaster()) { diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index 65fb265c9d9..5448b8e93d9 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -122,10 +122,12 @@ namespace Trinity float i_distSq; uint32 team; Player const* skipped_receiver; - MessageDistDeliverer(WorldObject const* src, WorldPacket const* msg, float dist, bool own_team_only = false, Player const* skipped = nullptr) + bool required3dDist; + MessageDistDeliverer(WorldObject const* src, WorldPacket const* msg, float dist, bool own_team_only = false, Player const* skipped = nullptr, bool req3dDist = false) : i_source(src), i_message(msg), i_phaseMask(src->GetPhaseMask()), i_distSq(dist * dist) , team(0) , skipped_receiver(skipped) + , required3dDist(req3dDist) { if (own_team_only) if (Player const* player = src->ToPlayer()) |