Perform game-ending checks for random earlier on
This commit is contained in:
parent
245bc57b66
commit
78465c9769
@ -877,7 +877,7 @@ class RandomMode(GameMode):
|
|||||||
def teardown(self):
|
def teardown(self):
|
||||||
events.remove_listener("role_attribution", self.role_attribution, 1)
|
events.remove_listener("role_attribution", self.role_attribution, 1)
|
||||||
|
|
||||||
def role_attribution(self, evt, cli, var, villagers):
|
def role_attribution(self, evt, cli, chk_win_conditions, var, villagers):
|
||||||
lpl = len(villagers) - 1
|
lpl = len(villagers) - 1
|
||||||
addroles = evt.data["addroles"]
|
addroles = evt.data["addroles"]
|
||||||
for role in var.ROLE_GUIDE:
|
for role in var.ROLE_GUIDE:
|
||||||
@ -893,8 +893,16 @@ class RandomMode(GameMode):
|
|||||||
addroles["gunner"] = random.randrange(int(len(villagers) ** 1.2 / 4))
|
addroles["gunner"] = random.randrange(int(len(villagers) ** 1.2 / 4))
|
||||||
addroles["assassin"] = random.randrange(int(len(villagers) ** 1.2 / 8))
|
addroles["assassin"] = random.randrange(int(len(villagers) ** 1.2 / 8))
|
||||||
|
|
||||||
if sum(addroles[r] for r in var.WOLFCHAT_ROLES) > len(villagers) // 2:
|
lpl = len(villagers)
|
||||||
return self.role_attribution(evt, cli, var, villagers)
|
lwolves = sum(addroles[r] for r in var.WOLFCHAT_ROLES)
|
||||||
|
lcubs = addroles["wolf cub"]
|
||||||
|
lrealwolves = sum(addroles[r] for r in var.WOLF_ROLES - {"wolf cub"})
|
||||||
|
lmonsters = addroles["monster"]
|
||||||
|
ltraitors = addroles["traitor"]
|
||||||
|
lpipers = addroles["piper"]
|
||||||
|
|
||||||
|
if chk_win_conditions(lpl, lwolves, lcubs, lrealwolves, lmonsters, ltraitors, lpipers, cli, end_game=False):
|
||||||
|
return self.role_attribution(evt, cli, chk_win_conditions, var, villagers)
|
||||||
|
|
||||||
evt.prevent_default = True
|
evt.prevent_default = True
|
||||||
|
|
||||||
|
@ -6709,7 +6709,7 @@ def start(cli, nick, chan, forced = False, restart = ""):
|
|||||||
addroles = {}
|
addroles = {}
|
||||||
|
|
||||||
event = Event("role_attribution", {"addroles": addroles})
|
event = Event("role_attribution", {"addroles": addroles})
|
||||||
if event.dispatch(cli, var, villagers):
|
if event.dispatch(cli, chk_win_conditions, var, villagers):
|
||||||
for index in range(len(var.ROLE_INDEX) - 1, -1, -1):
|
for index in range(len(var.ROLE_INDEX) - 1, -1, -1):
|
||||||
if var.ROLE_INDEX[index] <= len(villagers):
|
if var.ROLE_INDEX[index] <= len(villagers):
|
||||||
for role, num in var.ROLE_GUIDE.items(): # allow event to override some roles
|
for role, num in var.ROLE_GUIDE.items(): # allow event to override some roles
|
||||||
|
Loading…
x
Reference in New Issue
Block a user