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