From b3d880c1152b7d632464bd1f91aaca232ed63f22 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 13 Mar 2024 21:10:14 -0400 Subject: [PATCH] Misc fixes --- .../Game/Entities/Object/Update/UpdateField.cs | 17 +++++++++++++++++ Source/Game/Entities/Object/WorldObject.cs | 8 ++++---- Source/Game/Entities/Player/Player.Items.cs | 2 +- Source/Game/Entities/Player/Player.cs | 14 +++++--------- Source/Game/Entities/Unit/Unit.Combat.cs | 2 +- .../Game/Networking/Packets/InspectPackets.cs | 2 +- Source/Game/Networking/Packets/ItemPackets.cs | 2 +- Source/Game/Scripting/CoreScripts.cs | 2 +- 8 files changed, 31 insertions(+), 18 deletions(-) diff --git a/Source/Game/Entities/Object/Update/UpdateField.cs b/Source/Game/Entities/Object/Update/UpdateField.cs index 56b7ab483..22d698cd3 100644 --- a/Source/Game/Entities/Object/Update/UpdateField.cs +++ b/Source/Game/Entities/Object/Update/UpdateField.cs @@ -509,6 +509,23 @@ namespace Game.Entities return new DynamicUpdateFieldSetter(updateField, index); } + public DynamicUpdateFieldSetter ModifyValue(UpdateFieldArray> updateField, int index, int dynamicIndex) where U : new() + { + if (dynamicIndex >= updateField[index].Size()) + { + // fill with zeros until reaching desired slot + updateField[index]._values.Resize((uint)dynamicIndex + 1); + updateField[index]._updateMask.Resize((uint)(updateField[index]._values.Count + 31) / 32); + } + + //MarkChanged(updateField, index); + _changesMask.Set(updateField.Bit); + _changesMask.Set(updateField.FirstElementBit); + updateField[index].MarkChanged(dynamicIndex); + + return new DynamicUpdateFieldSetter(updateField[index], dynamicIndex); + } + public void MarkChanged(UpdateField updateField) where U : new() { _changesMask.Set(updateField.BlockBit); diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index c4b7a341e..e87f58e95 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -858,10 +858,10 @@ namespace Game.Entities SetUpdateFieldValue(updateField, (T)(updateField.GetValue() | (dynamic)flag)); } - public void SetUpdateFieldFlagValue(DynamicUpdateField updateField, int index, T flag) where T : new() + public void SetUpdateFieldFlagValue(DynamicUpdateFieldSetter updateField, T flag) where T : new() { //static_assert(std::is_integral < T >::value, "SetUpdateFieldFlagValue must be used with integral types"); - InsertDynamicUpdateFieldValue(updateField, index, (T)(updateField[index] | (dynamic)flag)); + SetUpdateFieldValue(updateField, (T)(updateField.GetValue() | (dynamic)flag)); } public void SetUpdateFieldFlagValue(ref T value, T flag) where T : new() @@ -876,10 +876,10 @@ namespace Game.Entities SetUpdateFieldValue(updateField, (T)(updateField.GetValue() & ~(dynamic)flag)); } - public void RemoveUpdateFieldFlagValue(DynamicUpdateField updateField, int index, T flag) where T : new() + public void RemoveUpdateFieldFlagValue(DynamicUpdateFieldSetter updateField, T flag) where T : new() { //static_assert(std::is_integral < T >::value, "SetUpdateFieldFlagValue must be used with integral types"); - InsertDynamicUpdateFieldValue(updateField, index, (T)(updateField[index] & ~(dynamic)flag)); + SetUpdateFieldValue(updateField, (T)(updateField.GetValue() & ~(dynamic)flag)); } public void RemoveUpdateFieldFlagValue(ref T value, T flag) where T : new() diff --git a/Source/Game/Entities/Player/Player.Items.cs b/Source/Game/Entities/Player/Player.Items.cs index afcb5066f..b4f20c485 100644 --- a/Source/Game/Entities/Player/Player.Items.cs +++ b/Source/Game/Entities/Player/Player.Items.cs @@ -6125,7 +6125,7 @@ namespace Game.Entities --loot.unlootedCount; - if (newitem != null && newitem.GetQuality() > ItemQuality.Epic || (newitem.GetQuality() == ItemQuality.Epic && newitem.GetItemLevel(this) >= GuildConst.MinNewsItemLevel)) + if (newitem != null && (newitem.GetQuality() > ItemQuality.Epic || (newitem.GetQuality() == ItemQuality.Epic && newitem.GetItemLevel(this) >= GuildConst.MinNewsItemLevel))) { Guild guild = GetGuild(); if (guild != null) diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 45f26aff6..76d226aab 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -5449,7 +5449,7 @@ namespace Game.Entities return null; // alive or spirit healer - if (creature.IsAlive() && !creature.GetCreatureDifficulty().TypeFlags.HasFlag(CreatureTypeFlags.InteractWhileDead)) + if (!creature.IsAlive() && !creature.GetCreatureDifficulty().TypeFlags.HasFlag(CreatureTypeFlags.InteractWhileDead)) return null; // appropriate npc type @@ -5468,7 +5468,7 @@ namespace Game.Entities return null; // not allow interaction under control, but allow with own pets - if (creature.GetCharmerGUID().IsEmpty()) + if (!creature.GetCharmerGUID().IsEmpty()) return null; // not unfriendly/hostile @@ -5479,7 +5479,7 @@ namespace Game.Entities return null; // not too far, taken from CGGameUI::SetInteractTarget - if (creature.IsWithinDistInMap(this, creature.GetCombatReach() + 4.0f)) + if (!creature.IsWithinDistInMap(this, creature.GetCombatReach() + 4.0f)) return null; return creature; @@ -6450,16 +6450,12 @@ namespace Game.Entities public void AddExploredZones(int pos, ulong mask) { - SetUpdateFieldFlagValue(m_values - .ModifyValue(m_activePlayerData) - .ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex), pos, mask); + SetUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex, pos), mask); } public void RemoveExploredZones(int pos, ulong mask) { - RemoveUpdateFieldFlagValue(m_values - .ModifyValue(m_activePlayerData) - .ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex), pos, mask); + RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex, pos), mask); } public bool HasExploredZone(uint areaId) diff --git a/Source/Game/Entities/Unit/Unit.Combat.cs b/Source/Game/Entities/Unit/Unit.Combat.cs index 49e8d2309..361af3250 100644 --- a/Source/Game/Entities/Unit/Unit.Combat.cs +++ b/Source/Game/Entities/Unit/Unit.Combat.cs @@ -826,7 +826,7 @@ namespace Game.Entities tappers.Add(tapper); } - if (creature.CanHaveLoot()) + if (!creature.CanHaveLoot()) isRewardAllowed = false; } diff --git a/Source/Game/Networking/Packets/InspectPackets.cs b/Source/Game/Networking/Packets/InspectPackets.cs index 418cefe9a..ae84bfca2 100644 --- a/Source/Game/Networking/Packets/InspectPackets.cs +++ b/Source/Game/Networking/Packets/InspectPackets.cs @@ -79,7 +79,7 @@ namespace Game.Networking.Packets public ushort TodayHK; public ushort YesterdayHK; public byte LifetimeMaxRank; - public TraitInspectInfo TalentTraits; + public TraitInspectInfo TalentTraits = new(); } public class QueryInspectAchievements : ClientPacket diff --git a/Source/Game/Networking/Packets/ItemPackets.cs b/Source/Game/Networking/Packets/ItemPackets.cs index ce206c43c..f70cf06f2 100644 --- a/Source/Game/Networking/Packets/ItemPackets.cs +++ b/Source/Game/Networking/Packets/ItemPackets.cs @@ -444,7 +444,7 @@ namespace Game.Networking.Packets public ObjectGuid PlayerGUID; public byte Slot; public int SlotInBag; - public ItemInstance Item; + public ItemInstance Item = new(); public int QuestLogItemID;// Item ID used for updating quest progress // only set if different than real ID (similar to CreatureTemplate.KillCredit) public uint Quantity; diff --git a/Source/Game/Scripting/CoreScripts.cs b/Source/Game/Scripting/CoreScripts.cs index 5ae72a7a1..d996474de 100644 --- a/Source/Game/Scripting/CoreScripts.cs +++ b/Source/Game/Scripting/CoreScripts.cs @@ -619,7 +619,7 @@ namespace Game.Scripting public virtual void OnMoneyChanged(Player player, long amount) { } // Called when a player gains XP (before anything is given) - public virtual uint OnGiveXP(Player player, uint amount, Unit victim) { return 0; } + public virtual uint OnGiveXP(Player player, uint amount, Unit victim) { return amount; } // Called when a player's reputation changes (before it is actually changed) public virtual void OnReputationChange(Player player, uint factionId, int standing, bool incremental) { }