Exemple #1
0
    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;
    }
Exemple #2
0
    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;
            }
        }
    }