Core/PacketIO: Fixed updatefield structures
Port From (https://github.com/TrinityCore/TrinityCore/commit/ee081084d6b2b43b33fedc9a4d3ce03f8d68cd7a)
This commit is contained in:
@@ -125,24 +125,24 @@ namespace Game.Entities
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.BoundsRadius2D), GetTemplate().MaxSearchRadius);
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.DecalPropertiesID), GetMiscTemplate().DecalPropertiesId);
|
||||
|
||||
ScaleCurve extraScaleCurve = m_areaTriggerData.ModifyValue(m_areaTriggerData.ExtraScaleCurve);
|
||||
ScaleCurve extraScaleCurve = m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.ExtraScaleCurve);
|
||||
|
||||
if (GetMiscTemplate().ExtraScale.Structured.StartTimeOffset != 0)
|
||||
SetUpdateFieldValue(ref extraScaleCurve.StartTimeOffset, GetMiscTemplate().ExtraScale.Structured.StartTimeOffset);
|
||||
SetUpdateFieldValue(extraScaleCurve.ModifyValue(extraScaleCurve.StartTimeOffset), GetMiscTemplate().ExtraScale.Structured.StartTimeOffset);
|
||||
if (GetMiscTemplate().ExtraScale.Structured.X != 0 || GetMiscTemplate().ExtraScale.Structured.Y != 0)
|
||||
{
|
||||
Vector2 point = new Vector2(GetMiscTemplate().ExtraScale.Structured.X, GetMiscTemplate().ExtraScale.Structured.Y);
|
||||
SetUpdateFieldValue(ref extraScaleCurve.Points[0], point);
|
||||
SetUpdateFieldValue(ref extraScaleCurve.ModifyValue(extraScaleCurve.Points, 0), point);
|
||||
}
|
||||
if (GetMiscTemplate().ExtraScale.Structured.Z != 0 || GetMiscTemplate().ExtraScale.Structured.W != 0)
|
||||
{
|
||||
Vector2 point = new Vector2(GetMiscTemplate().ExtraScale.Structured.Z, GetMiscTemplate().ExtraScale.Structured.W);
|
||||
SetUpdateFieldValue(ref extraScaleCurve.Points[1], point);
|
||||
SetUpdateFieldValue(ref extraScaleCurve.ModifyValue(extraScaleCurve.Points, 1), point);
|
||||
}
|
||||
if (GetMiscTemplate().ExtraScale.Raw.Data[5] != 0)
|
||||
SetUpdateFieldValue(ref extraScaleCurve.ParameterCurve, GetMiscTemplate().ExtraScale.Raw.Data[5]);
|
||||
SetUpdateFieldValue(extraScaleCurve.ModifyValue(extraScaleCurve.ParameterCurve), GetMiscTemplate().ExtraScale.Raw.Data[5]);
|
||||
if (GetMiscTemplate().ExtraScale.Structured.OverrideActive != 0)
|
||||
SetUpdateFieldValue(ref extraScaleCurve.OverrideActive, GetMiscTemplate().ExtraScale.Structured.OverrideActive != 0 ? true : false);
|
||||
SetUpdateFieldValue(extraScaleCurve.ModifyValue(extraScaleCurve.OverrideActive), GetMiscTemplate().ExtraScale.Structured.OverrideActive != 0 ? true : false);
|
||||
|
||||
|
||||
PhasingHandler.InheritPhaseShift(this, caster);
|
||||
|
||||
@@ -643,6 +643,7 @@ namespace Game.Entities
|
||||
{
|
||||
uint AzeriteEssenceID;
|
||||
uint Rank;
|
||||
|
||||
public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver)
|
||||
{
|
||||
data.WriteUInt32(AzeriteEssenceID);
|
||||
@@ -656,46 +657,78 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
public class SelectedAzeriteEssences
|
||||
public class SelectedAzeriteEssences : BaseUpdateData<Item>
|
||||
{
|
||||
uint Field_0;
|
||||
uint Enabled;
|
||||
uint[] AzeriteEssenceID = new uint[3];
|
||||
UpdateField<uint> SpecializationID = new UpdateField<uint>(0, 1);
|
||||
UpdateField<uint> Enabled = new UpdateField<uint>(0, 2);
|
||||
UpdateFieldArray<uint> AzeriteEssenceID = new UpdateFieldArray<uint>(3, 3, 4);
|
||||
|
||||
public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver)
|
||||
public SelectedAzeriteEssences() : base(7) { }
|
||||
|
||||
public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver)
|
||||
{
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
data.WriteUInt32(AzeriteEssenceID[i]);
|
||||
}
|
||||
data.WriteUInt32(Field_0);
|
||||
data.WriteUInt32(SpecializationID);
|
||||
data.WriteBits(Enabled, 1);
|
||||
data.FlushBits();
|
||||
}
|
||||
public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver)
|
||||
public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver)
|
||||
{
|
||||
UpdateMask changesMask = _changesMask;
|
||||
data.WriteBits(changesMask.GetBlocksMask(0), 1);
|
||||
if (changesMask.GetBlock(0) != 0)
|
||||
data.WriteBits(changesMask.GetBlock(0), 32);
|
||||
|
||||
data.FlushBits();
|
||||
data.WriteUInt32(Field_0);
|
||||
data.WriteBits(Enabled, 1);
|
||||
for (int i = 0; i < 3; ++i)
|
||||
if (changesMask[0])
|
||||
{
|
||||
data.WriteUInt32(AzeriteEssenceID[i]);
|
||||
if (changesMask[1])
|
||||
{
|
||||
data.WriteUInt32(SpecializationID);
|
||||
}
|
||||
if (changesMask[2])
|
||||
{
|
||||
data.WriteBits(Enabled, 1);
|
||||
}
|
||||
}
|
||||
if (changesMask[3])
|
||||
{
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
if (changesMask[4 + i])
|
||||
{
|
||||
data.WriteUInt32(AzeriteEssenceID[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data.FlushBits();
|
||||
}
|
||||
public override void ClearChangesMask()
|
||||
{
|
||||
ClearChangesMask(SpecializationID);
|
||||
ClearChangesMask(Enabled);
|
||||
ClearChangesMask(AzeriteEssenceID);
|
||||
_changesMask.ResetAll();
|
||||
}
|
||||
}
|
||||
|
||||
public class AzeriteItemData : BaseUpdateData<Item>
|
||||
{
|
||||
public DynamicUpdateField<UnlockedAzeriteEssence> UnlockedEssences = new DynamicUpdateField<UnlockedAzeriteEssence>(0, 1);
|
||||
public DynamicUpdateField<uint> UnlockedEssenceMilestones = new DynamicUpdateField<uint>(0, 2);
|
||||
public DynamicUpdateField<SelectedAzeriteEssences> SelectedEssences = new DynamicUpdateField<SelectedAzeriteEssences>(0, 3);
|
||||
public DynamicUpdateField<SelectedAzeriteEssences> SelectedEssences = new DynamicUpdateField<SelectedAzeriteEssences>(0, 2);
|
||||
public DynamicUpdateField<uint> UnlockedEssenceMilestones = new DynamicUpdateField<uint>(0, 3);
|
||||
public UpdateField<ulong> Xp = new UpdateField<ulong>(0, 4);
|
||||
public UpdateField<uint> Level = new UpdateField<uint>(0, 5);
|
||||
public UpdateField<uint> AuraLevel = new UpdateField<uint>(0, 6);
|
||||
public UpdateField<uint> KnowledgeLevel = new UpdateField<uint>(0, 7);
|
||||
public UpdateField<uint> DEBUGknowledgeWeek = new UpdateField<uint>(0, 8);
|
||||
|
||||
public AzeriteItemData() : base(9) { }
|
||||
|
||||
public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver)
|
||||
{
|
||||
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner))
|
||||
@@ -733,7 +766,8 @@ namespace Game.Entities
|
||||
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner))
|
||||
allowedMaskForTarget |= new UpdateMask(9, new[] { 0x000001F0u });
|
||||
}
|
||||
public void WriteUpdate(WorldPacket data, UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver) {
|
||||
public void WriteUpdate(WorldPacket data, UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver)
|
||||
{
|
||||
data.WriteBits(_changesMask.GetBlock(0), 9);
|
||||
|
||||
if (_changesMask[0])
|
||||
@@ -744,11 +778,11 @@ namespace Game.Entities
|
||||
}
|
||||
if (_changesMask[2])
|
||||
{
|
||||
UnlockedEssenceMilestones.WriteUpdateMask(data);
|
||||
SelectedEssences.WriteUpdateMask(data);
|
||||
}
|
||||
if (_changesMask[3])
|
||||
{
|
||||
SelectedEssences.WriteUpdateMask(data);
|
||||
UnlockedEssenceMilestones.WriteUpdateMask(data);
|
||||
}
|
||||
}
|
||||
data.FlushBits();
|
||||
@@ -765,16 +799,6 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
if (_changesMask[2])
|
||||
{
|
||||
for (int i = 0; i < UnlockedEssenceMilestones.Size(); ++i)
|
||||
{
|
||||
if (UnlockedEssenceMilestones.HasChanged(i))
|
||||
{
|
||||
data.WriteUInt32(UnlockedEssenceMilestones[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (_changesMask[3])
|
||||
{
|
||||
for (int i = 0; i < SelectedEssences.Size(); ++i)
|
||||
{
|
||||
@@ -784,6 +808,16 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
}
|
||||
if (_changesMask[3])
|
||||
{
|
||||
for (int i = 0; i < UnlockedEssenceMilestones.Size(); ++i)
|
||||
{
|
||||
if (UnlockedEssenceMilestones.HasChanged(i))
|
||||
{
|
||||
data.WriteUInt32(UnlockedEssenceMilestones[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (_changesMask[4])
|
||||
{
|
||||
data.WriteUInt64(Xp);
|
||||
@@ -853,7 +887,8 @@ namespace Game.Entities
|
||||
data.WriteUInt16(ItemAppearanceModID);
|
||||
data.WriteUInt16(ItemVisual);
|
||||
}
|
||||
public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) {
|
||||
public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver)
|
||||
{
|
||||
|
||||
data.WriteBits(_changesMask.GetBlock(0), 4);
|
||||
|
||||
@@ -2218,7 +2253,8 @@ namespace Game.Entities
|
||||
|
||||
public PlayerData() : base(161) { }
|
||||
|
||||
public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) {
|
||||
public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver)
|
||||
{
|
||||
data.WritePackedGuid(DuelArbiter);
|
||||
data.WritePackedGuid(WowAccount);
|
||||
data.WritePackedGuid(LootTargetGUID);
|
||||
@@ -2825,9 +2861,9 @@ namespace Game.Entities
|
||||
public DynamicUpdateField<uint> Transmog = new DynamicUpdateField<uint>(0, 14);
|
||||
public DynamicUpdateField<uint> ConditionalTransmog = new DynamicUpdateField<uint>(0, 15);
|
||||
public DynamicUpdateField<uint> SelfResSpells = new DynamicUpdateField<uint>(0, 16);
|
||||
public DynamicUpdateField<SpellPctModByLabel> SpellPctModByLabel = new DynamicUpdateField<SpellPctModByLabel>(0, 17);
|
||||
public DynamicUpdateField<SpellFlatModByLabel> SpellFlatModByLabel = new DynamicUpdateField<SpellFlatModByLabel>(0, 18);
|
||||
public DynamicUpdateField<CharacterRestriction> CharacterRestrictions = new DynamicUpdateField<CharacterRestriction>(0, 19);
|
||||
public DynamicUpdateField<CharacterRestriction> CharacterRestrictions = new DynamicUpdateField<CharacterRestriction>(0, 17);
|
||||
public DynamicUpdateField<SpellPctModByLabel> SpellPctModByLabel = new DynamicUpdateField<SpellPctModByLabel>(0, 18);
|
||||
public DynamicUpdateField<SpellFlatModByLabel> SpellFlatModByLabel = new DynamicUpdateField<SpellFlatModByLabel>(0, 19);
|
||||
public UpdateField<ObjectGuid> FarsightObject = new UpdateField<ObjectGuid>(0, 22);
|
||||
public UpdateField<ObjectGuid> SummonedBattlePetGUID = new UpdateField<ObjectGuid>(0, 23);
|
||||
public UpdateField<ulong> Coinage = new UpdateField<ulong>(0, 24);
|
||||
@@ -3229,15 +3265,15 @@ namespace Game.Entities
|
||||
}
|
||||
if (_changesMask[17])
|
||||
{
|
||||
SpellPctModByLabel.WriteUpdateMask(data);
|
||||
CharacterRestrictions.WriteUpdateMask(data);
|
||||
}
|
||||
if (_changesMask[18])
|
||||
{
|
||||
SpellFlatModByLabel.WriteUpdateMask(data);
|
||||
SpellPctModByLabel.WriteUpdateMask(data);
|
||||
}
|
||||
if (_changesMask[19])
|
||||
{
|
||||
CharacterRestrictions.WriteUpdateMask(data);
|
||||
SpellFlatModByLabel.WriteUpdateMask(data);
|
||||
}
|
||||
}
|
||||
if (_changesMask[20])
|
||||
@@ -3390,6 +3426,16 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
if (_changesMask[17])
|
||||
{
|
||||
for (int i = 0; i < CharacterRestrictions.Size(); ++i)
|
||||
{
|
||||
if (CharacterRestrictions.HasChanged(i))
|
||||
{
|
||||
CharacterRestrictions[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (_changesMask[18])
|
||||
{
|
||||
for (int i = 0; i < SpellPctModByLabel.Size(); ++i)
|
||||
{
|
||||
@@ -3399,7 +3445,7 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
}
|
||||
if (_changesMask[18])
|
||||
if (_changesMask[19])
|
||||
{
|
||||
for (int i = 0; i < SpellFlatModByLabel.Size(); ++i)
|
||||
{
|
||||
@@ -3409,16 +3455,6 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
}
|
||||
if (_changesMask[19])
|
||||
{
|
||||
for (int i = 0; i < CharacterRestrictions.Size(); ++i)
|
||||
{
|
||||
if (CharacterRestrictions.HasChanged(i))
|
||||
{
|
||||
CharacterRestrictions[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (_changesMask[22])
|
||||
{
|
||||
data.WritePackedGuid(FarsightObject);
|
||||
@@ -4251,7 +4287,8 @@ namespace Game.Entities
|
||||
data.WriteUInt32(CastTime);
|
||||
data.WriteUInt8(Type);
|
||||
}
|
||||
public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, DynamicObject owner, Player receiver) {
|
||||
public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, DynamicObject owner, Player receiver)
|
||||
{
|
||||
data.WriteBits(_changesMask.GetBlock(0), 7);
|
||||
|
||||
data.FlushBits();
|
||||
@@ -4344,7 +4381,8 @@ namespace Game.Entities
|
||||
data.WriteUInt8(CustomDisplayOption[i]);
|
||||
}
|
||||
}
|
||||
public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Corpse owner, Player receiver) {
|
||||
public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Corpse owner, Player receiver)
|
||||
{
|
||||
data.WriteBits(_changesMask.GetBlocksMask(0), 2);
|
||||
for (uint i = 0; i < 2; ++i)
|
||||
if (_changesMask.GetBlock(i) != 0)
|
||||
@@ -4459,14 +4497,16 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
public class ScaleCurve
|
||||
public class ScaleCurve : BaseUpdateData<AreaTrigger>
|
||||
{
|
||||
public bool OverrideActive;
|
||||
public uint StartTimeOffset;
|
||||
public uint ParameterCurve;
|
||||
public Vector2[] Points = new Vector2[2];
|
||||
public UpdateField<bool> OverrideActive = new UpdateField<bool>(0, 1);
|
||||
public UpdateField<uint> StartTimeOffset = new UpdateField<uint>(0, 2);
|
||||
public UpdateField<uint> ParameterCurve = new UpdateField<uint>(0, 3);
|
||||
public UpdateFieldArray<Vector2> Points = new UpdateFieldArray<Vector2>(2, 4, 5);
|
||||
|
||||
public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver)
|
||||
public ScaleCurve() : base(7) { }
|
||||
|
||||
public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver)
|
||||
{
|
||||
data.WriteUInt32(StartTimeOffset);
|
||||
for (int i = 0; i < 2; ++i)
|
||||
@@ -4477,18 +4517,50 @@ namespace Game.Entities
|
||||
data.WriteBit(OverrideActive);
|
||||
data.FlushBits();
|
||||
}
|
||||
public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver)
|
||||
public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver)
|
||||
{
|
||||
data.WriteBit(OverrideActive);
|
||||
data.FlushBits();
|
||||
data.WriteUInt32(StartTimeOffset);
|
||||
data.WriteUInt32(ParameterCurve);
|
||||
for (int i = 0; i < 2; ++i)
|
||||
UpdateMask changesMask = _changesMask;
|
||||
data.WriteBits(changesMask.GetBlocksMask(0), 1);
|
||||
if (changesMask.GetBlock(0) != 0)
|
||||
data.WriteBits(changesMask.GetBlock(0), 32);
|
||||
|
||||
if (changesMask[0])
|
||||
{
|
||||
data.WriteVector2(Points[i]);
|
||||
if (changesMask[1])
|
||||
{
|
||||
data.WriteBit(OverrideActive);
|
||||
data.FlushBits();
|
||||
}
|
||||
if (changesMask[2])
|
||||
{
|
||||
data.WriteUInt32(StartTimeOffset);
|
||||
}
|
||||
if (changesMask[3])
|
||||
{
|
||||
data.WriteUInt32(ParameterCurve);
|
||||
}
|
||||
}
|
||||
if (changesMask[4])
|
||||
{
|
||||
for (int i = 0; i < 2; ++i)
|
||||
{
|
||||
if (changesMask[5 + i])
|
||||
{
|
||||
data.WriteVector2(Points[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
data.FlushBits();
|
||||
}
|
||||
|
||||
public override void ClearChangesMask()
|
||||
{
|
||||
ClearChangesMask(OverrideActive);
|
||||
ClearChangesMask(StartTimeOffset);
|
||||
ClearChangesMask(ParameterCurve);
|
||||
ClearChangesMask(Points);
|
||||
_changesMask.ResetAll();
|
||||
}
|
||||
}
|
||||
|
||||
public class AreaTriggerFieldData : BaseUpdateData<AreaTrigger>
|
||||
@@ -4525,7 +4597,8 @@ namespace Game.Entities
|
||||
data.WritePackedGuid(CreatingEffectGUID);
|
||||
((ScaleCurve)ExtraScaleCurve).WriteCreate(data, fieldVisibilityFlags, owner, receiver);
|
||||
}
|
||||
public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver) {
|
||||
public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver)
|
||||
{
|
||||
data.WriteBits(_changesMask.GetBlock(0), 14);
|
||||
|
||||
data.FlushBits();
|
||||
@@ -4621,7 +4694,8 @@ namespace Game.Entities
|
||||
data.WritePackedGuid(CreatedBy);
|
||||
data.WriteUInt32(SceneType);
|
||||
}
|
||||
public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) {
|
||||
public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver)
|
||||
{
|
||||
data.WriteBits(_changesMask.GetBlock(0), 5);
|
||||
|
||||
data.FlushBits();
|
||||
|
||||
Reference in New Issue
Block a user