Add stasis feature
This commit is contained in:
parent
1bec88ad77
commit
92aad0da7d
@ -13,6 +13,7 @@ import botconfig
|
|||||||
from tools.wolfgamelogger import WolfgameLogger
|
from tools.wolfgamelogger import WolfgameLogger
|
||||||
from tools import decorators
|
from tools import decorators
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
from collections import defaultdict
|
||||||
import threading
|
import threading
|
||||||
import random
|
import random
|
||||||
import copy
|
import copy
|
||||||
@ -64,6 +65,8 @@ var.GAME_ID = 0
|
|||||||
|
|
||||||
var.DISCONNECTED = {} # players who got disconnected
|
var.DISCONNECTED = {} # players who got disconnected
|
||||||
|
|
||||||
|
var.illegal_joins = defaultdict(int)
|
||||||
|
|
||||||
var.LOGGER = WolfgameLogger(var.LOG_FILENAME, var.BARE_LOG_FILENAME)
|
var.LOGGER = WolfgameLogger(var.LOG_FILENAME, var.BARE_LOG_FILENAME)
|
||||||
|
|
||||||
if botconfig.DEBUG_MODE:
|
if botconfig.DEBUG_MODE:
|
||||||
@ -367,7 +370,16 @@ def join(cli, nick, chann_, rest):
|
|||||||
chan = botconfig.CHANNEL
|
chan = botconfig.CHANNEL
|
||||||
|
|
||||||
nick, _, __, cloak = parse_nick(nick)
|
nick, _, __, cloak = parse_nick(nick)
|
||||||
|
|
||||||
|
try:
|
||||||
|
cloak = var.USERS[nick]['cloak']
|
||||||
|
if cloak is not None and var.illegal_joins[cloak] > 0:
|
||||||
|
cli.notice(nick, "Sorry, but you are in stasis for {0} games.".format(var.illegal_joins[cloak]))
|
||||||
|
return
|
||||||
|
except KeyError:
|
||||||
|
cloak = None
|
||||||
|
|
||||||
|
|
||||||
if var.PHASE == "none":
|
if var.PHASE == "none":
|
||||||
|
|
||||||
cli.mode(chan, "+v", nick)
|
cli.mode(chan, "+v", nick)
|
||||||
@ -968,6 +980,12 @@ def reaper(cli, gameid):
|
|||||||
cli.msg(chan, ("\u0002{0}\u0002 didn't get out of bed "+
|
cli.msg(chan, ("\u0002{0}\u0002 didn't get out of bed "+
|
||||||
"for a very long time. S/He is declared dead. Appears "+
|
"for a very long time. S/He is declared dead. Appears "+
|
||||||
"(s)he was a \u0002{1}\u0002.").format(nck, var.get_role(nck)))
|
"(s)he was a \u0002{1}\u0002.").format(nck, var.get_role(nck)))
|
||||||
|
try:
|
||||||
|
cloak = var.USERS[nck]['cloak']
|
||||||
|
if cloak is not None:
|
||||||
|
var.illegal_joins[cloak] += var.PART_STASIS_PENALTY
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
if not del_player(cli, nck):
|
if not del_player(cli, nck):
|
||||||
return
|
return
|
||||||
pl = var.list_players()
|
pl = var.list_players()
|
||||||
@ -981,11 +999,23 @@ def reaper(cli, gameid):
|
|||||||
if what == "quit" and (datetime.now() - timeofdc) > timedelta(seconds=var.QUIT_GRACE_TIME):
|
if what == "quit" and (datetime.now() - timeofdc) > timedelta(seconds=var.QUIT_GRACE_TIME):
|
||||||
cli.msg(chan, ("\02{0}\02 died due to a fatal attack by wild animals. Appears (s)he "+
|
cli.msg(chan, ("\02{0}\02 died due to a fatal attack by wild animals. Appears (s)he "+
|
||||||
"was a \02{1}\02.").format(dcedplayer, var.get_role(dcedplayer)))
|
"was a \02{1}\02.").format(dcedplayer, var.get_role(dcedplayer)))
|
||||||
|
try:
|
||||||
|
cloak = var.USERS[dcedplayer]['cloak']
|
||||||
|
if cloak is not None:
|
||||||
|
var.illegal_joins[cloak] += var.PART_STASIS_PENALTY
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
if not del_player(cli, dcedplayer, devoice = False):
|
if not del_player(cli, dcedplayer, devoice = False):
|
||||||
return
|
return
|
||||||
elif what == "part" and (datetime.now() - timeofdc) > timedelta(seconds=var.PART_GRACE_TIME):
|
elif what == "part" and (datetime.now() - timeofdc) > timedelta(seconds=var.PART_GRACE_TIME):
|
||||||
cli.msg(chan, ("\02{0}\02 died due to eating poisonous berries. Appears (s)he was "+
|
cli.msg(chan, ("\02{0}\02 died due to eating poisonous berries. Appears (s)he was "+
|
||||||
"a \02{1}\02.").format(dcedplayer, var.get_role(dcedplayer)))
|
"a \02{1}\02.").format(dcedplayer, var.get_role(dcedplayer)))
|
||||||
|
try:
|
||||||
|
cloak = var.USERS[dcedplayer]['cloak']
|
||||||
|
if cloak is not None:
|
||||||
|
var.illegal_joins[cloak] += var.PART_STASIS_PENALTY
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
if not del_player(cli, dcedplayer, devoice = False):
|
if not del_player(cli, dcedplayer, devoice = False):
|
||||||
return
|
return
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
@ -1167,7 +1197,6 @@ def leave(cli, what, nick, why=""):
|
|||||||
var.DCED_PLAYERS[nick] = var.PLAYERS.pop(nick)
|
var.DCED_PLAYERS[nick] = var.PLAYERS.pop(nick)
|
||||||
if nick not in var.list_players() or nick in var.DISCONNECTED.keys():
|
if nick not in var.list_players() or nick in var.DISCONNECTED.keys():
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
# the player who just quit was in the game
|
# the player who just quit was in the game
|
||||||
killhim = True
|
killhim = True
|
||||||
@ -1185,6 +1214,13 @@ def leave(cli, what, nick, why=""):
|
|||||||
"(s)he was a \02{1}\02.").format(nick, var.get_role(nick))
|
"(s)he was a \02{1}\02.").format(nick, var.get_role(nick))
|
||||||
cli.msg(botconfig.CHANNEL, msg)
|
cli.msg(botconfig.CHANNEL, msg)
|
||||||
var.LOGGER.logMessage(msg.replace("\02", ""))
|
var.LOGGER.logMessage(msg.replace("\02", ""))
|
||||||
|
try:
|
||||||
|
cloak = var.USERS[str(nick)]['cloak']
|
||||||
|
if cloak is not None:
|
||||||
|
var.illegal_joins[cloak] += var.PART_STASIS_PENALTY
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
if killhim:
|
if killhim:
|
||||||
del_player(cli, nick)
|
del_player(cli, nick)
|
||||||
else:
|
else:
|
||||||
@ -1209,7 +1245,16 @@ def leave_game(cli, nick, chan, rest):
|
|||||||
"S/He was a \02{1}\02.").format(nick, var.get_role(nick)))
|
"S/He was a \02{1}\02.").format(nick, var.get_role(nick)))
|
||||||
var.LOGGER.logMessage(("{0} died of an unknown disease. "+
|
var.LOGGER.logMessage(("{0} died of an unknown disease. "+
|
||||||
"S/He was a {1}.").format(nick, var.get_role(nick)))
|
"S/He was a {1}.").format(nick, var.get_role(nick)))
|
||||||
|
try:
|
||||||
|
if var.get_role(nick) != "person":
|
||||||
|
cloak = var.USERS[str(nick)]['cloak']
|
||||||
|
if cloak is not None:
|
||||||
|
var.illegal_joins[cloak] += var.LEAVE_STASIS_PENALTY
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
del_player(cli, nick)
|
del_player(cli, nick)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -2392,6 +2437,10 @@ def start(cli, nick, chann_, rest):
|
|||||||
else:
|
else:
|
||||||
transition_day(cli)
|
transition_day(cli)
|
||||||
|
|
||||||
|
for cloak in var.illegal_joins:
|
||||||
|
if var.illegal_joins[cloak] != 0:
|
||||||
|
var.illegal_joins[cloak] -= 1
|
||||||
|
|
||||||
# DEATH TO IDLERS!
|
# DEATH TO IDLERS!
|
||||||
reapertimer = threading.Thread(None, reaper, args=(cli,var.GAME_ID))
|
reapertimer = threading.Thread(None, reaper, args=(cli,var.GAME_ID))
|
||||||
reapertimer.daemon = True
|
reapertimer.daemon = True
|
||||||
@ -2405,7 +2454,25 @@ def on_error(cli, pfx, msg):
|
|||||||
restart_program(cli, "excess flood", "")
|
restart_program(cli, "excess flood", "")
|
||||||
elif msg.startswith("Closing Link:"):
|
elif msg.startswith("Closing Link:"):
|
||||||
raise SystemExit
|
raise SystemExit
|
||||||
|
|
||||||
|
|
||||||
|
@pmcmd("fstasis", admin_only=True)
|
||||||
|
def fstasis(cli, nick, *rest):
|
||||||
|
data = rest[0].split()
|
||||||
|
if len(data) == 2:
|
||||||
|
if data[0] in var.USERS:
|
||||||
|
cloak = var.USERS[str(data[0])]['cloak']
|
||||||
|
else:
|
||||||
|
cloak = None
|
||||||
|
amt = data[1]
|
||||||
|
if cloak is not None:
|
||||||
|
var.illegal_joins[cloak] = int(amt)
|
||||||
|
cli.msg(nick, "{0} is now in statis for {1} games".format(data[0], amt))
|
||||||
|
else:
|
||||||
|
cli.msg(nick, "Sorrry, that user has a None cloak")
|
||||||
|
else:
|
||||||
|
cli.msg(nick, "current illegal joins: " + str(var.illegal_joins))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@cmd("wait")
|
@cmd("wait")
|
||||||
|
Loading…
Reference in New Issue
Block a user