2014-11-14 01:55:29 +00:00
|
|
|
/*
|
|
|
|
|
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
|
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
|
|
|
* under the terms of the GNU General Public License as published by the
|
|
|
|
|
* Free Software Foundation; either version 2 of the License, or (at your
|
|
|
|
|
* option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
|
|
|
* more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include "QueryPackets.h"
|
|
|
|
|
|
|
|
|
|
void WorldPackets::Query::QueryCreature::Read()
|
|
|
|
|
{
|
|
|
|
|
_worldPacket >> CreatureID;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write()
|
|
|
|
|
{
|
|
|
|
|
_worldPacket << CreatureID;
|
|
|
|
|
_worldPacket.WriteBit(Allow);
|
|
|
|
|
|
2014-11-15 06:40:16 +01:00
|
|
|
_worldPacket.FlushBits();
|
|
|
|
|
|
2014-11-14 01:55:29 +00:00
|
|
|
if (Allow)
|
|
|
|
|
{
|
2014-11-15 06:40:16 +01:00
|
|
|
_worldPacket.WriteBits(Stats.Title.length() + 1, 11);
|
|
|
|
|
_worldPacket.WriteBits(Stats.TitleAlt.length() + 1, 11);
|
|
|
|
|
_worldPacket.WriteBits(Stats.CursorName.length() + 1, 6);
|
2014-11-14 01:55:29 +00:00
|
|
|
_worldPacket.WriteBit(Stats.Leader);
|
|
|
|
|
|
|
|
|
|
for (uint32 i = 0; i < MAX_CREATURE_NAMES; ++i)
|
|
|
|
|
{
|
2014-11-15 06:40:16 +01:00
|
|
|
_worldPacket.WriteBits(Stats.Name[i].length() + 1, 11);
|
|
|
|
|
_worldPacket.WriteBits(Stats.NameAlt[i].length() + 1, 11);
|
2014-11-14 01:55:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (uint32 i = 0; i < MAX_CREATURE_NAMES; ++i)
|
|
|
|
|
{
|
|
|
|
|
if (!Stats.Name[i].empty())
|
|
|
|
|
_worldPacket << Stats.Name[i];
|
2014-11-15 06:40:16 +01:00
|
|
|
|
2014-11-14 01:55:29 +00:00
|
|
|
if (!Stats.NameAlt[i].empty())
|
|
|
|
|
_worldPacket << Stats.NameAlt[i];
|
|
|
|
|
}
|
|
|
|
|
|
2014-11-15 06:40:16 +01:00
|
|
|
for (uint8 i = 0; i < 2; ++i)
|
|
|
|
|
_worldPacket << Stats.Flags[i];
|
|
|
|
|
|
2014-11-14 01:55:29 +00:00
|
|
|
_worldPacket << Stats.CreatureType;
|
|
|
|
|
_worldPacket << Stats.CreatureFamily;
|
|
|
|
|
_worldPacket << Stats.Classification;
|
|
|
|
|
|
|
|
|
|
for (uint32 i = 0; i < MAX_KILL_CREDIT; ++i)
|
|
|
|
|
_worldPacket << Stats.ProxyCreatureID[i];
|
|
|
|
|
|
|
|
|
|
for (uint32 i = 0; i < MAX_CREATURE_MODELS; ++i)
|
|
|
|
|
_worldPacket << Stats.CreatureDisplayID[i];
|
|
|
|
|
|
|
|
|
|
_worldPacket << Stats.HpMulti;
|
|
|
|
|
_worldPacket << Stats.EnergyMulti;
|
|
|
|
|
|
|
|
|
|
_worldPacket << int32(Stats.QuestItems.size());
|
|
|
|
|
_worldPacket << Stats.CreatureMovementInfoID;
|
|
|
|
|
_worldPacket << Stats.RequiredExpansion;
|
|
|
|
|
|
|
|
|
|
_worldPacket << int32(0); // FlagQuest
|
|
|
|
|
|
2014-11-15 06:40:16 +01:00
|
|
|
if (!Stats.Title.empty())
|
2014-11-14 01:55:29 +00:00
|
|
|
_worldPacket << Stats.Title;
|
|
|
|
|
|
2014-11-15 06:40:16 +01:00
|
|
|
if (!Stats.TitleAlt.empty())
|
2014-11-14 01:55:29 +00:00
|
|
|
_worldPacket << Stats.TitleAlt;
|
|
|
|
|
|
2014-11-15 06:40:16 +01:00
|
|
|
if (!Stats.CursorName.empty())
|
2014-11-14 01:55:29 +00:00
|
|
|
_worldPacket << Stats.CursorName;
|
|
|
|
|
|
2014-11-15 06:40:16 +01:00
|
|
|
for (int32 questItem : Stats.QuestItems)
|
|
|
|
|
_worldPacket << questItem;
|
2014-11-14 01:55:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &_worldPacket;
|
|
|
|
|
}
|
2014-11-15 17:13:41 +02:00
|
|
|
|
|
|
|
|
void WorldPackets::Query::QueryPlayerName::Read()
|
|
|
|
|
{
|
|
|
|
|
_worldPacket >> Player;
|
|
|
|
|
|
|
|
|
|
Hint.VirtualRealmAddress.HasValue = _worldPacket.ReadBit();
|
|
|
|
|
Hint.NativeRealmAddress.HasValue = _worldPacket.ReadBit();
|
|
|
|
|
|
|
|
|
|
if (Hint.VirtualRealmAddress.HasValue)
|
2014-11-20 01:17:45 +01:00
|
|
|
_worldPacket >> Hint.VirtualRealmAddress.Value;
|
2014-11-15 17:13:41 +02:00
|
|
|
|
|
|
|
|
if (Hint.NativeRealmAddress.HasValue)
|
2014-11-20 01:17:45 +01:00
|
|
|
_worldPacket >> Hint.NativeRealmAddress.Value;
|
2014-11-15 17:13:41 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WorldPacket const* WorldPackets::Query::QueryPlayerNameResponse::Write()
|
|
|
|
|
{
|
|
|
|
|
_worldPacket << Result;
|
|
|
|
|
_worldPacket << Player;
|
|
|
|
|
|
2014-11-16 06:08:46 +01:00
|
|
|
if (Result == RESPONSE_SUCCESS)
|
2014-11-15 17:13:41 +02:00
|
|
|
{
|
|
|
|
|
_worldPacket.WriteBits(Data.Name.length(), 7);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
|
|
|
|
|
_worldPacket.WriteBits(Data.DeclinedNames.name[i].length(), 7);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
|
|
|
|
|
_worldPacket.WriteString(Data.DeclinedNames.name[i]);
|
|
|
|
|
|
|
|
|
|
_worldPacket << Data.AccountID;
|
|
|
|
|
_worldPacket << Data.BnetAccountID;
|
|
|
|
|
_worldPacket << Data.GuidActual;
|
|
|
|
|
_worldPacket << Data.VirtualRealmAddress;
|
|
|
|
|
_worldPacket << Data.Race;
|
|
|
|
|
_worldPacket << Data.Sex;
|
|
|
|
|
_worldPacket << Data.ClassID;
|
|
|
|
|
_worldPacket << Data.Level;
|
|
|
|
|
_worldPacket.WriteString(Data.Name);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &_worldPacket;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void WorldPackets::Query::QueryPageText::Read()
|
|
|
|
|
{
|
|
|
|
|
_worldPacket >> PageTextID;
|
|
|
|
|
_worldPacket >> ItemGUID;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WorldPacket const* WorldPackets::Query::QueryPageTextResponse::Write()
|
|
|
|
|
{
|
|
|
|
|
_worldPacket << PageTextID;
|
|
|
|
|
_worldPacket.WriteBit(Allow);
|
2014-11-16 06:08:46 +01:00
|
|
|
|
2014-11-15 17:13:41 +02:00
|
|
|
if (Allow)
|
|
|
|
|
{
|
|
|
|
|
_worldPacket << Info.ID;
|
|
|
|
|
_worldPacket << Info.NextPageID;
|
|
|
|
|
_worldPacket.WriteBits(Info.Text.length(), 12);
|
|
|
|
|
_worldPacket.WriteString(Info.Text);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &_worldPacket;
|
|
|
|
|
}
|
2014-11-24 20:50:19 +02:00
|
|
|
|
|
|
|
|
void WorldPackets::Query::QueryNPCText::Read()
|
|
|
|
|
{
|
|
|
|
|
_worldPacket >> TextID;
|
|
|
|
|
_worldPacket >> Guid;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WorldPacket const* WorldPackets::Query::QueryNPCTextResponse::Write()
|
|
|
|
|
{
|
|
|
|
|
_worldPacket << TextID;
|
|
|
|
|
_worldPacket.WriteBit(Allow);
|
|
|
|
|
|
|
|
|
|
if (Allow)
|
|
|
|
|
{
|
|
|
|
|
_worldPacket << int32(MAX_GOSSIP_TEXT_OPTIONS * (4 + 4));
|
|
|
|
|
for (uint32 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i)
|
|
|
|
|
_worldPacket << Probabilities[i];
|
|
|
|
|
for (uint32 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i)
|
|
|
|
|
_worldPacket << BroadcastTextID[i];
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-29 01:00:16 +01:00
|
|
|
_worldPacket.FlushBits();
|
|
|
|
|
|
2014-11-24 20:50:19 +02:00
|
|
|
return &_worldPacket;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void WorldPackets::Query::DBQueryBulk::Read()
|
|
|
|
|
{
|
|
|
|
|
_worldPacket >> TableHash;
|
|
|
|
|
|
|
|
|
|
uint32 count = _worldPacket.ReadBits(13);
|
|
|
|
|
|
|
|
|
|
Queries.resize(count);
|
|
|
|
|
for (uint32 i = 0; i < count; ++i)
|
|
|
|
|
{
|
|
|
|
|
_worldPacket >> Queries[i].GUID;
|
|
|
|
|
_worldPacket >> Queries[i].RecordID;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WorldPacket const* WorldPackets::Query::DBReply::Write()
|
|
|
|
|
{
|
|
|
|
|
_worldPacket << TableHash;
|
|
|
|
|
_worldPacket << RecordID;
|
|
|
|
|
_worldPacket << Timestamp;
|
|
|
|
|
|
|
|
|
|
size_t sizePos = _worldPacket.wpos();
|
|
|
|
|
_worldPacket << int32(0); // size of next block
|
|
|
|
|
|
|
|
|
|
if (Data)
|
|
|
|
|
Data->WriteRecord(RecordID, Locale, _worldPacket);
|
|
|
|
|
|
2014-12-29 01:00:16 +01:00
|
|
|
_worldPacket.put<int32>(sizePos, _worldPacket.wpos() - sizePos - sizeof(int32));
|
2014-11-24 20:50:19 +02:00
|
|
|
|
|
|
|
|
return &_worldPacket;
|
|
|
|
|
}
|
2014-12-26 01:38:40 +01:00
|
|
|
|
|
|
|
|
WorldPacket const* WorldPackets::Query::HotfixNotifyBlob::Write()
|
|
|
|
|
{
|
|
|
|
|
_worldPacket << uint32(Hotfixes->size());
|
|
|
|
|
for (HotfixNotify const& hotfix : *Hotfixes)
|
|
|
|
|
{
|
|
|
|
|
_worldPacket << uint32(hotfix.TableHash);
|
|
|
|
|
_worldPacket << int32(hotfix.Entry);
|
|
|
|
|
_worldPacket << uint32(hotfix.Timestamp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &_worldPacket;
|
|
|
|
|
}
|
2014-12-28 16:01:53 +00:00
|
|
|
|
|
|
|
|
void WorldPackets::Query::QueryGameObject::Read()
|
|
|
|
|
{
|
2014-12-29 01:00:16 +01:00
|
|
|
_worldPacket >> GameObjectID;
|
2014-12-28 16:01:53 +00:00
|
|
|
_worldPacket >> Guid;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WorldPacket const* WorldPackets::Query::QueryGameObjectResponse::Write()
|
|
|
|
|
{
|
2014-12-29 01:00:16 +01:00
|
|
|
_worldPacket << GameObjectID;
|
2014-12-28 16:01:53 +00:00
|
|
|
_worldPacket.WriteBit(Allow);
|
|
|
|
|
|
|
|
|
|
if (Allow)
|
|
|
|
|
{
|
2014-12-28 20:47:06 +01:00
|
|
|
uint32 dataSize = Stats.GetDataSize();
|
2014-12-28 16:01:53 +00:00
|
|
|
|
2014-12-28 20:47:06 +01:00
|
|
|
_worldPacket << uint32(dataSize);
|
|
|
|
|
if (dataSize)
|
|
|
|
|
{
|
|
|
|
|
_worldPacket << Stats.Type;
|
|
|
|
|
_worldPacket << Stats.DisplayID;
|
|
|
|
|
for (int8 i = 0; i < 4; i++)
|
|
|
|
|
_worldPacket << Stats.Name[i];
|
2014-12-28 16:01:53 +00:00
|
|
|
|
2014-12-28 20:47:06 +01:00
|
|
|
_worldPacket << Stats.IconName;
|
|
|
|
|
_worldPacket << Stats.CastBarCaption;
|
|
|
|
|
_worldPacket << Stats.UnkString;
|
2014-12-28 16:01:53 +00:00
|
|
|
|
2014-12-28 20:47:06 +01:00
|
|
|
for (uint32 i = 0; i < MAX_GAMEOBJECT_DATA; i++)
|
|
|
|
|
_worldPacket << Stats.Data[i];
|
2014-12-28 16:01:53 +00:00
|
|
|
|
2014-12-28 20:47:06 +01:00
|
|
|
_worldPacket << Stats.Size;
|
2014-12-28 16:01:53 +00:00
|
|
|
|
2014-12-28 20:47:06 +01:00
|
|
|
_worldPacket << uint8(Stats.QuestItems.size());
|
|
|
|
|
for (int32 questItem : Stats.QuestItems)
|
|
|
|
|
_worldPacket << questItem;
|
2014-12-28 16:01:53 +00:00
|
|
|
|
2014-12-28 20:47:06 +01:00
|
|
|
_worldPacket << Stats.Expansion;
|
|
|
|
|
}
|
2014-12-28 16:01:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &_worldPacket;
|
|
|
|
|
}
|