private BuildList MainBuild() { BuildList result = new BuildList(); Point2D cannon1Pos = SC2Util.Point(Bot.Main.MapAnalyzer.building1.X + (Bot.Main.MapAnalyzer.building1.X - Bot.Main.MapAnalyzer.building2.X) / 2, Bot.Main.MapAnalyzer.building1.Y + (Bot.Main.MapAnalyzer.building1.Y - Bot.Main.MapAnalyzer.building2.Y) / 2); Point2D cannon2Pos = SC2Util.Point(Bot.Main.MapAnalyzer.building2.X + (Bot.Main.MapAnalyzer.building2.X - Bot.Main.MapAnalyzer.building1.X) / 2, Bot.Main.MapAnalyzer.building2.Y + (Bot.Main.MapAnalyzer.building2.Y - Bot.Main.MapAnalyzer.building1.Y) / 2); result.Building(UnitTypes.FORGE, Bot.Main.BaseManager.Main, Bot.Main.MapAnalyzer.building1, true); result.Building(UnitTypes.GATEWAY, Bot.Main.BaseManager.Main, Bot.Main.MapAnalyzer.building2, true); result.Building(UnitTypes.PHOTON_CANNON, Bot.Main.BaseManager.Main, cannon1Pos); result.Building(UnitTypes.PHOTON_CANNON, Bot.Main.BaseManager.Main, cannon2Pos); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.CYBERNETICS_CORE); result.Building(UnitTypes.ASSIMILATOR); result.If(() => { return(Completed(UnitTypes.CYBERNETICS_CORE) > 0); }); result.Building(UnitTypes.SHIELD_BATTERY, Bot.Main.BaseManager.Main, Bot.Main.MapAnalyzer.building1); result.Building(UnitTypes.SHIELD_BATTERY, Bot.Main.BaseManager.Main, Bot.Main.MapAnalyzer.building2); result.Building(UnitTypes.PHOTON_CANNON, Bot.Main.BaseManager.Main, Bot.Main.MapAnalyzer.building3); result.Building(UnitTypes.PYLON, 3); result.If(() => { return(!VoidrayOnly); }); result.Building(UnitTypes.TWILIGHT_COUNSEL); result.Building(UnitTypes.STARGATE); result.Building(UnitTypes.DARK_SHRINE); return(result); }
private BuildList MainBuild() { BuildList result = new BuildList(); Point2D shieldBatteryPos = Tyr.Bot.MapAnalyzer.Walk(NaturalDefensePos, Tyr.Bot.MapAnalyzer.EnemyDistances, 3); result.Building(UnitTypes.PYLON); result.Building(UnitTypes.GATEWAY); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.CYBERNETICS_CORE); result.Building(UnitTypes.PYLON, Natural, NaturalDefensePos, () => { return(!SmellCheese); }); result.Building(UnitTypes.PYLON, 2, () => { return(Minerals() >= 350); }); result.Building(UnitTypes.GATEWAY); result.Building(UnitTypes.GATEWAY, () => { return(SmellCheese); }); result.Building(UnitTypes.SHIELD_BATTERY, Main, MainDefensePos, 2, () => { return(SmellCheese); }); result.If(() => { return(Count(UnitTypes.NEXUS) >= 2); }); result.Building(UnitTypes.GATEWAY, () => { return(!SmellCheese); }); result.Building(UnitTypes.SHIELD_BATTERY, Natural, shieldBatteryPos, () => { return(!SmellCheese); }); result.Building(UnitTypes.ASSIMILATOR, 3); result.If(() => { return(Count(UnitTypes.ADEPT) + Count(UnitTypes.STALKER) >= 10); }); result.Building(UnitTypes.PYLON); result.Building(UnitTypes.PYLON, Natural); result.Building(UnitTypes.ROBOTICS_FACILITY); result.Building(UnitTypes.TWILIGHT_COUNSEL); result.Building(UnitTypes.PYLON, 2); result.Building(UnitTypes.ROBOTICS_BAY, () => { return(!DefendMech); }); result.Building(UnitTypes.GATEWAY); result.Building(UnitTypes.PYLON, Natural); result.Building(UnitTypes.ROBOTICS_FACILITY, () => { return(Count(UnitTypes.COLLOSUS) > 0); }); result.Building(UnitTypes.PYLON, Natural); result.Building(UnitTypes.PYLON, Natural); return(result); }
private BuildList MainBuildList() { BuildList result = new BuildList(); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.PYLON, Main); result.If(() => Completed(UnitTypes.PYLON) > 0); result.Building(UnitTypes.GATEWAY, Main); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.CYBERNETICS_CORE, Main); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.STARGATE); result.Building(UnitTypes.PYLON, Natural, NaturalDefensePos); result.Building(UnitTypes.TWILIGHT_COUNSEL); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.DARK_SHRINE); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.ASSIMILATOR, () => Count(UnitTypes.DISRUPTOR) > 0 || Count(UnitTypes.STALKER) >= 12); result.Building(UnitTypes.GATEWAY); result.Building(UnitTypes.FLEET_BEACON); result.Upgrade(UpgradeType.Blink); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.ASSIMILATOR, () => Minerals() >= 600); result.Building(UnitTypes.STARGATE); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.GATEWAY); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.ASSIMILATOR); result.If(() => Completed(UnitTypes.STALKER) + Completed(UnitTypes.PHOENIX) >= 30); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.ASSIMILATOR, 3); result.Building(UnitTypes.GATEWAY, 2); return(result); }
private BuildList MainBuild() { BuildList result = new BuildList(); result.If(() => { return(!StrategyAnalysis.WorkerRush.Get().Detected || Count(UnitTypes.ZERGLING) >= 10); }); result.Morph(UnitTypes.DRONE, 14); result.Building(UnitTypes.SPAWNING_POOL); result.Building(UnitTypes.SPINE_CRAWLER, Main, MainDefensePos, 2); result.Building(UnitTypes.EXTRACTOR); result.Morph(UnitTypes.DRONE, 4); result.If(() => { return(Count(UnitTypes.QUEEN) > 0); }); result.Building(UnitTypes.ROACH_WARREN); result.Morph(UnitTypes.ROACH, 6); result.If(() => { return(Count(UnitTypes.LAIR) > 0); }); result.Building(UnitTypes.EXTRACTOR); result.Morph(UnitTypes.ROACH, 5, () => { return(!ReaperRush.Get().Detected); }); result.Morph(UnitTypes.OVERSEER); result.Building(UnitTypes.HYDRALISK_DEN); result.Morph(UnitTypes.ROACH, 4, () => { return(!ReaperRush.Get().Detected); }); result.Morph(UnitTypes.HYDRALISK, 5); result.Morph(UnitTypes.OVERSEER); result.Morph(UnitTypes.HYDRALISK, 80); return(result); }
private BuildList Units() { BuildList result = new BuildList(); result.Train(UnitTypes.PROBE, 20, () => !ProxyMarauderSuspected || Count(UnitTypes.PROBE) < 18 || Minerals() >= 300); result.Train(UnitTypes.PROBE, 40, () => Count(UnitTypes.NEXUS) >= 2); result.Train(UnitTypes.ZEALOT, 3, () => StrategyAnalysis.WorkerRush.Get().Detected); result.Train(UnitTypes.SENTRY, 1, () => FourRax.Get().Detected); result.If(() => !TimingAttackTask.Task.AttackSent || Count(UnitTypes.STALKER) < 10 || Count(UnitTypes.NEXUS) >= 2); result.If(() => !TimingAttackTask.Task.AttackSent || Count(UnitTypes.STALKER) < 10 || Completed(UnitTypes.TWILIGHT_COUNSEL) == 0 || UpgradeType.LookUp[UpgradeType.Blink].Started()); result.Train(UnitTypes.OBSERVER, 1, () => Completed(UnitTypes.IMMORTAL) >= 2); result.Train(UnitTypes.STALKER, () => !DefendingStalkerClose && EnemyReaperClose); result.Train(UnitTypes.IMMORTAL, 1, () => Gas() >= 100 && !ProxyMarauderSuspected); result.Train(UnitTypes.IMMORTAL, 1, () => ProxyMarauderSuspected && Count(UnitTypes.SHIELD_BATTERY) >= 2 && Count(UnitTypes.STALKER) >= 3); result.Train(UnitTypes.OBSERVER, 2, () => Completed(UnitTypes.STALKER) + Completed(UnitTypes.IMMORTAL) >= 6 && Completed(UnitTypes.IMMORTAL) >= 2); result.Train(UnitTypes.VOID_RAY, 1, () => MakeVoidray && Gas() >= 100 && !VoidrayDone); result.Train(UnitTypes.STALKER, 1); result.Upgrade(UpgradeType.WarpGate, () => !ProxyMarauderSuspected || Count(UnitTypes.IMMORTAL) > 0); result.Train(UnitTypes.PHOENIX, 1, () => Gas() >= 100); result.Train(UnitTypes.STALKER, 3); result.Train(UnitTypes.TEMPEST, 1, () => Gas() >= 50); result.Train(UnitTypes.TEMPEST, 3, () => Gas() >= 100); result.Train(UnitTypes.PHOENIX, () => Gas() >= 100); result.Train(UnitTypes.IMMORTAL, 8, () => ProxyMarauderSuspected && Gas() >= 100 && (!ProxyMarauderSuspected || Count(UnitTypes.SHIELD_BATTERY) >= 2)); result.Train(UnitTypes.STALKER, () => !ProxyMarauderSuspected || Count(UnitTypes.SHIELD_BATTERY) >= 2); return(result); }
private BuildList Units() { BuildList result = new BuildList(); result.Train(UnitTypes.PROBE, 20); result.Train(UnitTypes.PROBE, 40, () => Count(UnitTypes.NEXUS) >= 2); result.If(() => !StartExpanding || Count(UnitTypes.IMMORTAL) < 2 || Count(UnitTypes.STALKER) + Count(UnitTypes.ZEALOT) + Count(UnitTypes.IMMORTAL) < 8 || Count(UnitTypes.NEXUS) >= 2); result.Train(UnitTypes.ZEALOT, 4, () => TotalEnemyCount(UnitTypes.ROACH) == 0 && StartZealots); result.Train(UnitTypes.OBSERVER, 1, () => Bot.Main.EnemyRace == SC2APIProtocol.Race.Terran || Count(UnitTypes.IMMORTAL) >= (DoubleRobo ? 4 : 3) || Observer); result.If(() => Count(UnitTypes.STALKER) + Count(UnitTypes.IMMORTAL) < 5 || !StartExpanding || Count(UnitTypes.NEXUS) >= 2); result.Train(UnitTypes.OBSERVER, 2, () => TotalEnemyCount(UnitTypes.BANSHEE) > 0); result.Train(UnitTypes.IMMORTAL, () => TotalEnemyCount(UnitTypes.BANSHEE) == 0 && TotalEnemyCount(UnitTypes.BATTLECRUISER) == 0); result.Train(UnitTypes.STALKER, 1, () => !StartZealots); if (Bot.Main.EnemyRace != SC2APIProtocol.Race.Zerg && UseSentry) { result.Train(UnitTypes.SENTRY, 1, () => !PhoenixScoutSent && EarlySentry && !StrategyAnalysis.CannonRush.Get().Detected&& TotalEnemyCount(UnitTypes.FORGE) + TotalEnemyCount(UnitTypes.PHOTON_CANNON) == 0); } result.Upgrade(UpgradeType.WarpGate, () => !DoubleRobo || Count(UnitTypes.IMMORTAL) >= 4); result.Train(UnitTypes.STALKER, () => (!StartZealots || TotalEnemyCount(UnitTypes.ROACH) + TotalEnemyCount(UnitTypes.MUTALISK) > 0) && (!DoubleRobo || Count(UnitTypes.STALKER) < 3 || Gas() >= 125)); result.Train(UnitTypes.ZEALOT, () => TotalEnemyCount(UnitTypes.ROACH) + TotalEnemyCount(UnitTypes.MUTALISK) == 0 && StartZealots); result.Train(UnitTypes.IMMORTAL, () => TotalEnemyCount(UnitTypes.BATTLECRUISER) > 0 && Count(UnitTypes.STALKER) >= 10); return(result); }
private BuildList AntiCannonBuild() { BuildList result = new BuildList(); result.If(() => { return(CannonsDetected && !SkyTossDetected); }); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.SUPPLY_DEPOT, Main, WallIn.Wall[0].Pos, true); result.Building(UnitTypes.BARRACKS); result.Building(UnitTypes.REFINERY); result.Building(UnitTypes.SUPPLY_DEPOT, Main, WallIn.Wall[1].Pos, true); result.Building(UnitTypes.FACTORY); result.Building(UnitTypes.BUNKER, Main, WallIn.Wall[2].Pos, true); result.Building(UnitTypes.COMMAND_CENTER); result.If(() => Count(UnitTypes.SIEGE_TANK) + Count(UnitTypes.CYCLONE) >= Completed(UnitTypes.SIEGE_TANK) + Completed(UnitTypes.CYCLONE) + 1); result.Building(UnitTypes.REFINERY, 2); result.Building(UnitTypes.BARRACKS); result.Building(UnitTypes.STARPORT, () => DTsSuspected || SkyTossDetected); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.BARRACKS); result.Building(UnitTypes.ENGINEERING_BAY); result.Building(UnitTypes.REFINERY, 3); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.BARRACKS, 2); result.Building(UnitTypes.REFINERY, 2); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.REFINERY, 2); return(result); }
private BuildList MainBuild() { BuildList result = new BuildList(); result.Building(UnitTypes.PYLON); result.Building(UnitTypes.GATEWAY); if (Bot.Main.EnemyRace != Race.Terran) { result.If(() => { return(!EarlyPool.Get().Detected || Expanded.Get().Detected || Completed(UnitTypes.ZEALOT) >= 2); }); } result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.PYLON, Natural, NaturalDefensePos); result.Building(UnitTypes.CYBERNETICS_CORE); result.Building(UnitTypes.ASSIMILATOR, 2); result.Building(UnitTypes.GATEWAY); result.Building(UnitTypes.PYLON); result.Building(UnitTypes.PYLON, Natural); result.Building(UnitTypes.ROBOTICS_FACILITY); result.Building(UnitTypes.PYLON, 2); result.Building(UnitTypes.ROBOTICS_BAY, () => { return(!UseImmortals); }); result.Building(UnitTypes.PYLON, Natural); result.Building(UnitTypes.ROBOTICS_FACILITY); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.GATEWAY, 2); result.Building(UnitTypes.PYLON, Natural); result.Building(UnitTypes.TWILIGHT_COUNSEL); result.Building(UnitTypes.PYLON, Natural); result.If(() => { return(Count(UnitTypes.COLOSUS) >= 6); }); result.Building(UnitTypes.GATEWAY, 2); return(result); }
private BuildList MainBuild() { BuildList result = new BuildList(); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.SUPPLY_DEPOT); result.Building(UnitTypes.BARRACKS); result.Building(UnitTypes.REFINERY); result.Building(UnitTypes.BARRACKS); result.If(() => Count(UnitTypes.REAPER) > 0 && Minerals() >= 200); result.Building(UnitTypes.REFINERY); result.Building(UnitTypes.COMMAND_CENTER, () => Minerals() >= 550); result.Building(UnitTypes.REFINERY, 2); result.If(() => Tyr.Bot.EnemyStrategyAnalyzer.LiftingDetected || Count(UnitTypes.REAPER) >= 5 || Gas() >= 150); result.Building(UnitTypes.FACTORY); result.Building(UnitTypes.COMMAND_CENTER, () => Minerals() >= 550); result.Building(UnitTypes.COMMAND_CENTER, () => Minerals() >= 550); result.Building(UnitTypes.REFINERY, 4); result.If(() => Tyr.Bot.EnemyStrategyAnalyzer.LiftingDetected || (Gas() >= 150 && Count(UnitTypes.COMMAND_CENTER) >= 2)); result.Building(UnitTypes.STARPORT); result.Building(UnitTypes.FUSION_CORE, () => Completed(UnitTypes.STARPORT) > 0 && Gas() >= 300 && Minerals() >= 300); result.Building(UnitTypes.STARPORT, () => Count(UnitTypes.COMMAND_CENTER) >= 4 && Count(UnitTypes.FUSION_CORE) > 0 && Count(UnitTypes.BATTLECRUISER) > 0); return(result); }
private BuildList AntiTempestBuild() { BuildList result = new BuildList(); result.If(() => Tyr.Bot.EnemyStrategyAnalyzer.TotalCount(UnitTypes.TEMPEST) > 0 || SkyTossDetected); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.SUPPLY_DEPOT, Main, WallIn.Wall[0].Pos, true); result.Building(UnitTypes.BARRACKS); result.Building(UnitTypes.REFINERY); result.Building(UnitTypes.SUPPLY_DEPOT, Main, WallIn.Wall[1].Pos, true); result.Building(UnitTypes.BUNKER, Main, WallIn.Wall[2].Pos, true); result.Building(UnitTypes.FACTORY); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.REFINERY); result.Building(UnitTypes.STARPORT); result.Building(UnitTypes.ARMORY); result.If(() => Minerals() >= 350 || Count(UnitTypes.THOR) >= 2); result.Building(UnitTypes.FACTORY); result.Building(UnitTypes.REFINERY, 2); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.FACTORY); result.Building(UnitTypes.ENGINEERING_BAY); result.Building(UnitTypes.REFINERY, 3); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.BARRACKS); result.Building(UnitTypes.REFINERY, 3); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.REFINERY, 2); result.Building(UnitTypes.STARPORT, () => { return(!ZealotRushSuspected || CannonsDetected); }); return(result); }
private BuildList Units() { BuildList result = new BuildList(); result.If(() => Count(UnitTypes.STALKER) < 5 || Count(UnitTypes.IMMORTAL) < 2 || Count(UnitTypes.NEXUS) >= 2 || EarlyExpand); result.If(() => !EarlyForge || Count(UnitTypes.FORGE) > 0 || EarlyExpand); result.If(() => !EarlyForge || Completed(UnitTypes.FORGE) == 0 || Count(UnitTypes.PHOTON_CANNON) > 0 || EarlyExpand); result.Train(UnitTypes.ZEALOT, 4, () => StrategyAnalysis.WorkerRush.Get().Detected); result.Train(UnitTypes.SENTRY, 1, () => (VoidraysDetected && !CannonDefenseDetected)); result.Train(UnitTypes.SENTRY, 1, () => !EarlyExpand && Count(UnitTypes.STALKER) >= 4); result.Train(UnitTypes.STALKER, () => VoidraysDetected || TotalEnemyCount(UnitTypes.CARRIER) + TotalEnemyCount(UnitTypes.TEMPEST) > 0); result.Train(UnitTypes.TEMPEST); result.Train(UnitTypes.VOID_RAY); result.Train(UnitTypes.OBSERVER, 1, () => Bot.Main.Frame >= 22.4 * 60 * 5 && (Count(UnitTypes.STALKER) + Count(UnitTypes.IMMORTAL) >= 12 || !EarlyExpand)); result.Train(UnitTypes.IMMORTAL, 1, () => TotalEnemyCount(UnitTypes.CARRIER) + TotalEnemyCount(UnitTypes.TEMPEST) == 0 && (!CannonDefenseDetected || !StargateDetected)); result.Train(UnitTypes.IMMORTAL, 3, () => !CannonDefenseDetected && TotalEnemyCount(UnitTypes.CARRIER) + TotalEnemyCount(UnitTypes.TEMPEST) + TotalEnemyCount(UnitTypes.FORGE) + TotalEnemyCount(UnitTypes.PHOTON_CANNON) == 0); result.Train(UnitTypes.IMMORTAL, 3, () => EarlyExpand); result.Train(UnitTypes.OBSERVER, 2); result.Train(UnitTypes.OBSERVER, 3, () => TotalEnemyCount(UnitTypes.DARK_SHRINE) + TotalEnemyCount(UnitTypes.DARK_TEMPLAR) > 0); result.Train(UnitTypes.IMMORTAL, 10, () => TotalEnemyCount(UnitTypes.CARRIER) + TotalEnemyCount(UnitTypes.TEMPEST) == 0 && (!CannonDefenseDetected || !StargateDetected)); result.Train(UnitTypes.ADEPT, 6, () => !StopAdeptHarass && Count(UnitTypes.STALKER) + Count(UnitTypes.IMMORTAL) >= 18); result.Train(UnitTypes.STALKER); return(result); }
private BuildList MainBuild() { BuildList result = new BuildList(); result.Building(UnitTypes.HATCHERY); result.Morph(UnitTypes.OVERLORD); result.Morph(UnitTypes.DRONE, 14); result.Building(UnitTypes.HATCHERY); result.Building(UnitTypes.SPAWNING_POOL); result.Train(UnitTypes.QUEEN, 2); result.Building(UnitTypes.EXTRACTOR); //result.Upgrade(UpgradeType.MetabolicBoost, () => Gas() >= 100); result.Train(UnitTypes.LAIR, 1, () => Gas() >= 100); result.Building(UnitTypes.SPORE_CRAWLER, Main, Main.MineralLinePos, () => Count(UnitTypes.LAIR) > 0); result.Building(UnitTypes.SPORE_CRAWLER, Natural, Natural.MineralLinePos, () => Count(UnitTypes.LAIR) > 0); result.Train(UnitTypes.QUEEN, 2, () => Count(UnitTypes.LAIR) > 0); result.Morph(UnitTypes.DRONE, 6); result.Building(UnitTypes.SPIRE); result.Building(UnitTypes.HYDRALISK_DEN, () => Count(UnitTypes.MUTALISK) >= 8); result.Building(UnitTypes.EXTRACTOR); result.Morph(UnitTypes.DRONE, 4); result.Building(UnitTypes.EXTRACTOR, 3); result.If(() => Count(UnitTypes.MUTALISK) >= 9); result.Morph(UnitTypes.DRONE, 16); result.If(() => Count(UnitTypes.MUTALISK) >= 12); result.Building(UnitTypes.HATCHERY); result.Morph(UnitTypes.DRONE, 20); return(result); }
private BuildList MainBuild() { BuildList result = new BuildList(); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.PYLON, () => Count(UnitTypes.PROBE) >= 14); result.Building(UnitTypes.ASSIMILATOR, () => Count(UnitTypes.PROBE) >= 15); result.Building(UnitTypes.GATEWAY, Main, () => Count(UnitTypes.PROBE) >= 16); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.CYBERNETICS_CORE); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.PYLON, Natural); result.Building(UnitTypes.ROBOTICS_FACILITY); result.Building(UnitTypes.TWILIGHT_COUNSEL); result.Building(UnitTypes.GATEWAY, Main, 2, () => Count(UnitTypes.IMMORTAL) > 0); result.Building(UnitTypes.GATEWAY, Main, 2, () => Count(UnitTypes.IMMORTAL) >= 2); result.If(() => TimingAttackTask.Task.AttackSent && Count(UnitTypes.ZEALOT) >= 12); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.FORGE); result.Upgrade(UpgradeType.ProtossGroundWeapons); result.If(() => Count(UnitTypes.IMMORTAL) > 0); result.Building(UnitTypes.ROBOTICS_FACILITY); result.Building(UnitTypes.FORGE); result.Upgrade(UpgradeType.ProtossGroundArmor); result.Building(UnitTypes.ASSIMILATOR); return(result); }
private BuildList MainBuild() { BuildList result = new BuildList(); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.PYLON); result.Building(UnitTypes.GATEWAY, Main); if (Tyr.Bot.EnemyRace != Race.Terran) { result.If(() => { return(!Tyr.Bot.EnemyStrategyAnalyzer.EarlyPool || Tyr.Bot.EnemyStrategyAnalyzer.Expanded || Completed(UnitTypes.ZEALOT) >= 2); }); } result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.CYBERNETICS_CORE); result.Building(UnitTypes.PYLON, Natural); result.Building(UnitTypes.ROBOTICS_FACILITY); result.Building(UnitTypes.PYLON); result.Building(UnitTypes.TWILIGHT_COUNSEL); result.Building(UnitTypes.ASSIMILATOR, 2); result.Building(UnitTypes.FORGE); result.Upgrade(UpgradeType.ProtossGroundWeapons); result.Building(UnitTypes.ASSIMILATOR); result.If(() => Count(UnitTypes.IMMORTAL) > 0); result.Building(UnitTypes.ROBOTICS_FACILITY); result.Building(UnitTypes.FORGE); result.Upgrade(UpgradeType.ProtossGroundArmor); return(result); }
private BuildList Units() { BuildList result = new BuildList(); result.Train(UnitTypes.PROBE, 20); result.Train(UnitTypes.PROBE, 40, () => Count(UnitTypes.NEXUS) >= 2 && Count(UnitTypes.PYLON) > 2); result.Train(UnitTypes.PROBE, 60, () => Count(UnitTypes.NEXUS) >= 3 && Count(UnitTypes.PYLON) > 2); result.Train(UnitTypes.PROBE, 70, () => Count(UnitTypes.NEXUS) >= 4 && Count(UnitTypes.PYLON) > 2); result.Train(UnitTypes.ZEALOT, 1, () => BuildZealots); result.Train(UnitTypes.STALKER, 1, () => !BuildZealots); result.Upgrade(UpgradeType.WarpGate, () => Count(UnitTypes.IMMORTAL) > 0); result.Upgrade(UpgradeType.ProtossAirWeapons, () => Count(UnitTypes.TEMPEST) + Count(UnitTypes.CARRIER) > 0); result.Upgrade(UpgradeType.ProtossAirArmor, () => Count(UnitTypes.TEMPEST) + Count(UnitTypes.CARRIER) > 0); result.Upgrade(UpgradeType.ProtossGroundArmor, () => Count(UnitTypes.TEMPEST) + Count(UnitTypes.CARRIER) > 0); result.Upgrade(UpgradeType.ProtossGroundWeapons, () => Count(UnitTypes.TEMPEST) + Count(UnitTypes.CARRIER) > 0); result.Upgrade(UpgradeType.ProtossShields, () => Count(UnitTypes.TEMPEST) + Count(UnitTypes.CARRIER) > 0); result.Train(UnitTypes.PHOENIX, 3, () => Count(UnitTypes.FLEET_BEACON) == 0); result.Train(UnitTypes.MOTHERSHIP, 1); result.Train(UnitTypes.CARRIER, 10); result.If(() => Count(UnitTypes.STALKER) + Count(UnitTypes.ZEALOT) + Count(UnitTypes.PHOENIX) < 30 || Count(UnitTypes.NEXUS) >= 3); result.If(() => Count(UnitTypes.NEXUS) >= 2 || Count(UnitTypes.STALKER) + Count(UnitTypes.ZEALOT) < 15); result.If(() => Count(UnitTypes.NEXUS) >= 3 || Count(UnitTypes.STALKER) + Count(UnitTypes.ZEALOT) < 20); result.Train(UnitTypes.IMMORTAL, 2); result.Train(UnitTypes.OBSERVER, 2); result.Train(UnitTypes.IMMORTAL, 8); result.Train(UnitTypes.ZEALOT, 10, () => BuildZealots); result.Train(UnitTypes.STALKER, 15); return(result); }
private BuildList Units() { BuildList result = new BuildList(); result.Train(UnitTypes.PROBE, 19); result.Train(UnitTypes.PROBE, 40, () => Count(UnitTypes.NEXUS) >= 2); result.Train(UnitTypes.PROBE, 60, () => Count(UnitTypes.NEXUS) >= 3); result.Train(UnitTypes.PROBE, 80, () => Count(UnitTypes.NEXUS) >= 4); result.If(() => Count(UnitTypes.ZEALOT) < 5 || Count(UnitTypes.IMMORTAL) < 2 || Count(UnitTypes.NEXUS) >= 2); result.Upgrade(UpgradeType.Charge); result.Upgrade(UpgradeType.WarpGate); result.Train(UnitTypes.IMMORTAL, 3); result.Train(UnitTypes.OBSERVER, 1); result.Train(UnitTypes.COLOSUS, 3, () => TotalEnemyCount(UnitTypes.VIKING_FIGHTER) + TotalEnemyCount(UnitTypes.LIBERATOR) + TotalEnemyCount(UnitTypes.LIBERATOR_AG) == 0); result.Train(UnitTypes.IMMORTAL, 20); result.Train(UnitTypes.STALKER, 1, () => Completed(UnitTypes.IMMORTAL) == 0); result.If(() => Count(UnitTypes.STALKER) + Count(UnitTypes.IMMORTAL) > 0); result.Train(UnitTypes.PHOENIX, 5); result.Train(UnitTypes.ZEALOT, 10); //result.Train(UnitTypes.STALKER, 20, () => TotalEnemyCount(UnitTypes.LIBERATOR) + TotalEnemyCount(UnitTypes.LIBERATOR_AG) > 0); result.Train(UnitTypes.ZEALOT, 20); result.Train(UnitTypes.ZEALOT, 25, () => TotalEnemyCount(UnitTypes.VIKING_FIGHTER) == 0); result.Train(UnitTypes.STALKER, 10); result.Train(UnitTypes.ZEALOT); return(result); }
private BuildList MainBuild() { BuildList result = new BuildList(); result.If(() => !SuspectCloackedBanshees); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.SUPPLY_DEPOT); result.Building(UnitTypes.BARRACKS); result.Building(UnitTypes.REFINERY); result.Building(UnitTypes.FACTORY); result.If(() => Bot.Main.Frame >= 22.4 * 60 * 2.5 + 22.4); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.REFINERY); result.Building(UnitTypes.FACTORY, () => Count(UnitTypes.CYCLONE) + Count(UnitTypes.SIEGE_TANK) + Count(UnitTypes.THOR) > 0); result.Building(UnitTypes.REFINERY, 1, () => Count(UnitTypes.CYCLONE) + Count(UnitTypes.SIEGE_TANK) + Count(UnitTypes.THOR) > 0); result.If(() => Completed(UnitTypes.SIEGE_TANK) >= 3); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.ARMORY); result.Building(UnitTypes.ENGINEERING_BAY); result.Building(UnitTypes.REFINERY, 2); result.Building(UnitTypes.FACTORY); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.STARPORT); result.Building(UnitTypes.REFINERY, 3); result.Building(UnitTypes.FACTORY); result.Building(UnitTypes.COMMAND_CENTER); result.Building(UnitTypes.REFINERY, 2); result.Building(UnitTypes.STARPORT); result.Building(UnitTypes.FACTORY); return(result); }
private BuildList MainBuild() { BuildList result = new BuildList(); result.Morph(UnitTypes.DRONE, 14); result.Building(UnitTypes.HATCHERY, 2); result.Building(UnitTypes.SPAWNING_POOL); result.Morph(UnitTypes.OVERLORD, 2); result.Morph(UnitTypes.DRONE, 6); result.Building(UnitTypes.SPINE_CRAWLER, Natural, NaturalDefensePos, 2, () => { return(Completed(UnitTypes.HATCHERY) >= 2); }); result.Morph(UnitTypes.ZERGLING, 4); result.Building(UnitTypes.EXTRACTOR); result.Morph(UnitTypes.ZERGLING, 4); result.Building(UnitTypes.HATCHERY, () => { return(AvailableMineralPatches() <= 12); }); result.If(() => { return(Gas() < 100 || Tyr.Bot.Observation.Observation.RawData.Player.UpgradeIds.Contains(66) || Tyr.Bot.UnitManager.ActiveOrders.Contains(1253)); }); result.Morph(UnitTypes.ZERGLING, 12); result.If(() => { return(Gas() < 150 || Count(UnitTypes.HIVE) > 0 || Completed(UnitTypes.INFESTATION_PIT) == 0); }); result.If(() => { return(!TimingAttackTask.Task.AttackSent || Count(UnitTypes.LAIR) + Count(UnitTypes.HIVE) > 0); }); result.Morph(UnitTypes.ZERGLING, 20); result.If(() => { return(Completed(UnitTypes.EVOLUTION_CHAMBER) < 2 || ResearchingUpgrades + (MeleeUpgrade / 3) + (ArmorUpgrade / 3) == 2); }); result.Morph(UnitTypes.ZERGLING, 400); return(result); }
private BuildList Units() { BuildList result = new BuildList(); result.Train(UnitTypes.PROBE, 20); result.Train(UnitTypes.PROBE, 40, () => Count(UnitTypes.NEXUS) >= 2 && Count(UnitTypes.PYLON) > 2); result.Train(UnitTypes.PROBE, 60, () => Count(UnitTypes.NEXUS) >= 3 && Count(UnitTypes.PYLON) > 2); result.Train(UnitTypes.PROBE, 70, () => Count(UnitTypes.NEXUS) >= 4 && Count(UnitTypes.PYLON) > 2); result.Train(UnitTypes.OBSERVER, 1); result.Train(UnitTypes.STALKER, 1); result.Train(UnitTypes.OBSERVER, 2, () => BansheesDetected || Count(UnitTypes.IMMORTAL) > 0); result.Train(UnitTypes.TEMPEST, 2); result.Train(UnitTypes.PHOENIX, 10); result.Upgrade(UpgradeType.WarpGate); result.If(() => Count(UnitTypes.STALKER) + Count(UnitTypes.IMMORTAL) + Count(UnitTypes.PHOENIX) < 30 || Count(UnitTypes.NEXUS) >= 3); result.If(() => !BuildTempest || Count(UnitTypes.FLEET_BEACON) > 0 || Count(UnitTypes.STALKER) < 20); result.If(() => Count(UnitTypes.NEXUS) >= 2 || Count(UnitTypes.STALKER) + Count(UnitTypes.IMMORTAL) < 15); result.If(() => Count(UnitTypes.NEXUS) >= 3 || Count(UnitTypes.STALKER) + Count(UnitTypes.IMMORTAL) < 20); result.Train(UnitTypes.IMMORTAL, 5, () => !BansheesDetected); result.Train(UnitTypes.COLOSUS, 4, () => !BansheesDetected); result.Train(UnitTypes.IMMORTAL, () => !BansheesDetected); result.Train(UnitTypes.STALKER, 5); result.Train(UnitTypes.SENTRY, 1); result.Train(UnitTypes.STALKER); return(result); }
private BuildList Units() { BuildList result = new BuildList(); result.Train(UnitTypes.PROBE, 20); result.Train(UnitTypes.PROBE, 40, () => Count(UnitTypes.NEXUS) >= 2 && Count(UnitTypes.PYLON) > 2); result.Train(UnitTypes.PROBE, 60, () => Count(UnitTypes.NEXUS) >= 3 && Count(UnitTypes.PYLON) > 2); result.Train(UnitTypes.PROBE, 70, () => Count(UnitTypes.NEXUS) >= 4 && Count(UnitTypes.PYLON) > 2); result.Train(UnitTypes.STALKER, 1); result.Train(UnitTypes.VOID_RAY, 2); result.Train(UnitTypes.ORACLE, 1); result.Train(UnitTypes.VOID_RAY, 6); result.Train(UnitTypes.ORACLE, 3); result.Train(UnitTypes.VOID_RAY, 10); result.Train(UnitTypes.ORACLE, 4); result.Train(UnitTypes.DARK_TEMPLAR, 20); result.Train(UnitTypes.TEMPEST, 20); result.Train(UnitTypes.PHOENIX, 20); result.If(() => Count(UnitTypes.STALKER) + Count(UnitTypes.PHOENIX) < 30 || Count(UnitTypes.NEXUS) >= 3); result.If(() => Count(UnitTypes.NEXUS) >= 2 || Count(UnitTypes.STALKER) < 15); result.If(() => Count(UnitTypes.NEXUS) >= 3 || Count(UnitTypes.STALKER) < 20); result.Train(UnitTypes.STALKER, 5); result.Train(UnitTypes.STALKER, 15, () => Completed(UnitTypes.DARK_SHRINE) == 0); return(result); }
private BuildList MainBuildListOld() { BuildList result = new BuildList(); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.PYLON); result.If(() => Completed(UnitTypes.PYLON) > 0); result.Building(UnitTypes.GATEWAY); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.CYBERNETICS_CORE); result.Building(UnitTypes.GATEWAY); result.Building(UnitTypes.ASSIMILATOR); result.If(() => Bot.Main.Frame >= 22.4 * 131); result.Building(UnitTypes.ROBOTICS_FACILITY, () => !DefendColossus); result.Building(UnitTypes.STARGATE, () => DefendColossus); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.PYLON, Natural, NaturalDefensePos); result.Building(UnitTypes.GATEWAY); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.GATEWAY); result.If(() => Minerals() >= 250); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.GATEWAY); return(result); }
private BuildList MainBuild() { BuildList result = new BuildList(); result.Morph(UnitTypes.DRONE, 14); result.Building(UnitTypes.SPAWNING_POOL); result.Building(UnitTypes.HATCHERY, 2, () => !SmellCheese || Count(UnitTypes.ROACH) >= 15); result.Morph(UnitTypes.DRONE, 4, () => !SmellCheese || Count(UnitTypes.ROACH) >= 15); result.Building(UnitTypes.SPINE_CRAWLER, Main, MainDefensePos, 2, () => SmellCheese); result.If(() => !SmellCheese || Completed(UnitTypes.SPINE_CRAWLER) >= 2); result.Building(UnitTypes.ROACH_WARREN, () => SmellCheese); //result.Building(UnitTypes.SPINE_CRAWLER, Natural, NaturalDefensePos, 2, () => !SmellCheese && Natural.ResourceCenter != null && Natural.ResourceCenter.Unit.BuildProgress >= 0.99); result.Building(UnitTypes.EXTRACTOR, () => SmellCheese); result.Morph(UnitTypes.ROACH, 4, () => SmellCheese); result.Morph(UnitTypes.ZERGLING, 8, () => Completed(UnitTypes.ROACH) < 4 && SmellCheese); result.Morph(UnitTypes.ZERGLING, 6, () => Completed(UnitTypes.ROACH) < 4 && SmellCheese); result.Morph(UnitTypes.DRONE, 2); result.Building(UnitTypes.ROACH_WARREN, () => !SmellCheese); result.Building(UnitTypes.EXTRACTOR, () => !SmellCheese); result.Morph(UnitTypes.DRONE, 5, () => !SmellCheese || Count(UnitTypes.ROACH) >= 20); result.Morph(UnitTypes.ROACH, 4); result.Building(UnitTypes.SPINE_CRAWLER, Main, MainDefensePos, () => SmellCheese && Tyr.Bot.EnemyStrategyAnalyzer.Count(UnitTypes.SPINE_CRAWLER) == 0); result.Morph(UnitTypes.DRONE, 5); result.Building(UnitTypes.EVOLUTION_CHAMBER, 2, () => !SmellCheese || Count(UnitTypes.ROACH) >= 10); result.Upgrade(UpgradeType.ZergMissileWeapons, () => !SmellCheese || Count(UnitTypes.ROACH) >= 10); result.Upgrade(UpgradeType.ZergGroundArmor, () => !SmellCheese || Count(UnitTypes.ROACH) >= 10); result.Morph(UnitTypes.DRONE, 10, () => !SmellCheese || Count(UnitTypes.ROACH) >= 20); result.Building(UnitTypes.EXTRACTOR, () => !SmellCheese || SpinePushDetected); result.Morph(UnitTypes.ROACH, 10); result.Building(UnitTypes.INFESTATION_PIT, () => SpinePushDetected); result.Morph(UnitTypes.SWARM_HOST, 15, () => SpinePushDetected); result.Building(UnitTypes.HYDRALISK_DEN, () => NeedAntiAir); result.Building(UnitTypes.EXTRACTOR, 2, () => NeedAntiAir); result.Morph(UnitTypes.HYDRALISK, 10, () => NeedAntiAir); result.Upgrade(UpgradeType.GroovedSpines, () => NeedAntiAir); result.Upgrade(UpgradeType.MuscularAugments, () => NeedAntiAir); result.Building(UnitTypes.EXTRACTOR); result.Morph(UnitTypes.ROACH, 6, () => SmellCheese); result.Building(UnitTypes.EXTRACTOR, () => SmellCheese); result.If(() => !SmellCheese || Count(UnitTypes.ROACH) >= 20); result.Building(UnitTypes.HATCHERY); result.Morph(UnitTypes.DRONE, 20); result.Morph(UnitTypes.OVERSEER, 2); result.Building(UnitTypes.EXTRACTOR, 2); result.Building(UnitTypes.INFESTATION_PIT, () => !SpinePushDetected); result.Building(UnitTypes.EXTRACTOR, 4); result.Upgrade(UpgradeType.PathogenGlands); result.Morph(UnitTypes.INFESTOR, 3, () => Completed(UnitTypes.INFESTATION_PIT) > 0 && !SpinePushDetected); result.Morph(UnitTypes.ROACH, 10); result.Morph(UnitTypes.INFESTOR, 3, () => Completed(UnitTypes.INFESTATION_PIT) > 0 && !SpinePushDetected); result.Morph(UnitTypes.ROACH, 10, () => !NeedAntiAir); result.Building(UnitTypes.HATCHERY, 2); result.Morph(UnitTypes.HYDRALISK, 10, () => NeedAntiAir); result.Morph(UnitTypes.DRONE, 10); result.Building(UnitTypes.EXTRACTOR, 5); result.Morph(UnitTypes.ROACH, 100); result.Train(UnitTypes.HIVE); return(result); }
private BuildList Overlords() { BuildList result = new BuildList(); result.If(() => { return(!StrategyAnalysis.WorkerRush.Get().Detected || (FoodUsed() == ExpectedAvailableFood() && Count(UnitTypes.ZERGLING) >= 4) || Count(UnitTypes.ZERGLING) >= 6); }); result.If(() => { return(Count(UnitTypes.SPAWNING_POOL) > 0 && FoodUsed() >= ExpectedAvailableFood() - 2); }); result.Morph(UnitTypes.OVERLORD, 25); return(result); }
private BuildList MainBuild() { BuildList result = new BuildList(); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.PYLON, Natural, WallIn.Wall[4].Pos, true); result.Building(UnitTypes.GATEWAY, Natural, WallIn.Wall[0].Pos, true, () => Completed(UnitTypes.PYLON) > 0); result.Building(UnitTypes.GATEWAY, Natural, WallIn.Wall[3].Pos, true, () => Completed(UnitTypes.PYLON) > 0 && Tyr.Bot.EnemyStrategyAnalyzer.EarlyPool); result.Building(UnitTypes.GATEWAY, Natural, WallIn.Wall[1].Pos, true, () => Completed(UnitTypes.PYLON) > 0 && Tyr.Bot.EnemyStrategyAnalyzer.EarlyPool); result.Building(UnitTypes.NEXUS, () => !Tyr.Bot.EnemyStrategyAnalyzer.EarlyPool || Completed(UnitTypes.ADEPT) + Completed(UnitTypes.ZEALOT) + Completed(UnitTypes.STALKER) >= 8); result.Building(UnitTypes.CYBERNETICS_CORE, Natural, WallIn.Wall[1].Pos, true, () => !Tyr.Bot.EnemyStrategyAnalyzer.EarlyPool); result.Building(UnitTypes.CYBERNETICS_CORE, () => Tyr.Bot.EnemyStrategyAnalyzer.EarlyPool && Count(UnitTypes.ZEALOT) >= 6); result.Building(UnitTypes.ASSIMILATOR, () => !Tyr.Bot.EnemyStrategyAnalyzer.EarlyPool || Count(UnitTypes.ZEALOT) >= 6); result.Building(UnitTypes.GATEWAY, Natural, WallIn.Wall[3].Pos, true, () => !Tyr.Bot.EnemyStrategyAnalyzer.EarlyPool); if (ShieldBatteryPos == null) { result.Building(UnitTypes.SHIELD_BATTERY, Natural, NaturalDefensePos); } else { result.Building(UnitTypes.SHIELD_BATTERY, Natural, ShieldBatteryPos, true); } result.Building(UnitTypes.FORGE, () => Tyr.Bot.EnemyStrategyAnalyzer.EarlyPool || AggressiveZerglings); result.Building(UnitTypes.PHOTON_CANNON, Natural, NaturalDefensePos, 2, () => Tyr.Bot.EnemyStrategyAnalyzer.EarlyPool || AggressiveZerglings); result.Building(UnitTypes.TWILIGHT_COUNSEL); result.Building(UnitTypes.ASSIMILATOR); result.Upgrade(UpgradeType.WarpGate); result.Building(UnitTypes.PYLON, Natural, () => Count(UnitTypes.CYBERNETICS_CORE) > 0 && Natural.ResourceCenter != null); result.Building(UnitTypes.TEMPLAR_ARCHIVE); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.FORGE, () => !Tyr.Bot.EnemyStrategyAnalyzer.EarlyPool); result.Upgrade(UpgradeType.ProtossGroundWeapons); result.Building(UnitTypes.GATEWAY, 2); result.Building(UnitTypes.PYLON); result.Building(UnitTypes.ASSIMILATOR, 2); result.Building(UnitTypes.PYLON); result.Building(UnitTypes.GATEWAY, 2); result.Building(UnitTypes.FORGE); result.Upgrade(UpgradeType.ProtossGroundArmor); //result.Building(UnitTypes.ASSIMILATOR, 3, () => TotalEnemyCount(UnitTypes.ROACH) >= 5); //result.Building(UnitTypes.ROBOTICS_FACILITY, () => TotalEnemyCount(UnitTypes.ROACH) >= 5); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.ASSIMILATOR, 4, () => Minerals() >= 700 && Gas() < 200); result.If(() => Count(UnitTypes.IMMORTAL) + Count(UnitTypes.COLOSUS) + Completed(UnitTypes.ARCHON) >= 3 && Count(UnitTypes.STALKER) + Completed(UnitTypes.ZEALOT) >= 10); result.Building(UnitTypes.ASSIMILATOR, 2); result.Building(UnitTypes.ASSIMILATOR, 2); result.If(() => Count(UnitTypes.STALKER) + Count(UnitTypes.IMMORTAL) + Count(UnitTypes.COLOSUS) + Count(UnitTypes.ARCHON) + Count(UnitTypes.ADEPT) + Count(UnitTypes.ZEALOT) >= 15); result.Building(UnitTypes.ASSIMILATOR, 2); result.Building(UnitTypes.GATEWAY, 2); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.ASSIMILATOR, 2); result.If(() => Completed(UnitTypes.STALKER) + Completed(UnitTypes.ZEALOT) + Completed(UnitTypes.COLOSUS) + Completed(UnitTypes.IMMORTAL) + Completed(UnitTypes.ARCHON) + Completed(UnitTypes.DISRUPTOR) + Completed(UnitTypes.TEMPEST) + Count(UnitTypes.ADEPT) >= 40 || Minerals() >= 650); result.Building(UnitTypes.NEXUS); return(result); }
private BuildList MainBuild() { BuildList result = new BuildList(); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.PYLON, Main, WallIn.Wall[1].Pos, true); result.Building(UnitTypes.GATEWAY, Main, WallIn.Wall[0].Pos, true, () => Completed(UnitTypes.PYLON) > 0); if (Tyr.Bot.EnemyRace != Race.Terran) { result.If(() => { return(!Tyr.Bot.EnemyStrategyAnalyzer.EarlyPool || Tyr.Bot.EnemyStrategyAnalyzer.Expanded || Completed(UnitTypes.STALKER) + Completed(UnitTypes.ADEPT) >= 5); }); } result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.ASSIMILATOR); result.Building(UnitTypes.CYBERNETICS_CORE); result.Building(UnitTypes.GATEWAY, Main); result.Building(UnitTypes.ASSIMILATOR, () => !FourRaxSuspected || Count(UnitTypes.PHOTON_CANNON) >= 2); result.Building(UnitTypes.PYLON, Natural); result.Building(UnitTypes.GATEWAY, Natural, () => FourRaxSuspected && Completed(Natural, UnitTypes.PYLON) > 0); result.Building(UnitTypes.SHIELD_BATTERY, Natural, 2, () => FourRaxSuspected && Completed(Natural, UnitTypes.PYLON) > 0); result.Building(UnitTypes.FORGE, () => FourRaxSuspected && Count(UnitTypes.GATEWAY) >= 3); result.Building(UnitTypes.PHOTON_CANNON, Natural, 4, () => FourRaxSuspected); result.Building(UnitTypes.ASSIMILATOR, () => FourRaxSuspected && Minerals() >= 600); result.Building(UnitTypes.ASSIMILATOR, () => FourRaxSuspected && Minerals() >= 800); result.If(() => !FourRaxSuspected || Count(UnitTypes.STALKER) >= 10); result.Building(UnitTypes.ROBOTICS_FACILITY); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.PYLON); result.Building(UnitTypes.ASSIMILATOR, 2, () => Tyr.Bot.EnemyStrategyAnalyzer.TotalCount(UnitTypes.BANSHEE) >= 3); result.Building(UnitTypes.TWILIGHT_COUNSEL); result.Building(UnitTypes.FORGE); result.Upgrade(UpgradeType.ProtossGroundWeapons); result.Building(UnitTypes.FORGE, () => !FourRaxSuspected); result.Upgrade(UpgradeType.ProtossGroundArmor); result.Building(UnitTypes.ASSIMILATOR, 2); result.Building(UnitTypes.PYLON); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.ROBOTICS_FACILITY, () => !BattlecruisersDetected && Tyr.Bot.EnemyStrategyAnalyzer.TotalCount(UnitTypes.BANSHEE) == 0); result.Building(UnitTypes.ASSIMILATOR, 4, () => Minerals() >= 700 && Gas() < 200); //result.Building(UnitTypes.STARGATE); //result.Building(UnitTypes.FLEET_BEACON); result.If(() => Count(UnitTypes.IMMORTAL) >= 3 && Count(UnitTypes.STALKER) >= 10); result.Building(UnitTypes.ROBOTICS_BAY, () => !BattlecruisersDetected && Tyr.Bot.EnemyStrategyAnalyzer.TotalCount(UnitTypes.BANSHEE) == 0); result.Building(UnitTypes.STARGATE, () => BattlecruisersDetected || Tyr.Bot.EnemyStrategyAnalyzer.TotalCount(UnitTypes.BANSHEE) > 0); result.Building(UnitTypes.FLEET_BEACON, () => Completed(UnitTypes.STARGATE) > 0); result.Building(UnitTypes.ASSIMILATOR, 2); result.Building(UnitTypes.ASSIMILATOR, 2); result.If(() => Count(UnitTypes.STALKER) >= 20); result.Building(UnitTypes.ASSIMILATOR, 2); result.Building(UnitTypes.NEXUS); result.Building(UnitTypes.ASSIMILATOR, 2); result.If(() => Completed(UnitTypes.STALKER) + Completed(UnitTypes.IMMORTAL) + Completed(UnitTypes.DISRUPTOR) + Completed(UnitTypes.TEMPEST) >= 40 || Minerals() >= 650); result.Building(UnitTypes.NEXUS); return(result); }
private BuildList Units() { BuildList result = new BuildList(); result.Train(UnitTypes.PROBE, 19); result.Train(UnitTypes.PROBE, 40, () => Count(UnitTypes.NEXUS) >= 2); result.Train(UnitTypes.PROBE, 60, () => Count(UnitTypes.NEXUS) >= 3); result.Train(UnitTypes.PROBE, 80, () => Count(UnitTypes.NEXUS) >= 4); result.If(() => Count(UnitTypes.STALKER) < 5 || Count(UnitTypes.IMMORTAL) < 2 || Count(UnitTypes.NEXUS) >= 2); result.If(() => !EarlyPool.Get().Detected || Count(UnitTypes.ZEALOT) < 8 || Count(UnitTypes.NEXUS) >= 2); result.If(() => Completed(UnitTypes.CYBERNETICS_CORE) > 0 || (EarlyPool.Get().Detected&& Count(UnitTypes.ZEALOT) + Count(UnitTypes.ADEPT) < 8)); result.Train(UnitTypes.STALKER, 6, () => RoachRushDetected); result.Train(UnitTypes.ZEALOT, 1, () => EarlyPool.Get().Detected&& !RoachRushDetected); result.Train(UnitTypes.ADEPT, 2, () => !AdeptHarassMainTask.Task.Sent && !RoachRushDetected); result.Upgrade(UpgradeType.WarpGate, () => !EarlyPool.Get().Detected || Count(UnitTypes.ADEPT) + Count(UnitTypes.ZEALOT) >= 4); result.Train(UnitTypes.ZEALOT, 1, () => Completed(UnitTypes.NEXUS) < 3); result.Train(UnitTypes.ZEALOT, 2, () => EarlyPool.Get().Detected&& !RoachRushDetected); result.Train(UnitTypes.ADEPT, 5, () => EarlyPool.Get().Detected&& !RoachRushDetected); result.Train(UnitTypes.ZEALOT, 10, () => EarlyPool.Get().Detected&& !RoachRushDetected); //result.Train(UnitTypes.WARP_PRISM, 1, () => !InitialAttackDone && !RoachRushDetected); result.Train(UnitTypes.SENTRY, 1, () => !TimingAttackTask.Task.AttackSent && !RoachRushDetected && !EarlyPool.Get().Detected&& Count(UnitTypes.ZEALOT) > 0); result.Train(UnitTypes.ZEALOT, 6, () => !InitialAttackDone && Count(UnitTypes.TEMPLAR_ARCHIVE) > 0); result.Train(UnitTypes.ZEALOT, 8, () => !InitialAttackDone && Count(UnitTypes.HIGH_TEMPLAR) + Count(UnitTypes.ARCHON) * 2 >= 4); result.Train(UnitTypes.IMMORTAL, 1); result.Train(UnitTypes.OBSERVER, 1, () => RoachRushDetected); result.Train(UnitTypes.IMMORTAL, 2); result.Train(UnitTypes.WARP_PRISM, 1, () => !RoachRushDetected || (Count(UnitTypes.ROBOTICS_FACILITY) >= 2 && Count(UnitTypes.NEXUS) >= 3)); result.Train(UnitTypes.IMMORTAL, 3); result.Train(UnitTypes.OBSERVER, 1); result.Upgrade(UpgradeType.ExtendedThermalLance, () => UseColosus); result.Train(UnitTypes.COLOSUS, 3, () => UseColosus); result.Train(UnitTypes.IMMORTAL, 6, () => !RoachRushDetected || Count(UnitTypes.NEXUS) >= 3); result.Train(UnitTypes.COLOSUS, 4, () => UseColosus && RoboArmy); result.Train(UnitTypes.IMMORTAL, 8, () => !RoachRushDetected || Count(UnitTypes.NEXUS) >= 3); result.Train(UnitTypes.COLOSUS, 5, () => UseColosus && RoboArmy); result.Train(UnitTypes.IMMORTAL, 10, () => !RoachRushDetected || Count(UnitTypes.NEXUS) >= 3); result.Train(UnitTypes.COLOSUS, 6, () => UseColosus && RoboArmy); result.Train(UnitTypes.IMMORTAL, 12, () => !RoachRushDetected || Count(UnitTypes.NEXUS) >= 3); result.Upgrade(UpgradeType.Charge, () => Count(UnitTypes.TEMPLAR_ARCHIVE) > 0 || (Gas() >= 200 && Minerals() >= 300)); result.Train(UnitTypes.HIGH_TEMPLAR, 2, () => Gas() >= 75 && Count(UnitTypes.HIGH_TEMPLAR) == 1 && !RoboArmy); result.Train(UnitTypes.HIGH_TEMPLAR, () => Gas() >= 150 && Count(UnitTypes.ARCHON) * 2 + Count(UnitTypes.HIGH_TEMPLAR) < 6 && !RoboArmy); result.Train(UnitTypes.HIGH_TEMPLAR, 6, () => Gas() >= 150 && InitialAttackDone && UseStorm && !RoboArmy); result.Upgrade(UpgradeType.PsiStorm, () => InitialAttackDone && UseStorm && !RoboArmy); result.Train(UnitTypes.ZEALOT, 5, () => Count(UnitTypes.IMMORTAL) + Count(UnitTypes.ARCHON) >= 2 && (Completed(UnitTypes.WARP_PRISM) == 0 || TimingAttackTask.Task.Units.Count == 0) && RoboArmy); result.Train(UnitTypes.ZEALOT, 10, () => Count(UnitTypes.IMMORTAL) >= 4 && Count(UnitTypes.COLOSUS) >= 2 && RoboArmy); result.Train(UnitTypes.ZEALOT, 5, () => !InitialAttackDone); result.Train(UnitTypes.ZEALOT, 10, () => !InitialAttackDone && Completed(UnitTypes.TWILIGHT_COUNSEL) == 1 && Count(UnitTypes.TEMPLAR_ARCHIVE) == 1 && Completed(UnitTypes.TEMPLAR_ARCHIVE) == 0); result.Train(UnitTypes.ZEALOT, 15, () => Count(UnitTypes.IMMORTAL) + Count(UnitTypes.ARCHON) >= 2 && (Completed(UnitTypes.WARP_PRISM) == 0 || TimingAttackTask.Task.Units.Count == 0) && !RoboArmy); result.Train(UnitTypes.ZEALOT, 25, () => Count(UnitTypes.IMMORTAL) + Count(UnitTypes.ARCHON) >= 2 && (Completed(UnitTypes.WARP_PRISM) == 0 || TimingAttackTask.Task.Units.Count == 0) && InitialAttackDone && !RoboArmy); result.Train(UnitTypes.ZEALOT, 35, () => Count(UnitTypes.IMMORTAL) + Count(UnitTypes.ARCHON) >= 2 && InitialAttackDone && Minerals() >= 400 && !RoboArmy); result.Train(UnitTypes.STALKER, 35, () => Count(UnitTypes.IMMORTAL) + Count(UnitTypes.ARCHON) >= 2 && InitialAttackDone && Minerals() >= 400 && RoboArmy); return(result); }
private BuildList Nexii() { BuildList result = new BuildList(); result.If(() => { return(Count(UnitTypes.GATEWAY) >= 2 && (!SmellCheese || Count(UnitTypes.ADEPT) + Count(UnitTypes.STALKER) >= 8)); }); result.Building(UnitTypes.NEXUS, 2); result.If(() => { return(Attacking); }); result.Building(UnitTypes.NEXUS); return(result); }
private BuildList RushDefenses() { BuildList result = new BuildList(); result.If(() => { return(Count(UnitTypes.FORGE) > 0 && DefendRush); }); result.Building(UnitTypes.PHOTON_CANNON, Natural, NaturalDefensePos, 4); result.If(() => { return(!DefendReapers); }); result.Building(UnitTypes.PHOTON_CANNON, Natural, NaturalDefensePos, 2); return(result); }
private BuildList NaturalDefenses() { BuildList result = new BuildList(); result.If(() => { return(SmellCheese && Count(UnitTypes.ADEPT) >= 10); }); result.Building(UnitTypes.FORGE); result.If(() => { return(Attacking); }); result.Building(UnitTypes.PHOTON_CANNON, Main, MainDefensePos, 4); return(result); }
private BuildList Nexii() { BuildList result = new BuildList(); result.If(() => { return(Tyr.Bot.EnemyRace != Race.Terran || Count(UnitTypes.GATEWAY) >= 2); }); result.If(() => { return(Tyr.Bot.EnemyRace != Race.Zerg || Count(UnitTypes.GATEWAY) >= 1); }); result.Building(UnitTypes.NEXUS, 2); result.If(() => { return(Attacking); }); result.Building(UnitTypes.NEXUS); return(result); }