def func(self): """hook function""" player = self.player bye = '|RDisconnecting|n' exit_msg = 'Hope to see you again, soon.' if self.args.strip(): bye += " ( |w%s\n ) " % self.args.strip() if 'all' in self.switches: msg = bye + ' all sessions. ' + exit_msg player.msg(msg, session=self.session) for session in player.sessions.all(): player.disconnect_session_from_player(session) else: nsess = len(player.sessions.all()) if nsess == 2: msg = bye + '. One session is still connected.' player.msg(msg, session=self.session) elif nsess > 2: msg = bye + ". %i sessions are still connected." player.msg(msg % (nsess - 1), session=self.session) else: # If quitting the last available session, give connect time. online = utils.time_format(time.time() - self.session.conn_time, 1) msg = bye + ' after ' + online + ' online. ' + exit_msg player.msg(msg, session=self.session) player.disconnect_session_from_player(self.session)
def get_time_and_season(self): """ Calculate the current time and seasons ids. """ # get the current time as parts of year and parts of day # returns a tuple (years,months,weeks,days,hour,minutes,sec) time = utils.time_format(gametime.gametime(absolute=True), style=3) month, hour = time[1], time[4] season = float(month) / MONTHS_PER_YEAR timeslot = float(hour) / HOURS_PER_DAY # figure out which slots these represent if SEASONAL_BOUNDARIES[0] <= season < SEASONAL_BOUNDARIES[1]: curr_season = "spring" elif SEASONAL_BOUNDARIES[1] <= season < SEASONAL_BOUNDARIES[2]: curr_season = "summer" elif SEASONAL_BOUNDARIES[2] <= season < 1.0 + SEASONAL_BOUNDARIES[0]: curr_season = "autumn" else: curr_season = "winter" if DAY_BOUNDARIES[0] <= timeslot < DAY_BOUNDARIES[1]: curr_timeslot = "night" elif DAY_BOUNDARIES[1] <= timeslot < DAY_BOUNDARIES[2]: curr_timeslot = "morning" elif DAY_BOUNDARIES[2] <= timeslot < DAY_BOUNDARIES[3]: curr_timeslot = "afternoon" else: curr_timeslot = "evening" return curr_season, curr_timeslot
def func(self): """hook function""" player = self.player bye = '|RDisconnecting|n' exit_msg = 'Hope to see you again, soon.' if self.args.strip(): bye += " ( |w%s\n ) " % self.args.strip() if 'all' in self.switches: msg = bye + ' all sessions. ' + exit_msg player.msg(msg, session=self.session) for session in player.sessions.all(): player.disconnect_session_from_player(session) else: nsess = len(player.sessions.all()) if nsess == 2: msg = bye + '. One session is still connected.' player.msg(msg, session=self.session) elif nsess > 2: msg = bye + ". %i sessions are still connected." player.msg(msg % (nsess - 1), session=self.session) else: # If quitting the last available session, give connect time. online = utils.time_format( time.time() - self.session.conn_time, 1) msg = bye + ' after ' + online + ' online. ' + exit_msg player.msg(msg, session=self.session) player.disconnect_session_from_player(self.session)
def at_look_session_menu(self): sessions = self.owner.sessions.all() message = list() message.append(self.subheader('Sessions')) sesstable = self.make_table(['ID', 'Protocol', 'Address', 'Connected'], width=[7, 22, 22, 27]) for session in sessions: conn_duration = time.time() - session.conn_time sesstable.add_row(session.sessid, session.protocol_key, isinstance(session.address, tuple) and str(session.address[0]) or str( session.address), utils.time_format(conn_duration, 0)) message.append(sesstable) # message.append(separator()) return message
def func(self): """Implements viewing visitor log for this object.""" char = self.character # cmd = self.cmdstring loc = char.location # account = self.account args = self.args # lhs, rhs = self.lhs, self.rhs # opt = self.switches obj_list = char.search( args, quiet=True, candidates=[loc] + loc.contents + char.contents) if args else [char] if not obj_list: _AT_SEARCH_RESULT(obj_list, char, args, quiet=False) return # Trying to audit something that isn't there. "Could not find ''." obj = obj_list[0] obj_name = obj.get_display_name(char) hosted = obj.db.hosted if hosted: import time from evennia.utils import utils, evtable now = int(time.time()) table = evtable.EvTable(border='none', pad_width=0, border_width=0, maxwidth=79) table.add_header(obj_name, '|wTimes', '|cLast', '|gFrom') table.reformat_column(0, width=25, align='l') table.reformat_column(1, width=7, align='c') table.reformat_column(2, width=35, align='l') table.reformat_column(3, width=25, pad_right=1, align='l') for each in hosted: delta_t = now - hosted[each][0] v_name = each.get_display_name(char) v_count = hosted[each][2] from_name = hosted[each][1].get_display_name( char) if hosted[each][1] else '|where|n' table.add_row(v_name, v_count, utils.time_format(delta_t, 2), from_name) self.msg('[begin] Audit showing visits to:') self.msg(table) self.msg('[end] Audit of {}'.format(obj_name)) else: self.msg('No audit information for {}.'.format(obj_name))
def test_style_3(self): """Test the style 3 of time_format.""" self.assertEqual(utils.time_format(0, 3), "") self.assertEqual(utils.time_format(28, 3), "28 seconds") self.assertEqual(utils.time_format(92, 3), "1 minute 32 seconds") self.assertEqual(utils.time_format(300, 3), "5 minutes 0 seconds") self.assertEqual(utils.time_format(660, 3), "11 minutes 0 seconds") self.assertEqual(utils.time_format(3600, 3), "1 hour, 0 minutes") self.assertEqual(utils.time_format(3725, 3), "1 hour, 2 minutes 5 seconds") self.assertEqual(utils.time_format(86350, 3), "23 hours, 59 minutes 10 seconds") self.assertEqual(utils.time_format(86800, 3), "1 day, 0 hours, 6 minutes 40 seconds") self.assertEqual(utils.time_format(130800, 3), "1 day, 12 hours, 20 minutes 0 seconds") self.assertEqual(utils.time_format(530800, 3), "6 days, 3 hours, 26 minutes 40 seconds")
def test_style_2(self): """Test the style 2 of time_format.""" self.assertEqual(utils.time_format(0, 2), "0 minutes") self.assertEqual(utils.time_format(28, 2), "0 minutes") self.assertEqual(utils.time_format(92, 2), "1 minute") self.assertEqual(utils.time_format(300, 2), "5 minutes") self.assertEqual(utils.time_format(660, 2), "11 minutes") self.assertEqual(utils.time_format(3600, 2), "1 hour, 0 minutes") self.assertEqual(utils.time_format(3725, 2), "1 hour, 2 minutes") self.assertEqual(utils.time_format(86350, 2), "23 hours, 59 minutes") self.assertEqual(utils.time_format(86800, 2), "1 day, 0 hours, 6 minutes") self.assertEqual(utils.time_format(130800, 2), "1 day, 12 hours, 20 minutes") self.assertEqual(utils.time_format(530800, 2), "6 days, 3 hours, 26 minutes")
def test_style_1(self): """Test the style 1 of time_format.""" self.assertEqual(utils.time_format(0, 1), "0s") self.assertEqual(utils.time_format(28, 1), "28s") self.assertEqual(utils.time_format(92, 1), "1m") self.assertEqual(utils.time_format(300, 1), "5m") self.assertEqual(utils.time_format(660, 1), "11m") self.assertEqual(utils.time_format(3600, 1), "1h") self.assertEqual(utils.time_format(3725, 1), "1h") self.assertEqual(utils.time_format(86350, 1), "23h") self.assertEqual(utils.time_format(86800, 1), "1d") self.assertEqual(utils.time_format(130800, 1), "1d") self.assertEqual(utils.time_format(530800, 1), "6d")
def func(self): session_list = SESSIONS.get_sessions() session_list = sorted(session_list, key=lambda ses: ses.get_puppet().name) titles1 = ('Artisan GM', 'Assassin GM', 'Druid GM', 'Fighter GM', 'Harbinger GM', 'Helotyr GM', 'Mage GM', 'Merchant GM', 'Monk GM', 'Ranger GM', 'Samurai GM', 'Sarthoar GM', 'Shaman GM', 'Sorcerer GM', 'Templar GM', 'Thief GM', 'Trader GM', 'Warrior GM', 'Chief', 'Sherrif', 'Gumi Commander', 'Editor in Chief', 'Chief Justice', 'Tribune Prime', 'Head Magistrate') titles2 = ('Artisan AGM', 'Assassin AGM', 'Druid AGM', 'Fighter AGM', 'Harbinger AGM', 'Helotyr AGM', 'Mage AGM', 'Merchant AGM', 'Monk AGM', 'Ranger AGM', 'Samurai AGM', 'Sarthoar AGM', 'Shaman AGM', 'Sorcerer AGM', 'Templar AGM', 'Thief AGM', 'Trader AGM', 'Warrior AGM', 'Vice Chief', 'Under-Sheriff', 'Gumi Captain', 'Editor', 'Justice', 'Tribune', 'Magistrate') titles3 = ('Medjai', 'Gumi', 'Deputy', 'Reporter', 'Kingdom Attorney', 'Aedile', 'Champion') titles4 = ('Barrister', 'Advocari', 'Counseler') titles5 = ('Field Marshal', 'Legate', 'Gensui') titles6 = ('General', 'Prefect', 'Taisho') titles7 = ('Colonel', 'Captain', 'Lieutenant', 'First Sergeant', 'Sergent', 'Corporal', 'Private', 'Recruit', 'First Centurion', 'Centurion', 'Decurion', 'Optio', 'Tressario', 'Decanus', 'Legionaire', 'Discens', 'Taisa', 'Tai', 'Chui', 'Socho', 'Gunso', 'Heicho', 'Ittohei', 'Nitohei') self.caller.msg( "----------------------======] |CMercadia|n [======----------------------" ) self.caller.msg(datetime.datetime.now().strftime( " %a %b %d %H:%M:%S %Y Mercadian Time")) self.caller.msg(" Mercadia uptime: %s. " % utils.time_format(gametime.uptime(), 3)) self.caller.msg( "----------------------======] |315Admin|n [======----------------------" ) self.caller.msg(" Revrwn, |305Administrator|n ") self.caller.msg( "----------------------======] |115Staff|n [======----------------------" ) self.caller.msg(" Jennifer, |405Chief of Staff ") self.caller.msg(" Dominic, |045Administrative Staff ") self.caller.msg(" Tiffany, |045Administrative Staff ") self.caller.msg(" Corry, |045Administrative Staff ") self.caller.msg( "----------------------======] |550Characters|n [======----------------------" ) for session in session_list: puppet = session.get_puppet() name = puppet.name gender = puppet.db.gender race = puppet.db.race guild = puppet.db.guild owner = puppet.db.owner title = puppet.db.title slaveentry = ", %s of %s" % (guild, owner) guildentry = ", %s" % guild if title in titles1: title = ", |300%s|n" % title elif title in titles2: title = ", |500%s|n" % title elif title in titles3: title = ", |510%s|n" % title elif title in titles4: title = ", |152%s|n" % title elif title in titles5: title = ", |203%s|n" % title elif title in titles6: title = ", |213%s|n" % title elif title in titles7: title = ", |223%s|n" % title else: title = " " if guild: guild = guildentry else: guild = guild if owner: guild = slaveentry if name in ('Roy', 'Jennifer', 'Dominic', 'Tiffany', 'Corry'): continue else: self.caller.msg( " %s %s %s%s %s" % (name.capitalize(), gender, race, guild, title)) self.caller.msg( "----------------------======] |555Online|n [======----------------------" ) self.caller.msg(" There are currently %s Players Online" % (SESSIONS.account_count())) self.caller.msg( "----------------------======]|C***************|n[======----------------------" ) if self.args in ("kingdom", 'caliphate', 'empire'): self.caller.msg( "----------------------======] |CMercadia|n [======----------------------" ) self.caller.msg(datetime.datetime.now().strftime( " %a %b %d %H:%M:%S %Y Mercadian Time")) self.caller.msg(" Mercadia uptime: %s. " % utils.time_format(gametime.uptime(), 3)) self.caller.msg( "----------------------======] |315Admin|n [======----------------------" ) self.caller.msg(" Revrwn, |305Administrator|n ") self.caller.msg( "----------------------======] |115Staff|n [======----------------------" ) self.caller.msg(" Jennifer, |405Chief of Staff ") self.caller.msg(" Dominic, |045Administrative Staff ") self.caller.msg(" Tiffany, |045Administrative Staff ") self.caller.msg(" Corry, |045Administrative Staff ") self.caller.msg( "----------------------======] |550Characters|n [======----------------------" ) for session in session_list: puppet = session.get_puppet() name = puppet.name gender = puppet.db.gender race = puppet.db.race guild = puppet.db.guild owner = puppet.db.owner title = puppet.db.title nation = puppet.db.nation slaveentry = ", %s of %s" % (guild, owner) guildentry = ", %s" % guild if title in titles1: title = ", |300%s|n" % title elif title in titles2: title = ", |500%s|n" % title elif title in titles3: title = ", |510%s|n" % title elif title in titles4: title = ", |152%s|n" % title elif title in titles5: title = ", |203%s|n" % title elif title in titles6: title = ", |213%s|n" % title elif title in titles7: title = ", |223%s|n" % title else: title = " " if guild: guild = guildentry else: guild = guild if owner: guild = slaveentry if name in ('Roy', 'Jennifer', 'Dominic', 'Tiffany', 'Corry'): continue elif self.args.capitalize() not in nation: continue else: self.caller.msg( " %s %s %s%s %s" % (name.capitalize(), gender, race, guild, title)) self.caller.msg( "----------------------======] |555Online|n [======----------------------" ) self.caller.msg( " There are currently %s Players Online" % (SESSIONS.account_count())) self.caller.msg( "----------------------======]|C***************|n[======----------------------" ) if self.args in ('human', 'elf', 'dwarf', 'gnome', 'centaur', 'ogryn', 'drow', 'duergar', 'svirfneblin', 'wemic', 'drakkar', 'ursine', 'feline', 'lupine', 'vulpine', 'naga', 'wisp'): self.caller.msg( "----------------------======] |CMercadia|n [======----------------------" ) self.caller.msg(datetime.datetime.now().strftime( " %a %b %d %H:%M:%S %Y Mercadian Time")) self.caller.msg(" Mercadia uptime: %s. " % utils.time_format(gametime.uptime(), 3)) self.caller.msg( "----------------------======] |315Admin|n [======----------------------" ) self.caller.msg(" Revrwn, |305Administrator|n ") self.caller.msg( "----------------------======] |115Staff|n [======----------------------" ) self.caller.msg(" Jennifer, |405Chief of Staff ") self.caller.msg(" Dominic, |045Administrative Staff ") self.caller.msg(" Tiffany, |045Administrative Staff ") self.caller.msg(" Corry, |045Administrative Staff ") self.caller.msg( "----------------------======] |550Characters|n [======----------------------" ) for session in session_list: puppet = session.get_puppet() name = puppet.name gender = puppet.db.gender race = puppet.db.race guild = puppet.db.guild owner = puppet.db.owner title = puppet.db.title nation = puppet.db.nation slaveentry = ", %s of %s" % (guild, owner) guildentry = ", %s" % guild if title in titles1: title = ", |300%s|n" % title elif title in titles2: title = ", |500%s|n" % title elif title in titles3: title = ", |510%s|n" % title elif title in titles4: title = ", |152%s|n" % title elif title in titles5: title = ", |203%s|n" % title elif title in titles6: title = ", |213%s|n" % title elif title in titles7: title = ", |223%s|n" % title else: title = " " if guild: guild = guildentry else: guild = guild if owner: guild = slaveentry if name in ('Roy', 'Jennifer', 'Dominic', 'Tiffany', 'Corry'): continue elif self.args.capitalize() not in race: continue else: self.caller.msg( " %s %s %s%s %s" % (name.capitalize(), gender, race, guild, title)) self.caller.msg( "----------------------======] |555Online|n [======----------------------" ) self.caller.msg( " There are currently %s Players Online" % (SESSIONS.account_count())) self.caller.msg( "----------------------======]|C***************|n[======----------------------" )
def test_style_0(self): """Test the style 0 of time_format.""" self.assertEqual(utils.time_format(0, 0), "00:00") self.assertEqual(utils.time_format(28, 0), "00:00") self.assertEqual(utils.time_format(92, 0), "00:01") self.assertEqual(utils.time_format(300, 0), "00:05") self.assertEqual(utils.time_format(660, 0), "00:11") self.assertEqual(utils.time_format(3600, 0), "01:00") self.assertEqual(utils.time_format(3725, 0), "01:02") self.assertEqual(utils.time_format(86350, 0), "23:59") self.assertEqual(utils.time_format(86800, 0), "1d 00:06") self.assertEqual(utils.time_format(130800, 0), "1d 12:20") self.assertEqual(utils.time_format(530800, 0), "6d 03:26")
def off_or_conn_time(self): conn = self.owner.connection_time if conn is None: return '|XOff|n' return time_format(conn, style=1)
def off_or_idle_time(self, viewer): idle = self.owner.idle_time if idle is None or not viewer.time.can_see(self.owner): return '|XOff|n' return time_format(idle, style=1)
def func(self): """Get all connected players by polling session.""" player = self.player session_list = SESSIONS.get_sessions() session_list = sorted(session_list, key=lambda o: o.player.key) show_session_data = player.check_permstring( 'Immortals') if 'f' in self.switches else False nplayers = (SESSIONS.player_count()) if 'f' in self.switches or 'full' in self.switches: if show_session_data: # privileged info - who/f by wizard or immortal table = prettytable.PrettyTable([ "|wPlayer Name", "|wOn for", "|wIdle", "|wCharacter", "|wRoom", "|wCmds", "|wProtocol", "|wHost" ]) for session in session_list: if not session.logged_in: continue delta_cmd = time.time() - session.cmd_last_visible delta_conn = time.time() - session.conn_time player = session.get_player() puppet = session.get_puppet() location = puppet.location.key if puppet else 'None' table.add_row([ utils.crop(player.name, width=25), utils.time_format(delta_conn, 0), utils.time_format(delta_cmd, 1), utils.crop(puppet.key if puppet else 'None', width=25), utils.crop(location, width=25), session.cmd_total, session.protocol_key, isinstance(session.address, tuple) and session.address[0] or session.address ]) else: # unprivileged info - who/f by player table = prettytable.PrettyTable( ["|wCharacter", "|wOn for", "|wIdle", "|wLocation"]) for session in session_list: if not session.logged_in: continue delta_cmd = time.time() - session.cmd_last_visible delta_conn = time.time() - session.conn_time character = session.get_puppet() location = character.location.key if character and character.location else 'None' table.add_row([ utils.crop( character.key if character else '- Unknown -', width=25), utils.time_format(delta_conn, 0), utils.time_format(delta_cmd, 1), utils.crop(location, width=25) ]) else: if 's' in self.switches or 'species' in self.switches or self.cmdstring == 'ws': my_character = self.caller.get_puppet(self.session) if not (my_character and my_character.location): self.msg("You can't see anyone here.") return table = prettytable.PrettyTable( ["|wCharacter", "|wOn for", "|wIdle", "|wSpecies"]) for session in session_list: character = session.get_puppet() # my_character = self.caller.get_puppet(self.session) if not session.logged_in or character.location != my_character.location: continue delta_cmd = time.time() - session.cmd_last_visible delta_conn = time.time() - session.conn_time character = session.get_puppet() species = character.attributes.get('species', default='- None -') table.add_row([ utils.crop( character.key if character else '- Unknown -', width=25), utils.time_format(delta_conn, 0), utils.time_format(delta_cmd, 1), utils.crop(species, width=25) ]) else: # unprivileged info - who table = prettytable.PrettyTable( ["|wCharacter", "|wOn for", "|wIdle"]) for session in session_list: if not session.logged_in: continue delta_cmd = time.time() - session.cmd_last_visible delta_conn = time.time() - session.conn_time character = session.get_puppet() table.add_row([ utils.crop( character.key if character else '- Unknown -', width=25), utils.time_format(delta_conn, 0), utils.time_format(delta_cmd, 1) ]) isone = nplayers == 1 string = "%s\n%s " % (table, 'A' if isone else nplayers) string += 'single' if isone else 'unique' plural = '' if isone else 's' string += " account%s logged in." % plural self.msg(string)
def test_style_4(self): """Test the style 4 of time_format.""" self.assertEqual(utils.time_format(0, 4), "0 seconds") self.assertEqual(utils.time_format(28, 4), "28 seconds") self.assertEqual(utils.time_format(92, 4), "a minute") self.assertEqual(utils.time_format(300, 4), "5 minutes") self.assertEqual(utils.time_format(660, 4), "11 minutes") self.assertEqual(utils.time_format(3600, 4), "an hour") self.assertEqual(utils.time_format(3725, 4), "an hour") self.assertEqual(utils.time_format(86350, 4), "23 hours") self.assertEqual(utils.time_format(86800, 4), "a day") self.assertEqual(utils.time_format(130800, 4), "a day") self.assertEqual(utils.time_format(530800, 4), "6 days") self.assertEqual(utils.time_format(3030800, 4), "a month") self.assertEqual(utils.time_format(7030800, 4), "2 months") self.assertEqual(utils.time_format(40030800, 4), "a year") self.assertEqual(utils.time_format(90030800, 4), "2 years")
#------------------------------------------------------------ # Command line interface #------------------------------------------------------------ if __name__ == '__main__': try: settings.DUMMYRUNNER_MIXIN except AttributeError: print(ERROR_NO_MIXIN) sys.exit() # parsing command line with default vals parser = ArgumentParser(description=HELPTEXT) parser.add_argument("-N", nargs=1, default=1, dest="nclients", help="Number of clients to start") args = parser.parse_args() print(INFO_STARTING.format(N=args.nclients[0])) # run the dummyrunner t0 = time.time() start_all_dummy_clients(nclients=args.nclients[0]) ttot = time.time() - t0 # output runtime print("... dummy client runner stopped after %s." % time_format(ttot, style=3))
def off_or_conn_time(self, viewer): conn = self.owner.connection_time if conn is None or not viewer.time.can_see(self.owner): return '|XOff|n' return time_format(conn, style=1)
def off_or_idle_time(self): idle = self.owner.idle_time if idle is None: return '|XOff|n' return time_format(idle, style=1)
def last_or_conn_time(self, viewer): conn = self.owner.connection_time last = self.config.last_played if not conn: return viewer.time.display(date=last, format='%b %d') return time_format(conn, style=1)
def last_or_idle_time(self, viewer): idle = self.owner.idle_time last = self.config.last_played if not idle: return viewer.time.display(date=last, format='%b %d') return time_format(idle, style=1)
#------------------------------------------------------------ if __name__ == '__main__': try: settings.DUMMYRUNNER_MIXIN except AttributeError: print(ERROR_NO_MIXIN) sys.exit() # parsing command line with default vals parser = ArgumentParser(description=HELPTEXT) parser.add_argument("-N", nargs=1, default=1, dest="nclients", help="Number of clients to start") args = parser.parse_args() print(INFO_STARTING.format(N=args.nclients[0])) # run the dummyrunner t0 = time.time() start_all_dummy_clients(nclients=args.nclients[0]) ttot = time.time() - t0 # output runtime print("... dummy client runner stopped after %s." % time_format(ttot, style=3))
def collect_stats(caller, room): """ Extract score from caller and room Args: caller (Character): The player. room (EvScapeRoom): The current Room. stats (dict): Returns: data (dict): Gathered data. """ stats = room.db.stats progress = stats['progress'] if progress < 50: progress_txt = f"|r{progress}%|n" elif 50 <= progress < 100: progress_txt = f"|y{progress}%|n" else: # 100% progress_txt = f"|g{progress}%|n" score = sum(val for val in stats['score'].values()) max_score = stats['max_score'] room_achievements = [] # hints used hints_used = stats['hints_used'] hints_total = stats['hints_total'] # we adjust score by the number of hints needed adjusted_score = min(max_score, max(0, score - hints_used * 5)) adjusted_score = int(adjusted_score * (progress / 100)) adjusted_percent = int((adjusted_score / max_score) * 100) if adjusted_percent < 50: adjusted_percent_txt = f"|r{adjusted_percent}%|n" elif 50 <= adjusted_percent < 100: adjusted_percent_txt = f"|y{adjusted_percent}%|n" else: # 100% adjusted_percent_txt = f"|g{adjusted_percent}%|n" # we maxed score - worth an achievement if adjusted_percent >= 100: room_achievements.append("|wNo stone unturned|n - |xMaxed the score|n") # we 'maxed' hints, why not an achievement if hints_used >= hints_total: room_achievements.append("|wInglorious|n - |xUsed ALL hints|n") if not room_achievements: room_achievements = ["None"] # answers to questions question1 = room.check_character_flag(caller, "question1") question2 = room.check_character_flag(caller, "question2") question3 = room.check_character_flag(caller, "question3") # eventual extra room flags roomflags = room.db.flags # total time played in this room roomtime = time_format((timezone.now() - room.db_date_created).seconds, style=3) # individual achievements achievements = caller.attributes.get("achievements", category=room.tagcategory, default={}) if not achievements: achievements = ["(None, zilch, de nada)"] else: achievements = [ "|w{}|n - |x{}|n".format(key, subtxt) for key, subtxt in achievements.items() ] # this can also be fed directly into the scoreboard data = dict(char_name=caller.key, char_desc=caller.db.desc, roomname=room.key, roomtime=roomtime, hints_used=hints_used, hints_total=hints_total, score=score, max_score=max_score, adjusted_score=adjusted_score, adjusted_score_percent=adjusted_percent, adjusted_percent_txt=adjusted_percent_txt, progress=progress, progress_txt=progress_txt, charname=caller.key, room_achievements="\n".join(room_achievements), achievement_count=len(achievements), achievement_max=12, achievements="\n".join(achievements), roomflags=roomflags, question1=question1, question2=question2, question3=question3) return data
def func(self): """Get all connected players by polling session.""" player = self.player session_list = SESSIONS.get_sessions() session_list = sorted(session_list, key=lambda o: o.player.key) show_session_data = player.check_permstring('Immortals') if 'f' in self.switches else False nplayers = (SESSIONS.player_count()) if 'f' in self.switches or 'full' in self.switches: if show_session_data: # privileged info - who/f by wizard or immortal table = prettytable.PrettyTable(["|wPlayer Name", "|wOn for", "|wIdle", "|wCharacter", "|wRoom", "|wCmds", "|wProtocol", "|wHost"]) for session in session_list: if not session.logged_in: continue delta_cmd = time.time() - session.cmd_last_visible delta_conn = time.time() - session.conn_time player = session.get_player() puppet = session.get_puppet() location = puppet.location.key if puppet else 'None' table.add_row([utils.crop(player.name, width=25), utils.time_format(delta_conn, 0), utils.time_format(delta_cmd, 1), utils.crop(puppet.key if puppet else 'None', width=25), utils.crop(location, width=25), session.cmd_total, session.protocol_key, isinstance(session.address, tuple) and session.address[0] or session.address]) else: # unprivileged info - who/f by player table = prettytable.PrettyTable(["|wCharacter", "|wOn for", "|wIdle", "|wLocation"]) for session in session_list: if not session.logged_in: continue delta_cmd = time.time() - session.cmd_last_visible delta_conn = time.time() - session.conn_time character = session.get_puppet() location = character.location.key if character and character.location else 'None' table.add_row([utils.crop(character.key if character else '- Unknown -', width=25), utils.time_format(delta_conn, 0), utils.time_format(delta_cmd, 1), utils.crop(location, width=25)]) else: if 's' in self.switches or 'species' in self.switches or self.cmdstring == 'ws': my_character = self.caller.get_puppet(self.session) if not (my_character and my_character.location): self.msg("You can't see anyone here.") return table = prettytable.PrettyTable(["|wCharacter", "|wOn for", "|wIdle", "|wSpecies"]) for session in session_list: character = session.get_puppet() # my_character = self.caller.get_puppet(self.session) if not session.logged_in or character.location != my_character.location: continue delta_cmd = time.time() - session.cmd_last_visible delta_conn = time.time() - session.conn_time character = session.get_puppet() species = character.attributes.get('species', default='- None -') table.add_row([utils.crop(character.key if character else '- Unknown -', width=25), utils.time_format(delta_conn, 0), utils.time_format(delta_cmd, 1), utils.crop(species, width=25)]) else: # unprivileged info - who table = prettytable.PrettyTable(["|wCharacter", "|wOn for", "|wIdle"]) for session in session_list: if not session.logged_in: continue delta_cmd = time.time() - session.cmd_last_visible delta_conn = time.time() - session.conn_time character = session.get_puppet() table.add_row([utils.crop(character.key if character else '- Unknown -', width=25), utils.time_format(delta_conn, 0), utils.time_format(delta_cmd, 1)]) isone = nplayers == 1 string = "%s\n%s " % (table, 'A' if isone else nplayers) string += 'single' if isone else 'unique' plural = '' if isone else 's' string += " account%s logged in." % plural self.msg(string)
reactor.run() #------------------------------------------------------------ # Command line interface #------------------------------------------------------------ if __name__ == '__main__': try: settings.DUMMYRUNNER_MIXIN except AttributeError: print(ERROR_NO_MIXIN) sys.exit() # parsing command line with default vals parser = ArgumentParser(description=HELPTEXT) parser.add_argument("-N", nargs=1, default=1, dest="nclients", help="Number of clients to start") args = parser.parse_args() print(INFO_STARTING.format(N=args.nclients[0])) # run the dummyrunner t0 = time.time() start_all_dummy_clients(nclients=args.nclients[0]) ttot = time.time() - t0 # output runtime print("... dummy client runner stopped after %s." % time_format(ttot, style=3))