internal static bool CanDismiss(AreaEffectEntityData area) => dismissibleAreas.Contains(area.Blueprint.AssetGuid);
public RuleSpellTargetCheck(MechanicsContext context, UnitEntityData target, AreaEffectEntityData areaEffect = null) : base(context.MaybeCaster, target) { Context = context; AreaEffect = areaEffect; }
static bool IsAreaEffectSpell(AreaEffectEntityData area) => area.Blueprint.AffectEnemies && area.Context.SourceAbility?.Type == AbilityType.Spell;
public void HandleAreaEffectDestroyed(AreaEffectEntityData entityData) { }
public void HandleAreaEffectSpawned(AreaEffectEntityData areaEffect) => FreezeAreaEffect(areaEffect);
internal static bool CanDismiss(UnitEntityData caster, AreaEffectEntityData area) => !caster.IsInCombat || dismissibleAreas.Contains(area.Blueprint.AssetGuid);
static public bool Prefix(AreaEffectPit __instance, MechanicsContext context, AreaEffectEntityData areaEffect, UnitEntityData unit) { var source_context = context?.SourceAbilityContext; var context2 = ShadowSpells.extractMainContext(source_context, source_context?.MaybeCaster); if (context2 == null) { return(true); } if (!unit.Ensure <UnitPartDisbelief>().attemptedDisbelief(context2)) { if (unit.Descriptor.State.HasCondition(UnitCondition.TrueSeeing)) { unit.Ensure <UnitPartDisbelief>().register(context2, true); } else { unit.Ensure <UnitPartDisbelief>().register(context2, ShadowSpells.makeDisbeliefSave(context2, unit)); } } if (unit.Ensure <UnitPartDisbelief>().disbelieved(context2)) { int illusion_reality = ShadowSpells.getSpellReality(context2); int result = RulebookEvent.Dice.D(new DiceFormula(1, DiceType.D100)); if (illusion_reality > 0 && result > illusion_reality) { Common.AddBattleLogMessage(unit.CharacterName + " avoids " + context2.SourceAbility.Name + $" effect due to disbelief (rolled {result} vs {illusion_reality}%)"); return(false); } } return(true); }