Esempio n. 1
0
def cmd_summon(s, r):
    '''summon <character>|<mob class>

    If the name or id# given is an existing player or mob, this
        will act like: teleport <character> to <here>.

    If the name does not exist already, but is a mob class, this
        will be like: clone <mobclass>.

    '''

    room = s.room
    objname = r.get('objname', '')
    objtzid = r.get('objtzid', 0)

    char = players.getname(objname) or players.get(objtzid) or \
                mobs.getname(objname) or mobs.get(objtzid)

    if char is not None:
        char.teleport(room)
        s.message('You summon', char, '.')

    elif objname in mobs.classes():
        mob = _clone_mob(s, objname, objtzid)
        s.message('You summon', mob, '.')

    else:
        iden = objname if objname else '#%s' % objtzid
        s.message('Unable to summon', iden, '.')
Esempio n. 2
0
    def login(self, r):
        'Log a player in if possible.'

        try:
            player_name, pwtext = r.split()
        except ValueError:
            self.simessage('Must log in with "login <name> <password>"')
        else:
            player = players.getname(player_name)
            if player is None:
                self.simessage('Incorrect user name or password.')
                self.login_failures += 1
                print 'player', player_name, 'does not exist'
            elif player.logged_in:
                if player.check_password(pwtext):
                    self.simessage('Player already logged in.')
                    if conf.auto_purge:
                        self._purge(player)
                        self.login(r)
                    else:
                        self.simessage('Use "purge <name> <password>" to disconnect other session.')
                        print 'player', player.name, 'already logged in'
                else:
                    self.simessage('Incorrect user name or password.')
                    print 'player', player.name, 'wrong password'
                    self.login_failures += 1
            else:
                try:
                    # if this doesn't fail, then that player is still logging out...
                    print self.factory._player_protocols[player_name] 
                    try:
                        reactor.callLater(0.1, self.login, r)
                    except:
                        print 'tzprotocol :: login :: callLater :: fail'
                except:
                    if player.check_password(pwtext):
                    #if True:
                        self.logged_in = True
                        player.logged_in = True
                        self.player = player
                        player.last = time.time()
                        player.following = None
                        self.factory._player_protocols[player_name] = self

                        wizard.cmd_teleport(self, {})
                        reactor.callLater(0.6, actions.cmd_look, self,
                                            dict(verb='look'))
                        print 'player', player.name, 'logged in'
                    else:
                        self.simessage('Incorrect user name or password.')
                        print 'player', player.name, 'wrong password'
                        self.login_failures += 1

            if self.login_failures >= 3:
                self.transport.loseConnection()
Esempio n. 3
0
    def purge(self, r):
        'Disconnect other session with this account logged in.'

        try:
            player_name, pwtext = r.split()
        except ValueError:
            self.simessage('Incorrect user name or password.')
        else:
            player = players.getname(player_name)
            if player.check_password(pwtext):
                if player.logged_in:
                    self._purge(player)
                    self.simessage('Connection purged.')
                    self.simessage('Log in with "login <name> <password>"')
                else:
                    self.simessage('Player is not logged in.')
            else:
                self.simessage('Incorrect user name or password.')
Esempio n. 4
0
    def create(self, r):
        'Create a new account.'

        try:
            player_name, pwtext = r.split()
        except ValueError:
            self.simessage('Create account with "create <name> <password>"')
        else:
            existing = players.getname(player_name)
            if existing:
                self.simessage('Name already in use.')
            elif player_name=='quit':
                self.simessage('Cannot use the name "quit"')
            else:
                player = players.Player(player_name)
                player.set_password(pwtext)
                if len(players.ls()) == 1:
                    admin.add(player)

                self.simessage('Account created.')
                self.simessage('Log in with "login <name> <password>"')
Esempio n. 5
0
    def who(cls):
        'Return list of names of players connected right now.'

        names = cls.factory._player_protocols.keys()
        return [players.getname(name) for name in names]
Esempio n. 6
0
def cmd_teleport(s, r=None):
    '''teleport [to [<room>|<character>]] OR teleport <object> to <room>

    Teleport self to the named room or character, or if no name is given
        teleport self to home, OR

    Teleport the object to the room.

    '''

    room = s.room
    player = s.player
    if room is not None:
        room.action(dict(act='teleport', actor=player))

    objname = r.get('objname', '')
    objtzid = r.get('objtzid', 0)

    destname = r.get('obj2name', '')
    desttzid = r.get('obj2tzid', 0)

    if (objname or objtzid) and (destname or desttzid):
        destination = rooms.getname(destname) or rooms.get(desttzid)
        if destination is None:
            s.message('No such place.')
            return

        obj = find(r, room, player, room) or \
                players.getname(objname) or players.get(objtzid) or \
                mobs.getname(objname) or mobs.get(objtzid) or \
                tzindex.get(objtzid)
        if obj is None:
            s.message('No such object.')
        elif obj._bse == 'Room':
            s.message('You cannot teleport a room.')
        else:
            obj.teleport(destination)
            s.message('You teleport', obj, '.')

    elif not (destname or desttzid):
        # send the player home
        player.teleport()

    else:
        destination = rooms.getname(destname) or \
                        rooms.get(desttzid)

        if destination is None:
            toplayer = players.getname(destname) or \
                        players.get(desttzid)

            if toplayer is not None:
                destination = toplayer.room
                if destination is None:
                    s.message('Player is not logged in.')
                    return
            else:
                tomob = mobs.getname(destname) or \
                        mobs.get(desttzid)

                if tomob is not None:
                    destination = tomob.room
                else:
                    s.message('No such room or character.')
                    return

        player.teleport(destination)
Esempio n. 7
0
    def who(cls):
        'Return list of names of players connected right now.'

        names = cls.factory._player_protocols.keys()
        return [unicode(players.getname(name))+'\t'+players.getname(name).room.name for name in names]