private void ApplyAbilityModifier(SaveSituation sit) { string gaugeName = Abilities.AbilityGaugeNameFromType(sit.abilityType); int bonus = Sheet.AbilityScoreModifierValue(character.GaugeByName(gaugeName)); sit.saveValue.Modify(new Modifier(bonus, sit.abilityType.ToString().ToLower())); }
private void ApplySpellDc(SaveSituation sit) { if (sit.context == SaveContext.SPELL && sit.spell != null) { sit.DC.ChangeCurrentAndMax(8 + character.ProficiencyModifier() + SpellDCAbilityModifier(sit.spell)); } }
public CastRoutine SpellSavingThrow(SpellAttackEffector failure,SpellAttackEffector success,AbilityType abilityType) { return((AT.Battle.Actor caster,AT.Battle.Action cast,List <AT.ATTile> targets) => { AT.Battle.Cast c = cast as AT.Battle.Cast; foreach (AT.ATTile target in targets) { SaveSituation sit = new SaveSituation(target.FirstOccupant.ActorComponent.CharSheet, cast.actor.CharSheet, abilityType, SaveContext.SPELL, c.Spell); List <AT.Character.Effect.GenericEffect> resultingEffects = null; ResultType result = sit.GetResult(); switch (result) { case ResultType.SUCCESS: resultingEffects = success.Invoke(cast,target); break; case ResultType.FAILURE: resultingEffects = failure.Invoke(cast,target); break; } CharacterCastingAnimation castingAnims = caster.GetComponent <CharacterCastingAnimation>(); if (castingAnims != null) { castingAnims.SetupAndDoCastAnimation(cast); castingAnims.OneShotSpellRelease((animationInst) => { if (resultingEffects != null) { foreach (AT.Character.Effect.GenericEffect effect in resultingEffects) { effect.ApplyTo(target.FirstOccupant.CharSheet,cast); } } }); castingAnims.OneShotAnimEnded((animationInst) => { cast.CallOnFinished(); }); } else { if (resultingEffects != null) { foreach (AT.Character.Effect.GenericEffect effect in resultingEffects) { effect.ApplyTo(target.FirstOccupant.CharSheet,cast); } } cast.CallOnFinished(); } } }); }
private void ApplyProficiency(SaveSituation sit) { SaveProficiency best = character.BestSaveProficiencyFromType(sit.abilityType); if (best != null) { int chPro = character.ProficiencyModifier(); int bonus = (int)Mathf.Floor(chPro * best.Ratio); sit.saveValue.Modify(new Modifier(bonus, "save proficiency")); } }