Core/PacketIO: Updated to 12.1.0
This commit is contained in:
@@ -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`;
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
+2483
-2454
File diff suppressed because it is too large
Load Diff
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user