mirror of
https://github.com/RYGhub/royal-mifia.git
synced 2024-11-29 00:54:18 +00:00
parent
3e7af71843
commit
f1dfa2df89
1 changed files with 61 additions and 9 deletions
70
main.py
70
main.py
|
@ -81,14 +81,17 @@ class Mifioso(Role):
|
||||||
player.message(bot, s.error_username)
|
player.message(bot, s.error_username)
|
||||||
|
|
||||||
def onendday(self, bot, game):
|
def onendday(self, bot, game):
|
||||||
# Uccidi il bersaglio se non è protetto da un Angelo.
|
if not game.votingmifia:
|
||||||
if self.target is not None:
|
# Uccidi il bersaglio se non è protetto da un Angelo.
|
||||||
if self.target.protectedby is None:
|
if self.target is not None:
|
||||||
self.target.kill()
|
if self.target.protectedby is None:
|
||||||
game.message(bot, s.mifia_target_killed.format(target=self.target.tusername, icon=self.target.role.icon, role=self.target.role.name))
|
self.target.kill()
|
||||||
else:
|
game.message(bot, s.mifia_target_killed.format(target=self.target.tusername, icon=self.target.role.icon, role=self.target.role.name))
|
||||||
game.message(bot, s.mifia_target_protected.format(target=self.target.tusername, icon=self.target.protectedby.role.icon,
|
else:
|
||||||
protectedby=self.target.protectedby.tusername))
|
game.message(bot, s.mifia_target_protected.format(target=self.target.tusername, icon=self.target.protectedby.role.icon,
|
||||||
|
protectedby=self.target.protectedby.tusername))
|
||||||
|
self.target = None
|
||||||
|
else:
|
||||||
self.target = None
|
self.target = None
|
||||||
|
|
||||||
|
|
||||||
|
@ -175,6 +178,7 @@ class Player:
|
||||||
self.votingfor = None # Diventa un player se ha votato
|
self.votingfor = None # Diventa un player se ha votato
|
||||||
self.votes = 0 # Voti che sta ricevendo questo giocatore. Aggiornato da updatevotes()
|
self.votes = 0 # Voti che sta ricevendo questo giocatore. Aggiornato da updatevotes()
|
||||||
self.protectedby = None # Protettore. Oggetto player che protegge questo giocatore dalla mifia.
|
self.protectedby = None # Protettore. Oggetto player che protegge questo giocatore dalla mifia.
|
||||||
|
self.mifiavotes = 0 # Voti che sta ricevendo questo giocatore dalla mifia. Aggiornato da updatemifiavotes()
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
r = "< Player {username} >".format(username=self.tusername)
|
r = "< Player {username} >".format(username=self.tusername)
|
||||||
|
@ -201,6 +205,7 @@ class Game:
|
||||||
self.totalmifiosi = 0 # Numero di mifiosi da inserire
|
self.totalmifiosi = 0 # Numero di mifiosi da inserire
|
||||||
self.totaldetectives = 0 # Numero di detective da inserire
|
self.totaldetectives = 0 # Numero di detective da inserire
|
||||||
self.totalangels = 0 # Numero di angeli da inserire
|
self.totalangels = 0 # Numero di angeli da inserire
|
||||||
|
self.votingmifia = False # Seguire le regole originali della mifia che vota?
|
||||||
|
|
||||||
# Trova un nome per la partita
|
# Trova un nome per la partita
|
||||||
if len(freenames) > 0:
|
if len(freenames) > 0:
|
||||||
|
@ -259,6 +264,7 @@ class Game:
|
||||||
# Seleziona mifiosi
|
# Seleziona mifiosi
|
||||||
while self.totalmifiosi > 0:
|
while self.totalmifiosi > 0:
|
||||||
selected = playersleft.pop()
|
selected = playersleft.pop()
|
||||||
|
|
||||||
selected.role = Mifioso()
|
selected.role = Mifioso()
|
||||||
self.totalmifiosi -= 1
|
self.totalmifiosi -= 1
|
||||||
# Seleziona detective
|
# Seleziona detective
|
||||||
|
@ -288,6 +294,15 @@ class Game:
|
||||||
if player.votingfor is not None and player.alive:
|
if player.votingfor is not None and player.alive:
|
||||||
player.votingfor.votes += 1
|
player.votingfor.votes += 1
|
||||||
|
|
||||||
|
def updatevotes(self):
|
||||||
|
"""Aggiorna il conteggio dei voti mifiosi di tutti i giocatori."""
|
||||||
|
for player in self.players:
|
||||||
|
player.mifiavotes = 0
|
||||||
|
for player in self.players:
|
||||||
|
if isinstance(player.role, Mifioso) and player.alive:
|
||||||
|
if player.role.target is not None:
|
||||||
|
player.role.target.mifiavotes += 1
|
||||||
|
|
||||||
def mostvotedplayer(self) -> list:
|
def mostvotedplayer(self) -> list:
|
||||||
"""Trova il giocatore più votato."""
|
"""Trova il giocatore più votato."""
|
||||||
mostvoted = list()
|
mostvoted = list()
|
||||||
|
@ -298,7 +313,26 @@ class Game:
|
||||||
mostvoted = [player]
|
mostvoted = [player]
|
||||||
elif player.votes == currenttop:
|
elif player.votes == currenttop:
|
||||||
mostvoted.append(player)
|
mostvoted.append(player)
|
||||||
return mostvoted
|
if currenttop > 0:
|
||||||
|
return mostvoted
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def mostvotedmifia(self) -> list:
|
||||||
|
"""Trova il giocatore più votato dalla mifia."""
|
||||||
|
mostvoted = list()
|
||||||
|
currenttop = 0
|
||||||
|
self.updatevotes()
|
||||||
|
for player in self.players:
|
||||||
|
if player.mifiavotes > currenttop:
|
||||||
|
mostvoted = [player]
|
||||||
|
elif player.votes == currenttop:
|
||||||
|
mostvoted.append(player)
|
||||||
|
if currenttop > 0:
|
||||||
|
return mostvoted
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def endday(self, bot):
|
def endday(self, bot):
|
||||||
"""Finisci la giornata, uccidi il più votato del giorno ed esegui gli endday di tutti i giocatori."""
|
"""Finisci la giornata, uccidi il più votato del giorno ed esegui gli endday di tutti i giocatori."""
|
||||||
|
@ -318,6 +352,16 @@ class Game:
|
||||||
# Si potrebbe fare più velocemente, credo.
|
# Si potrebbe fare più velocemente, credo.
|
||||||
# Ma non sto ho voglia di ottimizzare ora.
|
# Ma non sto ho voglia di ottimizzare ora.
|
||||||
# Mifiosi
|
# Mifiosi
|
||||||
|
if self.votingmifia:
|
||||||
|
# Trova il più votato dai mifiosi e uccidilo
|
||||||
|
killlist = mostvotedmifia()
|
||||||
|
if len(killlist) > 0:
|
||||||
|
# In caso di pareggio, elimina un giocatore casuale.
|
||||||
|
random.seed()
|
||||||
|
random.shuffle(killlist)
|
||||||
|
killed = killlist.pop()
|
||||||
|
if killed.alive:
|
||||||
|
self.message(bot, s.mifia_target_killed.format(name=killed.tusername, icon=killed.role.icon, role=killed.role.name))
|
||||||
for player in self.players:
|
for player in self.players:
|
||||||
if isinstance(player.role, Mifioso) and player.alive:
|
if isinstance(player.role, Mifioso) and player.alive:
|
||||||
player.role.onendday(bot, self)
|
player.role.onendday(bot, self)
|
||||||
|
@ -488,6 +532,14 @@ def config(bot, update):
|
||||||
game.totalangels = int(cmd[1])
|
game.totalangels = int(cmd[1])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
game.message(bot, s.error_invalid_config)
|
game.message(bot, s.error_invalid_config)
|
||||||
|
else:
|
||||||
|
game.configstep += 1
|
||||||
|
game.message(bot, s.config_list[game.configstep])
|
||||||
|
elif game.configstep == 3:
|
||||||
|
try:
|
||||||
|
game.votingmifia = bool(cmd[1])
|
||||||
|
except ValueError:
|
||||||
|
game.message(bot, s.error_invalid_config)
|
||||||
else:
|
else:
|
||||||
# Fine del config, inizio assegnazione ruoli
|
# Fine del config, inizio assegnazione ruoli
|
||||||
game.phase = 'Voting'
|
game.phase = 'Voting'
|
||||||
|
|
Loading…
Reference in a new issue