コード例 #1
0
ファイル: cannon_rush.py プロジェクト: etzhang416/sc2_bot
    def cannon_expand(self) -> ActBase:
        self.knowledge.print(f"Cannon expand", "Build")
        natural = self.knowledge.expansion_zones[-2]
        pylon_pos: Point2 = natural.behind_mineral_position_center

        return BuildOrder([
            [
                ActUnitOnce(UnitTypeId.PROBE, UnitTypeId.NEXUS, 14),
                GridBuilding(UnitTypeId.FORGE, 1),
                ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 18),
            ],
            [
                BuildPosition(UnitTypeId.PYLON,
                              pylon_pos,
                              exact=False,
                              only_once=True),
                Step(
                    None,
                    BuildPosition(
                        UnitTypeId.PHOTONCANNON,
                        pylon_pos.towards(natural.center_location, 4),
                        exact=False,
                        only_once=True,
                    ),
                    skip=RequireCustom(lambda k: k.lost_units_manager.
                                       own_lost_type(UnitTypeId.PYLON) > 0),
                ),
                Expand(2),
                GridBuilding(UnitTypeId.GATEWAY, 1),
                DefensiveCannons(2, 0, 1),
            ],
        ])
コード例 #2
0
    async def create_plan(self) -> BuildOrder:
        stop_gas = RequiredAny([RequiredGas(100), RequiredTechReady(UpgradeId.ZERGLINGMOVEMENTSPEED, 0.001)])
        end_game = RequiredAny([RequiredSupply(70), UnitExists(UnitTypeId.LAIR, 1)])

        return BuildOrder(
            ActUnitOnce(UnitTypeId.DRONE, UnitTypeId.LARVA, 24),
            LingFloodBuild(),
            SequentialList(
                InjectLarva(),
                Step(None, PlanDistributeWorkers(3, 3), skip=RequiredAny([stop_gas, end_game])),
                Step(None, PlanDistributeWorkers(0, 0), skip_until=stop_gas, skip=end_game),
                Step(None, PlanDistributeWorkers(None, None), skip_until=end_game),
                WorkerAttack(),
                DummyZergAttack(),
            ),
        )
コード例 #3
0
 async def create_plan(self) -> BuildOrder:
     return BuildOrder([
         SequentialList([
             ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER, 15),
             GridBuilding(UnitTypeId.SUPPLYDEPOT, 1),
             ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER, 17),
             GridBuilding(UnitTypeId.BARRACKS, 1),
             GridBuilding(UnitTypeId.SUPPLYDEPOT, 2),
             GridBuilding(UnitTypeId.BARRACKS, 5),
             GridBuilding(UnitTypeId.SUPPLYDEPOT, 3),
             ActUnit(UnitTypeId.SCV, UnitTypeId.COMMANDCENTER, 18),
             BuildOrder([
                 AutoDepot(),
                 ActUnit(UnitTypeId.MARINE, UnitTypeId.BARRACKS, 200),
             ])
         ]),
         SequentialList([
             PlanCancelBuilding(),
             LowerDepots(),
             PlanZoneDefense(),
             DistributeWorkers(),
             Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
             ManTheBunkers(),
             Repair(),
             ContinueBuilding(),
             PlanZoneGatherTerran(),
             AllInPlanZoneAttack(10),
             PlanFinishEnemy(),
         ])
     ])
コード例 #4
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(),
         ),
     )
コード例 #5
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(),
                ])
        ])
コード例 #6
0
    def cannon_rush(self) -> ActBase:
        self.knowledge.print(f"Cannon rush", "Build")
        return BuildOrder([
            [
                GridBuilding(UnitTypeId.PYLON, 1),
                GridBuilding(UnitTypeId.FORGE, 1, priority=True),
            ],

            ProxyCannoneer(),
            ProtossUnit(UnitTypeId.PROBE, 18),
            ChronoUnitProduction(UnitTypeId.PROBE, UnitTypeId.NEXUS),
            [
                Step(RequiredMinerals(400), GridBuilding(UnitTypeId.GATEWAY, 1)),
                Step(RequiredMinerals(700), ActExpand(2), skip=RequiredUnitExists(UnitTypeId.NEXUS, 2)),
                GridBuilding(UnitTypeId.CYBERNETICSCORE, 1),
            ]
        ])
コード例 #7
0
    async def create_plan(self) -> BuildOrder:
        attack = PlanZoneAttack(1)
        attack.retreat_multiplier = 0.1
        attack.attack_on_advantage = False

        return BuildOrder(
            [PlanDistributeWorkers(),
             Step(RequiredTime(60), attack)])
コード例 #8
0
    async def create_plan(self) -> BuildOrder:
        return BuildOrder(
            Step(
                None,
                ChronoUnit(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),
                BuildGas(2),
                ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 19),
                GridBuilding(UnitTypeId.GATEWAY, 2),
                BuildOrder(
                    AutoPylon(),
                    ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 22),

                    SequentialList(
                        Step(
                            None,
                            GridBuilding(UnitTypeId.CYBERNETICSCORE, 1),
                            skip_until=UnitReady(UnitTypeId.GATEWAY, 1),
                        ),
                        Step(
                            UnitReady(UnitTypeId.CYBERNETICSCORE, 1), ProtossUnit(UnitTypeId.ADEPT, 2, only_once=True),
                        ),
                        Tech(UpgradeId.WARPGATERESEARCH),
                        ProtossUnit(UnitTypeId.STALKER, 100),
                    ),
                    Step(UnitExists(UnitTypeId.CYBERNETICSCORE, 1), GridBuilding(UnitTypeId.GATEWAY, 4)),
                ),
            ),
            BuildOrder(
                DistributeWorkers(),
                PlanZoneAttack(),
                PlanFinishEnemy(),
            ),
        )
コード例 #9
0
 async def create_plan(self) -> BuildOrder:
     self._bot.building_solver.wall_type = WallType.ProtossMainZerg
     attack = PlanZoneAttack(4)
     return BuildOrder([
         ChronoUnit(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),
             BuildGas(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(UnitReady(UnitTypeId.STARGATE, 1),
                          GridBuilding(UnitTypeId.FLEETBEACON, 1)),
                 ),
                 [ProtossUnit(UnitTypeId.TEMPEST, 100, priority=True)],
                 [
                     Step(UnitExists(UnitTypeId.FLEETBEACON, 1),
                          GridBuilding(UnitTypeId.STARGATE, 2))
                 ],
             ),
         ),
         DefensiveCannons(4, 2, 0),
         SequentialList(
             PlanZoneDefense(),
             RestorePower(),
             DistributeWorkers(),
             Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
             PlanZoneGather(),
             Step(UnitExists(UnitTypeId.TEMPEST, 1, include_killed=True),
                  attack),
             PlanFinishEnemy(),
         ),
     ])
コード例 #10
0
    def cannon_contain(self) -> ActBase:
        self.knowledge.print(f"Cannon contain", "Build")
        enemy_main = self.knowledge.expansion_zones[-1]
        natural = self.knowledge.expansion_zones[-2]
        enemy_ramp = self.knowledge.enemy_base_ramp

        return Step(None, BuildOrder(
            [
                [
                    ActUnitOnce(UnitTypeId.PROBE, UnitTypeId.NEXUS, 14),
                    GridBuilding(UnitTypeId.FORGE, 1),
                    ActUnitOnce(UnitTypeId.PROBE, UnitTypeId.NEXUS, 18),
                ],
                [
                    BuildPosition(UnitTypeId.PYLON, natural.center_location),
                    BuildPosition(UnitTypeId.PHOTONCANNON, natural.center_location.towards(enemy_ramp.bottom_center, 5),
                                  exact=False, only_once=True),
                    BuildPosition(UnitTypeId.PYLON, natural.center_location.towards(enemy_ramp.bottom_center, 8),
                                  exact=False, only_once=True),
                    BuildPosition(UnitTypeId.PHOTONCANNON, natural.center_location.towards(enemy_ramp.top_center, 13),
                                  exact=False, only_once=True),
                    BuildPosition(UnitTypeId.PYLON,
                                  natural.center_location.towards(enemy_ramp.bottom_center, 16), exact=False,
                                  only_once=True),
                    BuildPosition(UnitTypeId.PHOTONCANNON,
                                  natural.center_location.towards(enemy_ramp.top_center, 20), exact=False,
                                  only_once=True),
                ],
                [
                    BuildPosition(UnitTypeId.PYLON, natural.behind_mineral_position_center, exact=False,
                                  only_once=True),
                    BuildPosition(UnitTypeId.PHOTONCANNON,
                                  natural.center_location.towards(enemy_main.behind_mineral_position_center, 5),
                                  exact=False, only_once=True),
                    BuildPosition(UnitTypeId.PYLON,
                                  natural.center_location.towards(enemy_main.behind_mineral_position_center, 8),
                                  exact=False, only_once=True),
                    BuildPosition(UnitTypeId.PHOTONCANNON,
                                  natural.center_location.towards(enemy_main.behind_mineral_position_center, 12),
                                  exact=False, only_once=True),

                    BuildPosition(UnitTypeId.PYLON,
                                  natural.center_location.towards(enemy_main.behind_mineral_position_center, 16),
                                  exact=False,
                                  only_once=True),
                    BuildPosition(UnitTypeId.PHOTONCANNON,
                                  natural.center_location.towards(enemy_main.behind_mineral_position_center, 20),
                                  exact=False,
                                  only_once=True),
                ],
                ActUnit(UnitTypeId.PROBE, UnitTypeId.NEXUS, 16),
            ]),
        # Skip cannon rushing if we started nexus, or have over 750 minerals, the build is probably stuck
        skip=RequiredAny([RequiredUnitExists(UnitTypeId.NEXUS, 2), RequiredMinerals(750)]))
コード例 #11
0
 async def create_plan(self) -> BuildOrder:
     perform_cleanup = RequireCustom(
         lambda k: self._bot.zone_manager.enemy_main_zone.
         is_scouted_at_least_once and not self._bot.zone_manager.
         enemy_main_zone.is_enemys)
     return BuildOrder([
         Step(
             None,
             SequentialList(
                 SetGameStepSize(1),  # improve our worker micro
                 WorkerAttack()),
             skip=perform_cleanup),
         Step(
             None,
             SequentialList(
                 SetGameStepSize(self._bot.client.game_step
                                 ),  # back to the original step size
                 await self.cleanup.create_plan()),
             skip_until=perform_cleanup),
     ])
コード例 #12
0
ファイル: twelve_pool.py プロジェクト: lladdy/chance-sc2
    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._bot.enemy_structures.flying.
                              exists and self._bot.supply_used > 30),
                BuildGas(2)),
            Expand(2),
            UnitExists(UnitTypeId.DRONE, 20),
            MorphLair(),
            UnitExists(UnitTypeId.DRONE, 30),
            BuildGas(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,
            Step(SupplyLeft(0), AutoOverLord()),
            finish,
            build_step_units,
            AutoOverLord(),
            DistributeWorkers(),
            Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
            InjectLarva(),
            PlanWorkerOnlyDefense(),
            PlanZoneDefense(),
            PlanZoneGather(),
            PlanZoneAttack2(2),
            PlanFinishEnemy(),
        )
コード例 #13
0
    def macro(self) -> BuildOrder:
        worker_scout = Step(
            None, WorkerScout(), skip_until=RequireCustom(lambda k: len(self.enemy_start_locations) > 1)
        )
        distribute = PlanDistributeWorkers()

        return BuildOrder(
            [
                LingSpeedBuild(),
                SequentialList([worker_scout, SpreadCreep(), InjectLarva(), distribute, DummyZergAttack()]),
            ]
        )
コード例 #14
0
ファイル: bio.py プロジェクト: lladdy/chance-sc2
    async def create_plan(self) -> BuildOrder:
        worker_scout = Step(None, WorkerScout(), skip_until=UnitExists(UnitTypeId.SUPPLYDEPOT, 1))
        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)),
            DistributeWorkers(),
            Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
            ManTheBunkers(),
            Repair(),
            ContinueBuilding(),
            PlanZoneGatherTerran(),
            PlanZoneAttack(26),
            PlanFinishEnemy(),
        ]

        return BuildOrder([BuildBio(), tactics])
コード例 #15
0
ファイル: lings_macro.py プロジェクト: lladdy/chance-sc2
    async def create_plan(self) -> BuildOrder:
        worker_scout = Step(
            None, WorkerScout(), skip_until=RequireCustom(lambda k: len(self._bot.enemy_start_locations) > 1)
        )
        distribute = DistributeWorkers()

        return BuildOrder(
            [
                LingSpeedBuild(),
                SequentialList(
                    [
                        worker_scout,
                        SpreadCreep(),
                        InjectLarva(),
                        distribute,
                        Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
                        DummyZergAttack(),
                    ]
                ),
            ]
        )
コード例 #16
0
ファイル: bio.py プロジェクト: etzhang416/sc2_bot
    async def create_plan(self) -> BuildOrder:
        self.knowledge.data_manager.set_build("bio")
        worker_scout = Step(None, WorkerScout(), skip_until=UnitExists(UnitTypeId.SUPPLYDEPOT, 1))
        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)),
            DistributeWorkers(),
            ManTheBunkers(),
            Repair(),
            ContinueBuilding(),
            PlanZoneGatherTerran(),
            self.attack,
            PlanFinishEnemy(),
        ]

        return BuildOrder([BuildBio(), tactics])
コード例 #17
0
ファイル: macro_zerg_v2.py プロジェクト: lladdy/chance-sc2
 async def create_plan(self) -> BuildOrder:
     attack = PlanZoneAttack(120)
     attack.retreat_multiplier = 0.3
     tactics = [
         PlanCancelBuilding(),
         InjectLarva(),
         DistributeWorkers(),
         Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
         attack,
         PlanFinishEnemy(),
     ]
     return CounterTerranTie([MacroBuild(), tactics])
コード例 #18
0
ファイル: rusty.py プロジェクト: Hammer2900/sharpy-paul
    async def create_plan(self) -> BuildOrder:
        self.attack = Step(None, PlanZoneAttack(random.randint(50, 80)))
        worker_scout = Step(None, WorkerScout(), skip_until=UnitExists(UnitTypeId.SUPPLYDEPOT, 1))

        tactics = [
            PlanCancelBuilding(),
            LowerDepots(),
            PlanZoneDefense(),
            worker_scout,
            CallMule(100),
            ScanEnemy(),
            PlanDistributeWorkers(),
            ManTheBunkers(),
            Repair(),
            ContinueBuilding(),
            PlanZoneGatherTerran(),
            self.attack,
            PlanFinishEnemy(),
        ]

        return BuildOrder([BuildTanks(), SequentialList(tactics)])
コード例 #19
0
ファイル: ravager_rush.py プロジェクト: lladdy/chance-sc2
 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),
             StepBuildGas(2),
             ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 14),
             ActBuilding(UnitTypeId.ROACHWARREN, 1),
             ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 14),
             ActUnit(UnitTypeId.OVERLORD, UnitTypeId.LARVA, 2),
             ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 14),
             ActUnit(UnitTypeId.ROACH, UnitTypeId.LARVA, 3),
             ActUnit(UnitTypeId.OVERLORD, UnitTypeId.LARVA, 3),
             ActUnit(UnitTypeId.ROACH, UnitTypeId.LARVA, 4),
             ActUnit(UnitTypeId.RAVAGER, UnitTypeId.ROACH, 3),
             ActUnit(UnitTypeId.ROACH, UnitTypeId.LARVA, 100),
         ]), in_case_of_air,
         SequentialList([
             DistributeWorkers(4),
             Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
             PlanZoneDefense(),
             AutoOverLord(),
             InjectLarva(),
             PlanZoneGather(),
             Step(UnitExists(UnitTypeId.RAVAGER), PlanZoneAttackAllIn(10)),
             PlanFinishEnemy(),
         ])
     ])
コード例 #20
0
ファイル: gate4.py プロジェクト: Hammer2900/sharpy-paul
 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(),
         ),
     )
コード例 #21
0
    def aggressive(self) -> BuildOrder:
        worker_scout = Step(
            None, WorkerScout(), skip_until=RequireCustom(lambda k: len(self.enemy_start_locations) > 1)
        )
        stop_gas = RequiredAny([RequiredGas(100), RequiredTechReady(UpgradeId.ZERGLINGMOVEMENTSPEED, 0.001)])
        end_game = RequiredAny([RequiredSupply(90), UnitExists(UnitTypeId.LAIR, 1)])

        return BuildOrder(
            [
                LingFloodBuild(),
                SequentialList(
                    [
                        worker_scout,
                        SpreadCreep(),
                        InjectLarva(),
                        Step(None, PlanDistributeWorkers(3, 3), skip=RequiredAny([stop_gas, end_game])),
                        Step(None, PlanDistributeWorkers(0, 0), skip_until=stop_gas, skip=end_game),
                        Step(None, PlanDistributeWorkers(None, None), skip_until=end_game),
                        DummyZergAttack(),
                    ]
                ),
            ]
        )
コード例 #22
0
    async def create_plan(self) -> BuildOrder:
        worker_scout = Step(
            None, WorkerScout(), skip_until=RequireCustom(lambda k: len(self._bot.enemy_start_locations) > 1)
        )
        stop_gas = Any([Gas(100), TechReady(UpgradeId.ZERGLINGMOVEMENTSPEED, 0.001)])
        end_game = Any([Supply(90), UnitExists(UnitTypeId.LAIR, 1)])

        return BuildOrder(
            [
                LingFloodBuild(),
                SequentialList(
                    [
                        Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
                        worker_scout,
                        SpreadCreep(),
                        InjectLarva(),
                        Step(None, DistributeWorkers(3, 3), skip=Any([stop_gas, end_game])),
                        Step(None, DistributeWorkers(0, 0), skip_until=stop_gas, skip=end_game),
                        Step(None, DistributeWorkers(None, None), skip_until=end_game),
                        DummyZergAttack(),
                    ]
                ),
            ]
        )
コード例 #23
0
    async def create_plan(self) -> BuildOrder:
        stop_gas = Any(
            [Gas(100),
             TechReady(UpgradeId.ZERGLINGMOVEMENTSPEED, 0.001)])
        end_game = Any([Supply(70), UnitExists(UnitTypeId.LAIR, 1)])

        return BuildOrder(
            ActUnitOnce(UnitTypeId.DRONE, UnitTypeId.LARVA, 24),
            LingFloodBuild(),
            SequentialList(
                Step(None, SpeedMining(), lambda ai: ai.client.game_step > 5),
                InjectLarva(),
                Step(None,
                     DistributeWorkers(3, 3),
                     skip=Any([stop_gas, end_game])),
                Step(None,
                     DistributeWorkers(0, 0),
                     skip_until=stop_gas,
                     skip=end_game),
                Step(None, DistributeWorkers(None, None), skip_until=end_game),
                WorkerAttack(),
                DummyZergAttack(),
            ),
        )
コード例 #24
0
    async def create_plan(self) -> BuildOrder:
        worker_scout = Step(
            None,
            WorkerScout(),
            skip=RequireCustom(lambda k: len(self.enemy_start_locations) == 1),
            skip_until=RequiredSupply(20))
        distribute = PlanDistributeWorkers()

        return BuildOrder([
            MutaliskBuild(),
            SequentialList([
                PlanCancelBuilding(),
                PlanZoneGather(),
                PlanZoneDefense(), worker_scout,
                SpreadCreep(),
                InjectLarva(), distribute,
                PlanZoneAttack(),
                PlanFinishEnemy()
            ]),
        ])
コード例 #25
0
ファイル: macro_zerg_v2.py プロジェクト: lladdy/chance-sc2
    def __init__(self):
        ultras = [
            Step(UnitExists(UnitTypeId.ULTRALISKCAVERN, 1), None),
            Step(
                Gas(500),
                ActUnit(UnitTypeId.ULTRALISK, UnitTypeId.LARVA,
                        priority=True)),
        ]

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

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

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

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

        super().__init__(self.overlords, ultras, units, build_step_expansions,
                         queens, pool_and_tech)
コード例 #26
0
ファイル: cyclones.py プロジェクト: Hammer2900/sharpy-paul
    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),
        )
コード例 #27
0
ファイル: cyclones.py プロジェクト: Hammer2900/sharpy-paul
 def depots(self) -> List[Step]:
     return [
         Step(RequiredUnitReady(UnitTypeId.SUPPLYDEPOT, 1), None),
         Step(RequiredSupplyLeft(6), GridBuilding(UnitTypeId.SUPPLYDEPOT,
                                                  2)),
         Step(RequiredUnitReady(UnitTypeId.SUPPLYDEPOT, 2), None),
         Step(RequiredSupplyLeft(14), GridBuilding(UnitTypeId.SUPPLYDEPOT,
                                                   4)),
         Step(RequiredUnitReady(UnitTypeId.SUPPLYDEPOT, 4), None),
         Step(RequiredSupplyLeft(20), GridBuilding(UnitTypeId.SUPPLYDEPOT,
                                                   6)),
         Step(RequiredUnitReady(UnitTypeId.SUPPLYDEPOT, 5), None),
         Step(RequiredSupplyLeft(20), GridBuilding(UnitTypeId.SUPPLYDEPOT,
                                                   7)),
         Step(RequiredUnitReady(UnitTypeId.SUPPLYDEPOT, 6), None),
         Step(RequiredSupplyLeft(20),
              GridBuilding(UnitTypeId.SUPPLYDEPOT, 10)),
         Step(RequiredUnitReady(UnitTypeId.SUPPLYDEPOT, 8), None),
         Step(RequiredSupplyLeft(20),
              GridBuilding(UnitTypeId.SUPPLYDEPOT, 12)),
         Step(RequiredUnitReady(UnitTypeId.SUPPLYDEPOT, 10), None),
         Step(RequiredSupplyLeft(20),
              GridBuilding(UnitTypeId.SUPPLYDEPOT, 14)),
         Step(RequiredUnitReady(UnitTypeId.SUPPLYDEPOT, 13), None),
         Step(RequiredSupplyLeft(20),
              GridBuilding(UnitTypeId.SUPPLYDEPOT, 16)),
         Step(RequiredUnitReady(UnitTypeId.SUPPLYDEPOT, 16),
              GridBuilding(UnitTypeId.SUPPLYDEPOT, 20)),
     ]
コード例 #28
0
    def __init__(self):

        gas_related = [
            Step(RequiredUnitExists(UnitTypeId.HATCHERY, 2),
                 ActTech(UpgradeId.ZERGLINGMOVEMENTSPEED),
                 skip_until=RequiredGas(100)),
            Step(None,
                 ActBuilding(UnitTypeId.ROACHWARREN, 1),
                 skip_until=RequiredGas(100)),
            StepBuildGas(2, RequiredTime(4 * 60), RequiredGas(100)),
            StepBuildGas(3, RequiredUnitExists(UnitTypeId.HYDRALISKDEN, 1),
                         RequiredGas(50)),
            StepBuildGas(4, RequiredSupply(60, SupplyType.Workers),
                         RequiredGas(25)),
            StepBuildGas(6, RequiredMinerals(749), RequiredGas(25)),
            StepBuildGas(8, RequiredMinerals(1000), RequiredGas(25)),
        ]
        buildings = [
            Step(RequiredUnitExists(UnitTypeId.DRONE, 14),
                 ActUnit(UnitTypeId.OVERLORD, UnitTypeId.LARVA, 2)),
            Step(RequiredSupply(16), ActExpand(2)),
            Step(RequiredSupply(18), ActBuilding(UnitTypeId.SPAWNINGPOOL, 1)),
            StepBuildGas(1, RequiredSupply(20)),
            Step(None,
                 ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 2),
                 skip_until=RequiredUnitExists(UnitTypeId.SPAWNINGPOOL, 1)),
            Step(
                RequiredUnitExists(UnitTypeId.DRONE,
                                   24,
                                   include_killed=True,
                                   include_pending=True), ActExpand(3)),
            Step(None, ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 3)),
            Step(None,
                 MorphLair(),
                 skip=RequiredUnitExists(UnitTypeId.HIVE, 1)),
            Step(RequiredUnitExists(UnitTypeId.DRONE, 30, include_killed=True),
                 ActExpand(4)),
            Step(RequiredUnitReady(UnitTypeId.LAIR, 1),
                 ActBuilding(UnitTypeId.HYDRALISKDEN, 1)),
            MorphOverseer(1),
            Step(None, ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 4)),
            Step(RequiredSupply(100), ActExpand(5)),
            Step(None,
                 ActUnit(UnitTypeId.QUEEN, UnitTypeId.HATCHERY, 10),
                 skip_until=RequiredMinerals(500)),  # anti air defense!
        ]

        units = [
            Step(RequiredUnitExists(UnitTypeId.HATCHERY, 1), None),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 23)),

            # Early zerglings
            Step(RequiredUnitExists(UnitTypeId.SPAWNINGPOOL, 1),
                 ActUnit(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 4), None),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 28)),
            Step(RequiredUnitExists(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=RequiredGas(25)),
            Step(None,
                 ActUnitOnce(UnitTypeId.ZERGLING, UnitTypeId.LARVA, 100),
                 skip_until=RequiredMinerals(750)),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 45), None),
            Step(None,
                 ActUnit(UnitTypeId.HYDRALISK, UnitTypeId.LARVA, 7),
                 skip=RequiredUnitReady(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=RequiredGas(25)),
            Step(None, ActUnit(UnitTypeId.DRONE, UnitTypeId.LARVA, 70), None),
            Step(None,
                 ActUnit(UnitTypeId.ROACH, UnitTypeId.LARVA),
                 skip=RequiredUnitReady(UnitTypeId.HYDRALISKDEN, 1)),

            # Endless hydralisk
            Step(None, ActUnit(UnitTypeId.HYDRALISK, UnitTypeId.LARVA), None)
        ]
        super().__init__([self.overlords, buildings, gas_related, units])
コード例 #29
0
ファイル: worker_rush.py プロジェクト: lladdy/sharpy-sc2
    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(70), 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])
コード例 #30
0
 def __init__(self):
     """Research basic unit upgrades with Overlord Speed and Burrow."""
     upgrades = BuildOrder([
         # ranged upgrades
         SequentialList(
             Step(
                 RequiredUnitReady(UnitTypeId.EVOLUTIONCHAMBER),
                 ActTech(UpgradeId.ZERGMISSILEWEAPONSLEVEL1,
                         UnitTypeId.EVOLUTIONCHAMBER),
             ),
             Step(
                 RequiredAll([
                     RequiredUnitReady(UnitTypeId.EVOLUTIONCHAMBER),
                     RequiredTechReady(UpgradeId.ZERGMISSILEWEAPONSLEVEL1),
                     UnitExists(UnitTypeId.LAIR),
                 ]),
                 ActTech(UpgradeId.ZERGMISSILEWEAPONSLEVEL2,
                         UnitTypeId.EVOLUTIONCHAMBER),
             ),
             Step(
                 RequiredAll([
                     RequiredUnitReady(UnitTypeId.EVOLUTIONCHAMBER),
                     RequiredTechReady(UpgradeId.ZERGMISSILEWEAPONSLEVEL2),
                     UnitExists(UnitTypeId.HIVE),
                 ]),
                 ActTech(UpgradeId.ZERGMISSILEWEAPONSLEVEL3,
                         UnitTypeId.EVOLUTIONCHAMBER),
             ),
         ),
         # ground carapace upgrades
         SequentialList(
             Step(
                 RequiredUnitReady(UnitTypeId.EVOLUTIONCHAMBER),
                 ActTech(UpgradeId.ZERGGROUNDARMORSLEVEL1,
                         UnitTypeId.EVOLUTIONCHAMBER),
             ),
             Step(
                 RequiredAll([
                     RequiredUnitReady(UnitTypeId.EVOLUTIONCHAMBER),
                     RequiredTechReady(UpgradeId.ZERGGROUNDARMORSLEVEL1),
                     UnitExists(UnitTypeId.LAIR),
                 ]),
                 ActTech(UpgradeId.ZERGGROUNDARMORSLEVEL2,
                         UnitTypeId.EVOLUTIONCHAMBER),
             ),
             Step(
                 RequiredAll([
                     RequiredUnitReady(UnitTypeId.EVOLUTIONCHAMBER),
                     RequiredTechReady(UpgradeId.ZERGGROUNDARMORSLEVEL2),
                     UnitExists(UnitTypeId.HIVE),
                 ]),
                 ActTech(UpgradeId.ZERGGROUNDARMORSLEVEL3,
                         UnitTypeId.EVOLUTIONCHAMBER),
             ),
         ),
         # melee upgrades
         SequentialList(
             Step(
                 RequiredUnitReady(UnitTypeId.EVOLUTIONCHAMBER),
                 ActTech(UpgradeId.ZERGMELEEWEAPONSLEVEL1,
                         UnitTypeId.EVOLUTIONCHAMBER),
             ),
             Step(
                 RequiredAll([
                     RequiredUnitReady(UnitTypeId.EVOLUTIONCHAMBER),
                     RequiredTechReady(UpgradeId.ZERGMELEEWEAPONSLEVEL1),
                     UnitExists(UnitTypeId.LAIR),
                 ]),
                 ActTech(UpgradeId.ZERGMELEEWEAPONSLEVEL2,
                         UnitTypeId.EVOLUTIONCHAMBER),
             ),
             Step(
                 RequiredAll([
                     RequiredUnitReady(UnitTypeId.EVOLUTIONCHAMBER),
                     RequiredTechReady(UpgradeId.ZERGMELEEWEAPONSLEVEL2),
                     UnitExists(UnitTypeId.HIVE),
                 ]),
                 ActTech(UpgradeId.ZERGMELEEWEAPONSLEVEL3,
                         UnitTypeId.EVOLUTIONCHAMBER),
             ),
         ),
         # overlord speed then burrow
         SequentialList(
             Step(UnitExists(UnitTypeId.QUEEN, 2),
                  ActTech(UpgradeId.OVERLORDSPEED, UnitTypeId.HATCHERY)),
             Step(UnitExists(UnitTypeId.LAIR),
                  ActTech(UpgradeId.BURROW, UnitTypeId.LAIR)),
         ),
         Step(
             RequiredAll([
                 UnitExists(UnitTypeId.INFESTATIONPIT),
                 RequiredUnitReady(UnitTypeId.LAIR),
                 RequiredTechReady(UpgradeId.ZERGMISSILEWEAPONSLEVEL2),
             ]),
             MorphHive(),
         ),
     ])
     super().__init__([upgrades])