Example #1
0
    def extractLoggingPlayer(player, save=True):
        if not AVATAR:
            return

        if save:
            if not player.party or not len(player.party.members):
                return

            from mud.worldserver.charutil import PLAYER_BUFFERS
            for pname, pbuffer, cbuffer, cvalues in PLAYER_BUFFERS[:]:
                if pname == player.publicName:
                    PLAYER_BUFFERS.remove((pname, pbuffer, cbuffer, cvalues))

            player.backupItems()
            publicName,pbuffer,cbuffer,cvalues = \
                ExtractPlayer(player.publicName,player.id, \
                    player.party.members[0].id,False)
            pbuffer = encodestring(dumps(pbuffer, 2))
            cbuffer = encodestring(dumps(cbuffer, 2))

            publicName = player.publicName
            player.destroySelf()
            try:
                user = User.byName(publicName)
                for r in user.roles:
                    r.removeUser(user)
                user.destroySelf()
            except:
                pass

            AVATAR.mind.callRemote("savePlayerBuffer",publicName,pbuffer, \
                cbuffer,cvalues,True)
        else:
            AVATAR.mind.callRemote("savePlayerBuffer",player.publicName,None, \
                None,None,True,False)
 def extractLoggingPlayer(player, save=True):
     if not AVATAR:
         return
     
     if save:
         if not player.party or not len(player.party.members):
             return
         
         from mud.worldserver.charutil import PLAYER_BUFFERS
         for pname,pbuffer,cbuffer,cvalues in PLAYER_BUFFERS[:]:
             if pname == player.publicName:
                 PLAYER_BUFFERS.remove((pname,pbuffer,cbuffer,cvalues))
         
         player.backupItems()
         publicName,pbuffer,cbuffer,cvalues = \
             ExtractPlayer(player.publicName,player.id, \
                 player.party.members[0].id,False)
         pbuffer = encodestring(dumps(pbuffer, 2))
         cbuffer = encodestring(dumps(cbuffer, 2))
         
         publicName = player.publicName
         player.destroySelf()
         try:
             user = User.byName(publicName)
             for r in user.roles:
                 r.removeUser(user)
             user.destroySelf()
         except:
             pass
         
         AVATAR.mind.callRemote("savePlayerBuffer",publicName,pbuffer, \
             cbuffer,cvalues,True)
     else:
         AVATAR.mind.callRemote("savePlayerBuffer",player.publicName,None, \
             None,None,True,False)
Example #3
0
        def shipPlayerBuffer(self, result):
            from mud.worldserver.charutil import PLAYER_BUFFERS
            from mud.world.cserveravatar import AVATAR

            done = not len(PLAYER_BUFFERS)

            try:
                if len(PLAYER_BUFFERS):
                    pname, pbuffer, cbuffer, cvalues = PLAYER_BUFFERS.pop(0)
                    pbuffer = encodestring(dumps(pbuffer, 2))
                    if cbuffer:
                        cbuffer = encodestring(dumps(cbuffer, 2))

                    print "Sending Player/Character buffers: %s (%ik/%ik)" % (
                        pname, len(pbuffer) / 1024, len(cbuffer) / 1024)
                    d = AVATAR.mind.callRemote(
                        "savePlayerBuffer", pname, pbuffer, cbuffer,
                        cvalues)  #xxx add callback/errback
                    d.addCallback(self.shipPlayerBuffer)
                    d.addErrback(self.shipPlayerBuffer)
            except:
                done = True  #abort
                self.perspective.callRemote("printException", format_exc())

            if done:
                self.perspective.callRemote("playersExported")
Example #4
0
        def shipPlayerBuffer(self,result):
            from mud.worldserver.charutil import PLAYER_BUFFERS
            from mud.world.cserveravatar import AVATAR

            done = not len(PLAYER_BUFFERS)

            try:
                if len(PLAYER_BUFFERS):
                    pname,pbuffer,cbuffer,cvalues = PLAYER_BUFFERS.pop(0)
                    pbuffer = encodestring(dumps(pbuffer, 2))
                    if cbuffer:
                        cbuffer = encodestring(dumps(cbuffer, 2))


                    print "Sending Player/Character buffers: %s (%ik/%ik)"%(pname,len(pbuffer)/1024,len(cbuffer)/1024)
                    d = AVATAR.mind.callRemote("savePlayerBuffer",pname,pbuffer,cbuffer,cvalues) #xxx add callback/errback
                    d.addCallback(self.shipPlayerBuffer)
                    d.addErrback(self.shipPlayerBuffer)
            except:
                done = True #abort
                self.perspective.callRemote("printException",format_exc())

            if done:
                self.perspective.callRemote("playersExported")
Example #5
0
    def tick():

        global TICK_COUNTER

        if not AVATAR:
            return  #not official

        #error?
        if not AVATAR.mind:
            return

        if AVATAR.world.shuttingDown:
            return

        try:

            now = sysTime()

            #ship off any player buffers from the last time

            try:
                from mud.worldserver.charutil import PLAYER_BUFFERS
                for pname, pbuffer, cbuffer, cvalues in PLAYER_BUFFERS[:]:
                    pbuf = encodestring(dumps(pbuffer, 2))
                    cbuf = None
                    if cbuffer:
                        cbuf = encodestring(dumps(cbuffer, 2))

                    print "Sending Player/Character buffers: %s (%ik/%ik)" % (
                        pname, len(pbuf) / 1024, len(cbuf) / 1024)
                    AVATAR.mind.callRemote("savePlayerBuffer", pname, pbuf,
                                           cbuf,
                                           cvalues)  #xxx add callback/errback
                    EXTRACT_TIMES[pname] = now
                    #should be removing these upon success
                    PLAYER_BUFFERS.remove((pname, pbuffer, cbuffer, cvalues))
            except:
                traceback.print_exc()

            TICK_COUNTER -= 3
            if TICK_COUNTER > 0:
                return

            TICK_COUNTER = 6 * 15  #once every minute

            pnames = []
            extractTarget = None
            best = 0
            for p in AVATAR.world.activePlayers:
                if not p.zone or p.enteringWorld:
                    continue

                pname = p.publicName
                pnames.append(pname)

                extractionTimer = EXTRACT_TIMES.setdefault(pname, now)
                t = now - extractionTimer

                if t < (60 * 10):
                    continue

                if t > best:
                    best = t
                    extractTarget = pname

            remove = []
            for k in EXTRACT_TIMES.iterkeys():
                if k not in pnames:
                    remove.append(k)
            map(EXTRACT_TIMES.__delitem__, remove)

            if extractTarget:
                p = Player.byPublicName(
                    extractTarget)  #already in active chars
                if p and p.party:
                    p.backupItems()
                    ExtractPlayer(p.publicName, p.id, p.party.members[0].id)
        except:
            traceback.print_exc()

        #send off all players

        try:
            pnames = []
            #it's still possible that the player is installed but isn't active
            #so 2 people sharing an account could still cause problems
            for p in AVATAR.world.activePlayers:
                cname = ""
                if p.curChar:
                    cname = p.curChar.name

                zname = ""
                if p.zone:
                    zname = p.zone.zone.niceName

                pnames.append((p.publicName, cname, p.guildName, zname))

            d = AVATAR.mind.callRemote("recordActivePlayers",
                                       AVATAR.world.multiName, pnames)
            d.addCallback(AVATAR.gotGlobalPlayers)

        except:
            traceback.print_exc()
    def tick():    
            
        global TICK_COUNTER
        
        if not AVATAR:
            return #not official
        
        #error?
        if not AVATAR.mind:
            return 
        
        if AVATAR.world.shuttingDown:
            return
        
        try:

            now = sysTime()
            
            #ship off any player buffers from the last time
            
            try:
                from mud.worldserver.charutil import PLAYER_BUFFERS
                for pname,pbuffer,cbuffer,cvalues in PLAYER_BUFFERS[:]:
                    pbuf = encodestring(dumps(pbuffer, 2))
                    cbuf = None
                    if cbuffer:
                        cbuf = encodestring(dumps(cbuffer, 2))

                    print "Sending Player/Character buffers: %s (%ik/%ik)"%(pname,len(pbuf)/1024,len(cbuf)/1024)
                    AVATAR.mind.callRemote("savePlayerBuffer",pname,pbuf,cbuf,cvalues) #xxx add callback/errback
                    EXTRACT_TIMES[pname]=now
                    #should be removing these upon success
                    PLAYER_BUFFERS.remove((pname,pbuffer,cbuffer,cvalues))
            except:
                traceback.print_exc()
            
            
            TICK_COUNTER -= 3
            if TICK_COUNTER > 0:
                return
            
            TICK_COUNTER = 6 * 15 #once every minute
            
            pnames = []
            extractTarget = None
            best = 0
            for p in AVATAR.world.activePlayers:
                if not p.zone or p.enteringWorld:
                    continue
                
                pname = p.publicName
                pnames.append(pname)
                
                extractionTimer = EXTRACT_TIMES.setdefault(pname,now)
                t = now - extractionTimer
                
                if t < (60 * 10):
                    continue
                
                if t > best:
                    best = t
                    extractTarget = pname
            
            remove = []
            for k in EXTRACT_TIMES.iterkeys():
                if k not in pnames:
                    remove.append(k)
            map(EXTRACT_TIMES.__delitem__,remove)
            
            if extractTarget:
                p = Player.byPublicName(extractTarget) #already in active chars
                if p and p.party:
                    p.backupItems()
                    ExtractPlayer(p.publicName,p.id,p.party.members[0].id)
        except:
            traceback.print_exc()
        
        #send off all players
        
        try:
            pnames = []
            #it's still possible that the player is installed but isn't active
            #so 2 people sharing an account could still cause problems
            for p in AVATAR.world.activePlayers:
                cname = ""
                if p.curChar:
                    cname = p.curChar.name
                
                zname = ""
                if p.zone:
                    zname = p.zone.zone.niceName
                
                pnames.append((p.publicName,cname,p.guildName,zname))
            
            d = AVATAR.mind.callRemote("recordActivePlayers",AVATAR.world.multiName,pnames)
            d.addCallback(AVATAR.gotGlobalPlayers)
        
        except:
            traceback.print_exc()