static void Postfix(BlueprintItemEquipmentUsable __instance, UnitDescriptor unit, ref bool __result) { if (__result == true) { return; } if (__instance.RequireUMDIfCasterHasNoSpellInSpellList) { var unit_part = unit.Get <UnitPartFamiliarFreeItemUse>(); if (unit_part == null || !unit_part.isActive()) { return; } __result = true; } }
public bool IsAvailableFor(AbilityData ability) { //UnityModManager.Logger.Log("Enter.00"); //UnityModManager.Logger.Log("Rua Rua 1"); var unit = ability.Caster; //UnityModManager.Logger.Log("Rua Rua 1.5"); if (ability == null || !unit.HasFact(ArcaneReservoir.reservoir)) { return(false); } //UnityModManager.Logger.Log("Rua Rua 2"); SpellSlot spellSlot = ability.ParamSpellSlot; //UnityModManager.Logger.Log("Rua Rua 2.5"); AbilityData spell = (spellSlot != null) ? spellSlot.Spell : null; //UnityModManager.Logger.Log("Rua Rua 3"); ItemEntity item = (spell != null) ? spell.SourceItem : null; //UnityModManager.Logger.Log("Rua Rua 3.5"); BlueprintItemEquipmentUsable blueprintItm = (item != null) ? (item.Blueprint as BlueprintItemEquipmentUsable) : null; // UnityModManager.Logger.Log("Rua Rua 4"); if (blueprintItm != null) { //UnityModManager.Logger.Log("Rua Rua 5"); if (blueprintItm.Type == UsableItemType.Scroll) { int spellLevel = blueprintItm.SpellLevel; return(spellLevel >= 2); } if (blueprintItm.Type == UsableItemType.Wand) { int spellLevel = blueprintItm.SpellLevel; int charges = item.Charges; return(spellLevel >= 2 && charges >= 5); } if (blueprintItm.Type == UsableItemType.Potion) { int spellLevel = blueprintItm.SpellLevel; return(spellLevel >= 2); } return(false); } else { return(false); } }
public override void Apply(AbilityExecutionContext context, TargetWrapper target) { UnitDescriptor unit = context.MaybeOwner.Descriptor; AbilityData spell = context.Ability.ParamSpellSlot.Spell; ItemEntity item = spell.SourceItem; BlueprintItemEquipmentUsable blueprintItm = spell.SourceItemUsableBlueprint; int spellLevel = blueprintItm.SpellLevel; unit.Resources.Restore(ArcaneReservoir.resource, spellLevel / 2); if (blueprintItm.Type == UsableItemType.Wand) { for (int i = 1; i <= 5; i++) { item.SpendCharges(unit); } } else { item.SpendCharges(unit); } }