Core/Packets: moved chat packet building function to packet builder class

This commit is contained in:
joschiwald
2014-12-23 00:06:36 +01:00
parent bf8eff8545
commit 6c6e4d4328
27 changed files with 249 additions and 232 deletions
@@ -742,7 +742,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (e.action.flee.withEmote)
{
Trinity::BroadcastTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, BROADCAST_TEXT_FLEE_FOR_ASSIST);
sCreatureTextMgr->SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE);
CreatureTextMgr::SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE);
}
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_FLEE_FOR_ASSIST: %s DoFleeToGetAssistance", me->GetGUID().ToString().c_str());
break;
@@ -993,7 +993,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (e.action.callHelp.withEmote)
{
Trinity::BroadcastTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, BROADCAST_TEXT_CALL_FOR_HELP);
sCreatureTextMgr->SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE);
CreatureTextMgr::SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE);
}
TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_FOR_HELP: %s", me->GetGUID().ToString().c_str());
}
@@ -71,8 +71,9 @@ namespace Trinity
void do_helper(WorldPacket& data, char const* text)
{
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, _msgtype, LANG_UNIVERSAL, _source, _source, text);
data = *packet.Write();
packet.Initalize(_msgtype, LANG_UNIVERSAL, _source, _source, text);
packet.Write();
data = packet.Move();
}
ChatMsg _msgtype;
@@ -97,8 +98,9 @@ namespace Trinity
snprintf(str, 2048, text, arg1str, arg2str);
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, _msgtype, LANG_UNIVERSAL, _source, _source, str);
data = *packet.Write();
packet.Initalize(_msgtype, LANG_UNIVERSAL, _source, _source, str);
packet.Write();
data = packet.Move();
}
private:
+2 -2
View File
@@ -625,10 +625,10 @@ void Channel::Say(ObjectGuid const& guid, std::string const& what, uint32 lang)
WorldPackets::Chat::Chat packet;
if (Player* player = ObjectAccessor::FindConnectedPlayer(guid))
ChatHandler::BuildChatPacket(&packet, CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, _name);
packet.Initalize(CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, _name);
else
{
ChatHandler::BuildChatPacket(&packet, CHAT_MSG_CHANNEL, Language(lang), NULL, NULL, what, 0, _name);
packet.Initalize(CHAT_MSG_CHANNEL, Language(lang), nullptr, nullptr, what, 0, _name);
packet.SenderGUID = guid;
packet.TargetGUID = guid;
}
+3 -55
View File
@@ -212,7 +212,7 @@ void ChatHandler::SendSysMessage(const char *str)
while (char* line = LineFromMessage(pos))
{
BuildChatPacket(&packet, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line);
packet.Initalize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
m_session->SendPacket(packet.Write());
}
@@ -230,7 +230,7 @@ void ChatHandler::SendGlobalSysMessage(const char *str)
while (char* line = LineFromMessage(pos))
{
BuildChatPacket(&packet, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line);
packet.Initalize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
sWorld->SendGlobalMessage(packet.Write());
}
@@ -248,7 +248,7 @@ void ChatHandler::SendGlobalGMSysMessage(const char *str)
while (char* line = LineFromMessage(pos))
{
BuildChatPacket(&packet, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line);
packet.Initalize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
sWorld->SendGlobalGMMessage(packet.Write());
}
@@ -630,58 +630,6 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd)
return ShowHelpForSubCommands(table, "", cmd);
}
void ChatHandler::BuildChatPacket(WorldPackets::Chat::Chat* packet, ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string const& message,
uint32 achievementId /*= 0*/, std::string const& channelName /*= ""*/, LocaleConstant locale /*= DEFAULT_LOCALE*/, std::string const& addonPrefix /*= ""*/)
{
// Clear everything because same packet can be used multiple times
packet->Reset();
packet->SenderGUID.Clear();
packet->SenderAccountGUID.Clear();
packet->SenderGuildGUID.Clear();
packet->PartyGUID.Clear();
packet->TargetGUID.Clear();
packet->SenderName.clear();
packet->TargetName.clear();
packet->ChatFlags = CHAT_FLAG_NONE;
packet->SlashCmd = chatType;
packet->Language = language;
if (sender)
{
packet->SenderGUID = sender->GetGUID();
if (Creature const* creatureSender = sender->ToCreature())
packet->SenderName = creatureSender->GetNameForLocaleIdx(locale);
if (Player const* playerSender = sender->ToPlayer())
{
packet->SenderAccountGUID = playerSender->GetSession()->GetAccountGUID();
packet->ChatFlags = playerSender->GetChatFlags();
if (Guild const* guild = playerSender->GetGuild())
packet->SenderGuildGUID = guild->GetGUID();
if (Group const* group = playerSender->GetGroup())
packet->PartyGUID = group->GetGUID();
}
}
if (receiver)
{
packet->TargetGUID = receiver->GetGUID();
if (Creature const* creatureReceiver = receiver->ToCreature())
packet->TargetName = creatureReceiver->GetNameForLocaleIdx(locale);
}
packet->SenderVirtualAddress = GetVirtualRealmAddress();
packet->TargetVirtualAddress = GetVirtualRealmAddress();
packet->AchievementID = achievementId;
packet->Channel = channelName;
packet->Prefix = addonPrefix;
packet->ChatText = message;
}
Player* ChatHandler::getSelectedPlayer()
{
if (!m_session)
-2
View File
@@ -54,8 +54,6 @@ class ChatHandler
explicit ChatHandler(WorldSession* session) : m_session(session), sentErrorMessage(false) { }
virtual ~ChatHandler() { }
static void BuildChatPacket(WorldPackets::Chat::Chat* packet, ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string const& message, uint32 achievementId = 0, std::string const& channelName = "", LocaleConstant locale = DEFAULT_LOCALE, std::string const& addonPrefix = "");
static char* LineFromMessage(char*& pos) { char* start = strtok(pos, "\n"); pos = NULL; return start; }
// function with different implementation for chat/console
+6 -6
View File
@@ -20232,7 +20232,7 @@ void Player::Say(std::string const& text, Language language, WorldObject const*
sScriptMgr->OnPlayerChat(this, CHAT_MSG_SAY, language, _text);
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, CHAT_MSG_SAY, language, this, this, _text);
packet.Initalize(CHAT_MSG_SAY, language, this, this, _text);
SendMessageToSetInRange(packet.Write(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), true);
}
@@ -20242,7 +20242,7 @@ void Player::Yell(std::string const& text, Language language, WorldObject const*
sScriptMgr->OnPlayerChat(this, CHAT_MSG_YELL, language, _text);
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, CHAT_MSG_YELL, language, this, this, _text);
packet.Initalize(CHAT_MSG_YELL, language, this, this, _text);
SendMessageToSetInRange(packet.Write(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL), true);
}
@@ -20252,7 +20252,7 @@ void Player::TextEmote(std::string const& text, WorldObject const* /*= nullptr*/
sScriptMgr->OnPlayerChat(this, CHAT_MSG_EMOTE, LANG_UNIVERSAL, _text);
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, CHAT_MSG_EMOTE, LANG_UNIVERSAL, this, this, _text);
packet.Initalize(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));
}
@@ -20265,7 +20265,7 @@ void Player::WhisperAddon(std::string const& text, const std::string& prefix, Pl
return;
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, CHAT_MSG_WHISPER, LANG_ADDON, this, this, text, 0, "", DEFAULT_LOCALE, prefix);
packet.Initalize(CHAT_MSG_WHISPER, LANG_ADDON, this, this, text, 0, "", DEFAULT_LOCALE, prefix);
receiver->SendDirectMessage(packet.Write());
}
@@ -20282,14 +20282,14 @@ void Player::Whisper(std::string const& text, Language language, Player* target,
sScriptMgr->OnPlayerChat(this, CHAT_MSG_WHISPER, language, _text, target);
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, CHAT_MSG_WHISPER, Language(language), this, this, _text);
packet.Initalize(CHAT_MSG_WHISPER, Language(language), this, this, _text);
target->SendDirectMessage(packet.Write());
// rest stuff shouldn't happen in case of addon message
if (isAddonMessage)
return;
ChatHandler::BuildChatPacket(&packet, CHAT_MSG_WHISPER_INFORM, Language(language), target, target, _text);
packet.Initalize(CHAT_MSG_WHISPER_INFORM, Language(language), target, target, _text);
SendDirectMessage(packet.Write());
if (!isAcceptWhispers() && !IsGameMaster() && !target->IsGameMaster())
+1 -1
View File
@@ -2107,7 +2107,7 @@ class Player : public Unit, public GridObject<Player>
void UpdateUnderwaterState(Map* m, float x, float y, float z) override;
void SendMessageToSet(WorldPacket const* data, bool self) override {SendMessageToSetInRange(data, GetVisibilityRange(), self); };// overwrite Object::SendMessageToSet
void SendMessageToSetInRange(WorldPacket const* data, float fist, bool self) override;// overwrite Object::SendMessageToSetInRange
void SendMessageToSetInRange(WorldPacket const* data, float dist, bool self) override; // overwrite Object::SendMessageToSetInRange
void SendMessageToSetInRange(WorldPacket const* data, float dist, bool self, bool own_team_only);
void SendMessageToSet(WorldPacket const* data, Player const* skipped_rcvr) override;
+2 -5
View File
@@ -6958,7 +6958,6 @@ ReputationRank Unit::GetReactionTo(Unit const* target) const
return *repRank;
}
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
{
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
@@ -6989,8 +6988,6 @@ ReputationRank Unit::GetReactionTo(Unit const* target) const
{
if (FactionTemplateEntry const* targetFactionTemplateEntry = target->GetFactionTemplateEntry())
{
if (ReputationRank const* repRank = selfPlayerOwner->GetReputationMgr().GetForcedRankIfAny(targetFactionTemplateEntry))
return *repRank;
if (!selfPlayerOwner->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_IGNORE_REPUTATION))
{
if (FactionEntry const* targetFactionEntry = sFactionStore.LookupEntry(targetFactionTemplateEntry->Faction))
@@ -16459,7 +16456,7 @@ void Unit::Whisper(std::string const& text, Language language, Player* target, b
LocaleConstant locale = target->GetSession()->GetSessionDbLocaleIndex();
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, isBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, language, this, target, text, 0, "", locale);
packet.Initalize(isBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, language, this, target, text, 0, "", locale);
target->SendDirectMessage(packet.Write());
}
@@ -16506,6 +16503,6 @@ void Unit::Whisper(uint32 textId, Player* target, bool isBossWhisper /*= false*/
LocaleConstant locale = target->GetSession()->GetSessionDbLocaleIndex();
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, isBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, LANG_UNIVERSAL, this, target, bct->GetText(locale, getGender()), 0, "", locale);
packet.Initalize(isBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, LANG_UNIVERSAL, this, target, bct->GetText(locale, getGender()), 0, "", locale);
target->SendDirectMessage(packet.Write());
}
+2 -2
View File
@@ -2595,7 +2595,7 @@ void Guild::BroadcastToGuild(WorldSession* session, bool officerOnly, std::strin
if (session && session->GetPlayer() && _HasRankRight(session->GetPlayer(), officerOnly ? GR_RIGHT_OFFCHATSPEAK : GR_RIGHT_GCHATSPEAK))
{
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, Language(language), session->GetPlayer(), NULL, msg);
packet.Initalize(officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, Language(language), session->GetPlayer(), nullptr, msg);
WorldPacket const* data = packet.Write();
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
if (Player* player = itr->second->FindConnectedPlayer())
@@ -2610,7 +2610,7 @@ void Guild::BroadcastAddonToGuild(WorldSession* session, bool officerOnly, std::
if (session && session->GetPlayer() && _HasRankRight(session->GetPlayer(), officerOnly ? GR_RIGHT_OFFCHATSPEAK : GR_RIGHT_GCHATSPEAK))
{
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, LANG_ADDON, session->GetPlayer(), NULL, msg, 0, "", DEFAULT_LOCALE, prefix);
packet.Initalize(officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, LANG_ADDON, session->GetPlayer(), nullptr, msg, 0, "", DEFAULT_LOCALE, prefix);
WorldPacket const* data = packet.Write();
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
if (Player* player = itr->second->FindPlayer())
+26 -58
View File
@@ -285,7 +285,7 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg,
sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group);
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, ChatMsg(type), Language(lang), sender, NULL, msg);
packet.Initalize(ChatMsg(type), Language(lang), sender, nullptr, msg);
group->BroadcastPacket(packet.Write(), false, group->GetMemberGroup(GetPlayer()->GetGUID()));
break;
}
@@ -327,7 +327,7 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg,
sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group);
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, ChatMsg(type), Language(lang), sender, NULL, msg);
packet.Initalize(ChatMsg(type), Language(lang), sender, nullptr, msg);
group->BroadcastPacket(packet.Write(), false);
break;
}
@@ -341,7 +341,7 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg,
WorldPackets::Chat::Chat packet;
//in battleground, raid warning is sent only to players in battleground - code is ok
ChatHandler::BuildChatPacket(&packet, CHAT_MSG_RAID_WARNING, Language(lang), sender, NULL, msg);
packet.Initalize(CHAT_MSG_RAID_WARNING, Language(lang), sender, NULL, msg);
group->BroadcastPacket(packet.Write(), false);
break;
}
@@ -446,7 +446,7 @@ void WorldSession::HandleChatAddonMessage(ChatMsg type, std::string prefix, std:
break;
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, type, LANG_ADDON, sender, NULL, text, 0U, "", DEFAULT_LOCALE, prefix);
packet.Initalize(type, LANG_ADDON, sender, nullptr, text, 0, "", DEFAULT_LOCALE, prefix);
group->BroadcastAddonMessagePacket(packet.Write(), prefix, true, -1, sender->GetGUID());
break;
}
@@ -535,57 +535,27 @@ void WorldSession::HandleEmoteOpcode(WorldPacket& recvData)
GetPlayer()->HandleEmoteCommand(emote);
}
namespace Trinity
{
class EmoteChatBuilder
{
public:
EmoteChatBuilder(Player const& player, uint32 soundIndex, uint32 emoteID, Unit const* target)
: _player(player), _soundIndex(soundIndex), _emoteID(emoteID), _target(target) { }
void operator()(WorldPacket& data, LocaleConstant loc_idx)
{
WorldPackets::Chat::STextEmote packet;
packet.SourceGUID = _player.GetGUID();
packet.SourceAccountGUID = _player.GetSession()->GetAccountGUID();
if (_target)
packet.TargetGUID = _target->GetGUID();
packet.EmoteID = _emoteID;
packet.SoundIndex = _soundIndex;
data = *packet.Write();
}
private:
Player const& _player;
uint32 _soundIndex;
uint32 _emoteID;
Unit const* _target;
};
}
void WorldSession::HandleTextEmoteOpcode(WorldPackets::Chat::CTextEmote& packet)
{
Player* player = GetPlayer();
if (!player->IsAlive())
if (!_player->IsAlive())
return;
if (!player->CanSpeak())
if (!_player->CanSpeak())
{
std::string timeStr = secsToTimeString(m_muteTime - time(NULL));
SendNotification(GetTrinityString(LANG_WAIT_BEFORE_SPEAKING), timeStr.c_str());
return;
}
sScriptMgr->OnPlayerTextEmote(player, packet.SoundIndex, packet.EmoteID, packet.Target);
sScriptMgr->OnPlayerTextEmote(_player, packet.SoundIndex, packet.EmoteID, packet.Target);
EmotesTextEntry const* em = sEmotesTextStore.LookupEntry(packet.EmoteID);
if (!em)
return;
uint32 emote_anim = em->EmoteID;
uint32 emoteAnim = em->EmoteID;
switch (emote_anim)
switch (emoteAnim)
{
case EMOTE_STATE_SLEEP:
case EMOTE_STATE_SIT:
@@ -594,34 +564,32 @@ void WorldSession::HandleTextEmoteOpcode(WorldPackets::Chat::CTextEmote& packet)
break;
case EMOTE_STATE_DANCE:
case EMOTE_STATE_READ:
player->SetUInt32Value(UNIT_NPC_EMOTESTATE, emote_anim);
_player->SetUInt32Value(UNIT_NPC_EMOTESTATE, emoteAnim);
break;
default:
// Only allow text-emotes for "dead" entities (feign death included)
if (player->HasUnitState(UNIT_STATE_DIED))
if (_player->HasUnitState(UNIT_STATE_DIED))
break;
player->HandleEmoteCommand(emote_anim);
_player->HandleEmoteCommand(emoteAnim);
break;
}
WorldPackets::Chat::STextEmote textEmote;
textEmote.SourceGUID = _player->GetGUID();
textEmote.SourceAccountGUID = GetAccountGUID();
textEmote.TargetGUID = packet.Target;
textEmote.EmoteID = packet.EmoteID;
textEmote.SoundIndex = packet.SoundIndex;
_player->SendMessageToSetInRange(textEmote.Write(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), true);
Unit* unit = ObjectAccessor::GetUnit(*_player, packet.Target);
CellCoord p = Trinity::ComputeCellCoord(player->GetPositionX(), player->GetPositionY());
_player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE, packet.SoundIndex, 0, 0, unit);
Cell cell(p);
cell.SetNoCreate();
Trinity::EmoteChatBuilder emote_builder(*player, packet.SoundIndex, packet.EmoteID, unit);
Trinity::LocalizedPacketDo<Trinity::EmoteChatBuilder > emote_do(emote_builder);
Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::EmoteChatBuilder > > emote_worker(player, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), emote_do);
TypeContainerVisitor<Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::EmoteChatBuilder> >, WorldTypeMapContainer> message(emote_worker);
cell.Visit(p, message, *player->GetMap(), *player, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE));
player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE, packet.SoundIndex, 0, 0, unit);
//Send scripted event call
if (unit && unit->GetTypeId() == TYPEID_UNIT && ((Creature*)unit)->AI())
((Creature*)unit)->AI()->ReceiveEmote(player, packet.SoundIndex);
// Send scripted event call
if (unit)
if (Creature* creature = unit->ToCreature())
creature->AI()->ReceiveEmote(_player, packet.SoundIndex);
}
void WorldSession::HandleChatIgnoredOpcode(WorldPacket& recvData)
@@ -654,7 +622,7 @@ void WorldSession::HandleChatIgnoredOpcode(WorldPacket& recvData)
return;
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, CHAT_MSG_IGNORED, LANG_UNIVERSAL, _player, _player, GetPlayer()->GetName());
packet.Initalize(CHAT_MSG_IGNORED, LANG_UNIVERSAL, _player, _player, GetPlayer()->GetName());
player->SendDirectMessage(packet.Write());
}
+4 -7
View File
@@ -25,10 +25,7 @@ namespace WorldPackets
class Packet
{
public:
Packet(WorldPacket&& worldPacket) : _worldPacket(std::move(worldPacket))
{
_connectionIndex = _worldPacket.GetConnection();
}
Packet(WorldPacket&& worldPacket) : _worldPacket(std::move(worldPacket)) { }
virtual ~Packet() = default;
@@ -39,11 +36,10 @@ namespace WorldPackets
virtual void Read() = 0;
size_t GetSize() const { return _worldPacket.size(); }
ConnectionType GetConnection() const { return _connectionIndex; }
ConnectionType GetConnection() const { return _worldPacket.GetConnection(); }
protected:
WorldPacket _worldPacket;
ConnectionType _connectionIndex;
};
class ServerPacket : public Packet
@@ -53,7 +49,8 @@ namespace WorldPackets
void Read() override final { ASSERT(!"Read not implemented for server packets."); }
void Reset() { _worldPacket.clear(); }
void Clear() { _worldPacket.clear(); }
WorldPacket&& Move() { return std::move(_worldPacket); }
OpcodeServer GetOpcode() const { return OpcodeServer(_worldPacket.GetOpcode()); }
};
+61 -7
View File
@@ -16,6 +16,9 @@
*/
#include "ChatPackets.h"
#include "Group.h"
#include "Player.h"
#include "World.h"
void WorldPackets::Chat::ChatMessage::Read()
{
@@ -38,7 +41,6 @@ void WorldPackets::Chat::ChatMessageChannel::Read()
_worldPacket >> Language;
uint32 targetLen = _worldPacket.ReadBits(9);
uint32 textLen = _worldPacket.ReadBits(8);
_worldPacket.ResetBitPos();
Target = _worldPacket.ReadString(targetLen);
Text = _worldPacket.ReadString(textLen);
}
@@ -79,10 +81,62 @@ void WorldPackets::Chat::ChatMessageEmote::Read()
Text = _worldPacket.ReadString(len);
}
void WorldPackets::Chat::Chat::Initalize(ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string message,
uint32 achievementId /*= 0*/, std::string channelName /*= ""*/, LocaleConstant locale /*= DEFAULT_LOCALE*/, std::string addonPrefix /*= ""*/)
{
// Clear everything because same packet can be used multiple times
Clear();
SenderGUID.Clear();
SenderAccountGUID.Clear();
SenderGuildGUID.Clear();
PartyGUID.Clear();
TargetGUID.Clear();
SenderName.clear();
TargetName.clear();
_ChatFlags = CHAT_FLAG_NONE;
SlashCmd = chatType;
_Language = language;
if (sender)
{
SenderGUID = sender->GetGUID();
if (Creature const* creatureSender = sender->ToCreature())
SenderName = creatureSender->GetNameForLocaleIdx(locale);
if (Player const* playerSender = sender->ToPlayer())
{
SenderAccountGUID = playerSender->GetSession()->GetAccountGUID();
_ChatFlags = playerSender->GetChatFlags();
SenderGuildGUID = ObjectGuid::Create<HighGuid::Guild>(playerSender->GetGuildId());
if (Group const* group = playerSender->GetGroup())
PartyGUID = group->GetGUID();
}
}
if (receiver)
{
TargetGUID = receiver->GetGUID();
if (Creature const* creatureReceiver = receiver->ToCreature())
TargetName = creatureReceiver->GetNameForLocaleIdx(locale);
}
SenderVirtualAddress = GetVirtualRealmAddress();
TargetVirtualAddress = GetVirtualRealmAddress();
AchievementID = achievementId;
_Channel = std::move(channelName);
Prefix = std::move(addonPrefix);
ChatText = std::move(message);
}
WorldPacket const* WorldPackets::Chat::Chat::Write()
{
_worldPacket << SlashCmd;
_worldPacket << Language;
_worldPacket << _Language;
_worldPacket << SenderGUID;
_worldPacket << SenderGuildGUID;
_worldPacket << SenderAccountGUID;
@@ -95,15 +149,15 @@ WorldPacket const* WorldPackets::Chat::Chat::Write()
_worldPacket.WriteBits(SenderName.length(), 11);
_worldPacket.WriteBits(TargetName.length(), 11);
_worldPacket.WriteBits(Prefix.length(), 5);
_worldPacket.WriteBits(Channel.length(), 7);
_worldPacket.WriteBits(_Channel.length(), 7);
_worldPacket.WriteBits(ChatText.length(), 12);
_worldPacket.WriteBits(ChatFlags, 10);
_worldPacket.WriteBits(_ChatFlags, 10);
_worldPacket.WriteBit(HideChatLog);
_worldPacket.WriteBit(FakeSenderName);
_worldPacket.WriteString(SenderName);
_worldPacket.WriteString(TargetName);
_worldPacket.WriteString(Prefix);
_worldPacket.WriteString(Channel);
_worldPacket.WriteString(_Channel);
_worldPacket.WriteString(ChatText);
return &_worldPacket;
@@ -113,7 +167,7 @@ WorldPacket const* WorldPackets::Chat::Emote::Write()
{
_worldPacket << Guid;
_worldPacket << EmoteID;
return &_worldPacket;
}
@@ -131,6 +185,6 @@ WorldPacket const* WorldPackets::Chat::STextEmote::Write()
_worldPacket << EmoteID;
_worldPacket << SoundIndex;
_worldPacket << TargetGUID;
return &_worldPacket;
}
+6 -5
View File
@@ -134,10 +134,11 @@ namespace WorldPackets
public:
Chat() : ServerPacket(SMSG_MESSAGECHAT, 100) { }
void Initalize(ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string message, uint32 achievementId = 0, std::string channelName = "", LocaleConstant locale = DEFAULT_LOCALE, std::string addonPrefix = "");
WorldPacket const* Write() override;
uint8 SlashCmd = 0;
uint8 Language = LANG_UNIVERSAL;
uint8 SlashCmd = 0; ///< @see enum ChatMsg
uint8 _Language = LANG_UNIVERSAL;
ObjectGuid SenderGUID;
ObjectGuid SenderGuildGUID;
ObjectGuid SenderAccountGUID;
@@ -147,11 +148,11 @@ namespace WorldPackets
uint32 TargetVirtualAddress = 0;
std::string SenderName;
std::string TargetName;
std::string Prefix;
std::string Channel;
std::string Prefix; ///< Addon Prefix
std::string _Channel; ///< Channel Name
std::string ChatText;
uint32 AchievementID = 0;
uint8 ChatFlags = 0;
uint8 _ChatFlags = 0; ///< @see enum ChatFlags
float DisplayTime = 0.0f;
bool HideChatLog = false;
bool FakeSenderName = false;
@@ -40,18 +40,18 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Item::ItemInstance const&
data << itemInstance.ItemID;
data << itemInstance.RandomPropertiesSeed;
data << itemInstance.RandomPropertiesID;
data.WriteBit(itemInstance.ItemBonus.HasValue);
data.WriteBit(!itemInstance.Modifications.empty());
data.FlushBits();
if (itemInstance.ItemBonus.HasValue)
data << itemInstance.ItemBonus.Value;
if (!itemInstance.Modifications.empty())
{
data << uint32(itemInstance.Modifications.size() * sizeof(uint32));
for (uint32 itemMod : itemInstance.Modifications)
for (int32 itemMod : itemInstance.Modifications)
data << itemMod;
}
@@ -120,4 +120,4 @@ void WorldPackets::Item::AutoEquipItem::Read()
void WorldPackets::Item::DestroyItem::Read()
{
_worldPacket >> count >> bag >> slot;
}
}
+7 -1
View File
@@ -532,6 +532,7 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_GUILD_REWARDS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleGuildRewardsQueryOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_GUILD_XP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildQueryXPOpcode ); // STATUS_AUTHED
DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_INSPECT_ACHIEVEMENTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryInspectAchievements );
DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_NEXT_MAIL_TIME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryNextMailTime );
DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_QUESTS_COMPLETED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryQuestsCompleted );
DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_TIME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryTimeOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_QUESTGIVER_ACCEPT_QUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestgiverAcceptQuestOpcode);
@@ -684,7 +685,6 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(MSG_PARTY_ASSIGNMENT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePartyAssignmentOpcode );
DEFINE_OPCODE_HANDLER_OLD(MSG_PETITION_DECLINE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionDeclineOpcode );
DEFINE_OPCODE_HANDLER_OLD(MSG_PETITION_RENAME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionRenameOpcode );
DEFINE_OPCODE_HANDLER_OLD(MSG_QUERY_NEXT_MAIL_TIME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryNextMailTime );
DEFINE_OPCODE_HANDLER_OLD(MSG_QUEST_PUSH_RESULT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestPushResult );
DEFINE_OPCODE_HANDLER_OLD(MSG_RAID_READY_CHECK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleRaidReadyCheckOpcode );
DEFINE_OPCODE_HANDLER_OLD(MSG_RAID_READY_CHECK_CONFIRM, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -839,6 +839,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_COOLDOWN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_COOLDOWNS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_FAR_SIGHT_IMMEDIATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_QUEST_COMPLETED_BITS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_TARGET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLIENTCACHE_VERSION, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLIENT_CONTROL_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -945,6 +946,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_MESSAGECHAT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_PLAYER_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_CASE_STATUS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_GET_TICKET_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_STATUS_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_SYSTEM_STATUS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GODMODE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1136,6 +1138,8 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_FLY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_WALK_IN_AIR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_COLLISION_HEIGHT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1268,6 +1272,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_FAILED_NOTIFY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESUME_COMMS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESUME_TOKEN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESURRECT_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESURRECT_REQUEST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESYNC_RUNES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1327,6 +1332,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_FAILED_OTHER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_FAILURE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_GO, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_MULTISTRIKE_EFFECT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_START, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_UPDATE_CHAIN_TARGETS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPIRIT_HEALER_CONFIRM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+24 -18
View File
@@ -101,7 +101,7 @@ enum OpcodeClient : uint32
CMSG_BATTLEFIELD_MGR_QUEUE_REQUEST = 0xBADD,
CMSG_BATTLEFIELD_PORT = 0x11EB,
CMSG_BATTLEFIELD_REQUEST_SCORE_DATA = 0xBADD,
CMSG_BATTLEFIELD_STATUS = 0xBADD,
CMSG_BATTLEFIELD_STATUS = 0x0320,
CMSG_BATTLEGROUND_PLAYER_POSITIONS = 0xBADD,
CMSG_BATTLEMASTER_JOIN = 0x0D2E,
CMSG_BATTLEMASTER_JOIN_ARENA = 0x0DAE,
@@ -268,7 +268,7 @@ enum OpcodeClient : uint32
CMSG_GUILD_BANK_BUY_TAB = 0xBADD,
CMSG_GUILD_BANK_DEPOSIT_MONEY = 0xBADD,
CMSG_GUILD_BANK_LOG_QUERY = 0xBADD,
CMSG_GUILD_BANK_MONEY_WITHDRAWN_QUERY = 0xBADD,
CMSG_GUILD_BANK_MONEY_WITHDRAWN_QUERY = 0x063D,
CMSG_GUILD_BANK_NOTE = 0xBADD,
CMSG_GUILD_BANK_QUERY_TAB = 0xBADD,
CMSG_GUILD_BANK_QUERY_TEXT = 0xBADD,
@@ -288,7 +288,7 @@ enum OpcodeClient : uint32
CMSG_GUILD_MEMBER_SEND_SOR_REQUEST = 0xBADD,
CMSG_GUILD_MOTD = 0xBADD,
CMSG_GUILD_NEWS_UPDATE_STICKY = 0xBADD,
CMSG_GUILD_PERMISSIONS = 0xBADD,
CMSG_GUILD_PERMISSIONS = 0x1436,
CMSG_GUILD_PROMOTE = 0xBADD,
CMSG_GUILD_QUERY = 0x0930,
CMSG_GUILD_QUERY_NEWS = 0xBADD,
@@ -319,12 +319,12 @@ enum OpcodeClient : uint32
CMSG_LEARN_PREVIEW_TALENTS_PET = 0xBADD,
CMSG_LEARN_TALENT = 0x0BB6,
CMSG_LEAVE_CHANNEL = 0x19F2,
CMSG_LFG_GET_STATUS = 0xBADD,
CMSG_LFG_GET_STATUS = 0x1BA4,
CMSG_LFG_JOIN = 0xBADD,
CMSG_LFG_LEAVE = 0xBADD,
CMSG_LFG_LFR_JOIN = 0xBADD,
CMSG_LFG_LFR_LEAVE = 0xBADD,
CMSG_LFG_LOCK_INFO_REQUEST = 0xBADD,
CMSG_LFG_LOCK_INFO_REQUEST = 0x030F,
CMSG_LFG_PROPOSAL_RESULT = 0xBADD,
CMSG_LFG_SET_BOOT_VOTE = 0xBADD,
CMSG_LFG_SET_COMMENT = 0xBADD,
@@ -470,13 +470,14 @@ enum OpcodeClient : uint32
CMSG_PLAY_DANCE = 0xBADD,
CMSG_PUSHQUESTTOPARTY = 0xBADD,
CMSG_PVP_LOG_DATA = 0x08B5,
CMSG_QUERY_BATTLEFIELD_STATE = 0xBADD,
CMSG_QUERY_BATTLEFIELD_STATE = 0x0359,
CMSG_QUERY_GUILD_MEMBERS_FOR_RECIPE = 0xBADD,
CMSG_QUERY_GUILD_MEMBER_RECIPES = 0xBADD,
CMSG_QUERY_GUILD_RECIPES = 0xBADD,
CMSG_QUERY_GUILD_REWARDS = 0xBADD,
CMSG_QUERY_GUILD_XP = 0xBADD,
CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0xBADD,
CMSG_QUERY_NEXT_MAIL_TIME = 0x0B31,
CMSG_QUERY_QUESTS_COMPLETED = 0xBADD,
CMSG_QUERY_TIME = 0xBADD,
CMSG_QUESTGIVER_ACCEPT_QUEST = 0xBADD,
@@ -588,7 +589,7 @@ enum OpcodeClient : uint32
CMSG_SUGGESTION_SUBMIT = 0xBADD,
CMSG_SUMMON_RESPONSE = 0xBADD,
CMSG_SUSPEND_COMMS_ACK = 0x0C56,
CMSG_SUSPEND_TOKEN_RESPONSE = 0xBADD,
CMSG_SUSPEND_TOKEN_RESPONSE = 0x041E,
CMSG_SWAP_INV_ITEM = 0x0F17,
CMSG_SWAP_ITEM = 0x0736,
CMSG_SYNC_DANCE = 0xBADD,
@@ -790,7 +791,7 @@ enum OpcodeServer : uint32
SMSG_CALENDAR_SEND_NUM_PENDING = 0x1B3A,
SMSG_CALENDAR_UPDATE_INVITE_LIST = 0xBADD,
SMSG_CAMERA_SHAKE = 0xBADD,
SMSG_CANCEL_AUTO_REPEAT = 0xBADD,
SMSG_CANCEL_AUTO_REPEAT = 0x0B18,
SMSG_CANCEL_COMBAT = 0xBADD,
SMSG_CAST_FAILED = 0x1A89,
SMSG_CHANNEL_LIST = 0x1411,
@@ -822,6 +823,7 @@ enum OpcodeServer : uint32
SMSG_CLEAR_COOLDOWN = 0xBADD,
SMSG_CLEAR_COOLDOWNS = 0xBADD,
SMSG_CLEAR_FAR_SIGHT_IMMEDIATE = 0xBADD,
SMSG_CLEAR_QUEST_COMPLETED_BITS = 0x1D47,
SMSG_CLEAR_TARGET = 0xBADD,
SMSG_CLIENTCACHE_VERSION = 0x080D,
SMSG_CLIENT_CONTROL_UPDATE = 0xBADD,
@@ -934,6 +936,7 @@ enum OpcodeServer : uint32
SMSG_GM_MESSAGECHAT = 0xBADD,
SMSG_GM_PLAYER_INFO = 0xBADD,
SMSG_GM_TICKET_CASE_STATUS = 0x1D8D,
SMSG_GM_TICKET_GET_TICKET_RESPONSE = 0x0389,
SMSG_GM_TICKET_STATUS_UPDATE = 0xBADD,
SMSG_GM_TICKET_SYSTEM_STATUS = 0x1229,
SMSG_GODMODE = 0xBADD,
@@ -953,13 +956,13 @@ enum OpcodeServer : uint32
SMSG_GUILD_ACHIEVEMENT_DELETED = 0xBADD,
SMSG_GUILD_ACHIEVEMENT_EARNED = 0xBADD,
SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0xBADD,
SMSG_GUILD_BANK_LIST = 0xBADD,
SMSG_GUILD_BANK_LOG_QUERY_RESULT = 0xBADD,
SMSG_GUILD_BANK_LIST = 0x1245,
SMSG_GUILD_BANK_LOG_QUERY_RESULT = 0x1237,
SMSG_GUILD_BANK_MONEY_WITHDRAWN = 0x1047,
SMSG_GUILD_BANK_QUERY_TEXT_RESULT = 0xBADD,
SMSG_GUILD_CANCEL = 0xBADD,
SMSG_GUILD_CHALLENGE_COMPLETED = 0xBADD,
SMSG_GUILD_CHALLENGE_UPDATED = 0xBADD,
SMSG_GUILD_CHALLENGE_UPDATED = 0x1A06,
SMSG_GUILD_CHANGE_NAME_RESULT = 0xBADD,
SMSG_GUILD_COMMAND_RESULT = 0xBADD,
SMSG_GUILD_COMMAND_RESULT_2 = 0xBADD,
@@ -972,12 +975,12 @@ enum OpcodeServer : uint32
SMSG_GUILD_EVENT_LOG_QUERY_RESULT = 0xBADD,
SMSG_GUILD_EVENT_PRESENCE_CHANGE = 0x1228,
SMSG_GUILD_FLAGGED_FOR_RENAME = 0xBADD,
SMSG_GUILD_INVITE = 0xBADD,
SMSG_GUILD_INVITE = 0x1025,
SMSG_GUILD_INVITE_CANCEL = 0xBADD,
SMSG_GUILD_KNOWN_RECIPES = 0xBADD,
SMSG_GUILD_MAX_DAILY_XP = 0xBADD,
SMSG_GUILD_MEMBERS_FOR_RECIPE = 0xBADD,
SMSG_GUILD_MEMBER_DAILY_RESET = 0xBADD,
SMSG_GUILD_MEMBER_DAILY_RESET = 0x1015,
SMSG_GUILD_MEMBER_RECIPES = 0xBADD,
SMSG_GUILD_MEMBER_UPDATE_NOTE = 0xBADD,
SMSG_GUILD_MOTD = 0x1825,
@@ -989,7 +992,7 @@ enum OpcodeServer : uint32
SMSG_GUILD_PERMISSIONS_QUERY_RESULTS = 0x1827,
SMSG_GUILD_QUERY_RESPONSE = 0x1046,
SMSG_GUILD_RANK = 0x1218,
SMSG_GUILD_RANKS_UPDATE = 0xBADD,
SMSG_GUILD_RANKS_UPDATE = 0x1207,
SMSG_GUILD_RECIPES = 0x1078,
SMSG_GUILD_RENAMED = 0xBADD,
SMSG_GUILD_REPUTATION_REACTION_CHANGED = 0xBADD,
@@ -1122,7 +1125,7 @@ enum OpcodeServer : uint32
SMSG_MOVE_ROOT = 0x1B5A,
SMSG_MOVE_SET_ACTIVE_MOVER = 0xBADD,
SMSG_MOVE_SET_CAN_FLY = 0x01F6,
SMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY = 0xBADD,
SMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x08CE,
SMSG_MOVE_SET_COLLISION_HEIGHT = 0x008D,
SMSG_MOVE_SET_COMPOUND_STATE = 0xBADD,
SMSG_MOVE_SET_FLIGHT_BACK_SPEED = 0xBADD,
@@ -1138,10 +1141,11 @@ enum OpcodeServer : uint32
SMSG_MOVE_SET_WALK_IN_AIR = 0xBADD,
SMSG_MOVE_SET_WALK_SPEED = 0xBADD,
SMSG_MOVE_TELEPORT = 0x03A6,
SMSG_MOVE_UNROOT = 0xBADD,
SMSG_MOVE_UNROOT = 0x08BD,
SMSG_MOVE_UNSET_CAN_FLY = 0x0BAE,
SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY = 0xBADD,
SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x00C5,
SMSG_MOVE_UNSET_HOVER = 0x01A5,
SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES = 0x039E,
SMSG_MOVE_UNSET_WALK_IN_AIR = 0xBADD,
SMSG_MOVE_UPDATE_COLLISION_HEIGHT = 0xBADD,
SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED = 0xBADD,
@@ -1202,7 +1206,7 @@ enum OpcodeServer : uint32
SMSG_PET_SPELLS = 0x0174,
SMSG_PET_TAME_FAILURE = 0xBADD,
SMSG_PET_UPDATE_COMBO_POINTS = 0xBADD,
SMSG_PLAYED_TIME = 0xBADD,
SMSG_PLAYED_TIME = 0x038B,
SMSG_PLAYERBINDERROR = 0xBADD,
SMSG_PLAYERBOUND = 0xBADD,
SMSG_PLAYER_DIFFICULTY_CHANGE = 0xBADD,
@@ -1280,6 +1284,7 @@ enum OpcodeServer : uint32
SMSG_RESISTLOG = 0xBADD,
SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0xBADD,
SMSG_RESUME_COMMS = 0x07C9,
SMSG_RESUME_TOKEN = 0x0326,
SMSG_RESURRECT_FAILED = 0xBADD,
SMSG_RESURRECT_REQUEST = 0xBADD,
SMSG_RESYNC_RUNES = 0xBADD,
@@ -1340,6 +1345,7 @@ enum OpcodeServer : uint32
SMSG_SPELL_FAILED_OTHER = 0x1A03,
SMSG_SPELL_FAILURE = 0x11DB,
SMSG_SPELL_GO = 0x1161,
SMSG_SPELL_MULTISTRIKE_EFFECT = 0x131C,
SMSG_SPELL_START = 0x0803,
SMSG_SPELL_UPDATE_CHAIN_TARGETS = 0x0374,
SMSG_SPIRIT_HEALER_CONFIRM = 0xBADD,
+12
View File
@@ -54,6 +54,18 @@ class WorldPacket : public ByteBuffer
return *this;
}
WorldPacket& operator=(WorldPacket&& right)
{
if (this != &right)
{
m_opcode = right.m_opcode;
_connection = right._connection;
ByteBuffer::operator=(std::move(right));
}
return *this;
}
WorldPacket(uint32 opcode, MessageBuffer&& buffer, ConnectionType connection) : ByteBuffer(std::move(buffer)), m_opcode(opcode), _connection(connection) { }
void Initialize(uint32 opcode, size_t newres = 200, ConnectionType connection = CONNECTION_TYPE_DEFAULT)
+1 -1
View File
@@ -441,7 +441,7 @@ int32 SpellEffectInfo::CalcValue(Unit const* caster /*= nullptr*/, int32 const*
// base amount modification based on spell lvl vs caster lvl
if (Scaling.Coefficient != 0.0f)
{
int32 level = _spellInfo->SpellLevel;
uint32 level = _spellInfo->SpellLevel;
if (target && _spellInfo->IsPositiveEffect(EffectIndex) && (Effect == SPELL_EFFECT_APPLY_AURA))
level = target->getLevel();
else if (caster)
+6 -4
View File
@@ -34,8 +34,9 @@ namespace Trinity
{
BroadcastText const* bct = sObjectMgr->GetBroadcastText(_textId);
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, _msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? bct->GetText(locale, _source->getGender()) : "", _achievementId, "", locale);
data = *packet.Write();
packet.Initalize(_msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? bct->GetText(locale, _source->getGender()) : "", _achievementId, "", locale);
packet.Write();
data = packet.Move();
}
private:
@@ -55,8 +56,9 @@ namespace Trinity
void operator()(WorldPacket& data, LocaleConstant locale)
{
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, _msgType, _language, _source, _target, _text, 0, "", locale);
data = *packet.Write();
packet.Initalize(_msgType, _language, _source, _target, _text, 0, "", locale);
packet.Write();
data = packet.Move();
}
private:
+11 -9
View File
@@ -36,8 +36,9 @@ class CreatureTextBuilder
{
std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale);
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, _msgType, Language(_language), _source, _target, text, 0, "", locale);
data = *packet.Write();
packet.Initalize(_msgType, Language(_language), _source, _target, text, 0, "", locale);
packet.Write();
data = packet.Move();
}
private:
@@ -60,8 +61,9 @@ class PlayerTextBuilder
{
std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale);
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, _msgType, Language(_language), _talker, _target, text, 0, "", locale);
data = *packet.Write();
packet.Initalize(_msgType, Language(_language), _talker, _target, text, 0, "", locale);
packet.Write();
data = packet.Move();
}
private:
@@ -308,7 +310,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject
return iter->duration;
}
float CreatureTextMgr::GetRangeForChatType(ChatMsg msgType) const
float CreatureTextMgr::GetRangeForChatType(ChatMsg msgType)
{
float dist = sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY);
switch (msgType)
@@ -327,7 +329,7 @@ float CreatureTextMgr::GetRangeForChatType(ChatMsg msgType) const
return dist;
}
void CreatureTextMgr::SendSound(Creature* source, uint32 sound, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly)
void CreatureTextMgr::SendSound(Creature* source, uint32 sound, ChatMsg msgType, WorldObject const* whisperTarget /*= nullptr*/, CreatureTextRange range /*= TEXT_RANGE_NORMAL*/, Team team /*= TEAM_OTHER*/, bool gmOnly /*= false*/)
{
if (!sound || !source)
return;
@@ -338,7 +340,7 @@ void CreatureTextMgr::SendSound(Creature* source, uint32 sound, ChatMsg msgType,
SendNonChatPacket(source, &data, msgType, whisperTarget, range, team, gmOnly);
}
void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly) const
void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly)
{
switch (msgType)
{
@@ -437,7 +439,7 @@ void CreatureTextMgr::SetRepeatId(Creature* source, uint8 textGroup, uint8 id)
TC_LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup %u for Creature (%s) %s, id %u already added", uint32(textGroup), source->GetName().c_str(), source->GetGUID().ToString().c_str(), uint32(id));
}
CreatureTextRepeatIds CreatureTextMgr::GetRepeatGroup(Creature* source, uint8 textGroup)
CreatureTextRepeatIds CreatureTextMgr::GetRepeatGroup(Creature* source, uint8 textGroup) const
{
ASSERT(source);//should never happen
CreatureTextRepeatIds ids;
@@ -452,7 +454,7 @@ CreatureTextRepeatIds CreatureTextMgr::GetRepeatGroup(Creature* source, uint8 te
return ids;
}
bool CreatureTextMgr::TextExist(uint32 sourceEntry, uint8 textGroup)
bool CreatureTextMgr::TextExist(uint32 sourceEntry, uint8 textGroup) const
{
if (!sourceEntry)
return false;
+9 -9
View File
@@ -96,24 +96,24 @@ class CreatureTextMgr
void LoadCreatureTexts();
void LoadCreatureTextLocales();
CreatureTextMap const& GetTextMap() const { return mTextMap; }
CreatureTextMap const& GetTextMap() const { return mTextMap; }
void SendSound(Creature* source, uint32 sound, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly);
void SendEmote(Unit* source, uint32 emote);
static void SendSound(Creature* source, uint32 sound, ChatMsg msgType, WorldObject const* whisperTarget = nullptr, CreatureTextRange range = TEXT_RANGE_NORMAL, Team team = TEAM_OTHER, bool gmOnly = false);
static void SendEmote(Unit* source, uint32 emote);
//if sent, returns the 'duration' of the text else 0 if error
uint32 SendChat(Creature* source, uint8 textGroup, WorldObject const* whisperTarget = nullptr, ChatMsg msgType = CHAT_MSG_ADDON, Language language = LANG_ADDON, CreatureTextRange range = TEXT_RANGE_NORMAL, uint32 sound = 0, Team team = TEAM_OTHER, bool gmOnly = false, Player* srcPlr = nullptr);
bool TextExist(uint32 sourceEntry, uint8 textGroup);
bool TextExist(uint32 sourceEntry, uint8 textGroup) const;
std::string GetLocalizedChatString(uint32 entry, uint8 gender, uint8 textGroup, uint32 id, LocaleConstant locale) const;
template<class Builder> void SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* whisperTarget = nullptr, CreatureTextRange range = TEXT_RANGE_NORMAL, Team team = TEAM_OTHER, bool gmOnly = false) const;
template<class Builder> static void SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* whisperTarget = nullptr, CreatureTextRange range = TEXT_RANGE_NORMAL, Team team = TEAM_OTHER, bool gmOnly = false);
private:
CreatureTextRepeatIds GetRepeatGroup(Creature* source, uint8 textGroup);
CreatureTextRepeatIds GetRepeatGroup(Creature* source, uint8 textGroup) const;
void SetRepeatId(Creature* source, uint8 textGroup, uint8 id);
void SendNonChatPacket(WorldObject* source, WorldPacket* data, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly) const;
float GetRangeForChatType(ChatMsg msgType) const;
static void SendNonChatPacket(WorldObject* source, WorldPacket* data, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly);
static float GetRangeForChatType(ChatMsg msgType);
CreatureTextMap mTextMap;
CreatureTextRepeatMap mTextRepeatMap;
@@ -171,7 +171,7 @@ class CreatureTextLocalizer
};
template<class Builder>
void CreatureTextMgr::SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* whisperTarget /*= nullptr*/, CreatureTextRange range /*= TEXT_RANGE_NORMAL*/, Team team /*= TEAM_OTHER*/, bool gmOnly /*= false*/) const
void CreatureTextMgr::SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* whisperTarget /*= nullptr*/, CreatureTextRange range /*= TEXT_RANGE_NORMAL*/, Team team /*= TEAM_OTHER*/, bool gmOnly /*= false*/)
{
if (!source)
return;
+20 -20
View File
@@ -2260,38 +2260,38 @@ namespace Trinity
{
public:
typedef std::vector<WorldPacket*> WorldPacketList;
explicit WorldWorldTextBuilder(uint32 textId, va_list* args = NULL) : i_textId(textId), i_args(args) { }
void operator()(WorldPacketList& data_list, LocaleConstant loc_idx)
{
char const* text = sObjectMgr->GetTrinityString(i_textId, loc_idx);
static size_t const BufferSize = 2048;
explicit WorldWorldTextBuilder(uint32 textId, va_list* args = NULL) : i_textId(textId), i_args(args) { }
void operator()(WorldPacketList& dataList, LocaleConstant locale)
{
char const* text = sObjectMgr->GetTrinityString(i_textId, locale);
char strBuffer[BufferSize];
if (i_args)
{
// we need copy va_list before use or original va_list will corrupted
va_list ap;
va_copy(ap, *i_args);
char str[2048];
vsnprintf(str, 2048, text, ap);
vsnprintf(strBuffer, BufferSize, text, ap);
va_end(ap);
do_helper(data_list, &str[0]);
}
else
do_helper(data_list, (char*)text);
std::strcpy(strBuffer, text);
do_helper(dataList, strBuffer);
}
private:
char* lineFromMessage(char*& pos) { char* start = strtok(pos, "\n"); pos = NULL; return start; }
void do_helper(WorldPacketList& data_list, char* text)
void do_helper(WorldPacketList& dataList, char* text)
{
char* pos = text;
while (char* line = lineFromMessage(pos))
while (char* line = ChatHandler::LineFromMessage(text))
{
WorldPacket* data = new WorldPacket();
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line);
*data = *packet.Write();
data_list.push_back(data);
packet.Initalize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
packet.Write();
dataList.emplace_back(new WorldPacket(packet.Move()));
}
}
@@ -2355,7 +2355,7 @@ void World::SendGlobalText(const char* text, WorldSession* self)
while (char* line = ChatHandler::LineFromMessage(pos))
{
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line);
packet.Initalize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
SendGlobalMessage(packet.Write(), self);
}
@@ -2389,7 +2389,7 @@ bool World::SendZoneMessage(uint32 zone, WorldPacket const* packet, WorldSession
void World::SendZoneText(uint32 zone, const char* text, WorldSession* self, uint32 team)
{
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, text);
packet.Initalize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, text);
SendZoneMessage(zone, packet.Write(), self, team);
}
+1 -1
View File
@@ -482,7 +482,7 @@ public:
char const* msg = "testtest";
uint8 type = atoi(args);
WorldPackets::Chat::Chat packet;
ChatHandler::BuildChatPacket(&packet, ChatMsg(type), LANG_UNIVERSAL, handler->GetSession()->GetPlayer(), handler->GetSession()->GetPlayer(), msg, 0, "chan");
packet.Initalize(ChatMsg(type), LANG_UNIVERSAL, handler->GetSession()->GetPlayer(), handler->GetSession()->GetPlayer(), msg, 0, "chan");
handler->GetSession()->SendPacket(packet.Write());
return true;
}
@@ -1079,7 +1079,7 @@ class boss_the_lich_king : public CreatureScript
break;
case EVENT_OUTRO_SOUL_BARRAGE:
me->CastSpell((Unit*)NULL, SPELL_SOUL_BARRAGE, TRIGGERED_IGNORE_CAST_IN_PROGRESS);
sCreatureTextMgr->SendSound(me, SOUND_PAIN, CHAT_MSG_MONSTER_YELL, 0, TEXT_RANGE_NORMAL, TEAM_OTHER, false);
CreatureTextMgr::SendSound(me, SOUND_PAIN, CHAT_MSG_MONSTER_YELL);
// set flight
me->SetDisableGravity(true);
me->SetByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
@@ -967,7 +967,7 @@ class boss_yogg_saron : public CreatureScript
break;
case EVENT_LUNATIC_GAZE:
DoCast(me, SPELL_LUNATIC_GAZE);
sCreatureTextMgr->SendSound(me, SOUND_LUNATIC_GAZE, CHAT_MSG_MONSTER_YELL, 0, TEXT_RANGE_NORMAL, TEAM_OTHER, false);
CreatureTextMgr::SendSound(me, SOUND_LUNATIC_GAZE, CHAT_MSG_MONSTER_YELL);
_events.ScheduleEvent(EVENT_LUNATIC_GAZE, 12000, 0, PHASE_THREE);
break;
case EVENT_DEAFENING_ROAR:
+2 -4
View File
@@ -26,8 +26,7 @@ ByteBuffer::ByteBuffer(MessageBuffer&& buffer) : _rpos(0), _wpos(0), _bitpos(Ini
{
}
ByteBufferPositionException::ByteBufferPositionException(bool add, size_t pos,
size_t size, size_t valueSize)
ByteBufferPositionException::ByteBufferPositionException(bool add, size_t pos, size_t size, size_t valueSize)
{
std::ostringstream ss;
@@ -38,8 +37,7 @@ ByteBufferPositionException::ByteBufferPositionException(bool add, size_t pos,
message().assign(ss.str());
}
ByteBufferSourceException::ByteBufferSourceException(size_t pos, size_t size,
size_t valueSize)
ByteBufferSourceException::ByteBufferSourceException(size_t pos, size_t size, size_t valueSize)
{
std::ostringstream ss;
+28 -2
View File
@@ -86,13 +86,22 @@ class ByteBuffer
}
ByteBuffer(ByteBuffer&& buf) : _rpos(buf._rpos), _wpos(buf._wpos),
_bitpos(buf._bitpos), _curbitval(buf._curbitval), _storage(std::move(buf._storage)) { }
_bitpos(buf._bitpos), _curbitval(buf._curbitval), _storage(buf.Move()) { }
ByteBuffer(ByteBuffer const& right) : _rpos(right._rpos), _wpos(right._wpos),
_bitpos(right._bitpos), _curbitval(right._curbitval), _storage(right._storage) { }
ByteBuffer(MessageBuffer&& buffer);
std::vector<uint8>&& Move()
{
_rpos = 0;
_wpos = 0;
_bitpos = InitialBitPos;
_curbitval = 0;
return std::move(_storage);
}
ByteBuffer& operator=(ByteBuffer const& right)
{
if (this != &right)
@@ -107,12 +116,29 @@ class ByteBuffer
return *this;
}
ByteBuffer& operator=(ByteBuffer&& right)
{
if (this != &right)
{
_rpos = right._rpos;
_wpos = right._wpos;
_bitpos = right._bitpos;
_curbitval = right._curbitval;
_storage = right.Move();
}
return *this;
}
virtual ~ByteBuffer() { }
void clear()
{
_rpos = 0;
_wpos = 0;
_bitpos = InitialBitPos;
_curbitval = 0;
_storage.clear();
_rpos = _wpos = 0;
}
template <typename T> void append(T value)