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); }
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); }
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); }
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); }
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); }