diff --git a/main.py b/main.py index f08020a..97b45c3 100644 --- a/main.py +++ b/main.py @@ -176,7 +176,7 @@ class Angelo(Role): # Imposta qualcuno come protetto selected = game.findplayerbyusername(arg) if selected is not None: - if selected is not Player: + if selected is not Player: # TODO: cavolo ho scritto qui? # Togli la protezione a quello che stavi proteggendo prima if self.protecting is not None: self.protecting.protectedby = None @@ -230,6 +230,7 @@ class Derek(Role): super().__init__(player) # Per qualche motivo assurdo ho deciso di tenere l'oggetto Player qui self.deathwish = False + self.chaos = False def __repr__(self) -> str: r = "" @@ -248,6 +249,7 @@ class Derek(Role): if self.deathwish: game.message(bot, s.derek_deathwish_successful.format(name=self.player.tusername)) self.player.kill(bot, game) + self.chaos = True class Disastro(Role): @@ -312,8 +314,98 @@ class Mamma(Role): role=target.role.name)) break + +class Stagista(Role): + """Lo stagista sceglie una persona da cui andare in stage e prende il suo ruolo.""" + icon = s.intern_icon + team = 'Good' + name = s.intern_name + powerdesc = s.intern_power_description + + def __init__(self, player): + super().__init__(player) + self.master = None + + def __repr__(self) -> str: + return "" + + def power(self, bot, game, arg): + target = game.findplayerbyusername(arg) + if target is not None and target is not self.player and target.alive: + self.master = target + self.player.message(bot, s.intern_started_internship.format(master=self.master.tusername)) + else: + self.player.message(bot, s.error_no_username) + + def onendday(self, bot, game): + if self.master is not None: + if isinstance(self.master.role, Derek) and self.master.role.chaos: + game.message(bot, s.intern_chaos_summoned) + self.master.alive = True + game.changerole(bot, self.master, SignoreDelCaos) + game.changerole(bot, self.player, Servitore) + else: + game.message(bot, s.intern_changed_role.format(icon=self.master.role.__class__.icon, role=self.master.role.__class__.name)) + game.changerole(bot, self.player, self.master.role.__class__) + + +class SignoreDelCaos(Role): + """Il Signore del Caos è un Derek negli ultimi secondi prima della morte. + Può cambiare la vita delle altre persone... Anche se non può decidere in cosa.""" + icon = s.chaos_lord_icon + team = 'Chaos' + name = s.chaos_lord_name + powerdesc = s.chaos_lord_power_description + + def __init__(self, player): + super().__init__(player) + self.target = None + + def __repr__(self) -> str: + return "" + + def power(self, bot, game, arg): + selected = game.findplayerbyusername(arg) + if selected is not None and selected is not self.player and selected.alive: + self.target = selected + self.player.message(bot, s.chaos_lord_target_selected.format(target=self.target.tusername)) + else: + self.player.message(bot, s.error_no_username) + + def onendday(self, bot, game): + if self.target is not None: + if self.target.alive and self.player.alive: + if not isinstance(self.target.role, SignoreDelCaos) or not isinstance(self.target.role, Servitore): + randomrole = random.sample(rolepriority, 1)[0] + game.changerole(bot, self.target, randomrole) + game.message(bot, s.chaos_lord_randomized) + else: + game.message(bot, s.chaos_lord_failed) + + + +class Servitore(Role): + """Il servitore del Caos è il sottoposto al Signore del Caos. + Se non ci sono Signori del Caos in partita diventa Signore del Caos.""" + icon = s.derek_icon + team = 'Chaos' + name = s.chaos_servant_name + powerdesc = s.chaos_servant_power_description + + def __repr__(self) -> str: + return "" + + def onendday(self, bot, game): + for chaoslord in game.playersinrole["SignoreDelCaos"]: + if chaoslord.alive: + break + else: + game.changerole(bot, self.player, SignoreDelCaos) + game.message(bot, s.chaos_servant_inherited) + + # Ordine in cui vengono eseguiti i onendday dei vari ruoli. -rolepriority = [Mifioso, Investigatore, Disastro, Angelo, Derek, Terrorista, Mamma] +rolepriority = [Mifioso, Investigatore, Disastro, Angelo, Derek, Stagista, Terrorista, Mamma, SignoreDelCaos, Servitore] class Player: @@ -419,7 +511,7 @@ class Game: def findplayerbyusername(self, tusername) -> Player: """Trova il giocatore con un certo username.""" for player in self.players: - if player.tusername.lower() == tusername.lower(): + if player.tusername.lower() == tusername.strip("@").lower(): return player else: return None @@ -503,7 +595,7 @@ class Game: def endday(self, bot): """Finisci la giornata, uccidi il più votato del giorno ed esegui gli endday di tutti i giocatori.""" # SALVA LA PARTITA, così se crasha si riprende da qui - self.save() + self.save(bot) # Conta i voti ed elimina il più votato. topvotes = self.mostvotedplayer() if len(topvotes) > 0: @@ -561,32 +653,54 @@ class Game: def startpreset(self, bot): """Inizio della fase di preset""" self.phase = 'Preset' - # Crea la tastiera - kbmarkup = InlineKeyboardMarkup([ - [ - InlineKeyboardButton(s.preset_simple, callback_data="simple"), - InlineKeyboardButton(s.preset_classic, callback_data="classic"), - InlineKeyboardButton(s.preset_full, callback_data="full") - ], - [ - InlineKeyboardButton(s.preset_custom, callback_data="custom") - ] - ]) - # Manda la tastiera - bot.sendMessage(self.groupid, s.preset_choose, parse_mode=ParseMode.MARKDOWN, reply_markup=kbmarkup) + if __debug__: + # Preset di debug + self.roleconfig = { + "Mifioso": 0, + "Investigatore": 0, + "Angelo": 0, + "Terrorista": 0, + "Derek": 0, + "Disastro": 0, + "Mamma": 0, + "Stagista": 0, + "SignoreDelCaos": 0, + "Servitore": 0 + } + self.votingmifia = True + self.missingmifia = False + self.endconfig(bot) + self.message(bot, "Utilizzando il preset di debug (tutti royal, cambia ruolo con `/debugchangerole nomeutente ruolo`.") + else: + # Crea la tastiera + kbmarkup = InlineKeyboardMarkup([ + [ + InlineKeyboardButton(s.preset_simple, callback_data="simple"), + InlineKeyboardButton(s.preset_classic, callback_data="classic"), + InlineKeyboardButton(s.preset_full, callback_data="full") + ], + [ + InlineKeyboardButton(s.preset_custom, callback_data="custom") + ] + ]) + # Manda la tastiera + bot.sendMessage(self.groupid, s.preset_choose, parse_mode=ParseMode.MARKDOWN, reply_markup=kbmarkup) def loadpreset(self, bot, preset): """Fine della fase di preset: carica il preset selezionato o passa a config""" if preset == "simple": # Preset semplice self.roleconfig = { - "Mifioso": math.floor(len(self.players) / 8) + 1, # 1 Mifioso ogni 8 giocatori - "Investigatore": math.floor(len(self.players) / 12) + 1, # 1 Detective ogni 12 giocatori - "Angelo": 0, - "Terrorista": 0, - "Derek": 0, - "Disastro": 0, - "Mamma": 0 + "Mifioso": math.floor(len(self.players) / 8) + 1, # 1 Mifioso ogni 8 giocatori + "Investigatore": math.floor(len(self.players) / 12) + 1, # 1 Detective ogni 12 giocatori + "Angelo": 0, + "Terrorista": 0, + "Derek": 0, + "Disastro": 0, + "Mamma": 0, + "Stagista": 0, + "SignoreDelCaos": 0, + "Servitore": 0 } self.votingmifia = True self.missingmifia = False @@ -594,13 +708,16 @@ class Game: elif preset == "classic": # Preset classico self.roleconfig = { - "Mifioso": math.floor(len(self.players) / 8) + 1, # 1 Mifioso ogni 8 giocatori - "Investigatore": math.floor(len(self.players) / 12) + 1, # 1 Detective ogni 12 giocatori - "Angelo": math.floor(len(self.players) / 10) + 1, # 1 Angelo ogni 10 giocatori - "Terrorista": 1 if random.randrange(0, 99) > 70 else 0, # 30% di avere un terrorista - "Derek": 0, - "Disastro": 0, - "Mamma": 0 + "Mifioso": math.floor(len(self.players) / 8) + 1, # 1 Mifioso ogni 8 giocatori + "Investigatore": math.floor(len(self.players) / 12) + 1, # 1 Detective ogni 12 giocatori + "Angelo": math.floor(len(self.players) / 10) + 1, # 1 Angelo ogni 10 giocatori + "Terrorista": 1 if random.randrange(0, 99) > 70 else 0, # 30% di avere un terrorista + "Derek": 0, + "Disastro": 0, + "Mamma": 0, + "Stagista": 0, + "SignoreDelCaos": 0, + "Servitore": 0 } self.votingmifia = True self.missingmifia = False @@ -609,13 +726,16 @@ class Game: # Preset completo self.roleconfig = { # 1 di ogni ruolo - "Mifioso": math.floor(len(self.players) / 8) + 1, - "Investigatore": math.floor(len(self.players) / 9) + 1, - "Angelo": math.floor(len(self.players) / 10) + 1, - "Terrorista": math.floor(len(self.players) / 11) + 1, - "Derek": math.floor(len(self.players) / 12) + 1, - "Disastro": math.floor(len(self.players) / 13) + 1, - "Mamma": math.floor(len(self.players) / 14) + 1 + "Mifioso": math.floor(len(self.players) / 9) + 1, + "Investigatore": math.floor(len(self.players) / 10) + 1, + "Angelo": math.floor(len(self.players) / 11) + 1, + "Terrorista": math.floor(len(self.players) / 12) + 1, + "Derek": math.floor(len(self.players) / 13) + 1, + "Disastro": math.floor(len(self.players) / 14) + 1, + "Mamma": math.floor(len(self.players) / 15) + 1, + "Stagista": math.floor(len(self.players) / 16) + 1, + "SignoreDelCaos": 0, + "Servitore": 0 } self.votingmifia = True self.missingmifia = True @@ -651,7 +771,7 @@ class Game: def endgame(self): inprogress.remove(self) - def save(self): + def save(self, bot): # Crea il file. try: file = open(str(self.groupid) + ".p", 'x') @@ -664,8 +784,8 @@ class Game: pickle.dump(self, file) file.close() # Crea un file uguale ma con un timestamp - # Non sono troppo sicuro che il timestamp si faccia così - t = datetime.datetime(0,0,0,0,0).now() + # Non sono troppo sicuro che il timestamp si faccia così però funziona + t = datetime.datetime(2000,1,1,1,1).now() try: file = open("{group}-{yy}-{mm}-{dd}-{hh}-{mi}.p".format(group=str(self.groupid), yy=t.year, mm=t.month, dd=t.day, hh=t.hour, mi=t.minute), 'x') except FileExistsError: @@ -675,30 +795,36 @@ class Game: # Scrivi sul file. file = open("{group}-{yy}-{mm}-{dd}-{hh}-{mi}.p".format(group=str(self.groupid), yy=t.year, mm=t.month, dd=t.day, hh=t.hour, mi=t.minute), 'wb') pickle.dump(self, file) + self.message(bot, s.game_saved) file.close() def victoryconditions(self, bot): - # Condizioni di vittoria + """Controlla se qualcuno ha completato le condizioni di vittoria.""" good = 0 evil = 0 + alive = 0 for player in self.players: - if player.alive and player.role.team == 'Evil': - evil += 1 - elif player.alive and player.role.team == 'Good': - good += 1 + if player.alive: + if player.role.team == 'Evil': + evil += 1 + elif player.role.team == 'Good': + good += 1 + alive += 1 # Distruzione atomica! - if good == 0 and evil == 0: + if alive == 0: self.message(bot, s.end_game_wiped) for player in self.players: player.message(bot, s.end_game_wiped + s.tie) # Mifiosi più dei Royal - elif (not self.missingmifia and evil >= good) or good == 0: + elif (not self.missingmifia and evil >= alive) or good == 0: self.message(bot, s.end_mifia_outnumber + s.victory_mifia) for player in self.players: if player.role.team == 'Good': player.message(bot, s.end_mifia_outnumber + s.defeat) elif player.role.team == 'Evil': player.message(bot, s.end_mifia_outnumber + s.victory) + elif player.role.team == 'Chaos': + player.message(bot, s.end_game_chaos + s.victory) self.endgame() # Male distrutto elif evil == 0: @@ -708,8 +834,32 @@ class Game: player.message(bot, s.end_mifia_killed + s.victory) elif player.role.team == 'Evil': player.message(bot, s.end_mifia_killed + s.defeat) + elif player.role.team == 'Chaos': + player.message(bot, s.end_game_chaos + s.victory) self.endgame() + def changerole(self, bot, player, newrole): + """Cambia il ruolo di un giocatore, aggiornando tutti i valori""" + # Aggiorna le liste dei ruoli + if player.role.__class__ != Royal: + self.playersinrole[player.role.__class__.__name__].remove(player) + if newrole != Royal: + self.playersinrole[newrole.__name__].append(player) + # Cambia il ruolo al giocatore + player.role = newrole(player) + # Manda i messaggi del nuovo ruolo + player.message(bot, s.role_assigned.format(icon=player.role.icon, name=player.role.name)) + if player.role.powerdesc is not None: + player.message(bot, player.role.powerdesc.format(gamename=self.name)) + # Aggiorna lo stato dei mifiosi + if newrole == Mifioso: + text = s.mifia_team_intro + for player in self.playersinrole['Mifioso']: + text += s.mifia_team_player.format(icon=player.role.icon, name=player.tusername) + for player in self.playersinrole['Mifioso']: + player.message(bot, text) + + # Partite in corso inprogress = list() @@ -896,6 +1046,30 @@ def config(bot, update): game.configstep += 1 game.message(bot, s.config_list[game.configstep]) elif game.configstep == 7: + try: + game.roleconfig["Stagista"] = int(cmd[1]) + except ValueError: + game.message(bot, s.error_invalid_config) + else: + game.configstep += 1 + game.message(bot, s.config_list[game.configstep]) + elif game.configstep == 8: + try: + game.roleconfig["SignoreDelCaos"] = int(cmd[1]) + except ValueError: + game.message(bot, s.error_invalid_config) + else: + game.configstep += 1 + game.message(bot, s.config_list[game.configstep]) + elif game.configstep == 9: + try: + game.roleconfig["SignoreDelCaos"] = int(cmd[1]) + except ValueError: + game.message(bot, s.error_invalid_config) + else: + game.configstep += 1 + game.message(bot, s.config_list[game.configstep]) + elif game.configstep == 10: if cmd[1].lower() == 'testa': game.votingmifia = False game.configstep += 1 @@ -906,7 +1080,7 @@ def config(bot, update): game.message(bot, s.config_list[game.configstep]) else: game.message(bot, s.error_invalid_config) - elif game.configstep == 8: + elif game.configstep == 11: if cmd[1].lower() == 'perfetti': game.missingmifia = False game.endconfig(bot) @@ -916,7 +1090,7 @@ def config(bot, update): game.message(bot, s.config_list[game.configstep]) else: game.message(bot, s.error_invalid_config) - elif game.configstep == 9: + elif game.configstep == 12: try: miss = int(cmd[1]) except ValueError: @@ -948,21 +1122,15 @@ def vote(bot, update): elif game.day <= 1: game.message(bot, s.error_no_votes_on_first_day) return - # Trova il giocatore - player = game.findplayerbyid(update.message.from_user['id']) - if player is None: - game.message(bot, s.error_not_in_game) - return - if not player.alive: - game.message(bot, s.error_dead) - return - # Trova il bersaglio - target = game.findplayerbyusername(update.message.text.split(' ')[1]) - if target is None: - game.message(bot, s.error_username) - return - player.votingfor = target - game.message(bot, s.vote.format(voted=target.tusername)) + # Genera la tastiera + table = list() + for player in game.players: + row = list() + row.append(InlineKeyboardButton(s.vote_keyboard_line.format(name=player.tusername), callback_data=player.tusername)) + table.append(row) + keyboard = InlineKeyboardMarkup(table) + # Manda la tastiera + bot.sendMessage(game.groupid, s.vote_keyboard, parse_mode=ParseMode.MARKDOWN, reply_markup=keyboard) def endday(bot, update): @@ -1080,7 +1248,7 @@ def save(bot, update): """Salva una partita su file.""" game = findgamebyid(update.message.chat['id']) if game is not None: - game.save() + game.save(bot) else: bot.sendMessage(update.message.chat['id'], s.error_no_games_found, parse_mode=ParseMode.MARKDOWN) @@ -1090,21 +1258,28 @@ def debug(bot, update): if __debug__: game = findgamebyid(update.message.chat['id']) if game is not None: - if game.admin.tid == update.message.from_user['id']: - text = s.status_header.format(name=game.groupid, admin=game.admin.tid, phase=game.phase) - game.updatevotes() - # Aggiungi l'elenco dei giocatori - for player in game.players: - if not player.alive: - text += s.status_dead_player.format(name=player.tusername) - else: - text += s.status_alive_player.format(icon=player.role.icon, - name=player.tusername, - votes=str(player.votes)) - game.adminmessage(bot, text) - game.message(bot, s.check_private) - else: - game.message(bot, s.error_not_admin) + text = s.status_header.format(name=game.groupid, admin=game.admin.tid, phase=game.phase) + game.updatevotes() + # Aggiungi l'elenco dei giocatori + for player in game.players: + if not player.alive: + text += s.status_dead_player.format(name=player.tusername) + else: + text += s.status_alive_player.format(icon=player.role.icon, + name=player.tusername, + votes=str(player.votes)) + game.message(bot, text) + else: + bot.sendMessage(update.message.chat['id'], s.error_no_games_found, parse_mode=ParseMode.MARKDOWN) + + +def debugchangerole(bot, update): + """Cambia il ruolo a un giocatore.""" + if __debug__: + game = findgamebyid(update.message.chat['id']) + if game is not None: + cmd = update.message.text.split(' ', 2) + game.changerole(bot, game.findplayerbyusername(cmd[1]), globals()[cmd[2]]) else: bot.sendMessage(update.message.chat['id'], s.error_no_games_found, parse_mode=ParseMode.MARKDOWN) @@ -1115,15 +1290,26 @@ def debuggameslist(bot, update): bot.sendMessage(update.message.from_user['id'], repr(inprogress), parse_mode=ParseMode.MARKDOWN) -def selectpreset(bot, update): +def inlinekeyboard(bot, update): """Seleziona un preset dalla tastiera.""" game = findgamebyid(update.callback_query.message.chat['id']) - if game is not None and game.phase is 'Preset': - if update.callback_query.from_user['id'] == game.admin.tid: - game.loadpreset(bot, update.callback_query.data) + if game is not None: + if game.phase is 'Preset': + if update.callback_query.from_user['id'] == game.admin.tid: + game.loadpreset(bot, update.callback_query.data) + elif game.phase is 'Voting': + # Trova il giocatore + player = game.findplayerbyid(update.callback_query.from_user['id']) + if player is not None: + # Trova il bersaglio + target = game.findplayerbyusername(update.callback_query.data) + player.votingfor = target + game.message(bot, s.vote.format(voting=player.tusername, voted=target.tusername)) + bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text=s.vote_fp.format(voted=target.tusername)) def handleerror(bot, update, error): + print("Error: " + error) try: bot.sendMessage(update.message.chat['id'], error) except AttributeError: @@ -1149,7 +1335,8 @@ updater.dispatcher.add_handler(CommandHandler('fakerole', fakerole)) updater.dispatcher.add_handler(CommandHandler('save', save)) updater.dispatcher.add_handler(CommandHandler('load', load)) updater.dispatcher.add_handler(CommandHandler('delete', delete)) -updater.dispatcher.add_handler(CallbackQueryHandler(selectpreset)) +updater.dispatcher.add_handler(CommandHandler('debugchangerole', debugchangerole)) +updater.dispatcher.add_handler(CallbackQueryHandler(inlinekeyboard)) updater.dispatcher.add_error_handler(handleerror) updater.start_polling() print("Bot avviato!") diff --git a/strings.py b/strings.py index 40ce986..1a4373c 100644 --- a/strings.py +++ b/strings.py @@ -95,7 +95,7 @@ derek_power_description = "Puoi decidere di suicidarti alla fine di un round.\n" "Potresti farlo per confondere le idee ai Royal, o per ragequittare malissimo.\n" \ "Sta a te la scelta.\n" \ "Per lasciare questo mondo alla fine del giorno, scrivi in questa chat:\n" \ - "`/power {gamename}`\n" + "`/power {gamename} banana`\n" # Derek: morte attivata derek_deathwish_set = "*Morirai* alla fine di questo giorno." @@ -125,6 +125,65 @@ mom_power_description = "All'inizio della partita scoprirai il ruolo di un gioca # Mamma: scoperta di un ruolo mom_discovery = "@{target} è un *{icon} {role}*.\n" \ +# Stagista: icona +intern_icon = "\U0001F913" + +# Stagista: nome ruolo +intern_name = "Stagista" + +# Stagista: descrizione del potere +intern_power_description = "In qualsiasi momento della partita puoi scegliere un altro giocatore.\n" \ + "Il tuo ruolo diventerà uguale al suo.\n" \ + "Ricordati che, qualsiasi cosa succeda, è sempre colpa dello stagista, cioè tua!\n" \ + "Per andare in stage, scrivi in questa chat:\n" \ + "`/power {gamename} nomeutentedatoredilavoro`" + +# Stagista: inizia lo stage +intern_started_internship = "Stai andando in stage da @{master}." + +# Stagista: cambiato ruolo +intern_changed_role = "Lo stagista ha finito il tirocinio ed ha imparato i segreti del mestiere di *{icon} {role}*." + +#Stagista: EVOCATO IL SIGNORE DEL CAOS +intern_chaos_summoned = "Il *\U0001F479 Signore del Caos* e il suo fedele servitore sono scesi sulla Terra.\n" \ + "Preparatevi... a non capirci più niente." + +# Signore del Caos: icona +chaos_lord_icon = "\U0001F479" + +# Signore del Caos: nome ruolo +chaos_lord_name = "Signore del Caos" + +# Signore del Caos: descrizione del potere +chaos_lord_power_description = "Sei il *SIGNORE DEL CAOS*!\n" \ + "Le faccende dei mortali non ti interessano, quindi non fai parte nè del team Mifia nè del team Royal.\n" \ + "Di conseguenza, hai automaticamente _vinto la partita_!\n" \ + "Puoi usare i tuoi poteri del Caos per cambiare ruolo a un altro giocatore.\n" \ + "Il ruolo che riceverà sarà casuale.\n" \ + "Per usare i tuoi poteri, scrivi in questa chat:\n" \ + "`/power {gamename} nomeutentebersaglio`" + +# Signore del Caos: bersaglio selezionato +chaos_lord_target_selected = "BWHAHAHA. Hai deciso di usare i tuoi poteri del Caos su {target}." + +# Signore del Caos: bersaglio randomizzato +chaos_lord_randomized = "Il Caos è nell'aria...\n" \ + "*Qualcuno ha cambiato ruolo!*" + +# Signore del Caos: randomizzazione fallita +chaos_lord_failed = "Il Caos è nell'aria...\n" \ + "_Ma non succede nulla._" + +# Servitore del Caos: nome ruolo +chaos_servant_name = "Servitore del Caos" + +# Servitore del Caos: descrizione potere +chaos_servant_power_description = "Il Signore del Caos ti cederà i suoi poteri quando sarà morto.\n" \ + "Facendo parte della fazione del Caos, hai automaticamente _vinto la partita_!" + +# Servitore del Caos: ereditato i poteri +chaos_servant_inherited = "Il servitore ha ereditato i poteri del *\U0001F479 Signore del Caos*." + # Generale: ruolo assegnato role_assigned = "Ti è stato assegnato il ruolo di *{icon} {name}*." @@ -160,7 +219,10 @@ mifia_team_intro = "I mifiosi in questa partita sono:\n" mifia_team_player = "{icon} {name}\n" # Generale: votazione completata -vote = "Hai votato per uccidere @{voted}." +vote = "@{voting} ha votato per uccidere @{voted}." + +# Generale: votazione completata in prima persona +vote_fp = "Hai votato per uccidere @{voted}." # Generale: un admin ha ucciso un giocatore con /kill admin_killed = "{name} è morto _di infarto_.\n" \ @@ -170,6 +232,9 @@ admin_killed = "{name} è morto _di infarto_.\n" \ check_private = "Messaggio inviato in chat privata.\n" \ "Controlla @mifiabot." +# Generale: partita salvata +game_saved = "Partita salvata su file." + # Generale: partita caricata game_loaded = "Partita caricata da file." @@ -186,6 +251,15 @@ end_mifia_killed = "Tutti i Mifiosi sono stati eliminati.\n" # Vittoria: nessuno vivo lol end_game_wiped = "Nessuno è più vivo. La specie umana si è estinta.\n" +# Vittoria: Sei un Signore del Caos. +end_game_chaos = "Sei un Signore del Caos." + +# Generale: scegli per chi votare +vote_keyboard = "Chi vuoi votare...?" + +# Generale: riga della tastiera del voto +vote_keyboard_line = "@{name}" + # Vittoria: team Royal victory_royal = "**La Royal Games vince!**" @@ -284,24 +358,26 @@ error_missing_parameters = "\U000026A0 Mancano uno o più parametri.\n" \ "Controlla la sintassi del comando e riprova." # Lista dei possibili nomi di una partita -names_list = ["Cassata", - "Cannoli", - "Granita", - "Mandorle", - "Salame", - "Torrone", - "Sorbetto", - "Limone", - "Arancia"] +names_list = ["Caos", + "Vuoto", + "Nulla", + "Buconero", + "Fine", + "Supernova", + "Centrogalattico", + "Madre"] # Lista dei passi di configurazione da eseguire -config_list = ["Quanti *Mifiosi* devono essere nella partita?", - "Quanti *Investigatori* devono essere nella partita?", - "Quanti *Angeli* devono essere nella partita?", - "Quanti *Terroristi* devono essere nella partita?", - "Quanti *Derek* devono essere nella partita?", - "Quanti *Disastri* devono essere nella partita?", - "Quante *Mamme* devono essere nella partita?", +config_list = ["Quanti *Mifiosi* devono essere nella partita all'inizio?", + "Quanti *Investigatori* devono essere nella partita all'inizio?", + "Quanti *Angeli* devono essere nella partita all'inizio?", + "Quanti *Terroristi* devono essere nella partita all'inizio?", + "Quanti *Derek* devono essere nella partita all'inizio?", + "Quanti *Disastri* devono essere nella partita all'inizio?", + "Quante *Mamme* devono essere nella partita all'inizio?", + "Quanti *Stagisti* devono essere nella partita all'inizio?", + "Quante *Signori del Caos* devono essere nella partita all'inizio?", + "Quante *Servitori del Caos* devono essere nella partita all'inizio?", "I mifiosi possono uccidere una persona a `testa` al giorno " "o votano e decidono un'`unica` persona da uccidere per tutta la squadra?", "La mifia può `mancare` le uccisioni o i loro attacchi sono `perfetti`?", @@ -311,7 +387,7 @@ config_list = ["Quanti *Mifiosi* devono essere nella partita?", preset_choose = "*Seleziona un preset per la partita:*\n" \ "`Semplice`: solo royal, mifia e investigatori e niente meccaniche avanzate. _(minimo 3 giocatori)_\n" \ "`Classico`: royal, mifia, investigatori, angeli e la comparsa casuale di un terrorista! _(minimo 4 giocatori)_\n" \ - "`Completo`: tutti i ruoli e le meccaniche nuove! _(minimo 7 giocatori)_\n" \ + "`Completo`: tutti i ruoli e le meccaniche nuove! _(minimo 8 giocatori)_\n" \ "`Personalizzato`: scegli tu i ruoli e le meccaniche che vuoi in partita!" # Preset semplice