public override IEnumerable <AvoidInfo> OmenHandle(BattleCharacter spellCaster) { if (spellCaster.SpellCastInfo.SpellData.EffectRange > 45) { Logger.Info("Spell range is > 45. Does this require specific logic?"); } //var loc = spellCaster.SpellCastInfo.CastLocation != Vector3.Zero ? spellCaster.SpellCastInfo.CastLocation : spellCaster.Location; Vector3 center; float range = 0f; if (OmenOverrideManager.TryGetOverride(spellCaster.SpellCastInfo.ActionId, out var omenOverride)) { range = Range(spellCaster, out center, omenOverride.MatrixOverride, omenOverride.RangeOverride); } else { range = Range(spellCaster, out center); } Logger.Info($"Avoid Cirlce: [{center}][Range: {range}]"); var cached = spellCaster.CastingSpellId; return(new[] { AvoidanceManager.AddAvoidLocation( () => spellCaster.IsValid && spellCaster.CastingSpellId == cached, //can run () => center, //LeashPoint 50f, //Leash Radius bc => range + 0.5f, //radiusProducer bc => center, //locationProducer () => new[] { spellCaster } //collectionProducer ) }); }
private static bool IsValid(BattleCharacter c) { //if (!c.InCombat) // return false; if (c.IsMe) { return(false); } //if (!c.StatusFlags.HasFlag(StatusFlags.Hostile)) // return false; if (c.CastingSpellId == 0) { return(false); } //if (c.DistanceSqr() < 50 * 50) //{ if (c.SpellCastInfo.SpellData.Omen != 0 || OmenOverrideManager.HasOverride(c.CastingSpellId)) { if (!AvoidanceManager.AvoidInfos.Any(s => s.Collection.Contains(c))) { return(true); } } //} //var valid = c.InCombat && !c.IsMe && c.StatusFlags.HasFlag(StatusFlags.Hostile) && c.CastingSpellId != 0 && // c.SpellCastInfo.SpellData.Omen != 0 && //skip spells that don't have an omen // // !AvoidanceManager.AvoidInfos.Any(s => s.Collection.Contains(c)); return(false); }