diff options
author | Badgersson <83663557+Dekz120@users.noreply.github.com> | 2022-12-04 18:08:10 +0300 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-01-12 22:55:18 +0100 |
commit | ab77b1d99254855d690670a4654cacec8b12daf6 (patch) | |
tree | a19978cca893c49fd86a4913e0e84ace241cd1c6 | |
parent | 047807afea7f1b9e6fd27c8b37c7d932f56f40cb (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
(cherry picked from commit 297541e9c9bf90d410922db397d2f94dff9592cc)
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
-rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiers.h | 4 | ||||
-rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiersImpl.h | 6 |
4 files changed, 11 insertions, 9 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 78425dbd281..3d51060c926 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -6222,13 +6222,13 @@ 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::PacketSenderRef sender(data); - Trinity::MessageDistDeliverer<Trinity::PacketSenderRef> notifier(this, sender, dist, own_team_only); + Trinity::MessageDistDeliverer<Trinity::PacketSenderRef> notifier(this, sender, dist, own_team_only, nullptr, required3dDist); Cell::VisitWorldObjects(this, notifier, dist); } @@ -21070,7 +21070,7 @@ void Player::SendChatMessageToSetInRange(ChatMsg chatMsg, Language language, std localizer(this); // Send to players - Trinity::MessageDistDeliverer<Trinity::LocalizedDo<Trinity::CustomChatTextBuilder>> notifier(this, localizer, range); + Trinity::MessageDistDeliverer<Trinity::LocalizedDo<Trinity::CustomChatTextBuilder>> notifier(this, localizer, range, false, nullptr, true); Cell::VisitWorldObjects(this, notifier, range); } @@ -21099,7 +21099,7 @@ void Player::TextEmote(std::string_view text, WorldObject const* /*= nullptr*/, WorldPackets::Chat::Chat packet; packet.Initialize(CHAT_MSG_EMOTE, LANG_UNIVERSAL, this, this, _text); - SendMessageToSetInRange(packet.Write(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), true, !GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHAT)); + SendMessageToSetInRange(packet.Write(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), true, !GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHAT), true); } void Player::WhisperAddon(std::string const& text, std::string const& prefix, bool isLogged, Player* receiver) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index f252e7d5a19..d8ca3a8568e 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2156,7 +2156,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; void SendChatMessageToSetInRange(ChatMsg chatMsg, Language lanugageId, std::string&& text, float range); diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index c7b79eb0b65..c345d1d07e7 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -150,10 +150,12 @@ namespace Trinity float i_distSq; Team team; Player const* skipped_receiver; - MessageDistDeliverer(WorldObject const* src, PacketSender& packetSender, float dist, bool own_team_only = false, Player const* skipped = nullptr) + bool required3dDist; + MessageDistDeliverer(WorldObject const* src, PacketSender& packetSender, float dist, bool own_team_only = false, Player const* skipped = nullptr, bool req3dDist = false) : i_source(src), i_packetSender(packetSender), i_phaseShift(&src->GetPhaseShift()), i_distSq(dist * dist) , team(TEAM_OTHER) , skipped_receiver(skipped) + , required3dDist(req3dDist) { if (own_team_only) if (Player const* player = src->ToPlayer()) diff --git a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h index 867cc3c7697..e0965427763 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h +++ b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h @@ -43,7 +43,7 @@ void Trinity::MessageDistDeliverer<PacketSender>::Visit(PlayerMapType& m) const if (!target->InSamePhase(*i_phaseShift)) continue; - if (target->GetExactDist2dSq(i_source) > i_distSq) + if ((!required3dDist ? target->GetExactDist2dSq(i_source) : target->GetExactDistSq(i_source)) > i_distSq) continue; // Send packet to all who are sharing the player's vision @@ -69,7 +69,7 @@ void Trinity::MessageDistDeliverer<PacketSender>::Visit(CreatureMapType& m) cons if (!target->InSamePhase(*i_phaseShift)) continue; - if (target->GetExactDist2dSq(i_source) > i_distSq) + if ((!required3dDist ? target->GetExactDist2dSq(i_source) : target->GetExactDistSq(i_source)) > i_distSq) continue; // Send packet to all who are sharing the creature's vision @@ -92,7 +92,7 @@ void Trinity::MessageDistDeliverer<PacketSender>::Visit(DynamicObjectMapType& m) if (!target->InSamePhase(*i_phaseShift)) continue; - if (target->GetExactDist2dSq(i_source) > i_distSq) + if ((!required3dDist ? target->GetExactDist2dSq(i_source) : target->GetExactDistSq(i_source)) > i_distSq) continue; if (Unit* caster = target->GetCaster()) |