コード例 #1
0
        static bool Prefix(PreciseStrike __instance, RulePrepareDamage evt)
        {
            if (!evt.Target.isFlankedByAttacker(__instance.Owner.Unit) || evt.DamageBundle.Weapon == null)
            {
                return(false);
            }
            bool flag = (bool)__instance.Owner.State.Features.SoloTactics;

            if (!flag)
            {
                foreach (UnitEntityData unitEntityData in evt.Target.CombatState.EngagedBy)
                {
                    flag = unitEntityData.Descriptor.HasFact(__instance.PreciseStrikeFact) && unitEntityData != __instance.Owner.Unit;
                    if (flag && evt.Target.isFlankedByAttacker(unitEntityData))
                    {
                        break;
                    }
                }
            }
            if (!flag)
            {
                return(false);
            }
            BaseDamage damage = __instance.Damage.CreateDamage();

            evt.DamageBundle.Add(damage);
            return(false);
        }
コード例 #2
0
        static bool Prefix(PreciseStrike __instance, RulePrepareDamage evt)
        {
            BlueprintUnitFact preciseStrikeFact = __instance.PreciseStrikeFact;

            Func <UnitEntityData, UnitEntityData, UnitEntityData, bool> hasPreciseStrike =
                (target, owner, flankingPartner) => owner.Descriptor.State.Features.SoloTactics || flankingPartner.Descriptor.HasFact(preciseStrikeFact);

            FlankingParameters flankingParameters = new FlankingParameters(typeof(PreciseStrike_OnEventAboutToTrigger_Patch), __instance.Owner.Unit, hasPreciseStrike);

            UnitCombatState_get_IsFlanked_Patch.PushFlankingParameters(flankingParameters);

            return(true);
        }