1
Fork 0
mirror of https://github.com/RYGhub/royal-mifia.git synced 2024-11-25 15:14:18 +00:00
This commit is contained in:
Steffo 2017-07-08 14:31:37 +02:00
parent 227040d126
commit dc12d70f4d
7 changed files with 62 additions and 30 deletions

47
main.py
View file

@ -45,11 +45,7 @@ class Player:
def message(self, bot, text): def message(self, bot, text):
"""Manda un messaggio privato al giocatore.""" """Manda un messaggio privato al giocatore."""
if not self.dummy: if not self.dummy:
try: bot.sendMessage(self.tid, text, parse_mode=ParseMode.MARKDOWN)
bot.sendMessage(self.tid, text, parse_mode=ParseMode.MARKDOWN)
except Unauthorized:
print("Unauthorized to message {}".format(self))
def kill(self, bot, game): def kill(self, bot, game):
"""Uccidi il giocatore.""" """Uccidi il giocatore."""
@ -132,7 +128,7 @@ class Game:
return None return None
def assignroles(self, bot): def assignroles(self, bot):
"""Assegna ruoli casuali a tutti i giocatori.""" """Assegna i ruoli specificati ib playersinrole a tutti i giocatori."""
random.seed() random.seed()
playersleft = self.players.copy() playersleft = self.players.copy()
# Assegna i ruoli secondo i numeri all'interno di playersinrole # Assegna i ruoli secondo i numeri all'interno di playersinrole
@ -283,6 +279,8 @@ class Game:
InlineKeyboardButton(s.preset_advanced, callback_data="advanced") InlineKeyboardButton(s.preset_advanced, callback_data="advanced")
], ],
[ [
InlineKeyboardButton(s.preset_oneofall, callback_data="oneofall"),
InlineKeyboardButton(s.preset_custom, callback_data="custom") InlineKeyboardButton(s.preset_custom, callback_data="custom")
] ]
]) ])
@ -381,8 +379,35 @@ class Game:
self.votingmifia = False self.votingmifia = False
self.missingmifia = False self.missingmifia = False
self.message(bot, s.preset_advanced_selected) self.message(bot, s.preset_advanced_selected)
if __debug__: self.message(bot, "Punteggio di bilanciamento: {}".format(balance))
self.message(bot, "Punteggio di bilanciamento: {}".format(balance)) self.endconfig(bot)
elif preset == "oneofall":
self.roleconfig = {
"Mifioso": 1,
"Investigatore": 1,
"Corrotto": 1,
"Angelo": 1,
"Terrorista": 1,
"Derek": 1,
"Disastro": 1,
"Mamma": 1,
"Stagista": 1,
"SignoreDelCaos": 0,
"Servitore": 0
}
unassignedplayers = len(self.players) - 9
availableroles = list()
while unassignedplayers > 0:
if len(availableroles) == 0:
availableroles = rolepriority.copy()
availableroles.remove(SignoreDelCaos)
availableroles.remove(Servitore)
random.shuffle(availableroles)
self.roleconfig[availableroles.pop().__name__] += 1
unassignedplayers -= 1
self.votingmifia = False
self.missingmifia = False
self.message(bot, s.preset_oneofall_selected)
self.endconfig(bot) self.endconfig(bot)
elif preset == "custom": elif preset == "custom":
# Preset personalizzabile # Preset personalizzabile
@ -530,7 +555,7 @@ class Game:
for role in self.playersinrole: for role in self.playersinrole:
if len(role) > 0: if len(role) > 0:
availableroles.append(role) availableroles.append(role)
return locals()[random.sample(availableroles, 1)[0]] return globals()[random.sample(availableroles, 1)[0]]
@ -970,7 +995,7 @@ def inlinekeyboard(bot, update):
bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text=s.error_not_admin, show_alert=True) bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text=s.error_not_admin, show_alert=True)
return return
game.loadpreset(bot, update.callback_query.data) game.loadpreset(bot, update.callback_query.data)
bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text=s.preset_selected.format(selected=update.callback_query.data), show_alert=True) bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text=s.preset_selected.format(selected=update.callback_query.data))
elif game.phase is 'Voting': elif game.phase is 'Voting':
# Trova il giocatore # Trova il giocatore
player = game.findplayerbyid(update.callback_query.from_user.id) player = game.findplayerbyid(update.callback_query.from_user.id)
@ -984,7 +1009,7 @@ def inlinekeyboard(bot, update):
target = game.findplayerbyusername(update.callback_query.data) target = game.findplayerbyusername(update.callback_query.data)
player.votingfor = target player.votingfor = target
game.message(bot, s.vote.format(voting=player.tusername, voted=target.tusername)) 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), show_alert=True) bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text=s.vote_fp.format(voted=target.tusername))
updater.dispatcher.add_handler(CommandHandler('ping', ping)) updater.dispatcher.add_handler(CommandHandler('ping', ping))

View file

@ -7,7 +7,7 @@ class Corrotto(Role):
team = 'Evil' team = 'Evil'
name = s.corrupt_name name = s.corrupt_name
powerdesc = s.corrupt_power_description powerdesc = s.corrupt_power_description
value = -90 value = -75
refillpoweruses = 1 refillpoweruses = 1
def __init__(self, player): def __init__(self, player):
@ -37,4 +37,4 @@ class Corrotto(Role):
def onendday(self, bot, game): def onendday(self, bot, game):
# Ripristina il potere # Ripristina il potere
self.poweruses = self.refillpoweruses self.poweruses = self.refillpoweruses

View file

@ -8,7 +8,7 @@ class Disastro(Role):
team = 'Good' team = 'Good'
name = s.detective_name name = s.detective_name
powerdesc = s.detective_power_description powerdesc = s.detective_power_description
value = 0 value = -25
refillpoweruses = 1 refillpoweruses = 1
def __init__(self, player): def __init__(self, player):
@ -25,6 +25,9 @@ class Disastro(Role):
if target is not None: if target is not None:
self.poweruses -= 1 self.poweruses -= 1
randomrole = game.getrandomrole() randomrole = game.getrandomrole()
while isinstance(target.role, randomrole):
# TODO: se ci fossero solo disastri in una partits cosa succederebbe?
randomrole = game.getrandomrole()
self.player.message(bot, s.detective_discovery.format(target=target.tusername, self.player.message(bot, s.detective_discovery.format(target=target.tusername,
icon=randomrole.icon, icon=randomrole.icon,
role=randomrole.name, role=randomrole.name,

View file

@ -37,4 +37,4 @@ class Investigatore(Role):
def onendday(self, bot, game): def onendday(self, bot, game):
# Ripristina il potere # Ripristina il potere
self.poweruses = self.refillpoweruses self.poweruses = self.refillpoweruses

View file

@ -5,7 +5,7 @@ import strings as s
class Servitore(Role): class Servitore(Role):
"""Il servitore del Caos è il sottoposto al Signore del Caos. """Il servitore del Caos è il sottoposto al Signore del Caos.
Se non ci sono Signori del Caos in partita diventa Signore del Caos.""" Se non ci sono Signori del Caos in partita diventa Signore del Caos."""
icon = s.derek_icon icon = s.chaos_servant_icon
team = 'Chaos' team = 'Chaos'
name = s.chaos_servant_name name = s.chaos_servant_name
powerdesc = s.chaos_servant_power_description powerdesc = s.chaos_servant_power_description

View file

@ -8,7 +8,7 @@ class Terrorista(Role):
team = "Evil" team = "Evil"
name = s.terrorist_name name = s.terrorist_name
powerdesc = s.terrorist_power_description powerdesc = s.terrorist_power_description
value = -50 value = -75
def __repr__(self) -> str: def __repr__(self) -> str:
return "<Role: Terrorista>" return "<Role: Terrorista>"
@ -23,4 +23,4 @@ class Terrorista(Role):
game.message(bot, s.terrorist_target_killed.format(target=selectedplayer.tusername, game.message(bot, s.terrorist_target_killed.format(target=selectedplayer.tusername,
icon=selectedplayer.role.icon, icon=selectedplayer.role.icon,
role=selectedplayer.role.name)) role=selectedplayer.role.name))
selectedplayer.kill(bot, game) selectedplayer.kill(bot, game)

View file

@ -107,10 +107,10 @@ derek_deathwish_unset = "*Vivrai* per morire un altro giorno."
derek_deathwish_successful = "SPOILER: alla fine di questa giornata *\U0001F635 Derek* (@{name}) muore schiacciato da un container.\n" derek_deathwish_successful = "SPOILER: alla fine di questa giornata *\U0001F635 Derek* (@{name}) muore schiacciato da un container.\n"
# Disastro: icona # Disastro: icona
disaster_icon = "\U0001F913" disaster_icon = "\U0001F46E"
# Disastro: nome ruolo # Disastro: nome ruolo
disaster_name = "Disastro" disaster_name = "Carabiniere"
# Mamma: icona # Mamma: icona
mom_icon = "\U0001F917" mom_icon = "\U0001F917"
@ -139,7 +139,7 @@ intern_power_description = "In qualsiasi momento della partita puoi scegliere un
"`/power {gamename} nomeutentedatoredilavoro`" "`/power {gamename} nomeutentedatoredilavoro`"
# Stagista: inizia lo stage # Stagista: inizia lo stage
intern_started_internship = "Stai andando in stage da @{master}." intern_started_internship = "Andrai in stage da @{master}."
# Stagista: cambiato ruolo # Stagista: cambiato ruolo
intern_changed_role = "Lo stagista ha finito il tirocinio ed ha imparato i segreti del mestiere di *{icon} {role}*." intern_changed_role = "Lo stagista ha finito il tirocinio ed ha imparato i segreti del mestiere di *{icon} {role}*."
@ -189,6 +189,9 @@ chaos_lord_failed = "Il Caos è nell'aria...\n" \
# Servitore del Caos: nome ruolo # Servitore del Caos: nome ruolo
chaos_servant_name = "Servitore del Caos" chaos_servant_name = "Servitore del Caos"
# Servitore del Caos: icona
chaos_servant_icon = "\U0001F468\u200d\U0001F3A4"
# Servitore del Caos: descrizione potere # Servitore del Caos: descrizione potere
chaos_servant_power_description = "Il Signore del Caos ti cederà i suoi poteri quando sarà morto.\n" \ 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_!" "Facendo parte della fazione del Caos, hai automaticamente _vinto la partita_!"
@ -373,14 +376,7 @@ error_missing_parameters = "\U000026A0 Mancano uno o più parametri.\n" \
"Controlla la sintassi del comando e riprova." "Controlla la sintassi del comando e riprova."
# Lista dei possibili nomi di una partita # Lista dei possibili nomi di una partita
names_list = ["Caos", names_list = ["Mela", "Pera", "Banana", "Pesca", "Kiwi"]
"Vuoto",
"Nulla",
"Buconero",
"Fine",
"Supernova",
"Centrogalattico",
"Madre"]
# Lista dei passi di configurazione da eseguire # Lista dei passi di configurazione da eseguire
config_list = ["Quanti *Mifiosi* devono essere nella partita all'inizio?", config_list = ["Quanti *Mifiosi* devono essere nella partita all'inizio?",
@ -435,8 +431,16 @@ preset_advanced_selected = "Selezionato il preset *Avanzato*.\n" \
"I ruoli in questa partita sono casuali!\n" \ "I ruoli in questa partita sono casuali!\n" \
"Buona fortuna a scoprirli!" "Buona fortuna a scoprirli!"
# Preset con uno di tutti
preset_oneofall = "Round Robin"
# Preset con uno di tutti selezionato
preset_oneofall_selected = "Selezionato il preset *Round Robin*.\n" \
"In questa partita saranno presenti lo stesso numero di tutti i ruoli.\n" \
"Se sono presenti giocatori in eccesso, verrà assegnato loro un ruolo casuale."
# Personalizza # Personalizza
preset_custom = "Personalizzato" preset_custom = "Personalizzato"
# Preset selezionato # Preset selezionato
preset_selected = "Preset selezionato: {selected}" preset_selected = "Preset selezionato: {selected}"