Пример #1
0
    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)
Пример #2
0
    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
Пример #3
0
    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)
Пример #4
0
 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
Пример #5
0
 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))
Пример #6
0
 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")
Пример #7
0
 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")
Пример #8
0
 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")
Пример #9
0
    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[======----------------------"
            )
Пример #10
0
 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")
Пример #11
0
 def off_or_conn_time(self):
     conn = self.owner.connection_time
     if conn is None:
         return '|XOff|n'
     return time_format(conn, style=1)
Пример #12
0
 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)
Пример #13
0
 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)
Пример #14
0
 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")
Пример #15
0
 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")
Пример #16
0
 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")
Пример #17
0
 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")
Пример #18
0
 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")
Пример #19
0
#------------------------------------------------------------
# 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))
Пример #20
0
 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)
Пример #21
0
 def off_or_idle_time(self):
     idle = self.owner.idle_time
     if idle is None:
         return '|XOff|n'
     return time_format(idle, style=1)
Пример #22
0
 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)
Пример #23
0
 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)
Пример #24
0
#------------------------------------------------------------

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
Пример #26
0
 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)
Пример #27
0
    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))
Пример #28
0
 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")