Core: Updated to 11.1.0
Port From (https://github.com/TrinityCore/TrinityCore/commit/23624ed75abc8cbb77bb2e24a08e0836e4c41db5)
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -33,7 +33,7 @@ namespace Game.Entities
|
||||
FEntityLocalMatrix = 113,
|
||||
FEntityWorldMatrix = 114,
|
||||
CActor = 115, // INDIRECT,
|
||||
FVendor_C = 117, // UPDATEABLE,
|
||||
FVendor_C = 117, // UPDATEABLE, INDIRECT,
|
||||
FMirroredObject_C = 119,
|
||||
End = 255,
|
||||
}
|
||||
@@ -84,7 +84,7 @@ namespace Game.Entities
|
||||
Array.Sort(arr);
|
||||
++count;
|
||||
return (whereIndex, true);
|
||||
};
|
||||
}
|
||||
|
||||
if (!insertSorted(ref Ids, ref Count, fragment).Item2)
|
||||
return;
|
||||
@@ -103,7 +103,8 @@ namespace Game.Entities
|
||||
if (IsIndirectFragment(UpdateableIds[i]))
|
||||
{
|
||||
ContentsChangedMask |= UpdateableMasks[i]; // set the first bit to true to activate fragment
|
||||
UpdateableMasks[i] |= (byte)(1 << maskIndex++);
|
||||
++maskIndex;
|
||||
UpdateableMasks[i] <<= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -125,7 +126,7 @@ namespace Game.Entities
|
||||
return (where, true);
|
||||
}
|
||||
return (where, false);
|
||||
};
|
||||
}
|
||||
|
||||
if (!removeSorted(ref Ids, ref Count, fragment).Item2)
|
||||
return;
|
||||
@@ -142,7 +143,10 @@ namespace Game.Entities
|
||||
{
|
||||
UpdateableMasks[i] = (byte)(1 << maskIndex++);
|
||||
if (IsIndirectFragment(UpdateableIds[i]))
|
||||
UpdateableMasks[i] |= (byte)(1 << maskIndex++);
|
||||
{
|
||||
++maskIndex;
|
||||
UpdateableMasks[i] <<= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -157,7 +161,7 @@ namespace Game.Entities
|
||||
|
||||
public static bool IsIndirectFragment(EntityFragment frag)
|
||||
{
|
||||
return frag == EntityFragment.CGObject || frag == EntityFragment.CActor;
|
||||
return frag == EntityFragment.CGObject || frag == EntityFragment.CActor || frag == EntityFragment.FVendor_C;
|
||||
}
|
||||
|
||||
public EntityFragment[] GetIds() { return Ids[..Count]; }
|
||||
|
||||
@@ -249,9 +249,14 @@ namespace Game.Entities
|
||||
|
||||
public void BuildEntityFragmentsForValuesUpdateForPlayerWithMask(WorldPacket data, UpdateFieldFlag flags)
|
||||
{
|
||||
byte contentsChangedMask = EntityDefinitionsConst.CGObjectChangedMask;
|
||||
foreach (var updateableFragmentId in m_entityFragments.GetUpdateableIds())
|
||||
if (EntityFragmentsHolder.IsIndirectFragment(updateableFragmentId))
|
||||
contentsChangedMask |= (byte)(m_entityFragments.GetUpdateMaskFor(updateableFragmentId) >> 1); // set the "fragment exists" bit
|
||||
|
||||
data.WriteUInt8((byte)(flags.HasFlag(UpdateFieldFlag.Owner) ? 1 : 0));
|
||||
data.WriteUInt8(0); // m_entityFragments.IdsChanged
|
||||
data.WriteUInt8(EntityDefinitionsConst.CGObjectUpdateMask);
|
||||
data.WriteUInt8(contentsChangedMask);
|
||||
}
|
||||
|
||||
public void BuildDestroyUpdateBlock(UpdateData data)
|
||||
@@ -319,6 +324,7 @@ namespace Game.Entities
|
||||
bool HasSpline = unit.IsSplineEnabled();
|
||||
bool HasInertia = unit.m_movementInfo.inertia.HasValue;
|
||||
bool HasAdvFlying = unit.m_movementInfo.advFlying.HasValue;
|
||||
bool HasDriveStatus = unit.m_movementInfo.driveStatus.HasValue;
|
||||
bool HasStandingOnGameObjectGUID = unit.m_movementInfo.standingOnGameObjectGUID.HasValue;
|
||||
|
||||
data.WritePackedGuid(GetGUID()); // MoverGUID
|
||||
@@ -349,6 +355,9 @@ namespace Game.Entities
|
||||
data.WriteBit(false); // HeightChangeFailed
|
||||
data.WriteBit(false); // RemoteTimeValid
|
||||
data.WriteBit(HasInertia); // HasInertia
|
||||
data.WriteBit(HasAdvFlying); // HasAdvFlying
|
||||
data.WriteBit(HasDriveStatus); // HasDriveStatus
|
||||
data.FlushBits();
|
||||
|
||||
if (!unit.m_movementInfo.transport.guid.IsEmpty())
|
||||
MovementExtensions.WriteTransportInfo(data, unit.m_movementInfo.transport);
|
||||
@@ -382,6 +391,14 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
if (HasDriveStatus)
|
||||
{
|
||||
data.WriteBit(unit.m_movementInfo.driveStatus.Value.accelerating);
|
||||
data.WriteBit(unit.m_movementInfo.driveStatus.Value.drifting);
|
||||
data.WriteFloat(unit.m_movementInfo.driveStatus.Value.speed);
|
||||
data.WriteFloat(unit.m_movementInfo.driveStatus.Value.movementAngle);
|
||||
}
|
||||
|
||||
data.WriteFloat(unit.GetSpeed(UnitMoveType.Walk));
|
||||
data.WriteFloat(unit.GetSpeed(UnitMoveType.Run));
|
||||
data.WriteFloat(unit.GetSpeed(UnitMoveType.RunBack));
|
||||
@@ -841,7 +858,6 @@ namespace Game.Entities
|
||||
{
|
||||
m_values.ClearChangesMask(m_objectData);
|
||||
m_entityFragments.IdsChanged = false;
|
||||
m_entityFragments.ContentsChangedMask = EntityDefinitionsConst.CGObjectActiveMask;
|
||||
|
||||
if (m_objectUpdated)
|
||||
{
|
||||
@@ -3963,6 +3979,7 @@ namespace Game.Entities
|
||||
public JumpInfo jump;
|
||||
public float stepUpStartElevation { get; set; }
|
||||
public AdvFlying? advFlying;
|
||||
public Drive? driveStatus;
|
||||
public ObjectGuid? standingOnGameObjectGUID;
|
||||
|
||||
public MovementInfo()
|
||||
@@ -4027,12 +4044,14 @@ namespace Game.Entities
|
||||
public uint prevTime;
|
||||
public uint vehicleId;
|
||||
}
|
||||
|
||||
public struct Inertia
|
||||
{
|
||||
public int id;
|
||||
public Position force;
|
||||
public uint lifetime;
|
||||
}
|
||||
|
||||
public struct JumpInfo
|
||||
{
|
||||
public void Reset()
|
||||
@@ -4047,12 +4066,21 @@ namespace Game.Entities
|
||||
public float cosAngle;
|
||||
public float xyspeed;
|
||||
}
|
||||
|
||||
// advflying
|
||||
public struct AdvFlying
|
||||
{
|
||||
public float forwardVelocity;
|
||||
public float upVelocity;
|
||||
}
|
||||
|
||||
public struct Drive
|
||||
{
|
||||
public float speed;
|
||||
public float movementAngle;
|
||||
public bool accelerating;
|
||||
public bool drifting;
|
||||
}
|
||||
}
|
||||
|
||||
public class MovementForce
|
||||
@@ -4064,6 +4092,9 @@ namespace Game.Entities
|
||||
public float Magnitude;
|
||||
public MovementForceType Type;
|
||||
public int MovementForceID;
|
||||
public int Unknown1110_1;
|
||||
public int Unused1110;
|
||||
public uint Flags;
|
||||
|
||||
public void Read(WorldPacket data)
|
||||
{
|
||||
@@ -4073,6 +4104,9 @@ namespace Game.Entities
|
||||
TransportID = data.ReadUInt32();
|
||||
Magnitude = data.ReadFloat();
|
||||
MovementForceID = data.ReadInt32();
|
||||
Unknown1110_1 = data.ReadInt32();
|
||||
Unused1110 = data.ReadInt32();
|
||||
Flags = data.ReadUInt32();
|
||||
Type = (MovementForceType)data.ReadBits<byte>(2);
|
||||
}
|
||||
|
||||
@@ -4264,7 +4298,13 @@ namespace Game.Entities
|
||||
{
|
||||
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
|
||||
if ((EntityFragment)updateData._blockBit == EntityFragment.CGObject)
|
||||
{
|
||||
_changesMask.Reset(updateData.Bit);
|
||||
if (!_changesMask.IsAnySet())
|
||||
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
|
||||
}
|
||||
else
|
||||
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
|
||||
|
||||
updateData.ClearChangesMask();
|
||||
}
|
||||
@@ -4273,7 +4313,13 @@ namespace Game.Entities
|
||||
{
|
||||
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
|
||||
if ((EntityFragment)updateData._blockBit == EntityFragment.CGObject)
|
||||
{
|
||||
_changesMask.Reset(updateData.Bit);
|
||||
if (!_changesMask.IsAnySet())
|
||||
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
|
||||
}
|
||||
else
|
||||
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
|
||||
|
||||
if (typeof(IHasChangesMask).IsAssignableFrom(typeof(U)))
|
||||
((IHasChangesMask)updateField._value).ClearChangesMask();
|
||||
|
||||
Reference in New Issue
Block a user