mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/PacketIO: Updated packet structures to 8.2
This commit is contained in:
@@ -22,7 +22,7 @@ ArenaScore::ArenaScore(ObjectGuid playerGuid, uint32 team) : BattlegroundScore(p
|
||||
{
|
||||
}
|
||||
|
||||
void ArenaScore::BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PlayerData& playerData) const
|
||||
void ArenaScore::BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics& playerData) const
|
||||
{
|
||||
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ struct TC_GAME_API ArenaScore : public BattlegroundScore
|
||||
protected:
|
||||
ArenaScore(ObjectGuid playerGuid, uint32 team);
|
||||
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PlayerData& playerData) const override;
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics& playerData) const override;
|
||||
|
||||
// For Logging purpose
|
||||
std::string ToString() const override;
|
||||
|
||||
@@ -1276,13 +1276,10 @@ bool Battleground::HasFreeSlots() const
|
||||
|
||||
void Battleground::BuildPvPLogDataPacket(WorldPackets::Battleground::PVPLogData& pvpLogData) const
|
||||
{
|
||||
if (GetStatus() == STATUS_WAIT_LEAVE)
|
||||
pvpLogData.Winner = GetWinner();
|
||||
|
||||
pvpLogData.Players.reserve(GetPlayerScoresSize());
|
||||
pvpLogData.Statistics.reserve(GetPlayerScoresSize());
|
||||
for (auto const& score : PlayerScores)
|
||||
{
|
||||
WorldPackets::Battleground::PVPLogData::PlayerData playerData;
|
||||
WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics playerData;
|
||||
score.second->BuildPvPLogPlayerDataPacket(playerData);
|
||||
|
||||
if (Player* player = ObjectAccessor::GetPlayer(GetBgMap(), playerData.PlayerGUID))
|
||||
@@ -1295,7 +1292,7 @@ void Battleground::BuildPvPLogDataPacket(WorldPackets::Battleground::PVPLogData&
|
||||
playerData.HonorLevel = player->GetHonorLevel();
|
||||
}
|
||||
|
||||
pvpLogData.Players.push_back(playerData);
|
||||
pvpLogData.Statistics.push_back(playerData);
|
||||
}
|
||||
|
||||
pvpLogData.PlayerCount[BG_TEAM_HORDE] = int8(GetPlayersCountByTeam(HORDE));
|
||||
|
||||
@@ -56,7 +56,7 @@ void BattlegroundScore::UpdateScore(uint32 type, uint32 value)
|
||||
}
|
||||
}
|
||||
|
||||
void BattlegroundScore::BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PlayerData& playerData) const
|
||||
void BattlegroundScore::BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics& playerData) const
|
||||
{
|
||||
playerData.PlayerGUID = PlayerGuid;
|
||||
playerData.Kills = KillingBlows;
|
||||
|
||||
@@ -63,7 +63,7 @@ struct BattlegroundScore
|
||||
|
||||
virtual void UpdateScore(uint32 type, uint32 value);
|
||||
|
||||
virtual void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PlayerData& playerData) const;
|
||||
virtual void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics& playerData) const;
|
||||
|
||||
// For Logging purpose
|
||||
virtual std::string ToString() const { return ""; }
|
||||
|
||||
@@ -294,7 +294,7 @@ struct BattlegroundABScore final : public BattlegroundScore
|
||||
}
|
||||
}
|
||||
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PlayerData& playerData) const override
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics& playerData) const override
|
||||
{
|
||||
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
|
||||
|
||||
|
||||
@@ -1597,7 +1597,7 @@ struct BattlegroundAVScore final : public BattlegroundScore
|
||||
}
|
||||
}
|
||||
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PlayerData& playerData) const override
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics& playerData) const override
|
||||
{
|
||||
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ class BattlegroundBFGScore final : public BattlegroundScore
|
||||
}
|
||||
}
|
||||
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PlayerData& playerData) const override
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics& playerData) const override
|
||||
{
|
||||
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
|
||||
|
||||
|
||||
@@ -377,7 +377,7 @@ struct BattlegroundEYScore final : public BattlegroundScore
|
||||
}
|
||||
}
|
||||
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PlayerData& playerData) const override
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics& playerData) const override
|
||||
{
|
||||
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
|
||||
|
||||
|
||||
@@ -937,7 +937,7 @@ struct BattlegroundICScore final : public BattlegroundScore
|
||||
}
|
||||
}
|
||||
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PlayerData& playerData) const override
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics& playerData) const override
|
||||
{
|
||||
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
|
||||
|
||||
|
||||
@@ -540,7 +540,7 @@ struct BattlegroundSAScore final : public BattlegroundScore
|
||||
}
|
||||
}
|
||||
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PlayerData& playerData) const override
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics& playerData) const override
|
||||
{
|
||||
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ class BattlegroundTPScore final : public BattlegroundScore
|
||||
}
|
||||
}
|
||||
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PlayerData& playerData) const override
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics& playerData) const override
|
||||
{
|
||||
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
|
||||
|
||||
|
||||
@@ -193,7 +193,7 @@ struct BattlegroundWGScore final : public BattlegroundScore
|
||||
}
|
||||
}
|
||||
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PlayerData& playerData) const override
|
||||
void BuildPvPLogPlayerDataPacket(WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics& playerData) const override
|
||||
{
|
||||
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
|
||||
|
||||
|
||||
@@ -505,55 +505,151 @@ void AzeriteEmpoweredItemData::ClearChangesMask()
|
||||
_changesMask.ResetAll();
|
||||
}
|
||||
|
||||
void UnlockedAzeriteEssence::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
|
||||
{
|
||||
data << uint32(AzeriteEssenceID);
|
||||
data << uint32(Rank);
|
||||
}
|
||||
|
||||
void UnlockedAzeriteEssence::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
|
||||
{
|
||||
data.FlushBits();
|
||||
data << uint32(AzeriteEssenceID);
|
||||
data << uint32(Rank);
|
||||
}
|
||||
|
||||
void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
|
||||
{
|
||||
for (std::size_t i = 0; i < 3; ++i)
|
||||
{
|
||||
data << uint32(AzeriteEssenceID[i]);
|
||||
}
|
||||
data << uint32(Field_0);
|
||||
data.WriteBits(Enabled, 1);
|
||||
data.FlushBits();
|
||||
}
|
||||
|
||||
void SelectedAzeriteEssences::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
|
||||
{
|
||||
data.FlushBits();
|
||||
data << uint32(Field_0);
|
||||
data.WriteBits(Enabled, 1);
|
||||
for (std::size_t i = 0; i < 3; ++i)
|
||||
{
|
||||
data << uint32(AzeriteEssenceID[i]);
|
||||
}
|
||||
data.FlushBits();
|
||||
}
|
||||
|
||||
void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
|
||||
{
|
||||
data << uint64(Xp);
|
||||
data << uint32(Level);
|
||||
data << uint32(AuraLevel);
|
||||
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
|
||||
{
|
||||
data << uint64(Xp);
|
||||
data << uint32(Level);
|
||||
data << uint32(AuraLevel);
|
||||
data << uint32(KnowledgeLevel);
|
||||
data << uint32(DEBUGknowledgeWeek);
|
||||
}
|
||||
data << uint32(UnlockedEssences.size());
|
||||
data << uint32(SelectedEssences.size());
|
||||
data << uint32(UnlockedEssenceMilestones.size());
|
||||
for (std::size_t i = 0; i < UnlockedEssences.size(); ++i)
|
||||
{
|
||||
UnlockedEssences[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
for (std::size_t i = 0; i < UnlockedEssenceMilestones.size(); ++i)
|
||||
{
|
||||
data << uint32(UnlockedEssenceMilestones[i]);
|
||||
}
|
||||
for (std::size_t i = 0; i < SelectedEssences.size(); ++i)
|
||||
{
|
||||
SelectedEssences[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
}
|
||||
|
||||
void AzeriteItemData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
|
||||
{
|
||||
UpdateMask<6> allowedMaskForTarget({ 0x0000000Fu });
|
||||
UpdateMask<9> allowedMaskForTarget({ 0x0000000Fu });
|
||||
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
|
||||
WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
|
||||
void AzeriteItemData::AppendAllowedFieldsMaskForFlag(UpdateMask<6>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const
|
||||
void AzeriteItemData::AppendAllowedFieldsMaskForFlag(UpdateMask<9>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const
|
||||
{
|
||||
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
|
||||
allowedMaskForTarget |= { 0x00000030u };
|
||||
allowedMaskForTarget |= { 0x000001F0u };
|
||||
}
|
||||
|
||||
void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<6> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
|
||||
void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<9> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
|
||||
{
|
||||
data.WriteBits(changesMask.GetBlock(0), 6);
|
||||
data.WriteBits(changesMask.GetBlock(0), 9);
|
||||
|
||||
if (changesMask[0])
|
||||
{
|
||||
if (changesMask[1])
|
||||
{
|
||||
UnlockedEssences.WriteUpdateMask(data);
|
||||
}
|
||||
if (changesMask[2])
|
||||
{
|
||||
UnlockedEssenceMilestones.WriteUpdateMask(data);
|
||||
}
|
||||
if (changesMask[3])
|
||||
{
|
||||
SelectedEssences.WriteUpdateMask(data);
|
||||
}
|
||||
}
|
||||
data.FlushBits();
|
||||
if (changesMask[0])
|
||||
{
|
||||
if (changesMask[1])
|
||||
{
|
||||
data << uint64(Xp);
|
||||
for (std::size_t i = 0; i < UnlockedEssences.size(); ++i)
|
||||
{
|
||||
if (UnlockedEssences.HasChanged(i))
|
||||
{
|
||||
UnlockedEssences[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[2])
|
||||
{
|
||||
data << uint32(Level);
|
||||
for (std::size_t i = 0; i < UnlockedEssenceMilestones.size(); ++i)
|
||||
{
|
||||
if (UnlockedEssenceMilestones.HasChanged(i))
|
||||
{
|
||||
data << uint32(UnlockedEssenceMilestones[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[3])
|
||||
{
|
||||
data << uint32(AuraLevel);
|
||||
for (std::size_t i = 0; i < SelectedEssences.size(); ++i)
|
||||
{
|
||||
if (SelectedEssences.HasChanged(i))
|
||||
{
|
||||
SelectedEssences[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[4])
|
||||
{
|
||||
data << uint32(KnowledgeLevel);
|
||||
data << uint64(Xp);
|
||||
}
|
||||
if (changesMask[5])
|
||||
{
|
||||
data << uint32(Level);
|
||||
}
|
||||
if (changesMask[6])
|
||||
{
|
||||
data << uint32(AuraLevel);
|
||||
}
|
||||
if (changesMask[7])
|
||||
{
|
||||
data << uint32(KnowledgeLevel);
|
||||
}
|
||||
if (changesMask[8])
|
||||
{
|
||||
data << uint32(DEBUGknowledgeWeek);
|
||||
}
|
||||
@@ -562,6 +658,9 @@ void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<6> const& changes
|
||||
|
||||
void AzeriteItemData::ClearChangesMask()
|
||||
{
|
||||
Base::ClearChangesMask(UnlockedEssences);
|
||||
Base::ClearChangesMask(UnlockedEssenceMilestones);
|
||||
Base::ClearChangesMask(SelectedEssences);
|
||||
Base::ClearChangesMask(Xp);
|
||||
Base::ClearChangesMask(Level);
|
||||
Base::ClearChangesMask(AuraLevel);
|
||||
@@ -2273,7 +2372,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
|
||||
data << float(VersatilityBonus);
|
||||
data << float(PvpPowerDamage);
|
||||
data << float(PvpPowerHealing);
|
||||
for (std::size_t i = 0; i < 160; ++i)
|
||||
for (std::size_t i = 0; i < 192; ++i)
|
||||
{
|
||||
data << uint64(ExploredZones[i]);
|
||||
}
|
||||
@@ -2442,6 +2541,10 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
|
||||
{
|
||||
SpellFlatModByLabel[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
for (std::size_t i = 0; i < 6; ++i)
|
||||
{
|
||||
PvpInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
data.WriteBit(BackpackAutoSortDisabled);
|
||||
data.WriteBit(BankAutoSortDisabled);
|
||||
data.WriteBit(SortBagsRightToLeft);
|
||||
@@ -2450,20 +2553,16 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
|
||||
{
|
||||
CharacterRestrictions[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
for (std::size_t i = 0; i < 6; ++i)
|
||||
{
|
||||
PvpInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
data.FlushBits();
|
||||
}
|
||||
|
||||
void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
|
||||
{
|
||||
UpdateMask<1455> const& changesMask = _changesMask;
|
||||
UpdateMask<1487> const& changesMask = _changesMask;
|
||||
for (std::size_t i = 0; i < 1; ++i)
|
||||
data << uint32(changesMask.GetBlocksMask(i));
|
||||
data.WriteBits(changesMask.GetBlocksMask(1), 14);
|
||||
for (std::size_t i = 0; i < 46; ++i)
|
||||
data.WriteBits(changesMask.GetBlocksMask(1), 15);
|
||||
for (std::size_t i = 0; i < 47; ++i)
|
||||
if (changesMask.GetBlock(i))
|
||||
data.WriteBits(changesMask.GetBlock(i), 32);
|
||||
|
||||
@@ -3061,7 +3160,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
|
||||
}
|
||||
if (changesMask[300])
|
||||
{
|
||||
for (std::size_t i = 0; i < 160; ++i)
|
||||
for (std::size_t i = 0; i < 192; ++i)
|
||||
{
|
||||
if (changesMask[301 + i])
|
||||
{
|
||||
@@ -3069,127 +3168,127 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[461])
|
||||
if (changesMask[493])
|
||||
{
|
||||
for (std::size_t i = 0; i < 2; ++i)
|
||||
{
|
||||
if (changesMask[462 + i])
|
||||
if (changesMask[494 + i])
|
||||
{
|
||||
RestInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[464])
|
||||
if (changesMask[496])
|
||||
{
|
||||
for (std::size_t i = 0; i < 7; ++i)
|
||||
{
|
||||
if (changesMask[465 + i])
|
||||
if (changesMask[497 + i])
|
||||
{
|
||||
data << int32(ModDamageDonePos[i]);
|
||||
}
|
||||
if (changesMask[472 + i])
|
||||
if (changesMask[504 + i])
|
||||
{
|
||||
data << int32(ModDamageDoneNeg[i]);
|
||||
}
|
||||
if (changesMask[479 + i])
|
||||
if (changesMask[511 + i])
|
||||
{
|
||||
data << float(ModDamageDonePercent[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[486])
|
||||
if (changesMask[518])
|
||||
{
|
||||
for (std::size_t i = 0; i < 3; ++i)
|
||||
{
|
||||
if (changesMask[487 + i])
|
||||
if (changesMask[519 + i])
|
||||
{
|
||||
data << float(WeaponDmgMultipliers[i]);
|
||||
}
|
||||
if (changesMask[490 + i])
|
||||
if (changesMask[522 + i])
|
||||
{
|
||||
data << float(WeaponAtkSpeedMultipliers[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[493])
|
||||
if (changesMask[525])
|
||||
{
|
||||
for (std::size_t i = 0; i < 12; ++i)
|
||||
{
|
||||
if (changesMask[494 + i])
|
||||
if (changesMask[526 + i])
|
||||
{
|
||||
data << uint32(BuybackPrice[i]);
|
||||
}
|
||||
if (changesMask[506 + i])
|
||||
if (changesMask[538 + i])
|
||||
{
|
||||
data << uint32(BuybackTimestamp[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[518])
|
||||
if (changesMask[550])
|
||||
{
|
||||
for (std::size_t i = 0; i < 32; ++i)
|
||||
{
|
||||
if (changesMask[519 + i])
|
||||
if (changesMask[551 + i])
|
||||
{
|
||||
data << int32(CombatRatings[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[558])
|
||||
if (changesMask[590])
|
||||
{
|
||||
for (std::size_t i = 0; i < 4; ++i)
|
||||
{
|
||||
if (changesMask[559 + i])
|
||||
if (changesMask[591 + i])
|
||||
{
|
||||
data << uint32(NoReagentCostMask[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[563])
|
||||
if (changesMask[595])
|
||||
{
|
||||
for (std::size_t i = 0; i < 2; ++i)
|
||||
{
|
||||
if (changesMask[564 + i])
|
||||
if (changesMask[596 + i])
|
||||
{
|
||||
data << int32(ProfessionSkillLine[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[566])
|
||||
if (changesMask[598])
|
||||
{
|
||||
for (std::size_t i = 0; i < 4; ++i)
|
||||
{
|
||||
if (changesMask[567 + i])
|
||||
if (changesMask[599 + i])
|
||||
{
|
||||
data << uint32(BagSlotFlags[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[571])
|
||||
if (changesMask[603])
|
||||
{
|
||||
for (std::size_t i = 0; i < 7; ++i)
|
||||
{
|
||||
if (changesMask[572 + i])
|
||||
if (changesMask[604 + i])
|
||||
{
|
||||
data << uint32(BankBagSlotFlags[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[579])
|
||||
if (changesMask[611])
|
||||
{
|
||||
for (std::size_t i = 0; i < 875; ++i)
|
||||
{
|
||||
if (changesMask[580 + i])
|
||||
if (changesMask[612 + i])
|
||||
{
|
||||
data << uint64(QuestCompleted[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[551])
|
||||
if (changesMask[583])
|
||||
{
|
||||
for (std::size_t i = 0; i < 6; ++i)
|
||||
{
|
||||
if (changesMask[552 + i])
|
||||
if (changesMask[584 + i])
|
||||
{
|
||||
PvpInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
@@ -3341,8 +3440,8 @@ void GameObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag
|
||||
data << int32(ViewerDependentValue<LevelTag>::GetValue(Level, owner, receiver));
|
||||
data << int8(ViewerDependentValue<StateTag>::GetValue(State, owner, receiver));
|
||||
data << int8(TypeID);
|
||||
data << uint8(ArtKit);
|
||||
data << uint8(PercentHealth);
|
||||
data << uint32(ArtKit);
|
||||
data << uint32(EnableDoodadSets.size());
|
||||
data << uint32(CustomParam);
|
||||
for (std::size_t i = 0; i < EnableDoodadSets.size(); ++i)
|
||||
@@ -3449,11 +3548,11 @@ void GameObjectData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag
|
||||
}
|
||||
if (changesMask[17])
|
||||
{
|
||||
data << uint8(ArtKit);
|
||||
data << uint8(PercentHealth);
|
||||
}
|
||||
if (changesMask[18])
|
||||
{
|
||||
data << uint8(PercentHealth);
|
||||
data << uint32(ArtKit);
|
||||
}
|
||||
if (changesMask[19])
|
||||
{
|
||||
@@ -3480,8 +3579,8 @@ void GameObjectData::ClearChangesMask()
|
||||
Base::ClearChangesMask(Level);
|
||||
Base::ClearChangesMask(State);
|
||||
Base::ClearChangesMask(TypeID);
|
||||
Base::ClearChangesMask(ArtKit);
|
||||
Base::ClearChangesMask(PercentHealth);
|
||||
Base::ClearChangesMask(ArtKit);
|
||||
Base::ClearChangesMask(CustomParam);
|
||||
_changesMask.ResetAll();
|
||||
}
|
||||
@@ -3895,11 +3994,12 @@ void ConversationActor::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldF
|
||||
void ConversationData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
|
||||
{
|
||||
data << uint32(Lines->size());
|
||||
data << int32(LastLineEndTime);
|
||||
data << uint32(Field_1C);
|
||||
for (std::size_t i = 0; i < Lines->size(); ++i)
|
||||
{
|
||||
(*Lines)[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
data << int32(LastLineEndTime);
|
||||
data << uint32(Actors.size());
|
||||
for (std::size_t i = 0; i < Actors.size(); ++i)
|
||||
{
|
||||
@@ -3909,8 +4009,8 @@ void ConversationData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
|
||||
|
||||
void ConversationData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
|
||||
{
|
||||
UpdateMask<4> const& changesMask = _changesMask;
|
||||
data.WriteBits(changesMask.GetBlock(0), 4);
|
||||
UpdateMask<5> const& changesMask = _changesMask;
|
||||
data.WriteBits(changesMask.GetBlock(0), 5);
|
||||
|
||||
if (changesMask[0])
|
||||
{
|
||||
@@ -3948,6 +4048,10 @@ void ConversationData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
|
||||
{
|
||||
data << int32(LastLineEndTime);
|
||||
}
|
||||
if (changesMask[4])
|
||||
{
|
||||
data << uint32(Field_1C);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3956,6 +4060,7 @@ void ConversationData::ClearChangesMask()
|
||||
Base::ClearChangesMask(Lines);
|
||||
Base::ClearChangesMask(Actors);
|
||||
Base::ClearChangesMask(LastLineEndTime);
|
||||
Base::ClearChangesMask(Field_1C);
|
||||
_changesMask.ResetAll();
|
||||
}
|
||||
|
||||
|
||||
@@ -134,18 +134,40 @@ struct AzeriteEmpoweredItemData : public IsUpdateFieldStructureTag, public HasCh
|
||||
void ClearChangesMask();
|
||||
};
|
||||
|
||||
struct AzeriteItemData : public IsUpdateFieldStructureTag, public HasChangesMask<6>
|
||||
struct UnlockedAzeriteEssence : public IsUpdateFieldStructureTag
|
||||
{
|
||||
UpdateField<uint64, 0, 1> Xp;
|
||||
UpdateField<uint32, 0, 2> Level;
|
||||
UpdateField<uint32, 0, 3> AuraLevel;
|
||||
UpdateField<uint32, 0, 4> KnowledgeLevel;
|
||||
UpdateField<uint32, 0, 5> DEBUGknowledgeWeek;
|
||||
uint32 AzeriteEssenceID;
|
||||
uint32 Rank;
|
||||
|
||||
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
|
||||
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
|
||||
void AppendAllowedFieldsMaskForFlag(UpdateMask<6>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const;
|
||||
void WriteUpdate(ByteBuffer& data, UpdateMask<6> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
|
||||
};
|
||||
|
||||
struct SelectedAzeriteEssences : public IsUpdateFieldStructureTag
|
||||
{
|
||||
uint32 Field_0;
|
||||
uint32 Enabled;
|
||||
uint32 AzeriteEssenceID[3];
|
||||
|
||||
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
|
||||
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
|
||||
};
|
||||
|
||||
struct AzeriteItemData : public IsUpdateFieldStructureTag, public HasChangesMask<9>
|
||||
{
|
||||
DynamicUpdateField<UnlockedAzeriteEssence, 0, 1> UnlockedEssences;
|
||||
DynamicUpdateField<uint32, 0, 2> UnlockedEssenceMilestones;
|
||||
DynamicUpdateField<SelectedAzeriteEssences, 0, 3> SelectedEssences;
|
||||
UpdateField<uint64, 0, 4> Xp;
|
||||
UpdateField<uint32, 0, 5> Level;
|
||||
UpdateField<uint32, 0, 6> AuraLevel;
|
||||
UpdateField<uint32, 0, 7> KnowledgeLevel;
|
||||
UpdateField<uint32, 0, 8> DEBUGknowledgeWeek;
|
||||
|
||||
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
|
||||
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
|
||||
void AppendAllowedFieldsMaskForFlag(UpdateMask<9>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const;
|
||||
void WriteUpdate(ByteBuffer& data, UpdateMask<9> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
|
||||
void ClearChangesMask();
|
||||
};
|
||||
|
||||
@@ -471,7 +493,7 @@ struct Research : public IsUpdateFieldStructureTag
|
||||
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
|
||||
};
|
||||
|
||||
struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1455>
|
||||
struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1487>
|
||||
{
|
||||
UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
|
||||
UpdateField<bool, 0, 2> BankAutoSortDisabled;
|
||||
@@ -571,22 +593,22 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
|
||||
UpdateField<uint8, 98, 100> NumBankSlots;
|
||||
UpdateFieldArray<ObjectGuid, 195, 101, 102> InvSlots;
|
||||
UpdateFieldArray<uint32, 2, 297, 298> TrackResourceMask;
|
||||
UpdateFieldArray<uint64, 160, 300, 301> ExploredZones;
|
||||
UpdateFieldArray<RestInfo, 2, 461, 462> RestInfo;
|
||||
UpdateFieldArray<int32, 7, 464, 465> ModDamageDonePos;
|
||||
UpdateFieldArray<int32, 7, 464, 472> ModDamageDoneNeg;
|
||||
UpdateFieldArray<float, 7, 464, 479> ModDamageDonePercent;
|
||||
UpdateFieldArray<float, 3, 486, 487> WeaponDmgMultipliers;
|
||||
UpdateFieldArray<float, 3, 486, 490> WeaponAtkSpeedMultipliers;
|
||||
UpdateFieldArray<uint32, 12, 493, 494> BuybackPrice;
|
||||
UpdateFieldArray<uint32, 12, 493, 506> BuybackTimestamp;
|
||||
UpdateFieldArray<int32, 32, 518, 519> CombatRatings;
|
||||
UpdateFieldArray<PVPInfo, 6, 551, 552> PvpInfo;
|
||||
UpdateFieldArray<uint32, 4, 558, 559> NoReagentCostMask;
|
||||
UpdateFieldArray<int32, 2, 563, 564> ProfessionSkillLine;
|
||||
UpdateFieldArray<uint32, 4, 566, 567> BagSlotFlags;
|
||||
UpdateFieldArray<uint32, 7, 571, 572> BankBagSlotFlags;
|
||||
UpdateFieldArray<uint64, 875, 579, 580> QuestCompleted;
|
||||
UpdateFieldArray<uint64, 192, 300, 301> ExploredZones;
|
||||
UpdateFieldArray<RestInfo, 2, 493, 494> RestInfo;
|
||||
UpdateFieldArray<int32, 7, 496, 497> ModDamageDonePos;
|
||||
UpdateFieldArray<int32, 7, 496, 504> ModDamageDoneNeg;
|
||||
UpdateFieldArray<float, 7, 496, 511> ModDamageDonePercent;
|
||||
UpdateFieldArray<float, 3, 518, 519> WeaponDmgMultipliers;
|
||||
UpdateFieldArray<float, 3, 518, 522> WeaponAtkSpeedMultipliers;
|
||||
UpdateFieldArray<uint32, 12, 525, 526> BuybackPrice;
|
||||
UpdateFieldArray<uint32, 12, 525, 538> BuybackTimestamp;
|
||||
UpdateFieldArray<int32, 32, 550, 551> CombatRatings;
|
||||
UpdateFieldArray<PVPInfo, 6, 583, 584> PvpInfo;
|
||||
UpdateFieldArray<uint32, 4, 590, 591> NoReagentCostMask;
|
||||
UpdateFieldArray<int32, 2, 595, 596> ProfessionSkillLine;
|
||||
UpdateFieldArray<uint32, 4, 598, 599> BagSlotFlags;
|
||||
UpdateFieldArray<uint32, 7, 603, 604> BankBagSlotFlags;
|
||||
UpdateFieldArray<uint64, 875, 611, 612> QuestCompleted;
|
||||
|
||||
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
|
||||
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
|
||||
@@ -614,8 +636,8 @@ struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<
|
||||
UpdateField<int8, 0, 15> State;
|
||||
struct StateTag : ViewerDependentValueTag<int8> {};
|
||||
UpdateField<int8, 0, 16> TypeID;
|
||||
UpdateField<uint8, 0, 17> ArtKit;
|
||||
UpdateField<uint8, 0, 18> PercentHealth;
|
||||
UpdateField<uint8, 0, 17> PercentHealth;
|
||||
UpdateField<uint32, 0, 18> ArtKit;
|
||||
UpdateField<uint32, 0, 19> CustomParam;
|
||||
|
||||
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const;
|
||||
@@ -730,11 +752,12 @@ struct ConversationActor : public IsUpdateFieldStructureTag
|
||||
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
|
||||
};
|
||||
|
||||
struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<4>
|
||||
struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<5>
|
||||
{
|
||||
UpdateField<std::vector<ConversationLine>, 0, 1> Lines;
|
||||
DynamicUpdateField<ConversationActor, 0, 2> Actors;
|
||||
UpdateField<int32, 0, 3> LastLineEndTime;
|
||||
UpdateField<uint32, 0, 4> Field_1C;
|
||||
|
||||
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
|
||||
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
|
||||
|
||||
@@ -122,7 +122,7 @@ enum SkillFieldOffset : uint16
|
||||
SKILL_PERM_BONUS_OFFSET = SKILL_TEMP_BONUS_OFFSET + CalculateSkillFieldArraySize<uint16>()
|
||||
};
|
||||
|
||||
#define PLAYER_EXPLORED_ZONES_SIZE 160
|
||||
#define PLAYER_EXPLORED_ZONES_SIZE 192
|
||||
|
||||
// Note: SPELLMOD_* values is aura types in fact
|
||||
enum SpellModType : uint8
|
||||
|
||||
@@ -43,25 +43,14 @@ void WorldSession::HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect)
|
||||
return;
|
||||
|
||||
WorldPackets::Inspect::InspectResult inspectResult;
|
||||
inspectResult.InspecteeGUID = inspect.Target;
|
||||
|
||||
for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i)
|
||||
{
|
||||
if (Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
inspectResult.Items.emplace_back(item, i);
|
||||
}
|
||||
|
||||
inspectResult.ClassID = player->getClass();
|
||||
inspectResult.GenderID = player->m_playerData->NativeSex;
|
||||
inspectResult.DisplayInfo.Initialize(player);
|
||||
|
||||
if (GetPlayer()->CanBeGameMaster() || sWorld->getIntConfig(CONFIG_TALENTS_INSPECTING) + (GetPlayer()->GetTeamId() == player->GetTeamId()) > 1)
|
||||
{
|
||||
PlayerTalentMap const* talents = player->GetTalentMap(player->GetActiveTalentGroup());
|
||||
for (PlayerTalentMap::value_type const& v : *talents)
|
||||
{
|
||||
if (v.second != PLAYERSPELL_REMOVED)
|
||||
inspectResult.Talents.push_back(v.first);
|
||||
}
|
||||
|
||||
PlayerPvpTalentMap const& pvpTalents = player->GetPvpTalentMap(player->GetActiveTalentGroup());
|
||||
for (std::size_t i = 0; i < pvpTalents.size(); ++i)
|
||||
@@ -76,8 +65,7 @@ void WorldSession::HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect)
|
||||
inspectResult.GuildData->AchievementPoints = guild->GetAchievementMgr().GetAchievementPoints();
|
||||
}
|
||||
|
||||
inspectResult.InspecteeGUID = inspect.Target;
|
||||
inspectResult.SpecializationID = player->GetPrimarySpecialization();
|
||||
inspectResult.ItemLevel = int32(player->GetAverageItemLevel());
|
||||
inspectResult.LifetimeMaxRank = player->m_activePlayerData->LifetimeMaxRank;
|
||||
inspectResult.TodayHK = player->m_activePlayerData->TodayHonorableKills;
|
||||
inspectResult.YesterdayHK = player->m_activePlayerData->YesterdayHonorableKills;
|
||||
|
||||
@@ -1207,68 +1207,6 @@ void WorldSession::HandleUseCritterItem(WorldPackets::Item::UseCritterItem& useC
|
||||
_player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true);
|
||||
}
|
||||
|
||||
void WorldSession::HandleUpgradeItem(WorldPackets::Item::UpgradeItem& upgradeItem)
|
||||
{
|
||||
WorldPackets::Item::ItemUpgradeResult itemUpgradeResult;
|
||||
if (!_player->GetNPCIfCanInteractWith(upgradeItem.ItemMaster, UNIT_NPC_FLAG_NONE, UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER))
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems - %s not found or player can't interact with it.", upgradeItem.ItemMaster.ToString().c_str());
|
||||
itemUpgradeResult.Success = false;
|
||||
SendPacket(itemUpgradeResult.Write());
|
||||
return;
|
||||
}
|
||||
|
||||
Item* item = _player->GetItemByGuid(upgradeItem.ItemGUID);
|
||||
if (!item)
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems: Item %s not found!", upgradeItem.ItemGUID.ToString().c_str());
|
||||
itemUpgradeResult.Success = false;
|
||||
SendPacket(itemUpgradeResult.Write());
|
||||
return;
|
||||
}
|
||||
|
||||
ItemUpgradeEntry const* itemUpgradeEntry = sItemUpgradeStore.LookupEntry(upgradeItem.UpgradeID);
|
||||
if (!itemUpgradeEntry)
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems - ItemUpgradeEntry (%u) not found.", upgradeItem.UpgradeID);
|
||||
itemUpgradeResult.Success = false;
|
||||
SendPacket(itemUpgradeResult.Write());
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if player has enough currency
|
||||
if (!_player->HasCurrency(itemUpgradeEntry->CurrencyType, itemUpgradeEntry->CurrencyAmount))
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems - Player has not enougth currency (ID: %u, Cost: %u) not found.", itemUpgradeEntry->CurrencyType, itemUpgradeEntry->CurrencyAmount);
|
||||
itemUpgradeResult.Success = false;
|
||||
SendPacket(itemUpgradeResult.Write());
|
||||
return;
|
||||
}
|
||||
|
||||
uint32 currentUpgradeId = item->GetModifier(ITEM_MODIFIER_UPGRADE_ID);
|
||||
if (currentUpgradeId != itemUpgradeEntry->PrerequisiteID)
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems - ItemUpgradeEntry (%u) is not related to this ItemUpgradePath (%u).", itemUpgradeEntry->ID, currentUpgradeId);
|
||||
itemUpgradeResult.Success = false;
|
||||
SendPacket(itemUpgradeResult.Write());
|
||||
return;
|
||||
}
|
||||
|
||||
itemUpgradeResult.Success = true;
|
||||
SendPacket(itemUpgradeResult.Write());
|
||||
|
||||
if (item->IsEquipped())
|
||||
_player->_ApplyItemBonuses(item, item->GetSlot(), false);
|
||||
|
||||
item->SetModifier(ITEM_MODIFIER_UPGRADE_ID, itemUpgradeEntry->ID);
|
||||
|
||||
if (item->IsEquipped())
|
||||
_player->_ApplyItemBonuses(item, item->GetSlot(), true);
|
||||
|
||||
item->SetState(ITEM_CHANGED, _player);
|
||||
_player->ModifyCurrency(itemUpgradeEntry->CurrencyType, -int32(itemUpgradeEntry->CurrencyAmount));
|
||||
}
|
||||
|
||||
void WorldSession::HandleSortBags(WorldPackets::Item::SortBags& /*sortBags*/)
|
||||
{
|
||||
// TODO: Implement sorting
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "HmacHash.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "RSA.h"
|
||||
#include "SHA256.h"
|
||||
#include "Util.h"
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Auth::VirtualRealmNameInfo const& virtualRealmInfo)
|
||||
@@ -73,7 +74,7 @@ const WorldPacket* WorldPackets::Auth::Pong::Write()
|
||||
|
||||
WorldPacket const* WorldPackets::Auth::AuthChallenge::Write()
|
||||
{
|
||||
_worldPacket.append(DosChallenge, 8);
|
||||
_worldPacket.append(DosChallenge.data(), DosChallenge.size());
|
||||
_worldPacket.append(Challenge.data(), Challenge.size());
|
||||
_worldPacket << uint8(DosZeroBits);
|
||||
return &_worldPacket;
|
||||
@@ -201,25 +202,6 @@ WorldPacket const* WorldPackets::Auth::WaitQueueUpdate::Write()
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
std::string const WorldPackets::Auth::ConnectTo::Haiku("An island of peace\nCorruption is brought ashore\nPandarens will rise\n\0\0", 71);
|
||||
|
||||
uint8 const WorldPackets::Auth::ConnectTo::PiDigits[130] =
|
||||
{
|
||||
0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93, 0x23, 0x84,
|
||||
0x62, 0x64, 0x33, 0x83, 0x27, 0x95, 0x02, 0x88, 0x41, 0x97,
|
||||
0x16, 0x93, 0x99, 0x37, 0x51, 0x05, 0x82, 0x09, 0x74, 0x94,
|
||||
0x45, 0x92, 0x30, 0x78, 0x16, 0x40, 0x62, 0x86, 0x20, 0x89,
|
||||
0x98, 0x62, 0x80, 0x34, 0x82, 0x53, 0x42, 0x11, 0x70, 0x67,
|
||||
0x98, 0x21, 0x48, 0x08, 0x65, 0x13, 0x28, 0x23, 0x06, 0x64,
|
||||
0x70, 0x93, 0x84, 0x46, 0x09, 0x55, 0x05, 0x82, 0x23, 0x17,
|
||||
0x25, 0x35, 0x94, 0x08, 0x12, 0x84, 0x81, 0x11, 0x74, 0x50,
|
||||
0x28, 0x41, 0x02, 0x70, 0x19, 0x38, 0x52, 0x11, 0x05, 0x55,
|
||||
0x96, 0x44, 0x62, 0x29, 0x48, 0x95, 0x49, 0x30, 0x38, 0x19,
|
||||
0x64, 0x42, 0x88, 0x10, 0x97, 0x56, 0x65, 0x93, 0x34, 0x46,
|
||||
0x12, 0x84, 0x75, 0x64, 0x82, 0x33, 0x78, 0x67, 0x83, 0x16,
|
||||
0x52, 0x71, 0x20, 0x19, 0x09, 0x14, 0x56, 0x48, 0x56, 0x69,
|
||||
};
|
||||
|
||||
namespace
|
||||
{
|
||||
std::string RSAPrivateKey = R"(-----BEGIN RSA PRIVATE KEY-----
|
||||
@@ -252,14 +234,6 @@ OHYtKG3GK3GEcFDwZU2LPHq21EroUAdtRfbrJ4KW2yc8igtXKxTBYw==
|
||||
)";
|
||||
|
||||
std::unique_ptr<Trinity::Crypto::RSA> ConnectToRSA;
|
||||
|
||||
uint8 const WherePacketHmac[] =
|
||||
{
|
||||
0x2C, 0x1F, 0x1D, 0x80, 0xC3, 0x8C, 0x23, 0x64, 0xDA, 0x90, 0xCA, 0x8E, 0x2C, 0xFC, 0x0C, 0xCE,
|
||||
0x09, 0xD3, 0x62, 0xF9, 0xF3, 0x8B, 0xBE, 0x9F, 0x19, 0xEF, 0x58, 0xA1, 0x1C, 0x34, 0x14, 0x41,
|
||||
0x3F, 0x23, 0xFD, 0xD3, 0xE8, 0x14, 0xEC, 0x2A, 0xFD, 0x4F, 0x95, 0xBA, 0x30, 0x7E, 0x56, 0x5D,
|
||||
0x83, 0x95, 0x81, 0x69, 0xB0, 0x5A, 0xB4, 0x9D, 0xA8, 0x55, 0xFF, 0xFC, 0xEE, 0x58, 0x0A, 0x2F
|
||||
};
|
||||
}
|
||||
|
||||
bool WorldPackets::Auth::ConnectTo::InitializeEncryption()
|
||||
@@ -272,50 +246,44 @@ bool WorldPackets::Auth::ConnectTo::InitializeEncryption()
|
||||
return true;
|
||||
}
|
||||
|
||||
WorldPackets::Auth::ConnectTo::ConnectTo() : ServerPacket(SMSG_CONNECT_TO, 8 + 4 + 256 + 1)
|
||||
WorldPackets::Auth::ConnectTo::ConnectTo() : ServerPacket(SMSG_CONNECT_TO, 256 + 1 + 16 + 2 + 4 + 1 + 8)
|
||||
{
|
||||
Payload.Where.fill(0);
|
||||
HexStrToByteArray("F41DCB2D728CF3337A4FF338FA89DB01BBBE9C3B65E9DA96268687353E48B94C", Payload.PanamaKey);
|
||||
Payload.Adler32 = 0xA0A66C10;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Auth::ConnectTo::Write()
|
||||
{
|
||||
HmacSha1 hmacHash(64, WherePacketHmac);
|
||||
hmacHash.UpdateData(Payload.Where.data(), 16);
|
||||
hmacHash.UpdateData((uint8* const)&Payload.Type, 1);
|
||||
hmacHash.UpdateData((uint8* const)&Payload.Port, 2);
|
||||
hmacHash.UpdateData((uint8* const)Haiku.c_str(), 71);
|
||||
hmacHash.UpdateData(Payload.PanamaKey, 32);
|
||||
hmacHash.UpdateData(PiDigits, 108);
|
||||
hmacHash.UpdateData(&Payload.XorMagic, 1);
|
||||
hmacHash.Finalize();
|
||||
ByteBuffer whereBuffer;
|
||||
whereBuffer << uint8(Payload.Where.Type);
|
||||
switch (Payload.Where.Type)
|
||||
{
|
||||
case IPv4:
|
||||
whereBuffer.append(Payload.Where.Address.V4.data(), Payload.Where.Address.V4.size());
|
||||
break;
|
||||
case IPv6:
|
||||
whereBuffer.append(Payload.Where.Address.V6.data(), Payload.Where.Address.V6.size());
|
||||
break;
|
||||
case NamedSocket:
|
||||
whereBuffer << Payload.Where.Address.Name.data();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
ByteBuffer payload;
|
||||
payload << uint32(Payload.Adler32);
|
||||
payload << uint8(Payload.Type);
|
||||
payload.append(Payload.Where.data(), 16);
|
||||
payload << uint16(Payload.Port);
|
||||
payload.append(Haiku.data(), 71);
|
||||
payload.append(Payload.PanamaKey, 32);
|
||||
payload.append(PiDigits, 108);
|
||||
payload << uint8(Payload.XorMagic);
|
||||
payload.append(hmacHash.GetDigest(), hmacHash.GetLength());
|
||||
uint32 type = Payload.Where.Type;
|
||||
SHA256Hash hash;
|
||||
hash.UpdateData(whereBuffer.contents(), whereBuffer.size());
|
||||
hash.UpdateData(reinterpret_cast<uint8 const*>(&type), 4);
|
||||
hash.UpdateData(reinterpret_cast<uint8 const*>(&Payload.Port), 2);
|
||||
hash.Finalize();
|
||||
|
||||
uint32 rsaSize = ConnectToRSA->GetOutputSize();
|
||||
if (payload.size() < rsaSize)
|
||||
payload.resize(rsaSize);
|
||||
ConnectToRSA->Sign(hash.GetDigest(), hash.GetLength(), Payload.Signature.data(), Trinity::Crypto::RSA::SHA256{});
|
||||
|
||||
_worldPacket << uint64(Key);
|
||||
_worldPacket.append(Payload.Signature.data(), Payload.Signature.size());
|
||||
_worldPacket.append(whereBuffer);
|
||||
_worldPacket << uint16(Payload.Port);
|
||||
_worldPacket << uint32(Serial);
|
||||
size_t encryptedPayloadPos = _worldPacket.wpos();
|
||||
_worldPacket.resize(_worldPacket.size() + rsaSize);
|
||||
_worldPacket << uint8(Con);
|
||||
|
||||
ConnectToRSA->Encrypt(payload.contents(), payload.size(),
|
||||
_worldPacket.contents() + encryptedPayloadPos,
|
||||
Trinity::Crypto::RSA::PrivateKey{},
|
||||
Trinity::Crypto::RSA::NoPadding{});
|
||||
_worldPacket << uint64(Key);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
@@ -333,3 +301,22 @@ void WorldPackets::Auth::ConnectToFailed::Read()
|
||||
Serial = _worldPacket.read<ConnectToSerial>();
|
||||
_worldPacket >> Con;
|
||||
}
|
||||
|
||||
uint8 constexpr EnableEncryptionSeed[16] = { 0x90, 0x9C, 0xD0, 0x50, 0x5A, 0x2C, 0x14, 0xDD, 0x5C, 0x2C, 0xC0, 0x64, 0x14, 0xF3, 0xFE, 0xC9 };
|
||||
|
||||
WorldPacket const* WorldPackets::Auth::EnableEncryption::Write()
|
||||
{
|
||||
HmacSha256 hash(16, EncryptionKey);
|
||||
hash.UpdateData(reinterpret_cast<uint8 const*>(&Enabled), 1);
|
||||
hash.UpdateData(EnableEncryptionSeed, 16);
|
||||
hash.Finalize();
|
||||
|
||||
_worldPacket.resize(_worldPacket.size() + ConnectToRSA->GetOutputSize());
|
||||
|
||||
ConnectToRSA->Sign(hash.GetDigest(), hash.GetLength(), _worldPacket.contents(), Trinity::Crypto::RSA::SHA256{});
|
||||
|
||||
_worldPacket.WriteBit(Enabled);
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
@@ -63,12 +63,12 @@ namespace WorldPackets
|
||||
class AuthChallenge final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
AuthChallenge() : ServerPacket(SMSG_AUTH_CHALLENGE, 4 + 32 + 1) { }
|
||||
AuthChallenge() : ServerPacket(SMSG_AUTH_CHALLENGE, 16 + 4 * 8 + 1) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
std::array<uint8, 16> Challenge = { };
|
||||
uint32 DosChallenge[8] = { }; ///< Encryption seeds
|
||||
std::array<uint32, 8> DosChallenge = { };
|
||||
uint8 DosZeroBits = 0;
|
||||
};
|
||||
|
||||
@@ -200,26 +200,32 @@ namespace WorldPackets
|
||||
|
||||
class ConnectTo final : public ServerPacket
|
||||
{
|
||||
static std::string const Haiku;
|
||||
static uint8 const PiDigits[130];
|
||||
|
||||
public:
|
||||
static bool InitializeEncryption();
|
||||
|
||||
enum AddressType : uint8
|
||||
{
|
||||
IPv4 = 1,
|
||||
IPv6 = 2
|
||||
IPv6 = 2,
|
||||
NamedSocket = 3 // not supported by windows client
|
||||
};
|
||||
|
||||
struct SocketAddress
|
||||
{
|
||||
AddressType Type;
|
||||
union
|
||||
{
|
||||
std::array<uint8, 4> V4;
|
||||
std::array<uint8, 16> V6;
|
||||
std::array<char, 128> Name;
|
||||
} Address;
|
||||
};
|
||||
|
||||
struct ConnectPayload
|
||||
{
|
||||
std::array<uint8, 16> Where;
|
||||
SocketAddress Where;
|
||||
uint16 Port;
|
||||
AddressType Type;
|
||||
uint32 Adler32 = 0;
|
||||
uint8 XorMagic = 0x2A;
|
||||
uint8 PanamaKey[32];
|
||||
std::array<uint8, 256> Signature;
|
||||
};
|
||||
|
||||
ConnectTo();
|
||||
@@ -275,9 +281,15 @@ namespace WorldPackets
|
||||
class EnableEncryption final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
EnableEncryption() : ServerPacket(SMSG_ENABLE_ENCRYPTION, 0) { }
|
||||
EnableEncryption(uint8 const* encryptionKey, bool enabled) : ServerPacket(SMSG_ENABLE_ENCRYPTION, 256 + 1),
|
||||
EncryptionKey(encryptionKey), Enabled(enabled)
|
||||
{
|
||||
}
|
||||
|
||||
WorldPacket const* Write() override { return &_worldPacket; }
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint8 const* EncryptionKey;
|
||||
bool Enabled = false;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,9 +19,10 @@
|
||||
|
||||
WorldPacket const* WorldPackets::Battleground::PVPSeason::Write()
|
||||
{
|
||||
_worldPacket << uint32(CurrentSeason);
|
||||
_worldPacket << uint32(PreviousSeason);
|
||||
_worldPacket << uint32(PvpSeasonID);
|
||||
_worldPacket << int32(MythicPlusSeasonID);
|
||||
_worldPacket << int32(CurrentSeason);
|
||||
_worldPacket << int32(PreviousSeason);
|
||||
_worldPacket << int32(PvpSeasonID);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
@@ -46,9 +47,12 @@ WorldPacket const* WorldPackets::Battleground::AreaSpiritHealerTime::Write()
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData::RatingData const& ratingData)
|
||||
{
|
||||
data.append(ratingData.Prematch, 2);
|
||||
data.append(ratingData.Postmatch, 2);
|
||||
data.append(ratingData.PrematchMMR, 2);
|
||||
for (std::size_t i = 0; i < 2; ++i)
|
||||
{
|
||||
data << int32(ratingData.Prematch[i]);
|
||||
data << int32(ratingData.Postmatch[i]);
|
||||
data << int32(ratingData.PrematchMMR[i]);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
@@ -60,7 +64,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData:
|
||||
return data;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData::PlayerData const& playerData)
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics const& playerData)
|
||||
{
|
||||
data << playerData.PlayerGUID;
|
||||
data << uint32(playerData.Kills);
|
||||
@@ -105,20 +109,16 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData:
|
||||
|
||||
WorldPacket const* WorldPackets::Battleground::PVPLogData::Write()
|
||||
{
|
||||
_worldPacket.reserve(Players.size() * sizeof(PlayerData) + sizeof(PVPLogData));
|
||||
_worldPacket.reserve(Statistics.size() * sizeof(PVPMatchPlayerStatistics) + sizeof(PVPLogData));
|
||||
|
||||
_worldPacket.WriteBit(Ratings.is_initialized());
|
||||
_worldPacket.WriteBit(Winner.is_initialized());
|
||||
_worldPacket << uint32(Players.size());
|
||||
_worldPacket.append(PlayerCount, 2);
|
||||
_worldPacket << uint32(Statistics.size());
|
||||
_worldPacket.append(PlayerCount.data(), PlayerCount.size());
|
||||
|
||||
if (Ratings.is_initialized())
|
||||
_worldPacket << *Ratings;
|
||||
|
||||
if (Winner)
|
||||
_worldPacket << uint8(*Winner);
|
||||
|
||||
for (PlayerData const& player : Players)
|
||||
for (PVPMatchPlayerStatistics const& player : Statistics)
|
||||
_worldPacket << player;
|
||||
|
||||
return &_worldPacket;
|
||||
|
||||
@@ -32,13 +32,14 @@ namespace WorldPackets
|
||||
class PVPSeason final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
PVPSeason() : ServerPacket(SMSG_PVP_SEASON, 8) { }
|
||||
PVPSeason() : ServerPacket(SMSG_PVP_SEASON, 4 + 4 + 4 + 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint32 PreviousSeason = 0;
|
||||
uint32 CurrentSeason = 0;
|
||||
uint32 PvpSeasonID = 0;
|
||||
int32 MythicPlusSeasonID = 0;
|
||||
int32 PreviousSeason = 0;
|
||||
int32 CurrentSeason = 0;
|
||||
int32 PvpSeasonID = 0;
|
||||
};
|
||||
|
||||
class AreaSpiritHealerQuery final : public ClientPacket
|
||||
@@ -109,7 +110,7 @@ namespace WorldPackets
|
||||
uint32 ContributionPoints = 0;
|
||||
};
|
||||
|
||||
struct PlayerData
|
||||
struct PVPMatchPlayerStatistics
|
||||
{
|
||||
ObjectGuid PlayerGUID;
|
||||
uint32 Kills = 0;
|
||||
@@ -131,10 +132,9 @@ namespace WorldPackets
|
||||
int32 HonorLevel = 0;
|
||||
};
|
||||
|
||||
Optional<uint8> Winner;
|
||||
std::vector<PlayerData> Players;
|
||||
std::vector<PVPMatchPlayerStatistics> Statistics;
|
||||
Optional<RatingData> Ratings;
|
||||
int8 PlayerCount[2] = { };
|
||||
std::array<int8, 2> PlayerCount = { };
|
||||
};
|
||||
|
||||
struct BattlefieldStatusHeader
|
||||
|
||||
@@ -55,6 +55,7 @@ WorldPacket const* WorldPackets::Battlenet::Response::Write()
|
||||
WorldPacket const* WorldPackets::Battlenet::SetSessionState::Write()
|
||||
{
|
||||
_worldPacket.WriteBits(State, 2);
|
||||
_worldPacket.WriteBit(SuppressNotification);
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
return &_worldPacket;
|
||||
|
||||
@@ -68,6 +68,7 @@ namespace WorldPackets
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint8 State = 0;
|
||||
bool SuppressNotification = true;
|
||||
};
|
||||
|
||||
class RealmListTicket final : public ServerPacket
|
||||
|
||||
@@ -65,7 +65,7 @@ WorldPacket const* WorldPackets::Channel::ChannelNotify::Write()
|
||||
WorldPacket const* WorldPackets::Channel::ChannelNotifyJoined::Write()
|
||||
{
|
||||
_worldPacket.WriteBits(_Channel.length(), 7);
|
||||
_worldPacket.WriteBits(ChannelWelcomeMsg.length(), 10);
|
||||
_worldPacket.WriteBits(ChannelWelcomeMsg.length(), 11);
|
||||
_worldPacket << uint32(_ChannelFlags);
|
||||
_worldPacket << int32(ChatChannelID);
|
||||
_worldPacket << uint64(InstanceID);
|
||||
|
||||
@@ -236,7 +236,7 @@ namespace WorldPackets
|
||||
class GarrisonBuildingRemoved final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GarrisonBuildingRemoved() : ServerPacket(SMSG_GARRISON_BUILDING_REMOVED, 4 + 4 + 4) { }
|
||||
GarrisonBuildingRemoved() : ServerPacket(SMSG_GARRISON_BUILDING_REMOVED, 4 + 4 + 4 + 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
@@ -353,7 +353,7 @@ namespace WorldPackets
|
||||
class GarrisonRemoveFollowerResult final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GarrisonRemoveFollowerResult() : ServerPacket(SMSG_GARRISON_REMOVE_FOLLOWER_RESULT, 8 + 4 + 4) { }
|
||||
GarrisonRemoveFollowerResult() : ServerPacket(SMSG_GARRISON_REMOVE_FOLLOWER_RESULT, 8 + 4 + 4 + 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ WorldPacket const* WorldPackets::Guild::GuildRoster::Write()
|
||||
_worldPacket.AppendPackedTime(CreateDate);
|
||||
_worldPacket << int32(GuildFlags);
|
||||
_worldPacket << uint32(MemberData.size());
|
||||
_worldPacket.WriteBits(WelcomeText.length(), 10);
|
||||
_worldPacket.WriteBits(WelcomeText.length(), 11);
|
||||
_worldPacket.WriteBits(InfoText.length(), 11);
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
@@ -93,7 +93,7 @@ WorldPacket const* WorldPackets::Guild::GuildRosterUpdate::Write()
|
||||
|
||||
void WorldPackets::Guild::GuildUpdateMotdText::Read()
|
||||
{
|
||||
uint32 textLen = _worldPacket.ReadBits(10);
|
||||
uint32 textLen = _worldPacket.ReadBits(11);
|
||||
MotdText = _worldPacket.ReadString(textLen);
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ WorldPacket const* WorldPackets::Guild::GuildEventPresenceChange::Write()
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::GuildEventMotd::Write()
|
||||
{
|
||||
_worldPacket.WriteBits(MotdText.length(), 10);
|
||||
_worldPacket.WriteBits(MotdText.length(), 11);
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
_worldPacket.WriteString(MotdText);
|
||||
|
||||
@@ -54,6 +54,49 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectItemData
|
||||
return data;
|
||||
}
|
||||
|
||||
void WorldPackets::Inspect::PlayerModelDisplayInfo::Initialize(Player const* player)
|
||||
{
|
||||
GUID = player->GetGUID();
|
||||
SpecializationID = player->GetPrimarySpecialization();
|
||||
Name = player->GetName();
|
||||
GenderID = player->m_playerData->NativeSex;
|
||||
Skin = player->m_playerData->SkinID;
|
||||
HairColor = player->m_playerData->HairColorID;
|
||||
HairStyle = player->m_playerData->HairStyleID;
|
||||
FacialHairStyle = player->m_playerData->FacialHairStyleID;
|
||||
Face = player->m_playerData->FaceID;
|
||||
Race = player->getRace();
|
||||
ClassID = player->getClass();
|
||||
std::copy(player->m_playerData->CustomDisplayOption.begin(), player->m_playerData->CustomDisplayOption.end(), CustomDisplay.begin());
|
||||
|
||||
for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i)
|
||||
if (::Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, i))
|
||||
Items.emplace_back(item, i);
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PlayerModelDisplayInfo const& displayInfo)
|
||||
{
|
||||
data << displayInfo.GUID;
|
||||
data << int32(displayInfo.SpecializationID);
|
||||
data << uint32(displayInfo.Items.size());
|
||||
data.WriteBits(displayInfo.Name.length(), 6);
|
||||
data << uint8(displayInfo.GenderID);
|
||||
data << uint8(displayInfo.Skin);
|
||||
data << uint8(displayInfo.HairColor);
|
||||
data << uint8(displayInfo.HairStyle);
|
||||
data << uint8(displayInfo.FacialHairStyle);
|
||||
data << uint8(displayInfo.Face);
|
||||
data << uint8(displayInfo.Race);
|
||||
data << uint8(displayInfo.ClassID);
|
||||
data.append(displayInfo.CustomDisplay.data(), displayInfo.CustomDisplay.size());
|
||||
data.WriteString(displayInfo.Name);
|
||||
|
||||
for (WorldPackets::Inspect::InspectItemData const& item : displayInfo.Items)
|
||||
data << item;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectGuildData const& guildData)
|
||||
{
|
||||
data << guildData.GuildGUID;
|
||||
@@ -110,14 +153,11 @@ WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint
|
||||
|
||||
WorldPacket const* WorldPackets::Inspect::InspectResult::Write()
|
||||
{
|
||||
_worldPacket << InspecteeGUID;
|
||||
_worldPacket << uint32(Items.size());
|
||||
_worldPacket << DisplayInfo;
|
||||
_worldPacket << uint32(Glyphs.size());
|
||||
_worldPacket << uint32(Talents.size());
|
||||
_worldPacket << uint32(PvpTalents.size());
|
||||
_worldPacket << int32(ClassID);
|
||||
_worldPacket << int32(SpecializationID);
|
||||
_worldPacket << int32(GenderID);
|
||||
_worldPacket << int32(ItemLevel);
|
||||
_worldPacket << uint8(LifetimeMaxRank);
|
||||
_worldPacket << uint16(TodayHK);
|
||||
_worldPacket << uint16(YesterdayHK);
|
||||
@@ -143,9 +183,6 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write()
|
||||
if (AzeriteLevel)
|
||||
_worldPacket << int32(*AzeriteLevel);
|
||||
|
||||
for (InspectItemData const& item : Items)
|
||||
_worldPacket << item;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "SharedDefines.h"
|
||||
|
||||
class Item;
|
||||
class Player;
|
||||
|
||||
namespace WorldPackets
|
||||
{
|
||||
@@ -60,6 +61,25 @@ namespace WorldPackets
|
||||
std::vector<int32> AzeritePowers;
|
||||
};
|
||||
|
||||
struct PlayerModelDisplayInfo
|
||||
{
|
||||
ObjectGuid GUID;
|
||||
std::vector<InspectItemData> Items;
|
||||
std::string Name;
|
||||
int32 SpecializationID = 0;
|
||||
uint8 GenderID = GENDER_NONE;
|
||||
uint8 Skin = 0;
|
||||
uint8 HairColor = 0;
|
||||
uint8 HairStyle = 0;
|
||||
uint8 FacialHairStyle = 0;
|
||||
uint8 Face = 0;
|
||||
uint8 Race = RACE_NONE;
|
||||
uint8 ClassID = CLASS_NONE;
|
||||
std::array<uint8, PLAYER_CUSTOM_DISPLAY_SIZE> CustomDisplay;
|
||||
|
||||
void Initialize(Player const* player);
|
||||
};
|
||||
|
||||
struct InspectGuildData
|
||||
{
|
||||
ObjectGuid GuildGUID;
|
||||
@@ -92,17 +112,14 @@ namespace WorldPackets
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
ObjectGuid InspecteeGUID;
|
||||
std::vector<InspectItemData> Items;
|
||||
PlayerModelDisplayInfo DisplayInfo;
|
||||
std::vector<uint16> Glyphs;
|
||||
std::vector<uint16> Talents;
|
||||
std::array<uint16, MAX_PVP_TALENT_SLOTS> PvpTalents;
|
||||
int32 ClassID = CLASS_NONE;
|
||||
int32 GenderID = GENDER_NONE;
|
||||
Optional<InspectGuildData> GuildData;
|
||||
std::array<PVPBracketData, 6> Bracket;
|
||||
int32 SpecializationID = 0;
|
||||
Optional<int32> AzeriteLevel;
|
||||
int32 ItemLevel = 0;
|
||||
uint32 LifetimeHK = 0;
|
||||
uint32 HonorLevel = 0;
|
||||
uint16 TodayHK = 0;
|
||||
|
||||
@@ -328,15 +328,6 @@ void WorldPackets::Item::UseCritterItem::Read()
|
||||
_worldPacket >> ItemGuid;
|
||||
}
|
||||
|
||||
void WorldPackets::Item::UpgradeItem::Read()
|
||||
{
|
||||
_worldPacket >> ItemMaster;
|
||||
_worldPacket >> ItemGUID;
|
||||
_worldPacket >> UpgradeID;
|
||||
_worldPacket >> ContainerSlot;
|
||||
_worldPacket >> Slot;
|
||||
}
|
||||
|
||||
void WorldPackets::Item::SocketGems::Read()
|
||||
{
|
||||
_worldPacket >> ItemGuid;
|
||||
@@ -351,14 +342,6 @@ WorldPacket const* WorldPackets::Item::SocketGemsResult::Write()
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Item::ItemUpgradeResult::Write()
|
||||
{
|
||||
_worldPacket.WriteBit(Success);
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Item::RemoveNewItem::Read()
|
||||
{
|
||||
_worldPacket >> ItemGuid;
|
||||
|
||||
@@ -447,30 +447,6 @@ namespace WorldPackets
|
||||
ObjectGuid ItemGuid;
|
||||
};
|
||||
|
||||
class UpgradeItem final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
UpgradeItem(WorldPacket&& packet) : ClientPacket(CMSG_UPGRADE_ITEM, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid ItemMaster;
|
||||
ObjectGuid ItemGUID;
|
||||
int32 ContainerSlot = 0;
|
||||
int32 UpgradeID = 0;
|
||||
int32 Slot = 0;
|
||||
};
|
||||
|
||||
class ItemUpgradeResult final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
ItemUpgradeResult() : ServerPacket(SMSG_ITEM_UPGRADE_RESULT, 1) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
bool Success = false;
|
||||
};
|
||||
|
||||
class SocketGems final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -51,6 +51,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Social::ContactInfo const
|
||||
data << uint32(contact.Level);
|
||||
data << uint32(contact.ClassID);
|
||||
data.WriteBits(contact.Notes.length(), 10);
|
||||
data.WriteBit(contact.Mobile);
|
||||
data.FlushBits();
|
||||
data.WriteString(contact.Notes);
|
||||
|
||||
@@ -93,6 +94,7 @@ WorldPacket const* WorldPackets::Social::FriendStatus::Write()
|
||||
_worldPacket << uint32(Level);
|
||||
_worldPacket << uint32(ClassID);
|
||||
_worldPacket.WriteBits(Notes.length(), 10);
|
||||
_worldPacket.WriteBit(Mobile);
|
||||
_worldPacket.FlushBits();
|
||||
_worldPacket.WriteString(Notes);
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@ namespace WorldPackets
|
||||
uint32 AreaID = 0;
|
||||
uint32 Level = 0;
|
||||
uint32 ClassID = CLASS_NONE;
|
||||
bool Mobile = false;
|
||||
};
|
||||
|
||||
class ContactList final : public ServerPacket
|
||||
@@ -84,6 +85,7 @@ namespace WorldPackets
|
||||
uint32 Level = 0;
|
||||
uint32 AreaID = 0;
|
||||
uint8 FriendResult = 0; ///< @see enum FriendsResult
|
||||
bool Mobile = false;
|
||||
};
|
||||
|
||||
struct QualifiedGUID
|
||||
|
||||
@@ -185,6 +185,8 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_AUTO_STORE_BAG_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoStoreBagItemOpcode);
|
||||
DEFINE_HANDLER(CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_AZERITE_EMPOWERED_ITEM_VIEWED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_BANKER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBankerActivateOpcode);
|
||||
DEFINE_HANDLER(CMSG_BATTLEFIELD_LEAVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldLeaveOpcode);
|
||||
DEFINE_HANDLER(CMSG_BATTLEFIELD_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldListOpcode);
|
||||
@@ -326,6 +328,14 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_CLIENT_PORT_GRAVEYARD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePortGraveyard);
|
||||
DEFINE_HANDLER(CMSG_CLOSE_INTERACTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCloseInteraction);
|
||||
DEFINE_HANDLER(CMSG_CLOSE_QUEST_CHOICE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CLUB_FINDER_APPLICATION_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CLUB_FINDER_GET_APPLICANTS_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CLUB_FINDER_POST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CLUB_INVITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_COLLECTION_ITEM_SET_FAVORITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCollectionItemSetFavorite);
|
||||
DEFINE_HANDLER(CMSG_COMMENTATOR_ENABLE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
@@ -344,7 +354,6 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_CONTRIBUTION_CONTRIBUTE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CONTRIBUTION_GET_STATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CONVERSATION_LINE_STARTED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CONVERT_CONSUMPTION_TIME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CONVERT_RAID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConvertRaidOpcode);
|
||||
DEFINE_HANDLER(CMSG_CREATE_CHARACTER, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharCreateOpcode);
|
||||
DEFINE_HANDLER(CMSG_CREATE_SHIPMENT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
@@ -549,7 +558,6 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_MOVE_FORCE_ROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
|
||||
DEFINE_HANDLER(CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck);
|
||||
DEFINE_HANDLER(CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck);
|
||||
DEFINE_HANDLER(CMSG_MOVE_FORCE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck);
|
||||
DEFINE_HANDLER(CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck);
|
||||
DEFINE_HANDLER(CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck);
|
||||
@@ -570,6 +578,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_MOVE_SET_FACING, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes);
|
||||
DEFINE_HANDLER(CMSG_MOVE_SET_FLY, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes);
|
||||
DEFINE_HANDLER(CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
|
||||
DEFINE_HANDLER(CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_MOVE_SET_PITCH, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes);
|
||||
DEFINE_HANDLER(CMSG_MOVE_SET_RUN_MODE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes);
|
||||
DEFINE_HANDLER(CMSG_MOVE_SET_VEHICLE_REC_ID_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveSetVehicleRecAck);
|
||||
@@ -635,7 +644,6 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_PET_STOP_ATTACK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetStopAttack);
|
||||
DEFINE_HANDLER(CMSG_PING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess);
|
||||
DEFINE_HANDLER(CMSG_PLAYER_LOGIN, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandlePlayerLoginOpcode);
|
||||
DEFINE_HANDLER(CMSG_PROTOCOL_MISMATCH, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_PUSH_QUEST_TO_PARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePushQuestToParty);
|
||||
DEFINE_HANDLER(CMSG_PVP_LOG_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePVPLogDataOpcode);
|
||||
DEFINE_HANDLER(CMSG_QUERY_BATTLE_PET_NAME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
@@ -704,7 +712,6 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_REQUEST_CHALLENGE_MODE_AFFIXES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_CONSUMPTION_CONVERSION_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_CROWD_CONTROL_SPELL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_FORCED_REACTIONS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestForcedReactionsOpcode);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_GUILD_PARTY_STATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRequestPartyState);
|
||||
@@ -853,7 +860,6 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateListedAuctionableTokens);
|
||||
DEFINE_HANDLER(CMSG_UPDATE_WOW_TOKEN_COUNT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_UPGRADE_GARRISON, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_UPGRADE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUpgradeItem);
|
||||
DEFINE_HANDLER(CMSG_USED_FOLLOW, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_USE_CRITTER_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUseCritterItem);
|
||||
DEFINE_HANDLER(CMSG_USE_EQUIPMENT_SET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUseEquipmentSet);
|
||||
@@ -936,6 +942,9 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AVAILABLE_HOTFIXES, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_EMPOWERED_ITEM_EQUIPPED_STATUS_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_EMPOWERED_ITEM_RESPEC_OPEN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_ESSENCE_FORGE_CLOSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_ESSENCE_FORGE_OPENED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_ESSENCE_SELECTION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_XP_GAIN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BAN_REASON, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BARBER_SHOP_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
@@ -962,6 +971,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLENET_UPDATE_SESSION_KEY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_ACK_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_BUNDLE_PRICE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_CONFIRM_PURCHASE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_DELIVERY_ENDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_DELIVERY_STARTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
@@ -1100,6 +1110,11 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_LOSS_OF_CONTROL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_SPELL_CHARGES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_TARGET, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_APPLICANTS_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_APPLICATIONS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_APPLICATIONS_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_CLUBS_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_CLUBS_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_COIN_REMOVED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMBAT_EVENT_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMMENTATOR_MAP_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
@@ -1154,7 +1169,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_DURABILITY_DAMAGE_DEATH, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_EMOTE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENABLE_BARBER_SHOP, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENABLE_ENCRYPTION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENABLE_ENCRYPTION, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCHANTMENT_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_END, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
@@ -1267,6 +1282,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_COMMAND_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CRITERIA_DELETED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CRITERIA_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_AWAY_CHANGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_BANK_CONTENTS_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_BANK_MONEY_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_DISBANDED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
@@ -1348,7 +1364,6 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_PURCHASE_REFUND_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_PUSH_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_TIME_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_UPGRADE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_KICK_REASON, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEARNED_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEARN_PVP_TALENTS_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
@@ -1427,6 +1442,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MODIFY_COOLDOWN_RECOVERY_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MODIFY_PARTY_RANGE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOTD, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOUNT_EQUIPMENT_APPLY_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOUNT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_APPLY_MOVEMENT_FORCE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_COLLISION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
@@ -1451,7 +1467,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_HOVERING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_LAND_WALK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_MOVEMENT_FORCE_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_NORMAL_FALL, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_PITCH_RATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
@@ -1502,7 +1518,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_KNOCK_BACK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_MOVEMENT_FORCE_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_MOD_MOVEMENT_FORCE_MAGNITUDE,STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_PITCH_RATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
@@ -1600,6 +1616,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PUSH_SPELL_TO_ACTION_BAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_CREDIT, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_LOG_DATA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_MATCH_START, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_OPTIONS_ENABLED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_SEASON, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_BATTLE_PET_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
@@ -1802,6 +1819,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TITLE_EARNED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TITLE_LOST, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TOTEM_CREATED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TOTEM_DURATION_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TOTEM_MOVED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRADE_STATUS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRADE_UPDATED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -389,7 +389,6 @@ namespace WorldPackets
|
||||
class WrapItem;
|
||||
class CancelTempEnchantment;
|
||||
class UseCritterItem;
|
||||
class UpgradeItem;
|
||||
class SocketGems;
|
||||
class SortBags;
|
||||
class SortBankBags;
|
||||
@@ -1405,7 +1404,6 @@ class TC_GAME_API WorldSession
|
||||
void HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet);
|
||||
void HandleWrapItem(WorldPackets::Item::WrapItem& packet);
|
||||
void HandleUseCritterItem(WorldPackets::Item::UseCritterItem& packet);
|
||||
void HandleUpgradeItem(WorldPackets::Item::UpgradeItem& packet);
|
||||
|
||||
void HandleAttackSwingOpcode(WorldPackets::Combat::AttackSwing& packet);
|
||||
void HandleAttackStopOpcode(WorldPackets::Combat::AttackStop& packet);
|
||||
|
||||
Reference in New Issue
Block a user