From 87bc4be1b58c1445373710f5dea26e0d9201140a Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 13 Sep 2021 13:39:22 -0400 Subject: [PATCH] Forgot the files. --- .../DataStorage/AreaTriggerDataStorage.cs | 23 +++++++------- .../Game/Entities/AreaTrigger/AreaTrigger.cs | 21 ++++++++----- .../AreaTrigger/AreaTriggerTemplate.cs | 30 ++++++++++++------- 3 files changed, 44 insertions(+), 30 deletions(-) diff --git a/Source/Game/DataStorage/AreaTriggerDataStorage.cs b/Source/Game/DataStorage/AreaTriggerDataStorage.cs index 18b121704..1de5964e8 100644 --- a/Source/Game/DataStorage/AreaTriggerDataStorage.cs +++ b/Source/Game/DataStorage/AreaTriggerDataStorage.cs @@ -31,8 +31,8 @@ namespace Game.DataStorage public void LoadAreaTriggerTemplates() { uint oldMSTime = Time.GetMSTime(); - MultiMap verticesByAreaTrigger = new(); - MultiMap verticesTargetByAreaTrigger = new(); + MultiMap verticesBySpellMisc = new(); + MultiMap verticesTargetBySpellMisc = new(); MultiMap splinesBySpellMisc = new(); MultiMap actionsByAreaTrigger = new(); @@ -80,20 +80,20 @@ namespace Game.DataStorage Log.outInfo(LogFilter.ServerLoading, "Loaded 0 AreaTrigger templates actions. DB table `areatrigger_template_actions` is empty."); } - // 0 1 2 3 4 5 - SQLResult vertices = DB.World.Query("SELECT AreaTriggerId, Idx, VerticeX, VerticeY, VerticeTargetX, VerticeTargetY FROM `areatrigger_template_polygon_vertices` ORDER BY `AreaTriggerId`, `Idx`"); + // 0 1 2 3 4 5 + SQLResult vertices = DB.World.Query("SELECT SpellMiscId, Idx, VerticeX, VerticeY, VerticeTargetX, VerticeTargetY FROM `spell_areatrigger_vertices` ORDER BY `SpellMiscId`, `Idx`"); if (!vertices.IsEmpty()) { do { - uint areaTriggerId = vertices.Read(0); + uint spellMiscId = vertices.Read(0); - verticesByAreaTrigger.Add(areaTriggerId, new Vector2(vertices.Read(2), vertices.Read(3))); + verticesBySpellMisc.Add(spellMiscId, new Vector2(vertices.Read(2), vertices.Read(3))); if (!vertices.IsNull(4) && !vertices.IsNull(5)) - verticesTargetByAreaTrigger.Add(areaTriggerId, new Vector2(vertices.Read(4), vertices.Read(5))); + verticesTargetBySpellMisc.Add(spellMiscId, new Vector2(vertices.Read(4), vertices.Read(5))); else if (vertices.IsNull(4) != vertices.IsNull(5)) - Log.outError(LogFilter.Sql, "Table `areatrigger_template_polygon_vertices` has listed invalid target vertices (AreaTrigger: {0}, Index: {1}).", areaTriggerId, vertices.Read(1)); + Log.outError(LogFilter.Sql, $"Table `spell_areatrigger_vertices` has listed invalid target vertices (SpellMiscId: {spellMiscId}, Index: {vertices.Read(1)})."); } while (vertices.NextRow()); } @@ -153,11 +153,6 @@ namespace Game.DataStorage } areaTriggerTemplate.ScriptId = Global.ObjectMgr.GetScriptId(templates.Read(10)); - if (!areaTriggerTemplate.Id.IsServerSide) - { - areaTriggerTemplate.PolygonVertices = verticesByAreaTrigger[areaTriggerTemplate.Id.Id]; - areaTriggerTemplate.PolygonVerticesTarget = verticesTargetByAreaTrigger[areaTriggerTemplate.Id.Id]; - } areaTriggerTemplate.Actions = actionsByAreaTrigger[areaTriggerTemplate.Id]; areaTriggerTemplate.InitMaxSearchRadius(); @@ -207,6 +202,8 @@ namespace Game.DataStorage miscTemplate.TimeToTarget = areatriggerSpellMiscs.Read(9); miscTemplate.TimeToTargetScale = areatriggerSpellMiscs.Read(10); + miscTemplate.PolygonVertices = verticesBySpellMisc[miscTemplate.MiscId]; + miscTemplate.PolygonVerticesTarget = verticesTargetBySpellMisc[miscTemplate.MiscId]; miscTemplate.SplinePoints = splinesBySpellMisc[miscTemplate.MiscId]; _areaTriggerTemplateSpellMisc[miscTemplate.MiscId] = miscTemplate; diff --git a/Source/Game/Entities/AreaTrigger/AreaTrigger.cs b/Source/Game/Entities/AreaTrigger/AreaTrigger.cs index e603c5a8e..84f0d7567 100644 --- a/Source/Game/Entities/AreaTrigger/AreaTrigger.cs +++ b/Source/Game/Entities/AreaTrigger/AreaTrigger.cs @@ -107,6 +107,11 @@ namespace Game.Entities SetObjectScale(1.0f); + if (GetTemplate().IsPolygon()) + _maxSearchRadius = GetMiscTemplate().GetPolygonMaxSearchRadius(); + else + _maxSearchRadius = GetTemplate().MaxSearchRadius; + SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.Caster), caster.GetGUID()); SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.CreatingEffectGUID), castId); @@ -118,7 +123,7 @@ namespace Game.Entities SetUpdateFieldValue(ref spellCastVisual.ScriptVisualID, spellVisual.ScriptVisualID); SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.TimeToTargetScale), GetMiscTemplate().TimeToTargetScale != 0 ? GetMiscTemplate().TimeToTargetScale : m_areaTriggerData.Duration); - SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.BoundsRadius2D), GetTemplate().MaxSearchRadius); + SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.BoundsRadius2D), GetMaxSearchRadius()); SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.DecalPropertiesID), GetMiscTemplate().DecalPropertiesId); ScaleCurve extraScaleCurve = m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.ExtraScaleCurve); @@ -356,12 +361,12 @@ namespace Game.Entities if (IsServerSide()) { var searcher = new PlayerListSearcher(this, targetList, check); - Cell.VisitWorldObjects(this, searcher, GetTemplate().MaxSearchRadius); + Cell.VisitWorldObjects(this, searcher, GetMaxSearchRadius()); } else { var searcher = new UnitListSearcher(this, targetList, check); - Cell.VisitAllObjects(this, searcher, GetTemplate().MaxSearchRadius); + Cell.VisitAllObjects(this, searcher, GetMaxSearchRadius()); } } @@ -381,7 +386,7 @@ namespace Game.Entities void SearchUnitInBox(List targetList) { - SearchUnits(targetList, GetTemplate().MaxSearchRadius, false); + SearchUnits(targetList, GetMaxSearchRadius(), false); Position boxCenter = GetPosition(); float extentsX, extentsY, extentsZ; @@ -398,7 +403,7 @@ namespace Game.Entities void SearchUnitInPolygon(List targetList) { - SearchUnits(targetList, GetTemplate().MaxSearchRadius, false); + SearchUnits(targetList, GetMaxSearchRadius(), false); float height = GetTemplate().PolygonDatas.Height; float minZ = GetPositionZ() - height; @@ -409,7 +414,7 @@ namespace Game.Entities void SearchUnitInCylinder(List targetList) { - SearchUnits(targetList, GetTemplate().MaxSearchRadius, false); + SearchUnits(targetList, GetMaxSearchRadius(), false); float height = GetTemplate().CylinderDatas.Height; float minZ = GetPositionZ() - height; @@ -508,7 +513,7 @@ namespace Game.Entities if (MathFunctions.fuzzyEq(_previousCheckOrientation, newOrientation)) return; - _polygonVertices = GetTemplate().PolygonVertices; + _polygonVertices = GetMiscTemplate().PolygonVertices; float angleSin = (float)Math.Sin(newOrientation); float angleCos = (float)Math.Cos(newOrientation); @@ -1014,6 +1019,7 @@ namespace Game.Entities public override ObjectGuid GetOwnerGUID() { return GetCasterGuid(); } public ObjectGuid GetCasterGuid() { return m_areaTriggerData.Caster; } + float GetMaxSearchRadius() { return _maxSearchRadius; } public Vector3 GetRollPitchYaw() { return _rollPitchYaw; } public Vector3 GetTargetRollPitchYaw() { return _targetRollPitchYaw; } @@ -1029,6 +1035,7 @@ namespace Game.Entities AuraEffect _aurEff; + float _maxSearchRadius; int _duration; int _totalDuration; uint _timeSinceCreated; diff --git a/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs b/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs index 149d83e26..1f959da11 100644 --- a/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs +++ b/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs @@ -234,19 +234,12 @@ namespace Game.Entities MaxSearchRadius = (float)Math.Sqrt(BoxDatas.Extents[0] * BoxDatas.Extents[0] / 4 + BoxDatas.Extents[1] * BoxDatas.Extents[1] / 4); break; } + // Polygon is SpellMisc based, can't init MaxSearchRadius case AreaTriggerTypes.Polygon: { if (PolygonDatas.Height <= 0.0f) PolygonDatas.Height = 1.0f; - foreach (Vector2 vertice in PolygonVertices) - { - float pointDist = vertice.GetLength(); - - if (pointDist > MaxSearchRadius) - MaxSearchRadius = pointDist; - } - break; } case AreaTriggerTypes.Cylinder: @@ -272,8 +265,6 @@ namespace Game.Entities public uint ScriptId; public float MaxSearchRadius; - public List PolygonVertices = new(); - public List PolygonVerticesTarget = new(); public List Actions = new(); } @@ -289,6 +280,22 @@ namespace Game.Entities public bool HasSplines() { return SplinePoints.Count >= 2; } + public float GetPolygonMaxSearchRadius() + { + Position center = new(0.0f, 0.0f); + float maxSearchRadius = 0.0f; + + foreach (var vertice in PolygonVertices) + { + float pointDist = center.GetExactDist2d(vertice.X, vertice.Y); + + if (pointDist > maxSearchRadius) + maxSearchRadius = pointDist; + } + + return maxSearchRadius; + } + public uint MiscId; public uint AreaTriggerEntry; @@ -310,6 +317,9 @@ namespace Game.Entities public AreaTriggerOrbitInfo OrbitInfo; public AreaTriggerTemplate Template; + + public List PolygonVertices = new(); + public List PolygonVerticesTarget = new(); public List SplinePoints = new(); }