private bool AllowedCurrencies(object o)
        {
            PoECurrencyData c = o as PoECurrencyData;

            if (c.name == "Vaal Orb" || c.name == "Orb of Chance" || c.name == "Glassblower's Bauble")
            {
                return(false);
            }
            return(true);
        }
Beispiel #2
0
        public string ApplyCurrency(PoECurrencyData currency, int tries = 1)
        {
            if (BenchItem == null)
            {
                return("Bench is empty");
            }
            string c = currency.name;
            string res;

            switch (c)
            {
            case "Chaos Orb":
                if (BenchItem.Rarity != ItemRarity.Rare)
                {
                    return("Invalid item rarity for selected currency");
                }
                DoReroll(null, BaseValidMods, ItemRarity.Rare, false, tries);
                break;

            case "Orb of Alteration":
                if (BenchItem.Rarity != ItemRarity.Magic)
                {
                    return("Invalid item rarity for selected currency");
                }
                DoReroll(null, BaseValidMods, ItemRarity.Magic, false, tries);
                break;

            case "Orb of Alchemy":
                if (BenchItem.Rarity != ItemRarity.Normal)
                {
                    return("Invalid item rarity for selected currency");
                }
                DoReroll(null, BaseValidMods, ItemRarity.Rare, false, tries);
                break;

            case "Orb of Transmutation":
                if (BenchItem.Rarity != ItemRarity.Normal)
                {
                    return("Invalid item rarity for selected currency");
                }
                DoReroll(null, BaseValidMods, ItemRarity.Magic, false, tries);
                break;

            case "Exalted Orb":
                if (BenchItem.Rarity != ItemRarity.Rare)
                {
                    return("Invalid item rarity for selected currency");
                }
                if (BenchItem.LiveMods.Count >= 2 * BenchItem.GetAffixLimit())
                {
                    return("Item cannot have another mod");
                }
                res = DoAddMod(ItemRarity.Rare, false, tries, 20) ? null : "Item has no valid rollable mods";
                if (res != null)
                {
                    return(res);
                }
                break;

            case "Regal Orb":
                if (BenchItem.Rarity != ItemRarity.Magic)
                {
                    return("Invalid item rarity for selected currency");
                }
                DoAddMod(ItemRarity.Rare, true, tries, 5);
                break;

            case "Orb of Augmentation":
                if (BenchItem.Rarity != ItemRarity.Magic)
                {
                    return("Invalid item rarity for selected currency");
                }
                if (BenchItem.LiveMods.Count >= 2 * BenchItem.GetAffixLimit())
                {
                    return("Item cannot have another mod");
                }
                DoAddMod(ItemRarity.Magic, true, tries, 2);
                break;

            case "Redeemer's Exalted Orb":
                res = ApplyInfExalt(ItemInfluence.Redeemer, tries);
                if (res != null)
                {
                    return(res);
                }
                break;

            case "Hunter's Exalted Orb":
                res = ApplyInfExalt(ItemInfluence.Hunter, tries);
                if (res != null)
                {
                    return(res);
                }
                break;

            case "Warlord's Exalted Orb":
                res = ApplyInfExalt(ItemInfluence.Warlord, tries);
                if (res != null)
                {
                    return(res);
                }
                break;

            case "Crusader's Exalted Orb":
                res = ApplyInfExalt(ItemInfluence.Crusader, tries);
                if (res != null)
                {
                    return(res);
                }
                break;

            case "Orb of Annulment":
                if (BenchItem.Rarity == ItemRarity.Normal)
                {
                    return("Invalid item rarity for selected currency");
                }
                DoCurrencyRolls((item) =>
                {
                    item.RemoveRandomMod();
                    if (item.QualityType != null)
                    {
                        item.BaseQuality -= 20;
                    }
                }, tries);
                break;

            case "Divine Orb":
                if (BenchItem.Rarity == ItemRarity.Normal)
                {
                    return("Invalid item rarity for selected currency");
                }
                DoCurrencyRolls((item) =>
                {
                    item.RerollExplicits();
                }, tries);
                break;

            case "Blessed Orb":
                DoCurrencyRolls((item) =>
                {
                    item.RerollImplicits();
                }, tries);
                break;

            case "Orb of Scouring":
                if (BenchItem.Rarity == ItemRarity.Normal)
                {
                    return("Invalid item rarity for selected currency");
                }
                DoCurrencyRolls((item) =>
                {
                    item.ClearMods();
                    item.Rarity = item.GetMinimumRarity();
                    item.GenerateName();
                }, tries);
                break;

            case "Remove Crafted Mods":
                DoCurrencyRolls((item) =>
                {
                    item.ClearCraftedMods();
                }, tries);
                break;

            case "Do Nothing":
                IDictionary <PoEModData, int> validatedpool = ModLogic.FindValidMods(BenchItem, BaseValidMods);
                DoCurrencyRolls((item) =>
                {
                    DoPostRoll(item, new Dictionary <PoEModData, int>(validatedpool));
                }, tries);
                break;

            case "Abrasive Catalyst":
            case "Fertile Catalyst":
            case "Imbued Catalyst":
            case "Intrinsic Catalyst":
            case "Prismatic Catalyst":
            case "Tempering Catalyst":
            case "Turbulent Catalyst":
                PoEBaseItemData itemtemplate = CraftingDatabase.AllBaseItems[BenchItem.SourceData];
                if (!CraftingDatabase.ItemClassCatalyst.Contains(itemtemplate.item_class))
                {
                    return("Invalid item type for catalysts");
                }
                if (BenchItem.QualityType == c && BenchItem.BaseQuality >= 20)
                {
                    return("Item already has max catalyst quality");
                }
                DoCurrencyRolls((item) =>
                {
                    item.ApplyCatalyst(c);
                }, tries);
                break;

            default:
                return("Unrecognized currency selected");
            }
            if (tries == 1)
            {
                string currencykey = currency.key;
                if (currencykey == "RemoveCraftedMods")
                {
                    currencykey = "Metadata/Items/Currency/CurrencyConvertToNormal";
                }
                if (currencykey != "DoNothing")
                {
                    TallyCurrency(currency.key, 1);
                }
            }

            return(null);
        }