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