Ejemplo n.º 1
0
        self.halfMapWidth = halfMapWidth
        self.mapHeight = mapHeight
        self.blockRatio = blockRatio
        self.duration = None

    def setupMap(self):
        super(StandardRandomLevel, self).setupMap()
        layoutHelper = RandomLayoutHelper(self.world, self.halfMapWidth,
                                          self.mapHeight, self.blockRatio,
                                          self.duration)
        layoutHelper.apply()
        self.duration = layoutHelper.duration

    def getDuration(self):
        return self.duration


class StandardLoadedLevel(StandardLevel):
    def __init__(self, mapLayout):
        super(StandardLoadedLevel, self).__init__()

        self.mapLayout = mapLayout

    def setupMap(self):
        super(StandardLoadedLevel, self).setupMap()
        self.world.setLayout(self.mapLayout)


if __name__ == '__main__':
    playLevel(StandardRandomLevel(), aiCount=1)
Ejemplo n.º 2
0
class DemoLevel(Level):
    '''
    Demonstrates a resync at game start, which shouldn't occur.
    '''

    world = None

    def setupMap(self):

        zones = ZoneLayout()
        self.world.setLayout(zones.createMapLayout(self.world.layoutDatabase))

    @defer.inlineCallbacks
    def start(self):
        from twisted.internet import reactor

        # NOTE: without this yield line it syncs just fine.
        d = defer.Deferred()
        reactor.callLater(0, d.callback, None)
        # yield d

        humans = yield self.waitForHumans(1)
        self.world.magicallyMovePlayer(humans[0],
                                       self.world.getZone(0).defn.pos,
                                       alive=True)


if __name__ == '__main__':
    playLevel(DemoLevel())
Ejemplo n.º 3
0
        pos = zones.connectZone(zones.firstLocation, ZoneStep.NORTHEAST)
        pos = zones.connectZone(pos, ZoneStep.SOUTHEAST)
        pos = zones.connectZone(pos, ZoneStep.SOUTH)
        pos = zones.connectZone(pos, ZoneStep.SOUTHWEST)
        pos2 = zones.connectZone(pos, ZoneStep.NORTHWEST)
        zones.connectZone(pos2, ZoneStep.NORTH)

        pos = zones.connectZone(pos, ZoneStep.SOUTH)
        pos = zones.connectZone(pos, ZoneStep.SOUTHEAST)
        pos = zones.connectZone(pos, ZoneStep.NORTHEAST)
        pos = zones.connectZone(pos, ZoneStep.NORTH)
        zones.connectZone(pos, ZoneStep.NORTHWEST)

        pos = zones.connectZone(pos, ZoneStep.NORTHEAST)
        pos = zones.connectZone(pos, ZoneStep.NORTH)
        pos = zones.connectZone(pos, ZoneStep.NORTHWEST)
        zones.connectZone(pos, ZoneStep.SOUTHWEST)

        pos = zones.connectZone(pos, ZoneStep.NORTH)
        pos = zones.connectZone(pos, ZoneStep.NORTHWEST)
        pos = zones.connectZone(pos, ZoneStep.SOUTHWEST)
        zones.connectZone(pos, ZoneStep.SOUTH)

        layout = zones.createMapLayout(self.world.layoutDatabase)
        self.world.setLayout(layout)


if __name__ == '__main__':
    playLevel(DemoLevel(), aiCount=9)
Ejemplo n.º 4
0
        self.playSound('custom-capture-orb.ogg')
        self.sendPrivateChat(
            self.helperBot.player, human, 'Now capture that orb!')
        yield self.world.sleep(2)
        self.helperBot.moveToOrb(self.world.getZone(2))
        yield self.helperBot.onOrderFinished.wait()

        self.playSound('custom-i-win.ogg')
        self.sendPrivateChat(self.helperBot.player, human, 'Game over. I win.')

        yield self.world.sleep(2)

        self.playSound('game-over-whistle.ogg')
        self.world.abilities.set(zoneCaps=False)
        self.world.uiOptions.set(showGameOver=True, winningTeam=self.blueTeam)

    def findReasonPlayerCannotJoin(self, game, teamId, user, bot):
        # Only allow one human player to join
        if any(not p.bot for p in self.world.players):
            return GAME_FULL_REASON
        if bot:
            return UNAUTHORISED_REASON
        return None

    def getTeamToJoin(self, preferredTeam, user, bot):
        return self.blueTeam


if __name__ == '__main__':
    playLevel(TriggerDemoLevel())
Ejemplo n.º 5
0
        location = zones.firstLocation
        addColumn(location, 5, 0)
        location += ZoneStep.SOUTHEAST
        addColumn(location, 4, 5)
        location += ZoneStep.NORTHEAST
        addColumn(location, 5, 4)
        location += ZoneStep.SOUTHEAST
        addColumn(location, 4, 5)
        location += ZoneStep.SOUTHEAST
        addColumn(location, 3, 4)
        location += ZoneStep.SOUTHEAST
        addColumn(location, 2, 3)
        location += ZoneStep.SOUTHEAST
        addColumn(location, 1, 2)

        zones.makeEverywhereReachable()
        layout = zones.createMapLayout(self.world.layoutDatabase)
        self.world.setLayout(layout)

        leftmost = min(self.world.zones, key=lambda z: z.defn.pos[0])
        rightmost = max(self.world.zones, key=lambda z: z.defn.pos[0])
        for zone in self.world.zones:
            if zone not in (leftmost, rightmost):
                if zone.owner:
                    zone.owner.zoneLost()
                zone.owner = None


if __name__ == '__main__':
    playLevel(DeploymentLevel(), aiCount=9)
Ejemplo n.º 6
0
    # Install the asyncio reactor as early as possible
    import asyncio
    from twisted.internet import asyncioreactor
    asyncioreactor.install(asyncio.get_event_loop())

from trosnoth.const import BOT_GOAL_CAPTURE_MAP
from trosnoth.levels.base import playLevel
from trosnoth.levels.standard import StandardRandomLevel


class PositioningDrillLevel(StandardRandomLevel):
    async def mainGamePhase(self):
        self.world.teams[0].abilities.set(aggression=False)
        self.world.teams[1].abilities.set(aggression=False)
        try:
            await super(PositioningDrillLevel, self).mainGamePhase()
        finally:
            self.world.teams[0].abilities.set(aggression=True)
            self.world.teams[1].abilities.set(aggression=True)

    def setMainGameUserInfo(self):
        self.setUserInfo('Positioning Drill', (
            '* Shooting is deactivated',
            '* Pay attention to which zone you are standing in',
        ), BOT_GOAL_CAPTURE_MAP)


if __name__ == '__main__':
    playLevel(PositioningDrillLevel(), aiCount=1)
Ejemplo n.º 7
0
            if score == maxScore and p.team == self.blueTeam
        ]

        self.playSound('game-over-whistle.ogg')
        for winner in winners:
            self.notifyAll('{} wins'.format(winner.nick))
            self.world.sendServerCommand(
                AwardPlayerCoinMsg(winner.id, BONUS_COINS_FOR_WINNER))

        await self.world.sleep_future(3)


class RespawnOnJoinTrigger(Trigger):
    def doActivate(self):
        self.world.onPlayerAdded.addListener(self.gotPlayerAdded)
        for player in self.world.players:
            self.gotPlayerAdded(player)

    def doDeactivate(self):
        self.world.onPlayerAdded.removeListener(self.gotPlayerAdded)

    def gotPlayerAdded(self, player, *args, **kwargs):
        if player.team == self.level.blueTeam:
            mapLayout = self.world.map.layout
            self.world.magicallyMovePlayer(
                player, (mapLayout.centreX, mapLayout.centreY), alive=True)


if __name__ == '__main__':
    playLevel(CatPigeonLevel(duration=180), aiCount=1)
Ejemplo n.º 8
0
        while not region.check(self.human):
            details = yield region.onEnter.wait()
        self.world.removeRegion(region)

    @defer.inlineCallbacks
    def startMarching(self, bot, start, end):
        while not bot.player.dead:
            bot.moveToPoint(end)
            yield bot.onOrderFinished.wait()
            yield self.world.sleep(random.random())
            if bot.player.dead:
                break
            bot.moveToPoint(start)
            yield bot.onOrderFinished.wait()
            yield self.world.sleep(random.random())

    def findReasonPlayerCannotJoin(self, game, teamId, user, bot):
        # Only allow one human player to join
        if any(not p.bot for p in self.world.players):
            return GAME_FULL_REASON
        if bot:
            return UNAUTHORISED_REASON
        return None

    def getTeamToJoin(self, preferredTeam, user, bot):
        return self.blueTeam


if __name__ == '__main__':
    playLevel(TutorialLevel())
Ejemplo n.º 9
0
            else:
                self.world.clock.stop()
            self.world.clock.propagateToClients()

            await self.world.clock.onZero.wait_future()

            # Game over!
            self.world.finaliseStats()
            scoreTrigger.deactivate()
            botTrigger.deactivate()
            playerScores = self.world.scoreboard.playerScores
            maxScore = max(playerScores.values())
            winners = [
                p for p, score in list(playerScores.items())
                if score == maxScore and p.team == self.redTeam
            ]

            self.playSound('game-over-whistle.ogg')
            for winner in winners:
                self.notifyAll('{} wins'.format(winner.nick))
                self.world.sendServerCommand(
                    AwardPlayerCoinMsg(winner.id, BONUS_COINS_FOR_WINNER))

            await self.world.sleep_future(3)
        finally:
            self.redTeam.abilities.set(aggression=True)


if __name__ == '__main__':
    playLevel(HuntedLevel(duration=180), aiCount=1)
Ejemplo n.º 10
0
    sys.path.insert(0, os.path.join(
        os.path.abspath(os.path.dirname(__file__)), '..', '..'))

    # Install the asyncio reactor as early as possible
    import asyncio
    from twisted.internet import asyncioreactor
    asyncioreactor.install(asyncio.get_event_loop())

from trosnoth.const import BOT_GOAL_CAPTURE_MAP
from trosnoth.levels.base import playLevel
from trosnoth.levels.standard import StandardRandomLevel


class DefenceDrillLevel(StandardRandomLevel):
    async def mainGamePhase(self):
        self.world.teams[1].abilities.set(zoneCaps=False)
        try:
            await super(DefenceDrillLevel, self).mainGamePhase()
        finally:
            self.world.teams[1].abilities.set(zoneCaps=True)

    def setMainGameUserInfo(self):
        self.setUserInfo('Defence Drill', (
            '* Red players cannot capture zones',
            '* Try not to lose your zones',
        ), BOT_GOAL_CAPTURE_MAP)


if __name__ == '__main__':
    playLevel(DefenceDrillLevel(), aiCount=1)
Ejemplo n.º 11
0
import logging

from trosnoth.levels.base import playLevel
from trosnoth.levels.standard import StandardRandomLevel
from trosnoth.triggers.coins import AwardStartingCoinsTrigger

log = logging.getLogger(__name__)


class TestingLevel(StandardRandomLevel):
    def initPregameCountdown(self, delay=10):
        AwardStartingCoinsTrigger(self, coins=10000).activate()
        self.world.clock.startCountDown(0.1, flashBelow=0)
        self.world.clock.propagateToClients()


if __name__ == '__main__':
    playLevel(TestingLevel(halfMapWidth=5, mapHeight=4), aiCount=0)
Ejemplo n.º 12
0
    '''

    def __init__(
            self, halfMapWidth=None, mapHeight=None, blockRatio=None,
            duration=None):
        super(RandomTrosballLevel, self).__init__(duration)

        self.halfMapWidth = halfMapWidth
        self.mapHeight = mapHeight
        self.blockRatio = blockRatio

    def makeNewMap(self, first):
        RandomLayoutHelper(
            self.world, self.halfMapWidth, self.mapHeight,
            self.blockRatio).apply()


class LoadedTrosballLevel(TrosballMatchBase):
    def __init__(self, mapLayout, duration=None):
        super(LoadedTrosballLevel, self).__init__(duration)

        self.mapLayout = mapLayout

    def makeNewMap(self, first):
        if first:
            self.world.setLayout(self.mapLayout)


if __name__ == '__main__':
    playLevel(RandomTrosballLevel(duration=150), aiCount=7)
Ejemplo n.º 13
0
            '* Kill as many other players as you can',
            '* You gain 1 point per kill',
            '* You lose ½ point if you are killed',
        ), BOT_GOAL_KILL_THINGS)
        self.world.abilities.set(zoneCaps=False, balanceTeams=False)
        self.world.uiOptions.set(teamIdsHumansCanJoin=[NEUTRAL_TEAM_ID])
        if self.duration:
            self.world.clock.startCountDown(self.duration)
        else:
            self.world.clock.stop()
        self.world.clock.propagateToClients()

        await self.world.clock.onZero.wait_future()

        # Game over!
        playerScores = self.world.scoreboard.playerScores
        maxScore = max(playerScores.values())
        winners = [
            p for p, score in list(playerScores.items()) if score == maxScore
        ]

        self.playSound('game-over-whistle.ogg')
        for winner in winners:
            self.notifyAll('{} wins'.format(winner.nick))
            self.world.sendServerCommand(
                AwardPlayerCoinMsg(winner.id, BONUS_COINS_FOR_WINNER))


if __name__ == '__main__':
    playLevel(FreeForAllLevel(duration=180), aiCount=0)
Ejemplo n.º 14
0
                    break

                self.playSound('short-whistle.ogg')
                self.world.scoreboard.playerScored(args['player'], 1)
            finally:
                self.world.removeRegion(region)

    def selectZone(self):
        if self.targetZone:
            self.world.sendServerCommand(
                ZoneStateMsg(self.targetZone.id, NEUTRAL_TEAM_ID, True))

        allZones = [z for z in self.world.zones if z.owner is None]
        options = [z for z in allZones if not z.players]
        if options:
            zone = random.choice(options)
        else:
            zone = min(
                allZones,
                key=lambda z: min(
                    distance(z.defn.pos, p.pos) for p in z.players))

        self.world.sendServerCommand(
            ZoneStateMsg(zone.id, self.targetTeamId, True))
        self.targetZone = zone
        return zone


if __name__ == '__main__':
    playLevel(OrbChaseLevel(duration=180))
Ejemplo n.º 15
0
        ), BOT_GOAL_KILL_THINGS)
        self.world.abilities.set(zoneCaps=False, balanceTeams=False)
        self.world.uiOptions.set(
            teamIdsHumansCanJoin=[NEUTRAL_TEAM_ID],
            highlightElephant=True,
        )
        if self.duration:
            self.world.clock.startCountDown(self.duration)
        else:
            self.world.clock.stop()
        self.world.clock.propagateToClients()

        await self.world.clock.onZero.wait_future()

        # Game over!
        playerScores = self.world.scoreboard.playerScores
        maxScore = max(playerScores.values())
        winners = [
            p for p, score in playerScores.items()
            if score == maxScore]

        self.playSound('game-over-whistle.ogg')
        for winner in winners:
            self.notifyAll('{} wins'.format(winner.nick))
            self.world.sendServerCommand(
                AwardPlayerCoinMsg(winner.id, BONUS_COINS_FOR_WINNER))


if __name__ == '__main__':
    playLevel(ElephantKingLevel(duration=120), aiCount=1)