예제 #1
0
        private void Game_OnProcessSpell(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args)
        {
            if (!menu.Item("TrackEnemyWards").GetValue <bool>())
            {
                return;
            }

            if (hero.IsEnemy && hero.IsValid <Obj_AI_Hero>())
            {
                WardData wardData;
                if (WardDatabase.wardspellNames.TryGetValue(args.SData.Name.ToLower(), out wardData))
                {
                    var pos = args.End.To2D();

                    DelayAction.Add(50, () =>
                    {
                        foreach (var ward in wards)
                        {
                            if (ward.position.To2D().Distance(pos) < 50 &&
                                HelperUtils.TickCount - ward.timestamp < 100)
                            {
                                return;
                            }
                        }

                        WardTrackerInfo newWard = new WardTrackerInfo(
                            wardData,
                            pos.To3D(),
                            null
                            );

                        newWard.startPos = args.Start.To2D();
                        newWard.endPos   = args.End.To2D();

                        wards.Add(newWard);
                    });
                }
            }
        }
예제 #2
0
        private void Game_OnCreateObj(GameObject sender, EventArgs args)
        {
            /*if (sender.Name.ToLower().Contains("minion")
                || sender.Name.ToLower().Contains("turret"))
            {
                return;
            }

            if (sender.IsValid<MissileClient>())
            {
                var tMissile = sender as MissileClient;
                if (tMissile.SpellCaster.Type != GameObjectType.obj_AI_Hero)
                {
                    return;
                }
            }

            ConsolePrinter.Print(sender.Type + " : " + sender.Name);*/
                        
            if (!menu.Item("TrackEnemyWards").GetValue<bool>())
            {
                return;
            }

            //Visible ward placement
            var obj = sender as Obj_AI_Minion;
            WardData wardData;

            if (obj != null && obj.IsEnemy
                && WardDatabase.wardObjNames.TryGetValue(obj.CharData.BaseSkinName.ToLower(), out wardData))
            {
                var timestamp = HelperUtils.TickCount - (obj.MaxMana - obj.Mana) * 1000;

                WardTrackerInfo newWard = new WardTrackerInfo(
                            wardData,
                            obj.Position,
                            obj,
                            !obj.IsVisible && args == null,
                            timestamp
                            );

                wards.Add(newWard);

                DelayAction.Add(500, () =>
                {
                    if (newWard.wardObject != null && newWard.wardObject.IsValid && !newWard.wardObject.IsDead)
                    {
                        timestamp = HelperUtils.TickCount - (obj.MaxMana - obj.Mana) * 1000;

                        newWard.timestamp = timestamp;

                        foreach (var ward in wards)
                        {
                            if (ward.wardObject == null)
                            {
                                //Check for Process Spell wards
                                if (ward.position.Distance(sender.Position) < 550
                                        && Math.Abs(ward.timestamp - timestamp) < 2000)
                                {
                                    DelayAction.Add(0, () => wards.Remove(ward));
                                    break;
                                }
                            }
                        }
                    }
                });

            }

            //FOW placement
            var missile = sender as MissileClient;

            if (missile != null && missile.SpellCaster.IsEnemy)
            {
                if (missile.SData.Name.ToLower() == "itemplacementmissile")// && !missile.SpellCaster.IsVisible)
                {
                    var dir = (missile.EndPosition.To2D() - missile.StartPosition.To2D()).Normalized();
                    var pos = missile.StartPosition.To2D() + dir * 500;

                    foreach (var ward in wards) //check for visible
                    {
                        if (ward.position.To2D().Distance(pos) < 750
                            && HelperUtils.TickCount - ward.timestamp < 50)
                        {
                            return;
                        }
                    }

                    DelayAction.Add(100, () =>
                    {
                        foreach (var ward in wards) //check for OnProcessSpell
                        {
                            if (ward.position.To2D().Distance(pos) < 750
                                && HelperUtils.TickCount - ward.timestamp < 125)
                            {
                                return;
                            }
                        }

                        WardTrackerInfo newWard = new WardTrackerInfo(
                            WardDatabase.missileWardData,
                            pos.To3D(),
                            null,
                            true
                            );

                        newWard.startPos = missile.StartPosition.To2D();
                        newWard.endPos = missile.EndPosition.To2D();

                        wards.Add(newWard);
                    });
                }
            }
        }
예제 #3
0
        private void Game_OnProcessSpell(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args)
        {          

            if (!menu.Item("TrackEnemyWards").GetValue<bool>())
            {
                return;
            }

            if (hero.IsEnemy && hero.IsValid<Obj_AI_Hero>())
            {
                WardData wardData;
                if (WardDatabase.wardspellNames.TryGetValue(args.SData.Name.ToLower(), out wardData))
                {
                    var pos = args.End.To2D();

                    DelayAction.Add(50, () =>
                    {
                        foreach (var ward in wards)
                        {
                            if (ward.position.To2D().Distance(pos) < 50
                                && HelperUtils.TickCount - ward.timestamp < 100)
                            {
                                return;
                            }
                        }

                        WardTrackerInfo newWard = new WardTrackerInfo(
                            wardData,
                            pos.To3D(),
                            null
                            );

                        newWard.startPos = args.Start.To2D();
                        newWard.endPos = args.End.To2D();

                        wards.Add(newWard);
                    });
                }
            }
        }
예제 #4
0
        private void Game_OnCreateObj(GameObject sender, EventArgs args)
        {
            /*if (sender.Name.ToLower().Contains("minion")
            || sender.Name.ToLower().Contains("turret"))
            || {
            ||  return;
            || }
            ||
            || if (sender.IsValid<MissileClient>())
            || {
            ||  var tMissile = sender as MissileClient;
            ||  if (tMissile.SpellCaster.Type != GameObjectType.obj_AI_Hero)
            ||  {
            ||      return;
            ||  }
            || }
            ||
            || ConsolePrinter.Print(sender.Type + " : " + sender.Name);*/

            if (!menu.Item("TrackEnemyWards").GetValue <bool>())
            {
                return;
            }

            //Visible ward placement
            var      obj = sender as Obj_AI_Minion;
            WardData wardData;

            if (obj != null && obj.IsEnemy &&
                WardDatabase.wardObjNames.TryGetValue(obj.CharData.BaseSkinName.ToLower(), out wardData))
            {
                var timestamp = HelperUtils.TickCount - (obj.MaxMana - obj.Mana) * 1000;

                WardTrackerInfo newWard = new WardTrackerInfo(
                    wardData,
                    obj.Position,
                    obj,
                    !obj.IsVisible && args == null,
                    timestamp
                    );

                wards.Add(newWard);

                DelayAction.Add(500, () =>
                {
                    if (newWard.wardObject != null && newWard.wardObject.IsValid && !newWard.wardObject.IsDead)
                    {
                        timestamp = HelperUtils.TickCount - (obj.MaxMana - obj.Mana) * 1000;

                        newWard.timestamp = timestamp;

                        foreach (var ward in wards)
                        {
                            if (ward.wardObject == null)
                            {
                                //Check for Process Spell wards
                                if (!ward.unknownDuration && Math.Abs(ward.timestamp - timestamp) < 2000)
                                {
                                    if (ward.position.Distance(sender.Position) < 25)
                                    {
                                        DelayAction.Add(0, () => wards.Remove(ward));
                                        break;
                                    }
                                    else //ward hit a wall
                                    {
                                        var projection = sender.Position.To2D().ProjectOn(ward.startPos, ward.endPos);
                                        if (projection.SegmentPoint.Distance(sender.Position.To2D()) < 100)
                                        {
                                            DelayAction.Add(0, () => wards.Remove(ward));
                                            break;
                                        }
                                    }
                                }
                                else if (ward.startPos != null) //check for FOW Wards
                                {
                                    var projection = sender.Position.To2D().ProjectOn(ward.startPos, ward.endPos);

                                    if (projection.SegmentPoint.Distance(sender.Position.To2D()) < 100 &&
                                        Math.Abs(ward.timestamp - timestamp) < 2000)
                                    {
                                        DelayAction.Add(0, () => wards.Remove(ward));
                                        break;
                                    }
                                }
                            }
                        }
                    }
                });
            }

            //FOW placement
            var missile = sender as MissileClient;

            if (missile != null && missile.SpellCaster.IsEnemy)
            {
                if (missile.SData.Name.ToLower() == "itemplacementmissile")// && !missile.SpellCaster.IsVisible)
                {
                    var dir = (missile.EndPosition.To2D() - missile.StartPosition.To2D()).Normalized();
                    var pos = missile.StartPosition.To2D() + dir * 500;

                    foreach (var ward in wards) //check for visible
                    {
                        if (ward.position.To2D().Distance(pos) < 750 &&
                            HelperUtils.TickCount - ward.timestamp < 50)
                        {
                            return;
                        }
                    }

                    DelayAction.Add(100, () =>
                    {
                        foreach (var ward in wards) //check for OnProcessSpell
                        {
                            if (ward.position.To2D().Distance(pos) < 750 &&
                                HelperUtils.TickCount - ward.timestamp < 125)
                            {
                                return;
                            }
                        }

                        WardTrackerInfo newWard = new WardTrackerInfo(
                            WardDatabase.missileWardData,
                            pos.To3D(),
                            null,
                            true
                            );

                        newWard.startPos = missile.StartPosition.To2D();
                        newWard.endPos   = missile.EndPosition.To2D();

                        wards.Add(newWard);
                    });
                }
            }
        }