コード例 #1
0
 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;
     }
 }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
            }
        }