public void ruleSavingThrowTriggered(RuleSavingThrow evt) { var context = evt.Reason?.Context; if (context == null) { return; } var caster = context.MaybeCaster; if (caster == null) { return; } if (caster != this.Owner.Unit) { return; } if (context?.SourceAbility.GetComponent <DisbeliefSpell>() == null) { context = ShadowSpells.extractMainContext(context, caster); if (context == null) { return; } if (!ShadowSpells.is_making_disbelief_save) { return; } } if (context.SpellSchool == school && (save_type == SavingThrowType.Unknown || evt.Type == save_type) && (context?.SourceAbility.GetComponent <DisbeliefSpell>() != null || !evt.Initiator.Ensure <UnitPartDisbelief>().attemptedDisbelief(context)) ) { var cl_check = RulebookEvent.Dice.D(new DiceFormula(1, DiceType.D20)) + evt.Reason.Context.Params.CasterLevel; if (cl_check > evt.DifficultyClass) { Common.AddBattleLogMessage("Changing spell DC for " + evt.Initiator.CharacterName + $" form {evt.DifficultyClass} to {cl_check} due to {this.Fact.Name}"); Helpers.SetField(evt, "DifficultyClass", cl_check); } } }
static public MechanicsContext extractMainContext(MechanicsContext context, UnitEntityData context_caster) { var main_context = context?.SourceAbilityContext; var caster = context_caster ?? main_context?.MaybeCaster; var summoned_context = ShadowSpells.getShadowBuff(caster?.Descriptor)?.MaybeContext?.SourceAbilityContext; if (summoned_context != null) { return(summoned_context); } var parent_context = caster?.Get <UnitPartUseShadowContext>()?.maybeGetShadowContext(main_context); return(parent_context ?? main_context); }
public override void OnEventAboutToTrigger(RuleSavingThrow evt) { var context = evt.Reason?.Context; if (context == null) { return; } var caster = context.MaybeCaster; if (caster == null) { return; } if (context?.SourceAbility.GetComponent <DisbeliefSpell>() == null) { context = ShadowSpells.extractMainContext(context, caster); if (context == null) { return; } if (!ShadowSpells.is_making_disbelief_save) { return; } } if (context.SpellSchool == school && (save_type == SavingThrowType.Unknown || evt.Type == save_type) && (context?.SourceAbility.GetComponent <DisbeliefSpell>() != null || !evt.Initiator.Ensure <UnitPartDisbelief>().attemptedDisbelief(context)) ) { int bonus = this.value.Calculate(this.Fact.MaybeContext); evt.AddTemporaryModifier(evt.Initiator.Stats.SaveWill.AddModifier(bonus, (GameLogicComponent)this, descriptor)); evt.AddTemporaryModifier(evt.Initiator.Stats.SaveReflex.AddModifier(bonus, (GameLogicComponent)this, descriptor)); evt.AddTemporaryModifier(evt.Initiator.Stats.SaveFortitude.AddModifier(bonus, (GameLogicComponent)this, descriptor)); } }
private MechanicsContext getContext(MechanicsContext context) { return(ShadowSpells.extractMainContext(context, this.Owner.Unit)); }