Rework timers to track when they started and how long they last so \!time can be more accurate. Closes #42
This commit is contained in:
parent
a73b891b8d
commit
b2d5d15606
@ -97,10 +97,10 @@ var.OPPED = False # Keeps track of whether the bot is opped
|
||||
if botconfig.DEBUG_MODE:
|
||||
var.NIGHT_TIME_LIMIT = 0 # 120
|
||||
var.NIGHT_TIME_WARN = 0 # 90
|
||||
var.DAY_TIME_LIMIT_WARN = 0 # 600
|
||||
var.DAY_TIME_LIMIT_CHANGE = 0 # 120
|
||||
var.SHORT_DAY_LIMIT_WARN = 0 # 400
|
||||
var.SHORT_DAY_LIMIT_CHANGE = 0 # 120
|
||||
var.DAY_TIME_LIMIT = 0 # 720
|
||||
var.DAY_TIME_WARN = 0 # 600
|
||||
var.SHORT_DAY_LIMIT = 0 # 520
|
||||
var.SHORT_DAY_WARN = 0 # 400
|
||||
var.KILL_IDLE_TIME = 0 # 300
|
||||
var.WARN_IDLE_TIME = 0 # 180
|
||||
var.JOIN_TIME_LIMIT = 0
|
||||
@ -187,7 +187,7 @@ def reset_settings():
|
||||
def reset_modes_timers(cli):
|
||||
# Reset game timers
|
||||
for x, timr in var.TIMERS.items():
|
||||
timr.cancel()
|
||||
timr[0].cancel()
|
||||
var.TIMERS = {}
|
||||
|
||||
# Reset modes
|
||||
@ -451,7 +451,7 @@ def join(cli, nick, chann_, rest):
|
||||
# Set join timer
|
||||
if var.JOIN_TIME_LIMIT:
|
||||
t = threading.Timer(var.JOIN_TIME_LIMIT, kill_join, [cli, chan])
|
||||
var.TIMERS['join'] = t
|
||||
var.TIMERS['join'] = (t, time.time(), var.JOIN_TIME_LIMIT)
|
||||
t.daemon = True
|
||||
t.start()
|
||||
|
||||
@ -713,15 +713,6 @@ def hurry_up(cli, gameid, change):
|
||||
"time remains for them to reach a decision; if darkness falls before they have done " +
|
||||
"so, the majority will win the vote. No one will be lynched if there " +
|
||||
"are no votes or an even split.\02"))
|
||||
if not var.DAY_TIME_LIMIT_CHANGE:
|
||||
return
|
||||
if (len(var.list_players()) <= var.SHORT_DAY_PLAYERS):
|
||||
tmr = threading.Timer(var.SHORT_DAY_LIMIT_CHANGE, hurry_up, [cli, var.DAY_ID, True])
|
||||
else:
|
||||
tmr = threading.Timer(var.DAY_TIME_LIMIT_CHANGE, hurry_up, [cli, var.DAY_ID, True])
|
||||
tmr.daemon = True
|
||||
var.TIMERS["day"] = tmr
|
||||
tmr.start()
|
||||
return
|
||||
|
||||
|
||||
@ -1389,27 +1380,27 @@ def del_player(cli, nick, forced_death = False, devoice = True, end_game = True,
|
||||
del var.CLONED[nick]
|
||||
|
||||
if nickrole == "time lord":
|
||||
if "DAY_TIME_LIMIT_WARN" not in var.ORIGINAL_SETTINGS:
|
||||
var.ORIGINAL_SETTINGS["DAY_TIME_LIMIT_WARN"] = var.DAY_TIME_LIMIT_WARN
|
||||
if "DAY_TIME_LIMIT_CHANGE" not in var.ORIGINAL_SETTINGS:
|
||||
var.ORIGINAL_SETTINGS["DAY_TIME_LIMIT_CHANGE"] = var.DAY_TIME_LIMIT_CHANGE
|
||||
if "SHORT_DAY_LIMIT_WARN" not in var.ORIGINAL_SETTINGS:
|
||||
var.ORIGINAL_SETTINGS["SHORT_DAY_LIMIT_WARN"] = var.SHORT_DAY_LIMIT_WARN
|
||||
if "SHORT_DAY_LIMIT_CHANGE" not in var.ORIGINAL_SETTINGS:
|
||||
var.ORIGINAL_SETTINGS["SHORT_DAY_LIMIT_CHANGE"] = var.SHORT_DAY_LIMIT_CHANGE
|
||||
if "DAY_TIME_LIMIT" not in var.ORIGINAL_SETTINGS:
|
||||
var.ORIGINAL_SETTINGS["DAY_TIME_LIMIT"] = var.DAY_TIME_LIMIT
|
||||
if "DAY_TIME_WARN" not in var.ORIGINAL_SETTINGS:
|
||||
var.ORIGINAL_SETTINGS["DAY_TIME_WARN"] = var.DAY_TIME_WARN
|
||||
if "SHORT_DAY_LIMIT" not in var.ORIGINAL_SETTINGS:
|
||||
var.ORIGINAL_SETTINGS["SHORT_DAY_LIMIT"] = var.SHORT_DAY_LIMIT
|
||||
if "SHORT_DAY_WARN" not in var.ORIGINAL_SETTINGS:
|
||||
var.ORIGINAL_SETTINGS["SHORT_DAY_WARN"] = var.SHORT_DAY_WARN
|
||||
if "NIGHT_TIME_LIMIT" not in var.ORIGINAL_SETTINGS:
|
||||
var.ORIGINAL_SETTINGS["NIGHT_TIME_LIMIT"] = var.NIGHT_TIME_LIMIT
|
||||
if "NIGHT_TIME_WARN" not in var.ORIGINAL_SETTINGS:
|
||||
var.ORIGINAL_SETTINGS["NIGHT_TIME_WARN"] = var.NIGHT_TIME_WARN
|
||||
var.DAY_TIME_LIMIT_WARN = var.TIME_LORD_DAY_WARN
|
||||
var.DAY_TIME_LIMIT_CHANGE = var.TIME_LORD_DAY_CHANGE
|
||||
var.SHORT_DAY_LIMIT_WARN = var.TIME_LORD_DAY_WARN
|
||||
var.SHORT_DAY_LIMIT_CHANGE = var.TIME_LORD_DAY_CHANGE
|
||||
var.DAY_TIME_LIMIT = var.TIME_LORD_DAY_LIMIT
|
||||
var.DAY_TIME_WARN = var.TIME_LORD_DAY_WARN
|
||||
var.SHORT_DAY_LIMIT = var.TIME_LORD_DAY_LIMIT
|
||||
var.SHORT_DAY_WARN = var.TIME_LORD_DAY_WARN
|
||||
var.NIGHT_TIME_LIMIT = var.TIME_LORD_NIGHT_LIMIT
|
||||
var.NIGHT_TIME_WARN = var.TIME_LORD_NIGHT_WARN
|
||||
cli.msg(botconfig.CHANNEL, ("Tick tock! Since the time lord has died, " +
|
||||
"day will now only last {0} seconds and night will now only " +
|
||||
"last {1} seconds!").format(var.TIME_LORD_DAY_WARN + var.TIME_LORD_DAY_CHANGE, var.TIME_LORD_NIGHT_LIMIT))
|
||||
"last {1} seconds!").format(var.TIME_LORD_DAY_LIMIT, var.TIME_LORD_NIGHT_LIMIT))
|
||||
if nickrole == "vengeful ghost":
|
||||
if var.GHOSTPHASE == "night":
|
||||
var.VENGEFUL_GHOSTS[nick] = "wolves"
|
||||
@ -1895,15 +1886,28 @@ def begin_day(cli):
|
||||
var.LOGGER.logMessage(msg)
|
||||
var.LOGGER.logBare("DAY", "BEGIN")
|
||||
|
||||
if var.DAY_TIME_LIMIT_WARN > 0: # Time limit enabled
|
||||
var.DAY_ID = time.time()
|
||||
if var.DAY_TIME_WARN > 0:
|
||||
if var.STARTED_DAY_PLAYERS <= var.SHORT_DAY_PLAYERS:
|
||||
t = threading.Timer(var.SHORT_DAY_LIMIT_WARN, hurry_up, [cli, var.DAY_ID, False])
|
||||
t1 = threading.Timer(var.SHORT_DAY_WARN, hurry_up, [cli, var.DAY_ID, False])
|
||||
l = var.SHORT_DAY_WARN
|
||||
else:
|
||||
t = threading.Timer(var.DAY_TIME_LIMIT_WARN, hurry_up, [cli, var.DAY_ID, False])
|
||||
var.TIMERS["day_warn"] = t
|
||||
t.daemon = True
|
||||
t.start()
|
||||
t1 = threading.Timer(var.DAY_TIME_WARN, hurry_up, [cli, var.DAY_ID, False])
|
||||
l = var.DAY_TIME_WARN
|
||||
var.TIMERS["day_warn"] = (t1, var.DAY_ID, l)
|
||||
t1.daemon = True
|
||||
t1.start()
|
||||
|
||||
if var.DAY_TIME_LIMIT > 0: # Time limit enabled
|
||||
if var.STARTED_DAY_PLAYERS <= var.SHORT_DAY_PLAYERS:
|
||||
t2 = threading.Timer(var.SHORT_DAY_LIMIT, hurry_up, [cli, var.DAY_ID, True])
|
||||
l = var.SHORT_DAY_LIMIT
|
||||
else:
|
||||
t2 = threading.Timer(var.DAY_TIME_LIMIT, hurry_up, [cli, var.DAY_ID, True])
|
||||
l = var.DAY_TIME_LIMIT
|
||||
var.TIMERS["day"] = (t2, var.DAY_ID, l)
|
||||
t2.daemon = True
|
||||
t2.start()
|
||||
|
||||
def night_warn(cli, gameid):
|
||||
if gameid != var.NIGHT_ID:
|
||||
@ -2263,7 +2267,7 @@ def chk_nightdone(cli):
|
||||
return
|
||||
|
||||
for x, t in var.TIMERS.items():
|
||||
t.cancel()
|
||||
t[0].cancel()
|
||||
|
||||
var.TIMERS = {}
|
||||
if var.PHASE == "night": # Double check
|
||||
@ -3425,7 +3429,7 @@ def transition_night(cli):
|
||||
var.GHOSTPHASE = "night"
|
||||
|
||||
for x, tmr in var.TIMERS.items(): # cancel daytime timer
|
||||
tmr.cancel()
|
||||
tmr[0].cancel()
|
||||
var.TIMERS = {}
|
||||
|
||||
# Reset nighttime variables
|
||||
@ -3464,14 +3468,14 @@ def transition_night(cli):
|
||||
if var.NIGHT_TIME_LIMIT > 0:
|
||||
var.NIGHT_ID = time.time()
|
||||
t = threading.Timer(var.NIGHT_TIME_LIMIT, transition_day, [cli, var.NIGHT_ID])
|
||||
var.TIMERS["night"] = t
|
||||
var.TIMERS["night"].daemon = True
|
||||
var.TIMERS["night"] = (t, var.NIGHT_ID, var.NIGHT_TIME_LIMIT)
|
||||
t.daemon = True
|
||||
t.start()
|
||||
|
||||
if var.NIGHT_TIME_WARN > 0:
|
||||
t2 = threading.Timer(var.NIGHT_TIME_WARN, night_warn, [cli, var.NIGHT_ID])
|
||||
var.TIMERS["night_warn"] = t2
|
||||
var.TIMERS["night_warn"].daemon = True
|
||||
var.TIMERS["night_warn"] = (t2, var.NIGHT_ID, var.NIGHT_TIME_WARN)
|
||||
t2.daemon = True
|
||||
t2.start()
|
||||
|
||||
# convert amnesiac and kill village elder if necessary
|
||||
@ -3948,7 +3952,7 @@ def start(cli, nick, chann_, rest):
|
||||
|
||||
# Cancel join timer
|
||||
if 'join' in var.TIMERS:
|
||||
var.TIMERS['join'].cancel()
|
||||
var.TIMERS['join'][0].cancel()
|
||||
del var.TIMERS['join']
|
||||
|
||||
if var.ORIGINAL_SETTINGS: # Custom settings
|
||||
@ -4469,29 +4473,18 @@ def timeleft(cli, nick, chan, rest):
|
||||
if chan != nick:
|
||||
var.LAST_TIME = datetime.now()
|
||||
|
||||
if var.PHASE in var.TIMERS:
|
||||
t = var.TIMERS[var.PHASE]
|
||||
remaining = int((t[1] + t[2]) - time.time())
|
||||
if var.PHASE == "day":
|
||||
if var.STARTED_DAY_PLAYERS <= var.SHORT_DAY_PLAYERS:
|
||||
remaining = int((var.SHORT_DAY_LIMIT_WARN +
|
||||
var.SHORT_DAY_LIMIT_CHANGE) - (datetime.now() -
|
||||
var.DAY_START_TIME).total_seconds())
|
||||
what = "sunset"
|
||||
elif var.PHASE == "night":
|
||||
what = "sunrise"
|
||||
elif var.PHASE == "join":
|
||||
what = "game is canceled"
|
||||
msg = "There is \u0002{0[0]:0>2}:{0[1]:0>2}\u0002 remaining until {1}.".format(divmod(remaining, 60), what)
|
||||
else:
|
||||
remaining = int((var.DAY_TIME_LIMIT_WARN +
|
||||
var.DAY_TIME_LIMIT_CHANGE) - (datetime.now() -
|
||||
var.DAY_START_TIME).total_seconds())
|
||||
else:
|
||||
remaining = int(var.NIGHT_TIME_LIMIT - (datetime.now() -
|
||||
var.NIGHT_START_TIME).total_seconds())
|
||||
|
||||
#Check if timers are actually enabled
|
||||
if (var.PHASE == "day") and ((var.STARTED_DAY_PLAYERS <= var.SHORT_DAY_PLAYERS and
|
||||
var.SHORT_DAY_LIMIT_WARN == 0) or (var.DAY_TIME_LIMIT_WARN == 0 and
|
||||
var.STARTED_DAY_PLAYERS > var.SHORT_DAY_PLAYERS)):
|
||||
msg = "Day timers are currently disabled."
|
||||
elif var.PHASE == "night" and var.NIGHT_TIME_LIMIT == 0:
|
||||
msg = "Night timers are currently disabled."
|
||||
else:
|
||||
msg = "There is \x02{0[0]:0>2}:{0[1]:0>2}\x02 remaining until {1}.".format(
|
||||
divmod(remaining, 60), "sunrise" if var.PHASE == "night" else "sunset")
|
||||
msg = "{0} timers are currently disabled.".format(var.PHASE.capitalize())
|
||||
|
||||
if nick == chan:
|
||||
pm(cli, nick, msg)
|
||||
|
@ -18,16 +18,16 @@ MAX_PLAYERS = 21
|
||||
DRUNK_SHOTS_MULTIPLIER = 3
|
||||
NIGHT_TIME_LIMIT = 120
|
||||
NIGHT_TIME_WARN = 90 # should be less than NIGHT_TIME_LIMIT
|
||||
DAY_TIME_LIMIT_WARN = 600
|
||||
DAY_TIME_LIMIT_CHANGE = 120 # seconds after DAY_TIME_LIMIT_WARN has passed
|
||||
DAY_TIME_LIMIT = 720
|
||||
DAY_TIME_WARN = 600 # should be less than DAY_TIME_LIMIT
|
||||
JOIN_TIME_LIMIT = 3600
|
||||
# May only be set if the above are also set
|
||||
SHORT_DAY_PLAYERS = 6 # Number of players left to have a short day
|
||||
SHORT_DAY_LIMIT_WARN = 400
|
||||
SHORT_DAY_LIMIT_CHANGE = 120
|
||||
# If time lord is lynched, the timers get set to this instead (60s day, 30s night)
|
||||
SHORT_DAY_LIMIT = 520
|
||||
SHORT_DAY_WARN = 400
|
||||
# If time lord dies, the timers get set to this instead (60s day, 30s night)
|
||||
TIME_LORD_DAY_LIMIT = 60
|
||||
TIME_LORD_DAY_WARN = 45
|
||||
TIME_LORD_DAY_CHANGE = 15
|
||||
TIME_LORD_NIGHT_LIMIT = 30
|
||||
TIME_LORD_NIGHT_WARN = 20
|
||||
KILL_IDLE_TIME = 300
|
||||
|
Loading…
Reference in New Issue
Block a user