Example #1
0
        public static BlueprintAbility ExtractSpell([NotNull] ItemEntity item)
        {
            ItemEntityUsable itemEntityUsable = item as ItemEntityUsable;

            if (itemEntityUsable?.Blueprint.Type != UsableItemType.Scroll)
            {
                return(null);
            }
            return(itemEntityUsable.Blueprint.Ability.Parent ? itemEntityUsable.Blueprint.Ability.Parent : itemEntityUsable.Blueprint.Ability);
        }
Example #2
0
            public static void Postfix(bool __state, ItemEntity __instance, ref bool __result, UnitDescriptor user)
            {
                if (__state)
                {
                    BlueprintItemEquipment blueprintItemEquipment = __instance.Blueprint as BlueprintItemEquipment;
                    if (!blueprintItemEquipment || !blueprintItemEquipment.GainAbility)
                    {
                        __result = false;
                        return;
                    }
                    if (!__instance.IsSpendCharges)
                    {
                        __result = true;
                        return;
                    }
                    bool hasNoCharges = false;
                    if (__instance.Charges > 0)
                    {
                        ItemEntityUsable itemEntityUsable = new ItemEntityUsable((BlueprintItemEquipmentUsable)__instance.Blueprint);
                        if (user.State.Features.HandOfMagusDan && itemEntityUsable.Blueprint.Type == UsableItemType.Scroll)
                        {
                            RuleRollDice ruleRollDice = new RuleRollDice(user.Unit, new DiceFormula(1, DiceType.D100));
                            Rulebook.Trigger(ruleRollDice);
                            if (ruleRollDice.Result <= 25)
                            {
                                __result = true;
                                return;
                            }
                        }

                        if (user.IsPlayerFaction)
                        {
                            __result = true;
                            return;
                        }

                        --__instance.Charges;
                    }
                    else
                    {
                        hasNoCharges = true;
                    }

                    if (__instance.Charges >= 1 || blueprintItemEquipment.RestoreChargesOnRest)
                    {
                        __result = !hasNoCharges;
                        return;
                    }

                    if (__instance.Count > 1)
                    {
                        __instance.DecrementCount(1);
                        __instance.Charges = 1;
                    }
                    else
                    {
                        ItemsCollection collection = __instance.Collection;
                        collection?.Remove(__instance);
                    }

                    __result = !hasNoCharges;
                }
            }
        public bool mod_SpendCharges(UnitDescriptor user)
        {
            if (!KingmakerPatchSettings.Cheats.InfiniteItemUse)
            {
                return(this.source_SpendCharges(user));
            }

            var blueprintItemEquipment = this.Blueprint as BlueprintItemEquipment;

            if (!blueprintItemEquipment || !blueprintItemEquipment.GainAbility)
            {
                UberDebug.LogError(this.Blueprint, $"Item {this.Blueprint} doesn't gain ability");
                return(false);
            }

            if (!this.IsSpendCharges)
            {
                return(true);
            }

            var hasCharges = false;

            if (this.Charges > 0)
            {
                var itemEntityUsable = new ItemEntityUsable((BlueprintItemEquipmentUsable)this.Blueprint);

                if (user.State.Features.HandOfMagusDan && itemEntityUsable.Blueprint.Type == UsableItemType.Scroll)
                {
                    var ruleRollDice = new RuleRollDice(user.Unit, new DiceFormula(1, DiceType.D100));

                    Rulebook.Trigger(ruleRollDice);

                    if (ruleRollDice.Result <= 25)
                    {
                        return(true);
                    }
                }

                if (user.IsPlayerFaction)
                {
                    return(true);
                }

                --this.Charges;
            }
            else
            {
                hasCharges = true;
                UberDebug.LogError("Has no charges");
            }

            if (this.Charges >= 1 || blueprintItemEquipment.RestoreChargesOnRest)
            {
                return(!hasCharges);
            }

            if (this.Count > 1)
            {
                this.DecrementCount(1);
                this.Charges = 1;
            }
            else
            {
                ItemsCollection collection = this.Collection;
                collection?.Remove(this);
            }

            return(!hasCharges);
        }