Core/Packets: added structure for SMSG_LFG_SEARCH_RESULT
This commit is contained in:
1 parent
a0313cf13e
commit
24da4cc22e
4 files changed
+312
-2
No files matched your search
@@ -578,3 +578,244 @@ WorldPacket const* WorldPackets::LFG::LFGTeleportDenied::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::LFG::LFGSearchResults::Write()
|
||||
{
|
||||
_worldPacket.WriteBit(Ticket.RequesterGuid[3]);
|
||||
_worldPacket.WriteBits(Parties.size(), 21);
|
||||
|
||||
for (ClientLFGSearchResultParty const& party : Parties)
|
||||
{
|
||||
_worldPacket.WriteBit(party.InstanceID[6]);
|
||||
_worldPacket.WriteBit(party.Guid[3]);
|
||||
_worldPacket.WriteBit(party.Guid[1]);
|
||||
_worldPacket.WriteBits(party.Comment.length(), 9);
|
||||
_worldPacket.WriteBit(party.InstanceID[0]);
|
||||
_worldPacket.WriteBit(party.Guid[5]);
|
||||
_worldPacket.WriteBit(party.Guid[2]);
|
||||
_worldPacket.WriteBit(party.InstanceID[1]);
|
||||
_worldPacket.WriteBit(party.InstanceID[4]);
|
||||
_worldPacket.WriteBit(party.Guid[4]);
|
||||
_worldPacket.WriteBit(party.InstanceID[7]);
|
||||
_worldPacket.WriteBit(party.Guid[7]);
|
||||
_worldPacket.WriteBit(party.Guid[0]);
|
||||
_worldPacket.WriteBit(party.InstanceID[3]);
|
||||
_worldPacket.WriteBit(party.Guid[6]);
|
||||
_worldPacket.WriteBit(party.InstanceID[2]);
|
||||
_worldPacket.WriteBit(party.InstanceID[5]);
|
||||
}
|
||||
|
||||
_worldPacket.WriteBit(Ticket.RequesterGuid[6]);
|
||||
_worldPacket.WriteBit(Incremental);
|
||||
_worldPacket.WriteBit(Ticket.RequesterGuid[7]);
|
||||
_worldPacket.WriteBit(Ticket.RequesterGuid[5]);
|
||||
_worldPacket.WriteBit(Ticket.RequesterGuid[2]);
|
||||
_worldPacket.WriteBit(Ticket.RequesterGuid[4]);
|
||||
_worldPacket.WriteBits(Players.size(), 18);
|
||||
|
||||
for (ClientLFGSearchResultPlayer const& player : Players)
|
||||
{
|
||||
_worldPacket.WriteBits(player.Comment.length(), 9);
|
||||
_worldPacket.WriteBit(player.PartyGuid[3]);
|
||||
_worldPacket.WriteBit(player.Guid[7]);
|
||||
_worldPacket.WriteBit(player.PartyGuid[1]);
|
||||
_worldPacket.WriteBit(player.InstanceID[7]);
|
||||
_worldPacket.WriteBit(player.InstanceID[4]);
|
||||
_worldPacket.WriteBit(player.Guid[3]);
|
||||
_worldPacket.WriteBit(player.Guid[1]);
|
||||
_worldPacket.WriteBit(player.InstanceID[6]);
|
||||
_worldPacket.WriteBit(player.PartyGuid[2]);
|
||||
_worldPacket.WriteBit(player.IsLeader);
|
||||
_worldPacket.WriteBit(player.InstanceID[0]);
|
||||
_worldPacket.WriteBit(player.PartyGuid[0]);
|
||||
_worldPacket.WriteBit(player.Guid[2]);
|
||||
_worldPacket.WriteBit(player.PartyGuid[5]);
|
||||
_worldPacket.WriteBit(player.InstanceID[3]);
|
||||
_worldPacket.WriteBit(player.Guid[4]);
|
||||
_worldPacket.WriteBit(player.Guid[6]);
|
||||
_worldPacket.WriteBit(player.InstanceID[5]);
|
||||
_worldPacket.WriteBit(player.Guid[0]);
|
||||
_worldPacket.WriteBit(player.PartyGuid[7]);
|
||||
_worldPacket.WriteBit(player.InstanceID[1]);
|
||||
_worldPacket.WriteBit(player.PartyGuid[4]);
|
||||
_worldPacket.WriteBit(player.PartyGuid[6]);
|
||||
_worldPacket.WriteBit(player.InstanceID[2]);
|
||||
_worldPacket.WriteBit(player.Guid[5]);
|
||||
}
|
||||
|
||||
_worldPacket.WriteBits(Removes.size(), 26);
|
||||
|
||||
for (ObjectGuid const& remove : Removes)
|
||||
{
|
||||
_worldPacket.WriteBit(remove[7]);
|
||||
_worldPacket.WriteBit(remove[3]);
|
||||
_worldPacket.WriteBit(remove[6]);
|
||||
_worldPacket.WriteBit(remove[2]);
|
||||
_worldPacket.WriteBit(remove[1]);
|
||||
_worldPacket.WriteBit(remove[4]);
|
||||
_worldPacket.WriteBit(remove[0]);
|
||||
_worldPacket.WriteBit(remove[5]);
|
||||
}
|
||||
|
||||
_worldPacket.WriteBit(Ticket.RequesterGuid[0]);
|
||||
_worldPacket.WriteBit(Ticket.RequesterGuid[1]);
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
for (ObjectGuid const& remove : Removes)
|
||||
{
|
||||
_worldPacket.WriteByteSeq(remove[3]);
|
||||
_worldPacket.WriteByteSeq(remove[6]);
|
||||
_worldPacket.WriteByteSeq(remove[4]);
|
||||
_worldPacket.WriteByteSeq(remove[2]);
|
||||
_worldPacket.WriteByteSeq(remove[1]);
|
||||
_worldPacket.WriteByteSeq(remove[0]);
|
||||
_worldPacket.WriteByteSeq(remove[5]);
|
||||
_worldPacket.WriteByteSeq(remove[7]);
|
||||
}
|
||||
|
||||
for (ClientLFGSearchResultPlayer const& player : Players)
|
||||
{
|
||||
_worldPacket << int32(player.CritRanged);
|
||||
_worldPacket << int8(player.Talents[0]);
|
||||
_worldPacket << float(player.GearRating);
|
||||
|
||||
_worldPacket.WriteByteSeq(player.PartyGuid[4]);
|
||||
_worldPacket.WriteByteSeq(player.InstanceID[5]);
|
||||
|
||||
_worldPacket << int32(player.DefenseRating);
|
||||
|
||||
_worldPacket.WriteByteSeq(player.InstanceID[7]);
|
||||
_worldPacket.WriteString(player.Comment);
|
||||
_worldPacket.WriteByteSeq(player.InstanceID[4]);
|
||||
|
||||
_worldPacket << float(player.Mp5InCombat);
|
||||
_worldPacket << int32(player.DodgeRating);
|
||||
_worldPacket << int8(player.Level);
|
||||
_worldPacket << int32(player.FreeTalentPoints);
|
||||
|
||||
_worldPacket.WriteByteSeq(player.PartyGuid[6]);
|
||||
|
||||
_worldPacket << int32(player.HasteRating);
|
||||
_worldPacket << int32(player.Expertise);
|
||||
_worldPacket << int32(player.ParryRating);
|
||||
_worldPacket << int8(player.Race);
|
||||
|
||||
_worldPacket.WriteByteSeq(player.PartyGuid[5]);
|
||||
|
||||
_worldPacket << float(player.AvgItemLevel);
|
||||
_worldPacket << int32(player.MaxHealth);
|
||||
_worldPacket << int32(player.CritSpell);
|
||||
|
||||
_worldPacket.WriteByteSeq(player.PartyGuid[0]);
|
||||
_worldPacket.WriteByteSeq(player.Guid[4]);
|
||||
_worldPacket.WriteByteSeq(player.PartyGuid[7]);
|
||||
|
||||
_worldPacket << int32(player.Armor);
|
||||
_worldPacket << int8(0); // unk?
|
||||
|
||||
_worldPacket.WriteByteSeq(player.Guid[6]);
|
||||
_worldPacket.WriteByteSeq(player.PartyGuid[2]);
|
||||
|
||||
_worldPacket << int8(player.Talents[1]);
|
||||
_worldPacket << int32(player.Agility);
|
||||
|
||||
_worldPacket.WriteByteSeq(player.InstanceID[2]);
|
||||
|
||||
_worldPacket << int8(player.Talents[2]);
|
||||
|
||||
_worldPacket.WriteByteSeq(player.InstanceID[1]);
|
||||
|
||||
_worldPacket << int8(player.ChrClass);
|
||||
|
||||
_worldPacket.WriteByteSeq(player.Guid[0]);
|
||||
_worldPacket.WriteByteSeq(player.PartyGuid[1]);
|
||||
_worldPacket.WriteByteSeq(player.Guid[7]);
|
||||
_worldPacket.WriteByteSeq(player.Guid[2]);
|
||||
|
||||
_worldPacket << int32(player.BlockRating);
|
||||
_worldPacket << float(player.Mp5);
|
||||
|
||||
_worldPacket.WriteByteSeq(player.InstanceID[0]);
|
||||
|
||||
_worldPacket << int8(0); // unk?
|
||||
|
||||
_worldPacket << int32(player.CritMelee);
|
||||
_worldPacket << int32(player.ChangeMask);
|
||||
_worldPacket << int32(player.SpellDamage);
|
||||
|
||||
_worldPacket.WriteByteSeq(player.InstanceID[6]);
|
||||
|
||||
_worldPacket << int32(player.MaxMana);
|
||||
|
||||
_worldPacket.WriteByteSeq(player.Guid[1]);
|
||||
_worldPacket.WriteByteSeq(player.Guid[3]);
|
||||
|
||||
_worldPacket << int32(player.InstanceCompletedMask);
|
||||
_worldPacket << int32(player.PlusHealing);
|
||||
|
||||
_worldPacket.WriteByteSeq(player.PartyGuid[3]);
|
||||
_worldPacket.WriteByteSeq(player.Guid[5]);
|
||||
_worldPacket.WriteByteSeq(player.InstanceID[3]);
|
||||
|
||||
_worldPacket << int32(0); // Unk
|
||||
_worldPacket << int32(0); // Unk
|
||||
}
|
||||
|
||||
_worldPacket << int32(SlotID);
|
||||
|
||||
for (ClientLFGSearchResultParty const& party : Parties)
|
||||
{
|
||||
_worldPacket.WriteString(party.Comment);
|
||||
_worldPacket << int32(party.ChangeMask);
|
||||
|
||||
_worldPacket.WriteByteSeq(party.Guid[6]);
|
||||
|
||||
_worldPacket << int32(party.InstanceCompletedMask);
|
||||
|
||||
_worldPacket.WriteByteSeq(party.InstanceID[6]);
|
||||
_worldPacket.WriteByteSeq(party.Guid[2]);
|
||||
_worldPacket.WriteByteSeq(party.InstanceID[4]);
|
||||
|
||||
_worldPacket << int8(party.Needs[0]);
|
||||
_worldPacket << int8(party.Needs[1]);
|
||||
_worldPacket << int8(party.Needs[2]);
|
||||
|
||||
_worldPacket.WriteByteSeq(party.Guid[4]);
|
||||
_worldPacket.WriteByteSeq(party.InstanceID[7]);
|
||||
_worldPacket.WriteByteSeq(party.Guid[7]);
|
||||
_worldPacket.WriteByteSeq(party.Guid[3]);
|
||||
_worldPacket.WriteByteSeq(party.InstanceID[3]);
|
||||
_worldPacket.WriteByteSeq(party.InstanceID[5]);
|
||||
_worldPacket.WriteByteSeq(party.InstanceID[0]);
|
||||
_worldPacket.WriteByteSeq(party.Guid[5]);
|
||||
_worldPacket.WriteByteSeq(party.InstanceID[1]);
|
||||
_worldPacket.WriteByteSeq(party.Guid[1]);
|
||||
_worldPacket.WriteByteSeq(party.InstanceID[2]);
|
||||
_worldPacket.WriteByteSeq(party.Guid[0]);
|
||||
}
|
||||
|
||||
_worldPacket.WriteByteSeq(Ticket.RequesterGuid[7]);
|
||||
_worldPacket.WriteByteSeq(Ticket.RequesterGuid[1]);
|
||||
|
||||
_worldPacket << int32(CountTotalParties);
|
||||
_worldPacket << int32(Ticket.Type);
|
||||
|
||||
_worldPacket.WriteByteSeq(Ticket.RequesterGuid[4]);
|
||||
_worldPacket.WriteByteSeq(Ticket.RequesterGuid[2]);
|
||||
|
||||
_worldPacket << int32(Ticket.Id);
|
||||
|
||||
_worldPacket.WriteByteSeq(Ticket.RequesterGuid[6]);
|
||||
_worldPacket.WriteByteSeq(Ticket.RequesterGuid[5]);
|
||||
|
||||
_worldPacket << int32(CountTotalPlayers);
|
||||
_worldPacket << int32(Ticket.Time);
|
||||
|
||||
_worldPacket.WriteByteSeq(Ticket.RequesterGuid[0]);
|
||||
|
||||
_worldPacket << int32(SlotType);
|
||||
|
||||
_worldPacket.WriteByteSeq(Ticket.RequesterGuid[3]);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
@@ -413,6 +413,75 @@ namespace WorldPackets
|
||||
|
||||
lfg::LfgTeleportResult Reason;
|
||||
};
|
||||
|
||||
struct ClientLFGSearchResultParty
|
||||
{
|
||||
ObjectGuid Guid;
|
||||
uint32 ChangeMask = 0;
|
||||
std::string Comment;
|
||||
ObjectGuid InstanceID;
|
||||
uint32 InstanceCompletedMask = 0;
|
||||
uint8 Needs[3] = { };
|
||||
};
|
||||
|
||||
struct ClientLFGSearchResultPlayer
|
||||
{
|
||||
ObjectGuid Guid;
|
||||
uint32 ChangeMask = 0;
|
||||
uint8 Level = 0;
|
||||
uint8 ChrClass = 0;
|
||||
uint8 Race = 0;
|
||||
uint32 Armor = 0;
|
||||
uint32 SpellDamage = 0;
|
||||
uint32 PlusHealing = 0;
|
||||
uint32 CritMelee = 0;
|
||||
uint32 CritRanged = 0;
|
||||
uint32 CritSpell = 0;
|
||||
float Mp5 = 0.0f;
|
||||
float Mp5InCombat = 0.0f;
|
||||
uint32 AttackPower = 0;
|
||||
uint32 Agility = 0;
|
||||
uint32 MaxHealth = 0;
|
||||
uint32 MaxMana = 0;
|
||||
uint32 BossKills = 0;
|
||||
float GearRating = 0.0f;
|
||||
float AvgItemLevel = 0.0f;
|
||||
uint32 DefenseRating = 0;
|
||||
uint32 DodgeRating = 0;
|
||||
uint32 BlockRating = 0;
|
||||
uint32 ParryRating = 0;
|
||||
uint32 HasteRating = 0;
|
||||
float Expertise = 0.0f;
|
||||
uint32 SpecID = 0;
|
||||
std::string Comment;
|
||||
bool IsLeader = false;
|
||||
ObjectGuid PartyGuid;
|
||||
uint8 RolesDesired = 0;
|
||||
uint32 Area = 0;
|
||||
uint8 Status = 0;
|
||||
ObjectGuid InstanceID;
|
||||
uint32 InstanceCompletedMask = 0;
|
||||
int32 FreeTalentPoints = 0;
|
||||
std::array<int8, 3> Talents = { };
|
||||
};
|
||||
|
||||
class LFGSearchResults final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
LFGSearchResults() : ServerPacket(SMSG_LFG_SEARCH_RESULT, 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
bool Incremental = false;
|
||||
std::vector<ObjectGuid> Removes;
|
||||
RideTicket Ticket;
|
||||
uint32 SlotID = 0;
|
||||
uint32 CountTotalParties = 0;
|
||||
uint32 CountTotalPlayers = 0;
|
||||
uint32 SlotType = 0;
|
||||
std::vector<ClientLFGSearchResultParty> Parties;
|
||||
std::vector<ClientLFGSearchResultPlayer> Players;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -977,7 +977,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_ROLE_CHOSEN, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_SLOT_INVALID, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_TELEPORT_DENIED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_UPDATE_SEARCH, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_SEARCH_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_UPDATE_STATUS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_UPDATE_STATUS_NONE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_APPLICANT_LIST_UPDATED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
|
||||
@@ -925,7 +925,7 @@ enum OpcodeServer
|
||||
SMSG_LFG_SLOT_INVALID = 0x54B5,
|
||||
SMSG_LFG_TELEPORT_DENIED = 0x0E14,
|
||||
SMSG_LFG_UPDATE_LIST = 0x0000,
|
||||
SMSG_LFG_UPDATE_SEARCH = 0x54A1,
|
||||
SMSG_LFG_SEARCH_RESULT = 0x54A1,
|
||||
SMSG_LFG_UPDATE_STATUS = 0x31A4,
|
||||
SMSG_LFG_UPDATE_STATUS_NONE = 0x7CA1,
|
||||
SMSG_LF_GUILD_APPLICANT_LIST_UPDATED = 0x10A4,
|
||||
|
||||
Reference in new issue
Block a user