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)); }
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; } } }
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); }
public void OnEventDidTrigger(RuleCheckTargetFlatFooted evt) { }