Beispiel #1
0
        private Point2D DetermineShieldBatteryPos()
        {
            if (WallIn.Wall.Count < 5)
            {
                return(null);
            }
            Point2D pos = SC2Util.TowardCardinal(WallIn.Wall[4].Pos, Natural.BaseLocation.Pos, 2);

            if (Bot.Main.buildingPlacer.CheckPlacement(pos, SC2Util.Point(2, 2), UnitTypes.PYLON, null, true))
            {
                return(pos);
            }
            return(null);
        }
Beispiel #2
0
        public bool FleeEnemies(bool returnFire, float fleeDistance)
        {
            Point2D retreatFrom = null;
            Unit    retreatUnit = null;
            float   dist        = fleeDistance * fleeDistance;

            foreach (Unit enemy in Tyr.Bot.Enemies())
            {
                float newDist = DistanceSq(enemy);
                if (newDist < dist)
                {
                    retreatFrom = SC2Util.To2D(enemy.Pos);
                    retreatUnit = enemy;
                    dist        = newDist;
                }
            }
            foreach (UnitLocation enemy in Tyr.Bot.EnemyMineManager.Mines)
            {
                float newDist = DistanceSq(enemy.Pos);
                if (newDist < dist)
                {
                    retreatFrom = SC2Util.To2D(enemy.Pos);
                    dist        = newDist;
                }
            }
            foreach (UnitLocation enemy in Tyr.Bot.EnemyTankManager.Tanks)
            {
                float newDist = DistanceSq(enemy.Pos);
                if (newDist < dist)
                {
                    retreatFrom = SC2Util.To2D(enemy.Pos);
                    dist        = newDist;
                }
            }
            if (retreatFrom != null)
            {
                if (retreatUnit != null && returnFire && Unit.WeaponCooldown == 0)
                {
                    float range = GetRange(retreatUnit);
                    if (DistanceSq(retreatFrom) <= range * range)
                    {
                        Order(Abilities.ATTACK, retreatFrom);
                        return(true);
                    }
                }
                Flee(retreatFrom);
                return(true);
            }
            return(false);
        }
Beispiel #3
0
        public bool NeuralParasite(Agent agent)
        {
            if (agent.Unit.Energy < 100 || !UpgradeType.LookUp[UpgradeType.NeuralParasite].Done())
            {
                return(false);
            }

            foreach (Unit unit in Tyr.Bot.Enemies())
            {
                if (unit.UnitType != UnitTypes.BATTLECRUISER &&
                    unit.UnitType != UnitTypes.TEMPEST &&
                    unit.UnitType != UnitTypes.COLOSUS &&
                    unit.UnitType != UnitTypes.MOTHERSHIP &&
                    unit.UnitType != UnitTypes.CARRIER)
                {
                    continue;
                }

                if (NeuralControllers.ContainsKey(unit.Tag))
                {
                    continue;
                }

                if (SC2Util.DistanceSq(unit.Pos, agent.Unit.Pos) <= 10 * 10)
                {
                    agent.Order(249, unit.Tag);

                    if (!NeuralControllers.ContainsKey(unit.Tag))
                    {
                        NeuralControllers.Add(unit.Tag, agent.Unit.Tag);
                    }
                    else
                    {
                        NeuralControllers[unit.Tag] = agent.Unit.Tag;
                    }

                    if (!NeuralFrame.ContainsKey(agent.Unit.Tag))
                    {
                        NeuralFrame.Add(agent.Unit.Tag, Tyr.Bot.Frame);
                    }
                    else
                    {
                        NeuralFrame[agent.Unit.Tag] = Tyr.Bot.Frame;
                    }

                    return(true);
                }
            }
            return(false);
        }
        public override bool DetermineAction(Agent agent, Point2D target)
        {
            if (agent.Unit.UnitType != UnitTypes.HELLION)
            {
                return(false);
            }

            if (agent.DistanceSq(Bot.Main.TargetManager.PotentialEnemyStartLocations[0]) >= 12 * 12)
            {
                agent.Order(Abilities.MOVE, Bot.Main.TargetManager.PotentialEnemyStartLocations[0]);
                return(true);
            }

            float distance   = 8 * 8;
            Unit  killTarget = null;

            foreach (Unit unit in Bot.Main.Enemies())
            {
                if (unit.UnitType != UnitTypes.SCV &&
                    unit.UnitType != UnitTypes.MARINE &&
                    unit.UnitType != UnitTypes.REAPER)
                {
                    continue;
                }
                float newDist = agent.DistanceSq(unit);
                if (newDist >= distance)
                {
                    continue;
                }
                distance   = newDist;
                killTarget = unit;
            }

            if (killTarget != null)
            {
                if (agent.Unit.WeaponCooldown == 0)
                {
                    return(false);
                }
                else if (distance <= 4 * 4)
                {
                    agent.Order(Abilities.MOVE, SC2Util.To2D(Bot.Main.MapAnalyzer.StartLocation));
                }
                agent.Order(Abilities.MOVE, agent.Toward(killTarget, 4));
                return(true);
            }

            agent.Order(Abilities.MOVE, Bot.Main.TargetManager.PotentialEnemyStartLocations[0]);
            return(true);
        }
Beispiel #5
0
        private bool CheckPlacementFull(List <uint> types, Point2D start, Point2D end, Point2D middle, BoolGrid placable)
        {
            if (!CheckRect(placable, middle.X - 1, middle.Y - 1, middle.X + 1, middle.Y + 1))
            {
                return(false);
            }

            if (Math.Abs(start.X - middle.X) == 3)
            {
                if (Math.Abs(start.Y - middle.Y) >= 3)
                {
                    return(false);
                }
            }
            else if (Math.Abs(start.Y - middle.Y) == 3)
            {
                if (Math.Abs(start.X - middle.X) >= 3)
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }

            Point2D pylonPos = SC2Util.Point(end.X, end.Y);

            pylonPos = SC2Util.TowardCardinal(pylonPos, middle, 2.5f);

            Wall = new List <WallBuilding>();
            Wall.Add(new WallBuilding()
            {
                Pos = start, Type = types[0]
            });
            Wall.Add(new WallBuilding()
            {
                Pos = middle, Type = types[1]
            });
            Wall.Add(new WallBuilding()
            {
                Pos = pylonPos, Type = types[2]
            });
            Wall.Add(new WallBuilding()
            {
                Pos = end, Type = types[3]
            });

            return(true);
        }
Beispiel #6
0
 public override Build OverrideBuild()
 {
     if (EnemyMain == null)
     {
         EnemyMain = Bot.Main.TargetManager.PotentialEnemyStartLocations[0];
     }
     if (!InBaseBarracks &&
         !Proxy)
     {
         foreach (Unit unit in Bot.Main.Enemies())
         {
             if (unit.UnitType != UnitTypes.BARRACKS &&
                 unit.UnitType != UnitTypes.FACTORY)
             {
                 continue;
             }
             if (SC2Util.DistanceSq(unit.Pos, EnemyMain) <= 40 * 40)
             {
                 InBaseBarracks = true;
             }
             else
             {
                 Proxy = true;
             }
         }
     }
     if (InBaseBarracks)
     {
         if (PvTStalkerImmortal == null)
         {
             PvTStalkerImmortal = new PvTStalkerImmortal();
             PvTStalkerImmortal.OnStart(Bot.Main);
             PvTStalkerImmortal.InitializeTasks();
         }
         return(PvTStalkerImmortal);
     }
     else
     {
         if (OneBaseStalkerImmortal == null)
         {
             OneBaseStalkerImmortal = new OneBaseStalkerImmortal()
             {
                 Scouting = true
             };
             OneBaseStalkerImmortal.OnStart(Bot.Main);
             OneBaseStalkerImmortal.InitializeTasks();
         }
         return(OneBaseStalkerImmortal);
     }
 }
Beispiel #7
0
        public override List <UnitDescriptor> GetDescriptors()
        {
            List <UnitDescriptor> descriptors = new List <UnitDescriptor>();
            int requiredCount = 2 - Units.Count;

            if (requiredCount > 0)
            {
                descriptors.Add(new UnitDescriptor(UnitTypes.STALKER)
                {
                    Count = requiredCount,
                    Pos   = SC2Util.To2D(Bot.Main.MapAnalyzer.StartLocation)
                });
            }
            return(descriptors);
        }
Beispiel #8
0
        public override bool DetermineAction(Agent agent, Point2D target)
        {
            Unit killTarget = null;

            float dist = 15 * 15;

            foreach (Unit unit in Tyr.Bot.Enemies())
            {
                if (unit.UnitType != TargetType)
                {
                    if (NoEnemiesAround)
                    {
                        if (!UnitTypes.WorkerTypes.Contains(unit.UnitType) &&
                            UnitTypes.CombatUnitTypes.Contains(unit.UnitType) &&
                            agent.DistanceSq(unit) <= 12 * 12)
                        {
                            return(false);
                        }
                    }
                    continue;
                }

                float newDist = agent.DistanceSq(unit);
                if (newDist > dist)
                {
                    continue;
                }
                killTarget = unit;
                dist       = newDist;
            }

            if (killTarget == null)
            {
                return(false);
            }

            if (agent.Unit.WeaponCooldown > 0)
            {
                agent.Order(Abilities.MOVE, SC2Util.To2D(killTarget.Pos));
            }
            else
            {
                agent.Order(Abilities.ATTACK, killTarget.Tag);
            }

            return(true);
        }