diff --git a/Source/Game/Entities/AreaTrigger/AreaTrigger.cs b/Source/Game/Entities/AreaTrigger/AreaTrigger.cs index 3e6eab9b7..82ede0625 100644 --- a/Source/Game/Entities/AreaTrigger/AreaTrigger.cs +++ b/Source/Game/Entities/AreaTrigger/AreaTrigger.cs @@ -597,7 +597,7 @@ namespace Game.Entities if (GetTemplate() != null) { var conditions = Global.ConditionMgr.GetConditionsForAreaTrigger(GetTemplate().Id.Id, GetTemplate().Id.IsCustom); - if (!conditions.Empty()) + if (conditions != null && !conditions.Empty()) targetList.RemoveAll(target => !Global.ConditionMgr.IsObjectMeetToConditions(target, conditions)); } diff --git a/Source/Game/Entities/Item/AzeriteItem.cs b/Source/Game/Entities/Item/AzeriteItem.cs index 6b48713fc..b84df4be7 100644 --- a/Source/Game/Entities/Item/AzeriteItem.cs +++ b/Source/Game/Entities/Item/AzeriteItem.cs @@ -443,18 +443,18 @@ namespace Game.Entities public override void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target) { - UpdateMask valuesMask = new(14); + UpdateMask valuesMask = new((int)TypeId.Max); valuesMask.Set((int)TypeId.Item); valuesMask.Set((int)TypeId.AzeriteItem); WorldPacket buffer = new(); buffer.WriteUInt32(valuesMask.GetBlock(0)); - UpdateMask mask = new(40); + UpdateMask mask = m_itemData.GetStaticUpdateMask(); m_itemData.AppendAllowedFieldsMaskForFlag(mask, flags); m_itemData.WriteUpdate(buffer, mask, true, this, target); - UpdateMask mask2 = new(9); + UpdateMask mask2 = m_azeriteItemData.GetStaticUpdateMask(); m_azeriteItemData.AppendAllowedFieldsMaskForFlag(mask2, flags); m_azeriteItemData.WriteUpdate(buffer, mask2, true, this, target); diff --git a/Source/Game/Entities/Item/Item.cs b/Source/Game/Entities/Item/Item.cs index 09d6dfaab..2e74a858d 100644 --- a/Source/Game/Entities/Item/Item.cs +++ b/Source/Game/Entities/Item/Item.cs @@ -1305,11 +1305,11 @@ namespace Game.Entities public override void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target) { - UpdateMask valuesMask = new(14); + UpdateMask valuesMask = new((int)TypeId.Max); valuesMask.Set((int)TypeId.Item); WorldPacket buffer = new(); - UpdateMask mask = new(40); + UpdateMask mask = m_itemData.GetStaticUpdateMask(); buffer.WriteUInt32(valuesMask.GetBlock(0)); m_itemData.AppendAllowedFieldsMaskForFlag(mask, flags); diff --git a/Source/Game/Entities/Object/Update/UpdateField.cs b/Source/Game/Entities/Object/Update/UpdateField.cs index d616012b0..56b7ab483 100644 --- a/Source/Game/Entities/Object/Update/UpdateField.cs +++ b/Source/Game/Entities/Object/Update/UpdateField.cs @@ -379,6 +379,7 @@ namespace Game.Entities public abstract class HasChangesMask : IHasChangesMask { + public int _changeMask; public UpdateMask _changesMask; public int _blockBit; public int Bit; @@ -388,6 +389,7 @@ namespace Game.Entities _blockBit = blockBit; Bit = (int)bit; _changesMask = new UpdateMask(changeMask); + _changeMask = changeMask; } public HasChangesMask(int changeMask) @@ -558,6 +560,11 @@ namespace Game.Entities if ((size % 32) != 0) data.WriteBits(0xFFFFFFFFu, size % 32); } + + public UpdateMask GetStaticUpdateMask() + { + return new UpdateMask(_changeMask); + } } public class DynamicUpdateFieldSetter : IUpdateField where T : new() diff --git a/Source/Game/Entities/Object/Update/UpdateFields.cs b/Source/Game/Entities/Object/Update/UpdateFields.cs index d0cc30d39..18be3bf75 100644 --- a/Source/Game/Entities/Object/Update/UpdateFields.cs +++ b/Source/Game/Entities/Object/Update/UpdateFields.cs @@ -1267,7 +1267,6 @@ namespace Game.Entities public UpdateFieldArray BonusResistanceMods = new(7, 195, 203); public UpdateFieldArray ManaCostModifier = new(7, 195, 210); - public UnitData() : base(0, TypeId.Unit, ChangeMaskLength) { } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) @@ -1408,7 +1407,7 @@ namespace Game.Entities data.WriteUInt32(BaseHealth); data.WriteUInt8(SheatheState); - data.WriteUInt8((byte)GetViewerDependentPvpFlags(this, owner, receiver)); + data.WriteUInt8(GetViewerDependentPvpFlags(this, owner, receiver)); data.WriteUInt8(PetFlags); data.WriteUInt8(ShapeshiftForm); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) @@ -2890,7 +2889,7 @@ namespace Game.Entities public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) { - UpdateMask allowedMaskForTarget = new(261, [0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu]); + UpdateMask allowedMaskForTarget = new(269, [0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu]); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -2898,12 +2897,12 @@ namespace Game.Entities public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) - allowedMaskForTarget.OR(new UpdateMask(261, new[] { 0x00000022u, 0xFFFFC000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x3FFFFFFFu, 0x00000000u, 0x00000000u })); + allowedMaskForTarget.OR(new UpdateMask(269, new[] { 0x00000022u, 0xFFFFC000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x3FFFFFFFu, 0x00000000u, 0x00000000u })); } public void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags) { - UpdateMask allowedMaskForTarget = new(261, new[] { 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu }); + UpdateMask allowedMaskForTarget = new(269, new[] { 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask.AND(allowedMaskForTarget); } @@ -3064,15 +3063,15 @@ namespace Game.Entities } if (changesMask[19]) { - data.WriteUInt32(Inebriation); + data.WriteUInt8(Inebriation); } if (changesMask[20]) { - data.WriteInt32(PvpTitle); + data.WriteUInt8(PvpTitle); } if (changesMask[21]) { - data.WriteUInt32(ArenaFaction); + data.WriteUInt8(ArenaFaction); } if (changesMask[22]) { @@ -3104,7 +3103,7 @@ namespace Game.Entities } if (changesMask[29]) { - data.WriteInt32(CurrentBattlePetBreedQuality); + data.WriteUInt8(CurrentBattlePetBreedQuality); } if (changesMask[30]) { diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index a6ada764e..9fb90e8ef 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -7771,11 +7771,11 @@ namespace Game.Entities WorldPacket buffer = new(); - UpdateMask mask = new(191); + UpdateMask mask = m_unitData.GetStaticUpdateMask(); m_unitData.AppendAllowedFieldsMaskForFlag(mask, flags); m_unitData.WriteUpdate(buffer, mask, true, this, target); - UpdateMask mask2 = new(161); + UpdateMask mask2 = m_playerData.GetStaticUpdateMask(); m_playerData.AppendAllowedFieldsMaskForFlag(mask2, flags); m_playerData.WriteUpdate(buffer, mask2, true, this, target); diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index 3b6f5d2d5..c9dcfbf63 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -2448,12 +2448,12 @@ namespace Game.Entities public override void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target) { - UpdateMask valuesMask = new(14); + UpdateMask valuesMask = new((int)TypeId.Max); valuesMask.Set((int)TypeId.Unit); WorldPacket buffer = new(); - UpdateMask mask = new(194); + UpdateMask mask = m_unitData.GetStaticUpdateMask(); m_unitData.AppendAllowedFieldsMaskForFlag(mask, flags); m_unitData.WriteUpdate(buffer, mask, true, this, target);