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; }
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); }