Core/Packets: moved chat packet building function to packet builder class
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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()); }
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user