Fix error with roles by doing default game mode properly, also make game modes inherit GameMode
This commit is contained in:
parent
77262cea75
commit
d6f89adbd0
@ -401,6 +401,7 @@ def break_long_message(phrases, joinstr = " "):
|
||||
class InvalidModeException(Exception): pass
|
||||
def game_mode(name, minp, maxp, likelihood = 0, conceal_roles = False):
|
||||
def decor(c):
|
||||
c.name = name
|
||||
GAME_MODES[name] = (c, minp, maxp, likelihood, conceal_roles)
|
||||
return c
|
||||
return decor
|
||||
@ -411,9 +412,16 @@ def reset_roles(index):
|
||||
newguide[role] = tuple([0 for i in index])
|
||||
return newguide
|
||||
|
||||
# TODO: implement more game modes
|
||||
# TODO: move this to src/gamemodes.py
|
||||
class GameMode:
|
||||
def startup(self):
|
||||
pass
|
||||
|
||||
def teardown(self):
|
||||
pass
|
||||
|
||||
@game_mode("roles", minp = 4, maxp = 35)
|
||||
class ChangedRolesMode(object):
|
||||
class ChangedRolesMode(GameMode):
|
||||
"""Example: !fgame roles=wolf:1,seer:0,guardian angel:1"""
|
||||
|
||||
def __init__(self, arg = ""):
|
||||
@ -456,14 +464,14 @@ class ChangedRolesMode(object):
|
||||
raise InvalidModeException("A bad value was used in mode roles.")
|
||||
|
||||
@game_mode("default", minp = 4, maxp = 24, likelihood = 20)
|
||||
class DefaultMode(object):
|
||||
class DefaultMode(GameMode):
|
||||
"""Default game mode."""
|
||||
def __init__(self):
|
||||
# No extra settings, just an explicit way to revert to default settings
|
||||
pass
|
||||
|
||||
@game_mode("foolish", minp = 8,maxp = 24, likelihood = 8)
|
||||
class FoolishMode(object):
|
||||
class FoolishMode(GameMode):
|
||||
"""Contains the fool, be careful not to lynch them!"""
|
||||
def __init__(self):
|
||||
self.ROLE_INDEX = ( 8 , 9 , 10 , 11 , 12 , 15 , 17 , 20 , 21 , 22 , 24 )
|
||||
@ -491,7 +499,7 @@ class FoolishMode(object):
|
||||
})
|
||||
|
||||
@game_mode("mad", minp = 7, maxp = 22, likelihood = 8)
|
||||
class MadMode(object):
|
||||
class MadMode(GameMode):
|
||||
"""This game mode has mad scientist and many things that may kill you."""
|
||||
def __init__(self):
|
||||
self.SHOTS_MULTIPLIER = 0.0001 # gunner and sharpshooter always get 0 bullets
|
||||
@ -523,7 +531,7 @@ class MadMode(object):
|
||||
})
|
||||
|
||||
@game_mode("evilvillage", minp = 6, maxp = 18, likelihood = 1)
|
||||
class EvilVillageMode(object):
|
||||
class EvilVillageMode(GameMode):
|
||||
"""Majority of the village is wolf aligned, safes must secretly try to kill the wolves."""
|
||||
def __init__(self):
|
||||
self.DEFAULT_ROLE = "cultist"
|
||||
@ -575,7 +583,7 @@ class EvilVillageMode(object):
|
||||
|
||||
|
||||
@game_mode("classic", minp = 7, maxp = 21, likelihood = 4)
|
||||
class ClassicMode(object):
|
||||
class ClassicMode(GameMode):
|
||||
"""Classic game mode from before all the changes."""
|
||||
def __init__(self):
|
||||
self.ABSTAIN_ENABLED = False
|
||||
@ -597,7 +605,7 @@ class ClassicMode(object):
|
||||
})
|
||||
|
||||
@game_mode("rapidfire", minp = 6, maxp = 24, likelihood = 0)
|
||||
class RapidFireMode(object):
|
||||
class RapidFireMode(GameMode):
|
||||
"""Many roles that lead to multiple chain deaths."""
|
||||
def __init__(self):
|
||||
self.SHARPSHOOTER_CHANCE = 1
|
||||
@ -629,7 +637,7 @@ class RapidFireMode(object):
|
||||
})
|
||||
|
||||
@game_mode("drunkfire", minp = 8, maxp = 17, likelihood = 0)
|
||||
class DrunkFireMode(object):
|
||||
class DrunkFireMode(GameMode):
|
||||
"""Most players get a gun, quickly shoot all the wolves!"""
|
||||
def __init__(self):
|
||||
self.SHARPSHOOTER_CHANCE = 1
|
||||
@ -660,7 +668,7 @@ class DrunkFireMode(object):
|
||||
})
|
||||
|
||||
@game_mode("noreveal", minp = 4, maxp = 21, likelihood = 2)
|
||||
class NoRevealMode(object):
|
||||
class NoRevealMode(GameMode):
|
||||
"""Roles are not revealed when players die."""
|
||||
def __init__(self):
|
||||
self.ROLE_REVEAL = False
|
||||
@ -687,7 +695,7 @@ class NoRevealMode(object):
|
||||
})
|
||||
|
||||
@game_mode("lycan", minp = 7, maxp = 21, likelihood = 6)
|
||||
class LycanMode(object):
|
||||
class LycanMode(GameMode):
|
||||
"""Many lycans will turn into wolves. Hunt them down before the wolves overpower the village."""
|
||||
def __init__(self):
|
||||
self.ROLE_INDEX = ( 7 , 8 , 9 , 10 , 11 , 12 , 15 , 17 , 20 )
|
||||
@ -712,7 +720,7 @@ class LycanMode(object):
|
||||
})
|
||||
|
||||
@game_mode("amnesia", minp = 10, maxp = 24, likelihood = 0)
|
||||
class AmnesiaMode(object):
|
||||
class AmnesiaMode(GameMode):
|
||||
"""Everyone gets assigned a random role on night 3."""
|
||||
def __init__(self):
|
||||
self.DEFAULT_ROLE = "cultist"
|
||||
@ -725,7 +733,7 @@ class AmnesiaMode(object):
|
||||
})
|
||||
|
||||
@game_mode("valentines", minp = 8, maxp = 24, likelihood = 0)
|
||||
class MatchmakerMode(object):
|
||||
class MatchmakerMode(GameMode):
|
||||
"""Love is in the air!"""
|
||||
def __init__(self):
|
||||
self.ROLE_INDEX = range(8, 25)
|
||||
@ -738,7 +746,7 @@ class MatchmakerMode(object):
|
||||
})
|
||||
|
||||
@game_mode("random", minp = 8, maxp = 24, likelihood = 0, conceal_roles = True)
|
||||
class RandomMode(object):
|
||||
class RandomMode(GameMode):
|
||||
"""Completely random and hidden roles."""
|
||||
def __init__(self):
|
||||
self.AMNESIAC_NIGHTS = 1
|
||||
@ -778,7 +786,7 @@ class RandomMode(object):
|
||||
# Credits to Metacity for designing and current name
|
||||
# Blame arkiwitect for the original name of KrabbyPatty
|
||||
@game_mode("aleatoire", minp = 8, maxp = 24, likelihood = 4)
|
||||
class AleatoireMode(object):
|
||||
class AleatoireMode(GameMode):
|
||||
"""Game mode created by Metacity and balanced by woffle."""
|
||||
def __init__(self):
|
||||
self.SHARPSHOOTER_CHANCE = 1
|
||||
@ -829,7 +837,7 @@ class AleatoireMode(object):
|
||||
})
|
||||
|
||||
@game_mode("alpha", minp = 7, maxp = 24, likelihood = 5)
|
||||
class AlphaMode(object):
|
||||
class AlphaMode(GameMode):
|
||||
"""Features the alpha wolf who can turn other people into wolves, be careful whom you trust!"""
|
||||
def __init__(self):
|
||||
self.ROLE_INDEX = ( 7 , 8 , 10 , 11 , 12 , 14 , 15 , 17 , 18 , 20 , 21 , 24 )
|
||||
|
@ -84,7 +84,7 @@ var.PINGING_IFS = False
|
||||
var.TIMERS = {}
|
||||
|
||||
var.ORIGINAL_SETTINGS = {}
|
||||
var.CURRENT_GAMEMODE = {"name": "default"}
|
||||
var.CURRENT_GAMEMODE = var.GAME_MODES["default"][0]()
|
||||
|
||||
var.LAST_SAID_TIME = {}
|
||||
|
||||
@ -376,10 +376,8 @@ def pm(cli, target, message): # message either privmsg or notice, depending on
|
||||
cli.msg(target, message)
|
||||
|
||||
def reset_settings():
|
||||
if hasattr(var.CURRENT_GAMEMODE, "teardown") and callable(var.CURRENT_GAMEMODE.teardown):
|
||||
var.CURRENT_GAMEMODE.teardown()
|
||||
|
||||
var.CURRENT_GAMEMODE = {"name": "default"}
|
||||
var.CURRENT_GAMEMODE.teardown()
|
||||
var.CURRENT_GAMEMODE = var.GAME_MODES["default"][0]()
|
||||
for attr in list(var.ORIGINAL_SETTINGS.keys()):
|
||||
setattr(var, attr, var.ORIGINAL_SETTINGS[attr])
|
||||
dict.clear(var.ORIGINAL_SETTINGS)
|
||||
@ -5881,15 +5879,13 @@ def cgamemode(cli, arg):
|
||||
md = modeargs.pop(0)
|
||||
try:
|
||||
gm = var.GAME_MODES[md][0](*modeargs)
|
||||
if hasattr(gm, "startup") and callable(gm.startup):
|
||||
gm.startup()
|
||||
gm.startup()
|
||||
for attr in dir(gm):
|
||||
val = getattr(gm, attr)
|
||||
if (hasattr(var, attr) and not callable(val)
|
||||
and not attr.startswith("_")):
|
||||
var.ORIGINAL_SETTINGS[attr] = getattr(var, attr)
|
||||
setattr(var, attr, val)
|
||||
gm.name = md
|
||||
var.CURRENT_GAMEMODE = gm
|
||||
return True
|
||||
except var.InvalidModeException as e:
|
||||
|
Loading…
x
Reference in New Issue
Block a user