mirror of
https://github.com/RYGhub/royal-mifia.git
synced 2024-11-25 15:14:18 +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 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pickle
|
import pickle
|
||||||
|
|
||||||
from telegram.ext import Updater, CommandHandler
|
import math
|
||||||
from telegram import ParseMode, TelegramError
|
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler
|
||||||
|
from telegram import ParseMode, TelegramError, InlineKeyboardButton, InlineKeyboardMarkup
|
||||||
import filemanager
|
import filemanager
|
||||||
import random
|
import random
|
||||||
import strings as s
|
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.admin = None # ID telegram dell'utente che ha creato la partita con /newgame
|
||||||
self.players = list() # Lista dei giocatori in partita
|
self.players = list() # Lista dei giocatori in partita
|
||||||
self.tokill = list() # Giocatori che verranno uccisi all'endday
|
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.day = 0 # Numero del giorno. 0 se la partita deve ancora iniziare
|
||||||
|
|
||||||
self.configstep = 0 # Passo attuale di configurazione
|
self.configstep = 0 # Passo attuale di configurazione
|
||||||
|
@ -529,6 +530,76 @@ class Game:
|
||||||
self.victoryconditions(bot)
|
self.victoryconditions(bot)
|
||||||
self.day += 1
|
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):
|
def endconfig(self, bot):
|
||||||
"""Fine della fase di config, inizio assegnazione ruoli"""
|
"""Fine della fase di config, inizio assegnazione ruoli"""
|
||||||
# Controlla che ci siano abbastanza giocatori per avviare la partita
|
# Controlla che ci siano abbastanza giocatori per avviare la partita
|
||||||
|
@ -709,10 +780,7 @@ def endjoin(bot, update):
|
||||||
game = findgamebyid(update.message.chat['id'])
|
game = findgamebyid(update.message.chat['id'])
|
||||||
if game is not None and game.phase == 'Join':
|
if game is not None and game.phase == 'Join':
|
||||||
if update.message.from_user['id'] == game.admin.tid:
|
if update.message.from_user['id'] == game.admin.tid:
|
||||||
# Inizio fase di configurazione
|
game.startpreset(bot)
|
||||||
game.phase = 'Config'
|
|
||||||
game.message(bot, s.join_phase_ended)
|
|
||||||
game.message(bot, s.config_list[0])
|
|
||||||
else:
|
else:
|
||||||
game.message(bot, s.error_not_admin)
|
game.message(bot, s.error_not_admin)
|
||||||
else:
|
else:
|
||||||
|
@ -988,6 +1056,18 @@ def debuggameslist(bot, update):
|
||||||
bot.sendMessage(update.message.from_user['id'], repr(inprogress), parse_mode=ParseMode.MARKDOWN)
|
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('ping', ping))
|
||||||
updater.dispatcher.add_handler(CommandHandler('newgame', newgame))
|
updater.dispatcher.add_handler(CommandHandler('newgame', newgame))
|
||||||
updater.dispatcher.add_handler(CommandHandler('join', join))
|
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('save', save))
|
||||||
updater.dispatcher.add_handler(CommandHandler('load', load))
|
updater.dispatcher.add_handler(CommandHandler('load', load))
|
||||||
updater.dispatcher.add_handler(CommandHandler('delete', delete))
|
updater.dispatcher.add_handler(CommandHandler('delete', delete))
|
||||||
|
updater.dispatcher.add_handler(CallbackQueryHandler(selectpreset))
|
||||||
|
updater.dispatcher.add_error_handler(handleerror)
|
||||||
updater.start_polling()
|
updater.start_polling()
|
||||||
print("Bot avviato!")
|
print("Bot avviato!")
|
||||||
if __name__ == "__main__":
|
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?",
|
"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`?",
|
"La mifia può `mancare` le uccisioni o i loro attacchi sono `perfetti`?",
|
||||||
"Qual è la percentuale di attacchi falliti della mifia?"]
|
"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