예제 #1
0
        public static void UsePoints(Sim sim, int points, OccultTypes intended)
        {
            SpellcastingSkill spellCasting = sim.SkillManager.GetElement(SkillNames.Spellcasting) as SpellcastingSkill;
            MagicWand         wand         = MagicWand.GetWandToUse(sim, spellCasting);

            if (intended != OccultTypes.None)
            {
                if (PrivateUsePoints(sim, wand, points, intended))
                {
                    return;
                }
            }

            foreach (OccultTypes type in sMagicOccult)
            {
                if (type == intended)
                {
                    continue;
                }

                if (PrivateUsePoints(sim, wand, points, type))
                {
                    return;
                }
            }
        }
예제 #2
0
        public override MagicWand InitialPrep(Sim actor, IMagicalDefinition definition, out bool wandCreated)
        {
            actor.SkillManager.AddElement(SkillNames.Spellcasting);
            SpellcastingSkill element = actor.SkillManager.GetElement(SkillNames.Spellcasting) as SpellcastingSkill;

            wandCreated = false;
            return(MagicWand.GetWandToUse(actor, element));
        }
예제 #3
0
        public override bool IsFailure(Sim actor, IInteractionProxy proxy, IMagicalDefinition definition, out bool epicFailure)
        {
            bool fail = true;

            epicFailure = false;

            SpellcastingSkill spellcasting = actor.SkillManager.GetElement(SkillNames.Spellcasting) as SpellcastingSkill;
            MagicWand         wand         = MagicWand.GetWandToUse(actor, spellcasting);

            if (wand != null)
            {
                fail = RandomUtil.RandomChance(wand.SuccessChance(actor, GetMinSkillLevel(definition), spellcasting.SkillLevel));
                if (!fail)
                {
                    epicFailure = RandomUtil.RandomChance(wand.EpicFailChance(actor));
                }
            }

            return(fail);
        }
예제 #4
0
        private static bool PrivateIsFailure(IMagicalInteraction interaction, OccultTypes testType, out bool fail, out bool epicFailure)
        {
            fail        = false;
            epicFailure = false;

            if (!OccultTypeHelper.HasType(interaction.Actor, testType))
            {
                return(false);
            }

            switch (testType)
            {
            case OccultTypes.Witch:
                SpellcastingSkill spellcasting = interaction.Actor.SkillManager.GetElement(SkillNames.Spellcasting) as SpellcastingSkill;
                MagicWand         wand         = MagicWand.GetWandToUse(interaction.Actor, spellcasting);
                if (wand != null)
                {
                    fail = RandomUtil.RandomChance(wand.SuccessChance(interaction.Actor, interaction.SpellLevel, spellcasting.SkillLevel));
                    if (!fail)
                    {
                        epicFailure = RandomUtil.RandomChance(wand.EpicFailChance(interaction.Actor));
                    }
                }
                break;

            case OccultTypes.Fairy:
                if (interaction.SpellLevel <= interaction.Actor.SkillManager.GetSkillLevel(SkillNames.FairyMagic))
                {
                    fail = true;
                }
                break;

            case OccultTypes.Genie:
            case OccultTypes.Unicorn:
                return(false);
            }

            return(fail);
        }