Exemplo n.º 1
0
        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
                               ) });
        }
Exemplo n.º 2
0
        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);
        }