public void Equip(Equipment newItem) { Equipment oldItem = null; int slotIndex = (int)newItem.equipSlot; if (currentEquipment[slotIndex] != null) { oldItem = currentEquipment[slotIndex]; if (oldItem != unarmed) { inventory.Add(oldItem); } if (oldItem.isSetItem) { if (itemSets.ContainsKey(oldItem.setPartOf)) { itemSets[oldItem.setPartOf]--; foreach (SetBonus bonus in oldItem.setPartOf.setBonuses) { if (itemSets[oldItem.setPartOf] < bonus.numSetItemsReq && setBonusEffects.ContainsKey(bonus)) { foreach (SetBonusEffect effect in setBonusEffects[bonus]) { effect.RemoveAndDestroySetBonus(); } setBonusEffects.Remove(bonus); } } if (itemSets[oldItem.setPartOf] == 0) { itemSets.Remove(oldItem.setPartOf); } } } } if (onEquipmentChanged != null) { onEquipmentChanged.Invoke(newItem, oldItem); } if (newItem.equipSlot == EquipmentSlot.Weapon) { if ((newItem as Weapon).isTwoHanded) { Unequip((int)EquipmentSlot.Shield); } PutWeaponInHand(newItem as Weapon); OnWeaponChanged(newItem as Weapon); } if (newItem.equipSlot == EquipmentSlot.Shield && currentEquipment[(int)EquipmentSlot.Weapon] != null && (currentEquipment[(int)EquipmentSlot.Weapon] as Weapon).isTwoHanded) { Unequip((int)EquipmentSlot.Weapon); } if (newItem.isSetItem) { if (itemSets.ContainsKey(newItem.setPartOf)) { itemSets[newItem.setPartOf]++; } else { itemSets.Add(newItem.setPartOf, 1); } foreach (SetBonus bonus in newItem.setPartOf.setBonuses) { if (itemSets[newItem.setPartOf] >= bonus.numSetItemsReq && !setBonusEffects.ContainsKey(bonus)) { setBonusEffects.Add(bonus, new List <SetBonusEffect>()); foreach (SetBonusEffectConfig effect in bonus.setBonusEffects) { SetBonusEffect effectInstance = (SetBonusEffect)effect.AttachEffectTo(gameObject); effectInstance.MyStats = playerStats; effectInstance.TheirStats = playerStats; setBonusEffects[bonus].Add(effectInstance); } } } } if (newItem.equipSlot == EquipmentSlot.Shield) { shieldModel.SetActive(true); } inventory.PlayLootSound(newItem, true); currentEquipment[slotIndex] = newItem; }
public void LoadSavedEquipment(Equipment[] loadedEquipment) { foreach (Equipment newItem in loadedEquipment) { if (newItem != null) { Equipment oldItem = null; int slotIndex = (int)newItem.equipSlot; if (currentEquipment[slotIndex] != null) { oldItem = currentEquipment[slotIndex]; } if (onEquipmentChanged != null) { onEquipmentChanged.Invoke(newItem, oldItem); } if (newItem.equipSlot == EquipmentSlot.Weapon) { PutWeaponInHand(newItem as Weapon); OnWeaponChanged(newItem as Weapon); } if (newItem.equipSlot == EquipmentSlot.Shield) { shieldModel.SetActive(true); } if (newItem.isSetItem) { if (itemSets.ContainsKey(newItem.setPartOf)) { itemSets[newItem.setPartOf]++; } else { itemSets.Add(newItem.setPartOf, 1); } foreach (SetBonus bonus in newItem.setPartOf.setBonuses) { if (itemSets[newItem.setPartOf] >= bonus.numSetItemsReq && !setBonusEffects.ContainsKey(bonus)) { setBonusEffects.Add(bonus, new List <SetBonusEffect>()); foreach (SetBonusEffectConfig effect in bonus.setBonusEffects) { SetBonusEffect effectInstance = (SetBonusEffect)effect.AttachEffectTo(gameObject); effectInstance.MyStats = playerStats; effectInstance.TheirStats = playerStats; setBonusEffects[bonus].Add(effectInstance); } } } } currentEquipment[slotIndex] = newItem; } } }