Browse Source

reset rate-limits for !stats/!votes in certain circumstances. Reduce the rate-limiting for !stats/!votes to 30 sec, and make it impossible for the gunner to kill the wolf at night if he's attacked

master
jcao219 14 years ago
parent
commit
ac1194ddbb
  1. 6
      var.py
  2. 23
      wolfgame.py

6
var.py

@ -2,8 +2,8 @@ PING_WAIT = 300 # Seconds
MINIMUM_WAIT = 60 MINIMUM_WAIT = 60
EXTRA_WAIT = 20 EXTRA_WAIT = 20
MAXIMUM_WAITED = 2 # limit for amount of !wait's MAXIMUM_WAITED = 2 # limit for amount of !wait's
STATS_RATE_LIMIT = 60 STATS_RATE_LIMIT = 30
VOTES_RATE_LIMIT = 60 VOTES_RATE_LIMIT = 30
ADMINS_RATE_LIMIT = 300 ADMINS_RATE_LIMIT = 300
SHOTS_MULTIPLIER = .12 # ceil(shots_multiplier * len_players) = bullets given SHOTS_MULTIPLIER = .12 # ceil(shots_multiplier * len_players) = bullets given
MAX_PLAYERS = 30 MAX_PLAYERS = 30
@ -22,7 +22,7 @@ GUN_CHANCES = ( 5/7 , 1/7 , 1/7 )
DRUNK_GUN_CHANCES = ( 2/7 , 4/7 , 1/7 ) DRUNK_GUN_CHANCES = ( 2/7 , 4/7 , 1/7 )
MANSLAUGHTER_CHANCE = 1/5 # ACCIDENTAL HEADSHOT (FATAL) MANSLAUGHTER_CHANCE = 1/5 # ACCIDENTAL HEADSHOT (FATAL)
GUNNER_KILLS_WOLF_AT_NIGHT_CHANCE = 1/2 GUNNER_KILLS_WOLF_AT_NIGHT_CHANCE = 0
GUARDIAN_ANGEL_DIES_CHANCE = 1/2 GUARDIAN_ANGEL_DIES_CHANCE = 1/2
DETECTIVE_REVEALED_CHANCE = 2/5 DETECTIVE_REVEALED_CHANCE = 2/5

23
wolfgame.py

@ -218,7 +218,7 @@ def pinger(cli, nick, chan, rest):
"""Pings the channel to get people's attention. Rate-Limited.""" """Pings the channel to get people's attention. Rate-Limited."""
if (var.LAST_PING and if (var.LAST_PING and
var.LAST_PING + timedelta(seconds=var.PING_WAIT) > datetime.now()): var.LAST_PING + timedelta(seconds=var.PING_WAIT) > datetime.now()):
cli.notice(nick, ("This command is ratelimited. " + cli.notice(nick, ("This command is rate-limited. " +
"Please wait a while before using it again.")) "Please wait a while before using it again."))
return return
@ -325,6 +325,8 @@ def join(cli, nick, chan, rest):
var.ROLES["person"].append(nick) var.ROLES["person"].append(nick)
cli.msg(chan, '\u0002{0}\u0002 has joined the game.'.format(nick)) cli.msg(chan, '\u0002{0}\u0002 has joined the game.'.format(nick))
var.LAST_STATS = None # reset
@cmd("fjoin", admin_only=True) @cmd("fjoin", admin_only=True)
def fjoin(cli, nick, chan, rest): def fjoin(cli, nick, chan, rest):
@ -400,8 +402,7 @@ def stats(cli, nick, chan, rest):
if (var.LAST_STATS and if (var.LAST_STATS and
var.LAST_STATS + timedelta(seconds=var.STATS_RATE_LIMIT) > datetime.now()): var.LAST_STATS + timedelta(seconds=var.STATS_RATE_LIMIT) > datetime.now()):
cli.msg(chan, (nick+": This command is ratelimited. " + cli.msg(chan, nick+": This command is rate-limited.")
"Please wait a while before using it again."))
return return
var.LAST_STATS = datetime.now() var.LAST_STATS = datetime.now()
@ -550,14 +551,14 @@ def show_votes(cli, nick, chan, rest):
if (var.LAST_VOTES and if (var.LAST_VOTES and
var.LAST_VOTES + timedelta(seconds=var.VOTES_RATE_LIMIT) > datetime.now()): var.LAST_VOTES + timedelta(seconds=var.VOTES_RATE_LIMIT) > datetime.now()):
cli.msg(chan, (nick+": This command is ratelimited. " + cli.msg(chan, nick+": This command is rate-limited.")
"Please wait a while before using it again."))
return return
var.LAST_VOTES = datetime.now() var.LAST_VOTES = datetime.now()
if not var.VOTES.values(): if not var.VOTES.values():
cli.msg(chan, nick+": No votes yet.") cli.msg(chan, nick+": No votes yet.")
var.LAST_VOTES = None # reset
else: else:
votelist = ["{0}: {1} ({2})".format(votee, votelist = ["{0}: {1} ({2})".format(votee,
len(var.VOTES[votee]), len(var.VOTES[votee]),
@ -748,6 +749,10 @@ def del_player(cli, nick, forced_death = False):
arg: forced_death = True when lynched or when the seer/wolf both don't act arg: forced_death = True when lynched or when the seer/wolf both don't act
""" """
t = timetime() # time t = timetime() # time
var.LAST_STATS = None # reset
var.LAST_VOTES = None
with var.GRAVEYARD_LOCK: with var.GRAVEYARD_LOCK:
if not var.GAME_ID or var.GAME_ID > t: if not var.GAME_ID or var.GAME_ID > t:
# either game ended, or a new game has started. # either game ended, or a new game has started.
@ -1241,6 +1246,9 @@ def vote(cli, nick, chan, rest):
"\u0002{1}\u0002.").format(nick, voted)) "\u0002{1}\u0002.").format(nick, voted))
var.LOGGER.logMessage("{0} votes for {1}.".format(nick, voted)) var.LOGGER.logMessage("{0} votes for {1}.".format(nick, voted))
var.LOGGER.logBare(voted, "VOTED", nick) var.LOGGER.logBare(voted, "VOTED", nick)
var.LAST_VOTES = None # reset
chk_decision(cli) chk_decision(cli)
elif not rest: elif not rest:
cli.notice(nick, "Not enough parameters.") cli.notice(nick, "Not enough parameters.")
@ -1273,6 +1281,7 @@ def retract(cli, nick, chan, rest):
cli.msg(chan, "\u0002{0}\u0002 retracted his/her vote.".format(nick)) cli.msg(chan, "\u0002{0}\u0002 retracted his/her vote.".format(nick))
var.LOGGER.logBare(voter, "RETRACT", nick) var.LOGGER.logBare(voter, "RETRACT", nick)
var.LOGGER.logMessage("{0} retracted his/her vote.".format(nick)) var.LOGGER.logMessage("{0} retracted his/her vote.".format(nick))
var.LAST_VOTES = None # reset
break break
else: else:
cli.notice(nick, "You haven't voted yet.") cli.notice(nick, "You haven't voted yet.")
@ -2140,8 +2149,8 @@ def show_admins(cli, nick, chan, rest):
if (var.LAST_ADMINS and if (var.LAST_ADMINS and
var.LAST_ADMINS + timedelta(seconds=var.ADMINS_RATE_LIMIT) > datetime.now()): var.LAST_ADMINS + timedelta(seconds=var.ADMINS_RATE_LIMIT) > datetime.now()):
cli.notice(chan, (nick+": This command is ratelimited. " + cli.notice(nick, ("This command is rate-limited. " +
"Please wait a while before using it again.")) "Please wait a while before using it again."))
return return
var.LAST_ADMINS = datetime.now() var.LAST_ADMINS = datetime.now()

Loading…
Cancel
Save