/// <summary> /// Called when this Item gets unequipped. /// Requires map context. /// </summary> public void OnUnEquip(InventorySlot slot) { if (!IsApplied) { return; } IsApplied = false; if (!m_template.IsAmmo) { m_owner.SetVisibleItem(slot, null); } m_template.RemoveStatMods(m_owner); if (m_template.EquipSpells != null) { foreach (Spell equipSpell in m_template.EquipSpells) { if (equipSpell.IsAura) { m_owner.Auras.Remove(equipSpell); } } } for (int index = 0; index < m_template.Resistances.Length; ++index) { int resistance = m_template.Resistances[index]; if (resistance > 0) { m_owner.ModBaseResistance((DamageSchool)index, -resistance); } } if (slot == InventorySlot.Invalid) { m_owner.UpdateRangedDamage(); } else if (m_template.InventorySlotType == InventorySlotType.Shield) { m_owner.UpdateBlockChance(); } if (m_template.Set != null) { Spell[] spellArray = m_template.Set.Boni.Get(m_owner.Inventory.GetSetCount(m_template.Set) - 1U); if (spellArray != null) { foreach (Spell index in spellArray) { Aura aura = m_owner.Auras[index, true]; if (aura != null) { aura.Remove(false); } } } } if (m_hitProc != null) { m_owner.RemoveProcHandler(m_hitProc); m_hitProc = null; } m_owner.PlayerAuras.OnBeforeUnEquip(this); if (m_owner.Inventory.m_ItemEquipmentEventHandlers != null) { foreach (IItemEquipmentEventHandler equipmentEventHandler in m_owner.Inventory .m_ItemEquipmentEventHandlers) { equipmentEventHandler.OnBeforeUnEquip(this); } } m_template.NotifyUnequip(this); }
/// <summary> /// Called when this Item gets unequipped. /// Requires map context. /// </summary> public void OnUnEquip(InventorySlot slot) { if (!IsApplied) { return; } IsApplied = false; if (!m_template.IsAmmo) { m_owner.SetVisibleItem(slot, null); } m_template.RemoveStatMods(m_owner); // remove triggered buffs if (m_template.EquipSpells != null) { foreach (var spell in m_template.EquipSpells) { if (spell.IsAura) { m_owner.Auras.Remove(spell); } } } // remove procs if (m_template.HitSpells != null) { foreach (var spell in m_template.HitSpells) { m_owner.RemoveProcHandler(spell.SpellId); } } // resistances for (var i = 0; i < m_template.Resistances.Length; i++) { var res = m_template.Resistances[i]; if (res > 0) { m_owner.ModBaseResistance((DamageSchool)i, -res); } } // ammo if (slot == InventorySlot.Invalid) { // ammo m_owner.UpdateRangedDamage(); } // block rating else if (m_template.InventorySlotType == InventorySlotType.Shield) { m_owner.UpdateBlockChance(); } // set boni if (m_template.Set != null) { var setCount = m_owner.Inventory.GetSetCount(m_template.Set); var boni = m_template.Set.Boni.Get(setCount - 1); if (boni != null) { foreach (var bonus in boni) { var aura = m_owner.Auras[bonus, true]; if (aura != null) { aura.Remove(false); } } } } // enchants if (m_enchantments != null) { foreach (var enchant in m_enchantments) { if (enchant != null) { SetEnchantUnequipped(enchant); } } } // hit proc if (m_hitProc != null) { m_owner.RemoveProcHandler(m_hitProc); m_hitProc = null; } m_owner.PlayerAuras.OnBeforeUnEquip(this); if (m_owner.Inventory.m_ItemEquipmentEventHandlers != null) { foreach (var handler in m_owner.Inventory.m_ItemEquipmentEventHandlers) { handler.OnBeforeUnEquip(this); } } m_template.NotifyUnequip(this); }