Fixes UpdateObject packets
This commit is contained in:
@@ -4272,7 +4272,7 @@ namespace Game.AI
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
bool smart = true;
|
bool smart = true;
|
||||||
if (creature.GetAI<SmartAI>() == null)
|
if (creature.GetAI() is not SmartAI || creature.GetAI<SmartAI>() == null)
|
||||||
smart = false;
|
smart = false;
|
||||||
|
|
||||||
if (!smart && !silent)
|
if (!smart && !silent)
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ namespace Game.Entities
|
|||||||
public string IconName;
|
public string IconName;
|
||||||
public List<uint> GossipMenuIds = new();
|
public List<uint> GossipMenuIds = new();
|
||||||
public Dictionary<Difficulty, CreatureDifficulty> difficultyStorage = new();
|
public Dictionary<Difficulty, CreatureDifficulty> difficultyStorage = new();
|
||||||
public uint RequiredExpansion;
|
public int RequiredExpansion;
|
||||||
public uint VignetteID;
|
public uint VignetteID;
|
||||||
public uint Faction;
|
public uint Faction;
|
||||||
public ulong Npcflag;
|
public ulong Npcflag;
|
||||||
@@ -184,7 +184,7 @@ namespace Game.Entities
|
|||||||
stats.EnergyMulti = creatureDifficulty.ManaModifier;
|
stats.EnergyMulti = creatureDifficulty.ManaModifier;
|
||||||
|
|
||||||
stats.CreatureMovementInfoID = MovementId;
|
stats.CreatureMovementInfoID = MovementId;
|
||||||
stats.RequiredExpansion = RequiredExpansion;
|
stats.RequiredExpansion = (uint)RequiredExpansion;
|
||||||
stats.HealthScalingExpansion = creatureDifficulty.HealthScalingExpansion;
|
stats.HealthScalingExpansion = creatureDifficulty.HealthScalingExpansion;
|
||||||
stats.VignetteID = VignetteID;
|
stats.VignetteID = VignetteID;
|
||||||
stats.Class = (int)UnitClass;
|
stats.Class = (int)UnitClass;
|
||||||
|
|||||||
@@ -208,16 +208,17 @@ namespace Game.Entities
|
|||||||
UpdateFieldFlag fieldFlags = GetUpdateFieldFlagsFor(target);
|
UpdateFieldFlag fieldFlags = GetUpdateFieldFlagsFor(target);
|
||||||
|
|
||||||
WorldPacket tempBuffer = new();
|
WorldPacket tempBuffer = new();
|
||||||
BuildValuesUpdate(tempBuffer, fieldFlags, target);
|
tempBuffer.WriteUInt8((byte)(fieldFlags.HasFlag(UpdateFieldFlag.Owner) ? 1 : 0));
|
||||||
buffer.WriteUInt32(tempBuffer.GetSize());
|
tempBuffer.WriteUInt8((byte)(m_entityFragments.IdsChanged ? 1 : 0));
|
||||||
buffer.WriteUInt8((byte)(fieldFlags.HasFlag(UpdateFieldFlag.Owner) ? 1 : 0));
|
|
||||||
buffer.WriteUInt8((byte)(m_entityFragments.IdsChanged ? 1 : 0));
|
|
||||||
if (m_entityFragments.IdsChanged)
|
if (m_entityFragments.IdsChanged)
|
||||||
{
|
{
|
||||||
buffer.WriteUInt8((byte)EntityFragmentSerializationType.Full);
|
tempBuffer.WriteUInt8((byte)EntityFragmentSerializationType.Full);
|
||||||
BuildEntityFragments(buffer, m_entityFragments.GetIds());
|
BuildEntityFragments(tempBuffer, m_entityFragments.GetIds());
|
||||||
}
|
}
|
||||||
buffer.WriteUInt8(m_entityFragments.ContentsChangedMask);
|
tempBuffer.WriteUInt8(m_entityFragments.ContentsChangedMask);
|
||||||
|
|
||||||
|
BuildValuesUpdate(tempBuffer, fieldFlags, target);
|
||||||
|
buffer.WriteUInt32(tempBuffer.GetSize());
|
||||||
buffer.WriteBytes(tempBuffer);
|
buffer.WriteBytes(tempBuffer);
|
||||||
|
|
||||||
data.AddUpdateBlock(buffer);
|
data.AddUpdateBlock(buffer);
|
||||||
@@ -4243,23 +4244,29 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public HasChangesMask ModifyValue(HasChangesMask updateData)
|
public HasChangesMask ModifyValue(HasChangesMask updateData)
|
||||||
{
|
{
|
||||||
_changesMask.Set(updateData.Bit);
|
_owner.m_entityFragments.ContentsChangedMask |= _owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
|
||||||
|
if ((EntityFragment)updateData._blockBit == EntityFragment.CGObject)
|
||||||
|
_changesMask.Set(updateData.Bit);
|
||||||
return updateData;
|
return updateData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearChangesMask(HasChangesMask updateData)
|
public void ClearChangesMask(HasChangesMask updateData)
|
||||||
{
|
{
|
||||||
_changesMask.Reset(updateData.Bit);
|
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
|
||||||
|
if ((EntityFragment)updateData._blockBit == EntityFragment.CGObject)
|
||||||
|
_changesMask.Reset(updateData.Bit);
|
||||||
|
|
||||||
updateData.ClearChangesMask();
|
updateData.ClearChangesMask();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearChangesMask<U>(HasChangesMask updateData, ref UpdateField<U> updateField) where U : new()
|
public void ClearChangesMask<U>(HasChangesMask updateData, ref UpdateField<U> updateField) where U : new()
|
||||||
{
|
{
|
||||||
_changesMask.Reset(updateData.Bit);
|
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
|
||||||
|
if ((EntityFragment)updateData._blockBit == EntityFragment.CGObject)
|
||||||
|
_changesMask.Reset(updateData.Bit);
|
||||||
|
|
||||||
IHasChangesMask hasChangesMask = (IHasChangesMask)updateField._value;
|
if (typeof(IHasChangesMask).IsAssignableFrom(typeof(U)))
|
||||||
if (hasChangesMask != null)
|
((IHasChangesMask)updateField._value).ClearChangesMask();
|
||||||
hasChangesMask.ClearChangesMask();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GetChangedObjectTypeMask()
|
public uint GetChangedObjectTypeMask()
|
||||||
@@ -4271,65 +4278,5 @@ namespace Game.Entities
|
|||||||
{
|
{
|
||||||
return _changesMask[(int)index];
|
return _changesMask[(int)index];
|
||||||
}
|
}
|
||||||
|
|
||||||
//New shit
|
|
||||||
/*HasChangesMask ModifyValue(HasChangesMask updateData)
|
|
||||||
{
|
|
||||||
_owner.m_entityFragments.ContentsChangedMask |= _owner.m_entityFragments.GetUpdateMaskFor(WowCS::EntityFragment(BlockBit));
|
|
||||||
if constexpr(WowCS::EntityFragment(BlockBit) == WowCS::EntityFragment::CGObject)
|
|
||||||
_changesMask |= UpdateMaskHelpers::GetBlockFlag(Bit);
|
|
||||||
|
|
||||||
return { (static_cast<Derived*>(owner)->* field)._value };
|
|
||||||
}*/
|
|
||||||
|
|
||||||
public UpdateField<U> ModifyValue<U>(UpdateField<U> updateField) where U : new()
|
|
||||||
{
|
|
||||||
_owner.m_entityFragments.ContentsChangedMask |= _owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateField.BlockBit);
|
|
||||||
if ((EntityFragment)updateField.BlockBit == EntityFragment.CGObject)
|
|
||||||
_changesMask.Set(updateField.Bit);
|
|
||||||
|
|
||||||
return updateField;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OptionalUpdateField<U> ModifyValue<U>(OptionalUpdateField<U> updateField) where U : new()
|
|
||||||
{
|
|
||||||
_owner.m_entityFragments.ContentsChangedMask |= _owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateField.BlockBit);
|
|
||||||
if ((EntityFragment)updateField.BlockBit == EntityFragment.CGObject)
|
|
||||||
_changesMask.Set(updateField.Bit);
|
|
||||||
|
|
||||||
return updateField;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OptionalUpdateField<U> ModifyValue<U>(OptionalUpdateField<U> updateField, uint dummy) where U : new()
|
|
||||||
{
|
|
||||||
_owner.m_entityFragments.ContentsChangedMask |= _owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateField.BlockBit);
|
|
||||||
if ((EntityFragment)updateField.BlockBit == EntityFragment.CGObject)
|
|
||||||
_changesMask.Set(updateField.Bit);
|
|
||||||
|
|
||||||
if (!updateField.HasValue())
|
|
||||||
updateField.SetValue(new U());
|
|
||||||
|
|
||||||
return updateField;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ClearChangesMask<U>(UpdateField<U> updateField) where U : new()
|
|
||||||
{
|
|
||||||
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateField.BlockBit);
|
|
||||||
if ((EntityFragment)updateField.BlockBit == EntityFragment.CGObject)
|
|
||||||
_changesMask.Reset(updateField.Bit);
|
|
||||||
|
|
||||||
if (typeof(IHasChangesMask).IsAssignableFrom(typeof(U)))
|
|
||||||
((IHasChangesMask)updateField._value).ClearChangesMask();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ClearChangesMask<U>(OptionalUpdateField<U> updateField) where U : new()
|
|
||||||
{
|
|
||||||
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateField.BlockBit);
|
|
||||||
if ((EntityFragment)updateField.BlockBit == EntityFragment.CGObject)
|
|
||||||
_changesMask.Reset(updateField.Bit);
|
|
||||||
|
|
||||||
if (typeof(IHasChangesMask).IsAssignableFrom(typeof(U)))
|
|
||||||
((IHasChangesMask)updateField._value).ClearChangesMask();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1826,7 +1826,7 @@ namespace Game
|
|||||||
creature.SubName = fields.Read<string>(5);
|
creature.SubName = fields.Read<string>(5);
|
||||||
creature.TitleAlt = fields.Read<string>(6);
|
creature.TitleAlt = fields.Read<string>(6);
|
||||||
creature.IconName = fields.Read<string>(7);
|
creature.IconName = fields.Read<string>(7);
|
||||||
creature.RequiredExpansion = fields.Read<uint>(8);
|
creature.RequiredExpansion = fields.Read<int>(8);
|
||||||
creature.VignetteID = fields.Read<uint>(9);
|
creature.VignetteID = fields.Read<uint>(9);
|
||||||
creature.Faction = fields.Read<uint>(10);
|
creature.Faction = fields.Read<uint>(10);
|
||||||
creature.Npcflag = fields.Read<ulong>(11);
|
creature.Npcflag = fields.Read<ulong>(11);
|
||||||
|
|||||||
Reference in New Issue
Block a user