aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Chat
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-08-05 19:37:53 +0200
committerShauren <shauren.trinity@gmail.com>2021-08-08 00:18:05 +0200
commitcd5357dc185f95c6ef78089c5ab8bd2b885dd89f (patch)
tree0937cc060467205336311a3ba3bd04f5d334c34b /src/server/game/Chat
parent07f51437fc9ddba2810c090caa76ab294bcf777b (diff)
Core/PacketIO: 9.1.0 opcodes and packet structures
Diffstat (limited to 'src/server/game/Chat')
-rw-r--r--src/server/game/Chat/Channels/Channel.cpp2
-rw-r--r--src/server/game/Chat/Channels/Channel.h2
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.cpp9
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.h1
-rw-r--r--src/server/game/Chat/ChatLink.cpp26
-rw-r--r--src/server/game/Chat/ChatLink.h1
6 files changed, 40 insertions, 1 deletions
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp
index 0c2494305c4..f91b2aeca59 100644
--- a/src/server/game/Chat/Channels/Channel.cpp
+++ b/src/server/game/Chat/Channels/Channel.cpp
@@ -739,6 +739,7 @@ void Channel::Say(ObjectGuid const& guid, std::string const& what, uint32 lang)
LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale);
Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>* packet = new Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>();
+ packet->Data.ChannelGUID = _channelGuid;
if (Player* player = ObjectAccessor::FindConnectedPlayer(guid))
packet->Data.Initialize(CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, GetName(localeIdx));
else
@@ -783,6 +784,7 @@ void Channel::AddonSay(ObjectGuid const& guid, std::string const& prefix, std::s
LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale);
Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>* packet = new Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>();
+ packet->Data.ChannelGUID = _channelGuid;
if (Player* player = ObjectAccessor::FindConnectedPlayer(guid))
packet->Data.Initialize(CHAT_MSG_CHANNEL, isLogged ? LANG_ADDON_LOGGED : LANG_ADDON, player, player, what, 0, GetName(localeIdx), DEFAULT_LOCALE, prefix);
else
diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h
index dbeaf49c757..9d6eb906a50 100644
--- a/src/server/game/Chat/Channels/Channel.h
+++ b/src/server/game/Chat/Channels/Channel.h
@@ -180,6 +180,8 @@ class TC_GAME_API Channel
uint32 GetChannelId() const { return _channelId; }
bool IsConstant() const { return _channelId != 0; }
+ ObjectGuid GetGUID() const { return _channelGuid; }
+
bool IsLFG() const { return (GetFlags() & CHANNEL_FLAG_LFG) != 0; }
bool IsAnnounce() const { return _announceEnabled; }
diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp
index 9fb4bb0c210..c572ee48704 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.cpp
+++ b/src/server/game/Chat/Channels/ChannelMgr.cpp
@@ -73,6 +73,15 @@ Channel* ChannelMgr::GetChannelForPlayerByNamePart(std::string const& namePart,
return nullptr;
}
+Channel* ChannelMgr::GetChannelForPlayerByGuid(ObjectGuid channelGuid, Player* playerSearcher)
+{
+ for (Channel* channel : playerSearcher->GetJoinedChannels())
+ if (channel->GetGUID() == channelGuid)
+ return channel;
+
+ return nullptr;
+}
+
Channel* ChannelMgr::GetJoinChannel(uint32 channelId, std::string const& name, AreaTableEntry const* zoneEntry /*= nullptr*/)
{
if (channelId) // builtin
diff --git a/src/server/game/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h
index 23d268dc74c..796a1bd0d6e 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.h
+++ b/src/server/game/Chat/Channels/ChannelMgr.h
@@ -38,6 +38,7 @@ class TC_GAME_API ChannelMgr
public:
static ChannelMgr* ForTeam(uint32 team);
static Channel* GetChannelForPlayerByNamePart(std::string const& namePart, Player* playerSearcher);
+ static Channel* GetChannelForPlayerByGuid(ObjectGuid channelGuid, Player* playerSearcher);
Channel* GetJoinChannel(uint32 channelId, std::string const& name, AreaTableEntry const* zoneEntry = nullptr);
Channel* GetChannel(uint32 channelId, std::string const& name, Player* player, bool notify = true, AreaTableEntry const* zoneEntry = nullptr) const;
diff --git a/src/server/game/Chat/ChatLink.cpp b/src/server/game/Chat/ChatLink.cpp
index d1cf52203a4..1641e216a95 100644
--- a/src/server/game/Chat/ChatLink.cpp
+++ b/src/server/game/Chat/ChatLink.cpp
@@ -106,7 +106,7 @@ bool ChatLink::ValidateName(char* buffer, char const* /*context*/)
return true;
}
-// |color|Hitem:item_id:perm_ench_id:gem1:gem2:gem3:0:random_property:property_seed:reporter_level:reporter_spec:modifiers_mask:context:numBonusListIDs:bonusListIDs(%d):numModifiers:(modifierType(%d):modifierValue(%d)):gem1numBonusListIDs:gem1bonusListIDs(%d):gem2numBonusListIDs:gem2bonusListIDs(%d):gem3numBonusListIDs:gem3bonusListIDs(%d)|h[name]|h|r
+// |color|Hitem:item_id:perm_ench_id:gem1:gem2:gem3:0:random_property:property_seed:reporter_level:reporter_spec:modifiers_mask:context:numBonusListIDs:bonusListIDs(%d):numModifiers:(modifierType(%d):modifierValue(%d)):gem1numBonusListIDs:gem1bonusListIDs(%d):gem2numBonusListIDs:gem2bonusListIDs(%d):gem3numBonusListIDs:gem3bonusListIDs(%d):creator:use_enchant_id|h[name]|h|r
// |cffa335ee|Hitem:124382:0:0:0:0:0:0:0:0:0:0:0:4:42:562:565:567|h[Edict of Argus]|h|r");
bool ItemChatLink::Initialize(std::istringstream& iss)
{
@@ -365,6 +365,30 @@ bool ItemChatLink::Initialize(std::istringstream& iss)
}
}
+ if (!CheckDelimiter(iss, DELIMITER, "item"))
+ return false;
+
+ // guid as string
+ if (HasValue(iss))
+ {
+ std::array<char, 128> guidBuffer = { };
+ if (!iss.getline(guidBuffer.data(), 128, DELIMITER))
+ {
+ TC_LOG_TRACE("chat.system", "ChatHandler::isValidChatMessage('%s'): sequence finished unexpectedly while reading creator guid string", iss.str().c_str());
+ return false;
+ }
+ iss.unget(); // put next : back into stream
+ }
+
+ if (!CheckDelimiter(iss, DELIMITER, "item"))
+ return false;
+
+ if (HasValue(iss) && !ReadInt32(iss, _useEnchantId))
+ {
+ TC_LOG_TRACE("chat.system", "ChatHandler::isValidChatMessage('%s'): sequence finished unexpectedly while reading on use enchatment id", iss.str().c_str());
+ return false;
+ }
+
return true;
}
diff --git a/src/server/game/Chat/ChatLink.h b/src/server/game/Chat/ChatLink.h
index 69d82678ddb..60be2a61f21 100644
--- a/src/server/game/Chat/ChatLink.h
+++ b/src/server/game/Chat/ChatLink.h
@@ -76,6 +76,7 @@ protected:
int32 _reporterLevel;
int32 _reporterSpec;
int32 _context;
+ int32 _useEnchantId;
std::vector<int32> _bonusListIDs;
std::vector<std::pair<uint32, int32>> _modifiers;
std::vector<int32> _gemBonusListIDs[3];