aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp4
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp10
-rw-r--r--src/server/game/Chat/Channels/Channel.cpp4
-rw-r--r--src/server/game/Chat/Chat.cpp58
-rw-r--r--src/server/game/Chat/Chat.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp12
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp7
-rw-r--r--src/server/game/Guilds/Guild.cpp4
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp84
-rw-r--r--src/server/game/Server/Packet.h11
-rw-r--r--src/server/game/Server/Packets/ChatPackets.cpp68
-rw-r--r--src/server/game/Server/Packets/ChatPackets.h11
-rw-r--r--src/server/game/Server/Packets/ItemPackets.cpp10
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp8
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h42
-rw-r--r--src/server/game/Server/WorldPacket.h12
-rw-r--r--src/server/game/Spells/SpellInfo.cpp2
-rw-r--r--src/server/game/Texts/ChatTextBuilder.h10
-rw-r--r--src/server/game/Texts/CreatureTextMgr.cpp20
-rw-r--r--src/server/game/Texts/CreatureTextMgr.h18
-rw-r--r--src/server/game/World/World.cpp36
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp2
-rw-r--r--src/server/shared/Packets/ByteBuffer.cpp6
-rw-r--r--src/server/shared/Packets/ByteBuffer.h30
27 files changed, 247 insertions, 230 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 4c8348f0238..603f76560de 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -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());
}
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 49bd25e6252..0756870f723 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -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:
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp
index a316c8630dc..05c8914a9f1 100644
--- a/src/server/game/Chat/Channels/Channel.cpp
+++ b/src/server/game/Chat/Channels/Channel.cpp
@@ -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;
}
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp
index cbb0e4683aa..8bc0ac2952b 100644
--- a/src/server/game/Chat/Chat.cpp
+++ b/src/server/game/Chat/Chat.cpp
@@ -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)
diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h
index 5db48db0fbe..9f647183b62 100644
--- a/src/server/game/Chat/Chat.h
+++ b/src/server/game/Chat/Chat.h
@@ -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
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 1b96a1c5bb3..45ab3c84bb5 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -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())
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 814c4af9781..8f16ef54864 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -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;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 35bd9767b77..ede8c959594 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -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());
}
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index d3dddfcfd3a..0bfa08d62c9 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -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())
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index 81248519994..e3d6e47e3a6 100644
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -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;
}
- Unit* unit = ObjectAccessor::GetUnit(*_player, packet.Target);
-
- CellCoord p = Trinity::ComputeCellCoord(player->GetPositionX(), player->GetPositionY());
-
- Cell cell(p);
- cell.SetNoCreate();
+ 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);
- 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));
+ Unit* unit = ObjectAccessor::GetUnit(*_player, packet.Target);
- player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE, packet.SoundIndex, 0, 0, unit);
+ _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());
}
diff --git a/src/server/game/Server/Packet.h b/src/server/game/Server/Packet.h
index f1a2d92cda5..040b36bbbc3 100644
--- a/src/server/game/Server/Packet.h
+++ b/src/server/game/Server/Packet.h
@@ -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()); }
};
diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp
index 7590a092b2c..d33ce6e3ad9 100644
--- a/src/server/game/Server/Packets/ChatPackets.cpp
+++ b/src/server/game/Server/Packets/ChatPackets.cpp
@@ -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;
}
diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h
index 9cdc534528f..c64109dad89 100644
--- a/src/server/game/Server/Packets/ChatPackets.h
+++ b/src/server/game/Server/Packets/ChatPackets.h
@@ -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;
diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp
index 50ffe46260b..ed57485299c 100644
--- a/src/server/game/Server/Packets/ItemPackets.cpp
+++ b/src/server/game/Server/Packets/ItemPackets.cpp
@@ -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;
-} \ No newline at end of file
+}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index b3c486b6e78..eff113b89c3 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -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);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index cde1f7b030b..07971244cf0 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -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,
diff --git a/src/server/game/Server/WorldPacket.h b/src/server/game/Server/WorldPacket.h
index 270f2598553..d711bdcab3f 100644
--- a/src/server/game/Server/WorldPacket.h
+++ b/src/server/game/Server/WorldPacket.h
@@ -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)
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index da3135f6001..607fbe84471 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -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)
diff --git a/src/server/game/Texts/ChatTextBuilder.h b/src/server/game/Texts/ChatTextBuilder.h
index a4834d555d3..1cab1f3576c 100644
--- a/src/server/game/Texts/ChatTextBuilder.h
+++ b/src/server/game/Texts/ChatTextBuilder.h
@@ -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:
diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp
index 992942cefeb..7f299c57c21 100644
--- a/src/server/game/Texts/CreatureTextMgr.cpp
+++ b/src/server/game/Texts/CreatureTextMgr.cpp
@@ -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;
diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h
index 647d8249e68..f15ec94c69b 100644
--- a/src/server/game/Texts/CreatureTextMgr.h
+++ b/src/server/game/Texts/CreatureTextMgr.h
@@ -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;
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 53a2ee814a7..a3ee2fa1265 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -2260,38 +2260,38 @@ namespace Trinity
{
public:
typedef std::vector<WorldPacket*> WorldPacketList;
+ static size_t const BufferSize = 2048;
+
explicit WorldWorldTextBuilder(uint32 textId, va_list* args = NULL) : i_textId(textId), i_args(args) { }
- void operator()(WorldPacketList& data_list, LocaleConstant loc_idx)
+
+ void operator()(WorldPacketList& dataList, LocaleConstant locale)
{
- char const* text = sObjectMgr->GetTrinityString(i_textId, loc_idx);
+ 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);
}
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 22a8fcb67f0..b6afc619387 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -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;
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
index caba9ff5262..645df91d8ea 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -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);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
index 391aebf9229..3c84776edad 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
@@ -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:
diff --git a/src/server/shared/Packets/ByteBuffer.cpp b/src/server/shared/Packets/ByteBuffer.cpp
index 02713a30cc6..ba78a19f31a 100644
--- a/src/server/shared/Packets/ByteBuffer.cpp
+++ b/src/server/shared/Packets/ByteBuffer.cpp
@@ -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;
diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h
index 67e940e263c..42bd66c3c1d 100644
--- a/src/server/shared/Packets/ByteBuffer.h
+++ b/src/server/shared/Packets/ByteBuffer.h
@@ -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)