Refactor of the random game mode to use the role_attribution event
This commit is contained in:
parent
a7a3b4a045
commit
d069345c2c
@ -752,20 +752,11 @@ class MatchmakerMode(GameMode):
|
|||||||
class RandomMode(GameMode):
|
class RandomMode(GameMode):
|
||||||
"""Completely random and hidden roles."""
|
"""Completely random and hidden roles."""
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.AMNESIAC_NIGHTS = 1
|
|
||||||
self.AMNESIAC_BLACKLIST = ["cultist"]
|
|
||||||
self.LOVER_WINS_WITH_FOOL = True
|
self.LOVER_WINS_WITH_FOOL = True
|
||||||
self.MAD_SCIENTIST_SKIPS_DEAD_PLAYERS = 0 # always make it happen
|
self.MAD_SCIENTIST_SKIPS_DEAD_PLAYERS = 0 # always make it happen
|
||||||
self.ALPHA_WOLF_NIGHTS = 2
|
self.ALPHA_WOLF_NIGHTS = 2
|
||||||
self.ROLE_REVEAL = False
|
self.ROLE_REVEAL = False
|
||||||
self.TEMPLATE_RESTRICTIONS = {template: [] for template in TEMPLATE_RESTRICTIONS}
|
self.TEMPLATE_RESTRICTIONS = {template: [] for template in TEMPLATE_RESTRICTIONS}
|
||||||
self.ROLE_INDEX = range(8, 25)
|
|
||||||
self.ROLE_GUIDE = reset_roles(self.ROLE_INDEX)
|
|
||||||
self.ROLE_GUIDE.update({
|
|
||||||
"amnesiac" : [i for i in self.ROLE_INDEX],
|
|
||||||
"gunner" : [random.randrange(int(i ** 1.2 / 4)) for i in self.ROLE_INDEX],
|
|
||||||
"assassin" : [random.randrange(int(i ** 1.2 / 8)) for i in self.ROLE_INDEX],
|
|
||||||
})
|
|
||||||
|
|
||||||
self.TOTEM_CHANCES = { # shaman , crazed
|
self.TOTEM_CHANCES = { # shaman , crazed
|
||||||
"death": ( 8 , 1 ),
|
"death": ( 8 , 1 ),
|
||||||
@ -786,43 +777,26 @@ class RandomMode(GameMode):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def startup(self):
|
def startup(self):
|
||||||
events.add_listener("amnesiac_turn", self.amnesiac_turn, 1)
|
events.add_listener("role_attribution", self.role_attribution, 1)
|
||||||
events.add_listener("roles_check", self.roles_check, 1)
|
|
||||||
events.add_listener("chk_traitor", self.chk_traitor, 1)
|
|
||||||
|
|
||||||
def teardown(self):
|
def teardown(self):
|
||||||
events.remove_listener("amnesiac_turn", self.amnesiac_turn, 1)
|
events.remove_listener("role_attribution", self.role_attribution, 1)
|
||||||
events.remove_listener("roles_check", self.roles_check, 1)
|
|
||||||
events.remove_listener("chk_traitor", self.chk_traitor, 1)
|
|
||||||
|
|
||||||
def amnesiac_turn(self, evt, var, amn, role):
|
def role_attribution(self, evt, cli, var, villagers, addroles):
|
||||||
var.ROLES["amnesiac"].remove(amn)
|
lpl = len(villagers) - 1
|
||||||
var.ROLES[role].append(amn)
|
for role in var.ROLE_GUIDE:
|
||||||
var.ORIGINAL_ROLES["amnesiac"].remove(amn)
|
addroles[role] = 0
|
||||||
var.ORIGINAL_ROLES[role].append(amn)
|
|
||||||
del var.FINAL_ROLES[amn]
|
|
||||||
|
|
||||||
evt.prevent_default = True
|
wolves = var.WOLF_ROLES[:]
|
||||||
|
wolves.remove("wolf cub")
|
||||||
|
addroles[random.choice(wolves)] += 1 # make sure there's at least one wolf role
|
||||||
|
roles = list(var.ROLE_GUIDE.keys() - (list(var.TEMPLATE_RESTRICTIONS) + ["villager", "cultist", "amnesiac"]))
|
||||||
|
while lpl:
|
||||||
|
addroles[random.choice(roles)] += 1
|
||||||
|
lpl -= 1
|
||||||
|
|
||||||
def roles_check(self, evt, var, addroles):
|
addroles["gunner"] = random.randrange(int(len(villagers) ** 1.2 / 4))
|
||||||
evt.prevent_default = True
|
addroles["assassin"] = random.randrange(int(len(villagers) ** 1.2 / 8))
|
||||||
|
|
||||||
def chk_traitor(self, evt, cli, var, cubes, betrayers):
|
|
||||||
if not var.FIRST_NIGHT:
|
|
||||||
return # use normal chk_traitor
|
|
||||||
|
|
||||||
for cube in cubes:
|
|
||||||
var.ROLES["wolf"].append(cube)
|
|
||||||
var.ROLES["wolf cub"].remove(cube)
|
|
||||||
var.ORIGINAL_ROLES["wolf"].append(cube)
|
|
||||||
var.ORIGINAL_ROLES["wolf cub"].remove(cube)
|
|
||||||
|
|
||||||
if len(var.ROLES["wolf"]) == 0:
|
|
||||||
for betrayer in betrayers:
|
|
||||||
var.ROLES["wolf"].append(betrayer)
|
|
||||||
var.ROLES["traitor"].remove(betrayer)
|
|
||||||
var.ORIGINAL_ROLES["wolf"].append(betrayer)
|
|
||||||
var.ORIGINAL_ROLES["traitor"].remove(betrayer)
|
|
||||||
|
|
||||||
evt.prevent_default = True
|
evt.prevent_default = True
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user