コード例 #1
0
        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);
        }
コード例 #2
0
 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);
 }