aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBadgersson <83663557+Dekz120@users.noreply.github.com>2022-12-04 18:08:10 +0300
committerShauren <shauren.trinity@gmail.com>2023-01-12 22:55:18 +0100
commitab77b1d99254855d690670a4654cacec8b12daf6 (patch)
treea19978cca893c49fd86a4913e0e84ace241cd1c6
parent047807afea7f1b9e6fd27c8b37c7d932f56f40cb (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.cpp8
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.h4
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiersImpl.h6
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())