Пример #1
0
        static bool hasShatterDefensesBuff(RuleCheckTargetFlatFooted evt)
        {
            if (evt.Target?.Buffs == null)
            {
                return(false);
            }

            return(evt.Target.Buffs.Enumerable.Any(b => b.Blueprint == Rebalance.shatter_defenses_target_buff && b.MaybeContext?.MaybeCaster == evt.Initiator));
        }
Пример #2
0
 static void Postfix(FlatFootedIgnore __instance, RuleCheckTargetFlatFooted evt)
 {
     if (Mod.Enabled && FixBlindFightDistance && !evt.IgnoreConcealment)
     {
         if (evt.Target.Descriptor == __instance.Owner &&
             __instance.Type == FlatFootedIgnoreType.BlindFight &&
             evt.Initiator.CombatState.IsEngage(evt.Target))
         {
             evt.IgnoreConcealment = true;
         }
     }
 }
Пример #3
0
 public void OnEventAboutToTrigger(RuleCheckTargetFlatFooted evt)
 {
     if (evt.Target.Descriptor != Owner)
     {
         return;
     }
     if (!HasPanache(Owner))
     {
         return;
     }
     evt.IgnoreConcealment = true;
     evt.IgnoreVisibility  = true;
 }
        static void Prefix(RuleCheckTargetFlatFooted __instance)
        {
            bool ignore_initiative = (__instance.Target.Get <UnitPartNotFlatFootedBeforeInitiative>()?.active()).GetValueOrDefault();
            bool is_flat_footed    = __instance.ForceFlatFooted ||
                                     !__instance.Target.CombatState.CanActInCombat && !__instance.IgnoreVisibility && !ignore_initiative ||
                                     (__instance.Target.Descriptor.State.IsHelpless ||
                                      __instance.Target.Descriptor.State.HasCondition(UnitCondition.Stunned) ||
                                      !__instance.Target.Memory.Contains(__instance.Initiator) && !__instance.IgnoreVisibility) ||
                                     (UnitPartConcealment.Calculate(__instance.Target, __instance.Initiator, false) == Concealment.Total && !__instance.IgnoreConcealment ||
                                      __instance.Target.Descriptor.State.HasCondition(UnitCondition.LoseDexterityToAC)) ||
                                     ((__instance.Target.Descriptor.State.HasCondition(UnitCondition.Shaken) ||
                                       __instance.Target.Descriptor.State.HasCondition(UnitCondition.Frightened)) &&
                                      (bool)__instance.Initiator.Descriptor.State.Features.ShatterDefenses);

            //TODO: fix shatter defenses not to apply on first hit
            var tr = Harmony12.Traverse.Create(__instance);

            tr.Property("IsFlatFooted").SetValue(is_flat_footed);
        }
Пример #5
0
 public void OnEventDidTrigger(RuleCheckTargetFlatFooted evt)
 {
 }