mirror of
https://github.com/RYGhub/royal-mifia.git
synced 2024-11-22 05:44:19 +00:00
Aggiunta selezione preset
This commit is contained in:
parent
9a9e8bedcd
commit
d64c998b21
2 changed files with 104 additions and 7 deletions
96
main.py
96
main.py
|
@ -2,8 +2,9 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import pickle
|
||||
|
||||
from telegram.ext import Updater, CommandHandler
|
||||
from telegram import ParseMode, TelegramError
|
||||
import math
|
||||
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler
|
||||
from telegram import ParseMode, TelegramError, InlineKeyboardButton, InlineKeyboardMarkup
|
||||
import filemanager
|
||||
import random
|
||||
import strings as s
|
||||
|
@ -331,7 +332,7 @@ class Game:
|
|||
self.admin = None # ID telegram dell'utente che ha creato la partita con /newgame
|
||||
self.players = list() # Lista dei giocatori in partita
|
||||
self.tokill = list() # Giocatori che verranno uccisi all'endday
|
||||
self.phase = 'Join' # Fase di gioco: 'Join', 'Config', 'Voting'
|
||||
self.phase = 'Join' # Fase di gioco: 'Join', 'Preset', 'Config', 'Voting'
|
||||
self.day = 0 # Numero del giorno. 0 se la partita deve ancora iniziare
|
||||
|
||||
self.configstep = 0 # Passo attuale di configurazione
|
||||
|
@ -529,6 +530,76 @@ class Game:
|
|||
self.victoryconditions(bot)
|
||||
self.day += 1
|
||||
|
||||
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)
|
||||
|
||||
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,
|
||||
"Investigatore": math.floor(len(self.players) / 12) + 1,
|
||||
"Angelo": 0,
|
||||
"Terrorista": 0,
|
||||
"Derek": 0,
|
||||
"Disastro": 0
|
||||
}
|
||||
self.votingmifia = True
|
||||
self.missingmifia = False
|
||||
self.endconfig(bot)
|
||||
elif preset == "classic":
|
||||
# Preset classico
|
||||
self.roleconfig = {
|
||||
"Mifioso": math.floor(len(self.players) / 8) + 1,
|
||||
"Investigatore": math.floor(len(self.players) / 12) + 1,
|
||||
"Angelo": math.floor(len(self.players) / 10) + 1,
|
||||
"Terrorista": 1 if random.randrange(0, 99) > 70 else 0,
|
||||
"Derek": 0,
|
||||
"Disastro": 0
|
||||
}
|
||||
self.votingmifia = True
|
||||
self.missingmifia = False
|
||||
self.endconfig(bot)
|
||||
elif preset == "full":
|
||||
# Preset completo
|
||||
self.roleconfig = {
|
||||
"Mifioso": math.floor(len(self.players) / 8) + 1,
|
||||
"Investigatore": math.floor(len(self.players) / 12) + 1,
|
||||
"Angelo": math.floor(len(self.players) / 10) + 1,
|
||||
"Terrorista": 1 if random.randrange(0, 100) > 60 else 0,
|
||||
"Derek": 1,
|
||||
"Disastro": math.floor(len(self.players) / 12) + 1
|
||||
}
|
||||
self.votingmifia = True
|
||||
self.missingmifia = True
|
||||
self.misschance = 5
|
||||
self.endconfig(bot)
|
||||
elif preset == "custom":
|
||||
# Preset personalizzabile
|
||||
self.startconfig(bot)
|
||||
|
||||
def startconfig(self, bot):
|
||||
"""Inizio della fase di config"""
|
||||
self.phase = 'Config'
|
||||
self.configstep = 0
|
||||
self.message(bot, s.join_phase_ended)
|
||||
self.message(bot, s.config_list[0])
|
||||
|
||||
def endconfig(self, bot):
|
||||
"""Fine della fase di config, inizio assegnazione ruoli"""
|
||||
# Controlla che ci siano abbastanza giocatori per avviare la partita
|
||||
|
@ -709,10 +780,7 @@ def endjoin(bot, update):
|
|||
game = findgamebyid(update.message.chat['id'])
|
||||
if game is not None and game.phase == 'Join':
|
||||
if update.message.from_user['id'] == game.admin.tid:
|
||||
# Inizio fase di configurazione
|
||||
game.phase = 'Config'
|
||||
game.message(bot, s.join_phase_ended)
|
||||
game.message(bot, s.config_list[0])
|
||||
game.startpreset(bot)
|
||||
else:
|
||||
game.message(bot, s.error_not_admin)
|
||||
else:
|
||||
|
@ -988,6 +1056,18 @@ def debuggameslist(bot, update):
|
|||
bot.sendMessage(update.message.from_user['id'], repr(inprogress), parse_mode=ParseMode.MARKDOWN)
|
||||
|
||||
|
||||
def selectpreset(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)
|
||||
|
||||
|
||||
def handleerror(bot, update, error):
|
||||
bot.sendMessage(update.message.chat['id'], error)
|
||||
|
||||
|
||||
updater.dispatcher.add_handler(CommandHandler('ping', ping))
|
||||
updater.dispatcher.add_handler(CommandHandler('newgame', newgame))
|
||||
updater.dispatcher.add_handler(CommandHandler('join', join))
|
||||
|
@ -1006,6 +1086,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_error_handler(handleerror)
|
||||
updater.start_polling()
|
||||
print("Bot avviato!")
|
||||
if __name__ == "__main__":
|
||||
|
|
15
strings.py
15
strings.py
|
@ -288,3 +288,18 @@ config_list = ["Quanti *Mifiosi* devono essere nella partita?",
|
|||
"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`?",
|
||||
"Qual è la percentuale di attacchi falliti della mifia?"]
|
||||
|
||||
# Scegli il preset
|
||||
preset_choose = "Seleziona un preset per la partita: "
|
||||
|
||||
# Preset semplice
|
||||
preset_simple = "Semplice"
|
||||
|
||||
# Preset classico
|
||||
preset_classic = "Classico"
|
||||
|
||||
# Preset completo
|
||||
preset_full = "Completo"
|
||||
|
||||
# Personalizza
|
||||
preset_custom = "Personalizzato"
|
Loading…
Reference in a new issue