예제 #1
0
        private void AddBaseModifiers(GenericItem baseItem, ModifiableItem item)
        {
            int        modifierCount = CalculateAmountOfModifiers(baseItem.maxModifierCount);
            List <int> indexCache    = new List <int>();

            for (int i = 0; i < modifierCount; i++)
            {
                int index;
                do
                {
                    index = Random.Range(0, baseItem.normalModifiers.Count);
                }while (indexCache.Contains(index));
                indexCache.Add(index);
                ItemStatModifier modifier = baseItem.normalModifiers[index];

                item.AddModifier(modifier, baseItem.modifierQuality);
            }
        }
예제 #2
0
        public void Reroll()
        {
            if (previouseSelectedSlot == null || previouseSelectedSlot.GetModifier() == null)
            {
                return;
            }

            //get mod and pay price
            ModifiableItem.Modifier mod = previouseSelectedSlot.GetModifier();
            int price = (itemSlot.item.rarity == Rank.Rare && mod.rarity == Rank.Normal) ? rerollPrices[1] : rerollPrices[(int)mod.rarity];
            int payed = playerInventory.GetGems(price);

            if (payed == 0)
            {
                return;
            }

            int index = (itemSlot.item as ModifiableItem).modifiers.IndexOf(mod);

            (itemSlot.item as ModifiableItem).modifiers.Remove(mod);

            //get baseModifier
            GenericItem      baseItem = GenericItem.GetFromID(itemSlot.item.itemID);
            ItemStatModifier baseMod;

            do
            {
                baseMod = baseItem.GetRandomModifier(mod.rarity);
            }while ((itemSlot.item as ModifiableItem).modifiers.Find(x => x.name == baseMod.name) != null);

            ModifiableItem.Modifier newMod = new ModifiableItem.Modifier(baseMod, baseItem.modifierQuality);

            //upgrade modifier if rerolled modifier was rare
            if (itemSlot.item.rarity == Rank.Rare && mod.rarity == Rank.Normal)
            {
                newMod.value *= 1 + PlayerInfo.GetGlobalParameters().rareValueImprovement;
            }



            (itemSlot.item as ModifiableItem).modifiers.Insert(index, newMod);
            LoadModifiers(itemSlot.item);
            FindObjectOfType <SavingSystem>().Save("PlayerData", SaveType.All);
        }
예제 #3
0
        private void SetItemRarity(GenericItem baseItem, ModifiableItem item, float soulEnergyLevel)
        {
            float rand = Random.Range(0, 1f);

            rand = Mathf.Min(rand * (1 + Mathf.Lerp(0, 0.15f, soulEnergyLevel)), 1);
            //normal
            if (rand <= normalDropLimit)
            {
                item.rarity = Rank.Normal;
                return;
            }

            //rare+
            foreach (var modifier in item.modifiers)
            {
                modifier.value *= 1 + PlayerInfo.GetGlobalParameters().rareValueImprovement;
                modifier.rarity = Rank.Rare;
            }
            if (rand <= rareDropLimit)
            {
                item.rarity = Rank.Rare;
                return;
            }

            //epic+
            item.AddModifier(baseItem.GetRandomModifier(Rank.Epic), baseItem.modifierQuality);
            if (rand <= epicDropLimit || baseItem.legendaryModifiers.Count < 1)
            {
                item.rarity = Rank.Epic;
                return;
            }

            //unique
            item.AddModifier(baseItem.GetRandomModifier(Rank.Legendary), baseItem.modifierQuality);
            item.rarity = Rank.Legendary;
        }
예제 #4
0
 public ModifiableItem(GenericItem baseItem) : base(baseItem)
 {
 }
예제 #5
0
 public Drop(GenericItem item, float prob)
 {
     this.item        = item;
     this.probability = prob;
 }