Exemplo n.º 1
0
        public void UpdatePlayerContext(PlayerContext context)
        {
            World              = context.World;
            Me                 = context.Wizards.Single(x => x.IsMe);
            CurrentBuildings   = new Dictionary <long, Building>();
            CurrentWizards     = new Dictionary <long, Wizard>();
            CurrentMinions     = new Dictionary <long, Minion>();
            CurrentProjectiles = new Dictionary <long, Projectile>();

            foreach (var unit in context.World.Buildings)
            {
                DeadBuildings.Remove(unit.Id);
                AllBuildings[unit.Id]     = unit;
                CurrentBuildings[unit.Id] = unit;
            }
            foreach (var unit in context.World.Wizards)
            {
                DeadWizards.Remove(unit.Id);
                AllWizards[unit.Id]     = unit;
                CurrentWizards[unit.Id] = unit;
            }
            foreach (var unit in context.World.Minions)
            {
                DeadMinions.Remove(unit.Id);
                AllMinions[unit.Id]     = unit;
                CurrentMinions[unit.Id] = unit;
            }

            foreach (var unit in context.World.Projectiles)
            {
                DeadProjectiles.Remove(unit.Id);
                AllProjectiles[unit.Id]     = unit;
                CurrentProjectiles[unit.Id] = unit;
            }

            foreach (var diedUnit in AllBuildings.Except(CurrentBuildings).Where(x => x.Value.IsUnion(Me) || x.Value.Life <= 36))
            {
                DeadBuildings[diedUnit.Key] = new DeadUnitInfo(context.World, diedUnit.Value, Me);
            }

            foreach (var diedUnit in AllWizards.Except(CurrentWizards).Where(x => x.Value.IsUnion(Me) || x.Value.Life <= 36))
            {
                DeadWizards[diedUnit.Key] = new DeadUnitInfo(context.World, diedUnit.Value, Me);
            }

            foreach (var diedUnit in AllMinions.Except(CurrentMinions).Where(x => x.Value.IsUnion(Me) || x.Value.Life <= 36))
            {
                DeadMinions[diedUnit.Key] = new DeadUnitInfo(context.World, diedUnit.Value, Me);
            }

            foreach (var diedUnit in AllProjectiles.Except(CurrentProjectiles))
            {
                bool isTargetTree = context.World.Trees.Any(x => x.GetDistanceTo(diedUnit.Value) < 220);
                DeadProjectiles[diedUnit.Key] = new DeadUnitInfo(context.World, diedUnit.Value, Me, isTargetTree);
            }

            AllBuildings   = CurrentBuildings;
            AllWizards     = CurrentWizards;
            AllMinions     = CurrentMinions;
            AllProjectiles = CurrentProjectiles;

            CurrentBuildingTargets = new Dictionary <long, List <LivingUnit> >();
            foreach (var building in CurrentBuildings)
            {
                var buildingUnit          = building.Value;
                var attackRange           = buildingUnit.Type == BuildingType.GuardianTower ? Game.GuardianTowerAttackRange : Game.FactionBaseAttackRange;
                var maxDamage             = buildingUnit.Type == BuildingType.GuardianTower ? Game.GuardianTowerDamage : Game.FactionBaseDamage;
                List <LivingUnit> p1Units = new List <LivingUnit>();
                List <LivingUnit> p2Units = new List <LivingUnit>();
                foreach (var minion in CurrentMinions)
                {
                    FindBuildingTarget(minion.Value, buildingUnit, attackRange, maxDamage, p1Units, p2Units);
                }
                foreach (var wizard in CurrentWizards)
                {
                    FindBuildingTarget(wizard.Value, buildingUnit, attackRange, maxDamage, p1Units, p2Units);
                }
                var buildingTargets = p1Units.Count > 0 ? p1Units : p2Units;
                CurrentBuildingTargets[building.Key] = buildingTargets;
            }

            DeadProjectiles = DeadProjectiles
                              .Where(x => x.Value.ProjectileType == ProjectileType.MagicMissile &&
                                     context.World.TickIndex < x.Value.TickIndex + 5 * 4)
                              .ToDictionary(x => x.Key, y => y.Value);

            WorldUpdated?.Invoke(this, EventArgs.Empty);
        }
Exemplo n.º 2
0
        public static FarmLocation GetBestLaserFarmLocation(bool jungle)
        {
            var bestEndPos   = new Vector2();
            var bestStartPos = new Vector2();
            var mMinionCount = 0;
            List <Obj_AI_Base> AllMinions;

            if (!jungle)
            {
                AllMinions = MinionManager.GetMinions(EMaxRange);
            }
            else
            {
                AllMinions = MinionManager.GetMinions(EMaxRange, MinionTypes.All, MinionTeam.Neutral);
            }

            var mMinionsList     = (from minions in AllMinions select minions.Position.To2D()).ToList <Vector2>();
            var possiblePosition = new List <Vector2>();

            possiblePosition.AddRange(mMinionsList);
            var Max = possiblePosition.Count;

            for (var i = 0; i < Max; i++)
            {
                for (var j = 0; j < Max; j++)
                {
                    if (possiblePosition[j] != possiblePosition[i])
                    {
                        possiblePosition.Add((possiblePosition[j] + possiblePosition[i]) / 2);
                    }
                }
            }

            foreach (var StartPositionMinion in AllMinions.Where(m => Utilities.Player.Distance(m) < ERange))
            {
                var StartPos = StartPositionMinion.Position.To2D();

                foreach (var Pos in possiblePosition)
                {
                    if (Pos.Distance(StartPos, true) <= LenghtE * LenghtE)
                    {
                        var EndPos = StartPos + LenghtE * (Pos - StartPos).Normalized();
                        var count  =
                            mMinionsList.Count(Pos2 => Pos2.Distance(StartPos, EndPos, true, true) <= 140 * 140);

                        if (count >= mMinionCount)
                        {
                            bestEndPos   = EndPos;
                            mMinionCount = count;
                            bestStartPos = StartPos;
                        }
                    }
                }
            }

            if ((!jungle && Utilities.SliderValue("e.clear.minhit") < mMinionCount) || (jungle && mMinionCount > 0))
            {
                return(new FarmLocation(bestStartPos, bestEndPos, mMinionCount));
            }
            else
            {
                return(new FarmLocation(bestStartPos, bestEndPos, 0));
            }
        } // Algorithm by Trus. Congratz bro
Exemplo n.º 3
0
        private void GameObject_OnDelete(GameObject sender, EventArgs args)
        {
            AllObjects.Remove(sender);

            var hero = sender as AIHeroClient;

            if (hero != null)
            {
                AllHeroes.Remove(hero);
                if (hero.IsEnemy)
                {
                    EnemyHeroes.Remove(hero);
                    AllEnemies.Remove(hero);
                }
                else
                {
                    AllyHeroes.Remove(hero);
                    AllAllies.Remove(hero);
                }

                return;
            }

            var minion = sender as Obj_AI_Minion;

            if (minion != null)
            {
                if (minion.Team != GameObjectTeam.Neutral)
                {
                    if (minion.GetMinionType().HasFlag(Extensions.MinionTypes.Ward))
                    {
                        AllWards.Remove(minion);
                        if (minion.IsEnemy)
                        {
                            EnemyWards.Remove(minion);
                        }
                        else
                        {
                            AllyWards.Remove(minion);
                        }
                    }
                    else
                    {
                        AllMinions.Remove(minion);
                        if (minion.IsEnemy)
                        {
                            EnemyMinions.Remove(minion);
                            AllEnemies.Remove(minion);
                        }
                        else
                        {
                            AllyMinions.Remove(minion);
                            AllAllies.Remove(minion);
                        }
                    }
                }
                else if (minion.Name != "WardCorpse")
                {
                    switch (minion.GetJungleType())
                    {
                    case Extensions.JungleType.Small:
                        SmallJungleMinions.Remove(minion);
                        break;

                    case Extensions.JungleType.Large:
                        LargeJungleMinions.Remove(minion);
                        break;

                    case Extensions.JungleType.Epic:
                        EpicJungleMinions.Remove(minion);
                        break;

                    case Extensions.JungleType.Legendary:
                        LegendaryJungleMinions.Remove(minion);
                        break;
                    }

                    AllJungleMinions.Remove(minion);
                }

                return;
            }

            var particle = sender as Obj_GeneralParticleEmitter;

            if (particle != null)
            {
                AllParticleEmitters.Remove(particle);
                return;
            }

            var turret = sender as Obj_AI_Turret;

            if (turret != null)
            {
                AllTurrets.Remove(turret);

                if (turret.IsEnemy)
                {
                    EnemyTurrets.Remove(turret);
                }
                else
                {
                    AllyTurrets.Remove(turret);
                }

                return;
            }

            var shop = sender as Obj_Shop;

            if (shop != null)
            {
                AllShops.Remove(shop);

                if (shop.IsAlly)
                {
                    AllyShops.Remove(shop);
                }
                else
                {
                    EnemyShops.Remove(shop);
                }

                return;
            }

            var spawnPoint = sender as Obj_SpawnPoint;

            if (spawnPoint != null)
            {
                AllSpawnPoints.Remove(spawnPoint);

                if (spawnPoint.IsAlly)
                {
                    AllySpawnPoints.Remove(spawnPoint);
                }
                else
                {
                    EnemySpawnPoints.Remove(spawnPoint);
                }
            }

            var inhibitor = sender as Obj_BarracksDampener;

            if (inhibitor != null)
            {
                AllInhibitors.Remove(inhibitor);

                if (inhibitor.IsAlly)
                {
                    AllyInhibitors.Remove(inhibitor);
                }
                else
                {
                    EnemyInhibitors.Remove(inhibitor);
                }
            }

            var nexus = sender as Obj_HQ;

            if (nexus != null)
            {
                AllNexus.Remove(nexus);

                if (nexus.IsAlly)
                {
                    AllyNexus = null;
                }
                else
                {
                    EnemyNexus = null;
                }
            }

            var missile = sender as MissileClient;

            if (missile != null)
            {
                AllMissiles.Remove(missile);

                if (missile.IsAlly)
                {
                    AllyMissiles.Remove(missile);
                }
                else
                {
                    EnemyMissiles.Remove(missile);
                }
            }
        }