Misc fixes

This commit is contained in:
hondacrx
2024-03-13 21:10:14 -04:00
parent 4b9b81c7e2
commit b3d880c115
8 changed files with 31 additions and 18 deletions
@@ -509,6 +509,23 @@ namespace Game.Entities
return new DynamicUpdateFieldSetter<U>(updateField, index); return new DynamicUpdateFieldSetter<U>(updateField, index);
} }
public DynamicUpdateFieldSetter<U> ModifyValue<U>(UpdateFieldArray<DynamicUpdateField<U>> 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<U>(updateField[index], dynamicIndex);
}
public void MarkChanged<U>(UpdateField<U> updateField) where U : new() public void MarkChanged<U>(UpdateField<U> updateField) where U : new()
{ {
_changesMask.Set(updateField.BlockBit); _changesMask.Set(updateField.BlockBit);
+4 -4
View File
@@ -858,10 +858,10 @@ namespace Game.Entities
SetUpdateFieldValue(updateField, (T)(updateField.GetValue() | (dynamic)flag)); SetUpdateFieldValue(updateField, (T)(updateField.GetValue() | (dynamic)flag));
} }
public void SetUpdateFieldFlagValue<T>(DynamicUpdateField<T> updateField, int index, T flag) where T : new() public void SetUpdateFieldFlagValue<T>(DynamicUpdateFieldSetter<T> updateField, T flag) where T : new()
{ {
//static_assert(std::is_integral < T >::value, "SetUpdateFieldFlagValue must be used with integral types"); //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<T>(ref T value, T flag) where T : new() public void SetUpdateFieldFlagValue<T>(ref T value, T flag) where T : new()
@@ -876,10 +876,10 @@ namespace Game.Entities
SetUpdateFieldValue(updateField, (T)(updateField.GetValue() & ~(dynamic)flag)); SetUpdateFieldValue(updateField, (T)(updateField.GetValue() & ~(dynamic)flag));
} }
public void RemoveUpdateFieldFlagValue<T>(DynamicUpdateField<T> updateField, int index, T flag) where T : new() public void RemoveUpdateFieldFlagValue<T>(DynamicUpdateFieldSetter<T> updateField, T flag) where T : new()
{ {
//static_assert(std::is_integral < T >::value, "SetUpdateFieldFlagValue must be used with integral types"); //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<T>(ref T value, T flag) where T : new() public void RemoveUpdateFieldFlagValue<T>(ref T value, T flag) where T : new()
+1 -1
View File
@@ -6125,7 +6125,7 @@ namespace Game.Entities
--loot.unlootedCount; --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(); Guild guild = GetGuild();
if (guild != null) if (guild != null)
+5 -9
View File
@@ -5449,7 +5449,7 @@ namespace Game.Entities
return null; return null;
// alive or spirit healer // alive or spirit healer
if (creature.IsAlive() && !creature.GetCreatureDifficulty().TypeFlags.HasFlag(CreatureTypeFlags.InteractWhileDead)) if (!creature.IsAlive() && !creature.GetCreatureDifficulty().TypeFlags.HasFlag(CreatureTypeFlags.InteractWhileDead))
return null; return null;
// appropriate npc type // appropriate npc type
@@ -5468,7 +5468,7 @@ namespace Game.Entities
return null; return null;
// not allow interaction under control, but allow with own pets // not allow interaction under control, but allow with own pets
if (creature.GetCharmerGUID().IsEmpty()) if (!creature.GetCharmerGUID().IsEmpty())
return null; return null;
// not unfriendly/hostile // not unfriendly/hostile
@@ -5479,7 +5479,7 @@ namespace Game.Entities
return null; return null;
// not too far, taken from CGGameUI::SetInteractTarget // 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 null;
return creature; return creature;
@@ -6450,16 +6450,12 @@ namespace Game.Entities
public void AddExploredZones(int pos, ulong mask) public void AddExploredZones(int pos, ulong mask)
{ {
SetUpdateFieldFlagValue(m_values SetUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex, pos), mask);
.ModifyValue(m_activePlayerData)
.ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex), pos, mask);
} }
public void RemoveExploredZones(int pos, ulong mask) public void RemoveExploredZones(int pos, ulong mask)
{ {
RemoveUpdateFieldFlagValue(m_values RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex, pos), mask);
.ModifyValue(m_activePlayerData)
.ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex), pos, mask);
} }
public bool HasExploredZone(uint areaId) public bool HasExploredZone(uint areaId)
+1 -1
View File
@@ -826,7 +826,7 @@ namespace Game.Entities
tappers.Add(tapper); tappers.Add(tapper);
} }
if (creature.CanHaveLoot()) if (!creature.CanHaveLoot())
isRewardAllowed = false; isRewardAllowed = false;
} }
@@ -79,7 +79,7 @@ namespace Game.Networking.Packets
public ushort TodayHK; public ushort TodayHK;
public ushort YesterdayHK; public ushort YesterdayHK;
public byte LifetimeMaxRank; public byte LifetimeMaxRank;
public TraitInspectInfo TalentTraits; public TraitInspectInfo TalentTraits = new();
} }
public class QueryInspectAchievements : ClientPacket public class QueryInspectAchievements : ClientPacket
@@ -444,7 +444,7 @@ namespace Game.Networking.Packets
public ObjectGuid PlayerGUID; public ObjectGuid PlayerGUID;
public byte Slot; public byte Slot;
public int SlotInBag; public int SlotInBag;
public ItemInstance Item; public ItemInstance Item = new();
public int QuestLogItemID;// Item ID used for updating quest progress public int QuestLogItemID;// Item ID used for updating quest progress
// only set if different than real ID (similar to CreatureTemplate.KillCredit) // only set if different than real ID (similar to CreatureTemplate.KillCredit)
public uint Quantity; public uint Quantity;
+1 -1
View File
@@ -619,7 +619,7 @@ namespace Game.Scripting
public virtual void OnMoneyChanged(Player player, long amount) { } public virtual void OnMoneyChanged(Player player, long amount) { }
// Called when a player gains XP (before anything is given) // 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) // Called when a player's reputation changes (before it is actually changed)
public virtual void OnReputationChange(Player player, uint factionId, int standing, bool incremental) { } public virtual void OnReputationChange(Player player, uint factionId, int standing, bool incremental) { }