Improvements

- Make rapidfire more rapid by reducing timers and adding in time lord
- Correctly credit someone for a win if they die and THEN /part or /quit
  (someone that dies and is /kicked will not get a win, as that usually
  means they cheated or something.)
- Break up long messages (roles, player totals) at intelligent points.
This commit is contained in:
skizzerz 2014-08-12 22:30:10 -05:00
parent b39ecbace0
commit 84b2fdc24e
2 changed files with 27 additions and 3 deletions

View File

@ -1038,7 +1038,9 @@ def stop_game(cli, winner = ""):
roles_msg.append(msg.format(", ".join(nickslist),
playersinrole[-1],
var.plural(role)))
cli.msg(chan, " ".join(roles_msg))
message = ""
count = 0
cli.msg(chan, var.break_long_message(roles_msg))
done = {}
lovers = []
@ -1970,7 +1972,8 @@ def leave(cli, what, nick, why=""):
return
if var.PHASE == "none":
return
if nick in var.PLAYERS:
# only mark living players as dced, unless they were kicked
if nick in var.PLAYERS and (what == "kick" or nick in var.list_players()):
# must prevent double entry in var.ORIGINAL_ROLES
for r,rlist in var.ORIGINAL_ROLES.items():
if nick in rlist:

View File

@ -248,6 +248,22 @@ def get_templates(nick):
return tpl
def break_long_message(phrases, joinstr = " "):
message = ""
count = 0
for phrase in phrases:
# IRC max is 512, but freenode splits around 380ish, make 300 to have plenty of wiggle room
if count + len(joinstr) + len(phrase) > 300:
message += "\n" + phrase
count = len(phrase)
elif message == "":
message = phrase
count = len(phrase)
else:
message += joinstr + phrase
count += len(joinstr) + len(phrase)
return message
class InvalidModeException(Exception): pass
def game_mode(name):
def decor(c):
@ -360,6 +376,10 @@ class RapidFireMode(object):
self.MIN_PLAYERS = 6
self.MAX_PLAYERS = 25
self.SHARPSHOOTER_CHANCE = 1
self.DAY_TIME_LIMIT = 480
self.DAY_LIMIT_WARN = 360
self.SHORT_DAY_LIMIT = 240
self.SHORT_DAY_WARN = 180
self.ROLE_INDEX = ( 6 , 8 , 10 , 12 , 15 , 18 , 22 )
self.ROLE_GUIDE = reset_roles(self.ROLE_INDEX)
self.ROLE_GUIDE.update({# village roles
@ -368,6 +388,7 @@ class RapidFireMode(object):
"matchmaker" : ( 0 , 0 , 1 , 1 , 1 , 1 , 2 ),
"hunter" : ( 0 , 1 , 1 , 1 , 1 , 2 , 2 ),
"augur" : ( 0 , 0 , 0 , 0 , 1 , 1 , 1 ),
"time lord" : ( 0 , 0 , 1 , 1 , 1 , 2 , 2 ),
# wolf roles
"wolf" : ( 1 , 1 , 1 , 2 , 2 , 3 , 4 ),
"wolf cub" : ( 0 , 1 , 1 , 1 , 2 , 2 , 2 ),
@ -550,7 +571,7 @@ def get_player_totals(acc):
break
c.execute("SELECT SUM(totalgames) from rolestats WHERE player=? COLLATE NOCASE AND role!='cursed villager' AND role!='gunner'", (acc,))
row = c.fetchone()
return "\u0002{0}\u0002's totals | \u0002{1}\u0002 games | {2}".format(player[0], row[0], ", ".join(role_totals))
return "\u0002{0}\u0002's totals | \u0002{1}\u0002 games | {2}".format(player[0], row[0], break_long_message(role_totals, ", "))
else:
return "\u0002{0}\u0002 has not played any games.".format(acc)