Core/AreaTriggers: Rename spell_areatrigger* tables to areatrigger_create_properties* according to last MiscValue research for areatrigger effects
Port From (https://github.com/TrinityCore/TrinityCore/commit/ee73948a64fc3d767d37cd3cc7f44358c5274b83)
This commit is contained in:
@@ -31,9 +31,9 @@ namespace Game.DataStorage
|
||||
public void LoadAreaTriggerTemplates()
|
||||
{
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
MultiMap<uint, Vector2> verticesBySpellMisc = new();
|
||||
MultiMap<uint, Vector2> verticesTargetBySpellMisc = new();
|
||||
MultiMap<uint, Vector3> splinesBySpellMisc = new();
|
||||
MultiMap<uint, Vector2> verticesByCreateProperties = new();
|
||||
MultiMap<uint, Vector2> verticesTargetByCreateProperties = new();
|
||||
MultiMap<uint, Vector3> splinesByCreateProperties = new();
|
||||
MultiMap<AreaTriggerId, AreaTriggerAction> actionsByAreaTrigger = new();
|
||||
|
||||
// 0 1 2 3 4
|
||||
@@ -80,65 +80,56 @@ 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 SpellMiscId, Idx, VerticeX, VerticeY, VerticeTargetX, VerticeTargetY FROM `spell_areatrigger_vertices` ORDER BY `SpellMiscId`, `Idx`");
|
||||
// 0 1 2 3 4 5
|
||||
SQLResult vertices = DB.World.Query("SELECT AreaTriggerCreatePropertiesId, Idx, VerticeX, VerticeY, VerticeTargetX, VerticeTargetY FROM `areatrigger_create_properties_polygon_vertex` ORDER BY `AreaTriggerCreatePropertiesId`, `Idx`");
|
||||
if (!vertices.IsEmpty())
|
||||
{
|
||||
do
|
||||
{
|
||||
uint spellMiscId = vertices.Read<uint>(0);
|
||||
uint areaTriggerCreatePropertiesId = vertices.Read<uint>(0);
|
||||
|
||||
verticesBySpellMisc.Add(spellMiscId, new Vector2(vertices.Read<float>(2), vertices.Read<float>(3)));
|
||||
verticesByCreateProperties.Add(areaTriggerCreatePropertiesId, new Vector2(vertices.Read<float>(2), vertices.Read<float>(3)));
|
||||
|
||||
if (!vertices.IsNull(4) && !vertices.IsNull(5))
|
||||
verticesTargetBySpellMisc.Add(spellMiscId, new Vector2(vertices.Read<float>(4), vertices.Read<float>(5)));
|
||||
verticesTargetByCreateProperties.Add(areaTriggerCreatePropertiesId, new Vector2(vertices.Read<float>(4), vertices.Read<float>(5)));
|
||||
else if (vertices.IsNull(4) != vertices.IsNull(5))
|
||||
Log.outError(LogFilter.Sql, $"Table `spell_areatrigger_vertices` has listed invalid target vertices (SpellMiscId: {spellMiscId}, Index: {vertices.Read<uint>(1)}).");
|
||||
Log.outError(LogFilter.Sql, $"Table `areatrigger_create_properties_polygon_vertex` has listed invalid target vertices (AreaTriggerCreatePropertiesId: {areaTriggerCreatePropertiesId}, Index: {vertices.Read<uint>(1)}).");
|
||||
}
|
||||
while (vertices.NextRow());
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 AreaTrigger templates polygon vertices. DB table `areatrigger_template_polygon_vertices` is empty.");
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 AreaTrigger polygon polygon vertices. DB table `areatrigger_create_properties_polygon_vertex` is empty.");
|
||||
}
|
||||
|
||||
// 0 1 2 3
|
||||
SQLResult splines = DB.World.Query("SELECT SpellMiscId, X, Y, Z FROM `spell_areatrigger_splines` ORDER BY `SpellMiscId`, `Idx`");
|
||||
// 0 1 2 3
|
||||
SQLResult splines = DB.World.Query("SELECT AreaTriggerCreatePropertiesId, X, Y, Z FROM `areatrigger_create_properties_spline_point` ORDER BY `AreaTriggerCreatePropertiesId`, `Idx`");
|
||||
if (!splines.IsEmpty())
|
||||
{
|
||||
do
|
||||
{
|
||||
uint spellMiscId = splines.Read<uint>(0);
|
||||
|
||||
uint areaTriggerCreatePropertiesId = splines.Read<uint>(0);
|
||||
Vector3 spline = new(splines.Read<float>(1), splines.Read<float>(2), splines.Read<float>(3));
|
||||
|
||||
splinesBySpellMisc.Add(spellMiscId, spline);
|
||||
splinesByCreateProperties.Add(areaTriggerCreatePropertiesId, spline);
|
||||
}
|
||||
while (splines.NextRow());
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 AreaTrigger templates splines. DB table `spell_areatrigger_splines` is empty.");
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 AreaTrigger splines. DB table `areatrigger_create_properties_spline_point` is empty.");
|
||||
}
|
||||
|
||||
// 0 1 2 3 4 5 6 7 8 9 10
|
||||
SQLResult templates = DB.World.Query("SELECT Id, IsServerSide, Type, Flags, Data0, Data1, Data2, Data3, Data4, Data5, ScriptName FROM `areatrigger_template`");
|
||||
// 0 1 2 3
|
||||
SQLResult templates = DB.World.Query("SELECT Id, IsServerSide, Flags, ScriptName FROM `areatrigger_template`");
|
||||
if (!templates.IsEmpty())
|
||||
{
|
||||
do
|
||||
{
|
||||
AreaTriggerTemplate areaTriggerTemplate = new();
|
||||
areaTriggerTemplate.Id = new(templates.Read<uint>(0), templates.Read<byte>(1) == 1);
|
||||
AreaTriggerTypes type = (AreaTriggerTypes)templates.Read<byte>(2);
|
||||
|
||||
if (type >= AreaTriggerTypes.Max)
|
||||
{
|
||||
Log.outError(LogFilter.Sql, $"Table `areatrigger_template` has listed areatrigger (Id: {areaTriggerTemplate.Id.Id}, IsServerSide: {areaTriggerTemplate.Id.IsServerSide}) with invalid type {type}.");
|
||||
continue;
|
||||
}
|
||||
|
||||
areaTriggerTemplate.TriggerType = type;
|
||||
areaTriggerTemplate.Flags = (AreaTriggerFlags)templates.Read<uint>(3);
|
||||
areaTriggerTemplate.Flags = (AreaTriggerFlags)templates.Read<uint>(2);
|
||||
|
||||
if (areaTriggerTemplate.Id.IsServerSide && areaTriggerTemplate.Flags != 0)
|
||||
{
|
||||
@@ -146,36 +137,39 @@ namespace Game.DataStorage
|
||||
continue;
|
||||
}
|
||||
|
||||
unsafe
|
||||
{
|
||||
for (byte i = 0; i < SharedConst.MaxAreatriggerEntityData; ++i)
|
||||
areaTriggerTemplate.DefaultDatas.Data[i] = templates.Read<float>(4 + i);
|
||||
}
|
||||
|
||||
areaTriggerTemplate.ScriptId = Global.ObjectMgr.GetScriptId(templates.Read<string>(10));
|
||||
areaTriggerTemplate.ScriptId = Global.ObjectMgr.GetScriptId(templates.Read<string>(3));
|
||||
areaTriggerTemplate.Actions = actionsByAreaTrigger[areaTriggerTemplate.Id];
|
||||
|
||||
areaTriggerTemplate.InitMaxSearchRadius();
|
||||
_areaTriggerTemplateStore[areaTriggerTemplate.Id] = areaTriggerTemplate;
|
||||
}
|
||||
while (templates.NextRow());
|
||||
}
|
||||
|
||||
// 0 1 2 3 4 5 6 7 8 9 10
|
||||
SQLResult areatriggerSpellMiscs = DB.World.Query("SELECT SpellMiscId, AreaTriggerId, MoveCurveId, ScaleCurveId, MorphCurveId, FacingCurveId, AnimId, AnimKitId, DecalPropertiesId, TimeToTarget, TimeToTargetScale FROM `spell_areatrigger`");
|
||||
if (!areatriggerSpellMiscs.IsEmpty())
|
||||
// 0 1 2 3 4 5 6 7 8 9 10
|
||||
SQLResult areatriggerCreateProperties = DB.World.Query("SELECT Id, AreaTriggerId, MoveCurveId, ScaleCurveId, MorphCurveId, FacingCurveId, AnimId, AnimKitId, DecalPropertiesId, TimeToTarget, TimeToTargetScale, " +
|
||||
//11 12 13 14 15 16 17
|
||||
"Shape, ShapeData0, ShapeData1, ShapeData2, ShapeData3, ShapeData4, ShapeData5 FROM `areatrigger_create_properties`");
|
||||
if (!areatriggerCreateProperties.IsEmpty())
|
||||
{
|
||||
do
|
||||
{
|
||||
AreaTriggerMiscTemplate miscTemplate = new();
|
||||
miscTemplate.MiscId = areatriggerSpellMiscs.Read<uint>(0);
|
||||
AreaTriggerCreateProperties createProperties = new();
|
||||
createProperties.Id = areatriggerCreateProperties.Read<uint>(0);
|
||||
|
||||
uint areatriggerId = areatriggerSpellMiscs.Read<uint>(1);
|
||||
miscTemplate.Template = GetAreaTriggerTemplate(new AreaTriggerId(areatriggerId, false));
|
||||
uint areatriggerId = areatriggerCreateProperties.Read<uint>(1);
|
||||
createProperties.Template = GetAreaTriggerTemplate(new AreaTriggerId(areatriggerId, false));
|
||||
|
||||
if (miscTemplate.Template == null)
|
||||
AreaTriggerTypes shape = (AreaTriggerTypes)areatriggerCreateProperties.Read<byte>(11);
|
||||
|
||||
if (areatriggerId != 0 && createProperties.Template == null)
|
||||
{
|
||||
Log.outError(LogFilter.Sql, "Table `spell_areatrigger` reference invalid AreaTriggerId {0} for miscId {1}", areatriggerId, miscTemplate.MiscId);
|
||||
Log.outError(LogFilter.Sql, $"Table `areatrigger_create_properties` reference invalid AreaTriggerId {areatriggerId} for AreaTriggerCreatePropertiesId {createProperties.Id}");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (shape >= AreaTriggerTypes.Max)
|
||||
{
|
||||
Log.outError(LogFilter.Sql, $"Table `areatrigger_create_properties` has listed areatrigger create properties {createProperties.Id} with invalid shape {shape}.");
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -183,50 +177,61 @@ namespace Game.DataStorage
|
||||
{
|
||||
if (value != 0 && !CliDB.CurveStorage.ContainsKey(value))
|
||||
{
|
||||
Log.outError(LogFilter.Sql, "Table `spell_areatrigger` has listed areatrigger (MiscId: {0}, Id: {1}) with invalid Curve ({2}), set to 0!", miscTemplate.MiscId, areatriggerId, value);
|
||||
Log.outError(LogFilter.Sql, $"Table `areatrigger_create_properties` has listed areatrigger (AreaTriggerCreatePropertiesId: {createProperties.Id}, Id: {areatriggerId}) with invalid Curve ({value}), set to 0!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
miscTemplate.MoveCurveId = ValidateAndSetCurve(areatriggerSpellMiscs.Read<uint>(2));
|
||||
miscTemplate.ScaleCurveId = ValidateAndSetCurve(areatriggerSpellMiscs.Read<uint>(3));
|
||||
miscTemplate.MorphCurveId = ValidateAndSetCurve(areatriggerSpellMiscs.Read<uint>(4));
|
||||
miscTemplate.FacingCurveId = ValidateAndSetCurve(areatriggerSpellMiscs.Read<uint>(5));
|
||||
createProperties.MoveCurveId = ValidateAndSetCurve(areatriggerCreateProperties.Read<uint>(2));
|
||||
createProperties.ScaleCurveId = ValidateAndSetCurve(areatriggerCreateProperties.Read<uint>(3));
|
||||
createProperties.MorphCurveId = ValidateAndSetCurve(areatriggerCreateProperties.Read<uint>(4));
|
||||
createProperties.FacingCurveId = ValidateAndSetCurve(areatriggerCreateProperties.Read<uint>(5));
|
||||
|
||||
miscTemplate.AnimId = areatriggerSpellMiscs.Read<uint>(6);
|
||||
miscTemplate.AnimKitId = areatriggerSpellMiscs.Read<uint>(7);
|
||||
miscTemplate.DecalPropertiesId = areatriggerSpellMiscs.Read<uint>(8);
|
||||
createProperties.AnimId = areatriggerCreateProperties.Read<uint>(6);
|
||||
createProperties.AnimKitId = areatriggerCreateProperties.Read<uint>(7);
|
||||
createProperties.DecalPropertiesId = areatriggerCreateProperties.Read<uint>(8);
|
||||
|
||||
miscTemplate.TimeToTarget = areatriggerSpellMiscs.Read<uint>(9);
|
||||
miscTemplate.TimeToTargetScale = areatriggerSpellMiscs.Read<uint>(10);
|
||||
createProperties.TimeToTarget = areatriggerCreateProperties.Read<uint>(9);
|
||||
createProperties.TimeToTargetScale = areatriggerCreateProperties.Read<uint>(10);
|
||||
|
||||
miscTemplate.PolygonVertices = verticesBySpellMisc[miscTemplate.MiscId];
|
||||
miscTemplate.PolygonVerticesTarget = verticesTargetBySpellMisc[miscTemplate.MiscId];
|
||||
miscTemplate.SplinePoints = splinesBySpellMisc[miscTemplate.MiscId];
|
||||
createProperties.Shape.TriggerType = shape;
|
||||
unsafe
|
||||
{
|
||||
for (byte i = 0; i < SharedConst.MaxAreatriggerEntityData; ++i)
|
||||
createProperties.Shape.DefaultDatas.Data[i] = areatriggerCreateProperties.Read<float>(12 + i);
|
||||
}
|
||||
|
||||
_areaTriggerTemplateSpellMisc[miscTemplate.MiscId] = miscTemplate;
|
||||
if (shape == AreaTriggerTypes.Polygon)
|
||||
if (createProperties.Shape.PolygonDatas.Height <= 0.0f)
|
||||
createProperties.Shape.PolygonDatas.Height = 1.0f;
|
||||
|
||||
createProperties.PolygonVertices = verticesByCreateProperties[createProperties.Id];
|
||||
createProperties.PolygonVerticesTarget = verticesTargetByCreateProperties[createProperties.Id];
|
||||
createProperties.SplinePoints = splinesByCreateProperties[createProperties.Id];
|
||||
|
||||
_areaTriggerCreateProperties[createProperties.Id] = createProperties;
|
||||
}
|
||||
while (areatriggerSpellMiscs.NextRow());
|
||||
while (areatriggerCreateProperties.NextRow());
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 Spell AreaTrigger templates. DB table `spell_areatrigger` is empty.");
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 AreaTrigger create properties. DB table `areatrigger_create_properties` is empty.");
|
||||
}
|
||||
|
||||
// 0 1 2 3 4 5 6 7
|
||||
SQLResult circularMovementInfos = DB.World.Query("SELECT SpellMiscId, StartDelay, CircleRadius, BlendFromRadius, InitialAngle, ZOffset, CounterClockwise, CanLoop FROM `spell_areatrigger_circular` ORDER BY `SpellMiscId`");
|
||||
// 0 1 2 3 4 5 6 7
|
||||
SQLResult circularMovementInfos = DB.World.Query("SELECT AreaTriggerCreatePropertiesId, StartDelay, CircleRadius, BlendFromRadius, InitialAngle, ZOffset, CounterClockwise, CanLoop FROM `areatrigger_create_properties_orbit` ORDER BY `SpellMiscId`");
|
||||
if (!circularMovementInfos.IsEmpty())
|
||||
{
|
||||
do
|
||||
{
|
||||
uint spellMiscId = circularMovementInfos.Read<uint>(0);
|
||||
uint areaTriggerCreatePropertiesId = circularMovementInfos.Read<uint>(0);
|
||||
|
||||
var atSpellMisc = _areaTriggerTemplateSpellMisc.LookupByKey(spellMiscId);
|
||||
if (atSpellMisc == null)
|
||||
var createProperties = _areaTriggerCreateProperties.LookupByKey(areaTriggerCreatePropertiesId);
|
||||
if (createProperties == null)
|
||||
{
|
||||
Log.outError(LogFilter.Sql, $"Table `spell_areatrigger_circular` reference invalid SpellMiscId {spellMiscId}");
|
||||
Log.outError(LogFilter.Sql, $"Table `areatrigger_create_properties_orbit` reference invalid AreaTriggerCreatePropertiesId {areaTriggerCreatePropertiesId}");
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -236,41 +241,41 @@ namespace Game.DataStorage
|
||||
orbitInfo.Radius = circularMovementInfos.Read<float>(2);
|
||||
if (!float.IsInfinity(orbitInfo.Radius))
|
||||
{
|
||||
Log.outError(LogFilter.Sql, $"Table `spell_areatrigger_circular` has listed areatrigger (MiscId: {spellMiscId}) with invalid Radius ({orbitInfo.Radius}), set to 0!");
|
||||
Log.outError(LogFilter.Sql, $"Table `areatrigger_create_properties_orbit` has listed areatrigger (AreaTriggerCreatePropertiesId: {areaTriggerCreatePropertiesId}) with invalid Radius ({orbitInfo.Radius}), set to 0!");
|
||||
orbitInfo.Radius = 0.0f;
|
||||
}
|
||||
|
||||
orbitInfo.BlendFromRadius = circularMovementInfos.Read<float>(3);
|
||||
if (!float.IsInfinity(orbitInfo.BlendFromRadius))
|
||||
{
|
||||
Log.outError(LogFilter.Sql, $"Table `spell_areatrigger_circular` has listed areatrigger (MiscId: {spellMiscId}) with invalid BlendFromRadius ({orbitInfo.BlendFromRadius}), set to 0!");
|
||||
Log.outError(LogFilter.Sql, $"Table `areatrigger_create_properties_orbit` has listed areatrigger (AreaTriggerCreatePropertiesId: {areaTriggerCreatePropertiesId}) with invalid BlendFromRadius ({orbitInfo.BlendFromRadius}), set to 0!");
|
||||
orbitInfo.BlendFromRadius = 0.0f;
|
||||
}
|
||||
|
||||
orbitInfo.InitialAngle = circularMovementInfos.Read<float>(4);
|
||||
if (!float.IsInfinity(orbitInfo.InitialAngle))
|
||||
{
|
||||
Log.outError(LogFilter.Sql, $"Table `spell_areatrigger_circular` has listed areatrigger (MiscId: {spellMiscId}) with invalid InitialAngle ({orbitInfo.InitialAngle}), set to 0!");
|
||||
Log.outError(LogFilter.Sql, $"Table `areatrigger_create_properties_orbit` has listed areatrigger (AreaTriggerCreatePropertiesId: {areaTriggerCreatePropertiesId}) with invalid InitialAngle ({orbitInfo.InitialAngle}), set to 0!");
|
||||
orbitInfo.InitialAngle = 0.0f;
|
||||
}
|
||||
|
||||
orbitInfo.ZOffset = circularMovementInfos.Read<float>(5);
|
||||
if (!float.IsInfinity(orbitInfo.ZOffset))
|
||||
{
|
||||
Log.outError(LogFilter.Sql, $"Table `spell_areatrigger_circular` has listed areatrigger (MiscId: {spellMiscId}) with invalid ZOffset ({orbitInfo.ZOffset}), set to 0!");
|
||||
Log.outError(LogFilter.Sql, $"Table `spell_areatrigger_circular` has listed areatrigger (MiscId: {areaTriggerCreatePropertiesId}) with invalid ZOffset ({orbitInfo.ZOffset}), set to 0!");
|
||||
orbitInfo.ZOffset = 0.0f;
|
||||
}
|
||||
|
||||
orbitInfo.CounterClockwise = circularMovementInfos.Read<bool>(6);
|
||||
orbitInfo.CanLoop = circularMovementInfos.Read<bool>(7);
|
||||
|
||||
atSpellMisc.OrbitInfo = orbitInfo;
|
||||
createProperties.OrbitInfo.Set(orbitInfo);
|
||||
}
|
||||
while (circularMovementInfos.NextRow());
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 AreaTrigger templates circular movement infos. DB table `spell_areatrigger_circular` is empty.");
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 AreaTrigger templates circular movement infos. DB table `areatrigger_create_properties_orbit` is empty.");
|
||||
}
|
||||
|
||||
Log.outInfo(LogFilter.ServerLoading, $"Loaded {_areaTriggerTemplateStore.Count} spell areatrigger templates in {Time.GetMSTimeDiffToNow(oldMSTime)} ms.");
|
||||
@@ -281,7 +286,9 @@ namespace Game.DataStorage
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
// Load area trigger positions (to put them on the server)
|
||||
// 0 1 2 3 4 5 6 7 8 9 10
|
||||
SQLResult templates = DB.World.Query("SELECT SpawnId, AreaTriggerId, IsServerSide, MapId, PosX, PosY, PosZ, Orientation, PhaseUseFlags, PhaseId, PhaseGroup FROM `areatrigger`");
|
||||
SQLResult templates = DB.World.Query("SELECT SpawnId, AreaTriggerId, IsServerSide, MapId, PosX, PosY, PosZ, Orientation, PhaseUseFlags, PhaseId, PhaseGroup " +
|
||||
//11 12 13 14 15 16 17
|
||||
"Shape, ShapeData0, ShapeData1, ShapeData2, ShapeData3, ShapeData4, ShapeData5 FROM `areatrigger`");
|
||||
if (!templates.IsEmpty())
|
||||
{
|
||||
do
|
||||
@@ -289,6 +296,7 @@ namespace Game.DataStorage
|
||||
ulong spawnId = templates.Read<ulong>(0);
|
||||
AreaTriggerId areaTriggerId = new(templates.Read<uint>(1), templates.Read<byte>(2) == 1);
|
||||
WorldLocation location = new(templates.Read<uint>(3), templates.Read<float>(4), templates.Read<float>(5), templates.Read<float>(6), templates.Read<float>(7));
|
||||
AreaTriggerTypes shape = (AreaTriggerTypes)templates.Read<byte>(11);
|
||||
|
||||
if (GetAreaTriggerTemplate(areaTriggerId) == null)
|
||||
{
|
||||
@@ -302,6 +310,12 @@ namespace Game.DataStorage
|
||||
continue;
|
||||
}
|
||||
|
||||
if (shape >= AreaTriggerTypes.Max)
|
||||
{
|
||||
Log.outError(LogFilter.Sql, $"Table `areatrigger` has listed areatrigger SpawnId: {spawnId} with invalid shape {shape}.");
|
||||
continue;
|
||||
}
|
||||
|
||||
AreaTriggerSpawn spawn = new();
|
||||
spawn.SpawnId = spawnId;
|
||||
spawn.Id = areaTriggerId;
|
||||
@@ -311,6 +325,13 @@ namespace Game.DataStorage
|
||||
spawn.PhaseId = templates.Read<uint>(9);
|
||||
spawn.PhaseGroup = templates.Read<uint>(10);
|
||||
|
||||
spawn.Shape.TriggerType = shape;
|
||||
unsafe
|
||||
{
|
||||
for (var i = 0; i < SharedConst.MaxAreatriggerEntityData; ++i)
|
||||
spawn.Shape.DefaultDatas.Data[i] = templates.Read<float>(12 + i);
|
||||
}
|
||||
|
||||
// Add the trigger to a map::cell map, which is later used by GridLoader to query
|
||||
CellCoord cellCoord = GridDefines.ComputeCellCoord(spawn.Location.GetPositionX(), spawn.Location.GetPositionY());
|
||||
if (!_areaTriggerSpawnsByLocation.ContainsKey((spawn.Location.GetMapId(), cellCoord.GetId())))
|
||||
@@ -331,9 +352,9 @@ namespace Game.DataStorage
|
||||
return _areaTriggerTemplateStore.LookupByKey(areaTriggerId);
|
||||
}
|
||||
|
||||
public AreaTriggerMiscTemplate GetAreaTriggerMiscTemplate(uint spellMiscValue)
|
||||
public AreaTriggerCreateProperties GetAreaTriggerCreateProperties(uint spellMiscValue)
|
||||
{
|
||||
return _areaTriggerTemplateSpellMisc.LookupByKey(spellMiscValue);
|
||||
return _areaTriggerCreateProperties.LookupByKey(spellMiscValue);
|
||||
}
|
||||
|
||||
public SortedSet<ulong> GetAreaTriggersForMapAndCell(uint mapId, uint cellId)
|
||||
@@ -349,6 +370,6 @@ namespace Game.DataStorage
|
||||
Dictionary<(uint mapId, uint cellId), SortedSet<ulong>> _areaTriggerSpawnsByLocation = new();
|
||||
Dictionary<ulong, AreaTriggerSpawn> _areaTriggerSpawnsBySpawnId = new();
|
||||
Dictionary<AreaTriggerId, AreaTriggerTemplate> _areaTriggerTemplateStore = new();
|
||||
Dictionary<uint, AreaTriggerMiscTemplate> _areaTriggerTemplateSpellMisc = new();
|
||||
Dictionary<uint, AreaTriggerCreateProperties> _areaTriggerCreateProperties = new();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
bool Create(uint spellMiscId, Unit caster, Unit target, SpellInfo spell, Position pos, int duration, SpellCastVisualField spellVisual, ObjectGuid castId, AuraEffect aurEff)
|
||||
bool Create(uint areaTriggerCreatePropertiesId, Unit caster, Unit target, SpellInfo spell, Position pos, int duration, SpellCastVisualField spellVisual, ObjectGuid castId, AuraEffect aurEff)
|
||||
{
|
||||
_targetGuid = target ? target.GetGUID() : ObjectGuid.Empty;
|
||||
_aurEff = aurEff;
|
||||
@@ -87,30 +87,30 @@ namespace Game.Entities
|
||||
Relocate(pos);
|
||||
if (!IsPositionValid())
|
||||
{
|
||||
Log.outError(LogFilter.AreaTrigger, $"AreaTrigger (spell {spell.Id}) not created. Invalid coordinates (X: {GetPositionX()} Y: {GetPositionY()})");
|
||||
Log.outError(LogFilter.AreaTrigger, $"AreaTrigger (areaTriggerCreatePropertiesId: {areaTriggerCreatePropertiesId}) not created. Invalid coordinates (X: {GetPositionX()} Y: {GetPositionY()})");
|
||||
return false;
|
||||
}
|
||||
|
||||
_areaTriggerMiscTemplate = Global.AreaTriggerDataStorage.GetAreaTriggerMiscTemplate(spellMiscId);
|
||||
if (_areaTriggerMiscTemplate == null)
|
||||
_areaTriggerCreateProperties = Global.AreaTriggerDataStorage.GetAreaTriggerCreateProperties(areaTriggerCreatePropertiesId);
|
||||
if (_areaTriggerCreateProperties == null)
|
||||
{
|
||||
Log.outError(LogFilter.AreaTrigger, "AreaTrigger (spellMiscId {0}) not created. Invalid areatrigger miscid ({1})", spellMiscId, spellMiscId);
|
||||
Log.outError(LogFilter.AreaTrigger, $"AreaTrigger (areaTriggerCreatePropertiesId {areaTriggerCreatePropertiesId}) not created. Invalid areatrigger create properties id ({areaTriggerCreatePropertiesId})");
|
||||
return false;
|
||||
}
|
||||
|
||||
_areaTriggerTemplate = _areaTriggerMiscTemplate.Template;
|
||||
_areaTriggerTemplate = _areaTriggerCreateProperties.Template;
|
||||
|
||||
_Create(ObjectGuid.Create(HighGuid.AreaTrigger, GetMapId(), GetTemplate().Id.Id, caster.GetMap().GenerateLowGuid(HighGuid.AreaTrigger)));
|
||||
_Create(ObjectGuid.Create(HighGuid.AreaTrigger, GetMapId(), GetTemplate() != null ? GetTemplate().Id.Id : 0, caster.GetMap().GenerateLowGuid(HighGuid.AreaTrigger)));
|
||||
|
||||
if (GetTemplate() != null)
|
||||
SetEntry(GetTemplate().Id.Id);
|
||||
|
||||
SetEntry(GetTemplate().Id.Id);
|
||||
SetDuration(duration);
|
||||
|
||||
SetObjectScale(1.0f);
|
||||
|
||||
if (GetTemplate().IsPolygon())
|
||||
_maxSearchRadius = GetMiscTemplate().GetPolygonMaxSearchRadius();
|
||||
else
|
||||
_maxSearchRadius = GetTemplate().MaxSearchRadius;
|
||||
_shape = GetCreateProperties().Shape;
|
||||
_maxSearchRadius = GetCreateProperties().GetMaxSearchRadius();
|
||||
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.Caster), caster.GetGUID());
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.CreatingEffectGUID), castId);
|
||||
@@ -122,57 +122,57 @@ namespace Game.Entities
|
||||
SetUpdateFieldValue(ref spellCastVisual.SpellXSpellVisualID, spellVisual.SpellXSpellVisualID);
|
||||
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.TimeToTargetScale), GetCreateProperties().TimeToTargetScale != 0 ? GetCreateProperties().TimeToTargetScale : m_areaTriggerData.Duration);
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.BoundsRadius2D), GetMaxSearchRadius());
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.DecalPropertiesID), GetMiscTemplate().DecalPropertiesId);
|
||||
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.DecalPropertiesID), GetCreateProperties().DecalPropertiesId);
|
||||
|
||||
ScaleCurve extraScaleCurve = m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.ExtraScaleCurve);
|
||||
|
||||
if (GetMiscTemplate().ExtraScale.Structured.StartTimeOffset != 0)
|
||||
SetUpdateFieldValue(extraScaleCurve.ModifyValue(extraScaleCurve.StartTimeOffset), GetMiscTemplate().ExtraScale.Structured.StartTimeOffset);
|
||||
if (GetMiscTemplate().ExtraScale.Structured.X != 0 || GetMiscTemplate().ExtraScale.Structured.Y != 0)
|
||||
if (GetCreateProperties().ExtraScale.Structured.StartTimeOffset != 0)
|
||||
SetUpdateFieldValue(extraScaleCurve.ModifyValue(extraScaleCurve.StartTimeOffset), GetCreateProperties().ExtraScale.Structured.StartTimeOffset);
|
||||
if (GetCreateProperties().ExtraScale.Structured.X != 0 || GetCreateProperties().ExtraScale.Structured.Y != 0)
|
||||
{
|
||||
Vector2 point = new(GetMiscTemplate().ExtraScale.Structured.X, GetMiscTemplate().ExtraScale.Structured.Y);
|
||||
Vector2 point = new(GetCreateProperties().ExtraScale.Structured.X, GetCreateProperties().ExtraScale.Structured.Y);
|
||||
SetUpdateFieldValue(ref extraScaleCurve.ModifyValue(extraScaleCurve.Points, 0), point);
|
||||
}
|
||||
if (GetMiscTemplate().ExtraScale.Structured.Z != 0 || GetMiscTemplate().ExtraScale.Structured.W != 0)
|
||||
if (GetCreateProperties().ExtraScale.Structured.Z != 0 || GetCreateProperties().ExtraScale.Structured.W != 0)
|
||||
{
|
||||
Vector2 point = new(GetMiscTemplate().ExtraScale.Structured.Z, GetMiscTemplate().ExtraScale.Structured.W);
|
||||
Vector2 point = new(GetCreateProperties().ExtraScale.Structured.Z, GetCreateProperties().ExtraScale.Structured.W);
|
||||
SetUpdateFieldValue(ref extraScaleCurve.ModifyValue(extraScaleCurve.Points, 1), point);
|
||||
}
|
||||
unsafe
|
||||
{
|
||||
if (GetMiscTemplate().ExtraScale.Raw.Data[5] != 0)
|
||||
SetUpdateFieldValue(extraScaleCurve.ModifyValue(extraScaleCurve.ParameterCurve), GetMiscTemplate().ExtraScale.Raw.Data[5]);
|
||||
if (GetMiscTemplate().ExtraScale.Structured.OverrideActive != 0)
|
||||
SetUpdateFieldValue(extraScaleCurve.ModifyValue(extraScaleCurve.OverrideActive), GetMiscTemplate().ExtraScale.Structured.OverrideActive != 0);
|
||||
if (GetCreateProperties().ExtraScale.Raw.Data[5] != 0)
|
||||
SetUpdateFieldValue(extraScaleCurve.ModifyValue(extraScaleCurve.ParameterCurve), GetCreateProperties().ExtraScale.Raw.Data[5]);
|
||||
if (GetCreateProperties().ExtraScale.Structured.OverrideActive != 0)
|
||||
SetUpdateFieldValue(extraScaleCurve.ModifyValue(extraScaleCurve.OverrideActive), GetCreateProperties().ExtraScale.Structured.OverrideActive != 0);
|
||||
}
|
||||
|
||||
|
||||
PhasingHandler.InheritPhaseShift(this, caster);
|
||||
|
||||
if (target && GetTemplate().HasFlag(AreaTriggerFlags.HasAttached))
|
||||
if (target && GetTemplate() != null && GetTemplate().HasFlag(AreaTriggerFlags.HasAttached))
|
||||
{
|
||||
m_movementInfo.transport.guid = target.GetGUID();
|
||||
}
|
||||
|
||||
UpdateShape();
|
||||
|
||||
uint timeToTarget = GetMiscTemplate().TimeToTarget != 0 ? GetMiscTemplate().TimeToTarget : m_areaTriggerData.Duration;
|
||||
uint timeToTarget = GetCreateProperties().TimeToTarget != 0 ? GetCreateProperties().TimeToTarget : m_areaTriggerData.Duration;
|
||||
|
||||
if (GetTemplate().HasFlag(AreaTriggerFlags.HasCircularMovement))
|
||||
if (GetCreateProperties().OrbitInfo.HasValue)
|
||||
{
|
||||
AreaTriggerOrbitInfo cmi = GetMiscTemplate().OrbitInfo;
|
||||
if (target && GetTemplate().HasFlag(AreaTriggerFlags.HasAttached))
|
||||
cmi.PathTarget.Set(target.GetGUID());
|
||||
AreaTriggerOrbitInfo orbit = GetCreateProperties().OrbitInfo.Value;
|
||||
if (target && GetTemplate() != null && GetTemplate().HasFlag(AreaTriggerFlags.HasAttached))
|
||||
orbit.PathTarget.Set(target.GetGUID());
|
||||
else
|
||||
cmi.Center.Set(new Vector3(pos.posX, pos.posY, pos.posZ));
|
||||
orbit.Center.Set(new Vector3(pos.posX, pos.posY, pos.posZ));
|
||||
|
||||
InitOrbit(cmi, timeToTarget);
|
||||
InitOrbit(orbit, timeToTarget);
|
||||
}
|
||||
else if (GetMiscTemplate().HasSplines())
|
||||
else if (GetCreateProperties().HasSplines())
|
||||
{
|
||||
InitSplineOffsets(GetMiscTemplate().SplinePoints, timeToTarget);
|
||||
InitSplineOffsets(GetCreateProperties().SplinePoints, timeToTarget);
|
||||
}
|
||||
|
||||
// movement on transport of areatriggers on unit is handled by themself
|
||||
@@ -208,10 +208,10 @@ namespace Game.Entities
|
||||
return true;
|
||||
}
|
||||
|
||||
public static AreaTrigger CreateAreaTrigger(uint spellMiscId, Unit caster, Unit target, SpellInfo spell, Position pos, int duration, SpellCastVisualField spellVisual, ObjectGuid castId = default, AuraEffect aurEff = null)
|
||||
public static AreaTrigger CreateAreaTrigger(uint areaTriggerCreatePropertiesId, Unit caster, Unit target, SpellInfo spell, Position pos, int duration, SpellCastVisualField spellVisual, ObjectGuid castId = default, AuraEffect aurEff = null)
|
||||
{
|
||||
AreaTrigger at = new();
|
||||
if (!at.Create(spellMiscId, caster, target, spell, pos, duration, spellVisual, castId, aurEff))
|
||||
if (!at.Create(areaTriggerCreatePropertiesId, caster, target, spell, pos, duration, spellVisual, castId, aurEff))
|
||||
return null;
|
||||
|
||||
return at;
|
||||
@@ -248,6 +248,9 @@ namespace Game.Entities
|
||||
|
||||
SetObjectScale(1.0f);
|
||||
|
||||
_shape = position.Shape;
|
||||
_maxSearchRadius = _shape.GetMaxSearchRadius();
|
||||
|
||||
if (position.PhaseUseFlags != 0 || position.PhaseId != 0 || position.PhaseGroup != 0)
|
||||
PhasingHandler.InitDbPhaseShift(GetPhaseShift(), (PhaseUseFlagsValues)position.PhaseUseFlags, position.PhaseId, position.PhaseGroup);
|
||||
|
||||
@@ -272,7 +275,7 @@ namespace Game.Entities
|
||||
{
|
||||
UpdateOrbitPosition(diff);
|
||||
}
|
||||
else if (GetTemplate().HasFlag(AreaTriggerFlags.HasAttached))
|
||||
else if (GetTemplate() != null && GetTemplate().HasFlag(AreaTriggerFlags.HasAttached))
|
||||
{
|
||||
Unit target = GetTarget();
|
||||
if (target)
|
||||
@@ -334,7 +337,7 @@ namespace Game.Entities
|
||||
{
|
||||
List<Unit> targetList = new();
|
||||
|
||||
switch (GetTemplate().TriggerType)
|
||||
switch (_shape.TriggerType)
|
||||
{
|
||||
case AreaTriggerTypes.Sphere:
|
||||
SearchUnitInSphere(targetList);
|
||||
@@ -372,12 +375,12 @@ namespace Game.Entities
|
||||
|
||||
void SearchUnitInSphere(List<Unit> targetList)
|
||||
{
|
||||
float radius = GetTemplate().SphereDatas.Radius;
|
||||
if (GetTemplate().HasFlag(AreaTriggerFlags.HasDynamicShape))
|
||||
float radius = _shape.SphereDatas.Radius;
|
||||
if (GetTemplate() != null && GetTemplate().HasFlag(AreaTriggerFlags.HasDynamicShape))
|
||||
{
|
||||
if (GetMiscTemplate().MorphCurveId != 0)
|
||||
if (GetCreateProperties().MorphCurveId != 0)
|
||||
{
|
||||
radius = MathFunctions.lerp(GetTemplate().SphereDatas.Radius, GetTemplate().SphereDatas.RadiusTarget, Global.DB2Mgr.GetCurveValueAt(GetMiscTemplate().MorphCurveId, GetProgress()));
|
||||
radius = MathFunctions.lerp(_shape.SphereDatas.Radius, _shape.SphereDatas.RadiusTarget, Global.DB2Mgr.GetCurveValueAt(GetCreateProperties().MorphCurveId, GetProgress()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -393,9 +396,9 @@ namespace Game.Entities
|
||||
|
||||
unsafe
|
||||
{
|
||||
extentsX = GetTemplate().BoxDatas.Extents[0];
|
||||
extentsY = GetTemplate().BoxDatas.Extents[1];
|
||||
extentsZ = GetTemplate().BoxDatas.Extents[2];
|
||||
extentsX = _shape.BoxDatas.Extents[0];
|
||||
extentsY = _shape.BoxDatas.Extents[1];
|
||||
extentsZ = _shape.BoxDatas.Extents[2];
|
||||
}
|
||||
|
||||
targetList.RemoveAll(unit => !unit.IsWithinBox(boxCenter, extentsX, extentsY, extentsZ));
|
||||
@@ -405,7 +408,7 @@ namespace Game.Entities
|
||||
{
|
||||
SearchUnits(targetList, GetMaxSearchRadius(), false);
|
||||
|
||||
float height = GetTemplate().PolygonDatas.Height;
|
||||
float height = _shape.PolygonDatas.Height;
|
||||
float minZ = GetPositionZ() - height;
|
||||
float maxZ = GetPositionZ() + height;
|
||||
|
||||
@@ -416,7 +419,7 @@ namespace Game.Entities
|
||||
{
|
||||
SearchUnits(targetList, GetMaxSearchRadius(), false);
|
||||
|
||||
float height = GetTemplate().CylinderDatas.Height;
|
||||
float height = _shape.CylinderDatas.Height;
|
||||
float minZ = GetPositionZ() - height;
|
||||
float maxZ = GetPositionZ() + height;
|
||||
|
||||
@@ -445,7 +448,7 @@ namespace Game.Entities
|
||||
if (player)
|
||||
{
|
||||
if (player.IsDebugAreaTriggers)
|
||||
player.SendSysMessage(CypherStrings.DebugAreatriggerEntered, GetTemplate().Id);
|
||||
player.SendSysMessage(CypherStrings.DebugAreatriggerEntered, GetEntry());
|
||||
|
||||
player.UpdateQuestObjectiveProgress(QuestObjectiveType.AreaTriggerEnter, (int)GetEntry(), 1);
|
||||
}
|
||||
@@ -464,7 +467,7 @@ namespace Game.Entities
|
||||
if (player)
|
||||
{
|
||||
if (player.IsDebugAreaTriggers)
|
||||
player.SendSysMessage(CypherStrings.DebugAreatriggerLeft, GetTemplate().Id);
|
||||
player.SendSysMessage(CypherStrings.DebugAreatriggerLeft, GetEntry());
|
||||
|
||||
player.UpdateQuestObjectiveProgress(QuestObjectiveType.AreaTriggerExit, (int)GetEntry(), 1);
|
||||
}
|
||||
@@ -483,7 +486,7 @@ namespace Game.Entities
|
||||
|
||||
public uint GetScriptId()
|
||||
{
|
||||
return GetTemplate().ScriptId;
|
||||
return GetTemplate() != null ? GetTemplate().ScriptId : 0;
|
||||
}
|
||||
|
||||
public Unit GetCaster()
|
||||
@@ -513,7 +516,7 @@ namespace Game.Entities
|
||||
if (MathFunctions.fuzzyEq(_previousCheckOrientation, newOrientation))
|
||||
return;
|
||||
|
||||
_polygonVertices = GetMiscTemplate().PolygonVertices;
|
||||
_polygonVertices = GetCreateProperties().PolygonVertices;
|
||||
|
||||
float angleSin = (float)Math.Sin(newOrientation);
|
||||
float angleCos = (float)Math.Cos(newOrientation);
|
||||
@@ -601,7 +604,7 @@ namespace Game.Entities
|
||||
|
||||
public void UpdateShape()
|
||||
{
|
||||
if (GetTemplate().IsPolygon())
|
||||
if (_shape.IsPolygon())
|
||||
UpdatePolygonOrientation();
|
||||
}
|
||||
|
||||
@@ -630,7 +633,7 @@ namespace Game.Entities
|
||||
void DoActions(Unit unit)
|
||||
{
|
||||
Unit caster = IsServerSide() ? unit : GetCaster();
|
||||
if (caster)
|
||||
if (caster != null && GetTemplate() != null)
|
||||
{
|
||||
foreach (AreaTriggerAction action in GetTemplate().Actions)
|
||||
{
|
||||
@@ -663,10 +666,13 @@ namespace Game.Entities
|
||||
|
||||
void UndoActions(Unit unit)
|
||||
{
|
||||
foreach (AreaTriggerAction action in GetTemplate().Actions)
|
||||
if (GetTemplate() != null)
|
||||
{
|
||||
if (action.ActionType == AreaTriggerActionTypes.Cast || action.ActionType == AreaTriggerActionTypes.AddAura)
|
||||
unit.RemoveAurasDueToSpell(action.Param, GetCasterGuid());
|
||||
foreach (AreaTriggerAction action in GetTemplate().Actions)
|
||||
{
|
||||
if (action.ActionType == AreaTriggerActionTypes.Cast || action.ActionType == AreaTriggerActionTypes.AddAura)
|
||||
unit.RemoveAurasDueToSpell(action.Param, GetCasterGuid());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -730,10 +736,10 @@ namespace Game.Entities
|
||||
_reachedDestination = false;
|
||||
}
|
||||
|
||||
void InitOrbit(AreaTriggerOrbitInfo cmi, uint timeToTarget)
|
||||
void InitOrbit(AreaTriggerOrbitInfo orbit, uint timeToTarget)
|
||||
{
|
||||
// Circular movement requires either a center position or an attached unit
|
||||
Cypher.Assert(cmi.Center.HasValue || cmi.PathTarget.HasValue);
|
||||
Cypher.Assert(orbit.Center.HasValue || orbit.PathTarget.HasValue);
|
||||
|
||||
// should be sent in object create packets only
|
||||
DoWithSuppressingObjectUpdates(() =>
|
||||
@@ -742,7 +748,7 @@ namespace Game.Entities
|
||||
m_areaTriggerData.ClearChanged(m_areaTriggerData.TimeToTarget);
|
||||
});
|
||||
|
||||
_orbitInfo.Set(cmi);
|
||||
_orbitInfo.Set(orbit);
|
||||
|
||||
_orbitInfo.Value.TimeToTarget = timeToTarget;
|
||||
_orbitInfo.Value.ElapsedTimeForMovement = 0;
|
||||
@@ -861,13 +867,12 @@ namespace Game.Entities
|
||||
if (currentTimePercent <= 0.0f)
|
||||
return;
|
||||
|
||||
if (GetMiscTemplate().MoveCurveId != 0)
|
||||
if (GetCreateProperties().MoveCurveId != 0)
|
||||
{
|
||||
float progress = Global.DB2Mgr.GetCurveValueAt(GetMiscTemplate().MoveCurveId, currentTimePercent);
|
||||
float progress = Global.DB2Mgr.GetCurveValueAt(GetCreateProperties().MoveCurveId, currentTimePercent);
|
||||
if (progress < 0.0f || progress > 1.0f)
|
||||
{
|
||||
Log.outError(LogFilter.AreaTrigger, "AreaTrigger (Id: {0}, SpellMiscId: {1}) has wrong progress ({2}) caused by curve calculation (MoveCurveId: {3})",
|
||||
GetTemplate().Id, GetMiscTemplate().MiscId, progress, GetMiscTemplate().MorphCurveId);
|
||||
Log.outError(LogFilter.AreaTrigger, $"AreaTrigger (Id: {GetEntry()}, AreaTriggerCreatePropertiesId: {GetCreateProperties().Id}) has wrong progress ({progress}) caused by curve calculation (MoveCurveId: {GetCreateProperties().MorphCurveId})");
|
||||
}
|
||||
else
|
||||
currentTimePercent = progress;
|
||||
@@ -881,7 +886,7 @@ namespace Game.Entities
|
||||
_spline.Evaluate_Percent(lastPositionIndex, percentFromLastPoint, out currentPosition);
|
||||
|
||||
float orientation = GetOrientation();
|
||||
if (GetTemplate().HasFlag(AreaTriggerFlags.HasFaceMovementDir))
|
||||
if (GetTemplate() != null && GetTemplate().HasFlag(AreaTriggerFlags.HasFaceMovementDir))
|
||||
{
|
||||
Vector3 nextPoint = _spline.GetPoint(lastPositionIndex + 1);
|
||||
orientation = GetAngle(nextPoint.X, nextPoint.Y);
|
||||
@@ -1014,11 +1019,12 @@ namespace Game.Entities
|
||||
|
||||
public List<ObjectGuid> GetInsideUnits() { return _insideUnits; }
|
||||
|
||||
public AreaTriggerMiscTemplate GetMiscTemplate() { return _areaTriggerMiscTemplate; }
|
||||
public AreaTriggerCreateProperties GetCreateProperties() { return _areaTriggerCreateProperties; }
|
||||
|
||||
public override ObjectGuid GetOwnerGUID() { return GetCasterGuid(); }
|
||||
public ObjectGuid GetCasterGuid() { return m_areaTriggerData.Caster; }
|
||||
|
||||
public AreaTriggerShapeInfo GetShape() { return _shape; }
|
||||
float GetMaxSearchRadius() { return _maxSearchRadius; }
|
||||
public Vector3 GetRollPitchYaw() { return _rollPitchYaw; }
|
||||
public Vector3 GetTargetRollPitchYaw() { return _targetRollPitchYaw; }
|
||||
@@ -1035,6 +1041,7 @@ namespace Game.Entities
|
||||
|
||||
AuraEffect _aurEff;
|
||||
|
||||
AreaTriggerShapeInfo _shape;
|
||||
float _maxSearchRadius;
|
||||
int _duration;
|
||||
int _totalDuration;
|
||||
@@ -1053,7 +1060,7 @@ namespace Game.Entities
|
||||
|
||||
Optional<AreaTriggerOrbitInfo> _orbitInfo;
|
||||
|
||||
AreaTriggerMiscTemplate _areaTriggerMiscTemplate;
|
||||
AreaTriggerCreateProperties _areaTriggerCreateProperties;
|
||||
AreaTriggerTemplate _areaTriggerTemplate;
|
||||
List<ObjectGuid> _insideUnits = new();
|
||||
|
||||
|
||||
@@ -138,43 +138,6 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
public struct AreaTriggerOrbitInfo
|
||||
{
|
||||
public void Write(WorldPacket data)
|
||||
{
|
||||
data.WriteBit(PathTarget.HasValue);
|
||||
data.WriteBit(Center.HasValue);
|
||||
data.WriteBit(CounterClockwise);
|
||||
data.WriteBit(CanLoop);
|
||||
|
||||
data.WriteUInt32(TimeToTarget);
|
||||
data.WriteInt32(ElapsedTimeForMovement);
|
||||
data.WriteUInt32(StartDelay);
|
||||
data.WriteFloat(Radius);
|
||||
data.WriteFloat(BlendFromRadius);
|
||||
data.WriteFloat(InitialAngle);
|
||||
data.WriteFloat(ZOffset);
|
||||
|
||||
if (PathTarget.HasValue)
|
||||
data.WritePackedGuid(PathTarget.Value);
|
||||
|
||||
if (Center.HasValue)
|
||||
data.WriteVector3(Center.Value);
|
||||
}
|
||||
|
||||
public Optional<ObjectGuid> PathTarget;
|
||||
public Optional<Vector3> Center;
|
||||
public bool CounterClockwise;
|
||||
public bool CanLoop;
|
||||
public uint TimeToTarget;
|
||||
public int ElapsedTimeForMovement;
|
||||
public uint StartDelay;
|
||||
public float Radius;
|
||||
public float BlendFromRadius;
|
||||
public float InitialAngle;
|
||||
public float ZOffset;
|
||||
}
|
||||
|
||||
public struct AreaTriggerMovementScriptInfo
|
||||
{
|
||||
public uint SpellScriptID;
|
||||
@@ -218,59 +181,87 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
public class AreaTriggerTemplate : AreaTriggerData
|
||||
{
|
||||
public unsafe void InitMaxSearchRadius()
|
||||
public class AreaTriggerShapeInfo : AreaTriggerData
|
||||
{
|
||||
public AreaTriggerTypes TriggerType;
|
||||
|
||||
public AreaTriggerShapeInfo()
|
||||
{
|
||||
TriggerType = AreaTriggerTypes.Max;
|
||||
}
|
||||
|
||||
public unsafe float GetMaxSearchRadius()
|
||||
{
|
||||
switch (TriggerType)
|
||||
{
|
||||
case AreaTriggerTypes.Sphere:
|
||||
{
|
||||
MaxSearchRadius = Math.Max(SphereDatas.Radius, SphereDatas.RadiusTarget);
|
||||
break;
|
||||
}
|
||||
return Math.Max(SphereDatas.Radius, SphereDatas.RadiusTarget);
|
||||
case AreaTriggerTypes.Box:
|
||||
{
|
||||
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;
|
||||
|
||||
break;
|
||||
}
|
||||
return MathF.Sqrt(BoxDatas.Extents[0] * BoxDatas.Extents[0] / 4 + BoxDatas.Extents[1] * BoxDatas.Extents[1] / 4);
|
||||
case AreaTriggerTypes.Cylinder:
|
||||
{
|
||||
MaxSearchRadius = CylinderDatas.Radius;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
return CylinderDatas.Radius;
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasFlag(AreaTriggerFlags flag) { return Flags.HasAnyFlag(flag); }
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
public bool IsSphere() { return TriggerType == AreaTriggerTypes.Sphere; }
|
||||
public bool IsBox() { return TriggerType == AreaTriggerTypes.Box; }
|
||||
public bool IsPolygon() { return TriggerType == AreaTriggerTypes.Polygon; }
|
||||
public bool IsCylinder() { return TriggerType == AreaTriggerTypes.Cylinder; }
|
||||
|
||||
public AreaTriggerId Id;
|
||||
public AreaTriggerTypes TriggerType;
|
||||
public AreaTriggerFlags Flags;
|
||||
public uint ScriptId;
|
||||
public float MaxSearchRadius;
|
||||
|
||||
public List<AreaTriggerAction> Actions = new();
|
||||
}
|
||||
|
||||
public unsafe class AreaTriggerMiscTemplate
|
||||
public struct AreaTriggerOrbitInfo
|
||||
{
|
||||
public AreaTriggerMiscTemplate()
|
||||
public void Write(WorldPacket data)
|
||||
{
|
||||
data.WriteBit(PathTarget.HasValue);
|
||||
data.WriteBit(Center.HasValue);
|
||||
data.WriteBit(CounterClockwise);
|
||||
data.WriteBit(CanLoop);
|
||||
|
||||
data.WriteUInt32(TimeToTarget);
|
||||
data.WriteInt32(ElapsedTimeForMovement);
|
||||
data.WriteUInt32(StartDelay);
|
||||
data.WriteFloat(Radius);
|
||||
data.WriteFloat(BlendFromRadius);
|
||||
data.WriteFloat(InitialAngle);
|
||||
data.WriteFloat(ZOffset);
|
||||
|
||||
if (PathTarget.HasValue)
|
||||
data.WritePackedGuid(PathTarget.Value);
|
||||
|
||||
if (Center.HasValue)
|
||||
data.WriteVector3(Center.Value);
|
||||
}
|
||||
|
||||
public Optional<ObjectGuid> PathTarget;
|
||||
public Optional<Vector3> Center;
|
||||
public bool CounterClockwise;
|
||||
public bool CanLoop;
|
||||
public uint TimeToTarget;
|
||||
public int ElapsedTimeForMovement;
|
||||
public uint StartDelay;
|
||||
public float Radius;
|
||||
public float BlendFromRadius;
|
||||
public float InitialAngle;
|
||||
public float ZOffset;
|
||||
}
|
||||
|
||||
public class AreaTriggerTemplate
|
||||
{
|
||||
public AreaTriggerId Id;
|
||||
public AreaTriggerFlags Flags;
|
||||
public uint ScriptId;
|
||||
|
||||
public List<AreaTriggerAction> Actions = new();
|
||||
|
||||
public bool HasFlag(AreaTriggerFlags flag) { return Flags.HasAnyFlag(flag); }
|
||||
}
|
||||
|
||||
public unsafe class AreaTriggerCreateProperties
|
||||
{
|
||||
public AreaTriggerCreateProperties()
|
||||
{
|
||||
// legacy code from before it was known what each curve field does
|
||||
ExtraScale.Raw.Data[5] = 1065353217;
|
||||
@@ -280,24 +271,29 @@ namespace Game.Entities
|
||||
|
||||
public bool HasSplines() { return SplinePoints.Count >= 2; }
|
||||
|
||||
public float GetPolygonMaxSearchRadius()
|
||||
public float GetMaxSearchRadius()
|
||||
{
|
||||
Position center = new(0.0f, 0.0f);
|
||||
float maxSearchRadius = 0.0f;
|
||||
|
||||
foreach (var vertice in PolygonVertices)
|
||||
if (Shape.TriggerType == AreaTriggerTypes.Polygon)
|
||||
{
|
||||
float pointDist = center.GetExactDist2d(vertice.X, vertice.Y);
|
||||
Position center = new(0.0f, 0.0f);
|
||||
float maxSearchRadius = 0.0f;
|
||||
|
||||
if (pointDist > maxSearchRadius)
|
||||
maxSearchRadius = pointDist;
|
||||
foreach (var vertice in PolygonVertices)
|
||||
{
|
||||
float pointDist = center.GetExactDist2d(vertice.X, vertice.Y);
|
||||
|
||||
if (pointDist > maxSearchRadius)
|
||||
maxSearchRadius = pointDist;
|
||||
}
|
||||
|
||||
return maxSearchRadius;
|
||||
}
|
||||
|
||||
return maxSearchRadius;
|
||||
return Shape.GetMaxSearchRadius();
|
||||
}
|
||||
|
||||
public uint MiscId;
|
||||
public uint AreaTriggerEntry;
|
||||
public uint Id;
|
||||
public AreaTriggerTemplate Template;
|
||||
|
||||
public uint MoveCurveId;
|
||||
public uint ScaleCurveId;
|
||||
@@ -314,13 +310,12 @@ namespace Game.Entities
|
||||
|
||||
public AreaTriggerScaleInfo OverrideScale = new();
|
||||
public AreaTriggerScaleInfo ExtraScale = new();
|
||||
public AreaTriggerOrbitInfo OrbitInfo;
|
||||
|
||||
public AreaTriggerTemplate Template;
|
||||
|
||||
public AreaTriggerShapeInfo Shape;
|
||||
public List<Vector2> PolygonVertices = new();
|
||||
public List<Vector2> PolygonVerticesTarget = new();
|
||||
public List<Vector3> SplinePoints = new();
|
||||
public Optional<AreaTriggerOrbitInfo> OrbitInfo;
|
||||
}
|
||||
|
||||
public class AreaTriggerSpawn
|
||||
@@ -331,6 +326,8 @@ namespace Game.Entities
|
||||
public uint PhaseId;
|
||||
public uint PhaseGroup;
|
||||
public byte PhaseUseFlags;
|
||||
|
||||
public AreaTriggerShapeInfo Shape;
|
||||
}
|
||||
|
||||
public struct AreaTriggerAction
|
||||
|
||||
@@ -439,32 +439,33 @@ namespace Game.Entities
|
||||
if (flags.AreaTrigger)
|
||||
{
|
||||
AreaTrigger areaTrigger = ToAreaTrigger();
|
||||
AreaTriggerMiscTemplate areaTriggerMiscTemplate = areaTrigger.GetMiscTemplate();
|
||||
AreaTriggerCreateProperties createProperties = areaTrigger.GetCreateProperties();
|
||||
AreaTriggerTemplate areaTriggerTemplate = areaTrigger.GetTemplate();
|
||||
AreaTriggerShapeInfo shape = areaTrigger.GetShape();
|
||||
|
||||
data.WriteUInt32(areaTrigger.GetTimeSinceCreated());
|
||||
|
||||
data.WriteVector3(areaTrigger.GetRollPitchYaw());
|
||||
|
||||
bool hasAbsoluteOrientation = areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasAbsoluteOrientation);
|
||||
bool hasDynamicShape = areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasDynamicShape);
|
||||
bool hasAttached = areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasAttached);
|
||||
bool hasFaceMovementDir = areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasFaceMovementDir);
|
||||
bool hasFollowsTerrain = areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasFollowsTerrain);
|
||||
bool hasUnk1 = areaTriggerTemplate.HasFlag(AreaTriggerFlags.Unk1);
|
||||
bool hasTargetRollPitchYaw = areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasTargetRollPitchYaw);
|
||||
bool hasScaleCurveID = areaTriggerMiscTemplate.ScaleCurveId != 0;
|
||||
bool hasMorphCurveID = areaTriggerMiscTemplate.MorphCurveId != 0;
|
||||
bool hasFacingCurveID = areaTriggerMiscTemplate.FacingCurveId != 0;
|
||||
bool hasMoveCurveID = areaTriggerMiscTemplate.MoveCurveId != 0;
|
||||
bool hasAnimation = areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasAnimID);
|
||||
bool hasUnk3 = areaTriggerTemplate.HasFlag(AreaTriggerFlags.Unk3);
|
||||
bool hasAnimKitID = areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasAnimKitID);
|
||||
bool hasAbsoluteOrientation = areaTriggerTemplate != null && areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasAbsoluteOrientation);
|
||||
bool hasDynamicShape = areaTriggerTemplate != null && areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasDynamicShape);
|
||||
bool hasAttached = areaTriggerTemplate != null && areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasAttached);
|
||||
bool hasFaceMovementDir = areaTriggerTemplate != null && areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasFaceMovementDir);
|
||||
bool hasFollowsTerrain = areaTriggerTemplate != null && areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasFollowsTerrain);
|
||||
bool hasUnk1 = areaTriggerTemplate != null && areaTriggerTemplate.HasFlag(AreaTriggerFlags.Unk1);
|
||||
bool hasTargetRollPitchYaw = areaTriggerTemplate != null && areaTriggerTemplate.HasFlag(AreaTriggerFlags.HasTargetRollPitchYaw);
|
||||
bool hasScaleCurveID = createProperties != null && createProperties.ScaleCurveId != 0;
|
||||
bool hasMorphCurveID = createProperties != null && createProperties.MorphCurveId != 0;
|
||||
bool hasFacingCurveID = createProperties != null && createProperties.FacingCurveId != 0;
|
||||
bool hasMoveCurveID = createProperties != null && createProperties.MoveCurveId != 0;
|
||||
bool hasAnimation = createProperties != null && createProperties.AnimId != 0;
|
||||
bool hasUnk3 = areaTriggerTemplate != null && areaTriggerTemplate.HasFlag(AreaTriggerFlags.Unk3);
|
||||
bool hasAnimKitID = createProperties != null && createProperties.AnimKitId != 0;
|
||||
bool hasAnimProgress = false;
|
||||
bool hasAreaTriggerSphere = areaTriggerTemplate.IsSphere();
|
||||
bool hasAreaTriggerBox = areaTriggerTemplate.IsBox();
|
||||
bool hasAreaTriggerPolygon = areaTriggerTemplate.IsPolygon();
|
||||
bool hasAreaTriggerCylinder = areaTriggerTemplate.IsCylinder();
|
||||
bool hasAreaTriggerSphere = shape.IsSphere();
|
||||
bool hasAreaTriggerBox = shape.IsBox();
|
||||
bool hasAreaTriggerPolygon = createProperties != null && shape.IsPolygon();
|
||||
bool hasAreaTriggerCylinder = shape.IsCylinder();
|
||||
bool hasAreaTriggerSpline = areaTrigger.HasSplines();
|
||||
bool hasOrbit = areaTrigger.HasOrbit();
|
||||
bool hasMovementScript = false;
|
||||
@@ -509,68 +510,68 @@ namespace Game.Entities
|
||||
data.WriteVector3(areaTrigger.GetTargetRollPitchYaw());
|
||||
|
||||
if (hasScaleCurveID)
|
||||
data.WriteUInt32(areaTriggerMiscTemplate.ScaleCurveId);
|
||||
data.WriteUInt32(createProperties.ScaleCurveId);
|
||||
|
||||
if (hasMorphCurveID)
|
||||
data.WriteUInt32(areaTriggerMiscTemplate.MorphCurveId);
|
||||
data.WriteUInt32(createProperties.MorphCurveId);
|
||||
|
||||
if (hasFacingCurveID)
|
||||
data.WriteUInt32(areaTriggerMiscTemplate.FacingCurveId);
|
||||
data.WriteUInt32(createProperties.FacingCurveId);
|
||||
|
||||
if (hasMoveCurveID)
|
||||
data.WriteUInt32(areaTriggerMiscTemplate.MoveCurveId);
|
||||
data.WriteUInt32(createProperties.MoveCurveId);
|
||||
|
||||
if (hasAnimation)
|
||||
data.WriteUInt32(areaTriggerMiscTemplate.AnimId);
|
||||
data.WriteUInt32(createProperties.AnimId);
|
||||
|
||||
if (hasAnimKitID)
|
||||
data.WriteUInt32(areaTriggerMiscTemplate.AnimKitId);
|
||||
data.WriteUInt32(createProperties.AnimKitId);
|
||||
|
||||
if (hasAnimProgress)
|
||||
data.WriteUInt32(0);
|
||||
|
||||
if (hasAreaTriggerSphere)
|
||||
{
|
||||
data.WriteFloat(areaTriggerTemplate.SphereDatas.Radius);
|
||||
data.WriteFloat(areaTriggerTemplate.SphereDatas.RadiusTarget);
|
||||
data.WriteFloat(shape.SphereDatas.Radius);
|
||||
data.WriteFloat(shape.SphereDatas.RadiusTarget);
|
||||
}
|
||||
|
||||
if (hasAreaTriggerBox)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
data.WriteFloat(areaTriggerTemplate.BoxDatas.Extents[0]);
|
||||
data.WriteFloat(areaTriggerTemplate.BoxDatas.Extents[1]);
|
||||
data.WriteFloat(areaTriggerTemplate.BoxDatas.Extents[2]);
|
||||
data.WriteFloat(shape.BoxDatas.Extents[0]);
|
||||
data.WriteFloat(shape.BoxDatas.Extents[1]);
|
||||
data.WriteFloat(shape.BoxDatas.Extents[2]);
|
||||
|
||||
data.WriteFloat(areaTriggerTemplate.BoxDatas.ExtentsTarget[0]);
|
||||
data.WriteFloat(areaTriggerTemplate.BoxDatas.ExtentsTarget[1]);
|
||||
data.WriteFloat(areaTriggerTemplate.BoxDatas.ExtentsTarget[2]);
|
||||
data.WriteFloat(shape.BoxDatas.ExtentsTarget[0]);
|
||||
data.WriteFloat(shape.BoxDatas.ExtentsTarget[1]);
|
||||
data.WriteFloat(shape.BoxDatas.ExtentsTarget[2]);
|
||||
}
|
||||
}
|
||||
|
||||
if (hasAreaTriggerPolygon)
|
||||
{
|
||||
data.WriteInt32(areaTriggerTemplate.PolygonVertices.Count);
|
||||
data.WriteInt32(areaTriggerTemplate.PolygonVerticesTarget.Count);
|
||||
data.WriteFloat(areaTriggerTemplate.PolygonDatas.Height);
|
||||
data.WriteFloat(areaTriggerTemplate.PolygonDatas.HeightTarget);
|
||||
data.WriteInt32(createProperties.PolygonVertices.Count);
|
||||
data.WriteInt32(createProperties.PolygonVerticesTarget.Count);
|
||||
data.WriteFloat(shape.PolygonDatas.Height);
|
||||
data.WriteFloat(shape.PolygonDatas.HeightTarget);
|
||||
|
||||
foreach (var vertice in areaTriggerTemplate.PolygonVertices)
|
||||
foreach (var vertice in createProperties.PolygonVertices)
|
||||
data.WriteVector2(vertice);
|
||||
|
||||
foreach (var vertice in areaTriggerTemplate.PolygonVerticesTarget)
|
||||
foreach (var vertice in createProperties.PolygonVerticesTarget)
|
||||
data.WriteVector2(vertice);
|
||||
}
|
||||
|
||||
if (hasAreaTriggerCylinder)
|
||||
{
|
||||
data.WriteFloat(areaTriggerTemplate.CylinderDatas.Radius);
|
||||
data.WriteFloat(areaTriggerTemplate.CylinderDatas.RadiusTarget);
|
||||
data.WriteFloat(areaTriggerTemplate.CylinderDatas.Height);
|
||||
data.WriteFloat(areaTriggerTemplate.CylinderDatas.HeightTarget);
|
||||
data.WriteFloat(areaTriggerTemplate.CylinderDatas.LocationZOffset);
|
||||
data.WriteFloat(areaTriggerTemplate.CylinderDatas.LocationZOffsetTarget);
|
||||
data.WriteFloat(shape.CylinderDatas.Radius);
|
||||
data.WriteFloat(shape.CylinderDatas.RadiusTarget);
|
||||
data.WriteFloat(shape.CylinderDatas.Height);
|
||||
data.WriteFloat(shape.CylinderDatas.HeightTarget);
|
||||
data.WriteFloat(shape.CylinderDatas.LocationZOffset);
|
||||
data.WriteFloat(shape.CylinderDatas.LocationZOffsetTarget);
|
||||
}
|
||||
|
||||
//if (hasMovementScript)
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
RENAME TABLE `spell_areatrigger` TO `areatrigger_create_properties`;
|
||||
RENAME TABLE `spell_areatrigger_circular` TO `areatrigger_create_properties_orbit`;
|
||||
RENAME TABLE `spell_areatrigger_splines` TO `areatrigger_create_properties_spline_point`;
|
||||
RENAME TABLE `spell_areatrigger_vertices` TO `areatrigger_create_properties_polygon_vertex`;
|
||||
|
||||
ALTER TABLE `areatrigger_create_properties`
|
||||
CHANGE `SpellMiscId` `Id` int(10) unsigned NOT NULL,
|
||||
ADD `Shape` tinyint(0) UNSIGNED NOT NULL DEFAULT '0' AFTER `TimeToTargetScale`,
|
||||
ADD `ShapeData0` float NOT NULL DEFAULT '0' AFTER `Shape`,
|
||||
ADD `ShapeData1` float NOT NULL DEFAULT '0' AFTER `ShapeData0`,
|
||||
ADD `ShapeData2` float NOT NULL DEFAULT '0' AFTER `ShapeData1`,
|
||||
ADD `ShapeData3` float NOT NULL DEFAULT '0' AFTER `ShapeData2`,
|
||||
ADD `ShapeData4` float NOT NULL DEFAULT '0' AFTER `ShapeData3`,
|
||||
ADD `ShapeData5` float NOT NULL DEFAULT '0' AFTER `ShapeData4`;
|
||||
|
||||
ALTER TABLE `areatrigger_create_properties_orbit`
|
||||
CHANGE `SpellMiscId` `AreaTriggerCreatePropertiesId` int(10) unsigned NOT NULL;
|
||||
|
||||
ALTER TABLE `areatrigger_create_properties_spline_point`
|
||||
CHANGE `SpellMiscId` `AreaTriggerCreatePropertiesId` int(10) unsigned NOT NULL;
|
||||
|
||||
ALTER TABLE `areatrigger_create_properties_polygon_vertex`
|
||||
CHANGE `SpellMiscId` `AreaTriggerCreatePropertiesId` int(10) unsigned NOT NULL;
|
||||
|
||||
ALTER TABLE `areatrigger`
|
||||
ADD `Shape` tinyint(0) UNSIGNED NOT NULL DEFAULT '0' AFTER `PhaseGroup`,
|
||||
ADD `ShapeData0` float NOT NULL DEFAULT '0' AFTER `Shape`,
|
||||
ADD `ShapeData1` float NOT NULL DEFAULT '0' AFTER `ShapeData0`,
|
||||
ADD `ShapeData2` float NOT NULL DEFAULT '0' AFTER `ShapeData1`,
|
||||
ADD `ShapeData3` float NOT NULL DEFAULT '0' AFTER `ShapeData2`,
|
||||
ADD `ShapeData4` float NOT NULL DEFAULT '0' AFTER `ShapeData3`,
|
||||
ADD `ShapeData5` float NOT NULL DEFAULT '0' AFTER `ShapeData4`;
|
||||
|
||||
UPDATE `areatrigger_create_properties` `acp`
|
||||
LEFT JOIN `areatrigger_template` `at` ON `acp`.`AreaTriggerId`=`at`.`Id` AND `at`.`IsServerSide`=FALSE
|
||||
SET `acp`.`Shape`=`at`.`Type`,
|
||||
`acp`.`ShapeData0`=`at`.`Data0`,
|
||||
`acp`.`ShapeData1`=`at`.`Data1`,
|
||||
`acp`.`ShapeData2`=`at`.`Data2`,
|
||||
`acp`.`ShapeData3`=`at`.`Data3`,
|
||||
`acp`.`ShapeData4`=`at`.`Data4`,
|
||||
`acp`.`ShapeData5`=`at`.`Data5`;
|
||||
|
||||
UPDATE `areatrigger` `a`
|
||||
LEFT JOIN `areatrigger_template` `at` ON `a`.`AreaTriggerId`=`at`.`Id` AND `at`.`IsServerSide`=TRUE
|
||||
SET `a`.`Shape`=`at`.`Type`,
|
||||
`a`.`ShapeData0`=`at`.`Data0`,
|
||||
`a`.`ShapeData1`=`at`.`Data1`,
|
||||
`a`.`ShapeData2`=`at`.`Data2`,
|
||||
`a`.`ShapeData3`=`at`.`Data3`,
|
||||
`a`.`ShapeData4`=`at`.`Data4`,
|
||||
`a`.`ShapeData5`=`at`.`Data5`;
|
||||
|
||||
DELETE FROM `areatrigger_template` WHERE `Id`=0 AND `IsServerSide`=FALSE;
|
||||
Reference in New Issue
Block a user