Core/Spells: Fixes a crash when removing or aura expires on a temp weapon enchant.

This commit is contained in:
hondacrx
2021-03-16 15:44:01 -04:00
parent 75559fc9d6
commit 3c08ab438e
+18 -13
View File
@@ -488,21 +488,22 @@ namespace Game.Entities
void UpdateEnchantTime(uint time) void UpdateEnchantTime(uint time)
{ {
foreach (var enchat in m_enchantDuration) for (var i = 0; i < m_enchantDuration.Count; ++i)
{ {
if (enchat.item.GetEnchantmentId(enchat.slot) == 0) var enchantDuration = m_enchantDuration[i];
if (enchantDuration.item.GetEnchantmentId(enchantDuration.slot) == 0)
{ {
m_enchantDuration.Remove(enchat); m_enchantDuration.Remove(enchantDuration);
} }
else if (enchat.leftduration <= time) else if (enchantDuration.leftduration <= time)
{ {
ApplyEnchantment(enchat.item, enchat.slot, false, false); ApplyEnchantment(enchantDuration.item, enchantDuration.slot, false, false);
enchat.item.ClearEnchantment(enchat.slot); enchantDuration.item.ClearEnchantment(enchantDuration.slot);
m_enchantDuration.Remove(enchat); m_enchantDuration.Remove(enchantDuration);
} }
else if (enchat.leftduration > time) else if (enchantDuration.leftduration > time)
{ {
enchat.leftduration -= time; enchantDuration.leftduration -= time;
} }
} }
} }
@@ -889,8 +890,9 @@ namespace Game.Entities
if (slot >= EnchantmentSlot.Max) if (slot >= EnchantmentSlot.Max)
return; return;
foreach (var enchantDuration in m_enchantDuration) for (var i = 0; i < m_enchantDuration.Count; ++i)
{ {
var enchantDuration = m_enchantDuration[i];
if (enchantDuration.item == item && enchantDuration.slot == slot) if (enchantDuration.item == item && enchantDuration.slot == slot)
{ {
enchantDuration.item.SetEnchantmentDuration(enchantDuration.slot, enchantDuration.leftduration, this); enchantDuration.item.SetEnchantmentDuration(enchantDuration.slot, enchantDuration.leftduration, this);
@@ -906,8 +908,9 @@ namespace Game.Entities
} }
void RemoveEnchantmentDurations(Item item) void RemoveEnchantmentDurations(Item item)
{ {
foreach (var enchantDuration in m_enchantDuration) for (var i = 0; i < m_enchantDuration.Count; ++i)
{ {
var enchantDuration = m_enchantDuration[i];
if (enchantDuration.item == item) if (enchantDuration.item == item)
{ {
// save duration in item // save duration in item
@@ -919,8 +922,9 @@ namespace Game.Entities
void RemoveEnchantmentDurationsReferences(Item item) void RemoveEnchantmentDurationsReferences(Item item)
{ {
foreach (var enchantDuration in m_enchantDuration) for (var i = 0; i < m_enchantDuration.Count; ++i)
{ {
var enchantDuration = m_enchantDuration[i];
if (enchantDuration.item == item) if (enchantDuration.item == item)
m_enchantDuration.Remove(enchantDuration); m_enchantDuration.Remove(enchantDuration);
} }
@@ -929,8 +933,9 @@ namespace Game.Entities
public void RemoveArenaEnchantments(EnchantmentSlot slot) public void RemoveArenaEnchantments(EnchantmentSlot slot)
{ {
// remove enchantments from equipped items first to clean up the m_enchantDuration list // remove enchantments from equipped items first to clean up the m_enchantDuration list
foreach (var enchantDuration in m_enchantDuration) for (var i = 0; i < m_enchantDuration.Count; ++i)
{ {
var enchantDuration = m_enchantDuration[i];
if (enchantDuration.slot == slot) if (enchantDuration.slot == slot)
{ {
if (enchantDuration.item && enchantDuration.item.GetEnchantmentId(slot) != 0) if (enchantDuration.item && enchantDuration.item.GetEnchantmentId(slot) != 0)