示例#1
0
        internal static void Invoke(DetectedSpecialSpellData args)
        {
            var invocationList = OnDetect?.GetInvocationList();

            if (invocationList != null)
            {
                foreach (var m in invocationList)
                {
                    m?.DynamicInvoke(args);
                }
            }
        }
        internal static bool Invoke(DetectedSpecialSpellData args)
        {
            var invocationList = OnUpdate?.GetInvocationList();

            if (invocationList != null)
            {
                foreach (var m in invocationList)
                {
                    m?.DynamicInvoke(args);
                }
            }

            return(true);
        }
示例#3
0
        internal static void Add(DetectedSpecialSpellData data)
        {
            if (data == null)
            {
                return;
            }

            if (DetectedSpecialSpells.Any(s => s.Position.Equals(data.Position) || s.Object.IdEquals(data.Object)))
            {
                Console.WriteLine($"Already Detected {data.Data.Hero.ToString() + data.Data.Slot}");
                return;
            }

            OnSpecialSpellDetected.Invoke(data);
            DetectedSpecialSpells.Add(data);
        }
示例#4
0
        private static void GameObject_OnCreate(GameObject sender, EventArgs args)
        {
            var partical = sender as Obj_GeneralParticleEmitter;

            if (partical == null)
            {
                return;
            }

            var data = SpecialSpellsDatabase.Current.FirstOrDefault(s => !string.IsNullOrEmpty(s.ParticalName) && s.ParticalName.Equals(partical.Name));

            if (data == null)
            {
                return;
            }

            var correctObject = ObjectManager.Get <Obj_AI_Base>().OrderBy(o => o.Distance(partical)).FirstOrDefault(o => !string.IsNullOrEmpty(data.TargetName) && o.Name.Equals(data.TargetName));

            if (correctObject == null)
            {
                return;
            }

            var caster = EntityManager.Heroes.AllHeroes.OrderBy(e => e.Distance(correctObject)).FirstOrDefault(h => h.Hero.Equals(data.Hero));

            if (caster == null)
            {
                return;
            }

            var detected = new DetectedSpecialSpellData
            {
                Caster    = caster,
                Object    = correctObject,
                Position  = correctObject.Position,
                Data      = data,
                StartTick = Core.GameTickCount
            };

            Add(detected);
        }
示例#5
0
        private static void OnSpecialSpellUpdate_OnUpdate(DetectedSpecialSpellData args)
        {
            if (!args.IsEnemy || !Spells.E.IsReady() || !args.WillHit(Player.Instance))
            {
                return;
            }

            var spellname = args.Data.MenuItemName;
            var spell     = EnabledSpells.FirstOrDefault(s => s.SpellName.Equals(spellname));

            if (spell == null)
            {
                Logger.Warn($"{spellname} Not valid Spell");
                return;
            }

            if (!spell.Enabled && (!Meniu.BlockExecute || Player.Instance.PredictHealth(args.TicksLeft) > args.GetSpellDamage(Player.Instance)))
            {
                Logger.Warn($"{spellname} Not Enabled from Menu");
                return;
            }

            Block(args, spell);
        }
示例#6
0
        private static void Obj_AI_Base_OnProcessSpellCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
        {
            var caster = sender as AIHeroClient;

            if (caster == null)
            {
                return;
            }

            var casterData = SpecialSpellsDatabase.Current.Where(s => s.Hero.Equals(caster.Hero)).ToArray();

            if (casterData == null || !casterData.Any())
            {
                return;
            }

            var target = args.Target as Obj_AI_Base;

            if (target != null)
            {
                var targetSpell = casterData.FirstOrDefault(s => !string.IsNullOrEmpty(s.TargetName) && s.TargetName.Equals(target.Name));
                if (targetSpell != null && target.Buffs.Any(b => b.Caster.IdEquals(caster)) && target.Health <= targetSpell.TargetHealth)
                {
                    var detected = new DetectedSpecialSpellData
                    {
                        Caster    = caster,
                        Object    = target,
                        Position  = target.Position,
                        Data      = targetSpell,
                        StartTick = Core.GameTickCount
                    };

                    Add(detected);
                    return;
                }

                var spellData = casterData.FirstOrDefault(s => !string.IsNullOrEmpty(s.SpellName) && s.SpellName.Equals(args.SData.Name));
                if (spellData != null)
                {
                    var detected = new DetectedSpecialSpellData
                    {
                        Caster    = caster,
                        Target    = target,
                        Data      = spellData,
                        Position  = args.End,
                        StartTick = Core.GameTickCount
                    };

                    Add(detected);
                    return;
                }
            }

            var spelldata = casterData.FirstOrDefault(s => !string.IsNullOrEmpty(s.SpellName) && s.SpellName.Equals(args.SData.Name, StringComparison.CurrentCultureIgnoreCase));

            if (spelldata == null)
            {
                return;
            }

            var detectedData = new DetectedSpecialSpellData
            {
                Caster    = caster,
                Data      = spelldata,
                Position  = caster.ServerPosition,
                StartTick = Core.GameTickCount
            };

            Add(detectedData);
        }