156 lines
4.0 KiB
Python
156 lines
4.0 KiB
Python
class Role:
|
|
|
|
def __init__(self, game):
|
|
self.game = game
|
|
self.copy = self
|
|
|
|
def setPlayer(self, player):
|
|
self.player = player
|
|
|
|
async def phase1(self): # query stuff + doppelganger simulation
|
|
pass
|
|
|
|
async def phase2(self): # werewolf stuff + seer info
|
|
pass
|
|
|
|
async def phase3(self): # robber simulation & info
|
|
pass
|
|
|
|
async def phase4(self): # troublemaker simulation
|
|
pass
|
|
|
|
async def phase5(self): # mostly sending info + drunk simulation
|
|
pass
|
|
|
|
@staticmethod
|
|
def match(message, game):
|
|
for role_class in Role.role_set:
|
|
if message.casefold() == role_class.name():
|
|
return role_class(game)
|
|
|
|
@classmethod
|
|
def name(cls):
|
|
return cls.__name__.casefold()
|
|
|
|
def __str__(self):
|
|
return self.name()
|
|
|
|
class Doppelganger(Role):
|
|
order = 1
|
|
|
|
class Werewolf(Role):
|
|
order = 2
|
|
|
|
def setPlayer(self, player):
|
|
super().setPlayer(player)
|
|
self.game.werewolf_list.append(player)
|
|
|
|
async def phase2(self):
|
|
if len(self.game.werewolf_list) >= 2:
|
|
await self.player.send("Werewolves: " + str(self.game.werewolf_list))
|
|
else:
|
|
await self.player.send("You are the only werewolf")
|
|
await self.player.send("Which card in the middle do you want to look at?")
|
|
self.choice = await self.player.get_choice(["left", "middle", "right"])
|
|
|
|
await self.player.send("A card in the middle is: " + self.game.middle_card[self.choice].name())
|
|
|
|
|
|
class Minion(Role):
|
|
order = 3
|
|
|
|
async def phase2(self):
|
|
if len(self.game.werewolf_list) == 0:
|
|
await self.player.send("There were no werewolves so you became one")
|
|
else:
|
|
await self.player.send("Werewolves: " + str(self.game.werewolf_list))
|
|
|
|
|
|
class Mason(Role):
|
|
order = 4
|
|
|
|
def setPlayer(self, player):
|
|
super().setPlayer(player)
|
|
self.game.mason_list.append(player)
|
|
|
|
async def phase2(self):
|
|
await self.player.send("Mason " + str(self.game.mason_list))
|
|
|
|
|
|
class Seer(Role):
|
|
order = 5
|
|
|
|
async def phase1(self):
|
|
await self.player.send("Which 1 player card or 2 middle cards do you want to look at?")
|
|
self.choice = await self.player.get_choice(self.player.other() + ["left & middle", "middle & right", "left & right"])
|
|
|
|
async def phase2(self):
|
|
if self.choice < len(self.player.other()):
|
|
await self.player.send(self.player.other()[self.choice].night_role)
|
|
else:
|
|
self.choice -= len(self.player.other())
|
|
if self.choice == 0:
|
|
a, b = 0, 1
|
|
elif self.choice == 1:
|
|
a, b = 1, 2
|
|
else:
|
|
a, b = 0, 2
|
|
|
|
await self.player.send(str(self.game.middle_card[a]) + " " + str(self.game.middle_card[b]))
|
|
|
|
|
|
class Robber(Role):
|
|
order = 6
|
|
|
|
async def phase1(self):
|
|
await self.player.send("Which player do you want to rob?")
|
|
self.choice = await self.player.get_choice(self.player.other())
|
|
|
|
async def phase3(self):
|
|
Player.swap(self.player, self.player.other()[self.choice])
|
|
await self.player.send("You robbed: " + str(self.player.day_role))
|
|
|
|
class Troublemaker(Role):
|
|
order = 7
|
|
|
|
async def phase1(self):
|
|
await self.player.send("Who do you want to exchange? (send two separate numbers)")
|
|
self.A = await self.player.get_choice(self.player.other())
|
|
self.B = await self.player.get_choice(self.player.other())
|
|
|
|
async def phase4(self):
|
|
Player.swap(self.player.other()[self.A], self.player.other()[self.B])
|
|
# receive conformation
|
|
await self.player.send("Received " + str(self.A) + " " + str(self.B))
|
|
|
|
class Drunk(Role):
|
|
order = 8
|
|
|
|
async def phase1(self):
|
|
await self.player.send("Which card from the middle do you want to take?")
|
|
self.choice = await self.player.get_choice(["left", "middle", "right"])
|
|
|
|
async def phase5(self):
|
|
self.player.day_role, self.game.middle_card[self.choice] = self.game.middle_card[self.choice], self.player.day_role
|
|
#receive conformation
|
|
await self.player.send("Received " + str(self.choice))
|
|
|
|
class Insomniac(Role):
|
|
order = 9
|
|
|
|
async def phase5(self):
|
|
await self.player.send("You are now: " + str(self.player.day_role))
|
|
|
|
class Villiager(Role):
|
|
order = 10
|
|
|
|
class Tanner(Role):
|
|
order = 11
|
|
|
|
class Hunter(Role):
|
|
order = 12
|
|
|
|
class No_role(Role):
|
|
order = 1000
|
|
|
|
Role.role_set = [Doppelganger, Werewolf, Minion, Mason, Seer, Robber, Troublemaker, Drunk, Insomniac, Villiager, Tanner, Hunter] |