public override void OnFrame(Tyr tyr) { if (!ChatMessageSent) { if (Completed(UnitTypes.ADEPT_PHASE_SHIFT) > 0) { tyr.Chat("As requested by AndyMan, we're doing some Adept harass!"); ChatMessageSent = true; } } AdeptPhaseEnemyMainController.Stopped = tyr.Frame >= 22.4 * 60 * 6 && TotalEnemyCount(UnitTypes.IMMORTAL) == 0; ForwardProbeTask.Task.EnemyBaseRange = 80; ForwardProbeTask.Task.Stopped = tyr.Frame < 22.4 * 165 || SkippedNatural.Get().Detected; if (ForwardProbeTask.Task.Stopped) { ForwardProbeTask.Task.Clear(); } }
public override void OnFrame(Tyr tyr) { if (!MessageSent) { if (tyr.Enemies().Count > 0) { MessageSent = true; tyr.Chat("Prepare to be TICKLED! :D"); } } if (tyr.Frame - LastReinforcementsFrame >= 100 && WorkerTask.Task.Units.Count >= (tyr.EnemyStrategyAnalyzer.LiftingDetected ? 22 : 12) && !tyr.EnemyStrategyAnalyzer.LiftingDetected) { LastReinforcementsFrame = tyr.Frame; WorkerRushTask.TakeWorkers += 6; } }
public override void OnFrame(Tyr tyr) { if (tyr.EnemyStrategyAnalyzer.LiftingDetected) { int surfaceEnemies = 0; foreach (Unit unit in tyr.Enemies()) { if (!unit.IsFlying) { surfaceEnemies++; } } if (surfaceEnemies < 3 && WorkerTask.Task.Units.Count < 16) { WorkerRushTask.Clear(); WorkerRushTask.Stopped = true; } } if (!MessageSent) { if (tyr.Enemies().Count > 0) { MessageSent = true; tyr.Chat("Prepare to be TICKLED! :D"); } } if (tyr.Frame - LastReinforcementsFrame >= 100 && WorkerTask.Task.Units.Count >= (tyr.EnemyStrategyAnalyzer.LiftingDetected ? 22 : 12) && !tyr.EnemyStrategyAnalyzer.LiftingDetected) { LastReinforcementsFrame = tyr.Frame; WorkerRushTask.TakeWorkers += 6; } }
public override void OnFrame(Tyr tyr) { if (Tyr.Bot.Frame == (int)(45 * 22.4)) { tyr.Chat("This build was requested by Infy!"); } foreach (Agent agent in tyr.UnitManager.Agents.Values) { if (tyr.Frame % 224 != 0) { break; } if (agent.Unit.UnitType != UnitTypes.GATEWAY) { continue; } if (Count(UnitTypes.NEXUS) < 2 && TimingAttackTask.Task.Units.Count == 0) { agent.Order(Abilities.MOVE, Main.BaseLocation.Pos); } else { agent.Order(Abilities.MOVE, tyr.TargetManager.PotentialEnemyStartLocations[0]); } } BalanceGas(); tyr.TargetManager.TargetCannons = true; if (WorkerScoutTask.Task.BaseCircled()) { WorkerScoutTask.Task.Stopped = true; WorkerScoutTask.Task.Clear(); } WorkerScoutTask.Task.StartFrame = 600; ObserverScoutTask.Task.Priority = 6; tyr.NexusAbilityManager.Stopped = Count(UnitTypes.STALKER) == 0 && tyr.Frame >= 120 * 22.4; tyr.NexusAbilityManager.PriotitizedAbilities.Add(917); TimingAttackTask.Task.RequiredSize = 25; TimingAttackTask.Task.Stopped = Completed(UnitTypes.STALKER) + Completed(UnitTypes.ZEALOT) < 5; if (ForwardProbeTask.Task.Stopped) { ForwardProbeTask.Task.Clear(); } if (Count(UnitTypes.NEXUS) <= 1) { IdleTask.Task.OverrideTarget = OverrideMainDefenseTarget; } else if (Count(UnitTypes.NEXUS) >= 3) { IdleTask.Task.OverrideTarget = OverrideDefenseTarget; } else { IdleTask.Task.OverrideTarget = null; } DefenseTask.GroundDefenseTask.ExpandDefenseRadius = 30; DefenseTask.GroundDefenseTask.MainDefenseRadius = 30; DefenseTask.GroundDefenseTask.MaxDefenseRadius = 120; DefenseTask.GroundDefenseTask.DrawDefenderRadius = 80; DefenseTask.AirDefenseTask.ExpandDefenseRadius = 30; DefenseTask.AirDefenseTask.MainDefenseRadius = 30; DefenseTask.AirDefenseTask.MaxDefenseRadius = 120; DefenseTask.AirDefenseTask.DrawDefenderRadius = 80; }
public override void OnFrame(Tyr tyr) { tyr.NexusAbilityManager.PriotitizedAbilities.Add(948); tyr.NexusAbilityManager.PriotitizedAbilities.Add(950); tyr.buildingPlacer.BuildCompact = true; FlyerAttackTask.Task.RequiredSize = RequiredSize; IdleTask.Task.FearEnemies = true; DefenseTask.Task.IgnoreEnemyTypes.Add(UnitTypes.VIKING_FIGHTER); FlyerDestroyTask.Task.Stopped = !DefendReapers; FlyerAttackTask.Task.Stopped = DefendReapers; if (Count(UnitTypes.PROBE) <= 18) { BaseWorkers.WorkersPerGas = 0; } else { BaseWorkers.WorkersPerGas = 3; } if (tyr.EnemyRace == Race.Zerg) { Beyond2Cannons = tyr.EnemyStrategyAnalyzer.TotalCount(UnitTypes.ZERGLING) > 0 || Count(UnitTypes.STARGATE) >= 3; } if (tyr.Frame == 118) { tyr.Chat("Time for some monobattles!"); } if (tyr.Frame == 163) { if (BuildCarriers) { tyr.Chat("I choose Carriers! :D"); } else { tyr.Chat("I choose Skillrays! :D"); } } if (!LiftingDetected) { foreach (Unit unit in tyr.Enemies()) { if (unit.IsFlying && UnitTypes.BuildingTypes.Contains(unit.UnitType)) { LiftingDetected = true; } } } if (LiftingDetected && tyr.EnemyManager.EnemyBuildings.Count == 0 && !ChasingLiftedBuildings) { ChasingLiftedBuildings = true; tyr.TaskManager.Add(new ElevatorChaserTask()); } if (!DefendRush && tyr.Frame <= 4800 && Tyr.Bot.EnemyRace != Race.Zerg) { int enemyCount = 0; foreach (Unit enemy in tyr.Enemies()) { if (SC2Util.DistanceSq(enemy.Pos, tyr.MapAnalyzer.StartLocation) <= 40 * 40) { enemyCount++; } } if (enemyCount >= 3) { DefendRush = true; } } if ((tyr.EnemyRace == Race.Terran || tyr.EnemyRace == Race.Random) && ReaperDefenseCannonStep.DesiredPos == null && !SkipDefenses) { foreach (Unit unit in tyr.Enemies()) { if (unit.UnitType == UnitTypes.REAPER && Tyr.Bot.MapAnalyzer.StartArea[(int)System.Math.Round(unit.Pos.X), (int)System.Math.Round(unit.Pos.Y)]) { Point2D dir = SC2Util.Point(unit.Pos.X - tyr.MapAnalyzer.StartLocation.X, unit.Pos.Y - tyr.MapAnalyzer.StartLocation.Y); float length = (float)System.Math.Sqrt(dir.X * dir.X + dir.Y * dir.Y); dir = SC2Util.Point(dir.X / length, dir.Y / length); ReaperDefenseCannonStep.DesiredPos = SC2Util.Point(tyr.MapAnalyzer.StartLocation.X + dir.X * 4f, tyr.MapAnalyzer.StartLocation.Y + dir.Y * 4f); break; } } } if (!DefendReapers && tyr.EnemyStrategyAnalyzer.Count(UnitTypes.REAPER) >= 2) { FearVikingsController.Stopped = false; DefendReapers = true; tyr.buildingPlacer.SpreadCannons = false; tyr.buildingPlacer.BuildCompact = true; WorkerTask.Task.StopTransfers = true; HideBaseTask.Task.BuildNexus = true; IdleTask.Task.OverrideTarget = FarBase.BaseLocation.Pos; DefenseTask.Task.Stopped = true; RequiredSize = 8; Set = new BuildSet(); Set += HiddenBasePylons(); Set += HiddenBaseBuild(); } /* * if (tyr.EnemyStrategyAnalyzer.Count(UnitTypes.REAPER) >= 2 * && NaturalMirrorCannonStep.DesiredBase == null) * { * PotentialHelper helper = new PotentialHelper(tyr.BaseManager.Natural.BaseLocation.Pos); * helper.Magnitude = 8; * helper.From(tyr.BaseManager.NaturalDefensePos); * NaturalMirrorCannonStep.DesiredPos = helper.Get(); * NaturalMirrorPylonStep.DesiredPos = helper.Get(); * } */ }
public override void OnFrame(Tyr tyr) { DefendMarines = tyr.EnemyStrategyAnalyzer.TotalCount(UnitTypes.BARRACKS) >= 3 && tyr.EnemyStrategyAnalyzer.TotalCount(UnitTypes.REFINERY) == 0 && tyr.EnemyStrategyAnalyzer.TotalCount(UnitTypes.REAPER) == 0 && false; if (tyr.EnemyStrategyAnalyzer.TotalCount(UnitTypes.REAPER) >= 3 && tyr.Frame <= 210 * 22.4) { DefendReapers = true; RequiredSize = 6; } if (RequiredSize > 6) { if (Completed(UnitTypes.CARRIER) >= 12) { RequiredSize = 6; } foreach (Unit enemy in tyr.Enemies()) { if ((enemy.UnitType == UnitTypes.MARAUDER || enemy.UnitType == UnitTypes.MARAUDER) && SC2Util.DistanceSq(tyr.MapAnalyzer.StartLocation, enemy.Pos) <= 40 * 40) { RequiredSize = 6; break; } } } foreach (Task task in WorkerDefenseTask.Tasks) { task.Stopped = true; } tyr.buildingPlacer.BuildCompact = true; WorkerTask.Task.StopTransfers = true; HideBaseTask.Task.MoveOutFrame = 672; ConstructionTask.Task.CancelBlockedBuildings = false; ConstructionTask.Task.OnlyCloseWorkers = false; ConstructionTask.Task.MaxWorkerDist = 30; tyr.NexusAbilityManager.PriotitizedAbilities.Add(948); tyr.NexusAbilityManager.PriotitizedAbilities.Add(950); tyr.DrawText("Required size: " + RequiredSize); FlyerAttackTask.Task.RequiredSize = RequiredSize; FlyerDestroyTask.Task.RequiredSize = RequiredSize; IdleTask.Task.FearEnemies = true; DefenseTask.AirDefenseTask.IgnoreEnemyTypes.Add(UnitTypes.VIKING_FIGHTER); if (Count(UnitTypes.PROBE) <= 6) { BaseWorkers.WorkersPerGas = 0; } else if (Count(UnitTypes.PROBE) <= 12) { BaseWorkers.WorkersPerGas = 1; } else if (Count(UnitTypes.PROBE) <= 18) { BaseWorkers.WorkersPerGas = 2; } else { BaseWorkers.WorkersPerGas = 3; } if (tyr.Frame == 118) { tyr.Chat("Time for some monobattles!"); } if (tyr.Frame == 163) { if (BuildCarriers) { tyr.Chat("I choose Carriers! :D"); } else { tyr.Chat("I choose Skillrays! :D"); } } if (!LiftingDetected) { foreach (Unit unit in tyr.Enemies()) { if (unit.IsFlying && UnitTypes.BuildingTypes.Contains(unit.UnitType)) { LiftingDetected = true; } } } if (LiftingDetected && tyr.EnemyManager.EnemyBuildings.Count == 0 && !ChasingLiftedBuildings) { ChasingLiftedBuildings = true; tyr.TaskManager.Add(new ElevatorChaserTask()); } if (!DefendRush && tyr.Frame <= 4800 && Tyr.Bot.EnemyRace != Race.Zerg) { int enemyCount = 0; foreach (Unit enemy in tyr.Enemies()) { if (SC2Util.DistanceSq(enemy.Pos, tyr.MapAnalyzer.StartLocation) <= 40 * 40) { enemyCount++; } } if (enemyCount >= 3) { DefendRush = true; } } if (Count(UnitTypes.STARGATE) > 0) { HideBaseTask.Task.BuildNexus = true; } }
public override void OnFrame(Tyr tyr) { if (!ChatMessageSent) { if (Completed(UnitTypes.TEMPEST) > 0) { tyr.Chat("This build is dedicated to Andyman!"); ChatMessageSent = true; } } if (HideLocation == null) { HideLocation = ProxyTask.Task.GetHideLocation(); } if (HideLocation != null) { if (ProxyTask.Task.UnitCounts.ContainsKey(UnitTypes.PYLON) && ProxyTask.Task.UnitCounts[UnitTypes.PYLON] > 0 && ProxyTask.Task.UnitCounts.ContainsKey(UnitTypes.STARGATE) && ProxyTask.Task.UnitCounts[UnitTypes.STARGATE] > 0) { float dist = 10 * 10; Unit fleeEnemy = null; foreach (Unit enemy in tyr.Enemies()) { if (!UnitTypes.CanAttackAir(enemy.UnitType)) { continue; } float newDist = SC2Util.DistanceSq(enemy.Pos, HideLocation); if (newDist > dist) { continue; } dist = newDist; fleeEnemy = enemy; } if (fleeEnemy != null) { TempestController.RetreatPos = new PotentialHelper(HideLocation, 6).From(fleeEnemy.Pos).Get(); } else { TempestController.RetreatPos = HideLocation; } } else { TempestController.RetreatPos = null; } } if (TempestController.RetreatPos == null) { TempestController.RetreatPos = ProxyTask.Task.GetHideLocation(); } DepoweredStargates = 0; foreach (Agent agent in tyr.Units()) { if (agent.Unit.UnitType == UnitTypes.STARGATE && !agent.Unit.IsPowered && agent.Unit.BuildProgress >= 0.99) { DepoweredStargates++; } } tyr.DrawText("DepoweredStargates: " + DepoweredStargates); tyr.NexusAbilityManager.PriotitizedAbilities.Add(1568); ProxyTask.Task.EvadeEnemies = true; tyr.buildingPlacer.BuildCompact = true; tyr.TargetManager.PrefferDistant = false; tyr.TargetManager.TargetAllBuildings = true; TrainStep.WarpInLocation = ProxyTask.Task.GetHideLocation(); DefendRegionTask.Task.DefenseLocation = ProxyTask.Task.GetHideLocation(); TimingAttackTask.Task.RequiredSize = 1; TimingAttackTask.Task.RetreatSize = 0; TimingAttackTask.Task.UnitType = UnitTypes.TEMPEST; if (tyr.Frame >= 22.4 * 60 * 4) { ProxyTask.Task.Stopped = true; } else { ProxyTask.Task.Stopped = Count(UnitTypes.GATEWAY) == 0; if (ProxyTask.Task.Stopped) { ProxyTask.Task.Clear(); } } if (UpgradeType.LookUp[UpgradeType.WarpGate].Progress() >= 0.5 && IdleTask.Task.OverrideTarget == null && (tyr.EnemyRace != Race.Protoss || tyr.Frame >= 22.4 * 4 * 60)) { IdleTask.Task.OverrideTarget = tyr.MapAnalyzer.Walk(ProxyTask.Task.GetHideLocation(), tyr.MapAnalyzer.EnemyDistances, 10); } foreach (Agent agent in tyr.UnitManager.Agents.Values) { if (tyr.Frame % 224 != 0) { break; } if (agent.Unit.UnitType != UnitTypes.GATEWAY) { continue; } agent.Order(Abilities.MOVE, agent.From(tyr.MapAnalyzer.GetMainRamp(), 4)); } }
public override void OnFrame(Tyr tyr) { BalanceGas(); ReaperDefenseTask.Stopped = Completed(UnitTypes.STALKER) < 4 || TimingAttackTask.Task.AttackSent || Completed(UnitTypes.PHOENIX) > 0; if (ReaperDefenseTask.Stopped) { ReaperDefenseTask.Clear(); } if (ReaperDefenseTask.Stopped) { DefenseTask.GroundDefenseTask.IgnoreEnemyTypes.Remove(UnitTypes.REAPER); } else { DefenseTask.GroundDefenseTask.IgnoreEnemyTypes.Add(UnitTypes.REAPER); } tyr.NexusAbilityManager.Stopped = Count(UnitTypes.STALKER) == 0; tyr.NexusAbilityManager.PriotitizedAbilities.Add(917); if (TotalEnemyCount(UnitTypes.BANSHEE) > 0) { StutterForwardController.Stopped = false; StutterController.Stopped = true; } else { StutterForwardController.Stopped = true; StutterController.Stopped = false; } SaveWorkersTask.Task.Stopped = tyr.Frame >= 22.4 * 60 * 7 || EnemyCount(UnitTypes.CYCLONE) == 0 || !Natural.UnderAttack; if (SaveWorkersTask.Task.Stopped) { SaveWorkersTask.Task.Clear(); } if (tyr.Observation.Chat != null && SendAirUnitsText == -1) { foreach (ChatReceived chat in tyr.Observation.Chat) { if (chat.PlayerId == tyr.PlayerId) { continue; } if (chat.Message.ToLower().Contains("air")) { SendAirUnitsText = tyr.Frame + 67; } } } if (tyr.Frame == SendAirUnitsText) { tyr.Chat("Yes, I am going for air units! How do you like my Phoenixes? :D"); } foreach (Agent agent in tyr.Units()) { if (LiftedTextSent) { break; } if (agent.Unit.UnitType != UnitTypes.PHOENIX) { continue; } if (agent.PreviousUnit == null) { continue; } if (agent.PreviousUnit.Energy - agent.Unit.Energy >= 45) { LiftedTextSent = true; tyr.Chat("I love your micro! Those flying Cyclones look especially scary!"); } } foreach (ActionError error in tyr.Observation.ActionErrors) { DebugUtil.WriteLine("Error with ability " + error.AbilityId + ": " + error.Result); } if (!MedivacsSpotted && EnemyCount(UnitTypes.MEDIVAC) > 0) { MedivacsSpotted = true; MedivacsSpottedFrame = tyr.Frame; } DefenseTask.GroundDefenseTask.IncludePhoenixes = EnemyCount(UnitTypes.CYCLONE) > 0; if (MedivacsSpotted && tyr.Frame - MedivacsSpottedFrame <= 22.4 * 30) { IdleTask.Task.OverrideTarget = DefendDropsPos; DefenseTask.AirDefenseTask.IgnoreEnemyTypes.Add(UnitTypes.MEDIVAC); } else { IdleTask.Task.OverrideTarget = null; DefenseTask.AirDefenseTask.IgnoreEnemyTypes.Remove(UnitTypes.MEDIVAC); } WorkerTask.Task.EvacuateThreatenedBases = true; if (!BansheesDetected && tyr.Frame >= 22.4 * 60 * 6 && tyr.Frame < 22.4 * 60 * 9.5 && !MedivacsSpotted) { TimedObserverTask.Task.Target = ScoutingPylonPos; TimedObserverTask.Task.Priority = 11; } else { if (Tyr.Bot.Frame - tyr.EnemyBansheesManager.BansheeSeenFrame <= 22.4 * 10 && tyr.EnemyBansheesManager.BansheeLocation != null) { TimedObserverTask.Task.Target = tyr.EnemyBansheesManager.BansheeLocation; } else if (Tyr.Bot.Frame - tyr.EnemyBansheesManager.LastHitFrame <= 22.4 * 20) { TimedObserverTask.Task.Target = tyr.EnemyBansheesManager.LastHitLocation; } else { TimedObserverTask.Task.Target = SC2Util.To2D(tyr.MapAnalyzer.StartLocation); } TimedObserverTask.Task.Priority = 3; } TimingAttackTask.Task.DefendOtherAgents = false; TimingAttackTask.Task.RequiredSize = 25; TimingAttackTask.Task.RetreatSize = 0; if (!BansheesDetected && TotalEnemyCount(UnitTypes.BANSHEE) > 0) { BansheesDetected = true; } if (!BansheesDetected && TotalEnemyCount(UnitTypes.STARPORT_TECH_LAB) + TotalEnemyCount(UnitTypes.STARPORT) > 0 && tyr.Frame < 22.4 * 60 * 5) { BansheesDetected = true; } DefenseTask.GroundDefenseTask.ExpandDefenseRadius = 30; DefenseTask.GroundDefenseTask.MainDefenseRadius = 30; DefenseTask.GroundDefenseTask.MaxDefenseRadius = 120; DefenseTask.GroundDefenseTask.DrawDefenderRadius = 80; DefenseTask.AirDefenseTask.ExpandDefenseRadius = 30; DefenseTask.AirDefenseTask.MainDefenseRadius = 30; DefenseTask.AirDefenseTask.MaxDefenseRadius = 120; DefenseTask.AirDefenseTask.DrawDefenderRadius = 80; if (BansheesDetected && EnemyCount(UnitTypes.VIKING_ASSUALT) + EnemyCount(UnitTypes.VIKING_FIGHTER) >= 3) { BuildTempest = true; } tyr.TargetManager.SkipPlanetaries = true; }