def start_turn(self): def callback(message): if not message.isdigit(): player.output("That is not a number") return ask() t = int(message) if 0 < t <= len(self.hand): card = self.hand.cards[t - 1] card.play(self) self.plugin.pubout("%s played %s." % (self.name, card)) self.play_amount += 1 self.halt_game = None return True player.output("That is not between 1 and %d" % len(self.p.hand)) return self def ask(): player.request_input( "Choose a number from 1 to %d" % len(self.hand), (callback, '|'.join( str(n + 1) for n in xrange(len(self.hand))))) log.logger.info("Starting %s's turn" % self.name) self.output("It is now your turn.") self.plugin.pubout("It is now %s's turn." % self.name) hand_str = pp_index(self.hand) if hand_str == "": hand_str = " no cards." else: hand_str = ": " + hand_str self.output('Your hand contains%s' % hand_str) rules = self.game.rule_pile if rules.no_hand_bonus(self) > 0: cards = self.draw(rules.no_hand_bonus(self)) self.output(self.name, "You drew: " + pp_index(cards)) if rules.is_first_play_random and len( self.hand) > 1 and self.game.rule_pile.draw_amount > 1: log.logger.info("FPR in effect") # First play random rules. t = self.game.turn - 1 if t < 0: player = self.game.players[-1] else: player = self.game.players[t] self.plugin.pubout( ("%s must choose the first card from " + "%s's hand.") % (player.name, self.name)) self.halt_game = "First Play Random" ask() d, p = self.can_draw_amount, self.can_play_amount self.draw_amount = self.play_amount = 0 self.output("You can draw %d card%s, and play %s card%s." % \ (d, "" if d == 1 else "s", "all" if p == 0 else p, \ "" if p == 1 else "s"))
def start_turn(self): def callback(message): if not message.isdigit(): player.output("That is not a number") return ask() t = int(message) if 0 < t <= len(self.hand): card = self.hand.cards[t-1] card.play(self) self.plugin.pubout("%s played %s." % (self.name, card)) self.play_amount += 1 self.halt_game = None return True player.output("That is not between 1 and %d" % len(self.p.hand)) return self def ask(): player.request_input("Choose a number from 1 to %d" % len(self.hand), (callback, '|'.join(str(n+1) for n in xrange(len(self.hand))))) log.logger.info("Starting %s's turn" % self.name) self.output("It is now your turn.") self.plugin.pubout("It is now %s's turn." % self.name) hand_str = pp_index(self.hand) if hand_str == "": hand_str = " no cards." else: hand_str = ": " + hand_str self.output('Your hand contains%s' % hand_str) rules = self.game.rule_pile if rules.no_hand_bonus(self) > 0: cards = self.draw(rules.no_hand_bonus(self)) self.output(self.name, "You drew: " + pp_index(cards)) if rules.is_first_play_random and len(self.hand) > 1 and self.game.rule_pile.draw_amount > 1: log.logger.info("FPR in effect") # First play random rules. t = self.game.turn-1 if t < 0: player = self.game.players[-1] else: player = self.game.players[t] self.plugin.pubout(("%s must choose the first card from " + "%s's hand.") % (player.name, self.name)) self.halt_game = "First Play Random" ask() d, p = self.can_draw_amount, self.can_play_amount self.draw_amount = self.play_amount = 0 self.output("You can draw %d card%s, and play %s card%s." % \ (d, "" if d == 1 else "s", "all" if p == 0 else p, \ "" if p == 1 else "s"))
def ask(self): def callback(player_picked): player, players, players_dict = self.player, self.players, self.players_dict if player_picked.isdigit(): player_picked = int(player_picked) num_players = len(players) if player_picked > num_players: player.output("There aren't that many players!") return self.ask() player_picked = players[player_picked-1] else: if player_picked.lower() not in players_dict: player.output("They're not playing.") return self.ask() player_picked = players_dict[player_picked.lower()] card_picked = choice(player_picked.hand) player_name = player_picked.name player.plugin.pubout("%s used %s's %s." % \ (player.name, player_name, card_picked)) player.hand.receive(card_picked) # So the card belongs to the player now. card_picked.play(player) player.halt_game = None return True if len(self.players) == 1: callback("1") else: player, players, players_dict = self.player, self.players, self.players_dict regex = "\d|" + "|".join(p.name for p in players) player.request_input("Whose player's card do you want to play? %s" % \ pp_index(players), (callback, regex))
def ask(self): def callback(player_picked): player, players, players_dict = self.player, self.players, self.players_dict if player_picked.isdigit(): player_picked = int(player_picked) num_players = len(players) if player_picked > num_players: player.output("There aren't that many players!") return self.ask() player_picked = players[player_picked - 1] else: if player_picked.lower() not in players_dict: player.output("They're not playing.") return self.ask() player_picked = players_dict[player_picked.lower()] card_picked = choice(player_picked.hand) player_name = player_picked.name player.plugin.pubout("%s used %s's %s." % \ (player.name, player_name, card_picked)) player.hand.receive( card_picked) # So the card belongs to the player now. card_picked.play(player) player.halt_game = None return True if len(self.players) == 1: callback("1") else: player, players, players_dict = self.player, self.players, self.players_dict regex = "\d|" + "|".join(p.name for p in players) player.request_input("Whose player's card do you want to play? %s" % \ pp_index(players), (callback, regex))
def ask(self): def callback(message): player = self.player rule = message if rule.isdigit(): rule = int(rule) num_rules = len(self.rules) if rule > num_rules: self.player.output("There aren't that many rules in play!") return self.ask() rule_picked = self.rules[rule - 1] else: rule_picked = player.game.find_card(rule) if rule_picked not in self.rules: player.output("You can't trash that rule.") return self.ask() player.plugin.pubout("%s trashed %s." % (player.name, rule_picked)) player.game.draw_discard.discard(rule_picked) player.halt_game = None return True if (len(self.rules) == 1): callback("1") # Just use that card return rules_str = pp_index(self.rules) self.player.request_input( "Which rule do you want to trash? %s" % rules_str, (callback, rule_regex))
def draw(self, channel, user, params): def printHelp(): self.privout( channel, """ Syntax: %B!draw [%Unumcards%U]%B Please say or message !help draw for more information. """) if len(params) == 0: num_cards = 0 elif len(params) == 1 and params[0].isdigit(): num_cards = int(params[0]) else: return printHelp() player = self.users[user.lower()] handlen = len(player.hand) if player.halt_game is not None: return self.privout(channel, ("You cannot draw a card while %s " + \ "is in effect.") % player.halt_game) cards = player.draw(num_cards) if cards is None: return self.turn_postfix(player) player.draw_amount += len(cards) # Make sure to reply to user # Don't show the cards in public! self.privout(user, "You drew: " + pp_index(cards, handlen + 1)) if player.draws_left > 0: self.privout(user, "You can draw %d more card%s." % \ (player.draws_left, "" if player.draws_left else "s")) self.turn_postfix(player) return cards
def ask(self): def callback(keeper): player, players, keeper_list = self.player, self.players, self.keeper_list if keeper.isdigit(): keeper = int(keeper) num_keepers = len(keeper_list) if keeper > num_keepers: player.output( "There aren't that many keepers on the table!") return self.ask() keeper_picked = self.keeper_list[keeper - 1] else: keeper_picked = player.game.deck.find_card(keeper.upper()) if keeper_picked not in self.keeper_list: player.output("You can't %s that keeper." % (self.word)) return self.ask() player_name = keeper_picked.owner.player.name if player_name != player.name: player.plugin.pubout("%s %s %s's %s." % \ (player.name, self.word_past, player_name, keeper_picked)) else: player.plugin.pubout("%s %s their %s." % \ (player.name, self.word_past, keeper_picked)) self.do(keeper_picked) player.halt_game = None return True player, players, keeper_list = self.player, self.players, self.keeper_list player.halt_game = self.title s = ["Which keeper or creeper do you want to %s?" % self.word] for p in players: keepers = p.keepers if len(keepers) == 0: continue s.append(pp_index(keepers, len(self.keeper_list) + 1)) player.request_input('\n'.join(s)(callback, keeper_regex))
def ask(self): def callback(card): player = self.player if card.isdigit(): card = int(card) num_cards = len(self.cards) if card == 0: player.output("You silly!") return self.ask() if card > num_cards: player.output("You didn't get that many cards!") return self.ask() card_picked = self.cards[card - 1] else: card_picked = player.game.find_card(card.upper()) if card_picked not in self.cards: player.output("You can't play that card.") return self.ask() player.hand.receive(card_picked) card_picked.play(player) self.cards.remove(card_picked) if len(self.cards) == self.draw_total - self.play_total: player.game.draw_discard.discard(self.cards) player.halt_game = None return True self.ask() player = self.player player.request_input("What do you want to play? " + \ pp_index(cards, len(self.player.hand)), \ (callback, card_regex))
def draw(self, channel, user, params): def printHelp(): self.privout(channel, """ Syntax: %B!draw [%Unumcards%U]%B Please say or message !help draw for more information. """) if len(params) == 0: num_cards = 0 elif len(params) == 1 and params[0].isdigit(): num_cards = int(params[0]) else: return printHelp() player = self.users[user.lower()] handlen = len(player.hand) if player.halt_game is not None: return self.privout(channel, ("You cannot draw a card while %s " + \ "is in effect.") % player.halt_game) cards = player.draw(num_cards) if cards is None: return self.turn_postfix(player) player.draw_amount += len(cards) # Make sure to reply to user # Don't show the cards in public! self.privout(user, "You drew: " + pp_index(cards, handlen+1)) if player.draws_left > 0: self.privout(user, "You can draw %d more card%s." % \ (player.draws_left, "" if player.draws_left else "s")) self.turn_postfix(player) return cards
def ask(self): def callback(message): player = self.player rule = message if rule.isdigit(): rule = int(rule) num_rules = len(self.rules) if rule > num_rules: self.player.output("There aren't that many rules in play!") return self.ask() rule_picked = self.rules[rule-1] else: rule_picked = player.game.find_card(rule) if rule_picked not in self.rules: player.output("You can't trash that rule.") return self.ask() player.plugin.pubout("%s trashed %s." % (player.name, rule_picked)) player.game.draw_discard.discard(rule_picked) player.halt_game = None return True if(len(self.rules) == 1): callback("1") # Just use that card return rules_str = pp_index(self.rules) self.player.request_input("Which rule do you want to trash? %s" % rules_str, (callback, rule_regex))
def ask(self): def callback(card): player = self.player if card.isdigit(): card = int(card) num_cards = len(self.cards) if card == 0: player.output("You silly!") return self.ask() if card > num_cards: player.output("You didn't get that many cards!") return self.ask() card_picked = self.cards[card-1] else: card_picked = player.game.find_card(card.upper()) if card_picked not in self.cards: player.output("You can't play that card.") return self.ask() player.hand.receive(card_picked) card_picked.play(player) self.cards.remove(card_picked) if len(self.cards) == self.draw_total - self.play_total: player.game.draw_discard.discard(self.cards) player.halt_game = None return True self.ask() player = self.player player.request_input("What do you want to play? " + \ pp_index(cards, len(self.player.hand)), \ (callback, card_regex))
def ask(self): def callback(message): params = message.replace("give","") \ .replace("to","") \ .replace("!", "").split() if len(params) != 2: return self.player.output( "Syntax: %B[give] %Ucard%U [to] %Uplayer%U%B") card_picked, receiver = params rec_lower = receiver.lower() # Check if the player exists. if rec_lower not in self.players_dict: self.player.output("There is no player with that name.") return self.ask() # Figure out what card to give if card_picked.isdigit(): card_picked = int(card_picked) handlen = len(self.cards) if card_picked > handlen: self.player.output("You only have %d card%s to give." % \ (handlen, plural(self.cards))) return self.ask() card_picked = self.cards[card_picked - 1] else: card_picked = self.player.game.find_card(card_picked.upper()) if card_picked not in self.cards: self.player.output("You didn't draw that card!") return self.ask() # Check if you've already given that person enough cards if self.cards_given[rec_lower] == self.draw_amount: self.player.output("You already gave them %d cards." % self.draw_amount) return self.ask() # Send the card and delete from set that you drew hand = self.players_dict[rec_lower].hand hand.receive(card_picked) self.cards_given[rec_lower] += 1 self.cards.remove(card_picked) # Notify player if receiver != self.player.name: self.players_dict[rec_lower].output("%s gave you %d: %s." \ % (self.player.name, len(hand), card_picked)) self.player.output("You gave %s to %s." % (card_picked, receiver)) else: self.player.output("You gave yourself %d: %s." % (len(hand), card_picked)) # Check if you're done yet if sum(self.cards_given.values()) == self.total_cards: self.player.halt_game = None return True return self.ask() self.player.halt_game = self.title self.player.request_input("Choose which cards to give to who: %s" % \ pp_index(self.cards), (callback, self.regex))
def ask(self): def callback(message): params = message.replace("give","") \ .replace("to","") \ .replace("!", "").split() if len(params) != 2: return self.player.output("Syntax: %B[give] %Ucard%U [to] %Uplayer%U%B") card_picked, receiver = params rec_lower = receiver.lower() # Check if the player exists. if rec_lower not in self.players_dict: self.player.output("There is no player with that name.") return self.ask() # Figure out what card to give if card_picked.isdigit(): card_picked = int(card_picked) handlen = len(self.cards) if card_picked > handlen: self.player.output("You only have %d card%s to give." % \ (handlen, plural(self.cards))) return self.ask() card_picked = self.cards[card_picked-1] else: card_picked = self.player.game.find_card(card_picked.upper()) if card_picked not in self.cards: self.player.output("You didn't draw that card!") return self.ask() # Check if you've already given that person enough cards if self.cards_given[rec_lower] == self.draw_amount: self.player.output("You already gave them %d cards." % self.draw_amount) return self.ask() # Send the card and delete from set that you drew hand = self.players_dict[rec_lower].hand hand.receive(card_picked) self.cards_given[rec_lower] += 1 self.cards.remove(card_picked) # Notify player if receiver != self.player.name: self.players_dict[rec_lower].output("%s gave you %d: %s." \ % (self.player.name, len(hand), card_picked)) self.player.output("You gave %s to %s." % (card_picked, receiver)) else: self.player.output("You gave yourself %d: %s." % (len(hand), card_picked)) # Check if you're done yet if sum(self.cards_given.values()) == self.total_cards: self.player.halt_game = None return True return self.ask() self.player.halt_game = self.title self.player.request_input("Choose which cards to give to who: %s" % \ pp_index(self.cards), (callback, self.regex))
def turn_postfix(self, player): def callback(): p_count = len(player.game.players) self.turn_count += 1 if self.turn_count >= p_count - 1 and player.halt_game is None and \ player.draws_left <= 0 and \ (player.plays_left <= 0 or len(player.hand) <= 0): player.finish_turn() self.turn_count = 0 if player.draws_left > 0 and player.plays_left <= 0: # Auto-draw for a player. handlen = len(player.hand) cards = player.draw(0) player.draw_amount += len(cards) player.output("You auto-drew: " + pp_index(cards, handlen)) # Check for winnage. if player.game.current_goal is not None: player.game.current_goal.check_for_win(player.game) for p in player.game.players: if p != player: p.enforce_limits(callback) if len(player.game.players) == 1: callback()
def ask(self): def callback(keeper): player, players, keeper_list = self.player, self.players, self.keeper_list if keeper.isdigit(): keeper = int(keeper) num_keepers = len(keeper_list) if keeper > num_keepers: player.output("There aren't that many keepers on the table!") return self.ask() keeper_picked = self.keeper_list[keeper-1] else: keeper_picked = player.game.deck.find_card(keeper.upper()) if keeper_picked not in self.keeper_list: player.output("You can't %s that keeper." % (self.word)) return self.ask() player_name = keeper_picked.owner.player.name if player_name != player.name: player.plugin.pubout("%s %s %s's %s." % \ (player.name, self.word_past, player_name, keeper_picked)) else: player.plugin.pubout("%s %s their %s." % \ (player.name, self.word_past, keeper_picked)) self.do(keeper_picked) player.halt_game = None return True player, players, keeper_list = self.player, self.players, self.keeper_list player.halt_game = self.title s = ["Which keeper or creeper do you want to %s?" % self.word] for p in players: keepers = p.keepers if len(keepers) == 0: continue s.append(pp_index(keepers, len(self.keeper_list)+1)) player.request_input('\n'.join(s) (callback, keeper_regex))
def post_deal_hook(self): for p in self.players: p.output("You got: %s" % pp_index(p.hand))
def do_action(self, player): handlen = len(player.hand) cards = player.draw(3 + player.game.rule_pile.inflation_amount, True) player.output("You drew: " + pp_index(cards, handlen))
def do_action(self, player): hand = player.hand cards_in_hand = len(hand) player.game.draw_discard.discard(hand) cards = player.draw(cards_in_hand, True) player.output("You drew: " + pp_index(cards))