Ejemplo n.º 1
0
 async def create_plan(self) -> BuildOrder:
     flying_buildings = lambda k: self._bot.enemy_structures.flying.exists and self._bot.supply_used > 30
     in_case_of_air = [
         Step(flying_buildings, StepBuildGas(2)),
         ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 20),
         MorphLair(),
         ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 30),
         StepBuildGas(4),
         ActBuilding(UnitTypeId.SPIRE),
         ZergUnit(UnitTypeId.MUTALISK, 10, priority=True)
     ]
     return BuildOrder([
         SequentialList([
             ActBuilding(UnitTypeId.SPAWNINGPOOL, 1),
             ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 14),
             StepBuildGas(1),
             ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 14),
             ActUnit(UnitTypeId.OVERLORD, UnitTypeId.LARVA, 2),
             ActBuilding(UnitTypeId.ROACHWARREN, 1),
             ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 14),
             ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 1),
             ActUnit(UnitTypeId.ROACH, UnitTypeId.LARVA, 100),
         ]), in_case_of_air,
         SequentialList([
             DistributeWorkers(),
             Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
             PlanZoneDefense(),
             AutoOverLord(),
             InjectLarva(),
             PlanZoneGather(),
             Step(UnitExists(UnitTypeId.ROACH, 7), PlanZoneAttackAllIn(1)),
             PlanFinishEnemy(),
         ])
     ])
Ejemplo n.º 2
0
 async def create_plan(self) -> BuildOrder:
     attack = TheAttack(4)
     return BuildOrder([
         Step(None, ChronoUnit(UnitTypeId.STALKER, UnitTypeId.GATEWAY)),
         SequentialList([
             GridBuilding(UnitTypeId.PYLON, 1),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 15),
             GridBuilding(UnitTypeId.GATEWAY, 1),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 16),
             StepBuildGas(1),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 19),
             StepBuildGas(2),
             GridBuilding(UnitTypeId.CYBERNETICSCORE, 1),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 21),
             GridBuilding(UnitTypeId.PYLON, 2),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 22),
             ProtossUnit(UnitTypeId.STALKER, 1),
             Tech(UpgradeId.WARPGATERESEARCH, UnitTypeId.CYBERNETICSCORE),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 23),
             GridBuilding(UnitTypeId.GATEWAY, 4),
             GridBuilding(UnitTypeId.PYLON, 3),
             BuildOrder([AutoPylon(),
                         ProtossUnit(UnitTypeId.STALKER, 100)])
         ]),
         SequentialList([
             PlanZoneDefense(),
             RestorePower(),
             DistributeWorkers(),
             Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
             PlanZoneGather(),
             Step(UnitReady(UnitTypeId.GATEWAY, 4), attack),
             PlanFinishEnemy(),
         ])
     ])
Ejemplo n.º 3
0
    def __init__(self):
        ultras = [
            Step(RequiredUnitExists(UnitTypeId.ULTRALISKCAVERN, 1), None),
            Step(
                RequiredGas(500),
                ActUnit(UnitTypeId.ULTRALISK, UnitTypeId.LARVA,
                        priority=True)),
        ]

        units = [
            Step(None,
                 ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 100),
                 skip=RequiredUnitExists(UnitTypeId.HIVE, 1)),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 50)),
            Step(RequiredUnitExists(UnitTypeId.SPAWNINGPOOL, 1),
                 ActUnit(UnitTypeId.ZERGLING, UnitTypeId.LARVA), None)
        ]

        build_step_expansions = [
            Step(None, ActExpand(999)),
        ]

        queens = [
            Step(RequiredUnitExists(UnitTypeId.SPAWNINGPOOL, 1), None),
            Step(RequiredMinerals(500),
                 ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 5)),
        ]

        pool_and_tech = [
            Step(None, ActBuilding(UnitTypeId.SPAWNINGPOOL, 1)),
            StepBuildGas(2, None),
            Step(None, ActTech(UpgradeId.ZERGLINGMOVEMENTSPEED)),
            Step(RequiredGas(120), ActBuilding(UnitTypeId.EVOLUTIONCHAMBER,
                                               2)),
            Step(RequiredUnitExists(UnitTypeId.EVOLUTIONCHAMBER, 1),
                 ActTech(UpgradeId.ZERGMELEEWEAPONSLEVEL1)),
            Step(None, ActTech(UpgradeId.ZERGGROUNDARMORSLEVEL1)),
            Step(None,
                 MorphLair(),
                 skip=RequiredUnitExists(UnitTypeId.HIVE, 1)),
            StepBuildGas(4, None),
            Step(None, ActTech(UpgradeId.ZERGMELEEWEAPONSLEVEL2)),
            Step(None, ActTech(UpgradeId.ZERGGROUNDARMORSLEVEL2)),
            # Infestation pit required
            Step(None, ActBuilding(UnitTypeId.INFESTATIONPIT, 1)),
            Step(RequiredUnitReady(UnitTypeId.INFESTATIONPIT, 1), MorphHive()),
            Step(RequiredUnitReady(UnitTypeId.HIVE, 1),
                 ActTech(UpgradeId.ZERGLINGATTACKSPEED)),
            StepBuildGas(6, None),
            Step(None, ActBuilding(UnitTypeId.ULTRALISKCAVERN, 1)),
            Step(None, ActTech(UpgradeId.ZERGMELEEWEAPONSLEVEL3)),
            Step(None, ActTech(UpgradeId.ZERGGROUNDARMORSLEVEL3)),
            Step(None, ActTech(UpgradeId.CHITINOUSPLATING)),
            Step(None, ActTech(UpgradeId.ANABOLICSYNTHESIS)),
        ]

        super().__init__([
            self.overlords, ultras, units, build_step_expansions, queens,
            pool_and_tech
        ])
Ejemplo n.º 4
0
    def __init__(self):
        gas_related = [
            StepBuildGas(1, UnitExists(UnitTypeId.HATCHERY, 2)),
            Step(None, Tech(UpgradeId.ZERGLINGMOVEMENTSPEED), skip_until=Gas(100)),
        ]
        buildings = [
            # 12 Pool
            Step(None, ActBuilding(UnitTypeId.SPAWNINGPOOL, 1)),
            Step(UnitExists(UnitTypeId.ZERGLING, 4, include_killed=True), Expand(2)),
            Step(None, ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 2)),
            Step(UnitExists(UnitTypeId.DRONE, 24, include_killed=True), Expand(3)),
            Step(None, ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 3)),
            Step(UnitExists(UnitTypeId.DRONE, 30, include_killed=True), Expand(4)),
            Step(None, ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 4)),
        ]

        spire_end_game = [
            Step(Any([Supply(90), UnitExists(UnitTypeId.LAIR, 1)]), None),
            ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 35),
            MorphLair(),
            ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 40),
            StepBuildGas(3, None),
            ActBuilding(UnitTypeId.SPIRE, 1),
            ActUnit(UnitTypeId.MUTALISK, UnitTypeId.LARVA, 10, priority=True),
        ]

        units = [
            Step(None, None, UnitExists(UnitTypeId.HATCHERY, 1)),
            # 12 Pool followed by overlord
            Step(
                UnitExists(UnitTypeId.SPAWNINGPOOL, 1),
                ActUnit(UnitTypeId.OVERLORD, UnitTypeId.LARVA, 2),
                UnitExists(UnitTypeId.OVERLORD, 2),
            ),
            # TheMusZero
            Step(
                UnitExists(UnitTypeId.SPAWNINGPOOL, 1),
                ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 14),
                UnitExists(UnitTypeId.DRONE, 14),
            ),
            # Early zerglings
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL, 1), ActUnit(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 4), None),
            # Queen for more larvae
            Step(
                UnitExists(UnitTypeId.SPAWNINGPOOL, 1),
                ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 1),
                UnitExists(UnitTypeId.QUEEN, 1),
            ),
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL, 1), ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 20), None),
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL, 1), ActUnitOnce(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 12),
                 None, ),
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL, 1), ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 30), None),
            # Endless zerglings
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL, 1), ActUnit(UnitTypeId.ZERGLING, UnitTypeId.LARVA), None),
        ]

        super().__init__([self.overlords, buildings, spire_end_game, gas_related, units])
Ejemplo n.º 5
0
 async def create_plan(self) -> BuildOrder:
     flying_buildings = lambda k: self._bot.enemy_structures.flying.exists and self._bot.supply_used > 30
     in_case_of_air = [
         Step(flying_buildings, StepBuildGas(2)),
         ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 20),
         MorphLair(),
         ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 30),
         StepBuildGas(4),
         ActBuilding(UnitTypeId.SPIRE),
         ZergUnit(UnitTypeId.MUTALISK, 10, priority=True)
     ]
     limit_gas = Any(
         [Gas(100),
          TechReady(UpgradeId.ZERGLINGMOVEMENTSPEED, 0.001)])
     return BuildOrder([
         SequentialList([
             ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 14),
             Expand(2),
             StepBuildGas(1),
             ActBuilding(UnitTypeId.SPAWNINGPOOL, 1),
             ActUnit(UnitTypeId.OVERLORD, UnitTypeId.LARVA, 2),
             Step(None,
                  Tech(UpgradeId.ZERGLINGMOVEMENTSPEED,
                       UnitTypeId.SPAWNINGPOOL),
                  skip_until=Gas(100)),
             ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 1),
             ActUnit(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 30),
             ActBuilding(UnitTypeId.BANELINGNEST, 1),
             BuildOrder([
                 Step(None,
                      ActUnit(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 200),
                      skip=RequireCustom(lambda k: self._bot.vespene > 25 or
                                         flying_buildings)),
                 Step(None,
                      ActUnit(UnitTypeId.BANELING, UnitTypeId.ZERGLING,
                              200),
                      skip=RequireCustom(flying_buildings)),
             ])
         ]),
         SequentialList([
             Step(None, DistributeWorkers(), skip=limit_gas),
             Step(limit_gas,
                  DistributeWorkers(1, 1),
                  skip=RequireCustom(flying_buildings)),
             Step(RequireCustom(flying_buildings), DistributeWorkers()),
         ]), in_case_of_air,
         SequentialList([
             Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
             PlanZoneDefense(),
             AutoOverLord(),
             InjectLarva(),
             PlanZoneGather(),
             Step(TechReady(UpgradeId.ZERGLINGMOVEMENTSPEED),
                  PlanZoneAttackAllIn(10)),
             PlanFinishEnemy(),
         ])
     ])
Ejemplo n.º 6
0
    async def create_plan(self) -> BuildOrder:
        build_step_buildings = [
            # 12 Pool
            Step(None, ActBuilding(UnitTypeId.SPAWNINGPOOL, 1),
                 UnitExists(UnitTypeId.SPAWNINGPOOL, 1)),
        ]

        finish = [
            Step(
                RequireCustom(lambda k: self.enemy_structures.flying.exists and
                              self.supply_used > 30), StepBuildGas(2)),
            ActExpand(2),
            UnitExists(UnitTypeId.DRONE, 20),
            MorphLair(),
            UnitExists(UnitTypeId.DRONE, 30),
            StepBuildGas(4),
            ActBuilding(UnitTypeId.SPIRE),
            ZergUnit(UnitTypeId.MUTALISK, 10, priority=True),
        ]

        build_step_units = [
            # 12 Pool followed by overlord
            Step(
                UnitExists(UnitTypeId.SPAWNINGPOOL, 1),
                ActUnit(UnitTypeId.OVERLORD, UnitTypeId.LARVA, 2),
                UnitExists(UnitTypeId.OVERLORD, 2),
            ),
            # TheMusZero
            Step(
                UnitExists(UnitTypeId.SPAWNINGPOOL, 1),
                ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 14),
                UnitExists(UnitTypeId.DRONE, 14),
            ),
            # Queen for more larvae
            # BuildStep(UnitExists(UnitTypeId.SPAWNINGPOOL, 1), ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 1), UnitExists(UnitTypeId.QUEEN, 1)),
            # Endless zerglings
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL, 1),
                 ActUnit(UnitTypeId.ZERGLING, UnitTypeId.LARVA), None),
        ]

        return BuildOrder(
            build_step_buildings,
            finish,
            build_step_units,
            AutoOverLord(),
            PlanDistributeWorkers(),
            InjectLarva(),
            PlanWorkerOnlyDefense(),
            PlanZoneDefense(),
            PlanZoneGather(),
            PlanZoneAttack2(2),
            PlanFinishEnemy(),
        )
Ejemplo n.º 7
0
    def __init__(self, orders: List[Union[ActBase, List[ActBase]]]):
        """
        Build order package that replaces normal build order for Zerg with one that builds mutalisks to destroy terran
        flying buildings.
        Add any PlanDistributeWorkers acts with orders
        """
        cover_list = SequentialList([
            PlanDistributeWorkers(),
            AutoOverLord(),
            Step(None, ZergUnit(UnitTypeId.DRONE, 20), skip=Supply(198)),
            StepBuildGas(4, None),
            MorphLair(),
            ActBuilding(UnitTypeId.SPIRE, 1),
            Step(
                None,
                DefensiveBuilding(UnitTypeId.SPORECRAWLER,
                                  DefensePosition.BehindMineralLineCenter),
                skip_until=Supply(199),
            ),
            Step(
                None,
                DefensiveBuilding(UnitTypeId.SPINECRAWLER,
                                  DefensePosition.Entrance),
                skip_until=Supply(199),
            ),
            ZergUnit(UnitTypeId.MUTALISK, 10),
        ])

        new_build_order = [
            Step(None, cover_list, skip_until=self.should_build_mutalisks),
            Step(None, BuildOrder(orders), skip=self.should_build_mutalisks),
        ]
        super().__init__(new_build_order)
Ejemplo n.º 8
0
 async def create_plan(self) -> BuildOrder:
     return BuildOrder(
         Step(
             None,
             ChronoUnitProduction(UnitTypeId.PROBE, UnitTypeId.NEXUS),
             skip=UnitExists(UnitTypeId.PROBE, 40, include_pending=True),
             skip_until=UnitExists(UnitTypeId.ASSIMILATOR, 1),
         ),
         SequentialList(
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 14),
             GridBuilding(UnitTypeId.PYLON, 1),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 16),
             StepBuildGas(1),
             GridBuilding(UnitTypeId.GATEWAY, 1),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 20),
             ActExpand(2),
             GridBuilding(UnitTypeId.CYBERNETICSCORE, 1),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 21),
             StepBuildGas(2),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 22),
             GridBuilding(UnitTypeId.PYLON, 1),
             BuildOrder(
                 AutoPylon(),
                 ActTech(UpgradeId.WARPGATERESEARCH),
                 [
                     ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 22),
                     Step(UnitExists(UnitTypeId.NEXUS, 2),
                          ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 44)),
                     StepBuildGas(3, skip=RequiredGas(300)),
                 ],
                 [GateUnit(UnitTypeId.STALKER, 100)],
                 [
                     GridBuilding(UnitTypeId.GATEWAY, 7),
                     StepBuildGas(4, skip=RequiredGas(200))
                 ],
             ),
         ),
         SequentialList(
             PlanZoneDefense(),
             RestorePower(),
             PlanDistributeWorkers(),
             PlanZoneGather(),
             Step(RequiredUnitReady(UnitTypeId.GATEWAY, 4),
                  PlanZoneAttack(4)),
             PlanFinishEnemy(),
         ),
     )
Ejemplo n.º 9
0
    def __init__(self):

        gas_related = [
            StepBuildGas(1, UnitExists(UnitTypeId.HATCHERY, 2)),
            Step(None,
                 Tech(UpgradeId.ZERGLINGMOVEMENTSPEED),
                 skip_until=Gas(100)),
            Step(None,
                 ActBuilding(UnitTypeId.ROACHWARREN, 1),
                 skip_until=Gas(100)),
        ]
        buildings = [
            Step(UnitExists(UnitTypeId.DRONE, 14),
                 ActUnit(UnitTypeId.OVERLORD, UnitTypeId.LARVA, 2)),
            Step(None, Expand(2)),
            Step(UnitExists(UnitTypeId.EXTRACTOR, 1),
                 ActBuilding(UnitTypeId.SPAWNINGPOOL, 1)),
            Step(
                None,
                ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 2),
                skip_until=UnitExists(UnitTypeId.SPAWNINGPOOL, 1),
            ),
            Step(UnitExists(UnitTypeId.DRONE, 24, include_killed=True),
                 Expand(3)),
            Step(None, ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 3)),
            Step(UnitExists(UnitTypeId.DRONE, 30, include_killed=True),
                 Expand(4)),
            Step(None, ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 4)),
            Step(Minerals(500),
                 ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY,
                         10)),  # anti air defense!
        ]

        units = [
            Step(UnitExists(UnitTypeId.HATCHERY, 1), None),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 20)),
            # Early zerglings
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL, 1),
                 ActUnit(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 12), None),
            # Queen for more larvae
            Step(None, ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 1)),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 30), None),
            Step(None, ActUnitOnce(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 16),
                 None),
            Step(None,
                 ActUnitOnce(UnitTypeId.ROACH, UnitTypeId.LARVA, 4),
                 skip_until=Gas(25)),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 40), None),
            Step(None, ActUnit(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 16),
                 None),
            Step(None,
                 ActUnit(UnitTypeId.ROACH, UnitTypeId.LARVA, 10),
                 skip_until=Gas(25)),
            # Endless zerglings
            Step(None, ActUnit(UnitTypeId.ZERGLING, UnitTypeId.LARVA), None),
        ]
        super().__init__([self.overlords, buildings, gas_related, units])
Ejemplo n.º 10
0
 async def create_plan(self) -> BuildOrder:
     attack = PlanZoneAttack(6)
     return BuildOrder(
         Step(
             None,
             ChronoUnitProduction(UnitTypeId.PROBE, UnitTypeId.NEXUS),
             skip=UnitExists(UnitTypeId.PROBE, 20, include_pending=True),
             skip_until=UnitExists(UnitTypeId.ASSIMILATOR, 1),
         ),
         ChronoTech(AbilityId.RESEARCH_BLINK, UnitTypeId.TWILIGHTCOUNCIL),
         SequentialList(
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 14),
             GridBuilding(UnitTypeId.PYLON, 1),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 16),
             GridBuilding(UnitTypeId.GATEWAY, 1),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 17),
             StepBuildGas(2),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 19),
             GridBuilding(UnitTypeId.GATEWAY, 2),
             BuildOrder(
                 AutoPylon(),
                 ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 22),
                 SequentialList(
                     Step(
                         RequiredUnitReady(UnitTypeId.CYBERNETICSCORE, 1),
                         GridBuilding(UnitTypeId.TWILIGHTCOUNCIL, 1),
                     ),
                     Step(RequiredUnitReady(UnitTypeId.TWILIGHTCOUNCIL, 1), ActTech(UpgradeId.BLINKTECH)),
                 ),
                 SequentialList(
                     Step(
                         None,
                         GridBuilding(UnitTypeId.CYBERNETICSCORE, 1),
                         skip_until=RequiredUnitReady(UnitTypeId.GATEWAY, 1),
                     ),
                     Step(
                         RequiredUnitReady(UnitTypeId.CYBERNETICSCORE, 1),
                         GateUnit(UnitTypeId.ADEPT, 2, only_once=True),
                     ),
                     ActTech(UpgradeId.WARPGATERESEARCH),
                     GateUnit(UnitTypeId.STALKER, 100),
                 ),
                 Step(UnitExists(UnitTypeId.CYBERNETICSCORE, 1), GridBuilding(UnitTypeId.GATEWAY, 4)),
             ),
         ),
         SequentialList(
             PlanZoneDefense(),
             RestorePower(),
             PlanDistributeWorkers(),
             PlanZoneGather(),
             Step(RequiredTechReady(UpgradeId.BLINKTECH, 0.9), attack),
             PlanFinishEnemy(),
         ),
     )
Ejemplo n.º 11
0
    def __init__(self):
        """Set everything up."""
        self.enemy_rushes = {
            EnemyBuild.GeneralRush,
            EnemyBuild.Pool12,
            EnemyBuild.RoachRush,
            EnemyBuild.LingRush,
            EnemyBuild.CannonRush,
            EnemyBuild.EarlyMarines,
        }
        self.distribute = PlanDistributeWorkers()

        # basic build (17, 18, 17)
        base_build = SequentialList([
            Step(None, ZergUnit(UnitTypeId.DRONE, to_count=13)),
            Step(None, ZergUnit(UnitTypeId.OVERLORD, to_count=2)),
            Step(None, ZergUnit(UnitTypeId.DRONE, to_count=17)),
            Step(
                None,
                ActExpand(to_count=2,
                          priority=True,
                          consider_worker_production=False)),
            Step(None, ZergUnit(UnitTypeId.DRONE, to_count=18)),
            Step(RequiredMinerals(120), StepBuildGas(to_count=1)),
            Step(None, ActBuilding(UnitTypeId.SPAWNINGPOOL)),
            Step(None, ZergUnit(UnitTypeId.DRONE, to_count=20)),
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL),
                 ZergUnit(UnitTypeId.ZERGLING, to_count=6)),
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL),
                 ZergUnit(UnitTypeId.QUEEN, to_count=2)),
            Step(
                RequiredAll(
                    [UnitExists(UnitTypeId.SPAWNINGPOOL),
                     RequiredGas(100)]),
                ActTech(UpgradeId.ZERGLINGMOVEMENTSPEED),
            ),
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL),
                 ZergUnit(UnitTypeId.ZERGLING, to_count=100)),
        ])

        build_together = BuildOrder([
            Step(None,
                 base_build,
                 skip=lambda k: k.ai.scout_manager.enemy_build in self.
                 enemy_rushes),
            Step(None,
                 RoachRushResponse(),
                 skip=lambda k: k.ai.scout_manager.enemy_build != EnemyBuild.
                 RoachRush),
        ])

        super().__init__(build_together, self.distribute, AutoOverLord(),
                         InjectLarva(), SpreadCreep())
Ejemplo n.º 12
0
 def __init__(self):
     """Build order steps to be combined."""
     opening = SequentialList([
         Step(None, ZergUnit(UnitTypeId.DRONE, to_count=13,
                             only_once=True)),
         Step(None, ZergUnit(UnitTypeId.OVERLORD,
                             to_count=2,
                             only_once=True)),
         Step(None, ZergUnit(UnitTypeId.DRONE, to_count=17)),
         Step(None, ActExpand(2)),
         Step(None, ZergUnit(UnitTypeId.DRONE, to_count=18,
                             only_once=True)),
         Step(None, StepBuildGas(to_count=1)),
         Step(
             RequiredUnitExists(
                 UnitTypeId.EXTRACTOR,
                 count=1,
                 include_pending=True,
                 include_not_ready=True,
             ),
             ActBuilding(UnitTypeId.SPAWNINGPOOL),
         ),
         Step(
             RequiredUnitExists(
                 UnitTypeId.SPAWNINGPOOL,
                 count=1,
                 include_not_ready=True,
                 include_pending=True,
             ),
             ZergUnit(UnitTypeId.DRONE, to_count=21),
         ),
         Step(
             RequiredUnitExists(UnitTypeId.SPAWNINGPOOL),
             ZergUnit(UnitTypeId.ZERGLING, to_count=6),
         ),
         Step(
             RequiredUnitExists(UnitTypeId.SPAWNINGPOOL),
             ZergUnit(UnitTypeId.QUEEN, to_count=2),
         ),
         Step(None, ActExpand(3)),
     ])
     ling_speed = BuildOrder([
         Step(
             RequiredAll([
                 RequiredUnitExists(UnitTypeId.SPAWNINGPOOL),
                 RequiredGas(100)
             ]),
             ActTech(UpgradeId.ZERGLINGMOVEMENTSPEED,
                     UnitTypeId.SPAWNINGPOOL),
         )
     ])
     super().__init__([opening, ling_speed])
Ejemplo n.º 13
0
 async def create_plan(self) -> BuildOrder:
     finish_rush = Any([Gas(150), UnitExists(UnitTypeId.PLANETARYFORTRESS)])
     return BuildOrder([
         SequentialList([
             BuildPosition(UnitTypeId.COMMANDCENTER,
                           self._bot.knowledge.zone_manager.enemy_natural.
                           center_location,
                           exact=True,
                           only_once=True),
             StepBuildGas(2),
             ActBuilding(UnitTypeId.ENGINEERINGBAY),
             ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER, 17),
             MorphProxyPlanetary(),
             GridBuilding(UnitTypeId.SUPPLYDEPOT, 1),
             BuildOrder([
                 ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER, 38),
                 ActUnit(UnitTypeId.SCV, UnitTypeId.PLANETARYFORTRESS, 38),
                 GridBuilding(UnitTypeId.BARRACKS, 4),
                 BuildAddon(UnitTypeId.BARRACKSTECHLAB, UnitTypeId.BARRACKS,
                            2),
                 BuildAddon(UnitTypeId.BARRACKSREACTOR, UnitTypeId.BARRACKS,
                            2),
                 Tech(UpgradeId.STIMPACK, UnitTypeId.BARRACKSTECHLAB),
                 Tech(UpgradeId.TERRANINFANTRYWEAPONSLEVEL1,
                      UnitTypeId.ENGINEERINGBAY),
                 AutoDepot(),
                 ActUnit(UnitTypeId.MARAUDER, UnitTypeId.BARRACKS, 50),
                 ActUnit(UnitTypeId.MARINE, UnitTypeId.BARRACKS, 100),
                 GridBuilding(UnitTypeId.BARRACKS, 6),
                 BuildAddon(UnitTypeId.BARRACKSREACTOR, UnitTypeId.BARRACKS,
                            4),
             ]),
         ]),
         SequentialList([
             Step(None, DistributeWorkers(min_gas=6), skip=finish_rush),
             Step(finish_rush, DistributeWorkers(max_gas=4)),
         ]),
         SequentialList([
             Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
             PlanCancelBuilding(),
             LowerDepots(),
             PlanZoneDefense(),
             ManTheBunkers(),
             Repair(),
             ContinueBuilding(),
             PlanZoneGatherTerran(),
             Step(TechReady(UpgradeId.TERRANINFANTRYWEAPONSLEVEL1),
                  PlanZoneAttack(20)),
             PlanFinishEnemy(),
         ])
     ])
Ejemplo n.º 14
0
    def __init__(self):
        gas_related = [
            Step(UnitExists(UnitTypeId.HATCHERY, 2), Tech(UpgradeId.ZERGLINGMOVEMENTSPEED), skip_until=Gas(100), ),
            Step(None, ActBuilding(UnitTypeId.ROACHWARREN, 1), skip_until=Gas(100)),
            StepBuildGas(2, Time(4 * 60), Gas(100)),
            StepBuildGas(3, UnitExists(UnitTypeId.HYDRALISKDEN, 1), Gas(50)),
            StepBuildGas(4, Supply(60, SupplyType.Workers), Gas(25)),
            StepBuildGas(6, Minerals(749), Gas(25)),
            StepBuildGas(8, Minerals(1000), Gas(25)),
        ]
        buildings = [
            Step(UnitExists(UnitTypeId.DRONE, 14), ActUnit(UnitTypeId.OVERLORD, UnitTypeId.LARVA, 2)),
            Step(Supply(16), Expand(2)),
            Step(Supply(18), ActBuilding(UnitTypeId.SPAWNINGPOOL, 1)),
            StepBuildGas(1, Supply(20)),
            Step(
                None,
                ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 2),
                skip_until=UnitExists(UnitTypeId.SPAWNINGPOOL, 1),
            ),
            Step(UnitExists(UnitTypeId.DRONE, 24, include_killed=True, include_pending=True), Expand(3)),
            Step(None, ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 3)),
            Step(None, MorphLair(), skip=UnitExists(UnitTypeId.HIVE, 1)),
            Step(UnitExists(UnitTypeId.DRONE, 30, include_killed=True), Expand(4)),
            Step(UnitReady(UnitTypeId.LAIR, 1), ActBuilding(UnitTypeId.HYDRALISKDEN, 1)),
            MorphOverseer(1),
            Step(None, ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 4)),
            Step(Supply(100), Expand(5)),
            Step(
                None, ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 10), skip_until=Minerals(500)
            ),  # anti air defense!
        ]

        units = [
            Step(UnitExists(UnitTypeId.HATCHERY, 1), None),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 23)),
            # Early zerglings
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL, 1), ActUnit(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 4), None),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 28)),
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL, 1), ActUnit(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 12), None),
            # Queen for more larvae
            Step(None, ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 1)),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 35), None),
            Step(None, ActUnitOnce(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 16), None),
            Step(None, ActUnitOnce(UnitTypeId.ROACH, UnitTypeId.LARVA, 4), skip_until=Gas(25)),
            Step(None, ActUnitOnce(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 100), skip_until=Minerals(750)),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 45), None),
            Step(None, ActUnit(UnitTypeId.HYDRALISK, UnitTypeId.LARVA, 7),
                 skip=UnitReady(UnitTypeId.HYDRALISKDEN, 1), ),
            Step(None, ActUnitOnce(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 24), None),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 50), None),
            Step(None, ActUnit(UnitTypeId.ROACH, UnitTypeId.LARVA, 10), skip_until=Gas(25)),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 70), None),
            Step(None, ActUnit(UnitTypeId.ROACH, UnitTypeId.LARVA), skip=UnitReady(UnitTypeId.HYDRALISKDEN, 1)),
            # Endless hydralisk
            Step(None, ActUnit(UnitTypeId.HYDRALISK, UnitTypeId.LARVA), None),
        ]
        super().__init__([self.overlords, buildings, gas_related, units])
Ejemplo n.º 15
0
    def __init__(self):
        """Create plan for build order."""
        self.drones = ZergUnit(UnitTypeId.DRONE, to_count=0)
        self.lings = ZergUnit(UnitTypeId.ZERGLING, to_count=999)
        self.queens = ZergUnit(UnitTypeId.QUEEN, to_count=3)
        self.roaches = ZergUnit(UnitTypeId.ROACH, to_count=100, priority=True)
        self.ravagers = ZergUnit(UnitTypeId.RAVAGER, to_count=0)
        self.defense_spines = DefensiveBuilding(
            unit_type=UnitTypeId.SPINECRAWLER, position_type=DefensePosition.Entrance, to_base_index=1, to_count=3
        )
        self.gas = StepBuildGas(to_count=3)

        unit_building = BuildOrder(
            [
                Step(None, self.drones, skip_until=self.should_build_drones),
                Step(UnitExists(UnitTypeId.SPAWNINGPOOL), self.defense_spines),
                Step(
                    RequiredAll([UnitExists(UnitTypeId.ROACHWARREN), UnitExists(UnitTypeId.ROACH)]),
                    self.ravagers,
                    skip_until=self.should_build_ravagers,
                ),
                Step(UnitExists(UnitTypeId.ROACHWARREN), self.roaches),
                Step(
                    RequiredAll(
                        [
                            UnitExists(UnitTypeId.SPAWNINGPOOL),
                            UnitExists(
                                UnitTypeId.ROACHWARREN,
                                include_pending=True,
                                include_not_ready=True,
                                include_killed=True,
                            ),
                        ]
                    ),
                    self.lings,
                ),
                Step(UnitExists(UnitTypeId.SPAWNINGPOOL), self.queens),
                Step(UnitExists(UnitTypeId.SPAWNINGPOOL), self.lings),
            ]
        )

        buildings: BuildOrder = BuildOrder(
            [
                Step(None, ActBuilding(UnitTypeId.SPAWNINGPOOL, to_count=1)),
                Step(UnitExists(UnitTypeId.SPAWNINGPOOL), ActBuilding(UnitTypeId.ROACHWARREN, to_count=1)),
                Step(None, self.gas, skip_until=self.should_build_gas),
            ]
        )

        super().__init__(buildings, unit_building)
Ejemplo n.º 16
0
    async def create_plan(self) -> BuildOrder:
        number = random.randint(10, 15)
        attack = TheAttack(number + 1)
        return BuildOrder([
            Step(None, ChronoUnitProduction(UnitTypeId.PROBE, UnitTypeId.NEXUS),
                 skip=RequiredUnitExists(UnitTypeId.PROBE, 20, include_pending=True), skip_until=RequiredUnitExists(UnitTypeId.ASSIMILATOR, 1)),
            SequentialList([
                GridBuilding(UnitTypeId.PYLON, 1),
                ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 14),
                GridBuilding(UnitTypeId.GATEWAY, 1),
                ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 16),
                StepBuildGas(1),
                ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 17),
                GridBuilding(UnitTypeId.GATEWAY, 2),
                ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 20),
                ArtosisPylon(2),
                BuildOrder(
                    [
                        AutoPylon(),
                        SequentialList(
                        [
                            Step(None, GridBuilding(UnitTypeId.CYBERNETICSCORE, 1), skip_until=RequiredUnitReady(UnitTypeId.GATEWAY, 1)),
                            Step(RequiredUnitReady(UnitTypeId.CYBERNETICSCORE, 1), GateUnit(UnitTypeId.ADEPT, 2, only_once=True)),
                            ActTech(UpgradeId.WARPGATERESEARCH),
                            GateUnit(UnitTypeId.ADEPT, 100)
                        ]),
                        Step(RequiredUnitExists(UnitTypeId.CYBERNETICSCORE, 1), GridBuilding(UnitTypeId.GATEWAY, 4),
                             skip_until=RequiredMinerals(200)),

                        Step(None, ProtossUnit(UnitTypeId.ZEALOT, 100),
                             skip=RequiredGas(25),
                             skip_until=RequiredMinerals(200)),
                    ]),


            ]),
            SequentialList(
                [
                    PlanZoneDefense(),
                    RestorePower(),
                    PlanDistributeWorkers(),
                    PlanZoneGather(),
                    DoubleAdeptScout(number),
                    attack,
                    PlanFinishEnemy(),
                ])
        ])
Ejemplo n.º 17
0
 def __init__(self):
     """Create the build order."""
     opener = SequentialList(
         Step(
             RequiredUnitReady(UnitTypeId.SPAWNINGPOOL),
             NatSpines(4),
             skip=RequiredUnitReady(UnitTypeId.SPINECRAWLER, count=4),
             skip_until=lambda k: k.build_detector.rush_detected,
         ), Step(None, ZergUnit(UnitTypeId.DRONE, to_count=13)),
         Step(None, ZergUnit(UnitTypeId.OVERLORD, to_count=2)),
         Step(None, ZergUnit(UnitTypeId.DRONE, to_count=17)),
         Step(None,
              ActExpand(2, priority=True,
                        consider_worker_production=False)),
         Step(
             UnitExists(UnitTypeId.HATCHERY,
                        count=2,
                        include_pending=True,
                        include_not_ready=True),
             ZergUnit(UnitTypeId.DRONE, to_count=18),
         ), Step(None, ActBuilding(UnitTypeId.SPAWNINGPOOL)),
         Step(None, ZergUnit(UnitTypeId.DRONE, to_count=20)),
         StepBuildGas(1),
         Step(RequiredUnitReady(UnitTypeId.SPAWNINGPOOL),
              ZergUnit(UnitTypeId.QUEEN, 2)),
         Step(RequiredUnitReady(UnitTypeId.SPAWNINGPOOL),
              ZergUnit(UnitTypeId.ZERGLING, 6)),
         Step(None, ZergUnit(UnitTypeId.OVERLORD, to_count=3)),
         BuildOrder([
             Step(RequiredGas(100), MorphLair()),
             Step(
                 None,
                 ZergUnit(UnitTypeId.DRONE),
                 skip=UnitExists(UnitTypeId.LAIR,
                                 include_pending=True,
                                 include_not_ready=True),
             ),
         ])
         # end of build hard order, switch to reactive play
     )
     super().__init__([opener, AutoOverLord()])
Ejemplo n.º 18
0
 async def create_plan(self) -> BuildOrder:
     self.knowledge.building_solver.wall_type = WallType.ProtossMainZerg
     attack = PlanZoneAttack(4)
     return BuildOrder(
         [
             ChronoUnitProduction(UnitTypeId.TEMPEST, UnitTypeId.STARGATE),
             SequentialList(
                 ProtossUnit(UnitTypeId.PROBE, 14),
                 GridBuilding(UnitTypeId.PYLON, 1),
                 ProtossUnit(UnitTypeId.PROBE, 15),
                 GridBuilding(UnitTypeId.GATEWAY, 1),
                 GridBuilding(UnitTypeId.FORGE, 1),
                 StepBuildGas(2),
                 ProtossUnit(UnitTypeId.PROBE, 18),
                 GridBuilding(UnitTypeId.PYLON, 2),
                 GridBuilding(UnitTypeId.CYBERNETICSCORE, 1),
                 ProtossUnit(UnitTypeId.PROBE, 22),
                 BuildOrder(
                     AutoPylon(),
                     SequentialList(
                         GridBuilding(UnitTypeId.STARGATE, 1),
                         Step(RequiredUnitReady(UnitTypeId.STARGATE, 1), GridBuilding(UnitTypeId.FLEETBEACON, 1)),
                     ),
                     [ProtossUnit(UnitTypeId.TEMPEST, 100, priority=True)],
                     [Step(UnitExists(UnitTypeId.FLEETBEACON, 1), GridBuilding(UnitTypeId.STARGATE, 2))],
                 ),
             ),
             ActDefensiveCannons(4, 2, 0),
             SequentialList(
                 PlanZoneDefense(),
                 RestorePower(),
                 PlanDistributeWorkers(),
                 PlanZoneGather(),
                 Step(UnitExists(UnitTypeId.TEMPEST, 1, include_killed=True), attack),
                 PlanFinishEnemy(),
             ),
         ]
     )
Ejemplo n.º 19
0
    async def create_plan(self) -> BuildOrder:
        buildings = [
            Step(RequiredSupply(13), GridBuilding(UnitTypeId.SUPPLYDEPOT, 1)),
            Step(RequiredSupply(16), ActExpand(2)),
            Step(RequiredSupply(18), GridBuilding(UnitTypeId.BARRACKS, 1)),
            StepBuildGas(1),
            Step(RequiredSupply(20), GridBuilding(UnitTypeId.SUPPLYDEPOT, 2)),
            Step(None,
                 StepBuildGas(2),
                 skip_until=UnitExists(UnitTypeId.MARINE, 2)),
            Step(None,
                 GridBuilding(UnitTypeId.FACTORY, 1),
                 skip_until=RequiredUnitReady(UnitTypeId.BARRACKS, 1)),
            GridBuilding(UnitTypeId.FACTORY, 1),
            ActBuildAddon(UnitTypeId.FACTORYTECHLAB, UnitTypeId.FACTORY, 1),
            StepBuildGas(4),
            Step(None, ActExpand(3)),
            GridBuilding(UnitTypeId.FACTORY, 2),
            ActBuildAddon(UnitTypeId.FACTORYTECHLAB, UnitTypeId.FACTORY, 2),
            Step(
                None,
                ActTech(UpgradeId.CYCLONELOCKONDAMAGEUPGRADE),
                skip_until=RequiredUnitReady(UnitTypeId.FACTORYTECHLAB, 1),
            ),
            StepBuildGas(5),
            Step(None,
                 ActTech(UpgradeId.HIGHCAPACITYBARRELS),
                 skip_until=RequiredUnitReady(UnitTypeId.FACTORYTECHLAB, 2)),
            StepBuildGas(6, None, RequiredGas(100)),
            Step(RequiredMinerals(400), GridBuilding(UnitTypeId.FACTORY, 4)),
            Step(
                None,
                ActBuildAddon(UnitTypeId.FACTORYREACTOR, UnitTypeId.FACTORY,
                              1)),
            ActBuildAddon(UnitTypeId.FACTORYTECHLAB, UnitTypeId.FACTORY, 3),
            Step(RequiredMinerals(400), ActExpand(4)),
            GridBuilding(UnitTypeId.ENGINEERINGBAY, 1),
            StepBuildGas(8),
            GridBuilding(UnitTypeId.FACTORY, 6),
            Step(RequiredMinerals(400), GridBuilding(UnitTypeId.FACTORY, 8)),
            ActBuildAddon(UnitTypeId.FACTORYTECHLAB, UnitTypeId.FACTORY, 7),
            Step(RequiredSupply(120), GridBuilding(UnitTypeId.ARMORY, 2)),
        ]

        upgrades = [
            Step(RequiredUnitReady(UnitTypeId.ARMORY, 1),
                 ActTech(UpgradeId.TERRANVEHICLEWEAPONSLEVEL1)),
            ActTech(UpgradeId.TERRANVEHICLEANDSHIPARMORSLEVEL1),
            ActTech(UpgradeId.TERRANVEHICLEWEAPONSLEVEL2),
            ActTech(UpgradeId.TERRANVEHICLEANDSHIPARMORSLEVEL2),
            ActTech(UpgradeId.TERRANVEHICLEWEAPONSLEVEL3),
            ActTech(UpgradeId.TERRANVEHICLEANDSHIPARMORSLEVEL3),
        ]

        self.attack = PlanZoneAttack(40)

        worker_scout = Step(None,
                            WorkerScout(),
                            skip_until=UnitExists(UnitTypeId.SUPPLYDEPOT, 1))
        self.distribute_workers = PlanDistributeWorkers()

        tactics = [
            PlanCancelBuilding(),
            LowerDepots(),
            PlanZoneDefense(),
            worker_scout,
            Step(None, CallMule(50), skip=RequiredTime(5 * 60)),
            Step(None, CallMule(100), skip_until=RequiredTime(5 * 60)),
            Step(None, ScanEnemy(), skip_until=RequiredTime(5 * 60)),
            self.distribute_workers,
            ManTheBunkers(),
            Repair(),
            ContinueBuilding(),
            PlanZoneGatherTerran(),
            Step(RequiredTechReady(UpgradeId.CYCLONELOCKONDAMAGEUPGRADE, 0.95),
                 self.attack),
            PlanFinishEnemy(),
        ]

        return BuildOrder(
            Step(UnitExists(UnitTypeId.BARRACKS, 1),
                 SequentialList(self.depots)),
            [
                Step(
                    UnitExists(UnitTypeId.COMMANDCENTER, 2),
                    MorphOrbitals(3),
                    skip_until=RequiredUnitReady(UnitTypeId.BARRACKS, 1),
                ),
                Step(None,
                     MorphPlanetary(2),
                     skip_until=RequiredUnitReady(UnitTypeId.ENGINEERINGBAY,
                                                  1)),
            ],
            [
                Step(None, ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER,
                                   40)),
                Step(
                    UnitExists(UnitTypeId.COMMANDCENTER, 3),
                    ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER, 70),
                ),
            ],
            upgrades,
            ActUnit(UnitTypeId.MARINE, UnitTypeId.BARRACKS, 4),
            [
                ActUnit(UnitTypeId.CYCLONE, UnitTypeId.FACTORY, 4),
                ActUnitOnce(UnitTypeId.HELLION, UnitTypeId.FACTORY, 1),
                ActUnit(UnitTypeId.CYCLONE, UnitTypeId.FACTORY, 4),
                ActUnit(
                    UnitTypeId.CYCLONE, UnitTypeId.FACTORY, 120,
                    priority=True),
            ],
            Step(
                RequiredUnitReady(UnitTypeId.FACTORYREACTOR, 1),
                ActUnit(UnitTypeId.HELLION, UnitTypeId.FACTORY, 60),
                skip_until=RequiredMinerals(300),
            ),
            buildings,
            SequentialList(tactics),
        )
Ejemplo n.º 20
0
 async def create_plan(self) -> BuildOrder:
     attack = TheAttack(4)
     return BuildOrder(
         Step(
             None,
             ChronoUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS),
             skip=UnitExists(UnitTypeId.PROBE, 30, include_pending=True),
             skip_until=UnitExists(UnitTypeId.ASSIMILATOR, 1),
         ),
         ChronoUnit(UnitTypeId.IMMORTAL, UnitTypeId.ROBOTICSFACILITY),
         SequentialList(
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 14),
             GridBuilding(UnitTypeId.PYLON, 1),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 16),
             BuildGas(1),
             GridBuilding(UnitTypeId.GATEWAY, 1),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 20),
             Expand(2),
             GridBuilding(UnitTypeId.CYBERNETICSCORE, 1),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 21),
             BuildGas(2),
             ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 22),
             GridBuilding(UnitTypeId.PYLON, 1),
             BuildOrder(
                 AutoPylon(),
                 ProtossUnit(UnitTypeId.STALKER, 2, priority=True),
                 Tech(UpgradeId.WARPGATERESEARCH),
                 [
                     ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 22),
                     Step(UnitExists(UnitTypeId.NEXUS, 2), ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 44)),
                     StepBuildGas(3, skip=Gas(300)),
                     Step(UnitExists(UnitTypeId.NEXUS, 3), ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 56)),
                     StepBuildGas(5, skip=Gas(200)),
                 ],
                 SequentialList(
                     [
                         Step(
                             UnitReady(UnitTypeId.CYBERNETICSCORE, 1), GridBuilding(UnitTypeId.TWILIGHTCOUNCIL, 1),
                         ),
                         GridBuilding(UnitTypeId.ROBOTICSFACILITY, 1),
                         Step(UnitReady(UnitTypeId.TWILIGHTCOUNCIL, 1), Tech(UpgradeId.CHARGE)),
                     ]
                 ),
                 [
                     ActUnit(UnitTypeId.IMMORTAL, UnitTypeId.ROBOTICSFACILITY, 1, priority=True),
                     ActUnit(UnitTypeId.OBSERVER, UnitTypeId.ROBOTICSFACILITY, 1, priority=True),
                     ActUnit(UnitTypeId.IMMORTAL, UnitTypeId.ROBOTICSFACILITY, 20, priority=True),
                 ],
                 Step(Time(60 * 5), Expand(3)),
                 [ProtossUnit(UnitTypeId.ZEALOT, 100)],
                 [
                     GridBuilding(UnitTypeId.GATEWAY, 4),
                     StepBuildGas(4, skip=Gas(200)),
                     GridBuilding(UnitTypeId.ROBOTICSFACILITY, 2),
                 ],
             ),
         ),
         SequentialList(
             PlanCancelBuilding(),
             PlanHeatObserver(),
             PlanZoneDefense(),
             RestorePower(),
             DistributeWorkers(),
             PlanZoneGather(),
             Step(UnitReady(UnitTypeId.IMMORTAL, 3), attack),
             PlanFinishEnemy(),
         ),
     )
Ejemplo n.º 21
0
 async def create_plan(self) -> BuildOrder:
     attack = TheAttack(4)
     return BuildOrder([
         Step(None,
              ChronoUnitProduction(UnitTypeId.PROBE, UnitTypeId.NEXUS),
              skip=RequiredUnitExists(UnitTypeId.PROBE,
                                      30,
                                      include_pending=True),
              skip_until=RequiredUnitExists(UnitTypeId.ASSIMILATOR, 1)),
         ChronoUnitProduction(UnitTypeId.VOIDRAY, UnitTypeId.STARGATE),
         SequentialList([
             ProtossUnit(UnitTypeId.PROBE, 14),
             GridBuilding(UnitTypeId.PYLON, 1),
             ProtossUnit(UnitTypeId.PROBE, 16),
             StepBuildGas(1),
             GridBuilding(UnitTypeId.GATEWAY, 1),
             ProtossUnit(UnitTypeId.PROBE, 20),
             GridBuilding(UnitTypeId.CYBERNETICSCORE, 1),
             ProtossUnit(UnitTypeId.PROBE, 21),
             ActExpand(2),
             ProtossUnit(UnitTypeId.PROBE, 22),
             StepBuildGas(2),
             GridBuilding(UnitTypeId.PYLON, 1),
             BuildOrder([
                 AutoPylon(),
                 GateUnit(UnitTypeId.STALKER, 2, priority=True),
                 ActTech(UpgradeId.WARPGATERESEARCH),
                 [
                     ProtossUnit(UnitTypeId.PROBE, 22),
                     Step(RequiredUnitExists(UnitTypeId.NEXUS, 2),
                          ProtossUnit(UnitTypeId.PROBE, 44)),
                     StepBuildGas(3, skip=RequiredGas(300)),
                     Step(RequiredUnitExists(UnitTypeId.NEXUS, 3),
                          ProtossUnit(UnitTypeId.PROBE, 56)),
                     StepBuildGas(5, skip=RequiredGas(200)),
                 ],
                 SequentialList([
                     Step(RequiredUnitReady(UnitTypeId.CYBERNETICSCORE, 1),
                          GridBuilding(UnitTypeId.TWILIGHTCOUNCIL, 1)),
                     GridBuilding(UnitTypeId.STARGATE, 1),
                     Step(RequiredUnitReady(UnitTypeId.TWILIGHTCOUNCIL, 1),
                          ActTech(UpgradeId.CHARGE)),
                     Step(RequiredUnitReady(UnitTypeId.TWILIGHTCOUNCIL, 1),
                          ActTech(UpgradeId.ADEPTPIERCINGATTACK)),
                 ]), [ProtossUnit(UnitTypeId.VOIDRAY, 20, priority=True)],
                 Step(RequiredTime(60 * 5), ActExpand(3)),
                 [
                     GateUnit(UnitTypeId.ZEALOT, 6),
                     GateUnit(UnitTypeId.ADEPT, 10),
                     GateUnit(UnitTypeId.ZEALOT, 15),
                     GateUnit(UnitTypeId.ADEPT, 20),
                     GateUnit(UnitTypeId.ZEALOT, 23),
                     GateUnit(UnitTypeId.ADEPT, 30)
                 ],
                 [
                     GridBuilding(UnitTypeId.GATEWAY, 4),
                     StepBuildGas(4, skip=RequiredGas(200)),
                     GridBuilding(UnitTypeId.STARGATE, 2),
                 ]
             ])
         ]),
         SequentialList([
             PlanZoneDefense(),
             RestorePower(),
             PlanDistributeWorkers(),
             PlanZoneGather(),
             Step(RequiredUnitReady(UnitTypeId.VOIDRAY, 3), attack),
             PlanFinishEnemy(),
         ])
     ])
Ejemplo n.º 22
0
    def __init__(self):
        """Build order steps to be combined."""
        extractor_trick = SequentialList([
            Step(
                RequiredSupply(14),
                StepBuildGas(1),
                skip=RequiredUnitExists(UnitTypeId.EXTRACTOR,
                                        include_killed=True,
                                        include_pending=True),
            ),
            Step(
                RequiredUnitExists(
                    UnitTypeId.EXTRACTOR,
                    1,
                    include_pending=True,
                    include_not_ready=True,
                ),
                ZergUnit(UnitTypeId.DRONE, to_count=14),
            ),
            # SequentialList will take care of making sure the drone was made
            Step(
                RequiredUnitExists(UnitTypeId.EXTRACTOR),
                CancelBuilding(UnitTypeId.EXTRACTOR, to_count=0),
                skip=RequiredUnitExists(
                    UnitTypeId.EXTRACTOR,
                    1,
                    include_killed=True,
                    include_not_ready=False,
                ),
            ),
        ])

        opening = SequentialList([
            Step(None, ZergUnit(UnitTypeId.DRONE, to_count=14)),
            Step(
                RequiredSupply(14),
                extractor_trick,
                skip=RequiredUnitExists(
                    UnitTypeId.EXTRACTOR,
                    1,
                    include_killed=True,
                    include_not_ready=False,
                ),
            ),
            ActExpand(2, priority=True, consider_worker_production=False),
            Step(
                RequiredAll([RequiredSupply(14),
                             RequiredMinerals(130)]),
                StepBuildGas(1),
            ),
            Step(None, ZergUnit(UnitTypeId.DRONE, to_count=14)),
            Step(RequiredSupply(14), ActBuilding(UnitTypeId.SPAWNINGPOOL)),
            Step(
                RequiredAll([
                    RequiredUnitExists(UnitTypeId.HATCHERY),
                    RequiredUnitExists(UnitTypeId.SPAWNINGPOOL)
                ]),
                ZergUnit(UnitTypeId.QUEEN, 2),
            ),
            # spam lings
            Step(RequiredUnitExists(UnitTypeId.SPAWNINGPOOL),
                 ZergUnit(UnitTypeId.ZERGLING, 999)),
        ])

        ling_speed = BuildOrder([
            Step(
                RequiredAll([
                    RequiredUnitExists(UnitTypeId.SPAWNINGPOOL),
                    RequiredGas(100)
                ]),
                ActTech(UpgradeId.ZERGLINGMOVEMENTSPEED,
                        UnitTypeId.SPAWNINGPOOL),
            )
        ])

        worker_distribution = SequentialList([
            Step(
                RequiredSupply(15),
                PlanDistributeWorkers(),
                skip=RequiredUnitExists(
                    UnitTypeId.HATCHERY,
                    2,
                    include_killed=True,
                ),
            ),
            Step(
                RequiredUnitExists(UnitTypeId.EXTRACTOR),
                PlanDistributeWorkers(min_gas=3),
                skip=RequiredAny([
                    RequiredTechReady(UpgradeId.ZERGLINGMOVEMENTSPEED,
                                      percentage=0.01),
                    RequiredGas(96)
                ]),
            ),
            Step(
                RequiredAny([
                    RequiredTechReady(UpgradeId.ZERGLINGMOVEMENTSPEED,
                                      percentage=0.01),
                    RequiredGas(96)
                ]),
                PlanDistributeWorkers(max_gas=0),
            ),
        ])

        overlords = BuildOrder([
            Step(
                None,
                AutoOverLord(),
                skip_until=RequiredUnitExists(UnitTypeId.SPAWNINGPOOL),
            )
        ])

        super().__init__([opening, ling_speed, worker_distribution, overlords])
Ejemplo n.º 23
0
    async def create_plan(self) -> BuildOrder:
        self.knowledge.building_solver.wall_type = 3  # WallType.ProtossMainZerg

        build_steps_buildings2 = [
            Step(RequiredUnitReady(UnitTypeId.GATEWAY, 1),
                 GridBuilding(UnitTypeId.CYBERNETICSCORE, 1)),
            Step(RequiredUnitReady(UnitTypeId.CYBERNETICSCORE, 1),
                 GridBuilding(UnitTypeId.TWILIGHTCOUNCIL, 1)),
            Step(RequiredUnitReady(UnitTypeId.TWILIGHTCOUNCIL, 1),
                 GridBuilding(UnitTypeId.DARKSHRINE, 1)),
            ActTech(UpgradeId.BLINKTECH),
            ActTech(UpgradeId.CHARGE)
        ]

        build_steps_workers = [
            Step(None, ActBuilding(UnitTypeId.NEXUS, 1),
                 RequiredUnitExists(UnitTypeId.NEXUS, 1)),

            # Build to 14 probes and stop until pylon is building
            Step(None, ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS),
                 RequiredUnitExists(UnitTypeId.PROBE, 14)),
            Step(None, None, RequiredUnitExists(UnitTypeId.PYLON, 1)),
            Step(None, ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS),
                 RequiredUnitExists(UnitTypeId.PROBE, 16 + 3 + 3)),
            Step(
                RequireCustom(lambda k: self.knowledge.own_main_zone.
                              minerals_running_low), ActExpand(2)),
            Step(None, ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS),
                 RequiredUnitExists(UnitTypeId.PROBE, 30)),
            GridBuilding(UnitTypeId.GATEWAY, 5),
            StepBuildGas(3),
            GridBuilding(UnitTypeId.GATEWAY, 6),
        ]

        build_steps_buildings = [
            Step(RequiredSupply(14), GridBuilding(UnitTypeId.PYLON, 1),
                 RequiredUnitExists(UnitTypeId.PYLON, 1)),
            StepBuildGas(1, RequiredSupply(16)),
            Step(
                RequiredSupply(16), GridBuilding(UnitTypeId.GATEWAY, 1),
                RequiredTotalUnitExists(
                    [UnitTypeId.GATEWAY, UnitTypeId.WARPGATE], 1)),
            StepBuildGas(2),
            Step(RequiredSupply(21), GridBuilding(UnitTypeId.PYLON, 2),
                 RequiredUnitExists(UnitTypeId.PYLON, 2)),
            GridBuilding(UnitTypeId.GATEWAY, 2),
            Step(RequiredUnitReady(UnitTypeId.CYBERNETICSCORE, 1),
                 ActTech(UpgradeId.WARPGATERESEARCH)),
            GridBuilding(UnitTypeId.GATEWAY, 3),
            AutoPylon()
        ]

        build_steps_units = [
            Step(None,
                 ProtossUnit(UnitTypeId.DARKTEMPLAR, 4, priority=True),
                 skip_until=RequiredUnitReady(UnitTypeId.DARKSHRINE, 1)),
            Step(RequiredUnitReady(UnitTypeId.GATEWAY, 1),
                 ProtossUnit(UnitTypeId.ZEALOT, 1),
                 RequiredTechReady(UpgradeId.WARPGATERESEARCH, 1)),
            Step(None, ProtossUnit(UnitTypeId.STALKER), None),
        ]
        build_steps_units2 = [
            Step(RequiredUnitExists(UnitTypeId.TWILIGHTCOUNCIL, 1),
                 ProtossUnit(UnitTypeId.STALKER, 3),
                 RequiredTechReady(UpgradeId.WARPGATERESEARCH, 1)),
            Step(RequiredMinerals(400), ProtossUnit(UnitTypeId.ZEALOT))
        ]

        build_steps_chrono = [
            Step(None,
                 ChronoUnitProduction(UnitTypeId.PROBE, UnitTypeId.NEXUS),
                 skip=RequiredUnitExists(UnitTypeId.PROBE,
                                         20,
                                         include_killed=True),
                 skip_until=RequiredUnitReady(UnitTypeId.PYLON)),
            ChronoAnyTech(0)
        ]

        build_order = BuildOrder([
            build_steps_buildings, build_steps_buildings2, build_steps_workers,
            build_steps_units, build_steps_units2, build_steps_chrono
        ])

        attack = PlanZoneAttack(20)
        attack.retreat_multiplier = 0.5  # All in

        tactics = [
            PlanCancelBuilding(),
            PlanZoneDefense(),
            RestorePower(),
            PlanDistributeWorkers(),
            DtPush(),
            PlanZoneGather(),
            attack,
            PlanFinishEnemy(),
        ]

        return BuildOrder([build_order, tactics])
Ejemplo n.º 24
0
    async def create_plan(self) -> BuildOrder:
        build_steps_exps = [
            Step(None, Expand(2)),
            Step(UnitReady(UnitTypeId.SPAWNINGPOOL, 1), Expand(3)),
            Step(Supply(80), MorphLair()),
            Expand(4),
            Step(Supply(100), ActBuilding(UnitTypeId.EVOLUTIONCHAMBER, 2)),
        ]

        bsus = [
            Step(UnitReady(UnitTypeId.LAIR, 1), None),
            Step(UnitExists(UnitTypeId.ROACHWARREN, 1),
                 Tech(UpgradeId.GLIALRECONSTITUTION)),
        ]

        bsu = [
            Step(UnitExists(UnitTypeId.EVOLUTIONCHAMBER, 1),
                 Tech(UpgradeId.ZERGMISSILEWEAPONSLEVEL1)),
            Step(None, Tech(UpgradeId.ZERGGROUNDARMORSLEVEL1)),
            Step(None, Tech(UpgradeId.ZERGMISSILEWEAPONSLEVEL2)),
            Step(None, Tech(UpgradeId.ZERGGROUNDARMORSLEVEL2)),
        ]

        buildings = [
            Step(
                UnitExists(UnitTypeId.HATCHERY, 2, include_pending=True),
                ActBuilding(UnitTypeId.SPAWNINGPOOL, 1),
            ),
            Step(UnitExists(UnitTypeId.QUEEN, 2),
                 ActBuilding(UnitTypeId.ROACHWARREN, 1)),
        ]

        extractors = [
            StepBuildGas(1, UnitReady(UnitTypeId.SPAWNINGPOOL, 0.5)),
            StepBuildGas(2, UnitReady(UnitTypeId.ROACHWARREN, 1)),
            StepBuildGas(3, UnitExists(UnitTypeId.HATCHERY, 3)),
            StepBuildGas(4, UnitReady(UnitTypeId.HATCHERY, 3)),
            StepBuildGas(5, UnitExists(UnitTypeId.OVERLORD, 10)),
            StepBuildGas(6, UnitExists(UnitTypeId.OVERLORD, 20)),
        ]

        # 6 zerglings for early defence... needs fiery micro
        build_steps_units_early_defense = [
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL, 1),
                 ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 2)),
            Step(UnitExists(UnitTypeId.HATCHERY, 2),
                 ActUnitOnce(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 6)),
            Step(
                UnitExists(UnitTypeId.HATCHERY, 2, include_pending=True),
                ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 3),
            ),
            Step(
                UnitExists(UnitTypeId.HATCHERY, 3, include_pending=True),
                ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 4),
            ),
        ]
        # Add the roaches to here
        build_steps_units = [
            Step(UnitExists(UnitTypeId.HATCHERY, 2),
                 ActUnit(UnitTypeId.ROACH, UnitTypeId.LARVA, 4)),
            Step(None, ActUnit(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 4)),
            Step(
                UnitExists(UnitTypeId.HATCHERY, 3, include_pending=True),
                ActUnit(UnitTypeId.ROACH, UnitTypeId.LARVA),
            ),
        ]

        ravagers = [
            Step(UnitReady(UnitTypeId.ROACH, 4), None),
            Step(UnitReady(UnitTypeId.ROACHWARREN, 1),
                 MorphRavager(5),
                 skip_until=Gas(200)),
            Step(UnitReady(UnitTypeId.ROACH, 10),
                 MorphRavager(50),
                 skip_until=Gas(300)),
        ]

        build = BuildOrder(
            ZergUnit(UnitTypeId.DRONE, 70),
            AutoOverLord(),
            build_steps_exps,
            buildings,
            extractors,
            build_steps_units_early_defense,
            bsu,
            bsus,
            ravagers,
            build_steps_units,
        )

        attack = PlanZoneAttack(120)

        tactics = [
            PlanCancelBuilding(),
            SpreadCreep(),
            InjectLarva(),
            DistributeWorkers(),
            Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
            PlanZoneDefense(),
            PlanZoneGather(),
            attack,
            PlanFinishEnemy(),
        ]

        return BuildOrder(build, tactics)
Ejemplo n.º 25
0
    def __init__(self):
        self.worker_rushed = False
        self.rush_bunker = BuildPosition(UnitTypeId.BUNKER,
                                         Point2((0, 0)),
                                         exact=True)
        viking_counters = [
            UnitTypeId.COLOSSUS,
            UnitTypeId.MEDIVAC,
            UnitTypeId.RAVEN,
            UnitTypeId.VOIDRAY,
            UnitTypeId.CARRIER,
            UnitTypeId.TEMPEST,
            UnitTypeId.BROODLORD,
        ]

        warn = WarnBuildMacro(
            [
                (UnitTypeId.SUPPLYDEPOT, 1, 18),
                (UnitTypeId.BARRACKS, 1, 42),
                (UnitTypeId.REFINERY, 1, 44),
                (UnitTypeId.COMMANDCENTER, 2, 60 + 44),
                (UnitTypeId.BARRACKSREACTOR, 1, 120),
                (UnitTypeId.FACTORY, 1, 120 + 21),
            ],
            [],
        )

        scv = [
            Step(None,
                 TerranUnit(UnitTypeId.MARINE, 2, priority=True),
                 skip_until=lambda k: self.worker_rushed),
            Step(None,
                 MorphOrbitals(),
                 skip_until=RequiredUnitReady(UnitTypeId.BARRACKS, 1)),
            Step(
                None,
                ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER, 16 + 6),
                skip=UnitExists(UnitTypeId.COMMANDCENTER, 2),
            ),
            Step(None,
                 ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER, 32 + 12)),
        ]

        dt_counter = [
            Step(
                RequiredAny([
                    RequiredEnemyBuildingExists(UnitTypeId.DARKSHRINE),
                    RequiredEnemyUnitExistsAfter(UnitTypeId.DARKTEMPLAR),
                    RequiredEnemyUnitExistsAfter(UnitTypeId.BANSHEE),
                ]),
                None,
            ),
            Step(None, GridBuilding(UnitTypeId.ENGINEERINGBAY, 1)),
            Step(
                None,
                DefensiveBuilding(UnitTypeId.MISSILETURRET,
                                  DefensePosition.Entrance, 2)),
            Step(
                None,
                DefensiveBuilding(UnitTypeId.MISSILETURRET,
                                  DefensePosition.CenterMineralLine, None)),
        ]
        dt_counter2 = [
            Step(
                RequiredAny([
                    RequiredEnemyBuildingExists(UnitTypeId.DARKSHRINE),
                    RequiredEnemyUnitExistsAfter(UnitTypeId.DARKTEMPLAR),
                    RequiredEnemyUnitExistsAfter(UnitTypeId.BANSHEE),
                ]),
                None,
            ),
            Step(None, GridBuilding(UnitTypeId.STARPORT, 2)),
            Step(
                None,
                ActBuildAddon(UnitTypeId.STARPORTTECHLAB, UnitTypeId.STARPORT,
                              1)),
            Step(RequiredUnitReady(UnitTypeId.STARPORT, 1),
                 ActUnit(UnitTypeId.RAVEN, UnitTypeId.STARPORT, 2)),
        ]

        opener = [
            Step(RequiredSupply(13),
                 GridBuilding(UnitTypeId.SUPPLYDEPOT, 1, priority=True)),
            GridBuilding(UnitTypeId.BARRACKS, 1, priority=True),
            StepBuildGas(1, RequiredSupply(15)),
            TerranUnit(UnitTypeId.REAPER, 1, only_once=True, priority=True),
            Step(
                None,
                ActExpand(2),
                skip_until=RequiredAny([
                    RequireCustom(lambda k: not k.possible_rush_detected),
                    UnitExists(UnitTypeId.SIEGETANK, 2, include_killed=True),
                ]),
            ),
            Step(
                None,
                CancelBuilding(UnitTypeId.COMMANDCENTER, 1),
                skip=RequiredAny([
                    RequireCustom(lambda k: not k.possible_rush_detected),
                    UnitExists(UnitTypeId.SIEGETANK, 2, include_killed=True),
                ]),
            ),
            Step(None,
                 self.rush_bunker,
                 skip_until=lambda k: k.possible_rush_detected),
            Step(None,
                 GridBuilding(UnitTypeId.BARRACKS, 2),
                 skip_until=lambda k: k.possible_rush_detected),
            GridBuilding(UnitTypeId.SUPPLYDEPOT, 2, priority=True),
            ActBuildAddon(UnitTypeId.BARRACKSREACTOR, UnitTypeId.BARRACKS, 1),
            GridBuilding(UnitTypeId.FACTORY, 1),
            ActBuildAddon(UnitTypeId.FACTORYTECHLAB, UnitTypeId.FACTORY, 1),
            AutoDepot(),
        ]

        buildings = [
            Step(None, GridBuilding(UnitTypeId.BARRACKS, 2)),
            Step(RequiredUnitReady(UnitTypeId.FACTORYTECHLAB),
                 TerranUnit(UnitTypeId.SIEGETANK, 1)),
            StepBuildGas(2),
            # BuildStep(None, GridBuilding(UnitTypeId.ARMORY, 1)),
            Step(
                None,
                ActBuildAddon(UnitTypeId.BARRACKSTECHLAB, UnitTypeId.BARRACKS,
                              1)),
            Step(None, GridBuilding(UnitTypeId.STARPORT, 1)),
            Step(None, GridBuilding(UnitTypeId.BARRACKS, 3)),
            Step(
                None,
                ActBuildAddon(UnitTypeId.BARRACKSTECHLAB, UnitTypeId.BARRACKS,
                              2)),
            Step(RequiredSupply(40, SupplyType.Workers), ActExpand(3)),
            Step(None, GridBuilding(UnitTypeId.BARRACKS, 5)),
            Step(
                None,
                ActBuildAddon(UnitTypeId.BARRACKSREACTOR, UnitTypeId.BARRACKS,
                              3)),
            Step(
                None,
                ActBuildAddon(UnitTypeId.STARPORTREACTOR, UnitTypeId.STARPORT,
                              1)),
            StepBuildGas(4),
        ]

        tech = [
            Step(None, ActTech(UpgradeId.PUNISHERGRENADES)),
            Step(None, ActTech(UpgradeId.STIMPACK)),
            Step(None, ActTech(UpgradeId.SHIELDWALL)),
        ]

        mech = [TerranUnit(UnitTypeId.SIEGETANK, 2, priority=True)]

        air = [
            Step(RequiredUnitReady(UnitTypeId.STARPORT, 1),
                 TerranUnit(UnitTypeId.MEDIVAC, 2, priority=True)),
            Step(None, TerranUnit(UnitTypeId.VIKINGFIGHTER, 1, priority=True)),
            Step(
                None,
                TerranUnit(UnitTypeId.VIKINGFIGHTER, 3, priority=True),
                skip_until=self.RequireAnyEnemyUnits(viking_counters, 1),
            ),
            Step(RequiredUnitReady(UnitTypeId.STARPORT, 1),
                 TerranUnit(UnitTypeId.MEDIVAC, 4, priority=True)),
            Step(
                None,
                TerranUnit(UnitTypeId.VIKINGFIGHTER, 10, priority=True),
                skip_until=self.RequireAnyEnemyUnits(viking_counters, 4),
            ),
            Step(RequiredUnitReady(UnitTypeId.STARPORT, 1),
                 TerranUnit(UnitTypeId.MEDIVAC, 6, priority=True)),
        ]

        marines = [
            Step(UnitExists(UnitTypeId.REAPER, 1, include_killed=True),
                 TerranUnit(UnitTypeId.MARINE, 2)),
            BuildOrder([
                TerranUnit(UnitTypeId.MARAUDER, 20, priority=True),
                TerranUnit(UnitTypeId.MARINE, 20),
                Step(RequiredMinerals(250), TerranUnit(UnitTypeId.MARINE,
                                                       100)),
            ]),
        ]

        use_money = BuildOrder([
            Step(RequiredMinerals(400), GridBuilding(UnitTypeId.BARRACKS, 8)),
            Step(
                RequiredMinerals(500),
                ActBuildAddon(UnitTypeId.BARRACKSREACTOR, UnitTypeId.BARRACKS,
                              6)),
        ])

        super().__init__([
            warn, scv, opener, buildings, dt_counter, dt_counter2, tech, mech,
            air, marines, use_money
        ])
Ejemplo n.º 26
0
    def __init__(self):

        gas_related = [
            StepBuildGas(1, UnitExists(UnitTypeId.HATCHERY, 2)),
            Step(None, Tech(UpgradeId.ZERGLINGMOVEMENTSPEED), skip_until=Gas(100)),
            Step(None, ActBuilding(UnitTypeId.ROACHWARREN, 1), skip_until=Gas(100)),
            StepBuildGas(2, Time(4 * 60)),
            StepBuildGas(3, UnitExists(UnitTypeId.LAIR, 1)),
            StepBuildGas(5, None, Gas(100)),
            StepBuildGas(8, Supply(50, supply_type=SupplyType.Workers)),
        ]
        buildings = [
            Step(UnitExists(UnitTypeId.DRONE, 14), ActUnit(UnitTypeId.OVERLORD, UnitTypeId.LARVA, 2)),
            Step(Supply(16), Expand(2)),
            Step(UnitExists(UnitTypeId.EXTRACTOR, 1), ActBuilding(UnitTypeId.SPAWNINGPOOL, 1)),
            Step(
                None,
                ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 2),
                skip_until=UnitExists(UnitTypeId.SPAWNINGPOOL, 1),
            ),
            Step(
                UnitReady(UnitTypeId.SPAWNINGPOOL),
                DefensiveBuilding(UnitTypeId.SPINECRAWLER, DefensePosition.Entrance, 1),
            ),
            # Step(UnitExists(UnitTypeId.DRONE, 24, include_killed=True, include_pending=True), ActExpand(3)),
            Step(None, MorphLair(), skip=UnitExists(UnitTypeId.HIVE, 1)),
            Step(UnitExists(UnitTypeId.DRONE, 30, include_killed=True), Expand(3)),
            Step(None, ZergUnit(UnitTypeId.QUEEN, 3)),
            Step(UnitExists(UnitTypeId.LAIR, 1), ActBuilding(UnitTypeId.SPIRE, 1)),
            MorphOverseer(1),
            Step(None, ZergUnit(UnitTypeId.QUEEN, 5)),
            Step(UnitExists(UnitTypeId.SPIRE), Expand(4)),
            Tech(UpgradeId.ZERGFLYERWEAPONSLEVEL1),
            Step(UnitExists(UnitTypeId.MUTALISK, 10, include_killed=True), ActBuilding(UnitTypeId.INFESTATIONPIT)),
            Step(UnitReady(UnitTypeId.INFESTATIONPIT), MorphHive()),
            MorphGreaterSpire(),
            Tech(UpgradeId.ZERGFLYERWEAPONSLEVEL2),
            Tech(UpgradeId.ZERGFLYERWEAPONSLEVEL3),
        ]

        high_tier = [
            # Step(RequiredUnitReady(UnitTypeId.GREATERSPIRE), ZergUnit(UnitTypeId.DRONE, 70)),
            Step(
                None, ZergUnit(UnitTypeId.CORRUPTOR, 3, priority=True), skip_until=UnitReady(UnitTypeId.GREATERSPIRE),
            ),
            Step(None, MorphBroodLord(5)),
            # Step(RequiredGas(200), ZergUnit(UnitTypeId.MUTALISK, 20, priority=True))
        ]

        units = [
            Step(UnitExists(UnitTypeId.HATCHERY, 1), None),
            Step(None, ZergUnit(UnitTypeId.DRONE, 20)),
            # Early zerglings
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL, 1), ZergUnit(UnitTypeId.ZERGLING, 4), None),
            Step(None, ZergUnit(UnitTypeId.DRONE, 25)),
            Step(UnitExists(UnitTypeId.SPAWNINGPOOL, 1), ZergUnit(UnitTypeId.ZERGLING, 12), None),
            # Queen for more larvae
            Step(None, ZergUnit(UnitTypeId.QUEEN, 1)),
            Step(None, ZergUnit(UnitTypeId.DRONE, 30), None),
            Step(None, ZergUnit(UnitTypeId.ZERGLING, 16, only_once=True), None),
            Step(None, ZergUnit(UnitTypeId.ROACH, 4, only_once=True), skip_until=Gas(25)),
            Step(None, ZergUnit(UnitTypeId.MUTALISK, 4), skip_until=UnitReady(UnitTypeId.SPIRE, 1)),
            Step(None, ZergUnit(UnitTypeId.DRONE, 45), None),
            Step(None, ActUnitOnce(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 16), None),
            Step(None, ZergUnit(UnitTypeId.ROACH, 10), skip=UnitReady(UnitTypeId.SPIRE, 1), skip_until=Gas(25),),
            Step(None, ZergUnit(UnitTypeId.DRONE, 65), None),
            Step(
                None,
                ZergUnit(UnitTypeId.ZERGLING, 40),
                skip_until=All([UnitReady(UnitTypeId.SPIRE, 1), Minerals(300)]),
            ),
            Step(None, ActUnit(UnitTypeId.ROACH, UnitTypeId.LARVA), skip=UnitReady(UnitTypeId.SPIRE, 1)),
            Step(
                None,
                ZergUnit(UnitTypeId.ZERGLING, 100),
                skip_until=All([UnitReady(UnitTypeId.SPIRE, 1), Minerals(500)]),
            ),
            # Endless mutalisks
            Step(None, ActUnit(UnitTypeId.MUTALISK, UnitTypeId.LARVA), None),
        ]
        super().__init__([self.overlords, buildings, gas_related, high_tier, units])
Ejemplo n.º 27
0
    async def create_plan(self) -> BuildOrder:
        attack_value = random.randint(4, 7) * 10
        self.attack = Step(None, PlanZoneAttack(attack_value))
        self.jump = random.randint(0, 2)

        self.knowledge.print(f"Att at {attack_value}", "Build")

        worker_scout = Step(None,
                            WorkerScout(),
                            skip_until=UnitExists(UnitTypeId.SUPPLYDEPOT, 1))
        self.distribute_workers = DistributeWorkers(4)
        tactics = [
            PlanCancelBuilding(),
            LowerDepots(),
            PlanZoneDefense(),
            worker_scout,
            Step(None, CallMule(50), skip=Time(5 * 60)),
            Step(None, CallMule(100), skip_until=Time(5 * 60)),
            Step(None, ScanEnemy(), skip_until=Time(5 * 60)),
            self.distribute_workers,
            ManTheBunkers(),
            Repair(),
            ContinueBuilding(),
            PlanZoneGatherTerran(),
            self.attack,
            PlanFinishEnemy(),
        ]

        return BuildOrder(
            AutoDepot(),
            Step(None,
                 MorphOrbitals(),
                 skip_until=UnitReady(UnitTypeId.BARRACKS, 1)),
            [
                Step(
                    None,
                    ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER, 34 + 12))
            ],
            [
                Step(Supply(13), GridBuilding(UnitTypeId.SUPPLYDEPOT, 1)),
                Step(UnitReady(UnitTypeId.SUPPLYDEPOT, 0.95),
                     GridBuilding(UnitTypeId.BARRACKS, 1)),
                BuildGas(1),
                Expand(2),
                Step(Supply(20), GridBuilding(UnitTypeId.SUPPLYDEPOT, 2)),
                BuildGas(2),
                Step(None,
                     GridBuilding(UnitTypeId.FACTORY, 1),
                     skip_until=UnitReady(UnitTypeId.BARRACKS, 1)),
                Step(UnitReady(UnitTypeId.FACTORY, 1),
                     GridBuilding(UnitTypeId.STARPORT, 1)),
                DefensiveBuilding(UnitTypeId.BUNKER, DefensePosition.Entrance,
                                  1),
                Step(None, GridBuilding(UnitTypeId.BARRACKS, 2)),
                StepBuildGas(3, None, Gas(150)),
                Step(
                    None,
                    BuildAddon(UnitTypeId.FACTORYTECHLAB, UnitTypeId.FACTORY,
                               1)),
                # Step(RequiredUnitReady(UnitTypeId.STARPORT, 1), GridBuilding(UnitTypeId.FUSIONCORE, 1)),
                Step(
                    None,
                    BuildAddon(UnitTypeId.STARPORTTECHLAB, UnitTypeId.STARPORT,
                               1)),
                StepBuildGas(4, None, Gas(100)),
                Step(UnitExists(UnitTypeId.BANSHEE, 1, include_killed=True),
                     GridBuilding(UnitTypeId.BARRACKS, 3)),
                Step(
                    None,
                    BuildAddon(UnitTypeId.BARRACKSTECHLAB, UnitTypeId.BARRACKS,
                               1)),
                Step(
                    None,
                    BuildAddon(UnitTypeId.BARRACKSREACTOR, UnitTypeId.BARRACKS,
                               1)),
                Step(None, GridBuilding(UnitTypeId.STARPORT, 2)),
                Step(
                    UnitReady(UnitTypeId.STARPORT, 2),
                    BuildAddon(UnitTypeId.STARPORTTECHLAB, UnitTypeId.STARPORT,
                               2),
                ),
                Step(None, Tech(UpgradeId.SHIELDWALL)),
                Step(Minerals(600), GridBuilding(UnitTypeId.BARRACKS, 5)),
                Expand(3),
            ],
            [
                Step(
                    Any([
                        EnemyBuildingExists(UnitTypeId.DARKSHRINE),
                        EnemyUnitExistsAfter(UnitTypeId.DARKTEMPLAR),
                        EnemyUnitExistsAfter(UnitTypeId.BANSHEE),
                    ]),
                    None,
                ),
                Step(
                    UnitReady(UnitTypeId.STARPORT, 1),
                    ActUnit(UnitTypeId.RAVEN,
                            UnitTypeId.STARPORT,
                            2,
                            priority=True),
                ),
            ],
            ActUnit(UnitTypeId.BANSHEE, UnitTypeId.STARPORT, 20,
                    priority=True),
            ActUnit(UnitTypeId.SIEGETANK, UnitTypeId.FACTORY, 10),
            ActUnit(UnitTypeId.MARINE, UnitTypeId.BARRACKS, 50),
            SequentialList(tactics),
        )
Ejemplo n.º 28
0
    async def create_plan(self) -> BuildOrder:
        rnd = select_build_index(self.knowledge, "build.cannon_rush", 0, 2)
        self.knowledge.building_solver.wall_type = WallType.NoWall
        rush_killed = RequireCustom(
            lambda k: self.knowledge.lost_units_manager.own_lost_type(UnitTypeId.PROBE) >= 3 or self.time > 4 * 60
        )

        if rnd == 2:
            cannon_rush = self.cannon_expand()
        elif rnd == 1:
            cannon_rush = self.cannon_contain()
        else:
            cannon_rush = self.cannon_rush()

        return BuildOrder(
            Step(
                None,
                ChronoUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS),
                skip=UnitExists(UnitTypeId.PROBE, 16),
                skip_until=UnitReady(UnitTypeId.PYLON, 1),
            ),
            ChronoAnyTech(0),
            SequentialList(
                ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 13),
                GridBuilding(UnitTypeId.PYLON, 1),
                Step(None, cannon_rush, skip=rush_killed),
                BuildOrder(
                    [
                        Expand(2),
                        ProtossUnit(UnitTypeId.PROBE, 30),
                        Step(UnitExists(UnitTypeId.NEXUS, 2), ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 44)),
                    ],
                    GridBuilding(UnitTypeId.GATEWAY, 2),
                    GridBuilding(UnitTypeId.CYBERNETICSCORE, 1),
                    BuildGas(2),
                    AutoPylon(),
                    ProtossUnit(UnitTypeId.STALKER, 4, priority=True),
                    StepBuildGas(3, skip=Gas(300)),
                    Tech(UpgradeId.WARPGATERESEARCH),
                    BuildOrder([]).forge_upgrades_all,
                    Step(UnitReady(UnitTypeId.TWILIGHTCOUNCIL, 1), Tech(UpgradeId.BLINKTECH)),
                    [
                        ProtossUnit(UnitTypeId.PROBE, 22),
                        Step(UnitExists(UnitTypeId.NEXUS, 2), ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 44)),
                        StepBuildGas(3, skip=Gas(300)),
                    ],
                    [ProtossUnit(UnitTypeId.STALKER, 100)],
                    [
                        Step(UnitReady(UnitTypeId.CYBERNETICSCORE, 1), GridBuilding(UnitTypeId.TWILIGHTCOUNCIL, 1),),
                        Step(UnitReady(UnitTypeId.CYBERNETICSCORE, 1), GridBuilding(UnitTypeId.GATEWAY, 7)),
                        StepBuildGas(4, skip=Gas(200)),
                    ],
                ),
            ),
            SequentialList(
                PlanCancelBuilding(),
                PlanZoneDefense(),
                PlanDistributeWorkers(),
                PlanZoneGather(),
                PlanZoneAttack(6),
                PlanFinishEnemy(),
            ),
        )
Ejemplo n.º 29
0
    def __init__(self):
        viking_counters = [
            UnitTypeId.COLOSSUS, UnitTypeId.MEDIVAC, UnitTypeId.RAVEN,
            UnitTypeId.VOIDRAY, UnitTypeId.CARRIER, UnitTypeId.TEMPEST,
            UnitTypeId.BROODLORD
        ]
        scv = [
            Step(None,
                 MorphOrbitals(),
                 skip_until=RequiredUnitReady(UnitTypeId.BARRACKS, 1)),
            Step(None,
                 ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER, 16 + 6),
                 skip=RequiredUnitExists(UnitTypeId.COMMANDCENTER, 2)),
            Step(None,
                 ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER, 32 + 12))
        ]

        dt_counter = [
            Step(
                RequiredAny([
                    RequiredEnemyBuildingExists(UnitTypeId.DARKSHRINE),
                    RequiredEnemyUnitExistsAfter(UnitTypeId.DARKTEMPLAR),
                    RequiredEnemyUnitExistsAfter(UnitTypeId.BANSHEE)
                ]), None),
            Step(None, GridBuilding(UnitTypeId.ENGINEERINGBAY, 1)),
            Step(
                None,
                DefensiveBuilding(UnitTypeId.MISSILETURRET,
                                  DefensePosition.Entrance, 2)),
            Step(
                None,
                DefensiveBuilding(UnitTypeId.MISSILETURRET,
                                  DefensePosition.CenterMineralLine, None))
        ]
        dt_counter2 = [
            Step(
                RequiredAny([
                    RequiredEnemyBuildingExists(UnitTypeId.DARKSHRINE),
                    RequiredEnemyUnitExistsAfter(UnitTypeId.DARKTEMPLAR),
                    RequiredEnemyUnitExistsAfter(UnitTypeId.BANSHEE)
                ]), None),
            GridBuilding(UnitTypeId.STARPORT, 2),
            Step(
                None,
                ActBuildAddon(UnitTypeId.STARPORTTECHLAB, UnitTypeId.STARPORT,
                              1)),
            Step(RequiredUnitReady(UnitTypeId.STARPORT, 1),
                 ActUnit(UnitTypeId.RAVEN, UnitTypeId.STARPORT, 2)),
        ]

        buildings = [
            Step(
                RequiredSupply(13), GridBuilding(UnitTypeId.SUPPLYDEPOT, 1),
                RequiredTotalUnitExists([
                    UnitTypeId.SUPPLYDEPOT, UnitTypeId.SUPPLYDEPOTDROP,
                    UnitTypeId.SUPPLYDEPOTLOWERED
                ], 1)),
            StepBuildGas(1, RequiredSupply(16)),
            Step(
                RequiredTotalUnitExists([
                    UnitTypeId.SUPPLYDEPOT, UnitTypeId.SUPPLYDEPOTDROP,
                    UnitTypeId.SUPPLYDEPOTLOWERED
                ], 1), GridBuilding(UnitTypeId.BARRACKS, 1)),
            Step(
                RequiredUnitReady(UnitTypeId.BARRACKS, 0.25),
                GridBuilding(UnitTypeId.SUPPLYDEPOT, 2),
                RequiredTotalUnitExists([
                    UnitTypeId.SUPPLYDEPOT, UnitTypeId.SUPPLYDEPOTDROP,
                    UnitTypeId.SUPPLYDEPOTLOWERED
                ], 2)),
            StepBuildGas(1, RequiredSupply(18)),
            Step(RequiredUnitExists(UnitTypeId.MARINE, 1), ActExpand(2)),
            StepBuildGas(2, RequiredSupply(20)),
            Step(None,
                 GridBuilding(UnitTypeId.FACTORY, 1),
                 skip_until=RequiredUnitReady(UnitTypeId.BARRACKS, 1)),
            Step(None, GridBuilding(UnitTypeId.FACTORY, 1)),
            Step(
                None,
                ActBuildAddon(UnitTypeId.FACTORYTECHLAB, UnitTypeId.FACTORY,
                              1)),
            # BuildStep(None, GridBuilding(UnitTypeId.FACTORY, 3)),
            Step(
                RequiredUnitExists(UnitTypeId.SIEGETANK,
                                   1,
                                   include_killed=True),
                GridBuilding(UnitTypeId.FACTORY, 2)),
            StepBuildGas(4),
            Step(
                None,
                ActBuildAddon(UnitTypeId.FACTORYTECHLAB, UnitTypeId.FACTORY,
                              2)),
            Step(None, GridBuilding(UnitTypeId.BARRACKS, 2)),
            # BuildStep(None, GridBuilding(UnitTypeId.ARMORY, 1)),
            Step(None, GridBuilding(UnitTypeId.STARPORT, 1)),
            Step(None, GridBuilding(UnitTypeId.BARRACKS, 5)),
            Step(
                None,
                ActBuildAddon(UnitTypeId.BARRACKSTECHLAB, UnitTypeId.BARRACKS,
                              1)),
            Step(None, ActTech(UpgradeId.SHIELDWALL)),
            Step(
                None,
                ActBuildAddon(UnitTypeId.STARPORTREACTOR, UnitTypeId.STARPORT,
                              1)),
            Step(
                None,
                ActBuildAddon(UnitTypeId.BARRACKSREACTOR, UnitTypeId.BARRACKS,
                              3)),
            Step(None, ActExpand(3)),
        ]

        mech = [
            Step(RequiredUnitExists(UnitTypeId.FACTORY, 1),
                 ActUnit(UnitTypeId.HELLION, UnitTypeId.FACTORY, 2),
                 skip=RequiredUnitReady(UnitTypeId.FACTORYTECHLAB, 1)),
            Step(RequiredUnitReady(UnitTypeId.FACTORYTECHLAB, 1),
                 ActUnit(UnitTypeId.SIEGETANK, UnitTypeId.FACTORY, 20))
        ]
        air = [
            Step(RequiredUnitReady(UnitTypeId.STARPORT, 1),
                 ActUnit(UnitTypeId.MEDIVAC, UnitTypeId.STARPORT, 2)),
            Step(None, ActUnit(UnitTypeId.VIKINGFIGHTER, UnitTypeId.STARPORT,
                               1)),
            Step(None,
                 ActUnit(UnitTypeId.VIKINGFIGHTER, UnitTypeId.STARPORT, 3),
                 skip_until=self.RequireAnyEnemyUnits(viking_counters, 1)),
            Step(RequiredUnitReady(UnitTypeId.STARPORT, 1),
                 ActUnit(UnitTypeId.MEDIVAC, UnitTypeId.STARPORT, 4)),
            Step(None,
                 ActUnit(UnitTypeId.VIKINGFIGHTER, UnitTypeId.STARPORT, 10),
                 skip_until=self.RequireAnyEnemyUnits(viking_counters, 4)),
            Step(RequiredUnitReady(UnitTypeId.STARPORT, 1),
                 ActUnit(UnitTypeId.MEDIVAC, UnitTypeId.STARPORT, 6)),
        ]
        marines = [
            Step(RequiredUnitReady(UnitTypeId.BARRACKS, 1),
                 ActUnit(UnitTypeId.MARINE, UnitTypeId.BARRACKS, 2)),
            Step(RequiredMinerals(250),
                 ActUnit(UnitTypeId.MARINE, UnitTypeId.BARRACKS, 100))
        ]

        super().__init__([
            scv, dt_counter, dt_counter2, self.depots, buildings, mech, air,
            marines
        ])
Ejemplo n.º 30
0
    async def create_plan(self) -> BuildOrder:
        scv = [
            Step(None, TerranUnit(UnitTypeId.SCV, 14), skip=UnitExists(UnitTypeId.SUPPLYDEPOT)),
            Step(None, TerranUnit(UnitTypeId.SCV, 15), skip=UnitReady(UnitTypeId.SUPPLYDEPOT)),
            Step(None, TerranUnit(UnitTypeId.SCV, 19), skip=UnitReady(UnitTypeId.BARRACKS)),
            BuildOrder(
                Step(UnitReady(UnitTypeId.BARRACKS, 1), MorphOrbitals()),
                Step(
                    None,
                    ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER, 16 + 6),
                    skip=UnitExists(UnitTypeId.COMMANDCENTER, 2),
                ),
                Step(None, ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER, 3 * 22)),
            ),
        ]

        gas_management = [
            # Mine with 6 workers until first barracks is complete
            Step(None, DistributeWorkers(6), skip=UnitReady(UnitTypeId.BARRACKS)),
            # Mine with 4 workers until the natural CC is started
            Step(
                None,
                DistributeWorkers(4, 4),
                skip_until=UnitReady(UnitTypeId.BARRACKS),
                skip=UnitExists(UnitTypeId.COMMANDCENTER, 2),
            ),
            # Mine with at least 9 workers afterwards
            Step(None, DistributeWorkers(min_gas=9), skip_until=UnitExists(UnitTypeId.COMMANDCENTER, 2)),
        ]

        units = [
            Step(
                UnitExists(UnitTypeId.FACTORY, include_pending=True),
                BuildOrder(
                    TerranUnit(UnitTypeId.REAPER, 3, only_once=True), TerranUnit(UnitTypeId.HELLION, 2, only_once=True),
                ),
            ),
            BuildOrder(
                TerranUnit(UnitTypeId.CYCLONE, 1, only_once=True),
                TerranUnit(UnitTypeId.RAVEN, 2, only_once=True),
                Step(
                    UnitExists(UnitTypeId.CYCLONE, include_killed=True),
                    TerranUnit(UnitTypeId.SIEGETANK, 5, only_once=True),
                ),
                Step(
                    UnitExists(UnitTypeId.RAVEN, 2, include_killed=True),
                    TerranUnit(UnitTypeId.VIKINGFIGHTER, 6, only_once=True),
                ),
            ),
            # Late game units
            BuildOrder(
                TerranUnit(UnitTypeId.MARINE, 100),
                TerranUnit(UnitTypeId.SIEGETANK, 10),
                [
                    TerranUnit(UnitTypeId.MEDIVAC, 4),
                    TerranUnit(UnitTypeId.VIKINGFIGHTER, 6),
                    TerranUnit(UnitTypeId.LIBERATOR, 2),
                    TerranUnit(UnitTypeId.VIKINGFIGHTER, 20),
                ],
            ),
        ]

        research = [
            Tech(UpgradeId.STIMPACK),
            Tech(UpgradeId.TERRANINFANTRYWEAPONSLEVEL1),
            Tech(UpgradeId.TERRANINFANTRYARMORSLEVEL1),
            Tech(UpgradeId.SHIELDWALL),
            Tech(UpgradeId.TERRANVEHICLEWEAPONSLEVEL1),
            Tech(UpgradeId.TERRANINFANTRYWEAPONSLEVEL2),
            Tech(UpgradeId.TERRANINFANTRYARMORSLEVEL2),
            Tech(UpgradeId.TERRANVEHICLEWEAPONSLEVEL2),
            Tech(UpgradeId.TERRANINFANTRYWEAPONSLEVEL3),
            Tech(UpgradeId.TERRANINFANTRYARMORSLEVEL3),
            Tech(UpgradeId.TERRANVEHICLEWEAPONSLEVEL3),
            Tech(UpgradeId.TERRANSHIPWEAPONSLEVEL1),
            Tech(UpgradeId.TERRANSHIPWEAPONSLEVEL2),
            Tech(UpgradeId.TERRANSHIPWEAPONSLEVEL3),
            # TODO Fix me, doesn't work in python-sc2 and neither does here:
            # Tech(UpgradeId.TERRANVEHICLEANDSHIPARMORSLEVEL1),
            # Tech(UpgradeId.TERRANVEHICLEANDSHIPARMORSLEVEL2),
            # Tech(UpgradeId.TERRANVEHICLEANDSHIPARMORSLEVEL3),
        ]

        mid_game_addons = Step(
            None,
            BuildOrder(
                # Rebuild addons
                BuildAddon(UnitTypeId.BARRACKSREACTOR, UnitTypeId.BARRACKS, 5),
                BuildAddon(UnitTypeId.FACTORYTECHLAB, UnitTypeId.FACTORY, 2),
                BuildAddon(UnitTypeId.STARPORTREACTOR, UnitTypeId.STARPORT, 1),
            ),
            skip_until=UnitExists(UnitTypeId.BARRACKS, 2, include_not_ready=False),
        )

        addon_swap = [
            # Addon count before 3rd cc is placed
            Step(
                None,
                PlanAddonSwap(barracks_reactor_count=1, factory_techlab_count=1, starport_techlab_count=1),
                skip=UnitExists(UnitTypeId.COMMANDCENTER, 3, include_killed=True, include_pending=True),
            ),
            # Once the 2 ravens are out, swap addons to allow reactored viking production and stim research
            Step(
                None,
                PlanAddonSwap(barracks_techlab_count=1, factory_techlab_count=1, starport_reactor_count=1),
                skip_until=UnitExists(UnitTypeId.RAVEN, 2, include_killed=True),
                skip=UnitExists(UnitTypeId.BARRACKS, 5, include_killed=True),
            ),
            Step(
                None,
                PlanAddonSwap(
                    barracks_techlab_count=1,
                    barracks_reactor_count=4,
                    factory_techlab_count=1,
                    starport_reactor_count=1,
                ),
                skip_until=UnitExists(UnitTypeId.BARRACKS, 5, include_killed=True),
                skip=TechReady(UpgradeId.SHIELDWALL),
            ),
            # Once stim and combatshield is researched, have a 5-2-1 setup
            Step(
                None,
                PlanAddonSwap(
                    barracks_reactor_count=5, factory_techlab_count=2, starport_reactor_count=1, only_once=False
                ),
                skip_until=TechReady(UpgradeId.SHIELDWALL),
            ),
        ]

        return BuildOrder(
            # Handle all scv production
            scv,
            # Handle gas saturation
            gas_management,
            # Handle addon swapping
            addon_swap,
            ExecuteAddonSwap(),
            # Addon (re-)building
            mid_game_addons,
            # Handle all unit production
            units,
            # Build structures
            [
                Step(Supply(14), GridBuilding(UnitTypeId.SUPPLYDEPOT, 1),),
                BuildGas(1),
                GridBuilding(UnitTypeId.BARRACKS, 1),
                StepBuildGas(2, requirement=Supply(17)),
                GridBuilding(UnitTypeId.FACTORY, 1),
                GridBuilding(UnitTypeId.SUPPLYDEPOT, 2),
                # Expand should start at around 2:28
                Expand(2, priority=True),
                GridBuilding(UnitTypeId.SUPPLYDEPOT, 3),
                GridBuilding(UnitTypeId.STARPORT, 1),
                BuildAddon(UnitTypeId.FACTORYTECHLAB, UnitTypeId.FACTORY, 1),
                # TODO Unsure how to handle only building this addon once? Need a 'only_once' for BuildAddon
                Step(
                    None,
                    BuildAddon(UnitTypeId.BARRACKSTECHLAB, UnitTypeId.BARRACKS, 1),
                    skip=UnitReady(UnitTypeId.FACTORYTECHLAB),
                ),
                # Third gas at natural should be started at 3:20 before the CC finishes
                BuildGas(3),
                # At around 4:20, this command center should be placed in-base and flown out later
                # TODO Build 3rd CC inbase if possible
                Step(Time(4 * 60 + 20), Expand(3),),
                AutoDepot(),
                Step(
                    UnitExists(UnitTypeId.RAVEN, 2, include_pending=True),
                    BuildAddon(UnitTypeId.BARRACKSREACTOR, UnitTypeId.BARRACKS, 1),
                    skip=UnitExists(UnitTypeId.RAVEN, 2),
                ),
                Step(
                    UnitExists(UnitTypeId.VIKINGFIGHTER, 2, include_pending=True), GridBuilding(UnitTypeId.BARRACKS, 3),
                ),
                Step(
                    UnitExists(UnitTypeId.VIKINGFIGHTER, 4, include_pending=True),
                    GridBuilding(UnitTypeId.ENGINEERINGBAY, 2),
                ),
                BuildOrder(
                    StepBuildGas(6, skip=All(Gas(200), UnitExists(UnitTypeId.BARRACKS, 5))),
                    Step(
                        UnitExists(UnitTypeId.VIKINGFIGHTER, 6, include_pending=True),
                        GridBuilding(UnitTypeId.BARRACKS, 5),
                    ),
                    # Add 2nd factory when combatshield is nearly done
                    Step(TechReady(UpgradeId.SHIELDWALL, 0.6), GridBuilding(UnitTypeId.FACTORY, 2),),
                    # Add armory when +1 attack is nearly done
                    Step(
                        TechReady(UpgradeId.TERRANINFANTRYWEAPONSLEVEL1, 0.6),
                        GridBuilding(UnitTypeId.ARMORY, 1, priority=True,),
                    ),
                    # Research upgrades
                    research,
                ),
            ],
            CallMule(50),
            LowerDepots(),
            [
                PlanZoneGather(),
                PlanZoneDefense(),
                Step(TechReady(UpgradeId.STIMPACK), PlanZoneAttack(4)),
                PlanFinishEnemy(),
            ],
        )