@@ -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" ) ]
0 commit comments