Core/PacketIO: Updated to 12.1.0

This commit is contained in:
Shauren
2026-08-17 23:43:10 +02:00
parent e091a7ae6a
commit e6dd6d8b96
54 changed files with 4200 additions and 4221 deletions
@@ -0,0 +1,4 @@
ALTER TABLE `playerchoice`
ADD COLUMN `ShowChoicesAsGrid` tinyint(1) NOT NULL DEFAULT 0 AFTER `RequiresSelection`,
ADD COLUMN `HideAnswerArt` tinyint(1) NOT NULL DEFAULT 0 AFTER `ShowChoicesAsGrid`,
ADD COLUMN `ShowChoicesAsColumns` tinyint(1) NOT NULL DEFAULT 0 AFTER `HideAnswerArt`;
+43 -43
View File
@@ -261,6 +261,8 @@ void BaseEntity::BuildMovementUpdate(ByteBuffer& data, CreateObjectBits flags, P
data.WriteBit(flags.MeshObject);
data.FlushBits();
data << uint32(PauseTimes.size());
if (flags.MovementUpdate)
{
Unit const* unit = static_cast<Unit const*>(this);
@@ -304,24 +306,11 @@ void BaseEntity::BuildMovementUpdate(ByteBuffer& data, CreateObjectBits flags, P
data.WriteBit(HasDriveStatus); // HasDriveStatus
data.FlushBits();
if (!unit->m_movementInfo.transport.guid.IsEmpty())
data << unit->m_movementInfo.transport;
if (HasStandingOnGameObjectGUID)
data << *unit->m_movementInfo.standingOnGameObjectGUID;
if (HasInertia)
{
data << unit->m_movementInfo.inertia->id;
data << unit->m_movementInfo.inertia->force.PositionXYZStream();
data << uint32(unit->m_movementInfo.inertia->lifetime);
}
if (HasAdvFlying)
{
data << float(unit->m_movementInfo.advFlying->forwardVelocity);
data << float(unit->m_movementInfo.advFlying->upVelocity);
}
if (!unit->m_movementInfo.transport.guid.IsEmpty())
data << unit->m_movementInfo.transport;
if (HasFall)
{
@@ -336,6 +325,19 @@ void BaseEntity::BuildMovementUpdate(ByteBuffer& data, CreateObjectBits flags, P
}
}
if (HasInertia)
{
data << unit->m_movementInfo.inertia->id;
data << unit->m_movementInfo.inertia->force.PositionXYZStream();
data << uint32(unit->m_movementInfo.inertia->lifetime);
}
if (HasAdvFlying)
{
data << float(unit->m_movementInfo.advFlying->forwardVelocity);
data << float(unit->m_movementInfo.advFlying->upVelocity);
}
if (HasDriveStatus)
{
data << float(unit->m_movementInfo.driveStatus->speed);
@@ -384,18 +386,22 @@ void BaseEntity::BuildMovementUpdate(ByteBuffer& data, CreateObjectBits flags, P
data << float(unit->GetAdvFlyingSpeed(ADV_FLYING_OVER_MAX_DECELERATION));
data << float(unit->GetAdvFlyingSpeed(ADV_FLYING_LAUNCH_SPEED_COEFFICIENT));
data.WriteBit(HasSpline);
data.FlushBits();
if (MovementForces const* movementForces = unit->GetMovementForces())
for (MovementForce const& force : *movementForces->GetForces())
WorldPackets::Movement::CommonMovement::WriteMovementForceWithDirection(force, data, unit);
data.WriteBit(HasSpline);
data.FlushBits();
if (HasSpline)
WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(*unit->movespline, data);
}
data << uint32(PauseTimes.size());
if (flags.MovementTransport)
{
WorldObject const* self = static_cast<WorldObject const*>(this);
data << self->m_movementInfo.transport;
}
if (flags.Stationary)
{
@@ -433,30 +439,6 @@ void BaseEntity::BuildMovementUpdate(ByteBuffer& data, CreateObjectBits flags, P
data << uint64(gameObject->GetPackedLocalRotation()); // Rotation
}
//if (flags.Room)
// data << ObjectGuid(HouseGUID);
//if (flags.Decor)
// data << ObjectGuid(RoomGUID);
//if (flags.MeshObject)
//{
// data << ObjectGuid(AttachParentGUID);
// data << TaggedPosition<Position::XYZ>(PositionLocalSpace);
// data << QuaternionData(RotationLocalSpace);
// data << float(ScaleLocalSpace);
// data << uint8(AttachmentFlags);
//}
if (!PauseTimes.empty())
data.append(PauseTimes.data(), PauseTimes.size());
if (flags.MovementTransport)
{
WorldObject const* self = static_cast<WorldObject const*>(this);
data << self->m_movementInfo.transport;
}
if (flags.GameObject)
{
GameObject const* gameObject = static_cast<GameObject const*>(this);
@@ -650,6 +632,24 @@ void BaseEntity::BuildMovementUpdate(ByteBuffer& data, CreateObjectBits flags, P
data.FlushBits();
}
//if (flags.Room)
// data << ObjectGuid(HouseGUID);
//if (flags.Decor)
// data << ObjectGuid(RoomGUID);
//if (flags.MeshObject)
//{
// data << ObjectGuid(AttachParentGUID);
// data << TaggedPosition<Position::XYZ>(PositionLocalSpace);
// data << QuaternionData(RotationLocalSpace);
// data << float(ScaleLocalSpace);
// data << uint8(AttachmentFlags);
//}
if (!PauseTimes.empty())
data.append(PauseTimes.data(), PauseTimes.size());
}
UF::UpdateFieldFlag BaseEntity::GetUpdateFieldFlagsFor(Player const* /*target*/) const
File diff suppressed because it is too large Load Diff
@@ -84,7 +84,7 @@ struct ItemMod : public IsUpdateFieldStructureTag
using OwnerObject = Item;
void WriteCreate(ByteBuffer& data, Player const* receiver, Item const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Item const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Item const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(ItemMod const& right) const;
bool operator!=(ItemMod const& right) const { return !(*this == right); }
};
@@ -107,7 +107,7 @@ struct ArtifactPower : public IsUpdateFieldStructureTag
using OwnerObject = Item;
void WriteCreate(ByteBuffer& data, Player const* receiver, Item const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Item const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Item const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(ArtifactPower const& right) const;
bool operator!=(ArtifactPower const& right) const { return !(*this == right); }
};
@@ -188,7 +188,7 @@ struct UnlockedAzeriteEssence : public IsUpdateFieldStructureTag
using OwnerObject = AzeriteItem;
void WriteCreate(ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(UnlockedAzeriteEssence const& right) const;
bool operator!=(UnlockedAzeriteEssence const& right) const { return !(*this == right); }
};
@@ -209,8 +209,8 @@ struct AzeriteItemData : public IsUpdateFieldStructureTag, public HasChangesMask
{
UpdateField<bool, 0, 1> Enabled;
DynamicUpdateField<UF::UnlockedAzeriteEssence, 0, 2> UnlockedEssences;
DynamicUpdateField<uint32, 0, 4> UnlockedEssenceMilestones;
DynamicUpdateField<UF::SelectedAzeriteEssences, 0, 3> SelectedEssences;
DynamicUpdateField<uint32, 0, 4> UnlockedEssenceMilestones;
UpdateField<uint64, 0, 5> Xp;
UpdateField<uint32, 0, 6> Level;
UpdateField<uint32, 0, 7> AuraLevel;
@@ -233,7 +233,7 @@ struct SpellCastVisual : public IsUpdateFieldStructureTag
using OwnerObject = Object;
void WriteCreate(ByteBuffer& data, Player const* receiver, Object const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Object const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Object const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(SpellCastVisual const& right) const;
bool operator!=(SpellCastVisual const& right) const { return !(*this == right); }
};
@@ -247,7 +247,7 @@ struct UnitChannel : public IsUpdateFieldStructureTag
using OwnerObject = Unit;
void WriteCreate(ByteBuffer& data, Player const* receiver, Unit const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Unit const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Unit const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(UnitChannel const& right) const;
bool operator!=(UnitChannel const& right) const { return !(*this == right); }
};
@@ -278,7 +278,7 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag
using OwnerObject = Unit;
void WriteCreate(ByteBuffer& data, Player const* receiver, Unit const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Unit const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Unit const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(PassiveSpellHistory const& right) const;
bool operator!=(PassiveSpellHistory const& right) const { return !(*this == right); }
};
@@ -295,7 +295,7 @@ struct UnitAssistActionData : public IsUpdateFieldStructureTag, public HasChange
void ClearChangesMask();
};
struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<228>
struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<230>
{
UpdateField<bool, 0, 1> Field_314;
UpdateField<std::vector<uint32>, 0, 2> StateWorldEffectIDs;
@@ -329,135 +329,137 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<228>
UpdateField<ObjectGuid, 0, 22> Target;
UpdateField<ObjectGuid, 0, 23> BattlePetCompanionGUID;
UpdateField<uint64, 0, 24> BattlePetDBID;
UpdateField<UF::UnitChannel, 0, 25> ChannelData;
UpdateField<int8, 0, 26> SpellEmpowerStage;
UpdateField<uint32, 0, 27> SummonedByHomeRealm;
UpdateField<uint8, 0, 28> Race;
UpdateField<uint8, 0, 29> ClassId;
UpdateField<uint8, 0, 30> PlayerClassId;
UpdateField<uint8, 0, 31> Sex;
UpdateField<uint8, 32, 33> CreatureType;
UpdateField<uint8, 32, 34> DisplayPower;
UpdateField<uint32, 32, 35> OverrideDisplayPowerID;
UpdateField<int64, 32, 36> Health;
UpdateField<int64, 32, 37> MaxHealth;
UpdateField<int32, 32, 38> Level;
UpdateField<int32, 32, 39> EffectiveLevel;
UpdateField<int32, 32, 40> ContentTuningID;
UpdateField<int32, 32, 41> ScalingLevelMin;
UpdateField<int32, 32, 42> ScalingLevelMax;
UpdateField<int32, 32, 43> ScalingLevelDelta;
UpdateField<uint8, 32, 44> ScalingFactionGroup;
UpdateField<int32, 32, 45> FactionTemplate;
UpdateField<ObjectGuid, 0, 25> BattlePetAttachedToDecorGUID;
UpdateField<ObjectGuid, 0, 26> BattlePetDecorHouseGUID;
UpdateField<UF::UnitChannel, 0, 27> ChannelData;
UpdateField<int8, 0, 28> SpellEmpowerStage;
UpdateField<uint32, 0, 29> SummonedByHomeRealm;
UpdateField<uint8, 0, 30> Race;
UpdateField<uint8, 0, 31> ClassId;
UpdateField<uint8, 32, 33> PlayerClassId;
UpdateField<uint8, 32, 34> Sex;
UpdateField<uint8, 32, 35> CreatureType;
UpdateField<uint8, 32, 36> DisplayPower;
UpdateField<uint32, 32, 37> OverrideDisplayPowerID;
UpdateField<int64, 32, 38> Health;
UpdateField<int64, 32, 39> MaxHealth;
UpdateField<int32, 32, 40> Level;
UpdateField<int32, 32, 41> EffectiveLevel;
UpdateField<int32, 32, 42> ContentTuningID;
UpdateField<int32, 32, 43> ScalingLevelMin;
UpdateField<int32, 32, 44> ScalingLevelMax;
UpdateField<int32, 32, 45> ScalingLevelDelta;
UpdateField<uint8, 32, 46> ScalingFactionGroup;
UpdateField<int32, 32, 47> FactionTemplate;
struct FactionTemplateTag : ViewerDependentValueTag<int32> {};
UpdateField<uint32, 32, 46> Flags;
UpdateField<uint32, 32, 48> Flags;
struct FlagsTag : ViewerDependentValueTag<uint32> {};
UpdateField<uint32, 32, 47> Flags2;
UpdateField<uint32, 32, 49> Flags2;
struct Flags2Tag : ViewerDependentValueTag<uint32> {};
UpdateField<uint32, 32, 48> Flags3;
UpdateField<uint32, 32, 50> Flags3;
struct Flags3Tag : ViewerDependentValueTag<uint32> {};
UpdateField<uint32, 32, 49> Flags4;
UpdateField<uint32, 32, 51> Flags4;
struct Flags4Tag : ViewerDependentValueTag<uint32> {};
UpdateField<uint32, 32, 50> AuraState;
UpdateField<uint32, 32, 52> AuraState;
struct AuraStateTag : ViewerDependentValueTag<uint32> {};
UpdateField<uint32, 32, 51> RangedAttackRoundBaseTime;
UpdateField<float, 32, 52> BoundingRadius;
UpdateField<float, 32, 53> CombatReach;
UpdateField<float, 32, 54> DisplayScale;
UpdateField<int32, 32, 55> CreatureFamily;
UpdateField<uint8, 32, 56> OverrideCreatureType;
UpdateField<int32, 32, 57> NativeDisplayID;
UpdateField<float, 32, 58> NativeXDisplayScale;
UpdateField<int32, 32, 59> MountDisplayID;
UpdateField<int32, 32, 60> CosmeticMountDisplayID;
UpdateField<float, 32, 61> MinDamage;
UpdateField<float, 32, 62> MaxDamage;
UpdateField<float, 32, 63> MinOffHandDamage;
UpdateField<float, 64, 65> MaxOffHandDamage;
UpdateField<uint8, 64, 66> StandState;
UpdateField<uint8, 64, 67> PetTalentPoints;
UpdateField<uint8, 64, 68> VisFlags;
UpdateField<uint8, 64, 69> AnimTier;
UpdateField<uint32, 64, 70> PetNumber;
UpdateField<uint32, 64, 71> PetNameTimestamp;
UpdateField<uint32, 64, 72> PetExperience;
UpdateField<uint32, 64, 73> PetNextLevelExperience;
UpdateField<float, 64, 74> ModCastingSpeed;
UpdateField<float, 64, 75> ModCastingSpeedNeg;
UpdateField<float, 64, 76> ModSpellHaste;
UpdateField<float, 64, 77> ModHaste;
UpdateField<float, 64, 78> ModRangedHaste;
UpdateField<float, 64, 79> ModHasteRegen;
UpdateField<float, 64, 80> ModTimeRate;
UpdateField<int32, 64, 81> CreatedBySpell;
UpdateField<int32, 64, 82> EmoteState;
UpdateField<int32, 64, 83> BaseMana;
UpdateField<int32, 64, 84> BaseHealth;
UpdateField<uint8, 64, 85> SheatheState;
UpdateField<uint8, 64, 86> PvpFlags;
UpdateField<uint32, 32, 53> RangedAttackRoundBaseTime;
UpdateField<float, 32, 54> BoundingRadius;
UpdateField<float, 32, 55> CombatReach;
UpdateField<float, 32, 56> DisplayScale;
UpdateField<int32, 32, 57> CreatureFamily;
UpdateField<uint8, 32, 58> OverrideCreatureType;
UpdateField<int32, 32, 59> NativeDisplayID;
UpdateField<float, 32, 60> NativeXDisplayScale;
UpdateField<int32, 32, 61> MountDisplayID;
UpdateField<int32, 32, 62> CosmeticMountDisplayID;
UpdateField<float, 32, 63> MinDamage;
UpdateField<float, 64, 65> MaxDamage;
UpdateField<float, 64, 66> MinOffHandDamage;
UpdateField<float, 64, 67> MaxOffHandDamage;
UpdateField<uint8, 64, 68> StandState;
UpdateField<uint8, 64, 69> PetTalentPoints;
UpdateField<uint8, 64, 70> VisFlags;
UpdateField<uint8, 64, 71> AnimTier;
UpdateField<uint32, 64, 72> PetNumber;
UpdateField<uint32, 64, 73> PetNameTimestamp;
UpdateField<uint32, 64, 74> PetExperience;
UpdateField<uint32, 64, 75> PetNextLevelExperience;
UpdateField<float, 64, 76> ModCastingSpeed;
UpdateField<float, 64, 77> ModCastingSpeedNeg;
UpdateField<float, 64, 78> ModSpellHaste;
UpdateField<float, 64, 79> ModHaste;
UpdateField<float, 64, 80> ModRangedHaste;
UpdateField<float, 64, 81> ModHasteRegen;
UpdateField<float, 64, 82> ModTimeRate;
UpdateField<int32, 64, 83> CreatedBySpell;
UpdateField<int32, 64, 84> EmoteState;
UpdateField<int32, 64, 85> BaseMana;
UpdateField<int32, 64, 86> BaseHealth;
UpdateField<uint8, 64, 87> SheatheState;
UpdateField<uint8, 64, 88> PvpFlags;
struct PvpFlagsTag : ViewerDependentValueTag<uint8> {};
UpdateField<uint8, 64, 87> PetFlags;
UpdateField<uint8, 64, 88> ShapeshiftForm;
UpdateField<int32, 64, 89> AttackPower;
UpdateField<int32, 64, 90> AttackPowerModPos;
UpdateField<int32, 64, 91> AttackPowerModNeg;
UpdateField<float, 64, 92> AttackPowerMultiplier;
UpdateField<int32, 64, 93> AttackPowerModSupport;
UpdateField<int32, 64, 94> RangedAttackPower;
UpdateField<int32, 64, 95> RangedAttackPowerModPos;
UpdateField<int32, 96, 97> RangedAttackPowerModNeg;
UpdateField<float, 96, 98> RangedAttackPowerMultiplier;
UpdateField<int32, 96, 99> RangedAttackPowerModSupport;
UpdateField<int32, 96, 100> MainHandWeaponAttackPower;
UpdateField<int32, 96, 101> OffHandWeaponAttackPower;
UpdateField<int32, 96, 102> RangedWeaponAttackPower;
UpdateField<int32, 96, 103> SetAttackSpeedAura;
UpdateField<float, 96, 104> Lifesteal;
UpdateField<float, 96, 105> MinRangedDamage;
UpdateField<float, 96, 106> MaxRangedDamage;
UpdateField<float, 96, 107> ManaCostMultiplier;
UpdateField<float, 96, 108> MaxHealthModifier;
UpdateField<float, 96, 109> HoverHeight;
UpdateField<int32, 96, 110> MinItemLevelCutoff;
UpdateField<int32, 96, 111> MinItemLevel;
UpdateField<int32, 96, 112> MaxItemLevel;
UpdateField<int32, 96, 113> AzeriteItemLevel;
UpdateField<int32, 96, 114> WildBattlePetLevel;
UpdateField<int32, 96, 115> BattlePetCompanionExperience;
UpdateField<uint32, 96, 116> BattlePetCompanionNameTimestamp;
UpdateField<int32, 96, 117> InteractSpellID;
UpdateField<uint8, 64, 89> PetFlags;
UpdateField<uint8, 64, 90> ShapeshiftForm;
UpdateField<int32, 64, 91> AttackPower;
UpdateField<int32, 64, 92> AttackPowerModPos;
UpdateField<int32, 64, 93> AttackPowerModNeg;
UpdateField<float, 64, 94> AttackPowerMultiplier;
UpdateField<int32, 64, 95> AttackPowerModSupport;
UpdateField<int32, 96, 97> RangedAttackPower;
UpdateField<int32, 96, 98> RangedAttackPowerModPos;
UpdateField<int32, 96, 99> RangedAttackPowerModNeg;
UpdateField<float, 96, 100> RangedAttackPowerMultiplier;
UpdateField<int32, 96, 101> RangedAttackPowerModSupport;
UpdateField<int32, 96, 102> MainHandWeaponAttackPower;
UpdateField<int32, 96, 103> OffHandWeaponAttackPower;
UpdateField<int32, 96, 104> RangedWeaponAttackPower;
UpdateField<int32, 96, 105> SetAttackSpeedAura;
UpdateField<float, 96, 106> Lifesteal;
UpdateField<float, 96, 107> MinRangedDamage;
UpdateField<float, 96, 108> MaxRangedDamage;
UpdateField<float, 96, 109> ManaCostMultiplier;
UpdateField<float, 96, 110> MaxHealthModifier;
UpdateField<float, 96, 111> HoverHeight;
UpdateField<int32, 96, 112> MinItemLevelCutoff;
UpdateField<int32, 96, 113> MinItemLevel;
UpdateField<int32, 96, 114> MaxItemLevel;
UpdateField<int32, 96, 115> AzeriteItemLevel;
UpdateField<int32, 96, 116> WildBattlePetLevel;
UpdateField<int32, 96, 117> BattlePetCompanionExperience;
UpdateField<uint32, 96, 118> BattlePetCompanionNameTimestamp;
UpdateField<int32, 96, 119> InteractSpellID;
struct InteractSpellIDTag : ViewerDependentValueTag<int32> {};
UpdateField<int32, 96, 118> ScaleDuration;
UpdateField<int32, 96, 119> LooksLikeMountID;
UpdateField<int32, 96, 120> LooksLikeCreatureID;
UpdateField<int32, 96, 121> LookAtControllerID;
UpdateField<int32, 96, 122> PerksVendorItemID;
UpdateField<int32, 96, 123> TaxiNodesID;
UpdateField<ObjectGuid, 96, 124> GuildGUID;
UpdateField<int32, 96, 125> FlightCapabilityID;
UpdateField<float, 96, 126> GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use
UpdateField<int32, 96, 127> DriveCapabilityID;
UpdateField<int32, 128, 129> MaxHealthModifierFlatNeg;
UpdateField<int32, 128, 130> MaxHealthModifierFlatPos;
UpdateField<uint32, 128, 131> SilencedSchoolMask;
UpdateField<uint32, 128, 132> CurrentAreaID;
UpdateField<float, 128, 133> NameplateDistanceMod;
UpdateField<float, 128, 134> AutoAttackRangeMod; // When UnitFlags3 & 0x40000000 is set, increases some autoattack range by this amount
UpdateField<ObjectGuid, 128, 135> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object
OptionalUpdateField<UF::UnitAssistActionData, 128, 136> AssistActionData;
UpdateFieldArray<int32, 10, 137, 138> Power;
UpdateFieldArray<int32, 10, 137, 148> MaxPower;
UpdateFieldArray<float, 10, 137, 158> PowerRegenFlatModifier;
UpdateFieldArray<float, 10, 137, 168> PowerRegenInterruptedFlatModifier;
UpdateFieldArray<UF::VisibleItem, 3, 178, 179> VirtualItems;
UpdateFieldArray<uint32, 2, 182, 183> AttackRoundBaseTime;
UpdateFieldArray<int32, 5, 185, 186> Stats;
UpdateFieldArray<int32, 5, 185, 191> StatPosBuff;
UpdateFieldArray<int32, 5, 185, 196> StatNegBuff;
UpdateFieldArray<int32, 5, 185, 201> StatSupportBuff;
UpdateFieldArray<int32, 7, 206, 207> Resistances;
UpdateFieldArray<int32, 7, 206, 214> BonusResistanceMods;
UpdateFieldArray<int32, 7, 206, 221> ManaCostModifier;
UpdateField<int32, 96, 120> ScaleDuration;
UpdateField<int32, 96, 121> LooksLikeMountID;
UpdateField<int32, 96, 122> LooksLikeCreatureID;
UpdateField<int32, 96, 123> LookAtControllerID;
UpdateField<int32, 96, 124> PerksVendorItemID;
UpdateField<int32, 96, 125> TaxiNodesID;
UpdateField<ObjectGuid, 96, 126> GuildGUID;
UpdateField<int32, 96, 127> FlightCapabilityID;
UpdateField<float, 128, 129> GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use
UpdateField<int32, 128, 130> DriveCapabilityID;
UpdateField<int32, 128, 131> MaxHealthModifierFlatNeg;
UpdateField<int32, 128, 132> MaxHealthModifierFlatPos;
UpdateField<uint32, 128, 133> SilencedSchoolMask;
UpdateField<uint32, 128, 134> CurrentAreaID;
UpdateField<float, 128, 135> NameplateDistanceMod;
UpdateField<float, 128, 136> AutoAttackRangeMod; // When UnitFlags3 & 0x40000000 is set, increases some autoattack range by this amount
UpdateField<ObjectGuid, 128, 137> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object
OptionalUpdateField<UF::UnitAssistActionData, 128, 138> AssistActionData;
UpdateFieldArray<int32, 10, 139, 140> Power;
UpdateFieldArray<int32, 10, 139, 150> MaxPower;
UpdateFieldArray<float, 10, 139, 160> PowerRegenFlatModifier;
UpdateFieldArray<float, 10, 139, 170> PowerRegenInterruptedFlatModifier;
UpdateFieldArray<UF::VisibleItem, 3, 180, 181> VirtualItems;
UpdateFieldArray<uint32, 2, 184, 185> AttackRoundBaseTime;
UpdateFieldArray<int32, 5, 187, 188> Stats;
UpdateFieldArray<int32, 5, 187, 193> StatPosBuff;
UpdateFieldArray<int32, 5, 187, 198> StatNegBuff;
UpdateFieldArray<int32, 5, 187, 203> StatSupportBuff;
UpdateFieldArray<int32, 7, 208, 209> Resistances;
UpdateFieldArray<int32, 7, 208, 216> BonusResistanceMods;
UpdateFieldArray<int32, 7, 208, 223> ManaCostModifier;
using OwnerObject = Unit;
void WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Unit const* owner) const;
@@ -475,7 +477,7 @@ struct ChrCustomizationChoice : public IsUpdateFieldStructureTag
using OwnerObject = Object;
void WriteCreate(ByteBuffer& data, Player const* receiver, Object const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Object const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Object const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(ChrCustomizationChoice const& right) const;
bool operator!=(ChrCustomizationChoice const& right) const { return !(*this == right); }
};
@@ -541,7 +543,7 @@ struct CTROptions : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(CTROptions const& right) const;
bool operator!=(CTROptions const& right) const { return !(*this == right); }
};
@@ -561,7 +563,7 @@ struct LeaverInfo : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(LeaverInfo const& right) const;
bool operator!=(LeaverInfo const& right) const { return !(*this == right); }
};
@@ -601,7 +603,7 @@ struct NPCAsPlayerInfo : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(NPCAsPlayerInfo const& right) const;
bool operator!=(NPCAsPlayerInfo const& right) const { return !(*this == right); }
};
@@ -614,8 +616,8 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<326>
DynamicUpdateField<UF::ChrCustomizationChoice, 0, 4> RandomCustomizations;
DynamicUpdateField<UF::QuestLog, 0, 5> QuestSessionQuestLog;
DynamicUpdateField<UF::ArenaCooldown, 0, 6> ArenaCooldowns;
DynamicUpdateField<int32, 0, 8> VisualItemReplacements;
DynamicUpdateField<UF::PetCreatureName, 0, 7> PetNames;
DynamicUpdateField<int32, 0, 8> VisualItemReplacements;
UpdateField<ObjectGuid, 0, 9> DuelArbiter;
UpdateField<ObjectGuid, 0, 10> WowAccount;
UpdateField<ObjectGuid, 0, 11> BnetAccount;
@@ -718,7 +720,7 @@ struct PlayerDataElement : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(PlayerDataElement const& right) const;
bool operator!=(PlayerDataElement const& right) const { return !(*this == right); }
};
@@ -761,6 +763,17 @@ struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<19>
void ClearChangesMask();
};
struct Research : public IsUpdateFieldStructureTag
{
int16 ResearchProjectID = 0;
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(Research const& right) const;
bool operator!=(Research const& right) const { return !(*this == right); }
};
struct CharacterRestriction : public IsUpdateFieldStructureTag
{
int32 Field_0 = 0;
@@ -770,7 +783,7 @@ struct CharacterRestriction : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(CharacterRestriction const& right) const;
bool operator!=(CharacterRestriction const& right) const { return !(*this == right); }
};
@@ -783,7 +796,7 @@ struct SpellPctModByLabel : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(SpellPctModByLabel const& right) const;
bool operator!=(SpellPctModByLabel const& right) const { return !(*this == right); }
};
@@ -796,7 +809,7 @@ struct SpellFlatModByLabel : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(SpellFlatModByLabel const& right) const;
bool operator!=(SpellFlatModByLabel const& right) const { return !(*this == right); }
};
@@ -809,7 +822,7 @@ struct SpellPctPVPModByLabel : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(SpellPctPVPModByLabel const& right) const;
bool operator!=(SpellPctPVPModByLabel const& right) const { return !(*this == right); }
};
@@ -822,7 +835,7 @@ struct SpellFlatPVPModByLabel : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(SpellFlatPVPModByLabel const& right) const;
bool operator!=(SpellFlatPVPModByLabel const& right) const { return !(*this == right); }
};
@@ -857,7 +870,7 @@ struct MawPower : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(MawPower const& right) const;
bool operator!=(MawPower const& right) const { return !(*this == right); }
};
@@ -868,7 +881,7 @@ struct MultiFloorExplore : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(MultiFloorExplore const& right) const;
bool operator!=(MultiFloorExplore const& right) const { return !(*this == right); }
};
@@ -880,20 +893,25 @@ struct RecipeProgressionInfo : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(RecipeProgressionInfo const& right) const;
bool operator!=(RecipeProgressionInfo const& right) const { return !(*this == right); }
};
struct LevelLinkInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3>
struct DiscordPlayerInfo : public IsUpdateFieldStructureTag
{
UpdateField<ObjectGuid, 0, 1> TargetGUID;
UpdateField<int32, 0, 2> Level;
uint64 DiscordUserID = 0;
uint8 AccountType = 0;
uint64 GuildLobbyID = 0;
uint8 GuildSettings = 0;
uint8 DisplayNameType = 0;
std::string AccessToken;
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void ClearChangesMask();
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(DiscordPlayerInfo const& right) const;
bool operator!=(DiscordPlayerInfo const& right) const { return !(*this == right); }
};
struct QuestSession : public IsUpdateFieldStructureTag, public HasChangesMask<3>
@@ -918,6 +936,17 @@ struct ReplayedQuest : public IsUpdateFieldStructureTag, public HasChangesMask<3
void ClearChangesMask();
};
struct LevelLinkInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3>
{
UpdateField<ObjectGuid, 0, 1> TargetGUID;
UpdateField<int32, 0, 2> Level;
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void ClearChangesMask();
};
struct TraitEntry : public IsUpdateFieldStructureTag
{
int32 TraitNodeID = 0;
@@ -928,7 +957,7 @@ struct TraitEntry : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(TraitEntry const& right) const;
bool operator!=(TraitEntry const& right) const { return !(*this == right); }
};
@@ -941,7 +970,7 @@ struct TraitSubTreeCache : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(TraitSubTreeCache const& right) const;
bool operator!=(TraitSubTreeCache const& right) const { return !(*this == right); }
};
@@ -973,7 +1002,7 @@ struct CraftingReagentBase : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(CraftingReagentBase const& right) const;
bool operator!=(CraftingReagentBase const& right) const { return !(*this == right); }
};
@@ -1092,7 +1121,7 @@ struct CategoryCooldownMod : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(CategoryCooldownMod const& right) const;
bool operator!=(CategoryCooldownMod const& right) const { return !(*this == right); }
};
@@ -1104,7 +1133,7 @@ struct WeeklySpellUse : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(WeeklySpellUse const& right) const;
bool operator!=(WeeklySpellUse const& right) const { return !(*this == right); }
};
@@ -1171,7 +1200,7 @@ struct WalkInData : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(WalkInData const& right) const;
bool operator!=(WalkInData const& right) const { return !(*this == right); }
};
@@ -1185,10 +1214,11 @@ struct DelveData : public IsUpdateFieldStructureTag
uint64 InstanceID = 0;
int32 EntranceType = 0;
uint32 RestrictingRewardPlayers = 0; // Restricts rewards to players in m_owners if set to true. Intended to prevent rewarwding players that join in-progress delve?
uint32 IsLfg = 0;
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(DelveData const& right) const;
bool operator!=(DelveData const& right) const { return !(*this == right); }
};
@@ -1265,7 +1295,7 @@ struct ChallengeModeData : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(ChallengeModeData const& right) const;
bool operator!=(ChallengeModeData const& right) const { return !(*this == right); }
};
@@ -1281,23 +1311,12 @@ struct TransmogOutfitMetadata : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(TransmogOutfitMetadata const& right) const;
bool operator!=(TransmogOutfitMetadata const& right) const { return !(*this == right); }
};
struct Research : public IsUpdateFieldStructureTag
{
int16 ResearchProjectID = 0;
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
bool operator==(Research const& right) const;
bool operator!=(Research const& right) const { return !(*this == right); }
};
struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<397>
struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<398>
{
UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
UpdateField<bool, 0, 2> BackpackSellJunkDisabled;
@@ -1305,12 +1324,10 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
UpdateField<bool, 0, 4> SortBagsRightToLeft;
UpdateField<bool, 0, 5> InsertItemsLeftToRight;
UpdateField<bool, 0, 6> HasPerksProgramPendingReward;
UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 50, 51> ResearchSites;
UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 52, 53> ResearchSiteProgress;
UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 54, 55> Research;
DynamicUpdateField<uint64, 0, 7> KnownTitles;
DynamicUpdateField<UF::PlayerDataElement, 0, 8> CharacterDataElements;
DynamicUpdateField<UF::PlayerDataElement, 0, 9> AccountDataElements;
DynamicUpdateField<UF::PVPInfo, 0, 10> PvpInfo;
DynamicUpdateField<int32, 0, 11> DailyQuestsCompleted;
DynamicUpdateField<int32, 0, 12> Field_1328;
DynamicUpdateField<int32, 0, 13> AvailableQuestLineXQuestIDs;
@@ -1330,6 +1347,7 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
DynamicUpdateField<uint32, 0, 27> HouseRoomComponentTextures;
DynamicUpdateField<uint32, 0, 28> HouseTypes;
DynamicUpdateField<int32, 0, 29> UnlockedTransmogOutfits;
DynamicUpdateField<UF::CharacterRestriction, 0, 30> CharacterRestrictions;
DynamicUpdateField<UF::SpellPctModByLabel, 0, 31> SpellPctModByLabel;
DynamicUpdateField<UF::SpellFlatModByLabel, 32, 33> SpellFlatModByLabel;
DynamicUpdateField<UF::SpellPctPVPModByLabel, 32, 34> SpellPctModPVPByLabel;
@@ -1340,16 +1358,17 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
DynamicUpdateField<UF::ReplayedQuest, 32, 39> ReplayedQuests;
DynamicUpdateField<UF::QuestLog, 32, 40> TaskQuests;
DynamicUpdateField<int32, 32, 41> DisabledSpells;
DynamicUpdateField<UF::CraftingOrder, 32, 42> CraftingOrders;
DynamicUpdateField<UF::PersonalCraftingOrderCount, 32, 43> PersonalCraftingOrderCounts;
DynamicUpdateField<UF::NPCCraftingOrderInfo, 32, 44> NpcCraftingOrders;
DynamicUpdateField<UF::CategoryCooldownMod, 32, 45> CategoryCooldownMods;
DynamicUpdateField<UF::WeeklySpellUse, 32, 46> WeeklySpellUses;
DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 47> TrackedCollectableSources;
DynamicUpdateField<UF::PVPInfo, 0, 10> PvpInfo;
DynamicUpdateField<UF::CharacterRestriction, 0, 30> CharacterRestrictions;
DynamicUpdateField<UF::CraftingOrder, 32, 42> CraftingOrders;
DynamicUpdateField<UF::BankTabSettings, 32, 48> CharacterBankTabSettings;
DynamicUpdateField<UF::BankTabSettings, 32, 49> AccountBankTabSettings;
UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 50, 51> ResearchSites;
UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 52, 53> ResearchSiteProgress;
UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 54, 55> Research;
UpdateField<ObjectGuid, 32, 56> FarsightObject;
UpdateField<ObjectGuid, 32, 57> SummonedBattlePetGUID;
UpdateField<uint64, 32, 58> Coinage;
@@ -1429,45 +1448,46 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
UpdateField<uint8, 134, 135> NumAccountBankTabs;
UpdateField<UF::ResearchHistory, 134, 136> ResearchHistory;
UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 134, 137> FrozenPerksVendorItem;
UpdateField<UF::LevelLinkInfo, 134, 139> LevelLinkInfo;
OptionalUpdateField<UF::QuestSession, 134, 138> QuestSession;
UpdateField<int32, 134, 140> UiChromieTimeExpansionID;
UpdateField<int32, 134, 141> TimerunningSeasonID;
UpdateField<int32, 134, 142> TransportServerTime;
UpdateField<uint32, 134, 143> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin
UpdateField<int16, 134, 144> DEBUGSoulbindConduitRank;
UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 134, 145> DungeonScore;
MapUpdateField<int32, UF::TraitConfig, 134, 146> TraitConfigs;
UpdateField<uint32, 134, 147> ActiveCombatTraitConfigID;
UpdateField<int32, 134, 148> ItemUpgradeHighOnehandWeaponItemID;
UpdateField<int32, 134, 149> ItemUpgradeHighFingerItemID;
UpdateField<float, 134, 150> ItemUpgradeHighFingerWatermark;
UpdateField<int32, 134, 151> ItemUpgradeHighTrinketItemID;
UpdateField<float, 134, 152> ItemUpgradeHighTrinketWatermark;
UpdateField<uint64, 134, 153> LootHistoryInstanceID;
OptionalUpdateField<UF::StableInfo, 134, 154> PetStable;
UpdateField<uint8, 134, 155> RequiredMountCapabilityFlags;
OptionalUpdateField<UF::WalkInData, 134, 156> WalkInData;
MapUpdateField<int32, UF::DelveData, 134, 157> DelveData;
MapUpdateField<uint32, UF::TransmogOutfitData, 134, 158> TransmogOutfits;
OptionalUpdateField<UF::ChallengeModeData, 134, 159> ChallengeModeData;
UpdateField<UF::TransmogOutfitData, 134, 160> ViewedOutfit;
UpdateField<UF::TransmogOutfitMetadata, 134, 161> TransmogMetadata;
UpdateFieldArray<ObjectGuid, 105, 162, 163> InvSlots;
UpdateFieldArray<UF::RestInfo, 2, 268, 269> RestInfo;
UpdateFieldArray<int32, 7, 271, 272> ModDamageDonePos;
UpdateFieldArray<int32, 7, 271, 279> ModDamageDoneNeg;
UpdateFieldArray<float, 7, 271, 286> ModDamageDonePercent;
UpdateFieldArray<float, 7, 271, 293> ModHealingDonePercent;
UpdateFieldArray<float, 3, 300, 301> WeaponDmgMultipliers;
UpdateFieldArray<float, 3, 300, 304> WeaponAtkSpeedMultipliers;
UpdateFieldArray<uint32, 12, 307, 308> BuybackPrice;
UpdateFieldArray<int64, 12, 307, 320> BuybackTimestamp;
UpdateFieldArray<int32, 32, 332, 333> CombatRatings;
UpdateFieldArray<uint32, 4, 365, 366> NoReagentCostMask;
UpdateFieldArray<int32, 2, 370, 371> ProfessionSkillLine;
UpdateFieldArray<uint32, 5, 373, 374> BagSlotFlags;
UpdateFieldArray<float, 17, 379, 380> ItemUpgradeHighWatermark;
UpdateField<UF::DiscordPlayerInfo, 134, 138> DiscordInfo;
OptionalUpdateField<UF::QuestSession, 134, 139> QuestSession;
UpdateField<UF::LevelLinkInfo, 134, 140> LevelLinkInfo;
UpdateField<int32, 134, 141> UiChromieTimeExpansionID;
UpdateField<int32, 134, 142> TimerunningSeasonID;
UpdateField<int32, 134, 143> TransportServerTime;
UpdateField<uint32, 134, 144> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin
UpdateField<int16, 134, 145> DEBUGSoulbindConduitRank;
UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 134, 146> DungeonScore;
MapUpdateField<int32, UF::TraitConfig, 134, 147> TraitConfigs;
UpdateField<uint32, 134, 148> ActiveCombatTraitConfigID;
UpdateField<int32, 134, 149> ItemUpgradeHighOnehandWeaponItemID;
UpdateField<int32, 134, 150> ItemUpgradeHighFingerItemID;
UpdateField<float, 134, 151> ItemUpgradeHighFingerWatermark;
UpdateField<int32, 134, 152> ItemUpgradeHighTrinketItemID;
UpdateField<float, 134, 153> ItemUpgradeHighTrinketWatermark;
UpdateField<uint64, 134, 154> LootHistoryInstanceID;
OptionalUpdateField<UF::StableInfo, 134, 155> PetStable;
UpdateField<uint8, 134, 156> RequiredMountCapabilityFlags;
OptionalUpdateField<UF::WalkInData, 134, 157> WalkInData;
MapUpdateField<int32, UF::DelveData, 134, 158> DelveData;
MapUpdateField<uint32, UF::TransmogOutfitData, 134, 159> TransmogOutfits;
OptionalUpdateField<UF::ChallengeModeData, 134, 160> ChallengeModeData;
UpdateField<UF::TransmogOutfitData, 134, 161> ViewedOutfit;
UpdateField<UF::TransmogOutfitMetadata, 134, 162> TransmogMetadata;
UpdateFieldArray<ObjectGuid, 105, 163, 164> InvSlots;
UpdateFieldArray<UF::RestInfo, 2, 269, 270> RestInfo;
UpdateFieldArray<int32, 7, 272, 273> ModDamageDonePos;
UpdateFieldArray<int32, 7, 272, 280> ModDamageDoneNeg;
UpdateFieldArray<float, 7, 272, 287> ModDamageDonePercent;
UpdateFieldArray<float, 7, 272, 294> ModHealingDonePercent;
UpdateFieldArray<float, 3, 301, 302> WeaponDmgMultipliers;
UpdateFieldArray<float, 3, 301, 305> WeaponAtkSpeedMultipliers;
UpdateFieldArray<uint32, 12, 308, 309> BuybackPrice;
UpdateFieldArray<int64, 12, 308, 321> BuybackTimestamp;
UpdateFieldArray<int32, 32, 333, 334> CombatRatings;
UpdateFieldArray<uint32, 4, 366, 367> NoReagentCostMask;
UpdateFieldArray<int32, 2, 371, 372> ProfessionSkillLine;
UpdateFieldArray<uint32, 5, 374, 375> BagSlotFlags;
UpdateFieldArray<float, 17, 380, 381> ItemUpgradeHighWatermark;
using OwnerObject = Player;
void WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const;
@@ -1487,7 +1507,7 @@ struct GameObjectAssistActionData : public IsUpdateFieldStructureTag
using OwnerObject = GameObject;
void WriteCreate(ByteBuffer& data, Player const* receiver, GameObject const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, GameObject const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, GameObject const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(GameObjectAssistActionData const& right) const;
bool operator!=(GameObjectAssistActionData const& right) const { return !(*this == right); }
};
@@ -1608,7 +1628,7 @@ struct ForceSetAreaTriggerPositionAndRotation : public IsUpdateFieldStructureTag
using OwnerObject = AreaTrigger;
void WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(ForceSetAreaTriggerPositionAndRotation const& right) const;
bool operator!=(ForceSetAreaTriggerPositionAndRotation const& right) const { return !(*this == right); }
};
@@ -1777,10 +1797,10 @@ struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask
UpdateField<float, 32, 34> Facing;
OptionalUpdateField<UF::ForceSetAreaTriggerPositionAndRotation, 32, 35> ForcedPositionAndRotation;
UpdateField<int32, 32, 36> PathType;
UpdateField<uint8, 32, 37> ShapeType;
UpdateField<UF::AreaTriggerActionSetPeriodModifier, 32, 38> PeriodModifier;
VariantUpdateField<32, 36, UF::AreaTriggerSplineCalculator, UF::AreaTriggerOrbit, UF::AreaTriggerMovementScript> PathData;
UpdateField<uint8, 32, 37> ShapeType;
VariantUpdateField<32, 37, UF::AreaTriggerSphere, UF::AreaTriggerBox, UF::AreaTriggerPolygon, UF::AreaTriggerCylinder, UF::AreaTriggerDisk, UF::AreaTriggerBoundedPlane> ShapeData;
UpdateField<UF::AreaTriggerActionSetPeriodModifier, 32, 38> PeriodModifier;
using OwnerObject = AreaTrigger;
void WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const;
@@ -1816,7 +1836,7 @@ struct ConversationLine : public IsUpdateFieldStructureTag
using OwnerObject = Conversation;
void WriteCreate(ByteBuffer& data, Player const* receiver, Conversation const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Conversation const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Conversation const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(ConversationLine const& right) const;
bool operator!=(ConversationLine const& right) const { return !(*this == right); }
};
@@ -1832,7 +1852,7 @@ struct ConversationActor : public IsUpdateFieldStructureTag
using OwnerObject = Conversation;
void WriteCreate(ByteBuffer& data, Player const* receiver, Conversation const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Conversation const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Conversation const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(ConversationActor const& right) const;
bool operator!=(ConversationActor const& right) const { return !(*this == right); }
};
@@ -1886,17 +1906,18 @@ struct DecorDyeSlots : public IsUpdateFieldStructureTag
using OwnerObject = BaseEntity;
void WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(DecorDyeSlots const& right) const;
bool operator!=(DecorDyeSlots const& right) const { return !(*this == right); }
};
struct DecorStoragePersistedData : public IsUpdateFieldStructureTag, public HasChangesMask<4>
struct DecorStoragePersistedData : public IsUpdateFieldStructureTag, public HasChangesMask<5>
{
UpdateField<ObjectGuid, -1, 0> HouseGUID;
OptionalUpdateField<UF::DecorDyeSlots, -1, 1> DyeSlots;
UpdateField<uint8, -1, 2> SourceType;
UpdateField<std::string, -1, 3> SourceValue;
UpdateField<uint8, -1, 1> PlacementStatus;
OptionalUpdateField<UF::DecorDyeSlots, -1, 2> DyeSlots;
UpdateField<uint8, -1, 3> SourceType;
UpdateField<std::string, -1, 4> SourceValue;
using OwnerObject = BaseEntity;
void WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const;
@@ -1904,13 +1925,29 @@ struct DecorStoragePersistedData : public IsUpdateFieldStructureTag, public HasC
void ClearChangesMask();
};
struct HousingDecorData : public IsUpdateFieldStructureTag, public HasChangesMask<6>
struct DecorPetInfo : public IsUpdateFieldStructureTag, public HasChangesMask<6>
{
UpdateField<ObjectGuid, -1, 0> BattlePetGUID;
UpdateField<ObjectGuid, -1, 1> SpawnGroup;
UpdateField<ObjectGuid, -1, 2> SpawnedPet;
UpdateField<uint32, -1, 3> CreatureID;
UpdateField<std::string, -1, 4> PetName;
UpdateField<uint8, -1, 5> PetBehavior;
using OwnerObject = Object;
void WriteCreate(ByteBuffer& data, Player const* receiver, Object const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Object const* owner) const;
void ClearChangesMask();
};
struct HousingDecorData : public IsUpdateFieldStructureTag, public HasChangesMask<7>
{
UpdateField<ObjectGuid, 0, 1> DecorGUID;
UpdateField<ObjectGuid, 0, 2> AttachParentGUID;
UpdateField<uint8, 0, 3> Flags;
OptionalUpdateField<UF::DecorStoragePersistedData, 0, 4> PersistedData;
UpdateField<ObjectGuid, 0, 5> TargetGameObjectGUID;
OptionalUpdateField<UF::DecorPetInfo, 0, 5> PetInfo;
UpdateField<ObjectGuid, 0, 6> TargetGameObjectGUID;
using OwnerObject = Object;
void WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const;
@@ -1932,14 +1969,13 @@ struct HousingDoorData : public IsUpdateFieldStructureTag, public HasChangesMask
void ClearChangesMask();
};
struct HousingRoomData : public IsUpdateFieldStructureTag, public HasChangesMask<7>
struct HousingRoomData : public IsUpdateFieldStructureTag, public HasChangesMask<6>
{
DynamicUpdateField<ObjectGuid, 0, 1> MeshObjects;
DynamicUpdateField<UF::HousingDoorData, 0, 2> Doors;
UpdateField<ObjectGuid, 0, 3> HouseGUID;
UpdateField<int32, 0, 4> HouseRoomID;
UpdateField<int32, 0, 5> Flags;
UpdateField<int32, 0, 6> FloorIndex;
using OwnerObject = BaseEntity;
void WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const;
@@ -2006,7 +2042,7 @@ struct PlayerHouseInfo : public IsUpdateFieldStructureTag
using OwnerObject = BaseEntity;
void WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(PlayerHouseInfo const& right) const;
bool operator!=(PlayerHouseInfo const& right) const { return !(*this == right); }
};
@@ -2018,7 +2054,7 @@ struct HousingOwner : public IsUpdateFieldStructureTag
using OwnerObject = BaseEntity;
void WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(HousingOwner const& right) const;
bool operator!=(HousingOwner const& right) const { return !(*this == right); }
};
@@ -2027,8 +2063,8 @@ struct NeighborhoodMirrorData : public IsUpdateFieldStructureTag, public HasChan
{
DynamicUpdateField<UF::PlayerHouseInfo, 0, 1> Houses;
DynamicUpdateField<UF::HousingOwner, 0, 2> Managers;
UpdateField<ObjectGuid, 0, 4> OwnerGUID;
UpdateField<std::string, 0, 3> Name;
UpdateField<ObjectGuid, 0, 4> OwnerGUID;
using OwnerObject = BaseEntity;
void WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const;
@@ -2074,7 +2110,7 @@ struct PlayerMirrorHouse : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(PlayerMirrorHouse const& right) const;
bool operator!=(PlayerMirrorHouse const& right) const { return !(*this == right); }
};
@@ -2085,7 +2121,7 @@ struct NeighborhoodCharterSignature : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(NeighborhoodCharterSignature const& right) const;
bool operator!=(NeighborhoodCharterSignature const& right) const { return !(*this == right); }
};
@@ -2099,7 +2135,7 @@ struct NeighborhoodCharter : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(NeighborhoodCharter const& right) const;
bool operator!=(NeighborhoodCharter const& right) const { return !(*this == right); }
};
@@ -2112,22 +2148,23 @@ struct NeighborhoodOwnershipTransfer : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(NeighborhoodOwnershipTransfer const& right) const;
bool operator!=(NeighborhoodOwnershipTransfer const& right) const { return !(*this == right); }
};
struct PlayerHouseInfoComponentData : public IsUpdateFieldStructureTag, public HasChangesMask<10>
struct PlayerHouseInfoComponentData : public IsUpdateFieldStructureTag, public HasChangesMask<11>
{
DynamicUpdateField<ObjectGuid, 0, 1> Field_8;
DynamicUpdateField<UF::PlayerMirrorHouse, 0, 2> Houses;
DynamicUpdateField<ObjectGuid, 0, 3> Field_88;
DynamicUpdateField<ObjectGuid, 0, 4> Field_C0;
DynamicUpdateField<ObjectGuid, 0, 5> Field_F8;
UpdateField<UF::NeighborhoodCharter, 0, 6> Charter;
UpdateField<uint8, 0, 7> EditorMode;
UpdateField<UF::NeighborhoodOwnershipTransfer, 0, 8> NeighborhoodOwnershipTransfer;
UpdateField<ObjectGuid, 0, 9> CurrentHouse;
DynamicUpdateField<ObjectGuid, 0, 6> Field_130;
UpdateField<UF::NeighborhoodCharter, 0, 7> Charter;
UpdateField<uint8, 0, 8> EditorMode;
UpdateField<UF::NeighborhoodOwnershipTransfer, 0, 9> NeighborhoodOwnershipTransfer;
UpdateField<ObjectGuid, 0, 10> CurrentHouse;
using OwnerObject = Player;
void WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const;
@@ -2204,7 +2241,7 @@ struct NICompletedMilestoneEntry : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(NICompletedMilestoneEntry const& right) const;
bool operator!=(NICompletedMilestoneEntry const& right) const { return !(*this == right); }
};
@@ -2217,7 +2254,7 @@ struct NICompletedInitiativesEntry : public IsUpdateFieldStructureTag
using OwnerObject = Player;
void WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const;
void WriteUpdate(bool /*ignoreChangesMask*/, ByteBuffer& data, Player const* receiver, Player const* owner) const { WriteCreate(data, receiver, owner); }
bool operator==(NICompletedInitiativesEntry const& right) const;
bool operator!=(NICompletedInitiativesEntry const& right) const { return !(*this == right); }
};
@@ -30140,6 +30140,9 @@ void Player::SendPlayerChoice(ObjectGuid sender, int32 choiceId)
displayPlayerChoice.KeepOpenAfterChoice = playerChoice->KeepOpenAfterChoice;
displayPlayerChoice.ShowChoicesAsList = playerChoice->ShowChoicesAsList;
displayPlayerChoice.RequiresSelection = playerChoice->RequiresSelection;
displayPlayerChoice.ShowChoicesAsGrid = playerChoice->ShowChoicesAsGrid;
displayPlayerChoice.HideAnswerArt = playerChoice->HideAnswerArt;
displayPlayerChoice.ShowChoicesAsColumns = playerChoice->ShowChoicesAsColumns;
for (std::size_t i = 0; i < playerChoice->Responses.size() && (!playerChoice->MaxResponses || displayPlayerChoice.Responses.size() < *playerChoice->MaxResponses); ++i)
{
+7 -2
View File
@@ -10988,7 +10988,8 @@ void ObjectMgr::LoadPlayerChoices()
_playerChoices.clear();
QueryResult choices = WorldDatabase.Query("SELECT ChoiceId, UiTextureKitId, SoundKitId, CloseSoundKitId, Duration, Question, PendingChoiceText, "
"InfiniteRange, HideWarboardHeader, KeepOpenAfterChoice, ShowChoicesAsList, RequiresSelection, MaxResponses, ScriptName FROM playerchoice");
"InfiniteRange, HideWarboardHeader, KeepOpenAfterChoice, ShowChoicesAsList, RequiresSelection, ShowChoicesAsGrid, HideAnswerArt, "
"ShowChoicesAsColumns, MaxResponses, ScriptName FROM playerchoice");
if (!choices)
{
TC_LOG_INFO("server.loading", ">> Loaded 0 player choices. DB table `playerchoice` is empty.");
@@ -11007,7 +11008,8 @@ void ObjectMgr::LoadPlayerChoices()
do
{
DEFINE_FIELD_ACCESSOR_CACHE_ANONYMOUS(ResultSet, (ChoiceId)(UiTextureKitId)(SoundKitId)(CloseSoundKitId)(Duration)(Question)(PendingChoiceText)
(InfiniteRange)(HideWarboardHeader)(KeepOpenAfterChoice)(ShowChoicesAsList)(RequiresSelection)(MaxResponses)(ScriptName)) fields { *choices };
(InfiniteRange)(HideWarboardHeader)(KeepOpenAfterChoice)(ShowChoicesAsList)(RequiresSelection)(ShowChoicesAsGrid)(HideAnswerArt)
(ShowChoicesAsColumns)(MaxResponses)(ScriptName)) fields { *choices };
int32 choiceId = fields.ChoiceId().GetInt32();
@@ -11025,6 +11027,9 @@ void ObjectMgr::LoadPlayerChoices()
choice.KeepOpenAfterChoice = fields.KeepOpenAfterChoice().GetBool();
choice.ShowChoicesAsList = fields.ShowChoicesAsList().GetBool();
choice.RequiresSelection = fields.RequiresSelection().GetBool();
choice.ShowChoicesAsGrid = fields.ShowChoicesAsGrid().GetBool();
choice.HideAnswerArt = fields.HideAnswerArt().GetBool();
choice.ShowChoicesAsColumns = fields.ShowChoicesAsColumns().GetBool();
choice.MaxResponses = fields.MaxResponses().GetUInt32OrNull();
choice.ScriptId = GetScriptId(fields.ScriptName().GetStringView());
+3
View File
@@ -119,6 +119,9 @@ struct PlayerChoice
bool KeepOpenAfterChoice = false;
bool ShowChoicesAsList = false;
bool RequiresSelection = false;
bool ShowChoicesAsGrid = false;
bool HideAnswerArt = false;
bool ShowChoicesAsColumns = false;
Optional<uint32> MaxResponses;
+10 -6
View File
@@ -181,12 +181,16 @@ enum class CountdownTimerType : int32
enum class PingSubjectType : uint8
{
Attack = 0,
Warning = 1,
Assist = 2,
OnMyWay = 3,
AlertThreat = 4,
AlertNotThreat = 5,
Attack = 0,
Warning = 1,
Assist = 2,
OnMyWay = 3,
AlertThreat = 4,
AlertNotThreat = 5,
ActionReady = 6,
ActionOnCooldown = 7,
ActionUnavailable = 8,
ActionNotReady = 9,
Max
};
+30
View File
@@ -716,6 +716,9 @@ void WorldSession::HandleSendPingUnit(WorldPackets::Party::SendPingUnit const& p
broadcastPingUnit.Type = pingUnit.Type;
broadcastPingUnit.PinFrameID = pingUnit.PinFrameID;
broadcastPingUnit.PingDuration = pingUnit.PingDuration;
broadcastPingUnit.Health = pingUnit.Health;
broadcastPingUnit.Mana = pingUnit.Mana;
broadcastPingUnit.IsUnitFrameStatusTextPing = pingUnit.IsUnitFrameStatusTextPing;
broadcastPingUnit.CreatureID = pingUnit.CreatureID;
broadcastPingUnit.SpellOverrideNameID = pingUnit.SpellOverrideNameID;
broadcastPingUnit.Write();
@@ -758,3 +761,30 @@ void WorldSession::HandleSendPingWorldPoint(WorldPackets::Party::SendPingWorldPo
member->SendDirectMessage(broadcastPingWorldPoint.GetRawPacket());
}
}
void WorldSession::HandleSendPingCooldown(WorldPackets::Party::SendPingCooldown const& pingCooldown)
{
Group const* group = nullptr;
if (!CanSendPing(*_player, pingCooldown.Type, group))
return;
WorldPackets::Party::ReceivePingCooldown broadcastPingCooldown;
broadcastPingCooldown.SenderGUID = _player->GetGUID();
broadcastPingCooldown.PinFrameID = pingCooldown.PinFrameID;
broadcastPingCooldown.SpellID = pingCooldown.SpellID;
broadcastPingCooldown.ItemID = pingCooldown.ItemID;
broadcastPingCooldown.Duration = pingCooldown.Duration;
broadcastPingCooldown.Remaining = pingCooldown.Remaining;
broadcastPingCooldown.Type = pingCooldown.Type;
broadcastPingCooldown.SpellCategoryID = pingCooldown.SpellCategoryID;
broadcastPingCooldown.Write();
for (GroupReference const& itr : group->GetMembers())
{
Player const* member = itr.GetSource();
if (_player == member || !_player->IsInMap(member))
continue;
member->SendDirectMessage(broadcastPingCooldown.GetRawPacket());
}
}
@@ -194,13 +194,16 @@ ByteBuffer& operator<<(ByteBuffer& data, AuctionItem const& auctionItem)
{
data << OptionalInit(auctionItem.Bidder);
data << OptionalInit(auctionItem.BidAmount);
if (auctionItem.Bidder)
data << *auctionItem.Bidder;
if (auctionItem.BidAmount)
data << uint64(*auctionItem.BidAmount);
}
data.FlushBits();
if (auctionItem.Item)
data << *auctionItem.Item;
data << int32(auctionItem.Count);
data << int32(auctionItem.Charges);
data << int32(auctionItem.Flags);
@@ -210,9 +213,15 @@ ByteBuffer& operator<<(ByteBuffer& data, AuctionItem const& auctionItem)
data << uint8(auctionItem.DeleteReason);
data << uint32(auctionItem.Unused1110);
if (auctionItem.Item)
data << *auctionItem.Item;
for (WorldPackets::Item::ItemEnchantData const& enchant : auctionItem.Enchantments)
data << enchant;
for (WorldPackets::Item::ItemGemData const& gem : auctionItem.Gems)
data << gem;
if (auctionItem.MinBid)
data << uint64(*auctionItem.MinBid);
@@ -232,24 +241,12 @@ ByteBuffer& operator<<(ByteBuffer& data, AuctionItem const& auctionItem)
data << int32(auctionItem.EndTime);
}
if (auctionItem.Creator)
data << *auctionItem.Creator;
if (!auctionItem.CensorBidInfo)
{
if (auctionItem.Bidder)
data << *auctionItem.Bidder;
if (auctionItem.BidAmount)
data << uint64(*auctionItem.BidAmount);
}
for (WorldPackets::Item::ItemGemData const& gem : auctionItem.Gems)
data << gem;
if (auctionItem.AuctionBucketKey)
data << *auctionItem.AuctionBucketKey;
if (auctionItem.Creator)
data << *auctionItem.Creator;
return data;
}
@@ -267,6 +264,7 @@ ByteBuffer& operator<<(ByteBuffer& data, AuctionBidderNotification const& bidder
data << int32(bidderNotification.AuctionID);
data << bidderNotification.Bidder;
data << bidderNotification.Item;
return data;
}
@@ -368,13 +366,12 @@ void AuctionListBucketsByBucketKeys::Read()
void AuctionListItemsByBucketKey::Read()
{
_worldPacket >> Auctioneer;
_worldPacket >> BucketKey;
_worldPacket >> Offset;
_worldPacket >> Unknown830;
_worldPacket >> OptionalInit(TaintedBy);
_worldPacket >> BitsSize<2>(Sorts);
_worldPacket >> BucketKey;
if (TaintedBy)
_worldPacket >> *TaintedBy;
@@ -563,12 +560,13 @@ WorldPacket const* AuctionListBiddedItemsResult::Write()
{
_worldPacket << Size<uint32>(Items);
_worldPacket << uint32(DesiredDelay);
_worldPacket << Bits<1>(HasMoreResults);
_worldPacket.FlushBits();
for (AuctionItem const& item : Items)
_worldPacket << item;
_worldPacket << Bits<1>(HasMoreResults);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -578,13 +576,14 @@ WorldPacket const* AuctionListBucketsResult::Write()
_worldPacket << uint32(DesiredDelay);
_worldPacket << int32(Filters);
_worldPacket << int32(TotalCount);
_worldPacket << Bits<1>(BrowseMode);
_worldPacket << Bits<1>(HasMoreResults);
_worldPacket.FlushBits();
for (BucketInfo const& bucketInfo : Buckets)
_worldPacket << bucketInfo;
_worldPacket << Bits<1>(BrowseMode);
_worldPacket << Bits<1>(HasMoreResults);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -615,8 +614,6 @@ WorldPacket const* AuctionListOwnedItemsResult::Write()
_worldPacket << Size<int32>(Items);
_worldPacket << Size<int32>(SoldItems);
_worldPacket << uint32(DesiredDelay);
_worldPacket << Bits<1>(HasMoreResults);
_worldPacket.FlushBits();
for (AuctionItem const& item : Items)
_worldPacket << item;
@@ -624,6 +621,9 @@ WorldPacket const* AuctionListOwnedItemsResult::Write()
for (AuctionItem const& item : SoldItems)
_worldPacket << item;
_worldPacket << Bits<1>(HasMoreResults);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -127,8 +127,12 @@ ByteBuffer& operator<<(ByteBuffer& data, AuthSuccessInfo const& successInfo)
data << Size<uint32>(*successInfo.AvailableClasses);
data << Size<uint32>(successInfo.Templates);
data << uint32(successInfo.CurrencyID);
data << successInfo.GameTimeInfo;
data << successInfo.Time;
for (VirtualRealmInfo const& virtualRealm : successInfo.VirtualRealms)
data << virtualRealm;
for (RaceClassAvailability const& raceClassAvailability : *successInfo.AvailableClasses)
{
data << uint8(raceClassAvailability.RaceID);
@@ -143,31 +147,6 @@ ByteBuffer& operator<<(ByteBuffer& data, AuthSuccessInfo const& successInfo)
}
}
data << Bits<1>(successInfo.IsExpansionTrial);
data << Bits<1>(successInfo.ForceCharacterTemplate);
data << OptionalInit(successInfo.NumPlayersHorde);
data << OptionalInit(successInfo.NumPlayersAlliance);
data << OptionalInit(successInfo.ExpansionTrialExpiration);
data << OptionalInit(successInfo.CurrentBuild);
data.FlushBits();
data << successInfo.GameTimeInfo;
if (successInfo.NumPlayersHorde)
data << uint16(*successInfo.NumPlayersHorde);
if (successInfo.NumPlayersAlliance)
data << uint16(*successInfo.NumPlayersAlliance);
if (successInfo.ExpansionTrialExpiration)
data << *successInfo.ExpansionTrialExpiration;
if (successInfo.CurrentBuild)
data << *successInfo.CurrentBuild;
for (VirtualRealmInfo const& virtualRealm : successInfo.VirtualRealms)
data << virtualRealm;
for (CharacterTemplate const* characterTemplate : successInfo.Templates)
{
data << uint32(characterTemplate->TemplateSetId);
@@ -186,6 +165,26 @@ ByteBuffer& operator<<(ByteBuffer& data, AuthSuccessInfo const& successInfo)
data << SizedString::Data(characterTemplate->Description);
}
data << Bits<1>(successInfo.IsExpansionTrial);
data << Bits<1>(successInfo.ForceCharacterTemplate);
data << OptionalInit(successInfo.NumPlayersHorde);
data << OptionalInit(successInfo.NumPlayersAlliance);
data << OptionalInit(successInfo.ExpansionTrialExpiration);
data << OptionalInit(successInfo.CurrentBuild);
data.FlushBits();
if (successInfo.NumPlayersHorde)
data << uint16(*successInfo.NumPlayersHorde);
if (successInfo.NumPlayersAlliance)
data << uint16(*successInfo.NumPlayersAlliance);
if (successInfo.ExpansionTrialExpiration)
data << *successInfo.ExpansionTrialExpiration;
if (successInfo.CurrentBuild)
data << *successInfo.CurrentBuild;
return data;
}
@@ -73,8 +73,6 @@ WorldPacket const* BattlePetJournal::Write()
_worldPacket << uint16(Trap);
_worldPacket << Size<uint32>(Slots);
_worldPacket << Size<uint32>(Pets);
_worldPacket << Bits<1>(HasJournalLock);
_worldPacket.FlushBits();
for (BattlePetSlot const& slot : Slots)
_worldPacket << slot;
@@ -82,31 +80,36 @@ WorldPacket const* BattlePetJournal::Write()
for (BattlePet const& pet : Pets)
_worldPacket << pet;
_worldPacket << Bits<1>(HasJournalLock);
_worldPacket.FlushBits();
return &_worldPacket;
}
WorldPacket const* BattlePetUpdates::Write()
{
_worldPacket << Size<uint32>(Pets);
_worldPacket << Bits<1>(PetAdded);
_worldPacket.FlushBits();
for (BattlePet const& pet : Pets)
_worldPacket << pet;
_worldPacket << Bits<1>(PetAdded);
_worldPacket.FlushBits();
return &_worldPacket;
}
WorldPacket const* PetBattleSlotUpdates::Write()
{
_worldPacket << Size<uint32>(Slots);
_worldPacket << Bits<1>(NewSlot);
_worldPacket << Bits<1>(AutoSlotted);
_worldPacket.FlushBits();
for (BattlePetSlot const& slot : Slots)
_worldPacket << slot;
_worldPacket << Bits<1>(NewSlot);
_worldPacket << Bits<1>(AutoSlotted);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -122,6 +125,8 @@ void BattlePetModifyName::Read()
_worldPacket >> SizedString::BitsSize<7>(Name);
_worldPacket >> OptionalInit(DeclinedNames);
_worldPacket >> SizedString::Data(Name);
if (DeclinedNames)
{
for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
@@ -130,8 +135,6 @@ void BattlePetModifyName::Read()
for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
_worldPacket >> SizedString::Data(DeclinedNames->name[i]);
}
_worldPacket >> SizedString::Data(Name);
}
void QueryBattlePetName::Read()
@@ -35,35 +35,19 @@ ByteBuffer& operator<<(ByteBuffer& data, BlackMarketItem const& blackMarketItem)
{
data << int32(blackMarketItem.MarketID);
data << int32(blackMarketItem.SellerNPC);
data << blackMarketItem.Item;
data << int32(blackMarketItem.Quantity);
data << uint64(blackMarketItem.MinBid);
data << uint64(blackMarketItem.MinIncrement);
data << uint64(blackMarketItem.CurrentBid);
data << int32(blackMarketItem.SecondsRemaining);
data << int32(blackMarketItem.NumBids);
data << blackMarketItem.Item;
data << Bits<1>(blackMarketItem.HighBid);
data.FlushBits();
return data;
}
ByteBuffer& operator>>(ByteBuffer& data, BlackMarketItem& blackMarketItem)
{
data >> blackMarketItem.MarketID;
data >> blackMarketItem.SellerNPC;
data >> blackMarketItem.Item;
data >> blackMarketItem.Quantity;
data >> blackMarketItem.MinBid;
data >> blackMarketItem.MinIncrement;
data >> blackMarketItem.CurrentBid;
data >> blackMarketItem.SecondsRemaining;
data >> blackMarketItem.NumBids;
data >> Bits<1>(blackMarketItem.HighBid);
return data;
}
WorldPacket const* BlackMarketRequestItemsResult::Write()
{
_worldPacket << LastUpdateID;
@@ -79,15 +63,15 @@ void BlackMarketBidOnItem::Read()
{
_worldPacket >> Guid;
_worldPacket >> MarketID;
_worldPacket >> BidAmount;
_worldPacket >> Item;
_worldPacket >> BidAmount;
}
WorldPacket const* BlackMarketBidOnItemResult::Write()
{
_worldPacket << int32(MarketID);
_worldPacket << int32(Result);
_worldPacket << Item;
_worldPacket << int32(Result);
return &_worldPacket;
}
@@ -95,8 +79,8 @@ WorldPacket const* BlackMarketBidOnItemResult::Write()
WorldPacket const* BlackMarketOutbid::Write()
{
_worldPacket << int32(MarketID);
_worldPacket << int32(RandomPropertiesID);
_worldPacket << Item;
_worldPacket << int32(RandomPropertiesID);
return &_worldPacket;
}
@@ -104,8 +88,8 @@ WorldPacket const* BlackMarketOutbid::Write()
WorldPacket const* BlackMarketWon::Write()
{
_worldPacket << int32(MarketID);
_worldPacket << int32(RandomPropertiesID);
_worldPacket << Item;
_worldPacket << int32(RandomPropertiesID);
return &_worldPacket;
}
@@ -124,12 +124,12 @@ ByteBuffer& operator>>(ByteBuffer& buffer, CalendarAddEventInfo& addEventInfo)
buffer >> addEventInfo.Flags;
buffer >> Size<uint32>(addEventInfo.Invites);
buffer >> SizedString::BitsSize<8>(addEventInfo.Title);
buffer >> SizedString::BitsSize<11>(addEventInfo.Description);
for (CalendarAddEventInviteInfo& invite : addEventInfo.Invites)
buffer >> invite;
buffer >> SizedString::BitsSize<8>(addEventInfo.Title);
buffer >> SizedString::BitsSize<11>(addEventInfo.Description);
buffer >> SizedString::Data(addEventInfo.Title);
buffer >> SizedString::Data(addEventInfo.Description);
@@ -265,15 +265,15 @@ WorldPacket const* CalendarSendCalendar::Write()
_worldPacket << Size<uint32>(Events);
_worldPacket << Size<uint32>(RaidLockouts);
for (CalendarSendCalendarRaidLockoutInfo const& lockout : RaidLockouts)
_worldPacket << lockout;
for (CalendarSendCalendarInviteInfo const& invite : Invites)
_worldPacket << invite;
for (CalendarSendCalendarEventInfo const& event : Events)
_worldPacket << event;
for (CalendarSendCalendarRaidLockoutInfo const& lockout : RaidLockouts)
_worldPacket << lockout;
return &_worldPacket;
}
@@ -289,13 +289,14 @@ WorldPacket const* CalendarSendEvent::Write()
_worldPacket << LockDate;
_worldPacket << uint64(EventClubID);
_worldPacket << Size<uint32>(Invites);
_worldPacket << SizedString::BitsSize<8>(EventName);
_worldPacket << SizedString::BitsSize<11>(Description);
_worldPacket.FlushBits();
for (CalendarEventInviteInfo const& invite : Invites)
_worldPacket << invite;
_worldPacket << SizedString::BitsSize<8>(EventName);
_worldPacket << SizedString::BitsSize<11>(Description);
_worldPacket.FlushBits();
_worldPacket << SizedString::Data(EventName);
_worldPacket << SizedString::Data(Description);
@@ -323,7 +323,9 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::ClassUnlock const
{
data << int8(classUnlock.ClassID);
data << uint32(classUnlock.AchievementID);
data << Bits<1>(classUnlock.HasExpansion);
data << Bits<1>(classUnlock.HasUnlockedAchievement);
data << Bits<1>(classUnlock.HasEntitlement);
data.FlushBits();
return data;
@@ -333,6 +335,10 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RaceUnlock const&
{
data << int8(raceUnlock.RaceID);
data << Size<uint32>(raceUnlock.ClassUnlocks);
for (EnumCharactersResult::ClassUnlock const& classUnlock : raceUnlock.ClassUnlocks)
data << classUnlock;
data << Bits<1>(raceUnlock.HasUnlockedLicense);
data << Bits<1>(raceUnlock.HasUnlockedAchievement);
data << Bits<1>(raceUnlock.HasHeritageArmorUnlockAchievement);
@@ -340,9 +346,6 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RaceUnlock const&
data << Bits<1>(raceUnlock.FactionBalanceDisabled);
data.FlushBits();
for (EnumCharactersResult::ClassUnlock const& classUnlock : raceUnlock.ClassUnlocks)
data << classUnlock;
return data;
}
@@ -426,12 +429,6 @@ WorldPacket const* EnumCharactersResult::Write()
if (ClassDisableMask)
_worldPacket << uint32(*ClassDisableMask);
for (UnlockedConditionalAppearance const& unlockedConditionalAppearance : UnlockedConditionalAppearances)
_worldPacket << unlockedConditionalAppearance;
for (RaceLimitDisableInfo const& raceLimitDisableInfo : RaceLimitDisables)
_worldPacket << raceLimitDisableInfo;
for (CharacterInfo const& charInfo : Characters)
_worldPacket << charInfo;
@@ -441,6 +438,12 @@ WorldPacket const* EnumCharactersResult::Write()
for (RaceUnlock const& raceUnlock : RaceUnlockData)
_worldPacket << raceUnlock;
for (UnlockedConditionalAppearance const& unlockedConditionalAppearance : UnlockedConditionalAppearances)
_worldPacket << unlockedConditionalAppearance;
for (RaceLimitDisableInfo const& raceLimitDisableInfo : RaceLimitDisables)
_worldPacket << raceLimitDisableInfo;
for (WarbandGroup const& warbandGroup : WarbandGroups)
_worldPacket << warbandGroup;
@@ -236,7 +236,9 @@ namespace WorldPackets
struct ClassUnlock
{
int8 ClassID = 0;
bool HasExpansion = false;
bool HasUnlockedAchievement = false;
bool HasEntitlement = false;
uint32 AchievementID = 0;
};
@@ -195,7 +195,7 @@ WorldPacket const* Chat::Write()
_worldPacket << uint32(TargetVirtualAddress);
_worldPacket << uint32(SenderVirtualAddress);
_worldPacket << int32(AchievementID);
_worldPacket << uint16(_ChatFlags);
_worldPacket << uint32(_ChatFlags);
_worldPacket << float(DisplayTime);
_worldPacket << int32(SpellID);
_worldPacket << SizedString::BitsSize<11>(SenderName);
+1 -1
View File
@@ -176,7 +176,7 @@ namespace WorldPackets
std::string _Channel; ///< Channel Name
std::string ChatText;
uint32 AchievementID = 0;
uint16 _ChatFlags = 0; ///< @see enum ChatFlags
uint32 _ChatFlags = 0; ///< @see enum ChatFlags
float DisplayTime = 0.0f;
int32 SpellID = 0;
Optional<uint32> BroadcastTextID;
@@ -57,6 +57,9 @@ WorldPacket const* SpellNonMeleeDamageLog::Write()
*this << Size<uint32>(WorldTextViewers);
*this << Size<uint32>(Supporters);
for (CombatWorldTextViewerInfo const& worldTextViewer : WorldTextViewers)
*this << worldTextViewer;
for (Spells::SpellSupportInfo const& supportInfo : Supporters)
*this << supportInfo;
@@ -66,9 +69,6 @@ WorldPacket const* SpellNonMeleeDamageLog::Write()
*this << OptionalInit(ContentTuning);
FlushBits();
for (CombatWorldTextViewerInfo const& worldTextViewer : WorldTextViewers)
*this << worldTextViewer;
WriteLogData();
if (ContentTuning)
*this << *ContentTuning;
@@ -178,14 +178,14 @@ WorldPacket const* SpellHealLog::Write()
*this << OptionalInit(ContentTuning);
FlushBits();
WriteLogData();
if (CritRollMade)
*this << *CritRollMade;
if (CritRollNeeded)
*this << *CritRollNeeded;
WriteLogData();
if (ContentTuning)
*this << *ContentTuning;
@@ -219,12 +219,12 @@ ByteBuffer& operator<<(ByteBuffer& data, PeriodicAuraLogEffect const& effect)
data << OptionalInit(effect.ContentTuning);
data.FlushBits();
if (effect.ContentTuning)
data << *effect.ContentTuning;
if (effect.DebugInfo)
data << *effect.DebugInfo;
if (effect.ContentTuning)
data << *effect.ContentTuning;
return data;
}
@@ -234,12 +234,13 @@ WorldPacket const* SpellPeriodicAuraLog::Write()
*this << CasterGUID;
*this << int32(SpellID);
*this << Size<uint32>(Effects);
WriteLogDataBit();
FlushBits();
for (PeriodicAuraLogEffect const& effect : Effects)
*this << effect;
WriteLogDataBit();
FlushBits();
WriteLogData();
return &_worldPacket;
@@ -309,10 +310,12 @@ WorldPacket const* SpellMissLog::Write()
_worldPacket << int32(SpellID);
_worldPacket << Caster;
_worldPacket << Size<uint32>(Entries);
_worldPacket << Bits<1>(HideFromCombatLog);
for (SpellLogMissEntry const& missEntry : Entries)
_worldPacket << missEntry;
_worldPacket << Bits<1>(HideFromCombatLog);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -74,11 +74,16 @@ ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData)
data << uint32(craftingData.OperationID);
data << craftingData.ItemGUID;
data << int32(craftingData.Quantity);
data << craftingData.OldItem;
data << craftingData.NewItem;
data << int32(craftingData.EnchantID);
data << int32(craftingData.ConcentrationCurrencyID);
data << int32(craftingData.ConcentrationSpent);
data << int32(craftingData.IngenuityRefund);
for (SpellReducedReagent const& spellReducedReagent : craftingData.ResourcesReturned)
data << spellReducedReagent;
data << Bits<1>(craftingData.IsCrit);
data << Bits<1>(craftingData.IsRecraft);
data << Bits<1>(craftingData.IsInitialRecraft);
@@ -87,12 +92,6 @@ ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData)
data << Bits<1>(craftingData.ApplyConcentration);
data.FlushBits();
data << craftingData.OldItem;
data << craftingData.NewItem;
for (SpellReducedReagent const& spellReducedReagent : craftingData.ResourcesReturned)
data << spellReducedReagent;
return data;
}
}
@@ -255,18 +255,41 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonInfo const& garrison)
data << uint32(garrison.NumMissionsStartedToday);
data << int32(garrison.MinAutoTroopLevel);
for (GarrisonBuildingInfo const* building : garrison.Buildings)
data << *building;
for (GarrisonPlotInfo const* plot : garrison.Plots)
data << *plot;
for (GarrisonFollower const* follower : garrison.Followers)
data << *follower;
for (GarrisonFollower const* follower : garrison.AutoTroops)
data << *follower;
for (GarrisonMission const* mission : garrison.Missions)
data << *mission;
for (std::vector<GarrisonMissionReward> const& missionReward : garrison.MissionRewards)
{
data << Size<uint32>(missionReward);
for (GarrisonMissionReward const& missionRewardItem : missionReward)
data << missionRewardItem;
}
for (std::vector<GarrisonMissionReward> const& missionReward : garrison.MissionOvermaxRewards)
{
data << Size<uint32>(missionReward);
for (GarrisonMissionReward const& missionRewardItem : missionReward)
data << missionRewardItem;
}
for (GarrisonMissionBonusAbility const* areaBonus : garrison.MissionAreaBonuses)
data << *areaBonus;
for (GarrisonTalent const& talent : garrison.Talents)
data << talent;
for (GarrisonCollection const& collection : garrison.Collections)
data << collection;
@@ -279,34 +302,11 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonInfo const& garrison)
if (!garrison.ArchivedMissions.empty())
data.append(garrison.ArchivedMissions.data(), garrison.ArchivedMissions.size());
for (GarrisonBuildingInfo const* building : garrison.Buildings)
data << *building;
for (bool canStartMission : garrison.CanStartMission)
data << Bits<1>(canStartMission);
data.FlushBits();
for (GarrisonFollower const* follower : garrison.Followers)
data << *follower;
for (GarrisonFollower const* follower : garrison.AutoTroops)
data << *follower;
for (GarrisonMission const* mission : garrison.Missions)
data << *mission;
for (GarrisonTalent const& talent : garrison.Talents)
data << talent;
for (std::vector<GarrisonMissionReward> const& missionReward : garrison.MissionRewards)
for (GarrisonMissionReward const& missionRewardItem : missionReward)
data << missionRewardItem;
for (std::vector<GarrisonMissionReward> const& missionReward : garrison.MissionOvermaxRewards)
for (GarrisonMissionReward const& missionRewardItem : missionReward)
data << missionRewardItem;
return data;
}
@@ -322,12 +322,13 @@ WorldPacket const* GetGarrisonInfoResult::Write()
_worldPacket << int8(FactionIndex);
_worldPacket << Size<uint32>(Garrisons);
_worldPacket << Size<uint32>(FollowerSoftCaps);
for (FollowerSoftCapInfo const& followerSoftCapInfo : FollowerSoftCaps)
_worldPacket << followerSoftCapInfo;
for (GarrisonInfo const& garrison : Garrisons)
_worldPacket << garrison;
for (FollowerSoftCapInfo const& followerSoftCapInfo : FollowerSoftCaps)
_worldPacket << followerSoftCapInfo;
return &_worldPacket;
}
+15 -13
View File
@@ -42,9 +42,6 @@ WorldPacket const* QueryGuildInfoResponse::Write()
_worldPacket << uint32(Info->BorderStyle);
_worldPacket << uint32(Info->BorderColor);
_worldPacket << uint32(Info->BackgroundColor);
_worldPacket << SizedString::BitsSize<7>(Info->GuildName);
_worldPacket.FlushBits();
for (GuildInfo::GuildInfoRank const& rank : Info->Ranks)
{
_worldPacket << uint32(rank.RankID);
@@ -55,6 +52,9 @@ WorldPacket const* QueryGuildInfoResponse::Write()
_worldPacket << SizedString::Data(rank.RankName);
}
_worldPacket << SizedString::BitsSize<7>(Info->GuildName);
_worldPacket.FlushBits();
_worldPacket << SizedString::Data(Info->GuildName);
}
@@ -87,6 +87,7 @@ ByteBuffer& operator<<(ByteBuffer& data, GuildRosterMemberData const& rosterMemb
data << uint8(rosterMemberData.Level);
data << uint8(rosterMemberData.ClassID);
data << uint8(rosterMemberData.Gender);
data << rosterMemberData.DungeonScore;
data << uint64(rosterMemberData.GuildClubMemberID);
data << uint8(rosterMemberData.RaceID);
data << int32(rosterMemberData.TimerunningSeasonID);
@@ -97,8 +98,6 @@ ByteBuffer& operator<<(ByteBuffer& data, GuildRosterMemberData const& rosterMemb
data << Bits<1>(rosterMemberData.Authenticated);
data.FlushBits();
data << rosterMemberData.DungeonScore;
data << SizedString::Data(rosterMemberData.Name);
data << SizedString::Data(rosterMemberData.Note);
data << SizedString::Data(rosterMemberData.OfficerNote);
@@ -112,13 +111,14 @@ WorldPacket const* GuildRoster::Write()
_worldPacket << CreateDate;
_worldPacket << int32(GuildFlags);
_worldPacket << Size<uint32>(MemberData);
_worldPacket << SizedString::BitsSize<11>(WelcomeText);
_worldPacket << SizedString::BitsSize<11>(InfoText);
_worldPacket.FlushBits();
for (GuildRosterMemberData const& member : MemberData)
_worldPacket << member;
_worldPacket << SizedString::BitsSize<11>(WelcomeText);
_worldPacket << SizedString::BitsSize<11>(InfoText);
_worldPacket.FlushBits();
_worldPacket << SizedString::Data(WelcomeText);
_worldPacket << SizedString::Data(InfoText);
@@ -618,8 +618,6 @@ WorldPacket const* GuildBankQueryResults::Write()
_worldPacket << int32(WithdrawalsRemaining);
_worldPacket << Size<uint32>(TabInfo);
_worldPacket << Size<uint32>(ItemInfo);
_worldPacket << Bits<1>(FullUpdate);
_worldPacket.FlushBits();
for (GuildBankTabInfo const& tab : TabInfo)
{
@@ -635,12 +633,12 @@ WorldPacket const* GuildBankQueryResults::Write()
for (GuildBankItemInfo const& item : ItemInfo)
{
_worldPacket << int32(item.Slot);
_worldPacket << item.Item;
_worldPacket << int32(item.Count);
_worldPacket << int32(item.EnchantmentID);
_worldPacket << int32(item.Charges);
_worldPacket << int32(item.OnUseEnchantmentID);
_worldPacket << int32(item.Flags);
_worldPacket << item.Item;
_worldPacket << BitsSize<2>(item.SocketEnchant);
_worldPacket << Bits<1>(item.Locked);
_worldPacket.FlushBits();
@@ -649,6 +647,9 @@ WorldPacket const* GuildBankQueryResults::Write()
_worldPacket << socketEnchant;
}
_worldPacket << Bits<1>(FullUpdate);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -794,8 +795,6 @@ WorldPacket const* GuildBankLogQueryResults::Write()
{
_worldPacket << int32(Tab);
_worldPacket << Size<uint32>(Entry);
_worldPacket << OptionalInit(WeeklyBonusMoney);
_worldPacket.FlushBits();
for (GuildBankLogEntry const& logEntry : Entry)
{
@@ -822,6 +821,9 @@ WorldPacket const* GuildBankLogQueryResults::Write()
_worldPacket << int8(*logEntry.OtherTab);
}
_worldPacket << OptionalInit(WeeklyBonusMoney);
_worldPacket.FlushBits();
if (WeeklyBonusMoney)
_worldPacket << uint64(*WeeklyBonusMoney);
@@ -111,8 +111,8 @@ ByteBuffer& operator<<(ByteBuffer& data, PlayerModelDisplayInfo const& displayIn
{
data << displayInfo.GUID;
data << int32(displayInfo.SpecializationID);
data << Size<uint32>(displayInfo.Items);
data << displayInfo.DisplayInfo;
data << Size<uint32>(displayInfo.Items);
for (InspectItemData const& item : displayInfo.Items)
data << item;
@@ -219,12 +219,19 @@ WorldPacket const* InspectResult::Write()
_worldPacket << Size<uint32>(Glyphs);
_worldPacket << Size<uint32>(Talents);
_worldPacket << Size<uint32>(PvpTalents);
_worldPacket << TalentInfo;
_worldPacket << int32(ItemLevel);
for (PVPBracketData const& bracket : Bracket)
_worldPacket << bracket;
_worldPacket << uint8(LifetimeMaxRank);
_worldPacket << uint16(TodayHK);
_worldPacket << uint16(YesterdayHK);
_worldPacket << uint32(LifetimeHK);
_worldPacket << uint32(HonorLevel);
_worldPacket << TraitsInfo;
if (!Glyphs.empty())
_worldPacket.append(Glyphs.data(), Glyphs.size());
if (!Talents.empty())
@@ -232,23 +239,16 @@ WorldPacket const* InspectResult::Write()
if (!PvpTalents.empty())
_worldPacket.append(PvpTalents.data(), PvpTalents.size());
_worldPacket << TalentInfo;
_worldPacket << OptionalInit(GuildData);
_worldPacket << OptionalInit(AzeriteLevel);
_worldPacket.FlushBits();
for (PVPBracketData const& bracket : Bracket)
_worldPacket << bracket;
if (GuildData)
_worldPacket << *GuildData;
if (AzeriteLevel)
_worldPacket << int32(*AzeriteLevel);
_worldPacket << TraitsInfo;
return &_worldPacket;
}
@@ -30,11 +30,11 @@ void BuyItem::Read()
{
_worldPacket >> VendorGUID;
_worldPacket >> ContainerGUID;
_worldPacket >> Item;
_worldPacket >> Quantity;
_worldPacket >> Muid;
_worldPacket >> Slot;
_worldPacket >> As<int32>(ItemType);
_worldPacket >> Item;
}
WorldPacket const* BuySucceeded::Write()
@@ -259,6 +259,7 @@ WorldPacket const* ItemPushResult::Write()
_worldPacket << PlayerGUID;
_worldPacket << uint8(Slot);
_worldPacket << int32(SlotInBag);
_worldPacket << Item;
_worldPacket << int32(ProxyItemID);
_worldPacket << int32(Quantity);
_worldPacket << int32(QuantityInInventory);
@@ -283,14 +284,12 @@ WorldPacket const* ItemPushResult::Write()
_worldPacket << OptionalInit(FirstCraftOperationID);
_worldPacket.FlushBits();
_worldPacket << Item;
if (CraftingData)
_worldPacket << *CraftingData;
if (FirstCraftOperationID)
_worldPacket << uint32(*FirstCraftOperationID);
if (CraftingData)
_worldPacket << *CraftingData;
return &_worldPacket;
}
@@ -173,12 +173,10 @@ ByteBuffer& operator>>(ByteBuffer& data, ItemModList& itemModList)
ByteBuffer& operator<<(ByteBuffer& data, ItemInstance const& itemInstance)
{
data << int32(itemInstance.ItemID);
data << itemInstance.Modifications;
data << OptionalInit(itemInstance.ItemBonus);
data.FlushBits();
data << itemInstance.Modifications;
if (itemInstance.ItemBonus)
data << *itemInstance.ItemBonus;
@@ -188,11 +186,10 @@ ByteBuffer& operator<<(ByteBuffer& data, ItemInstance const& itemInstance)
ByteBuffer& operator>>(ByteBuffer& data, ItemInstance& itemInstance)
{
data >> itemInstance.ItemID;
data >> itemInstance.Modifications;
data >> OptionalInit(itemInstance.ItemBonus);
data.ResetBitPos();
data >> itemInstance.Modifications;
if (itemInstance.ItemBonus)
data >> *itemInstance.ItemBonus;
+11 -9
View File
@@ -170,14 +170,15 @@ ByteBuffer& operator<<(ByteBuffer& data, LfgPlayerDungeonInfo const& playerDunge
data << uint32(playerDungeonInfo.CompletedMask);
data << uint32(playerDungeonInfo.EncounterMask);
data << Size<uint32>(playerDungeonInfo.ShortageReward);
data << playerDungeonInfo.Rewards;
for (LfgPlayerQuestReward const& shortageReward : playerDungeonInfo.ShortageReward)
data << shortageReward;
data << Bits<1>(playerDungeonInfo.FirstReward);
data << Bits<1>(playerDungeonInfo.ShortageEligible);
data.FlushBits();
data << playerDungeonInfo.Rewards;
for (LfgPlayerQuestReward const& shortageReward : playerDungeonInfo.ShortageReward)
data << shortageReward;
return data;
}
@@ -263,13 +264,13 @@ WorldPacket const* LFGRoleCheckUpdate::Write()
for (uint64 bgQueueID : BgQueueIDs)
_worldPacket << uint64(bgQueueID);
for (LFGRoleCheckUpdateMember const& member : Members)
_worldPacket << member;
_worldPacket << Bits<1>(IsBeginning);
_worldPacket << Bits<1>(IsRequeue);
_worldPacket.FlushBits();
for (LFGRoleCheckUpdateMember const& member : Members)
_worldPacket << member;
return &_worldPacket;
}
@@ -314,11 +315,12 @@ ByteBuffer& operator<<(ByteBuffer& data, LFGPlayerRewards const& lfgPlayerReward
{
data << OptionalInit(lfgPlayerRewards.RewardItem);
data << OptionalInit(lfgPlayerRewards.RewardCurrency);
data << uint32(lfgPlayerRewards.Quantity);
data << int32(lfgPlayerRewards.BonusQuantity);
if (lfgPlayerRewards.RewardItem)
data << *lfgPlayerRewards.RewardItem;
data << uint32(lfgPlayerRewards.Quantity);
data << int32(lfgPlayerRewards.BonusQuantity);
if (lfgPlayerRewards.RewardCurrency)
data << int32(*lfgPlayerRewards.RewardCurrency);
+10 -9
View File
@@ -26,10 +26,10 @@ static ByteBuffer& operator<<(ByteBuffer& data, LootItemData const& lootItem)
data << Bits<3>(lootItem.UIType);
data << Bits<1>(lootItem.CanTradeToTapList);
data.FlushBits();
data << lootItem.Loot; // WorldPackets::Item::ItemInstance
data << uint32(lootItem.Quantity);
data << uint8(lootItem.LootItemType);
data << uint8(lootItem.LootListID);
data << lootItem.Loot; // WorldPackets::Item::ItemInstance
return data;
}
@@ -61,10 +61,6 @@ WorldPacket const* LootResponse::Write()
_worldPacket << uint32(Coins);
_worldPacket << Size<uint32>(Items);
_worldPacket << Size<uint32>(Currencies);
_worldPacket << Bits<1>(Acquired);
_worldPacket << Bits<1>(AELooting);
_worldPacket << Bits<1>(SuppressError);
_worldPacket.FlushBits();
for (LootItemData const& item : Items)
_worldPacket << item;
@@ -72,6 +68,11 @@ WorldPacket const* LootResponse::Write()
for (LootCurrency const& currency : Currencies)
_worldPacket << currency;
_worldPacket << Bits<1>(Acquired);
_worldPacket << Bits<1>(AELooting);
_worldPacket << Bits<1>(SuppressError);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -179,12 +180,12 @@ WorldPacket const* StartLootRoll::Write()
{
_worldPacket << LootObj;
_worldPacket << int32(MapID);
_worldPacket << Item;
_worldPacket << RollTime;
_worldPacket << uint8(ValidRolls);
_worldPacket.append(LootRollIneligibleReason.data(), LootRollIneligibleReason.size());
_worldPacket << uint8(Method);
_worldPacket << int32(DungeonEncounterID);
_worldPacket << Item;
return &_worldPacket;
}
@@ -193,10 +194,10 @@ WorldPacket const* LootRollBroadcast::Write()
{
_worldPacket << LootObj;
_worldPacket << Player;
_worldPacket << Item;
_worldPacket << int32(Roll);
_worldPacket << uint8(RollType);
_worldPacket << int32(DungeonEncounterID);
_worldPacket << Item;
_worldPacket << Bits<1>(Autopassed);
_worldPacket << Bits<1>(OffSpec);
_worldPacket.FlushBits();
@@ -207,11 +208,11 @@ WorldPacket const* LootRollBroadcast::Write()
WorldPacket const* LootRollWon::Write()
{
_worldPacket << LootObj;
_worldPacket << Item;
_worldPacket << Winner;
_worldPacket << int32(Roll);
_worldPacket << uint8(RollType);
_worldPacket << int32(DungeonEncounterID);
_worldPacket << Item;
_worldPacket << Bits<1>(MainSpec);
_worldPacket.FlushBits();
@@ -221,8 +222,8 @@ WorldPacket const* LootRollWon::Write()
WorldPacket const* LootAllPassed::Write()
{
_worldPacket << LootObj;
_worldPacket << int32(DungeonEncounterID);
_worldPacket << Item;
_worldPacket << int32(DungeonEncounterID);
return &_worldPacket;
}
@@ -62,22 +62,22 @@ ByteBuffer& operator<<(ByteBuffer& data, MailAttachedItem const& att)
{
data << uint8(att.Position);
data << uint64(att.AttachID);
data << att.Item;
data << int32(att.Count);
data << int32(att.Charges);
data << uint32(att.MaxDurability);
data << int32(att.Durability);
data << att.Item;
data << BitsSize<4>(att.Enchants);
data << BitsSize<2>(att.Gems);
data << Bits<1>(att.Unlocked);
data.FlushBits();
for (Item::ItemGemData const& gem : att.Gems)
data << gem;
for (Item::ItemEnchantData const& en : att.Enchants)
data << en;
for (Item::ItemGemData const& gem : att.Gems)
data << gem;
return data;
}
@@ -150,13 +150,13 @@ ByteBuffer& operator<<(ByteBuffer& data, MailListEntry const& entry)
break;
}
for (MailAttachedItem const& att : entry.Attachments)
data << att;
data << SizedString::BitsSize<8>(entry.Subject);
data << SizedString::BitsSize<13>(entry.Body);
data.FlushBits();
for (MailAttachedItem const& att : entry.Attachments)
data << att;
data << SizedString::Data(entry.Subject);
data << SizedString::Data(entry.Body);
@@ -801,7 +801,7 @@ WorldPacket const* SplashScreenShowLatest::Write()
WorldPacket const* DisplayToast::Write()
{
_worldPacket << uint64(Quantity);
_worldPacket << As<uint8>(DisplayToastMethod);
_worldPacket << As<uint32>(DisplayToastMethod);
_worldPacket << uint32(QuestID);
_worldPacket << Bits<1>(Mailed);
@@ -107,24 +107,11 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo)
data.FlushBits();
if (hasTransportData)
data << movementInfo.transport;
if (movementInfo.standingOnGameObjectGUID)
data << *movementInfo.standingOnGameObjectGUID;
if (movementInfo.inertia)
{
data << uint32(movementInfo.inertia->id);
data << movementInfo.inertia->force.PositionXYZStream();
data << uint32(movementInfo.inertia->lifetime);
}
if (movementInfo.advFlying)
{
data << float(movementInfo.advFlying->forwardVelocity);
data << float(movementInfo.advFlying->upVelocity);
}
if (hasTransportData)
data << movementInfo.transport;
if (hasFallData)
{
@@ -141,6 +128,19 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo)
}
}
if (movementInfo.inertia)
{
data << uint32(movementInfo.inertia->id);
data << movementInfo.inertia->force.PositionXYZStream();
data << uint32(movementInfo.inertia->lifetime);
}
if (movementInfo.advFlying)
{
data << float(movementInfo.advFlying->forwardVelocity);
data << float(movementInfo.advFlying->upVelocity);
}
if (movementInfo.driveStatus)
{
data << float(movementInfo.driveStatus->speed);
@@ -183,24 +183,11 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo)
data >> WorldPackets::OptionalInit(movementInfo.advFlying);
data >> WorldPackets::OptionalInit(movementInfo.driveStatus);
if (hasTransport)
data >> movementInfo.transport;
if (movementInfo.standingOnGameObjectGUID)
data >> *movementInfo.standingOnGameObjectGUID;
if (movementInfo.inertia)
{
data >> movementInfo.inertia->id;
data >> movementInfo.inertia->force.PositionXYZStream();
data >> movementInfo.inertia->lifetime;
}
if (movementInfo.advFlying)
{
data >> movementInfo.advFlying->forwardVelocity;
data >> movementInfo.advFlying->upVelocity;
}
if (hasTransport)
data >> movementInfo.transport;
if (hasFall)
{
@@ -218,6 +205,19 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo)
}
}
if (movementInfo.inertia)
{
data >> movementInfo.inertia->id;
data >> movementInfo.inertia->force.PositionXYZStream();
data >> movementInfo.inertia->lifetime;
}
if (movementInfo.advFlying)
{
data >> movementInfo.advFlying->forwardVelocity;
data >> movementInfo.advFlying->upVelocity;
}
if (movementInfo.driveStatus)
{
data.ResetBitPos();
@@ -356,15 +356,15 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementSpline const& movementSpline)
data << OptionalInit(movementSpline.SpellVisualData);
data.FlushBits();
if (movementSpline.SplineFilter)
data << *movementSpline.SplineFilter;
for (TaggedPosition<Position::XYZ> const& pos : movementSpline.Points)
data << pos;
for (TaggedPosition<Position::PackedXYZ> const& pos : movementSpline.PackedDeltas)
data << pos;
if (movementSpline.SplineFilter)
data << *movementSpline.SplineFilter;
if (movementSpline.SpellEffectExtraData)
data << *movementSpline.SpellEffectExtraData;
@@ -386,11 +386,11 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementSpline const& movementSpline)
ByteBuffer& operator<<(ByteBuffer& data, MovementMonsterSpline const& movementMonsterSpline)
{
data << movementMonsterSpline.ID;
data << movementMonsterSpline.Move;
data << Bits<1>(movementMonsterSpline.CrzTeleport);
data << Bits<1>(movementMonsterSpline.StopUseFaceDirection);
data << Bits<3>(movementMonsterSpline.StopSplineStyle);
data << movementMonsterSpline.Move;
data.FlushBits();
return data;
}
@@ -420,35 +420,11 @@ void CommonMovement::WriteCreateObjectSplineDataBlock(::Movement::MoveSpline con
if (hasSplineMove) // MovementSplineMove
{
data << uint32(moveSpline.splineflags.Raw.AsUnderlyingType()); // SplineFlags
data << uint8(moveSpline.facing.type); // Face
data << int32(moveSpline.timePassed()); // Elapsed
data << uint32(moveSpline.Duration()); // Duration
data << float(1.0f); // DurationModifier
data << float(1.0f); // NextDurationModifier
data << Bits<2>(moveSpline.facing.type); // Face
bool hasFadeObjectTime = moveSpline.splineflags.FadeObject && moveSpline.effect_start_time < moveSpline.Duration();
data << Bits<1>(hasFadeObjectTime);
data << BitsSize<16>(moveSpline.getPath());
data << Bits<1>(false); // HasSplineFilter
data << OptionalInit(moveSpline.spell_effect_extra); // HasSpellEffectExtraData
bool hasJumpExtraData = moveSpline.splineflags.Parabolic && (!moveSpline.spell_effect_extra || moveSpline.effect_start_time);
data << Bits<1>(hasJumpExtraData);
data << OptionalInit(moveSpline.turn); // HasTurnData
data << OptionalInit(moveSpline.anim_tier); // HasAnimTierTransition
data << Bits<1>(false); // HasSpellVisualData
data.FlushBits();
//if (HasSplineFilterKey)
//{
// data << uint32(FilterKeysCount);
// for (var i = 0; i < FilterKeysCount; ++i)
// {
// data << float(In);
// data << float(Out);
// }
// data << Bits<2>(FilterFlags);
// data.FlushBits();
//}
switch (moveSpline.facing.type)
{
@@ -470,11 +446,36 @@ void CommonMovement::WriteCreateObjectSplineDataBlock(::Movement::MoveSpline con
break;
}
bool hasFadeObjectTime = moveSpline.splineflags.FadeObject && moveSpline.effect_start_time < moveSpline.Duration();
data << Bits<1>(hasFadeObjectTime);
data << BitsSize<16>(moveSpline.getPath());
data << Bits<1>(false); // HasSplineFilter
data << OptionalInit(moveSpline.spell_effect_extra); // HasSpellEffectExtraData
bool hasJumpExtraData = moveSpline.splineflags.Parabolic && (!moveSpline.spell_effect_extra || moveSpline.effect_start_time);
data << Bits<1>(hasJumpExtraData);
data << OptionalInit(moveSpline.turn); // HasTurnData
data << OptionalInit(moveSpline.anim_tier); // HasAnimTierTransition
data << Bits<1>(false); // HasSpellVisualData
data.FlushBits();
if (hasFadeObjectTime)
data << uint32(moveSpline.effect_start_time); // FadeObjectTime
data.append(reinterpret_cast<float const*>(moveSpline.getPath().data()), moveSpline.getPath().size() * 3);
//if (HasSplineFilterKey)
//{
// data << uint32(FilterKeysCount);
// for (var i = 0; i < FilterKeysCount; ++i)
// {
// data << float(In);
// data << float(Out);
// }
// data << Bits<2>(FilterFlags);
// data.FlushBits();
//}
if (moveSpline.spell_effect_extra)
{
data << moveSpline.spell_effect_extra->Target;
@@ -643,8 +644,8 @@ void MonsterMove::InitializeSplineData(::Movement::MoveSpline const& moveSpline)
WorldPacket const* MonsterMove::Write()
{
_worldPacket << MoverGUID;
_worldPacket << Pos;
_worldPacket << SplineData;
_worldPacket << Pos;
return &_worldPacket;
}
@@ -785,12 +786,15 @@ WorldPacket const* MoveTeleport::Write()
_worldPacket << uint32(SequenceIndex);
_worldPacket << Pos;
_worldPacket << float(Facing);
_worldPacket << uint8(PreloadWorld);
_worldPacket << OptionalInit(TransportGUID);
_worldPacket << OptionalInit(Vehicle);
_worldPacket << Bits<1>(PreloadWorld);
_worldPacket.FlushBits();
if (TransportGUID)
_worldPacket << *TransportGUID;
if (Vehicle)
{
_worldPacket << uint8(Vehicle->VehicleSeatIndex);
@@ -799,9 +803,6 @@ WorldPacket const* MoveTeleport::Write()
_worldPacket.FlushBits();
}
if (TransportGUID)
_worldPacket << *TransportGUID;
return &_worldPacket;
}
@@ -826,6 +827,10 @@ WorldPacket const* MoveUpdateTeleport::Write()
_worldPacket << *Status;
_worldPacket << Size<uint32>(MovementForces);
for (MovementForce const& force : MovementForces)
_worldPacket << force;
_worldPacket << OptionalInit(WalkSpeed);
_worldPacket << OptionalInit(RunSpeed);
_worldPacket << OptionalInit(RunBackSpeed);
@@ -837,9 +842,6 @@ WorldPacket const* MoveUpdateTeleport::Write()
_worldPacket << OptionalInit(PitchRate);
_worldPacket.FlushBits();
for (MovementForce const& force : MovementForces)
_worldPacket << force;
if (WalkSpeed)
_worldPacket << *WalkSpeed;
@@ -1144,9 +1146,6 @@ ByteBuffer& operator<<(ByteBuffer& data, MoveStateChange const& stateChange)
data << OptionalInit(stateChange.DriveCapabilityRecID);
data.FlushBits();
if (stateChange.MovementForce_)
data << *stateChange.MovementForce_;
if (stateChange.Speed)
data << float(*stateChange.Speed);
@@ -1162,6 +1161,9 @@ ByteBuffer& operator<<(ByteBuffer& data, MoveStateChange const& stateChange)
if (stateChange.CollisionHeight)
data << *stateChange.CollisionHeight;
if (stateChange.MovementForce_)
data << *stateChange.MovementForce_;
if (stateChange.MovementForceGUID)
data << *stateChange.MovementForceGUID;
@@ -348,7 +348,7 @@ namespace WorldPackets
ObjectGuid MoverGUID;
Optional<ObjectGuid> TransportGUID;
float Facing = 0.0f;
uint8 PreloadWorld = 0;
bool PreloadWorld = false;
};
class MoveUpdateTeleport final : public ServerPacket
@@ -85,8 +85,8 @@ ByteBuffer& operator<<(ByteBuffer& data, MythicPlusRun const& mythicPlusRun)
ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreBestRunForAffix const& dungeonScoreBestRunForAffix)
{
data << int32(dungeonScoreBestRunForAffix.KeystoneAffixID);
data << float(dungeonScoreBestRunForAffix.Score);
data << dungeonScoreBestRunForAffix.Run;
data << float(dungeonScoreBestRunForAffix.Score);
return data;
}
+9 -10
View File
@@ -46,6 +46,7 @@ ByteBuffer& operator<<(ByteBuffer& data, ClientGossipOptions const& gossipOption
data << int8(gossipOption.OptionFlags);
data << uint64(gossipOption.OptionCost);
data << uint32(gossipOption.OptionLanguage);
data << gossipOption.Treasure;
data << int32(gossipOption.Flags);
data << int32(gossipOption.OrderIndex);
data << SizedString::BitsSize<12>(gossipOption.Text);
@@ -56,8 +57,6 @@ ByteBuffer& operator<<(ByteBuffer& data, ClientGossipOptions const& gossipOption
data << SizedCString::BitsSize<8>(gossipOption.FailureDescription);
data.FlushBits();
data << gossipOption.Treasure;
data << SizedString::Data(gossipOption.Text);
data << SizedString::Data(gossipOption.Confirm);
@@ -115,22 +114,23 @@ WorldPacket const* GossipMessage::Write()
_worldPacket << int32(FriendshipFactionID);
_worldPacket << Size<uint32>(GossipOptions);
_worldPacket << Size<uint32>(GossipText);
_worldPacket << OptionalInit(RandomTextID);
_worldPacket << OptionalInit(BroadcastTextID);
_worldPacket.FlushBits();
for (ClientGossipOptions const& options : GossipOptions)
_worldPacket << options;
for (ClientGossipText const& text : GossipText)
_worldPacket << text;
_worldPacket << OptionalInit(RandomTextID);
_worldPacket << OptionalInit(BroadcastTextID);
_worldPacket.FlushBits();
if (RandomTextID)
_worldPacket << int32(*RandomTextID);
if (BroadcastTextID)
_worldPacket << int32(*BroadcastTextID);
for (ClientGossipText const& text : GossipText)
_worldPacket << text;
return &_worldPacket;
}
@@ -143,13 +143,12 @@ ByteBuffer& operator<<(ByteBuffer& data, VendorItem const& item)
data << int32(item.Quantity);
data << int32(item.ExtendedCostID);
data << int32(item.PlayerConditionFailed);
data << item.Item;
data << Bits<1>(item.Locked);
data << Bits<1>(item.DoNotFilterOnVendor);
data << Bits<1>(item.Refundable);
data.FlushBits();
data << item.Item;
return data;
}
+46 -13
View File
@@ -69,10 +69,10 @@ WorldPacket const* PartyInvite::Write()
_worldPacket << SizedString::BitsSize<6>(InviterName);
_worldPacket << Bits<1>(IsCrossFaction);
_worldPacket << InviterRealm;
_worldPacket << InviterGUID;
_worldPacket << InviterBNetAccountId;
_worldPacket << uint16(InviterCfgRealmID);
_worldPacket << InviterRealm;
_worldPacket << uint8(ProposedRoles);
_worldPacket << Size<uint32>(LfgSlots);
_worldPacket << uint32(LfgCompletedMask);
@@ -238,6 +238,7 @@ ByteBuffer& operator<<(ByteBuffer& data, PartyMemberStats const& memberStats)
data << Size<uint32>(memberStats.Auras);
data << memberStats.Phases;
data << memberStats.ChromieTime;
data << memberStats.DungeonScore;
for (PartyMemberAuraStates const& aura : memberStats.Auras)
data << aura;
@@ -245,8 +246,6 @@ ByteBuffer& operator<<(ByteBuffer& data, PartyMemberStats const& memberStats)
data << OptionalInit(memberStats.PetStats);
data.FlushBits();
data << memberStats.DungeonScore;
if (memberStats.PetStats)
data << *memberStats.PetStats;
@@ -257,8 +256,8 @@ WorldPacket const* PartyMemberFullState::Write()
{
_worldPacket << Bits<1>(ForEnemy);
_worldPacket << MemberStats;
_worldPacket << MemberGuid;
_worldPacket << MemberStats;
return &_worldPacket;
}
@@ -488,13 +487,14 @@ ByteBuffer& operator<<(ByteBuffer& data, PartyPlayerInfo const& playerInfo)
data << Bits<1>(playerInfo.Connected);
data << Bits<1>(playerInfo.FromSocialQueue);
data << Bits<1>(playerInfo.VoiceChatSilenced);
data << playerInfo.Leaver;
data << playerInfo.GUID;
data << uint8(playerInfo.Subgroup);
data << uint8(playerInfo.Flags);
data << uint8(playerInfo.RolesAssigned);
data << uint8(playerInfo.RolesUnk_1210);
data << uint8(playerInfo.Class);
data << uint8(playerInfo.FactionGroup);
data << playerInfo.Leaver;
data << SizedString::Data(playerInfo.Name);
data << SizedCString::Data(playerInfo.VoiceStateID);
@@ -565,14 +565,21 @@ WorldPacket const* PartyUpdate::Write()
_worldPacket << uint8(LeaderFactionGroup);
_worldPacket << int32(PingRestriction);
_worldPacket << Size<uint32>(PlayerList);
for (PartyPlayerInfo const& playerInfos : PlayerList)
_worldPacket << playerInfos;
_worldPacket << OptionalInit(ChallengeMode);
_worldPacket << OptionalInit(LfgInfos);
_worldPacket << OptionalInit(LootSettings);
_worldPacket << OptionalInit(DifficultySettings);
_worldPacket.FlushBits();
for (PartyPlayerInfo const& playerInfos : PlayerList)
_worldPacket << playerInfos;
if (ChallengeMode)
_worldPacket << *ChallengeMode;
if (LfgInfos)
_worldPacket << *LfgInfos;
if (LootSettings)
_worldPacket << *LootSettings;
@@ -580,12 +587,6 @@ WorldPacket const* PartyUpdate::Write()
if (DifficultySettings)
_worldPacket << *DifficultySettings;
if (ChallengeMode)
_worldPacket << *ChallengeMode;
if (LfgInfos)
_worldPacket << *LfgInfos;
return &_worldPacket;
}
@@ -793,6 +794,9 @@ void SendPingUnit::Read()
_worldPacket >> As<uint8>(Type);
_worldPacket >> PinFrameID;
_worldPacket >> PingDuration;
_worldPacket >> Health;
_worldPacket >> Mana;
_worldPacket >> Bits<1>(IsUnitFrameStatusTextPing);
_worldPacket >> OptionalInit(CreatureID);
_worldPacket >> OptionalInit(SpellOverrideNameID);
if (CreatureID)
@@ -809,6 +813,9 @@ WorldPacket const* ReceivePingUnit::Write()
_worldPacket << uint8(Type);
_worldPacket << uint32(PinFrameID);
_worldPacket << PingDuration;
_worldPacket << Health;
_worldPacket << Mana;
_worldPacket << Bits<1>(IsUnitFrameStatusTextPing);
_worldPacket << OptionalInit(CreatureID);
_worldPacket << OptionalInit(SpellOverrideNameID);
_worldPacket.FlushBits();
@@ -846,6 +853,32 @@ WorldPacket const* ReceivePingWorldPoint::Write()
return &_worldPacket;
}
void SendPingCooldown::Read()
{
_worldPacket >> SenderGUID;
_worldPacket >> PinFrameID;
_worldPacket >> SpellID;
_worldPacket >> ItemID;
_worldPacket >> Duration;
_worldPacket >> Remaining;
_worldPacket >> As<int8>(Type);
_worldPacket >> SpellCategoryID;
}
WorldPacket const* ReceivePingCooldown::Write()
{
_worldPacket << SenderGUID;
_worldPacket << uint32(PinFrameID);
_worldPacket << uint32(SpellID);
_worldPacket << uint32(ItemID);
_worldPacket << Duration;
_worldPacket << Remaining;
_worldPacket << uint8(Type);
_worldPacket << uint32(SpellCategoryID);
return &_worldPacket;
}
WorldPacket const* CancelPingPin::Write()
{
_worldPacket << SenderGUID;
+42 -1
View File
@@ -532,6 +532,7 @@ namespace WorldPackets
uint8 Subgroup = 0u;
uint8 Flags = 0u;
uint8 RolesAssigned = 0u;
uint8 RolesUnk_1210 = 0u; // forces role displayed to be tank if this field contains tank role and RolesAssigned is dps
uint8 FactionGroup = 0u;
bool FromSocialQueue = false;
bool VoiceChatSilenced = false;
@@ -729,6 +730,9 @@ namespace WorldPackets
PingSubjectType Type = { };
uint32 PinFrameID = 0;
Duration<Milliseconds, int32> PingDuration;
float Health = 1.0f; // range 0-1
float Mana = 1.0f; // range 0-1
bool IsUnitFrameStatusTextPing = false; // prints health (and mana if healer) in chat
Optional<uint32> CreatureID;
Optional<uint32> SpellOverrideNameID;
};
@@ -736,7 +740,7 @@ namespace WorldPackets
class ReceivePingUnit final : public ServerPacket
{
public:
explicit ReceivePingUnit() : ServerPacket(SMSG_RECEIVE_PING_UNIT, 16 + 16 + 1 + 4) { }
explicit ReceivePingUnit() : ServerPacket(SMSG_RECEIVE_PING_UNIT, 16 + 16 + 1 + 4 + 4 + 4 + 4) { }
WorldPacket const* Write() override;
@@ -745,6 +749,9 @@ namespace WorldPackets
PingSubjectType Type = { };
uint32 PinFrameID = 0;
Duration<Milliseconds, int32> PingDuration;
float Health = 1.0f; // range 0-1
float Mana = 1.0f; // range 0-1
bool IsUnitFrameStatusTextPing = false; // prints health (and mana if healer) in chat
Optional<uint32> CreatureID;
Optional<uint32> SpellOverrideNameID;
};
@@ -781,6 +788,40 @@ namespace WorldPackets
ObjectGuid Transport;
};
class SendPingCooldown final : public ClientPacket
{
public:
explicit SendPingCooldown(WorldPacket&& packet) : ClientPacket(CMSG_SEND_PING_COOLDOWN, std::move(packet)) { }
void Read() override;
ObjectGuid SenderGUID;
uint32 PinFrameID = 0;
uint32 SpellID = 0;
uint32 ItemID = 0;
WorldPackets::Duration<Milliseconds, int32> Duration;
WorldPackets::Duration<Milliseconds, int32> Remaining;
PingSubjectType Type = { };
uint32 SpellCategoryID = 0;
};
class ReceivePingCooldown final : public ServerPacket
{
public:
explicit ReceivePingCooldown() : ServerPacket(SMSG_RECEIVE_PING_COOLDOWN, 16 + 4 + 4 + 4 + 4 + 4 + 1 + 4) { }
WorldPacket const* Write() override;
ObjectGuid SenderGUID;
uint32 PinFrameID = 0;
uint32 SpellID = 0;
uint32 ItemID = 0;
WorldPackets::Duration<Milliseconds, int32> Duration;
WorldPackets::Duration<Milliseconds, int32> Remaining;
PingSubjectType Type = { };
uint32 SpellCategoryID = 0;
};
class CancelPingPin final : public ServerPacket
{
public:
@@ -508,8 +508,8 @@ WorldPacket const* QueryItemTextResponse::Write()
{
_worldPacket << Bits<1>(Valid);
_worldPacket.FlushBits();
_worldPacket << Item;
_worldPacket << Id;
_worldPacket << Item;
return &_worldPacket;
}
@@ -566,8 +566,6 @@ ByteBuffer& operator<<(ByteBuffer& data, TreasurePickerBonus const& treasurePick
data << Size<uint32>(treasurePickerBonus.ItemPicks);
data << Size<uint32>(treasurePickerBonus.CurrencyPicks);
data << uint64(treasurePickerBonus.Gold);
data << Bits<1>(treasurePickerBonus.Context);
data.FlushBits();
for (TreasurePickItem const& treasurePickerItem : treasurePickerBonus.ItemPicks)
data << treasurePickerItem;
@@ -575,7 +573,10 @@ ByteBuffer& operator<<(ByteBuffer& data, TreasurePickerBonus const& treasurePick
for (TreasurePickCurrency const& treasurePickCurrency : treasurePickerBonus.CurrencyPicks)
data << treasurePickCurrency;
return data;
data << Bits<1>(treasurePickerBonus.Context);
data.FlushBits();
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, TreasurePickerPick const& treasurePickerPick)
@@ -585,8 +586,6 @@ ByteBuffer& operator<<(ByteBuffer& data, TreasurePickerPick const& treasurePicke
data << uint64(treasurePickerPick.Gold);
data << Size<uint32>(treasurePickerPick.Bonuses);
data << int32(treasurePickerPick.Flags);
data << Bits<1>(treasurePickerPick.IsChoice);
data.FlushBits();
for (TreasurePickItem const& treasurePickItem : treasurePickerPick.ItemPicks)
data << treasurePickItem;
@@ -597,6 +596,9 @@ ByteBuffer& operator<<(ByteBuffer& data, TreasurePickerPick const& treasurePicke
for (TreasurePickerBonus const& treasurePickerBonus : treasurePickerPick.Bonuses)
data << treasurePickerBonus;
data << Bits<1>(treasurePickerPick.IsChoice);
data.FlushBits();
return data;
}
+61 -57
View File
@@ -185,31 +185,6 @@ WorldPacket const* QueryQuestInfoResponse::Write()
for (QuestCompleteDisplaySpell const& rewardDisplaySpell : Info.RewardDisplaySpell)
_worldPacket << rewardDisplaySpell;
if (!Info.TreasurePickerID.empty())
_worldPacket.append(Info.TreasurePickerID.data(), Info.TreasurePickerID.size());
if (!Info.NonDisplayableTreasurePickerIDs.empty())
_worldPacket.append(Info.NonDisplayableTreasurePickerIDs.data(), Info.NonDisplayableTreasurePickerIDs.size());
if (!Info.RewardHouseRoomIDs.empty())
_worldPacket.append(Info.RewardHouseRoomIDs.data(), Info.RewardHouseRoomIDs.size());
if (!Info.RewardHouseDecorIDs.empty())
_worldPacket.append(Info.RewardHouseDecorIDs.data(), Info.RewardHouseDecorIDs.size());
_worldPacket << SizedString::BitsSize<9>(Info.LogTitle);
_worldPacket << SizedString::BitsSize<12>(Info.LogDescription);
_worldPacket << SizedString::BitsSize<12>(Info.QuestDescription);
_worldPacket << SizedString::BitsSize<9>(Info.AreaDescription);
_worldPacket << SizedString::BitsSize<10>(Info.PortraitGiverText);
_worldPacket << SizedString::BitsSize<8>(Info.PortraitGiverName);
_worldPacket << SizedString::BitsSize<10>(Info.PortraitTurnInText);
_worldPacket << SizedString::BitsSize<8>(Info.PortraitTurnInName);
_worldPacket << SizedString::BitsSize<11>(Info.QuestCompletionLog);
_worldPacket << Bits<1>(Info.ResetByScheduler);
_worldPacket << Bits<1>(Info.ReadyForTranslation);
_worldPacket.FlushBits();
for (QuestInfoObjective const& questObjective : Info.Objectives)
{
_worldPacket << uint32(questObjective.ID);
@@ -235,6 +210,37 @@ WorldPacket const* QueryQuestInfoResponse::Write()
_worldPacket << SizedString::Data(questObjective.Description);
}
if (!Info.TreasurePickerID.empty())
_worldPacket.append(Info.TreasurePickerID.data(), Info.TreasurePickerID.size());
if (!Info.NonDisplayableTreasurePickerIDs.empty())
_worldPacket.append(Info.NonDisplayableTreasurePickerIDs.data(), Info.NonDisplayableTreasurePickerIDs.size());
for (ConditionalQuestText const& conditionalQuestText : Info.ConditionalQuestDescription)
_worldPacket << conditionalQuestText;
for (ConditionalQuestText const& conditionalQuestText : Info.ConditionalQuestCompletionLog)
_worldPacket << conditionalQuestText;
if (!Info.RewardHouseRoomIDs.empty())
_worldPacket.append(Info.RewardHouseRoomIDs.data(), Info.RewardHouseRoomIDs.size());
if (!Info.RewardHouseDecorIDs.empty())
_worldPacket.append(Info.RewardHouseDecorIDs.data(), Info.RewardHouseDecorIDs.size());
_worldPacket << SizedString::BitsSize<9>(Info.LogTitle);
_worldPacket << SizedString::BitsSize<12>(Info.LogDescription);
_worldPacket << SizedString::BitsSize<12>(Info.QuestDescription);
_worldPacket << SizedString::BitsSize<9>(Info.AreaDescription);
_worldPacket << SizedString::BitsSize<10>(Info.PortraitGiverText);
_worldPacket << SizedString::BitsSize<8>(Info.PortraitGiverName);
_worldPacket << SizedString::BitsSize<10>(Info.PortraitTurnInText);
_worldPacket << SizedString::BitsSize<8>(Info.PortraitTurnInName);
_worldPacket << SizedString::BitsSize<11>(Info.QuestCompletionLog);
_worldPacket << Bits<1>(Info.ResetByScheduler);
_worldPacket << Bits<1>(Info.ReadyForTranslation);
_worldPacket.FlushBits();
_worldPacket << SizedString::Data(Info.LogTitle);
_worldPacket << SizedString::Data(Info.LogDescription);
_worldPacket << SizedString::Data(Info.QuestDescription);
@@ -244,12 +250,6 @@ WorldPacket const* QueryQuestInfoResponse::Write()
_worldPacket << SizedString::Data(Info.PortraitTurnInText);
_worldPacket << SizedString::Data(Info.PortraitTurnInName);
_worldPacket << SizedString::Data(Info.QuestCompletionLog);
for (ConditionalQuestText const& conditionalQuestText : Info.ConditionalQuestDescription)
_worldPacket << conditionalQuestText;
for (ConditionalQuestText const& conditionalQuestText : Info.ConditionalQuestCompletionLog)
_worldPacket << conditionalQuestText;
}
return &_worldPacket;
@@ -339,7 +339,13 @@ ByteBuffer& operator<<(ByteBuffer& data, QuestRewards const& questRewards)
for (QuestRewardItem const& item : questRewards.Items)
data << item;
for (QuestRewardCurrency const& currency : questRewards.Currencies)
data << currency;
data << int32(questRewards.ChoiceItemCount);
for (QuestChoiceItem const& choiceItem : questRewards.ChoiceItems)
data << choiceItem;
data << int32(questRewards.ItemCount);
data << int32(questRewards.Money);
data << int32(questRewards.XP);
@@ -367,15 +373,9 @@ ByteBuffer& operator<<(ByteBuffer& data, QuestRewards const& questRewards)
if (!questRewards.TreasurePickerID.empty())
data.append(questRewards.TreasurePickerID.data(), questRewards.TreasurePickerID.size());
for (QuestRewardCurrency const& currency : questRewards.Currencies)
data << currency;
data << Bits<1>(questRewards.IsBoostSpell);
data.FlushBits();
for (QuestChoiceItem const& choiceItem : questRewards.ChoiceItems)
data << choiceItem;
return data;
}
@@ -414,6 +414,9 @@ WorldPacket const* QuestGiverOfferRewardMessage::Write()
_worldPacket << int32(QuestGiverCreatureID);
_worldPacket << Size<uint32>(ConditionalRewardText);
for (ConditionalQuestText const& conditionalQuestText : ConditionalRewardText)
_worldPacket << conditionalQuestText;
_worldPacket << SizedString::BitsSize<9>(QuestTitle);
_worldPacket << SizedString::BitsSize<12>(RewardText);
_worldPacket << SizedString::BitsSize<10>(PortraitGiverText);
@@ -422,9 +425,6 @@ WorldPacket const* QuestGiverOfferRewardMessage::Write()
_worldPacket << SizedString::BitsSize<8>(PortraitTurnInName);
_worldPacket.FlushBits();
for (ConditionalQuestText const& conditionalQuestText : ConditionalRewardText)
_worldPacket << conditionalQuestText;
_worldPacket << SizedString::Data(QuestTitle);
_worldPacket << SizedString::Data(RewardText);
_worldPacket << SizedString::Data(PortraitGiverText);
@@ -449,13 +449,12 @@ WorldPacket const* QuestGiverQuestComplete::Write()
_worldPacket << int64(MoneyReward);
_worldPacket << int32(SkillLineIDReward);
_worldPacket << int32(NumSkillUpsReward);
_worldPacket << ItemReward;
_worldPacket << Bits<1>(UseQuestReward);
_worldPacket << Bits<1>(LaunchGossip);
_worldPacket << Bits<1>(LaunchQuest);
_worldPacket << Bits<1>(HideChatMessage);
_worldPacket << ItemReward;
return &_worldPacket;
}
@@ -484,6 +483,7 @@ WorldPacket const* QuestGiverQuestDetails::Write()
_worldPacket.append(QuestFlags);
_worldPacket << int32(SuggestedPartyMembers);
_worldPacket << Size<uint32>(LearnSpells);
_worldPacket << Rewards; // QuestRewards
_worldPacket << Size<uint32>(DescEmotes);
_worldPacket << Size<uint32>(Objectives);
_worldPacket << int32(QuestStartItemID);
@@ -509,6 +509,9 @@ WorldPacket const* QuestGiverQuestDetails::Write()
_worldPacket << int32(obj.Amount);
}
for (ConditionalQuestText const& conditionalQuestText : ConditionalDescriptionText)
_worldPacket << conditionalQuestText;
_worldPacket << SizedString::BitsSize<9>(QuestTitle);
_worldPacket << SizedString::BitsSize<12>(DescriptionText);
_worldPacket << SizedString::BitsSize<12>(LogDescription);
@@ -524,7 +527,6 @@ WorldPacket const* QuestGiverQuestDetails::Write()
_worldPacket << Bits<1>(DisplayPopup);
_worldPacket.FlushBits();
_worldPacket << Rewards; // QuestRewards
_worldPacket << SizedString::Data(QuestTitle);
_worldPacket << SizedString::Data(DescriptionText);
_worldPacket << SizedString::Data(LogDescription);
@@ -533,9 +535,6 @@ WorldPacket const* QuestGiverQuestDetails::Write()
_worldPacket << SizedString::Data(PortraitTurnInText);
_worldPacket << SizedString::Data(PortraitTurnInName);
for (ConditionalQuestText const& conditionalQuestText : ConditionalDescriptionText)
_worldPacket << conditionalQuestText;
return &_worldPacket;
}
@@ -574,13 +573,13 @@ WorldPacket const* QuestGiverRequestItems::Write()
_worldPacket << int32(QuestGiverCreatureID);
_worldPacket << Size<uint32>(ConditionalCompletionText);
for (ConditionalQuestText const& conditionalQuestText : ConditionalCompletionText)
_worldPacket << conditionalQuestText;
_worldPacket << SizedString::BitsSize<9>(QuestTitle);
_worldPacket << SizedString::BitsSize<12>(CompletionText);
_worldPacket.FlushBits();
for (ConditionalQuestText const& conditionalQuestText : ConditionalCompletionText)
_worldPacket << conditionalQuestText;
_worldPacket << SizedString::Data(QuestTitle);
_worldPacket << SizedString::Data(CompletionText);
@@ -618,12 +617,13 @@ WorldPacket const* QuestGiverQuestListMessage::Write()
_worldPacket << uint32(GreetEmoteDelay);
_worldPacket << uint32(GreetEmoteType);
_worldPacket << Size<uint32>(QuestDataText);
_worldPacket << SizedString::BitsSize<11>(Greeting);
_worldPacket.FlushBits();
for (NPC::ClientGossipText const& gossip : QuestDataText)
_worldPacket << gossip;
_worldPacket << SizedString::BitsSize<11>(Greeting);
_worldPacket.FlushBits();
_worldPacket << SizedString::Data(Greeting);
return &_worldPacket;
@@ -817,9 +817,6 @@ ByteBuffer& operator<<(ByteBuffer& data, PlayerChoiceResponse const& playerChoic
data << OptionalInit(playerChoiceResponse.MawPower);
data.FlushBits();
if (playerChoiceResponse.Reward)
data << *playerChoiceResponse.Reward;
data << SizedString::Data(playerChoiceResponse.Answer);
data << SizedString::Data(playerChoiceResponse.Header);
data << SizedString::Data(playerChoiceResponse.SubHeader);
@@ -830,6 +827,9 @@ ByteBuffer& operator<<(ByteBuffer& data, PlayerChoiceResponse const& playerChoic
if (playerChoiceResponse.RewardQuestID)
data << uint32(*playerChoiceResponse.RewardQuestID);
if (playerChoiceResponse.Reward)
data << *playerChoiceResponse.Reward;
if (playerChoiceResponse.MawPower)
data << *playerChoiceResponse.MawPower;
@@ -846,6 +846,10 @@ WorldPacket const* DisplayPlayerChoice::Write()
_worldPacket << uint32(CloseUISoundKitID);
_worldPacket << uint8(NumRerolls);
_worldPacket << ExpireTime;
for (PlayerChoiceResponse const& response : Responses)
_worldPacket << response;
_worldPacket << SizedString::BitsSize<8>(Question);
_worldPacket << SizedString::BitsSize<8>(PendingChoiceText);
_worldPacket << Bits<1>(InfiniteRange);
@@ -854,11 +858,11 @@ WorldPacket const* DisplayPlayerChoice::Write()
_worldPacket << Bits<1>(ShowChoicesAsList);
_worldPacket << Bits<1>(HasPowerChoice);
_worldPacket << Bits<1>(RequiresSelection);
_worldPacket << Bits<1>(ShowChoicesAsGrid);
_worldPacket << Bits<1>(HideAnswerArt);
_worldPacket << Bits<1>(ShowChoicesAsColumns);
_worldPacket.FlushBits();
for (PlayerChoiceResponse const& response : Responses)
_worldPacket << response;
_worldPacket << SizedString::Data(Question);
_worldPacket << SizedString::Data(PendingChoiceText);
@@ -803,6 +803,9 @@ namespace WorldPackets
bool ShowChoicesAsList = false;
bool HasPowerChoice = false;
bool RequiresSelection = false;
bool ShowChoicesAsGrid = false;
bool HideAnswerArt = false;
bool ShowChoicesAsColumns = false;
};
class ChoiceResponse final : public ClientPacket
@@ -54,21 +54,21 @@ WorldPacket const* ScenarioState::Write()
_worldPacket << Size<uint32>(Spells);
_worldPacket << PlayerGUID;
if (!PickedSteps.empty())
_worldPacket.append(PickedSteps.data(), PickedSteps.size());
_worldPacket << Bits<1>(ScenarioComplete);
_worldPacket.FlushBits();
for (Achievement::CriteriaProgress const& progress : CriteriaProgress)
_worldPacket << progress;
for (BonusObjectiveData const& bonusObjective : BonusObjectives)
_worldPacket << bonusObjective;
if (!PickedSteps.empty())
_worldPacket.append(PickedSteps.data(), PickedSteps.size());
for (ScenarioSpellUpdate const& spell : Spells)
_worldPacket << spell;
_worldPacket << Bits<1>(ScenarioComplete);
_worldPacket.FlushBits();
return &_worldPacket;
}
+35 -30
View File
@@ -105,9 +105,6 @@ ByteBuffer& operator<<(ByteBuffer& data, AuraDataInfo const& auraData)
data << BitsSize<6>(auraData.EstimatedPoints);
data << OptionalInit(auraData.ContentTuning);
if (auraData.ContentTuning)
data << *auraData.ContentTuning;
if (auraData.CastUnit)
data << *auraData.CastUnit;
@@ -129,6 +126,9 @@ ByteBuffer& operator<<(ByteBuffer& data, AuraDataInfo const& auraData)
if (!auraData.EstimatedPoints.empty())
data.append(auraData.EstimatedPoints.data(), auraData.EstimatedPoints.size());
if (auraData.ContentTuning)
data << *auraData.ContentTuning;
return data;
}
@@ -148,11 +148,11 @@ WorldPacket const* AuraUpdate::Write()
{
_worldPacket << Bits<1>(UpdateAll);
_worldPacket << BitsSize<9>(Auras);
_worldPacket << UnitGUID;
for (AuraInfo const& aura : Auras)
_worldPacket << aura;
_worldPacket << UnitGUID;
return &_worldPacket;
}
@@ -203,6 +203,16 @@ ByteBuffer& operator>>(ByteBuffer& buffer, MissileTrajectoryRequest& trajectory)
return buffer;
}
ByteBuffer& operator>>(ByteBuffer& data, SpellWeight& weight)
{
data.ResetBitPos();
data >> Bits<2>(weight.Type);
data >> weight.ID;
data >> weight.Quantity;
return data;
}
ByteBuffer& operator>>(ByteBuffer& data, SpellCraftingReagent& optionalReagent)
{
data >> optionalReagent.Slot;
@@ -232,6 +242,7 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request)
buffer >> request.Misc[2];
buffer >> request.SpellID;
buffer >> request.Visual;
buffer >> request.Target;
buffer >> request.MissileTrajectory;
buffer >> request.CraftingNPC;
buffer >> Size<uint32>(request.ExtraCurrencyCosts);
@@ -242,36 +253,29 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request)
for (SpellExtraCurrencyCost& optionalCurrency : request.ExtraCurrencyCosts)
buffer >> optionalCurrency;
buffer.ResetBitPos();
buffer >> OptionalInit(request.ReceiveTime);
buffer >> OptionalInit(request.MoveUpdate);
buffer >> BitsSize<2>(request.Weight);
buffer >> OptionalInit(request.CraftingOrderID);
buffer >> request.Target;
if (request.ReceiveTime)
buffer >> *request.ReceiveTime;
if (request.CraftingOrderID)
buffer >> *request.CraftingOrderID;
for (SpellCraftingReagent& optionalReagent : request.CraftingReagents)
buffer >> optionalReagent;
for (SpellCraftingReagent& optionalReagent : request.RemovedReagents)
buffer >> optionalReagent;
buffer.ResetBitPos();
buffer >> OptionalInit(request.ReceiveTime);
buffer >> OptionalInit(request.MoveUpdate);
buffer >> BitsSize<2>(request.Weight);
buffer >> OptionalInit(request.CraftingOrderID);
if (request.ReceiveTime)
buffer >> *request.ReceiveTime;
if (request.MoveUpdate)
buffer >> *request.MoveUpdate;
for (SpellWeight& weight : request.Weight)
{
buffer.ResetBitPos();
buffer >> Bits<2>(weight.Type);
buffer >> weight.ID;
buffer >> weight.Quantity;
}
buffer >> weight;
if (request.CraftingOrderID)
buffer >> *request.CraftingOrderID;
return buffer;
}
@@ -413,6 +417,7 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellCastData const& spellCastData)
data << uint32(spellCastData.CastFlagsEx);
data << uint32(spellCastData.CastFlagsEx2);
data << uint32(spellCastData.CastTime);
data << spellCastData.Target;
data << spellCastData.MissileTrajectory;
data << int32(spellCastData.AmmoDisplayID);
data << uint8(spellCastData.DestLocSpellCastIndex);
@@ -427,8 +432,6 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellCastData const& spellCastData)
data << BitsSize<16>(spellCastData.TargetPoints);
data.FlushBits();
data << spellCastData.Target;
for (ObjectGuid const& hitTarget : spellCastData.HitTargets)
data << hitTarget;
@@ -498,13 +501,14 @@ WorldPacket const* LearnedSpells::Write()
_worldPacket << Size<uint32>(ClientLearnedSpellData);
_worldPacket << uint32(SpecializationID);
_worldPacket << int32(MinActionBarSlot);
_worldPacket << Bits<1>(SuppressMessaging);
_worldPacket << Bits<1>(TraitGrantedByAura);
_worldPacket.FlushBits();
for (LearnedSpellInfo const& spell : ClientLearnedSpellData)
_worldPacket << spell;
_worldPacket << Bits<1>(SuppressMessaging);
_worldPacket << Bits<1>(TraitGrantedByAura);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -852,6 +856,7 @@ WorldPacket const* SpellVisualLoadScreen::Write()
_worldPacket << int32(SpellVisualKitID);
_worldPacket << Duration;
_worldPacket << int32(Delay);
_worldPacket << Bits<1>(Unknown_1210);
return &_worldPacket;
}
@@ -810,6 +810,7 @@ namespace WorldPackets
int32 SpellVisualKitID = 0;
WorldPackets::Duration<Milliseconds, int32> Duration;
int32 Delay = 0;
bool Unknown_1210 = false;
};
class CancelCast final : public ClientPacket
@@ -135,11 +135,14 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket << uint32(CommercePricePollTimeSeconds);
_worldPacket << uint32(KioskSessionDurationMinutes);
_worldPacket << QuickJoinConfig;
_worldPacket << int64(RedeemForBalanceAmount);
_worldPacket << uint32(ClubsPresenceDelay);
_worldPacket << uint32(ClubPresenceUnsubscribeDelay);
_worldPacket << Squelch;
_worldPacket << int32(ContentSetID);
_worldPacket << Size<uint32>(DisabledGameModes);
_worldPacket << Size<uint32>(GameRules);
@@ -225,21 +228,18 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket << Bits<1>(GlobalUserGeneratedContentMuteEnabled);
_worldPacket << Bits<1>(AccountUserGeneratedContentIsRisky);
_worldPacket << Bits<1>(FriendsDisabled);
_worldPacket.FlushBits();
_worldPacket << QuickJoinConfig;
if (EuropaTicketSystemStatus)
_worldPacket << *EuropaTicketSystemStatus;
if (SessionAlert)
_worldPacket << *SessionAlert;
_worldPacket << SizedString::Data(Unknown1027);
_worldPacket << Squelch;
if (EuropaTicketSystemStatus)
_worldPacket << *EuropaTicketSystemStatus;
return &_worldPacket;
}
@@ -287,9 +287,6 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket.FlushBits();
if (EuropaTicketSystemStatus)
_worldPacket << *EuropaTicketSystemStatus;
_worldPacket << uint32(CommercePricePollTimeSeconds);
_worldPacket << uint32(KioskSessionDurationMinutes);
_worldPacket << int64(RedeemForBalanceAmount);
@@ -314,6 +311,9 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket << int32(MostRecentTimeEventID);
_worldPacket << uint32(EventRealmQueues);
if (EuropaTicketSystemStatus)
_worldPacket << *EuropaTicketSystemStatus;
if (LaunchDurationETA)
_worldPacket << int32(*LaunchDurationETA);
@@ -185,6 +185,7 @@ namespace WorldPackets
bool AddonProfilingEnabled = false;
bool GlobalUserGeneratedContentMuteEnabled = false;
bool AccountUserGeneratedContentIsRisky = false;
bool FriendsDisabled = false;
SocialQueueConfig QuickJoinConfig;
SquelchInfo Squelch;
@@ -61,9 +61,6 @@ ByteBuffer& operator<<(ByteBuffer& data, ClassicTalentGroupInfo const& talentGro
if (!talentGroupInfo.GlyphIDs.empty())
data.append(talentGroupInfo.GlyphIDs.data(), talentGroupInfo.GlyphIDs.size());
data.WriteBit(talentGroupInfo.Unused1125);
data.FlushBits();
return data;
}
@@ -62,7 +62,6 @@ namespace WorldPackets
std::vector<uint16> GlyphIDs;
int8 Role = 0;
int32 PrimarySpecialization = 0;
bool Unused1125 = false;
};
struct ClassicTalentInfoUpdate
@@ -266,14 +266,28 @@ ByteBuffer& operator>>(ByteBuffer& data, SupportTicketHouseInfo& houseInfo)
return data;
}
ByteBuffer& operator>>(ByteBuffer& data, SupportTicketHousingBlueprint& housingBlueprint)
{
data.ResetBitPos();
data >> SizedCString::BitsSize<24>(housingBlueprint.Id);
data >> SizedCString::BitsSize<24>(housingBlueprint.ShareCode);
data >> SizedCString::Data(housingBlueprint.Id);
data >> SizedCString::Data(housingBlueprint.ShareCode);
return data;
}
void SupportTicketSubmitComplaint::Read()
{
_worldPacket >> Header;
_worldPacket >> ChatLog;
_worldPacket >> HorusChatLog;
_worldPacket >> TargetCharacterGUID;
_worldPacket >> ReportType;
_worldPacket >> MajorCategory;
_worldPacket >> MinorCategoryFlags;
_worldPacket >> ChatLog;
_worldPacket >> SizedString::BitsSize<10>(Note);
_worldPacket >> OptionalInit(MailInfo);
@@ -286,14 +300,7 @@ void SupportTicketSubmitComplaint::Read()
_worldPacket >> OptionalInit(ClubFinderInfo);
_worldPacket >> OptionalInit(ArenaTeamInfo);
_worldPacket >> OptionalInit(HouseInfo);
if (VoiceChatInfo)
{
_worldPacket.ResetBitPos();
_worldPacket >> Bits<1>(VoiceChatInfo->TargetIsCurrentlyInVoiceChatWithPlayer);
}
_worldPacket >> HorusChatLog;
_worldPacket >> OptionalInit(HousingBlueprint);
_worldPacket >> SizedString::Data(Note);
@@ -323,6 +330,15 @@ void SupportTicketSubmitComplaint::Read()
if (HouseInfo)
_worldPacket >> *HouseInfo;
if (HousingBlueprint)
_worldPacket >> *HousingBlueprint;
if (VoiceChatInfo)
{
_worldPacket.ResetBitPos();
_worldPacket >> Bits<1>(VoiceChatInfo->TargetIsCurrentlyInVoiceChatWithPlayer);
}
}
ByteBuffer& operator>>(ByteBuffer& data, Complaint::ComplaintOffender& complaintOffender)
@@ -220,6 +220,12 @@ namespace WorldPackets
uint8 PlotID = 0;
};
struct SupportTicketHousingBlueprint
{
std::string_view Id;
std::string_view ShareCode;
};
class SupportTicketSubmitComplaint final : public ClientPacket
{
public:
@@ -245,6 +251,7 @@ namespace WorldPackets
Optional<SupportTicketClubFinderInfo> ClubFinderInfo;
Optional<SupportTicketArenaTeamInfo> ArenaTeamInfo;
Optional<SupportTicketHouseInfo> HouseInfo;
Optional<SupportTicketHousingBlueprint> HousingBlueprint;
};
class Complaint final : public ClientPacket
@@ -106,9 +106,9 @@ ByteBuffer& operator<<(ByteBuffer& buffer, UnwrappedTradeItem const& unwrappedTr
ByteBuffer& operator<<(ByteBuffer& buffer, TradeItem const& tradeItem)
{
buffer << uint8(tradeItem.Slot);
buffer << tradeItem.Item;
buffer << uint32(tradeItem.StackCount);
buffer << tradeItem.GiftCreator;
buffer << tradeItem.Item;
buffer << OptionalInit(tradeItem.Unwrapped);
buffer.FlushBits();
if (tradeItem.Unwrapped)
@@ -151,11 +151,12 @@ ByteBuffer& operator>>(ByteBuffer& data, TraitConfig& traitConfig)
for (TraitEntry& traitEntry : traitConfig.Entries)
data >> traitEntry;
data >> SizedString::BitsSize<9>(traitConfig.Name);
for (TraitSubTreeCache& traitSubTreeCache : traitConfig.SubTrees)
data >> traitSubTreeCache;
data.ResetBitPos();
data >> SizedString::BitsSize<9>(traitConfig.Name);
data >> SizedString::Data<Strings::DontValidateUtf8>(traitConfig.Name);
return data;
@@ -188,11 +189,10 @@ ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig)
for (TraitEntry const& traitEntry : traitConfig.Entries)
data << traitEntry;
data << SizedString::BitsSize<9>(traitConfig.Name);
for (TraitSubTreeCache const& traitSubTreeCache : traitConfig.SubTrees)
data << traitSubTreeCache;
data << SizedString::BitsSize<9>(traitConfig.Name);
data.FlushBits();
data << SizedString::Data(static_cast<std::string const&>(traitConfig.Name));
@@ -70,8 +70,8 @@ ByteBuffer& operator<<(ByteBuffer& data, TransmogOutfitDataInfo const& transmogO
void TransmogOutfitNew::Read()
{
_worldPacket >> Npc;
_worldPacket >> As<uint8>(Source);
_worldPacket >> Info;
_worldPacket >> As<uint8>(Source);
}
WorldPacket const* TransmogOutfitNewEntryAdded::Write()
@@ -71,14 +71,14 @@ ByteBuffer& operator>>(ByteBuffer& data, WhoRequest& request)
data >> Bits<1>(request.ExactName);
data >> OptionalInit(request.ServerInfo);
for (size_t i = 0; i < request.Words.size(); ++i)
data >> request.Words[i];
data >> SizedString::Data(request.Name);
data >> SizedString::Data(request.VirtualRealmName);
data >> SizedString::Data(request.Guild);
data >> SizedString::Data(request.GuildVirtualRealmName);
for (size_t i = 0; i < request.Words.size(); ++i)
data >> request.Words[i];
if (request.ServerInfo)
data >> *request.ServerInfo;
+31 -5
View File
@@ -440,6 +440,11 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_DF_SET_ROLES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgSetRolesOpcode);
DEFINE_HANDLER(CMSG_DF_TELEPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgTeleportOpcode);
DEFINE_HANDLER(CMSG_DISCARDED_TIME_SYNC_ACKS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_DISCORD_GUILD_LINK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_DISCORD_GUILD_UNLINK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_DISCORD_REFRESH_AUTH, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_DISCORD_SET_DISPLAY_NAME_TYPE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_DISCORD_SET_GUILD_SETTING, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_DISMISS_CRITTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDismissCritter);
DEFINE_HANDLER(CMSG_DO_COUNTDOWN, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_DO_MASTER_LOOT_ROLL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
@@ -566,6 +571,12 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_HOUSE_EXTERIOR_LOCK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSE_EXTERIOR_SET_HOUSE_POSITION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSE_INTERIOR_LEAVE_HOUSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_BLUEPRINT_DELETE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_BLUEPRINT_EXPORT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_BLUEPRINT_IMPORT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_BLUEPRINT_RENAME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_BLUEPRINT_REQUEST_COLLECTION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_BLUEPRINT_REQUEST_CONTENTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_DECOR_DELETE_FROM_STORAGE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_DECOR_LOCK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_DECOR_MOVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -575,6 +586,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_HOUSING_DECOR_REQUEST_STORAGE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_DECOR_SET_DYE_SLOTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_DECOR_SET_EDIT_MODE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_DECOR_SET_PET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_FIXTURE_CREATE_FIXTURE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_FIXTURE_DELETE_FIXTURE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_FIXTURE_SET_CORE_FIXTURE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -586,6 +598,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_HOUSING_HOUSE_STATUS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_PHOTO_SHARING_CLEAR_AUTHORIZATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_PHOTO_SHARING_COMPLETE_AUTHORIZATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_RESET_HOUSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_RESET_KIOSK_MODE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_ROOM_ADD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_ROOM_APPLY_COMPONENT_MATERIALS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -604,6 +617,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_HOUSING_SVCS_GET_PLAYER_HOUSES_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_SVCS_GET_POTENTIAL_HOUSE_OWNERS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_SVCS_GUILD_CREATE_NEIGHBORHOOD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_SVCS_HOUSE_FINDER_IGNORE_NEIGHBORHOOD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_SVCS_NEIGHBORHOOD_RESERVE_PLOT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_SVCS_PLAYER_VIEW_HOUSES_BY_BNET_ACCOUNT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_HOUSING_SVCS_PLAYER_VIEW_HOUSES_BY_PLAYER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -636,6 +650,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_LEAVE_PET_BATTLE_QUEUE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_LFG_LIST_APPLY_TO_GROUP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_LFG_LIST_CANCEL_APPLICATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_LFG_LIST_CONFIRM_CENSORED_ACTIVE_ENTRY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_LFG_LIST_DECLINE_APPLICANT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_LFG_LIST_GET_STATUS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_LFG_LIST_INVITE_APPLICANT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -1001,6 +1016,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_SEND_CHARACTER_CLUB_INVITATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SEND_CONTACT_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleContactListOpcode);
DEFINE_HANDLER(CMSG_SEND_MAIL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSendMail);
DEFINE_HANDLER(CMSG_SEND_PING_COOLDOWN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSendPingCooldown);
DEFINE_HANDLER(CMSG_SEND_PING_UNIT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSendPingUnit);
DEFINE_HANDLER(CMSG_SEND_PING_WORLD_POINT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSendPingWorldPoint);
DEFINE_HANDLER(CMSG_SEND_TEXT_EMOTE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTextEmoteOpcode);
@@ -1399,6 +1415,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_DOWN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_IGNORED_ACCOUNT_MUTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_IS_DOWN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_LAIR_DIFFICULTY_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_NOT_IN_GUILD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_NOT_IN_PARTY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_PLAYER_AMBIGUOUS, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -1732,6 +1749,12 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOTFIX_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSE_EXTERIOR_LOCK_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSE_EXTERIOR_SET_HOUSE_POSITION_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_BLUEPRINT_CHECK_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_BLUEPRINT_DELETE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_BLUEPRINT_EXPORT_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_BLUEPRINT_GET_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_BLUEPRINT_IMPORT_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_BLUEPRINT_RENAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_DECOR_ADD_TO_HOUSE_CHEST_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_DECOR_DELETE_FROM_STORAGE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_DECOR_DRAW_SERVER_LIGHTING_DEBUG_SPHERES_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1742,7 +1765,6 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_DECOR_REQUEST_STORAGE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_DECOR_SET_EDIT_MODE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_DECOR_SYSTEM_SET_DYE_SLOTS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_EXPORT_HOUSE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_FIRST_TIME_DECOR_ACQUISITION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_FIXTURE_CREATE_BASIC_HOUSE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_FIXTURE_CREATE_FIXTURE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1758,6 +1780,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_PHOTO_SHARING_AUTHORIZATION_CLEARED_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_PHOTO_SHARING_AUTHORIZATION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_REDEEM_DEFERRED_DECOR_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_RESET_HOUSE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_RESET_KIOSK_MODE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_ROOM_ADD_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_ROOM_APPLY_COMPONENT_MATERIALS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1785,6 +1808,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_SVCS_GUILD_REMOVE_HOUSE_NOTIFICATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_SVCS_GUILD_RENAME_NEIGHBORHOOD_NOTIFICATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_SVCS_HOUSE_FINDER_FORCE_REFRESH, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_SVCS_IGNORE_NEIGHBORHOOD_INVITE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_SVCS_NEIGHBORHOOD_OWNERSHIP_TRANSFERRED_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_SVCS_NEIGHBORHOOD_RESERVE_PLOT_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOUSING_SVCS_NEIGHBORHOOD_UPDATE_NAME_NOTIFICATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1870,6 +1894,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_APPLICANT_LIST_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_APPLICATION_STATUS_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_APPLY_TO_GROUP_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_CENSORED_ACTIVE_ENTRY_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_JOIN_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_SEARCH_RESULTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_SEARCH_RESULTS_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -2281,6 +2306,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READ_ITEM_RESULT_OK, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REATTACH_RESURRECT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECEIVE_PING_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECEIVE_PING_UNIT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECEIVE_PING_WORLD_POINT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECENT_ALLY_DATA_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -2530,10 +2556,10 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOICE_LOGIN_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_ITEM_SWAP_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_STORAGE_CONTENTS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_STORAGE_FAILED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_STORAGE_TRANSFER_CHANGES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_TRANSFER_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_STORAGE_CONTENTS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_STORAGE_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_STORAGE_TRANSFER_CHANGES, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_TRANSFER_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WAIT_QUEUE_FINISH, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WAIT_QUEUE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WALK_IN_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
File diff suppressed because it is too large Load Diff
+2
View File
@@ -617,6 +617,7 @@ namespace WorldPackets
class SetRestrictPingsToAssistants;
class SendPingUnit;
class SendPingWorldPoint;
class SendPingCooldown;
}
namespace Pet
@@ -1424,6 +1425,7 @@ class TC_GAME_API WorldSession
void HandleSetRestrictPingsToAssistants(WorldPackets::Party::SetRestrictPingsToAssistants const& setRestrictPingsToAssistants);
void HandleSendPingUnit(WorldPackets::Party::SendPingUnit const& pingUnit);
void HandleSendPingWorldPoint(WorldPackets::Party::SendPingWorldPoint const& pingWorldPoint);
void HandleSendPingCooldown(WorldPackets::Party::SendPingCooldown const& pingCooldown);
void HandlePetitionBuy(WorldPackets::Petition::PetitionBuy& packet);
void HandlePetitionShowSignatures(WorldPackets::Petition::PetitionShowSignatures& packet);