Core/AreaTriggers: Remove unused fields from AreaTriggerCreateProperties and merge movement data into a variant

Port From (https://github.com/TrinityCore/TrinityCore/commit/b6acd368e0bca632d8742c9b5d0ef7f385cf1318)
This commit is contained in:
Hondacrx
2025-12-07 18:14:44 -05:00
parent 89d14774da
commit b022cd1cc4
3 changed files with 26 additions and 41 deletions
@@ -157,7 +157,7 @@ namespace Game.DataStorage
uint ValidateAndSetCurve(uint value)
{
if (value != 0 && !CliDB.CurveStorage.ContainsKey(value))
if (value != 0 && !CliDB.CurveStorage.HasRecord(value))
{
Log.outError(LogFilter.Sql, $"Table `areatrigger_create_properties` has listed AreaTrigger (Id: {areaTriggerId.Id}, IsCustom: {areaTriggerId.IsCustom}) for AreaTriggerCreatePropertiesId (Id: {createPropertiesId.Id}, IsCustom: {createPropertiesId.IsCustom}) with invalid Curve ({value}), set to 0!");
return 0;
@@ -215,7 +215,9 @@ namespace Game.DataStorage
createProperties.Shape.PolygonVerticesTarget.Clear();
}
createProperties.SplinePoints = splinesByCreateProperties[createProperties.Id];
var spline = splinesByCreateProperties.LookupByKey(createProperties.Id);
if (spline != null)
createProperties.SplinePoints = spline;
_areaTriggerCreateProperties[createProperties.Id] = createProperties;
}
@@ -256,7 +258,6 @@ namespace Game.DataStorage
return value;
}
orbitInfo.Radius = ValidateAndSetFloat(circularMovementInfos.Read<float>(3));
orbitInfo.BlendFromRadius = circularMovementInfos.Read<float>(4);
orbitInfo.InitialAngle = circularMovementInfos.Read<float>(5);
@@ -327,7 +328,7 @@ namespace Game.DataStorage
continue;
}
if (createProperties.HasSplines())
if (createProperties.SplinePoints != null)
{
Log.outError(LogFilter.Sql, $"Table `areatrigger` has listed AreaTriggerCreatePropertiesId (Id: {createPropertiesId.Id}, IsCustom: {createPropertiesId.IsCustom}) with splines");
continue;
+21 -18
View File
@@ -149,8 +149,7 @@ namespace Game.Entities
if (IsServerSide())
SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.DecalPropertiesID), 24u); // Blue decal, for .debug areatrigger visibility
AreaTriggerScaleCurveTemplate extraScaleCurve = IsStaticSpawn() ? new AreaTriggerScaleCurveTemplate() : GetCreateProperties().ExtraScale;
SetScaleCurve(areaTriggerData.ModifyValue(m_areaTriggerData.ExtraScaleCurve), extraScaleCurve);
SetScaleCurve(areaTriggerData.ModifyValue(m_areaTriggerData.ExtraScaleCurve), 1.0f);
if (caster != null)
{
@@ -162,7 +161,7 @@ namespace Game.Entities
modOwner.GetSpellModValues(spellInfo, SpellModOp.Radius, spell, (float)m_areaTriggerData.BoundsRadius2D, ref flat, ref multiplier);
if (multiplier != 1.0f)
{
AreaTriggerScaleCurveTemplate overrideScale = new();
ScaleCurveData overrideScale = new();
overrideScale.Curve = multiplier;
SetScaleCurve(areaTriggerData.ModifyValue(m_areaTriggerData.OverrideScaleCurve), overrideScale);
}
@@ -521,20 +520,17 @@ namespace Game.Entities
void SetScaleCurve(ScaleCurve scaleCurve, float constantValue)
{
AreaTriggerScaleCurveTemplate curveTemplate = new();
ScaleCurveData curveTemplate = new();
curveTemplate.Curve = constantValue;
SetScaleCurve(scaleCurve, curveTemplate);
}
void SetScaleCurve(ScaleCurve scaleCurve, Vector2[] points, uint? startTimeOffset, CurveInterpolationMode interpolation)
{
AreaTriggerScaleCurvePointsTemplate curve = new();
curve.Mode = interpolation;
curve.Points = points;
AreaTriggerScaleCurveTemplate curveTemplate = new();
ScaleCurveData curveTemplate = new();
curveTemplate.StartTimeOffset = startTimeOffset.GetValueOrDefault(GetTimeSinceCreated());
curveTemplate.CurveTemplate = curve;
curveTemplate.Mode = interpolation;
curveTemplate.CurvePoints = points;
SetScaleCurve(scaleCurve, curveTemplate);
}
@@ -544,7 +540,7 @@ namespace Game.Entities
SetScaleCurve(scaleCurve, null);
}
void SetScaleCurve(ScaleCurve scaleCurve, AreaTriggerScaleCurveTemplate curve)
void SetScaleCurve(ScaleCurve scaleCurve, ScaleCurveData curve)
{
if (curve == null)
{
@@ -573,11 +569,11 @@ namespace Game.Entities
}
else
{
var curvePoints = curve.CurveTemplate;
var curvePoints = curve.CurvePoints;
if (curvePoints != null)
{
CurveInterpolationMode mode = curvePoints.Mode;
if (curvePoints.Points[1].X < curvePoints.Points[0].X)
CurveInterpolationMode mode = curve.Mode;
if (curvePoints[1].X < curvePoints[0].X)
mode = CurveInterpolationMode.Constant;
switch (mode)
@@ -603,9 +599,9 @@ namespace Game.Entities
uint packedCurve = ((uint)mode << 1) | (pointCount << 24);
SetUpdateFieldValue(scaleCurve.ModifyValue(scaleCurve.ParameterCurve), packedCurve);
for (var i = 0; i < curvePoints.Points.Length; ++i)
for (var i = 0; i < curvePoints.Length; ++i)
{
point.Relocate(curvePoints.Points[i].X, curvePoints.Points[i].Y);
point.Relocate(curvePoints[i].X, curvePoints[i].Y);
SetUpdateFieldValue(ref scaleCurve.ModifyValue(scaleCurve.Points, i), point);
}
}
@@ -896,7 +892,6 @@ namespace Game.Entities
UpdateHasPlayersFlag();
}
public AreaTriggerTemplate GetTemplate()
{
return _areaTriggerTemplate;
@@ -1424,7 +1419,6 @@ namespace Game.Entities
GetMap().AreaTriggerRelocation(this, x, y, z, orientation);
}
void AI_Initialize()
{
AI_Destroy();
@@ -1635,5 +1629,14 @@ namespace Game.Entities
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
}
class ScaleCurveData
{
public uint StartTimeOffset;
public CurveInterpolationMode Mode;
public Vector2[] CurvePoints;
public float Curve;
}
}
}
@@ -91,19 +91,6 @@ namespace Game.Entities
}
}
public class AreaTriggerScaleCurvePointsTemplate
{
public CurveInterpolationMode Mode = CurveInterpolationMode.Linear;
public Vector2[] Points = new Vector2[2];
}
public class AreaTriggerScaleCurveTemplate
{
public uint StartTimeOffset;
public float Curve = 1.0f;
public AreaTriggerScaleCurvePointsTemplate CurveTemplate;
}
public struct AreaTriggerId
{
public uint Id;
@@ -232,9 +219,6 @@ namespace Game.Entities
public uint TimeToTargetScale;
public AreaTriggerScaleCurveTemplate OverrideScale;
public AreaTriggerScaleCurveTemplate ExtraScale;
public AreaTriggerShapeInfo Shape = new();
public float Speed = 1.0f;
@@ -246,10 +230,7 @@ namespace Game.Entities
public AreaTriggerCreateProperties()
{
Id = new(0, false);
ExtraScale = new();
}
public bool HasSplines() { return SplinePoints.Count >= 2; }
}
public class AreaTriggerSpawn : SpawnData