Core: Updated to 11.2.0

Port From (https://github.com/TrinityCore/TrinityCore/commit/5cf0c6c8bb2c4e58a2d66ba5f304af34d18a4782)
This commit is contained in:
Hondacrx
2025-08-25 20:48:29 -04:00
parent d64045154a
commit aaa669210a
63 changed files with 5958 additions and 5434 deletions
@@ -15,6 +15,12 @@ namespace Game.Entities
T GetValue();
}
public interface IHasChangesMask
{
void ClearChangesMask();
UpdateMask GetUpdateMask();
}
public class UpdateFieldString : IUpdateField<string>
{
public string _value;
@@ -347,15 +353,39 @@ namespace Game.Entities
}
}
public interface IHasChangesMask
public class VariantUpdateField(int blockBit, int bit, params Type[] types)
{
void ClearChangesMask();
UpdateMask GetUpdateMask();
public object _value;
Type[] _types = types;
public int BlockBit = blockBit;
public int Bit = bit;
public bool Is<T>() { return _types.Contains(typeof(T)); }
public T Get<T>() where T : class, new()
{
if (Is<T>())
return _value as T;
return null;
}
public void Visit(Action<dynamic> visitor)
{
visitor(_value);
}
public void ConstructValue<T>() where T : class, new()
{
_value = new T();
}
}
public abstract class HasChangesMask : IHasChangesMask
{
public int _changeMask;
public static int ChangeMaskLength;
public UpdateMask _changesMask;
public int _blockBit;
public int Bit;
@@ -364,12 +394,13 @@ namespace Game.Entities
{
_blockBit = blockBit;
Bit = (int)bit;
ChangeMaskLength = changeMask;
_changesMask = new UpdateMask(changeMask);
_changeMask = changeMask;
}
public HasChangesMask(int changeMask)
{
ChangeMaskLength = changeMask;
_changesMask = new UpdateMask(changeMask);
}
@@ -433,6 +464,19 @@ namespace Game.Entities
}
}
public void ClearChangesMask(VariantUpdateField field)
{
if (typeof(IHasChangesMask).IsAssignableFrom(field._value.GetType()))
((IHasChangesMask)field._value).ClearChangesMask();
}
public dynamic ModifyValueOld(dynamic value, int bit, int blockBit)
{
_changesMask.Set(blockBit);
_changesMask.Set(bit);
return value;
}
public UpdateField<U> ModifyValue<U>(UpdateField<U> updateField) where U : new()
{
MarkChanged(updateField);
@@ -504,6 +548,18 @@ namespace Game.Entities
return new DynamicUpdateFieldSetter<U>(updateField[index], dynamicIndex);
}
public V ModifyValue<V>(VariantUpdateField field) where V : class, new()
{
if (!field.Is<V>())
field.ConstructValue<V>();
if (field.BlockBit >= 0)
_changesMask.Set(field.BlockBit);
_changesMask.Set(Bit);
return field.Get<V>();
}
public void MarkChanged<U>(UpdateField<U> updateField) where U : new()
{
_changesMask.Set(updateField.BlockBit);
@@ -560,7 +616,7 @@ namespace Game.Entities
public UpdateMask GetStaticUpdateMask()
{
return new UpdateMask(_changeMask);
return new UpdateMask(ChangeMaskLength);
}
}
File diff suppressed because it is too large Load Diff
+12 -141
View File
@@ -299,6 +299,7 @@ namespace Game.Entities
data.WriteBit(flags.NoBirthAnim);
data.WriteBit(flags.EnablePortals);
data.WriteBit(flags.PlayHoverAnim);
data.WriteBit(flags.ThisIsYou);
data.WriteBit(flags.MovementUpdate);
data.WriteBit(flags.MovementTransport);
data.WriteBit(flags.Stationary);
@@ -307,10 +308,8 @@ namespace Game.Entities
data.WriteBit(flags.Vehicle);
data.WriteBit(flags.AnimKit);
data.WriteBit(flags.Rotation);
data.WriteBit(flags.AreaTrigger);
data.WriteBit(flags.GameObject);
data.WriteBit(flags.SmoothPhasing);
data.WriteBit(flags.ThisIsYou);
data.WriteBit(flags.SceneObject);
data.WriteBit(flags.ActivePlayer);
data.WriteBit(flags.Conversation);
@@ -461,7 +460,10 @@ namespace Game.Entities
}
if (flags.CombatVictim)
data.WritePackedGuid(ToUnit().GetVictim().GetGUID()); // CombatVictim
{
Unit unit = ToUnit();
data.WritePackedGuid(unit.GetVictim().GetGUID()); // CombatVictim
}
if (flags.ServerTime)
data.WriteUInt32(GameTime.GetGameTimeMS());
@@ -481,7 +483,10 @@ namespace Game.Entities
}
if (flags.Rotation)
data.WriteInt64(ToGameObject().GetPackedLocalRotation()); // Rotation
{
GameObject gameObject = ToGameObject();
data.WriteInt64(gameObject.GetPackedLocalRotation()); // Rotation
}
if (PauseTimes != null && !PauseTimes.Empty())
foreach (var stopFrame in PauseTimes)
@@ -493,138 +498,6 @@ namespace Game.Entities
MovementExtensions.WriteTransportInfo(data, self.m_movementInfo.transport);
}
if (flags.AreaTrigger)
{
AreaTrigger areaTrigger = ToAreaTrigger();
AreaTriggerCreateProperties createProperties = areaTrigger.GetCreateProperties();
AreaTriggerShapeInfo shape = areaTrigger.GetShape();
data.WriteUInt32(areaTrigger.GetTimeSinceCreated());
data.WriteVector3(areaTrigger.GetRollPitchYaw());
switch (shape.TriggerType)
{
case AreaTriggerShapeType.Sphere:
data.WriteInt8(0);
data.WriteFloat(shape.SphereDatas.Radius);
data.WriteFloat(shape.SphereDatas.RadiusTarget);
break;
case AreaTriggerShapeType.Box:
data.WriteInt8(1);
data.WriteFloat(shape.BoxDatas.Extents[0]);
data.WriteFloat(shape.BoxDatas.Extents[1]);
data.WriteFloat(shape.BoxDatas.Extents[2]);
data.WriteFloat(shape.BoxDatas.ExtentsTarget[0]);
data.WriteFloat(shape.BoxDatas.ExtentsTarget[1]);
data.WriteFloat(shape.BoxDatas.ExtentsTarget[2]);
break;
case AreaTriggerShapeType.Polygon:
data.WriteInt8(3);
data.WriteInt32(shape.PolygonVertices.Count);
data.WriteInt32(shape.PolygonVerticesTarget.Count);
data.WriteFloat(shape.PolygonDatas.Height);
data.WriteFloat(shape.PolygonDatas.HeightTarget);
foreach (var vertice in shape.PolygonVertices)
data.WriteVector2(vertice);
foreach (var vertice in shape.PolygonVerticesTarget)
data.WriteVector2(vertice);
break;
case AreaTriggerShapeType.Cylinder:
data.WriteInt8(4);
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);
break;
case AreaTriggerShapeType.Disk:
data.WriteInt8(7);
data.WriteFloat(shape.DiskDatas.InnerRadius);
data.WriteFloat(shape.DiskDatas.InnerRadiusTarget);
data.WriteFloat(shape.DiskDatas.OuterRadius);
data.WriteFloat(shape.DiskDatas.OuterRadiusTarget);
data.WriteFloat(shape.DiskDatas.Height);
data.WriteFloat(shape.DiskDatas.HeightTarget);
data.WriteFloat(shape.DiskDatas.LocationZOffset);
data.WriteFloat(shape.DiskDatas.LocationZOffsetTarget);
break;
case AreaTriggerShapeType.BoundedPlane:
data.WriteInt8(8);
data.WriteFloat(shape.BoundedPlaneDatas.Extents[0]);
data.WriteFloat(shape.BoundedPlaneDatas.Extents[1]);
data.WriteFloat(shape.BoundedPlaneDatas.ExtentsTarget[0]);
data.WriteFloat(shape.BoundedPlaneDatas.ExtentsTarget[1]);
break;
default:
break;
}
bool hasAbsoluteOrientation = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.HasAbsoluteOrientation);
bool hasDynamicShape = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.HasDynamicShape);
bool hasAttached = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.HasAttached);
bool hasFaceMovementDir = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.HasFaceMovementDir);
bool hasFollowsTerrain = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.HasFollowsTerrain);
bool hasAlwaysExterior = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.AlwaysExterior);
bool hasUnknown1025 = false;
bool hasTargetRollPitchYaw = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.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 hasMovementScript = false;
bool hasPositionalSoundKitID = false;
data.WriteBit(hasAbsoluteOrientation);
data.WriteBit(hasDynamicShape);
data.WriteBit(hasAttached);
data.WriteBit(hasFaceMovementDir);
data.WriteBit(hasFollowsTerrain);
data.WriteBit(hasAlwaysExterior);
data.WriteBit(hasUnknown1025);
data.WriteBit(hasTargetRollPitchYaw);
data.WriteBit(hasScaleCurveID);
data.WriteBit(hasMorphCurveID);
data.WriteBit(hasFacingCurveID);
data.WriteBit(hasMoveCurveID);
data.WriteBit(hasPositionalSoundKitID);
data.WriteBit(areaTrigger.HasSplines());
data.WriteBit(areaTrigger.HasOrbit());
data.WriteBit(hasMovementScript);
data.FlushBits();
if (areaTrigger.HasSplines())
AreaTriggerSplineInfo.WriteAreaTriggerSpline(data, areaTrigger.GetTimeToTarget(), areaTrigger.GetElapsedTimeForMovement(), areaTrigger.GetSpline());
if (hasTargetRollPitchYaw)
data.WriteVector3(areaTrigger.GetTargetRollPitchYaw());
if (hasScaleCurveID)
data.WriteUInt32(createProperties.ScaleCurveId);
if (hasMorphCurveID)
data.WriteUInt32(createProperties.MorphCurveId);
if (hasFacingCurveID)
data.WriteUInt32(createProperties.FacingCurveId);
if (hasMoveCurveID)
data.WriteUInt32(createProperties.MoveCurveId);
if (hasPositionalSoundKitID)
data.WriteUInt32(0);
//if (hasMovementScript)
// *data << *areaTrigger.GetMovementScript(); // AreaTriggerMovementScriptInfo
if (areaTrigger.HasOrbit())
areaTrigger.GetOrbit().Write(data);
}
if (flags.GameObject)
{
GameObject gameObject = ToGameObject();
@@ -785,7 +658,7 @@ namespace Game.Entities
Player player = ToPlayer();
bool HasSceneInstanceIDs = !player.GetSceneMgr().GetSceneTemplateByInstanceMap().Empty();
bool HasRuneState = ToUnit().GetPowerIndex(PowerType.Runes) != (int)PowerType.Max;
bool HasRuneState = player.GetPowerIndex(PowerType.Runes) != (int)PowerType.Max;
data.WriteBit(HasSceneInstanceIDs);
data.WriteBit(HasRuneState);
@@ -794,8 +667,8 @@ namespace Game.Entities
if (HasSceneInstanceIDs)
{
data.WriteInt32(player.GetSceneMgr().GetSceneTemplateByInstanceMap().Count);
foreach (var pair in player.GetSceneMgr().GetSceneTemplateByInstanceMap())
data.WriteUInt32(pair.Key);
foreach (var (sceneInstanceId, _) in player.GetSceneMgr().GetSceneTemplateByInstanceMap())
data.WriteUInt32(sceneInstanceId);
}
if (HasRuneState)
@@ -4157,7 +4030,6 @@ namespace Game.Entities
public bool Vehicle;
public bool AnimKit;
public bool Rotation;
public bool AreaTrigger;
public bool GameObject;
public bool SmoothPhasing;
public bool ThisIsYou;
@@ -4178,7 +4050,6 @@ namespace Game.Entities
Vehicle = false;
AnimKit = false;
Rotation = false;
AreaTrigger = false;
GameObject = false;
SmoothPhasing = false;
ThisIsYou = false;