def kill(self): assert self.player.is_alive self.player.is_alive = False yield gameengine.InfoMessage(_("This player died:"), players=[self.player]) yield gameengine.InfoMessage(_("The role was %(title)s.", title=_(self.player.role_card.TITLE)), fast=True) yield from self.after_death() return True
def run_at_night(self): player = yield gameengine.Select1Player( self.player, _("Whose role do you want to inquire?")) yield gameengine.InfoMessage(_("This player has the role '%(title)s'.", title=_(player.role_card.TITLE)), player=self.player, players=[player])
def get_player_generator(self, player): yield from self.gen_basics_for_player(player) # First time. if player and not self.game_start.is_set(): yield gameengine.InfoMessage( _("Waiting for game master to start the game."), player=player, temporary=True) yield from self._convert_player_pipe(player)
def reduce(self, other_cards): game = self.player.game poll = {card: card.to_kill for card in other_cards} votee = util.check_vote(game.players_alive, poll) if votee: yield gameengine.InfoMessage( _("You werewolves chose to kill this player:"), players=[votee], player=self.player) if votee and votee not in game.hitlist: game.hitlist.append(self.to_kill)
def _run(self): self.game_start.wait() gen = self.play_game() reply = None while True: try: req = gen.send(reply) if req.player is None: if isinstance(req, gameengine.EverybodySelect1Player): for player in self.players_alive: player.last_req = req player.pipe_parent.send(req) votes = {} for player in self.players_alive: votee = player.pipe_parent.recv() votes[player] = req.coerce(votee) reply = votes elif isinstance(req, gameengine.InfoMessage): self.last_req = req self.pipe_parent.send(req) self.pipe_parent.recv() reply = None else: assert False, "Unsupported request" else: req.player.last_req = req while True: req.player.pipe_parent.send(req) reply = req.player.pipe_parent.recv() if isinstance(req, gameengine.SelectNPlayers): if len(reply) == req.n: break else: error = gameengine.InfoMessage( _("Please select the correct amount of players." ), req.player) req.player.pipe_parent.send(error) req.player.pipe_parent.recv() else: break req.player.last_req = None reply = req.coerce(reply) except gameengine.GameEnd: break
def prepare(self): couple = (yield gameengine.SelectNPlayers(self.player, 2, _("Who should fall in love?"))) for first, second in itertools.permutations(couple): LovingCouple.make_in_love(first) def make_trigger(to_kill): def trigger(): if to_kill.is_alive: yield gameengine.InfoMessage( _("Thus with a kiss you die!")) yield from to_kill.kill() return trigger first.role_card.after_death_triggers.append(make_trigger(second)) yield gameengine.InfoMessage(_( "You fell in love with this player. Be sure to survive both!"), player=first, players=[second], vibrate=False)
def trigger(): if to_kill.is_alive: yield gameengine.InfoMessage( _("Thus with a kiss you die!")) yield from to_kill.kill()
def after_death(self): yield from super().after_death() yield gameengine.InfoMessage(_("And the hunter produced a shot ...")) yield from (yield gameengine.Select1Player( self.player, _("Who do you want to shoot?"))).kill()