Skip to content

Commit 9806ff0

Browse files
committed
Add roll/pitch/yaw to areatrigger_create_properties db table and update AreaTriggerCreatePropertiesFlags
1 parent f88a296 commit 9806ff0

37 files changed

Lines changed: 604 additions & 589 deletions

File tree

‎WowPacketParser/Enums/AreaTriggerCreatePropertiesFlag.cs‎

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace WowPacketParser.Enums
44
{
55
[Flags]
6-
public enum AreaTriggerCreatePropertiesFlags : uint
6+
public enum AreaTriggerCreatePropertiesLegacyFlags : uint
77
{
88
HasAbsoluteOrientation = 0x00001,
99
HasDynamicShape = 0x00002,
@@ -18,4 +18,16 @@ public enum AreaTriggerCreatePropertiesFlags : uint
1818
HasOrbit = 0x00400,
1919
HasMovementScript = 0x00800
2020
}
21+
22+
[Flags]
23+
public enum AreaTriggerCreatePropertiesFlags : uint
24+
{
25+
HeightIgnoresScale = 0x0001,
26+
VisualAnimIsDecay = 0x0002,
27+
AbsoluteOrientation = 0x0004,
28+
FaceMovementDir = 0x0008,
29+
FollowsTerrain = 0x0010,
30+
AlwaysExterior = 0x0020,
31+
UsesUnitRawFacing = 0x0040
32+
}
2133
}

‎WowPacketParser/SQL/Builders/AreaTriggers.cs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ public static string AreaTriggerCreatePropertiesData()
6666
row.Data.AreaTriggerCreatePropertiesId = createProperties.Value.CustomId;
6767
row.Data.AreaTriggerId = createProperties.Value.AreaTriggerId;
6868
row.Data.IsAreatriggerCustom = createProperties.Value.IsAreatriggerCustom;
69+
row.Data.FlagsLegacy = createProperties.Value.FlagsLegacy;
6970
row.Data.Flags = createProperties.Value.Flags;
7071
row.Data.AnimId = createProperties.Value.AnimId;
7172
row.Data.AnimKitId = createProperties.Value.AnimKitId;

‎WowPacketParser/Store/Objects/AreaTriggerCreateProperties.cs‎

Lines changed: 147 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ public sealed record AreaTriggerCreateProperties : WoWObject, IDataModel
2424
[DBFieldName("IsAreatriggerCustom", TargetedDatabaseFlag.SinceDragonflight | TargetedDatabaseFlag.CataClassic)]
2525
public byte? IsAreatriggerCustom = 0;
2626

27-
[DBFieldName("Flags", TargetedDatabaseFlag.SinceDragonflight | TargetedDatabaseFlag.CataClassic)]
27+
[DBFieldName("Flags", TargetedDatabaseFlag.Dragonflight | TargetedDatabaseFlag.TheWarWithin | TargetedDatabaseFlag.CataClassic)]
28+
public uint? FlagsLegacy;
29+
30+
[DBFieldName("Flags", TargetedDatabaseFlag.SinceMidnight)]
2831
public uint? Flags;
2932

3033
[DBFieldName("MoveCurveId")]
@@ -64,7 +67,25 @@ public sealed record AreaTriggerCreateProperties : WoWObject, IDataModel
6467
public byte? Shape;
6568

6669
[DBFieldName("ShapeData", TargetedDatabaseFlag.SinceShadowlands | TargetedDatabaseFlag.CataClassic, 8, true)]
67-
public float?[] ShapeData = { 0, 0, 0, 0, 0, 0, 0, 0 };
70+
public float?[] ShapeData = [0, 0, 0, 0, 0, 0, 0, 0];
71+
72+
[DBFieldName("Roll", TargetedDatabaseFlag.SinceMidnight)]
73+
public float? Roll = 0;
74+
75+
[DBFieldName("Pitch", TargetedDatabaseFlag.SinceMidnight)]
76+
public float? Pitch = 0;
77+
78+
[DBFieldName("Yaw", TargetedDatabaseFlag.SinceMidnight)]
79+
public float? Yaw = 0;
80+
81+
[DBFieldName("TargetRoll", TargetedDatabaseFlag.SinceMidnight, nullable: true)]
82+
public float? TargetRoll;
83+
84+
[DBFieldName("TargetPitch", TargetedDatabaseFlag.SinceMidnight, nullable: true)]
85+
public float? TargetPitch;
86+
87+
[DBFieldName("TargetYaw", TargetedDatabaseFlag.SinceMidnight, nullable: true)]
88+
public float? TargetYaw;
6889

6990
[DBFieldName("VerifiedBuild")]
7091
public int? VerifiedBuild = ClientVersion.BuildInt;
@@ -74,6 +95,77 @@ public sealed record AreaTriggerCreateProperties : WoWObject, IDataModel
7495

7596
public string CustomId;
7697

98+
public Vector3? RollPitchYaw
99+
{
100+
get => Roll != null && Pitch != null && Yaw != null ? new Vector3(Roll.Value, Pitch.Value, Yaw.Value) : (Vector3?)null;
101+
set => (Roll, Pitch, Yaw) = (value?.X, value?.Y, value?.Z);
102+
}
103+
104+
public Vector3? TargetRollPitchYaw
105+
{
106+
get => TargetRoll != null && TargetPitch != null && TargetYaw != null ? new Vector3(TargetRoll.Value, TargetPitch.Value, TargetYaw.Value) : (Vector3?)null;
107+
set => (TargetRoll, TargetPitch, TargetYaw) = (value?.X, value?.Y, value?.Z);
108+
}
109+
110+
public bool AbsoluteOrientation
111+
{
112+
get => Flags?.HasAnyFlag(AreaTriggerCreatePropertiesFlags.AbsoluteOrientation) ?? false;
113+
set => ModifyFlags(value, AreaTriggerCreatePropertiesLegacyFlags.HasAbsoluteOrientation,
114+
AreaTriggerCreatePropertiesFlags.AbsoluteOrientation);
115+
}
116+
117+
public bool DynamicShape
118+
{
119+
get => FlagsLegacy?.HasAnyFlag(AreaTriggerCreatePropertiesLegacyFlags.HasDynamicShape) ?? false;
120+
set => ModifyFlags(value, AreaTriggerCreatePropertiesLegacyFlags.HasDynamicShape, null);
121+
}
122+
123+
public bool Attached
124+
{
125+
get => FlagsLegacy?.HasAnyFlag(AreaTriggerCreatePropertiesLegacyFlags.HasAttached) ?? false;
126+
set => ModifyFlags(value, AreaTriggerCreatePropertiesLegacyFlags.HasAttached, null);
127+
}
128+
129+
public bool FaceMovementDir
130+
{
131+
get => Flags?.HasAnyFlag(AreaTriggerCreatePropertiesFlags.FaceMovementDir) ?? false;
132+
set => ModifyFlags(value, AreaTriggerCreatePropertiesLegacyFlags.FaceMovementDirection,
133+
AreaTriggerCreatePropertiesFlags.FaceMovementDir);
134+
}
135+
136+
public bool FollowsTerrain
137+
{
138+
get => Flags?.HasAnyFlag(AreaTriggerCreatePropertiesFlags.FollowsTerrain) ?? false;
139+
set => ModifyFlags(value, AreaTriggerCreatePropertiesLegacyFlags.FollowsTerrain,
140+
AreaTriggerCreatePropertiesFlags.FollowsTerrain);
141+
}
142+
143+
public bool AlwaysExterior
144+
{
145+
get => Flags?.HasAnyFlag(AreaTriggerCreatePropertiesFlags.AlwaysExterior) ?? false;
146+
set => ModifyFlags(value, AreaTriggerCreatePropertiesLegacyFlags.AlwaysExterior,
147+
AreaTriggerCreatePropertiesFlags.AlwaysExterior);
148+
}
149+
150+
public bool UsesUnitRawFacing
151+
{
152+
get => Flags?.HasAnyFlag(AreaTriggerCreatePropertiesFlags.UsesUnitRawFacing) ?? false;
153+
set => ModifyFlags(value, null, AreaTriggerCreatePropertiesFlags.UsesUnitRawFacing);
154+
}
155+
156+
public bool VisualAnimIsDecay
157+
{
158+
get => Flags?.HasAnyFlag(AreaTriggerCreatePropertiesFlags.VisualAnimIsDecay) ?? false;
159+
set => ModifyFlags(value, AreaTriggerCreatePropertiesLegacyFlags.VisualAnimIsDecay,
160+
AreaTriggerCreatePropertiesFlags.VisualAnimIsDecay);
161+
}
162+
163+
public bool HeightIgnoresScale
164+
{
165+
get => Flags?.HasAnyFlag(AreaTriggerCreatePropertiesFlags.HeightIgnoresScale) ?? false;
166+
set => ModifyFlags(value, null, AreaTriggerCreatePropertiesFlags.HeightIgnoresScale);
167+
}
168+
77169
public IAreaTriggerData AreaTriggerData;
78170

79171
public AreaTriggerCreateProperties() : base()
@@ -103,8 +195,7 @@ public override void LoadValuesFromUpdateFields()
103195
if (AreaTriggerData.VisualAnim.AnimKitID != 0)
104196
AnimKitId = (int?)AreaTriggerData.VisualAnim.AnimKitID;
105197

106-
if (AreaTriggerData.VisualAnim.IsDecay == true)
107-
Flags |= (uint)AreaTriggerCreatePropertiesFlags.VisualAnimIsDecay;
198+
VisualAnimIsDecay = AreaTriggerData.VisualAnim.IsDecay == true;
108199
}
109200
}
110201

@@ -156,10 +247,38 @@ public override void LoadValuesFromUpdateFields()
156247
else if (AreaTriggerData.BoundedPlane != null)
157248
{
158249
Shape = (byte)AreaTriggerType.BoundedPlane;
159-
ShapeData = [AreaTriggerData.BoundedPlane.Extents?.X, AreaTriggerData.BoundedPlane.Extents?.Y,
160-
AreaTriggerData.BoundedPlane.ExtentsTarget?.X, AreaTriggerData.BoundedPlane.ExtentsTarget?.Y,
250+
ShapeData = [AreaTriggerData.BoundedPlane.ExtentsY, AreaTriggerData.BoundedPlane.ExtentsZ,
251+
AreaTriggerData.BoundedPlane.ExtentsTargetY, AreaTriggerData.BoundedPlane.ExtentsTargetZ,
161252
0, 0, 0, 0];
162253
}
254+
255+
if (AreaTriggerData.RollPitchYaw != null)
256+
{
257+
Roll = AreaTriggerData.RollPitchYaw.Value.X;
258+
Pitch = AreaTriggerData.RollPitchYaw.Value.Y;
259+
Yaw = AreaTriggerData.RollPitchYaw.Value.Z;
260+
if (AreaTriggerData.TargetRollPitchYaw != null)
261+
{
262+
TargetRoll = AreaTriggerData.TargetRollPitchYaw.Value.X;
263+
TargetPitch = AreaTriggerData.TargetRollPitchYaw.Value.Y;
264+
TargetYaw = AreaTriggerData.TargetRollPitchYaw.Value.Z;
265+
}
266+
}
267+
268+
if (AreaTriggerData.HeightIgnoresScale != null)
269+
HeightIgnoresScale = AreaTriggerData.HeightIgnoresScale.Value;
270+
271+
if (AreaTriggerData.Flags != null)
272+
{
273+
HeightIgnoresScale = (AreaTriggerData.Flags & 0x0001) != 0;
274+
AbsoluteOrientation = (AreaTriggerData.Flags & 0x0008) != 0;
275+
DynamicShape = (AreaTriggerData.Flags & 0x0010) != 0;
276+
Attached = (AreaTriggerData.Flags & 0x0020) != 0;
277+
FaceMovementDir = (AreaTriggerData.Flags & 0x0040) != 0;
278+
FollowsTerrain = (AreaTriggerData.Flags & 0x0080) != 0;
279+
UsesUnitRawFacing = (AreaTriggerData.Flags & 0x0100) != 0;
280+
AlwaysExterior = (AreaTriggerData.Flags & 0x0200) != 0;
281+
}
163282
}
164283

165284
public static uint? GetAreaTriggerCreatePropertiesIdFromSpellId(uint spellId)
@@ -190,6 +309,24 @@ public override void LoadValuesFromUpdateFields()
190309

191310
return areaTriggerCreatePropertiesId;
192311
}
312+
313+
private void ModifyFlags(bool on, AreaTriggerCreatePropertiesLegacyFlags? flagsLegacy, AreaTriggerCreatePropertiesFlags? flags)
314+
{
315+
if (on)
316+
{
317+
if (flagsLegacy != null)
318+
FlagsLegacy = (FlagsLegacy ?? 0) | (uint)flagsLegacy;
319+
if (flags != null)
320+
Flags = (Flags ?? 0) | (uint)flags;
321+
}
322+
else
323+
{
324+
if (flagsLegacy != null)
325+
FlagsLegacy &= ~(uint)flagsLegacy;
326+
if (flags != null)
327+
Flags &= ~(uint)flags;
328+
}
329+
}
193330
}
194331

195332
[DBTableName("spell_areatrigger", TargetedDatabaseFlag.TillBattleForAzeroth)]
@@ -209,7 +346,10 @@ public sealed record AreaTriggerCreatePropertiesCustom : IDataModel
209346
[DBFieldName("IsAreatriggerCustom", TargetedDatabaseFlag.SinceDragonflight)]
210347
public byte? IsAreatriggerCustom;
211348

212-
[DBFieldName("Flags", TargetedDatabaseFlag.SinceDragonflight)]
349+
[DBFieldName("Flags", TargetedDatabaseFlag.Dragonflight | TargetedDatabaseFlag.TheWarWithin | TargetedDatabaseFlag.CataClassic)]
350+
public uint? FlagsLegacy;
351+
352+
[DBFieldName("Flags", TargetedDatabaseFlag.SinceMidnight)]
213353
public uint? Flags;
214354

215355
[DBFieldName("MoveCurveId")]
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
using WowPacketParser.Misc;
2-
3-
namespace WowPacketParser.Store.Objects.UpdateFields
1+
namespace WowPacketParser.Store.Objects.UpdateFields
42
{
53
public interface IAreaTriggerBoundedPlane
64
{
7-
Vector2? Extents { get; }
8-
Vector2? ExtentsTarget { get; }
5+
float? ExtentsY { get; }
6+
float? ExtentsZ { get; }
7+
float? ExtentsTargetY { get; }
8+
float? ExtentsTargetZ { get; }
99
}
1010
}

‎WowPacketParser/Store/Objects/UpdateFields/IAreaTriggerData.cs‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11

2+
using WowPacketParser.Misc;
3+
24
namespace WowPacketParser.Store.Objects.UpdateFields
35
{
46
public interface IAreaTriggerData
@@ -27,5 +29,10 @@ public interface IAreaTriggerData
2729
IAreaTriggerBoundedPlane BoundedPlane => null;
2830

2931
IVisualAnim VisualAnim => null;
32+
33+
Vector3? RollPitchYaw => null;
34+
Vector3? TargetRollPitchYaw => null;
35+
36+
bool? HeightIgnoresScale => null;
3037
}
3138
}

‎WowPacketParserModule.V11_0_0_55666/Parsers/UpdateFieldsHandler1120.cs‎

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6729,8 +6729,10 @@ public static IAreaTriggerBoundedPlane ReadCreateAreaTriggerBoundedPlane(Packet
67296729
{
67306730
var data = new AreaTriggerBoundedPlane();
67316731
packet.ResetBitReader();
6732-
data.Extents = packet.ReadVector2("Extents", indexes);
6733-
data.ExtentsTarget = packet.ReadVector2("ExtentsTarget", indexes);
6732+
data.ExtentsY = packet.ReadSingle("ExtentsY", indexes);
6733+
data.ExtentsZ = packet.ReadSingle("ExtentsZ", indexes);
6734+
data.ExtentsTargetY = packet.ReadSingle("ExtentsTargetY", indexes);
6735+
data.ExtentsTargetZ = packet.ReadSingle("ExtentsTargetZ", indexes);
67346736
return data;
67356737
}
67366738

@@ -6739,19 +6741,27 @@ public static IAreaTriggerBoundedPlane ReadUpdateAreaTriggerBoundedPlane(Packet
67396741
var data = new AreaTriggerBoundedPlane();
67406742
packet.ResetBitReader();
67416743
var rawChangesMask = new int[1];
6742-
rawChangesMask[0] = (int)packet.ReadBits(3);
6744+
rawChangesMask[0] = (int)packet.ReadBits(5);
67436745
var changesMask = new BitArray(rawChangesMask);
67446746

67456747
packet.ResetBitReader();
67466748
if (changesMask[0])
67476749
{
67486750
if (changesMask[1])
67496751
{
6750-
data.Extents = packet.ReadVector2("Extents", indexes);
6752+
data.ExtentsY = packet.ReadSingle("ExtentsY", indexes);
67516753
}
67526754
if (changesMask[2])
67536755
{
6754-
data.ExtentsTarget = packet.ReadVector2("ExtentsTarget", indexes);
6756+
data.ExtentsZ = packet.ReadSingle("ExtentsZ", indexes);
6757+
}
6758+
if (changesMask[3])
6759+
{
6760+
data.ExtentsTargetY = packet.ReadSingle("ExtentsTargetY", indexes);
6761+
}
6762+
if (changesMask[4])
6763+
{
6764+
data.ExtentsTargetZ = packet.ReadSingle("ExtentsTargetZ", indexes);
67556765
}
67566766
}
67576767
return data;

‎WowPacketParserModule.V11_0_0_55666/Parsers/UpdateFieldsHandler1125.cs‎

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6762,8 +6762,10 @@ public static IAreaTriggerBoundedPlane ReadCreateAreaTriggerBoundedPlane(Packet
67626762
{
67636763
var data = new AreaTriggerBoundedPlane();
67646764
packet.ResetBitReader();
6765-
data.Extents = packet.ReadVector2("Extents", indexes);
6766-
data.ExtentsTarget = packet.ReadVector2("ExtentsTarget", indexes);
6765+
data.ExtentsY = packet.ReadSingle("ExtentsY", indexes);
6766+
data.ExtentsZ = packet.ReadSingle("ExtentsZ", indexes);
6767+
data.ExtentsTargetY = packet.ReadSingle("ExtentsTargetY", indexes);
6768+
data.ExtentsTargetZ = packet.ReadSingle("ExtentsTargetZ", indexes);
67676769
return data;
67686770
}
67696771

@@ -6772,19 +6774,27 @@ public static IAreaTriggerBoundedPlane ReadUpdateAreaTriggerBoundedPlane(Packet
67726774
var data = new AreaTriggerBoundedPlane();
67736775
packet.ResetBitReader();
67746776
var rawChangesMask = new int[1];
6775-
rawChangesMask[0] = (int)packet.ReadBits(3);
6777+
rawChangesMask[0] = (int)packet.ReadBits(5);
67766778
var changesMask = new BitArray(rawChangesMask);
67776779

67786780
packet.ResetBitReader();
67796781
if (changesMask[0])
67806782
{
67816783
if (changesMask[1])
67826784
{
6783-
data.Extents = packet.ReadVector2("Extents", indexes);
6785+
data.ExtentsY = packet.ReadSingle("ExtentsY", indexes);
67846786
}
67856787
if (changesMask[2])
67866788
{
6787-
data.ExtentsTarget = packet.ReadVector2("ExtentsTarget", indexes);
6789+
data.ExtentsZ = packet.ReadSingle("ExtentsZ", indexes);
6790+
}
6791+
if (changesMask[3])
6792+
{
6793+
data.ExtentsTargetY = packet.ReadSingle("ExtentsTargetY", indexes);
6794+
}
6795+
if (changesMask[4])
6796+
{
6797+
data.ExtentsTargetZ = packet.ReadSingle("ExtentsTargetZ", indexes);
67886798
}
67896799
}
67906800
return data;

0 commit comments

Comments
 (0)