static bool Prefix(RuleCheckCastingDefensively __instance, RulebookEventContext context) { if (__instance.Spell.Blueprint.GetComponent <AbilityKineticist>() == null) { return(true); } var kineticist_part = __instance.Initiator.Get <UnitPartKineticist>(); if (kineticist_part == null) { return(true); } var tr = Harmony12.Traverse.Create(__instance); var rule = Rulebook.Trigger <RuleCalculateAbilityParams>(new RuleCalculateAbilityParams(__instance.Initiator, __instance.Spell)); var ability_params = rule.Result; tr.Property("DC").SetValue(15 + ability_params.SpellLevel * 2); var bonus_concentration = Helpers.GetField <int>(rule, "m_BonusConcentration"); tr.Property("Concentration").SetValue(bonus_concentration + kineticist_part.ClassLevel + kineticist_part.MainStatBonus); tr.Property("ResultRollRaw").SetValue(RulebookEvent.Dice.D20); return(false); }
static bool Prefix(MagusController __instance, RuleCheckCastingDefensively evt) { if (!evt.Success) { return(false); } foreach (UnitEntityData attacker in evt.Initiator.CombatState.EngagedBy) { UnitPartMagus unitPartMagus = attacker.Get <UnitPartMagus>(); if (unitPartMagus != null && (bool)unitPartMagus.Counterstrike) { Game.Instance.CombatEngagementController.ForceAttackOfOpportunity(attacker, evt.Initiator); } else if ((attacker.Get <UnitPartSpellbreaker>()?.active()).GetValueOrDefault()) { Game.Instance.CombatEngagementController.ForceAttackOfOpportunity(attacker, evt.Initiator); } } return(false); }