コード例 #1
0
ファイル: say.py プロジェクト: dimaguy/NOW
 def func(self):
     """Run the say command"""
     char = self.character
     here = char.location if char else None
     account = self.account
     opt = self.switches
     args = self.args.strip()
     if not (here and char):
         if args:
             account.execute_cmd('pub %s' % args)
         else:
             account.msg('Usage: say <message>   to speak on public channel.')
         return
     if not args:
         account.execute_cmd("help say")
         return
     if 'verb' in opt:
         char.attributes.add('say-verb', args)
         here.msg_contents(text=('{char} warms up vocally with "%s|n"' % escape_braces(args),
                                 {'type': 'pose', 'action': True}),
                           from_obj=char, mapping=dict(char=char))
         return
     if 'quote' in opt:
         if len(args) > 2:
             char.quote = args  # Not yet implemented.
             return
     else:
         speech = args
         verb = char.attributes.get('say-verb') if char.attributes.has('say-verb') else 'says'
         if 'ooc' in opt:
             here.msg_contents(text=('[OOC] {char} says, "|w%s|n"' % escape_braces(speech),
                                     {'type': 'say', 'ooc': True}), from_obj=char, mapping=dict(char=char))
             if here.has_account:
                 here.msg(text=('[OOC] %s says, "|w%s|n"' % (char.get_display_name(here), escape_braces(speech)),
                                {'type': 'say', 'ooc': True}), from_obj=char)
         else:
             here.msg_contents(text=('{char} %s, "|w%s|n"' % (escape_braces(verb), escape_braces(speech)),
                                     {'type': 'say'}), from_obj=char, mapping=dict(char=char))
             if here.has_account:
                 here.msg(text=('From inside you, %s %s, "|w%s|n"' %
                                (char.get_display_name(here), escape_braces(verb),
                                 escape_braces(speech)), {'type': 'say'}), from_obj=char)
コード例 #2
0
ファイル: say.py プロジェクト: dimaguy/NOW
 def func(self):
     """Run the ooc command"""
     char = self.character
     account = self.account
     here = char.location
     args = self.args.strip()
     if not args:
         account.execute_cmd('help ooc')
         return
     elif args[0] == '"' or args[0] == "'":
         account.execute_cmd('say/o ' + args[1:])
     elif args[0] == ':' or args[0] == ';':
         account.execute_cmd('pose/o %s' % args[1:])
     else:
         here.msg_contents(text=('[OOC {char}] %s' % escape_braces(args), {'type': 'ooc', 'ooc': True}),
                           from_obj=char, mapping=dict(char=char))
         if here.has_account:
             here.msg(text=('[OOC %s] %s' %
                            (char.get_display_name(here), escape_braces(args)),
                            {'type': 'ooc', 'ooc': True}), from_obj=char)
コード例 #3
0
ファイル: verbs.py プロジェクト: Pinacolada64/NOW
 def get(self):
     """Implements the attempt to get this object."""
     too_heavy, too_large = self.s.get_limit() < self.o.get_mass(), False
     pose = self.s.ndb.pose
     if self.s == self.o:
         self.s.msg("%sYou|n can't get yourself." % self.s.STYLE)
     elif self.o.location == self.s:
         self.s.msg("%sYou|n already have %s." % (self.s.STYLE, self.o.get_display_name(self.s)))
     elif too_heavy:
         self.s.msg("%sYou|n can't lift %s; it is too heavy." % (self.s.STYLE, self.o.get_display_name(self.s)))
     elif too_large:
         self.s.msg("%sYou|n can lift %s, but it is too large to carry." %
                    (self.s.STYLE, self.o.get_display_name(self.s)))
     elif self.o.move_to(self.s, quiet=True):
         self.s.location.msg_contents('%s|g%s|n gets {it}.' % (escape_braces(pose), self.s.key),
                                      from_obj=self.s, mapping=dict(it=self.o))
         self.o.at_get(self.s)  # calling hook method
コード例 #4
0
ファイル: verbs.py プロジェクト: tricuspa/current
 def get(self):
     """Implements the attempt to get this object."""
     too_heavy, too_large = self.s.get_limit() < self.o.get_mass(), False
     pose = self.s.ndb.pose
     if self.s == self.o:
         self.s.msg("%sYou|n can't get yourself." % self.s.STYLE)
     elif self.o.location == self.s:
         self.s.msg("%sYou|n already have %s." %
                    (self.s.STYLE, self.o.get_display_name(self.s)))
     elif too_heavy:
         self.s.msg("%sYou|n can't lift %s; it is too heavy." %
                    (self.s.STYLE, self.o.get_display_name(self.s)))
     elif too_large:
         self.s.msg("%sYou|n can lift %s, but it is too large to carry." %
                    (self.s.STYLE, self.o.get_display_name(self.s)))
     elif self.o.move_to(self.s, quiet=True):
         self.s.location.msg_contents('%s|g%s|n gets {it}.' %
                                      (escape_braces(pose), self.s.key),
                                      from_obj=self.s,
                                      mapping=dict(it=self.o))
         self.o.at_get(self.s)  # calling hook method
コード例 #5
0
 def func(self):
     """Basic pose, power pose, room posing - all in one"""
     cmd = self.cmdstring
     opt = self.switches
     args = unicode(self.args).strip()
     lhs, rhs = self.lhs, self.rhs
     sess = self.session
     char = self.character
     account = self.account
     here = char.location if char else None
     power = True if cmd in ('ppose', 'pp', 'p:') else False
     raw_pose = rhs if rhs and cmd == 'do' or power else args
     raw_pose = substitute_objects(raw_pose, char)
     non_space_chars = ['®', '©', '°', '·', '~', '@', '-', "'", '’', ',', ';', ':', '.', '?', '!', '…']
     magnet = True if raw_pose and raw_pose[0] in non_space_chars or cmd == ";" else False
     doing = True if 'do' in cmd or 'rp' in cmd else False
     pose = ('' if magnet else '|_') + (ansi.strip_ansi(raw_pose) if doing else raw_pose)
     # ---- Setting Room poses as a doing message ----------
     if doing:  # Pose will have no markup when posing on the room, to minimize shenanigans.
         target = char  # Initially assume the setting character is the target.
         if not args and 'reset' not in opt:
             has_pose = char.db.messages and char.db.messages.get('pose')
             if has_pose:  # If target has poses set, display them to the setter.
                 char.msg("Current pose reads: '%s'" % target.get_display_name(char, pose=True))
                 default_pose = target.db.messages and target.db.messages.get('pose_default') or None
                 if default_pose:
                     char.msg('Default pose is \'%s%s\'' % (char.get_display_name(char), default_pose))
                 else:
                     char.msg('Default pose not set.')
             else:
                 char.msg('No pose has been set.|/Usage: rp <pose-text> OR pose <obj> = <pose-text>')
             return
         if len(pose) > 60:  # Pose length in characters, not counting the poser's name.
             char.msg('Your pose is too long.')
             return
         if rhs:  # pose something else other than self.
             target = char.search(lhs)  # Search for a reference to the target.
             if not target:
                 return
             if pose:
                 self.set_doing(char, pose, target)  # Try to set the pose of the target.
         else:  # pose self.
             target = char
         if 'reset' in opt:  # Clears current temp doing, reverts it to default.
             pose = target.db.messages and target.db.messages.get('pose_default', '')
             if not target.db.messages:
                 target.db.messages = {}
             target.db.messages['pose'] = pose
         elif 'default' in opt:  # Sets doing pose default.
             self.set_doing(char, pose, target, True)  # True means "set default", not temp doing.
             char.msg("Default pose is now: '%s%s'" % (target.get_display_name(char), pose))
             return  # Nothing more to do. Default never poses to room, just sets doing message.
         elif not rhs:
             self.set_doing(char, pose)  # Setting temp doing message on the setter...
             if args and not ('silent' in opt or 'quiet' in opt) and char is target:  # Allow set without posing
                 # FIXME: Do not execute the pose if not permitted to room pose it.
                 account.execute_cmd(';%s' % pose, session=sess)  # pose to the room like a normal pose would.
                 # return  # Having executed the pose in a different way, work in this command instance is done.
         char.msg("Pose now set to: '%s'" % target.get_display_name(char, pose=True))  # Display name with pose.
     else:  # ---- Action pose, not static Room Pose. ---------------------
         if '|/' in pose:
             pose = pose.split('|/', 1)[0]
         if 'magnet' in opt:
             char.msg("Pose magnet glyphs are %s." % non_space_chars)
         if not (here and char):
             if args:
                 account.execute_cmd('pub :%s' % pose, session=sess)
             else:
                 self.msg('Usage: pose <message>   to pose to public channel.')
             return
         if args:
             if power and self.rhs and 'o' not in self.switches:
                 char.ndb.power_pose = pose
                 account.execute_cmd(self.rhs, session=sess)
             else:
                 ooc = 'ooc' in self.switches
                 prepend_ooc = '[OOC] ' if ooc else ''
                 here.msg_contents(('%s{char}%s' % (prepend_ooc, escape_braces(pose)),
                                    {'type': 'pose', 'ooc': ooc}),
                                   from_obj=char, mapping=dict(char=char))
         else:
             account.execute_cmd('help pose', session=sess)
コード例 #6
0
ファイル: say.py プロジェクト: dimaguy/NOW
 def func(self):
     """Run the spoof command"""
     char = self.character
     here = char.location
     opt = self.switches
     args = self.args
     to_self = 'self' in opt or not here
     if not args:
         self.account.execute_cmd('help spoof')
         return
     # Optionally strip any markup /or/ just escape it,
     stripped = ansi.strip_ansi(args)
     spoof = stripped if 'strip' in opt else args.replace('|', '||')
     if 'indent' in opt:
         indent = 20
         if self.rhs:
             args = self.lhs.strip()
             indent = re.sub("[^0123456789]", '', self.rhs) or 20
             indent = int(indent)
         if to_self:
             char.msg(' ' * indent + args.rstrip())
         else:
             here.msg_contents(text=(' ' * indent + escape_braces(args.rstrip()), {'type': 'spoof'}))
     elif 'right' in opt or 'center' in opt or 'news' in opt:
         if self.rhs is not None:  # Equals sign exists.
             parameters = '' if not self.rhs else self.rhs.split()
             args = self.lhs.strip()
             if len(parameters) > 1:
                 if len(parameters) == 2:
                     outside, inside = self.rhs.split()
                 else:
                     outside, inside = [parameters[0], parameters[1]]
                 outside = re.sub("[^0123456789]", '', outside) or 0
                 inside = re.sub("[^0123456789]", '', inside) or 0
                 outside, inside = [int(max(outside, inside)), int(min(outside, inside))]
             else:
                 outside, inside = [72, 20]
         else:
             outside, inside = [72, min(int(self.rhs or 72), 20)]
         block = 'r' if 'right' in opt else 'f'
         block = 'c' if 'center' in opt else block
         for text in justify(args, width=outside, align=block, indent=inside).split('\n'):
             if to_self:
                 char.msg(text.rstrip())
             else:
                 here.msg_contents(text=(escape_braces(text.rstrip()), {'type': 'spoof'}))
     else:
         if 'strip' in opt:  # Optionally strip any markup or escape it,
             if to_self:
                 char.msg(spoof.rstrip(), options={'raw': True})
             else:
                 here.msg_contents(text=(escape_braces(spoof.rstrip()), {'type': 'spoof'}), options={'raw': True})
         elif 'dot' in opt:  # Leave leading spacing intact, remove leading dot.
             spoof = args.lstrip('.')
             if to_self:
                 char.msg(spoof.rstrip(), options={'raw': True})
             else:
                 here.msg_contents(text=(escape_braces(spoof.rstrip()), {'type': 'spoof'}), options={'raw': True})
         else:
             if to_self:
                 char.msg(args.rstrip())
             else:
                 here.msg_contents(text=(escape_braces(spoof.rstrip()), {'type': 'spoof'}))
コード例 #7
0
    def func(self):
        """Basic pose, power pose, room posing - all in one"""
        cmd = self.cmdstring
        opt = self.switches
        args = unicode(self.args).strip()
        lhs, rhs = self.lhs, self.rhs
        char = self.character
        account = self.account
        here = char.location if char else None
        power = True if self.cmdstring == 'ppose' or self.cmdstring == 'pp' or self.cmdstring == 'p:' else False

        def parse_pose(text):
            return_text = []
            for each in text.split():
                match = None
                new_each = each
                word_end = ''
                if each.startswith('/'):  # A possible substitution to test
                    if each.endswith('/'):  # Skip this one, it's /italic/
                        return_text.append(new_each)
                        continue
                    search_word = each[1:]
                    if search_word.startswith('/'):  # Skip this one, it's being escaped
                        new_each = each[1:]
                    else:  # Marked for substitution, try to find a match
                        if "'" in each:  # Test for possessive or contraction:  's  (apostrophe before end of grouping)
                            pass
                        if each[-1] in ".,!?":
                            search_word, word_end = search_word[:-1], each[-1]
                        match = char.search(search_word, quiet=True)
                return_text.append(new_each if not match else (match[0].get_display_name(char) + word_end))
            return ' '.join(return_text)

        raw_pose = rhs if rhs and power else args
        raw_pose = parse_pose(raw_pose)
        non_space_chars = ['®', '©', '°', '·', '~', '@', '-', "'", '’', ',', ';', ':', '.', '?', '!', '…']
        magnet = True if raw_pose and raw_pose[0] in non_space_chars or cmd == ";" else False
        doing = True if 'do' in cmd or 'rp' in cmd else False
        pose = ('' if magnet else '|_') + (ansi.strip_ansi(raw_pose) if doing else raw_pose)
        # ---- Setting Room poses as a doing message ----------
        if doing:  # Pose will have no markup when posing on the room, to minimize shenanigans.
            target = char  # Initially assume the setting character is the target.
            if not args and 'reset' not in opt:
                has_pose = char.db.messages and char.db.messages.get('pose')
                if has_pose:  # If target has poses set, display them to the setter.
                    char.msg("Current pose reads: '%s'" % target.get_display_name(char, pose=True))
                    default_pose = target.db.messages and target.db.messages.get('pose_default') or None
                    if default_pose:
                        char.msg('Default pose is \'%s%s\'' % (char.get_display_name(char), default_pose))
                    else:
                        char.msg('Default pose not set.')
                else:
                    char.msg('No pose has been set.|/Usage: rp <pose-text> OR pose <obj> = <pose-text>')
                return
            if len(pose) > 60:  # Pose length in characters, not counting the poser's name.
                char.msg('Your pose is too long.')
                return
            if rhs:  # pose something else other than self.
                target = char.search(lhs)  # Search for a reference to the target.
                if not target:
                    return
                if pose:
                    self.set_doing(char, pose, target)  # Try to set the pose of the target.
            else:  # pose self.
                target = char
            if 'reset' in opt:  # Clears current temp doing, reverts it to default.
                pose = target.db.messages and target.db.messages.get('pose_default', '')
                if not target.db.messages:
                    target.db.messages = {}
                target.db.messages['pose'] = pose
            elif 'default' in opt:  # Sets doing pose default.
                self.set_doing(char, pose, target, True)  # True means "set default", not temp doing.
                char.msg("Default pose is now: '%s%s'" % (target.get_display_name(char), pose))
                return  # Nothing more to do. Default never poses to room, just sets doing message.
            elif not rhs:
                self.set_doing(char, pose)  # Setting temp doing message on the setter...
                if args and not ('silent' in opt or 'quiet' in opt) and char is target:  # Allow set without posing
                    account.execute_cmd(';%s' % pose)  # pose to the room like a normal pose would.
            char.msg("Pose now set to: '%s'" % target.get_display_name(char, pose=True))  # Display name with pose.
        else:  # ---- Action pose, not static Room Pose. ---------------------
            if '|/' in pose:
                pose = pose.split('|/', 1)[0]
            if 'magnet' in opt:
                char.msg("Pose magnet glyphs are %s." % non_space_chars)
            if not (here and char):
                if args:
                    account.execute_cmd('pub :%s' % pose)
                else:
                    account.msg('Usage: pose <message>   to pose to public channel.')
                return
            if args:
                if power and self.rhs and 'o' not in self.switches:
                    char.ndb.power_pose = pose
                    account.execute_cmd(self.rhs)
                else:
                    ooc = 'ooc' in self.switches
                    prepend_ooc = '[OOC] ' if ooc else ''
                    here.msg_contents(('%s{char}%s' % (prepend_ooc, escape_braces(pose)),
                                       {'type': 'pose', 'ooc': ooc}),
                                      from_obj=char, mapping=dict(char=char))
            else:
                account.execute_cmd('help pose')
コード例 #8
0
ファイル: say.py プロジェクト: Nyni/current
 def func(self):
     """Run the spoof command"""
     char = self.character
     cmd = self.cmdstring
     here = char.location
     opt = self.switches
     args = self.args
     to_self = 'self' in opt or not here
     if not args:
         self.account.execute_cmd('help spoof', session=self.session)
         return
     # Optionally strip any markup /or/ just escape it,
     stripped = ansi.strip_ansi(args)
     spoof = stripped if 'strip' in opt else args.replace('|', '||')
     if 'indent' in opt:
         indent = 20
         if self.rhs:
             args = self.lhs.strip()
             indent = re.sub("[^0123456789]", '', self.rhs) or 20
             indent = int(indent)
         if to_self:
             char.msg(' ' * indent + args.rstrip())
         else:
             here.msg_contents(text=(' ' * indent + escape_braces(args.rstrip()), {'type': 'spoof'}))
     elif 'right' in opt or 'center' in opt or 'news' in opt:  # Use Justify
         if self.rhs is not None:  # Equals sign exists.
             parameters = '' if not self.rhs else self.rhs.split()
             args = self.lhs.strip()
             if len(parameters) > 1:
                 if len(parameters) == 2:
                     outside, inside = self.rhs.split()
                 else:
                     outside, inside = [parameters[0], parameters[1]]
                 outside = re.sub("[^0123456789]", '', outside) or 0
                 inside = re.sub("[^0123456789]", '', inside) or 0
                 outside, inside = [int(max(outside, inside)), int(min(outside, inside))]
             else:
                 outside, inside = [72, 20]
         else:
             outside, inside = [72, min(int(self.rhs or 72), 20)]
         block = 'l'
         if 'right' in opt:
             block = 'r'
         elif 'center' in opt:
             block = 'c'
         elif 'news' in opt:
             block = 'f'
         for text in justify(args, width=outside, align=block, indent=inside).split('\n'):
             if to_self:
                 char.msg(text.rstrip())
             else:
                 here.msg_contents(text=(escape_braces(text.rstrip()), {'type': 'spoof'}))
     else:
         if 'strip' in opt:  # Optionally strip any markup or escape it,
             if to_self:
                 char.msg(spoof.rstrip(), options={'raw': True})
             else:
                 here.msg_contents(text=(escape_braces(spoof.rstrip()), {'type': 'spoof'}), options={'raw': True})
         elif '.' in cmd:  # Leave leading spacing intact by using self.raw and not stripping left whitespace
             # Adding <pre> and </pre> to all output in case one of the viewers is using webclient
             spoof = self.raw.rstrip()
             if to_self:
                 char.msg(('<code>' + spoof + '</code>', {'type': 'spoof'}), options={'raw': True})
             else:
                 here.msg_contents(text=('<code>' + spoof + '</code>', {'type': 'spoof'}), options={'raw': True})
         else:
             if to_self:
                 char.msg(args.rstrip())
             else:
                 here.msg_contents(text=(escape_braces(spoof.rstrip()), {'type': 'spoof'}))