mirror of
https://github.com/RYGhub/royal-mifia.git
synced 2025-02-16 13:24:06 +00:00
yay cose
This commit is contained in:
parent
e53f34ad6d
commit
b69dc00842
2 changed files with 222 additions and 81 deletions
236
main.py
236
main.py
|
@ -339,23 +339,71 @@ class Stagista(Role):
|
|||
if self.master is not None:
|
||||
if self.master.alive:
|
||||
game.message(bot, s.intern_changed_role.format(icon=self.master.role.__class__.icon, role=self.master.role.__class__.name))
|
||||
game.changerole(self.player, self.master.role.__class__)
|
||||
self.player.message(bot, s.role_assigned.format(icon=self.player.role.icon, name=self.player.role.name))
|
||||
if self.player.role.powerdesc is not None:
|
||||
self.player.message(bot, self.player.role.powerdesc.format(gamename=self.name))
|
||||
if self.__class__ == Mifioso:
|
||||
text = s.mifia_team_intro
|
||||
for player in game.playersinrole['Mifioso']:
|
||||
text += s.mifia_team_player.format(icon=player.role.icon, name=player.tusername)
|
||||
for player in game.playersinrole['Mifioso']:
|
||||
player.message(bot, text)
|
||||
game.changerole(bot, self.player, self.master.role.__class__)
|
||||
else:
|
||||
game.message(bot, "easter egg. yey")
|
||||
#TODO: mettere l'easter egg
|
||||
game.message(bot, s.intern_chaos_summoned)
|
||||
self.master.alive = True
|
||||
game.changerole(bot, self.master, Servitore)
|
||||
game.changerole(bot, self.player, SignoreDelCaos)
|
||||
|
||||
|
||||
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 "<Role: Signore del Caos>"
|
||||
|
||||
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:
|
||||
if not isinstance(self.target.role, SignoreDelCaos) or not isinstance(self.target.role, Servitore):
|
||||
randomrole = random.sample(rolepriority, 1)
|
||||
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 "<Role: Servitore del Caos>"
|
||||
|
||||
def onendday(self, bot, game):
|
||||
for chaoslord in game.playersinrole["SignoreDelCaos"]:
|
||||
if chaoslord.alive:
|
||||
break
|
||||
else:
|
||||
game.changerole(bot, self, SignoreDelCaos)
|
||||
game.message(bot, s.chaos_servant_inherited)
|
||||
|
||||
|
||||
# Ordine in cui vengono eseguiti i onendday dei vari ruoli.
|
||||
rolepriority = [Mifioso, Investigatore, Disastro, Angelo, Derek, Stagista, Terrorista, Mamma]
|
||||
rolepriority = [Mifioso, Investigatore, Disastro, Angelo, Derek, Stagista, Terrorista, Mamma, SignoreDelCaos, Servitore]
|
||||
|
||||
|
||||
class Player:
|
||||
|
@ -382,7 +430,7 @@ class Player:
|
|||
if not self.dummy:
|
||||
try:
|
||||
bot.sendMessage(self.tid, text, parse_mode=ParseMode.MARKDOWN)
|
||||
except TelegramError as t:
|
||||
except TelegramError:
|
||||
pass
|
||||
|
||||
|
||||
|
@ -603,49 +651,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)
|
||||
|
||||
def loadpreset(self, bot, preset):
|
||||
"""Fine della fase di preset: carica il preset selezionato o passa a config"""
|
||||
if __debug__:
|
||||
# Debug dello stagista
|
||||
# Preset di debug
|
||||
self.roleconfig = {
|
||||
"Mifioso": 1,
|
||||
"Investigatore": 1,
|
||||
"Angelo": 1,
|
||||
"Terrorista": 1,
|
||||
"Derek": 1,
|
||||
"Disastro": 1,
|
||||
"Mamma": 1,
|
||||
"Stagista": 1
|
||||
"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, "Utilizzo il preset di debug (uno di ogni ruolo)")
|
||||
elif preset == "simple":
|
||||
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,
|
||||
"Stagista": 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
|
||||
|
@ -653,14 +706,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,
|
||||
"Stagista": 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
|
||||
|
@ -669,14 +724,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,
|
||||
"Stagista": 0
|
||||
"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
|
||||
|
@ -772,13 +829,26 @@ class Game:
|
|||
player.message(bot, s.end_mifia_killed + s.defeat)
|
||||
self.endgame()
|
||||
|
||||
def changerole(self, player, newrole):
|
||||
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 player.role.__class__ != Royal:
|
||||
self.playersinrole[newrole.__name__].append(player)
|
||||
# Cambia il ruolo al giocatore
|
||||
player.role = newrole(player)
|
||||
self.playersinrole[newrole.__name__].append(player)
|
||||
# TODO: controllare se basta fare così
|
||||
# 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
|
||||
|
@ -967,6 +1037,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
|
||||
|
@ -977,7 +1071,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)
|
||||
|
@ -987,7 +1081,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:
|
||||
|
@ -1182,7 +1276,7 @@ def debugchangerole(bot, update):
|
|||
game = findgamebyid(update.message.chat['id'])
|
||||
if game is not None:
|
||||
cmd = update.message.text.split(' ', 2)
|
||||
game.changerole(game.findplayerbyusername(cmd[1]), globals()[cmd[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)
|
||||
|
||||
|
|
67
strings.py
67
strings.py
|
@ -134,15 +134,56 @@ 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!"
|
||||
"Ricordati che, qualsiasi cosa succeda, è sempre colpa dello stagista, cioè tua!\n" \
|
||||
"Per andare in stage, scrivi in questa chat:\n" \
|
||||
"`/power {gamename} nomeutentedatoredilavoro`"
|
||||
|
||||
# TODO: si dice in stage?
|
||||
# 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}*."
|
||||
|
||||
|
@ -207,6 +248,9 @@ 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."
|
||||
|
||||
# Vittoria: team Royal
|
||||
victory_royal = "**La Royal Games vince!**"
|
||||
|
||||
|
@ -316,13 +360,16 @@ names_list = ["Cassata",
|
|||
"Arancia"]
|
||||
|
||||
# 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`?",
|
||||
|
@ -332,7 +379,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
|
||||
|
|
Loading…
Add table
Reference in a new issue