Exemplo n.º 1
0
    def updateListener(self, task):
        if self.listener.newConnectionAvailable():
            connection = PointerToConnection()
            if self.listener.getNewConnection(connection):
                connection = connection.p()
                connection.setNoDelay(True)
                self.connections.append(connection)
                self.reader.addConnection(connection)
                print "Server: New connection established."

                self.tempClientID = -1
                for client in range(0,len(direction)):
                    if direction[client] == -1:
                        direction[client] = 0
                        #print "Client ID ",client
                        self.tempClientID = client
                        break
                if self.tempClientID == -1:
                    print "Server is full, keeping connection but giving fake ID!"
                    
                reply = PyDatagram()
                reply.addUint8(42)
                reply.addInt8(self.tempClientID)
                self.writer.send(reply,connection)
                print "Giving new client ID: ",self.tempClientID
                
                
        return task.cont
Exemplo n.º 2
0
 def update_players(self, task):
     for ip, player in self.players.items():
         if player.do_move():
             datagram = PyDatagram()
             datagram.addInt8(player.pid)
             datagram.addFloat32(player.node.getX())
             datagram.addFloat32(player.node.getY())
             for conn in self.connections:
                 self.writer.send(datagram, conn)
     return task.cont
Exemplo n.º 3
0
 def update_players(self, task):
     for ip, player in self.players.items():
         if player.do_move():
             datagram = PyDatagram()
             datagram.addInt8(player.pid)
             datagram.addFloat32(player.node.getX())
             datagram.addFloat32(player.node.getY())
             for conn in self.connections:
                 self.writer.send(datagram, conn)
     return task.cont
Exemplo n.º 4
0
 def _crDatagram(self, msg):
     # create Datagram from message
     myPyDatagram = PyDatagram()
     myPyDatagram.addInt32(msg[SEQN])
     myPyDatagram.addInt32(msg[AKN])
     myPyDatagram.addInt16(msg[MSG_TYPE])
     myPyDatagram.addInt8(msg[OOL])
     if not msg[ENCODED]:
         myPyDatagram.addString(self.encode(msg[OAKN]))
         myPyDatagram.addString(self.encode(msg[DATA]))
     else:
         myPyDatagram.addString(msg[OAKN])
         myPyDatagram.addString(msg[DATA])
     return myPyDatagram
Exemplo n.º 5
0
    def process(self, data):
        #print "Got some data"
        it = PyDatagramIterator(data)
        msgid = it.getUint8()
        
        if msgid == 1:
            direction['1']=it.getString()
            #self.printMessage("Server received:", direction['1'])
        
        if msgid == 23:
            print "server got shout out"
            update = PyDatagram()
            update.addUint8(23)
            self.Application.server.broadcast(update)
        #standard update
        if msgid == 13:
            tempID = it.getInt8()
            #print "updating position for player ", tempID
            
            self.Application.players[tempID].setX(it.getFloat32())
            self.Application.players[tempID].setY(it.getFloat32())
            self.Application.players[tempID].setZ(it.getFloat32())
            self.Application.players[tempID].setH(it.getFloat32())
            self.Application.players[tempID].setP(it.getFloat32())
            self.Application.players[tempID].setR(it.getFloat32())
            
            self.Application.players[tempID].setPythonTag("velocity",it.getFloat32())
            #self.printMessage("Server received:", direction[2])        
        
        
        elif msgid == 38:
            if self.Application.server.isStarted is True:
                print "Game over"
                data = PyDatagram()
                data.addInt8(38)
                self.Application.server.broadcast(data)
        '''if msgid == 3:
            direction['3']=it.getString()
           3 self.printMessage("Server received:", direction['3'])  

        if msgid == 4:
            direction['4']=it.getString()
            self.printMessage("Server received:", direction['4'])

        if msgid == 5:
            direction['5']=it.getString()
            self.printMessage("Server received:", direction['5'])
'''
            
        return None
Exemplo n.º 6
0
    def constructTree(self, plotIndex, gagTrack, gagLevel):
        dg = PyDatagram()
        dg.addUint8(plotIndex)
        dg.addUint8(GardenGlobals.getTreeTypeIndex(gagTrack, gagLevel))  # Type Index
        dg.addInt8(0)  # Water Level
        dg.addInt8(0)  # Growth Level
        dg.addUint32(self.getTimestamp())
        dg.addUint8(0)  # Wilted State (False)
        gardenData = PyDatagramIterator(dg)

        plot = occupier2Class[GardenGlobals.TreePlot](self.air, self, self.house.housePos)
        plot.construct(gardenData)
        self.plots[plotIndex] = plot

        self.updateGardenData()
Exemplo n.º 7
0
    def prepare(self, message, sentArgs=[], channels=None):
        dg = PyDatagram()

        if channels is None:
            channels = [OtpDoGlobals.MESSENGER_CHANNEL_ALL]

        dg.addInt8(len(channels))
        for channel in channels:
            dg.addChannel(channel)

        dg.addChannel(self.msgType)
        dg.addUint16(self.msgType)
        dg.addString(message)
        dg.addString(zlib.compress(cPickle.dumps(sentArgs)))
        return dg
Exemplo n.º 8
0
    def constructTree(self, plotIndex, gagTrack, gagLevel):
        dg = PyDatagram()
        dg.addUint8(plotIndex)
        dg.addUint8(GardenGlobals.getTreeTypeIndex(gagTrack, gagLevel))  # Type Index
        dg.addInt8(0)  # Water Level
        dg.addInt8(0)  # Growth Level
        dg.addUint32(self.getTimestamp())
        dg.addUint8(0)  # Wilted State (False)
        gardenData = PyDatagramIterator(dg)

        plot = occupier2Class[GardenGlobals.TreePlot](self.air, self, self.house.housePos)
        plot.construct(gardenData)
        self.plots[plotIndex] = plot

        self.updateGardenData()
Exemplo n.º 9
0
    def constructFlower(self, plotIndex, species, variety):
        dg = PyDatagram()
        dg.addUint8(plotIndex)
        dg.addUint8(species)
        dg.addUint16(variety)
        dg.addInt8(0)  # Water Level
        dg.addInt8(0)  # Growth Level
        dg.addUint32(self.getTimestamp())
        dg.addUint8(0)  # Wilted State (False)
        gardenData = PyDatagramIterator(dg)

        plot = occupier2Class[GardenGlobals.FlowerPlot](self.air, self, self.house.housePos)
        plot.construct(gardenData)
        self.plots[plotIndex] = plot

        self.updateGardenData()
Exemplo n.º 10
0
    def constructFlower(self, plotIndex, species, variety):
        dg = PyDatagram()
        dg.addUint8(plotIndex)
        dg.addUint8(species)
        dg.addUint16(variety)
        dg.addInt8(0)  # Water Level
        dg.addInt8(0)  # Growth Level
        dg.addUint32(self.getTimestamp())
        dg.addUint8(0)  # Wilted State (False)
        gardenData = PyDatagramIterator(dg)

        plot = occupier2Class[GardenGlobals.FlowerPlot](self.air, self,
                                                        self.house.housePos)
        plot.construct(gardenData)
        self.plots[plotIndex] = plot

        self.updateGardenData()
Exemplo n.º 11
0
    def send(self, args = {}):
        try:
            pkg = PyDatagram()
            pkg.addUint16(Constants.CMSG_MOVE)

            #print(args)
            
            pkg.addFloat64(args["x"])
            pkg.addFloat64(args["y"])
            pkg.addFloat64(args["h"])
            pkg.addInt8(args["isMoving"])

            self.cWriter.send(pkg, self.connection)

            #self.log('Sent [' + str(Constants.RAND_STRING) + '] Int Request')
        except:
            self.log('Bad [' + str(Constants.REQ_HEARTBEAT) + '] Heartbeat Request')
            print_exc()
Exemplo n.º 12
0
 def server_task(self, task):
     if self.listener.newConnectionAvailable():
         rendezvous = PointerToConnection()
         netAddress = NetAddress()
         newConnection = PointerToConnection()
         if self.listener.getNewConnection(rendezvous, netAddress,
                                           newConnection):
             print 'GOT CONNECTION FROM', netAddress
             newConnection = newConnection.p()
             newConnection.setNoDelay(True)
             self.connections.append(newConnection)
             self.reader.addConnection(newConnection)
             self.last_pid += 1
             self.players[netAddress.getIpString()] = Player(
                 self.last_pid, self.world.create_walker())
     while self.manager.resetConnectionAvailable():
         connPointer = PointerToConnection()
         self.manager.getResetConnection(connPointer)
         connection = connPointer.p()
         print 'LOST CONNECTION FROM', connection
         # Remove the connection we just found to be "reset" or "disconnected"
         self.reader.removeConnection(connection)
         # Loop through the activeConnections till we find the connection we just deleted
         # and remove it from our activeConnections list
         for idx in range(0, len(self.connections)):
             if self.connections[idx] == connection:
                 del self.connections[idx]
                 break
     while self.reader.dataAvailable():
         datagram = NetDatagram()
         if self.reader.getData(datagram):
             conn = datagram.getConnection()
             dataIter = PyDatagramIterator(datagram)
             addr = conn.getAddress()
             player = self.players[addr.getIpString()]
             player.handle_command(dataIter.getString(), dataIter.getBool())
     update = PyDatagram()
     update.addInt8(len([o for o in self.world.updatables if o.moved]))
     for obj in self.world.updatables:
         obj.add_update(update)
     for conn in self.connections:
         self.writer.send(update, conn)
     return task.again
Exemplo n.º 13
0
 def syncSmiley(self, task):
     for tempID in range(0,5):
         sync = PyDatagram()
         sync.addUint8(13)
         sync.addInt8(tempID)
         
         sync.addFloat32(self.Server.players[tempID].getX())
         sync.addFloat32(self.Server.players[tempID].getY())
         sync.addFloat32(self.Server.players[tempID].getZ())
         sync.addFloat32(self.Server.players[tempID].getH())
         sync.addFloat32(self.Server.players[tempID].getP())
         sync.addFloat32(self.Server.players[tempID].getR())
         
         #print "The velocity is ", self.Server.players[tempID].getTag("velocity")
         
         sync.addFloat32(1.0) #sync.addFloat32(float(self.Server.players[tempID].getTag("velocity")))
         self.broadcast(sync)    
         
     return task.again
     '''        
Exemplo n.º 14
0
 def server_task(self, task):
     if self.listener.newConnectionAvailable():
         rendezvous = PointerToConnection()
         netAddress = NetAddress()
         newConnection = PointerToConnection()
         if self.listener.getNewConnection(rendezvous, netAddress, newConnection):
             print 'GOT CONNECTION FROM', netAddress
             newConnection = newConnection.p()
             newConnection.setNoDelay(True)
             self.connections.append(newConnection)
             self.reader.addConnection(newConnection)
             self.last_pid += 1
             self.players[netAddress.getIpString()] = Player(self.last_pid, self.world.create_walker())
     while self.manager.resetConnectionAvailable():
         connPointer = PointerToConnection()
         self.manager.getResetConnection(connPointer)
         connection = connPointer.p()
         print 'LOST CONNECTION FROM', connection
         # Remove the connection we just found to be "reset" or "disconnected"
         self.reader.removeConnection(connection)
         # Loop through the activeConnections till we find the connection we just deleted
         # and remove it from our activeConnections list
         for idx in range(0, len(self.connections)):
             if self.connections[idx] == connection:
                 del self.connections[idx]
                 break
     while self.reader.dataAvailable():
         datagram = NetDatagram()
         if self.reader.getData(datagram):
             conn = datagram.getConnection()
             dataIter = PyDatagramIterator(datagram)
             addr = conn.getAddress()
             player = self.players[addr.getIpString()]
             player.handle_command(dataIter.getString(), dataIter.getBool())
     update = PyDatagram()
     update.addInt8(len([o for o in self.world.updatables if o.moved]))
     for obj in self.world.updatables:
         obj.add_update(update)
     for conn in self.connections:
         self.writer.send(update, conn)
     return task.again
Exemplo n.º 15
0
    def update_positions(self, data):  # send
        self.Δt = globalClock.getDt()
        self.Δt_update += self.Δt
        if self.Δt_update > 0.05:
            if self.active_players > 1:
                datagram = PyDatagram()
                datagram.addString("update")
                datagram.addInt8(self.active_players)

                for p in self.player_list:
                    datagram.addString(p.username)
                    datagram.addFloat64(p.pos_and_or['x'])
                    datagram.addFloat64(p.pos_and_or['y'])
                    datagram.addFloat64(p.pos_and_or['z'])
                    datagram.addFloat64(p.pos_and_or['h'])
                    datagram.addFloat64(p.pos_and_or['p'])
                    datagram.addFloat64(p.pos_and_or['r'])

                for p in self.player_list:
                    self.cWriter.send(datagram, p.conn_id)
            self.Δt_update = 0
        return Task.cont
    def enterWaitReward(self):
        self.updateHistoryForCourseComplete()
        self.awardTrophies()
        self.awardCups()
        self.awardHoleBest()
        self.awardCourseBest()
        self.recordHoleInOne()
        self.recordCourseUnderPar()
        trophiesList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newTrophies:
                oneTrophyList = map(int, self.newTrophies[avId])
                trophiesList.append(oneTrophyList)
                continue
            trophiesList.append([])
        while len(trophiesList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            trophiesList.append([])
        holeBestList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newHoleBest:
                oneTrophyList = map(int, self.newHoleBest[avId])
                holeBestList.append(oneTrophyList)
                continue
            holeBestList.append([])
        while len(holeBestList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            holeBestList.append([])
        courseBestList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newCourseBest:
                oneTrophyList = map(int, self.newCourseBest[avId])
                courseBestList.append(oneTrophyList)
                continue
            courseBestList.append([])
        while len(courseBestList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            courseBestList.append([])
        cupList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newCups:
                oneCupList = map(int, self.newCups[avId])
                cupList.append(oneCupList)
                self.cupListLen = self.cupListLen + 1
                continue
            cupList.append([])
        while len(cupList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            cupList.append([])
        REWARD_TIMEOUT = (self.trophyListLen + self.holeBestListLen +
                          self.courseBestListLen + self.cupListLen) * 5 + 19
        aimTimesList = [0] * 4
        aimIndex = 0
        stillPlaying = self.getStillPlayingAvIds()
        for avId in self.avIdList:
            if avId in stillPlaying:
                aimTime = 0
                if avId in self.aimTimes:
                    aimTime = self.aimTimes[avId]
                aimTimesList[aimIndex] = aimTime
            aimIndex += 1

        dg = PyDatagram()
        for list in trophiesList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)

        dg.addUint8(len(self.rankings))
        for item in self.rankings:
            dg.addInt8(item)

        for list in holeBestList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)

        for list in courseBestList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)

        for list in cupList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)

        dg.addUint32(self.winnerByTieBreak)
        for at in aimTimesList:
            dg.addUint32(int(at * 100))

        self.sendUpdate('setReward', [dg.getMessage()])

        def allAvatarsRewarded(self=self):
            self.notify.debug('GOLF COURSE: all avatars rewarded')
            self.rewardDone()

        def handleRewardTimeout(avIds, self=self):
            self.notify.debug(
                'GOLF COURSE: timed out waiting for clients %s to finish reward'
                % avIds)
            self.rewardDone()

        stillPlaying = self.getStillPlayingAvIds()
        self.rewardBarrier = ToonBarrier('waitReward',
                                         self.uniqueName('waitReward'),
                                         stillPlaying, REWARD_TIMEOUT,
                                         allAvatarsRewarded,
                                         handleRewardTimeout)
Exemplo n.º 17
0
def quit_on_death():
    logging.critical("Shutting down")
    datagram = PyDatagram()
    datagram.addString("quit")
    datagram.addInt8(me.player_id)
    world_client.cWriter.send(datagram, world_client.conn)
Exemplo n.º 18
0
    def handleDatagram(self, dg):
        if not dg.getLength() > 0:
            return None
        dgi = PyDatagramIterator(dg)
        connection = dg.getConnection()
        msgType = dgi.getUint16()
        if msgType == CLIENT_HEARTBEAT:
            self.notify.debug('Recieved heartbeat.')
        elif msgType == CLIENT_DISCONNECT:
            if connection in self.connectionList:
                self.connectionList.remove(connection)
        elif msgType == CLIENT_SET_ZONE:
            self.handleSetZone(dgi, connection)
        elif msgType == CLIENT_REMOVE_ZONE:
            self.handleRemoveZone(dgi, connection)
        elif msgType == CLIENT_CREATE_OBJECT_REQUIRED:
            self.handleClientCreateObjectRequired(dg, dgi)
        elif msgType == CLIENT_OBJECT_UPDATE_FIELD:
            doId = dgi.getUint32()
            fieldId = dgi.getUint16()
            print "DEBUG: Got Toontown field update for Toontown doId = %d and Toontown fieldId = %d" % (doId, fieldId)
        elif msgType == CLIENT_OBJECT_DELETE:
            self.handleClientDeleteObject(dg, dgi.getUint32())
        elif msgType == CLIENT_OBJECT_DISABLE:
            self.handleClientDisable(dg, dgi.getUint32())
        elif msgType == CLIENT_ADD_INTEREST:
            #self.handleClientAddInterest(self, Client, dgi)
           
            handle = dgi.getUint16()
            contextId = dgi.getUint32()
            parentId = dgi.getUint32()
            zoneList = [dgi.getUint32()]  
            print 'DEBUG: Network :: Interest -> (%d, %d, %d)' % (handle, contextId, parentId)
            while True:
                remainingData = (dg.getLength() - dgi.getCurrentIndex())
                if remainingData == 0:
                    break
                zoneList.append(dgi.getUint32())
            if handle == 2: #Aww yeah we found the tewtow shard list interest!
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(4618) #parentId
                datagram.addUint32(3) #zoneId
                datagram.addUint16(58) #ToontownDistrict DClass Field
                datagram.addUint32(316000000) #Shard ID (doId)
                datagram.addString('Astron is for n00bs') #District name
                datagram.addUint8(1) # 1 - Enabled 0 - Disabled
                datagram.addBool(0)
                self.cw.send(datagram, connection)
            if handle == 4:
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(4618) #parentId
                datagram.addUint32(3) #zoneId
                datagram.addUint16(387) #ToontownDistrict DClass Field
                datagram.addUint32(900000000) #Shard ID (doId)
                datagram.addString("2013-08-22 23:49:46")
                self.cw.send(datagram, connection)
               
                datagran2 = PyDatagram()
                datagran2.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagran2.addUint32(0)
                datagran2.addUint32(0)
                datagran2.addUint16(172)
                datagran2.addUint32(637100008)
                arg = []
                datagran2.addUint16(len(arg) << 1)
                for i in arg:
                    datagran2.addInt16(int(i))
                datagran2.addUint16(len(arg) << 1)
                for i in arg:
                    datagran2.addInt16(int(i))
                datagran2.addUint16(len(arg) << 1)
                for i in arg:
                    datagran2.addInt16(int(i))
                datagran2.addUint16(len(arg) << 1)
                for i in arg:
                    datagran2.addInt16(int(i))
                #arg = [64, 65, 66, 10, 15]
                datagran2.addUint16(len(arg))
                for i in arg:
                    datagran2.addUint16(int(i))
                self.cw.send(datagran2, connection)
           
            if handle == 5:
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_OBJECT_UPDATE_FIELD)
                datagram.addUint32(1) #doId
                datagram.addUint16(112) #fieldId
                datagram.addUint32(316000000)
                self.cw.send(datagram, connection)
            datagram = PyDatagram()
            datagram.addUint16(CLIENT_DONE_INTEREST_RESP)
            datagram.addUint16(handle)
            datagram.addUint32(contextId)
            datagram.addUint32(parentId)
            for zoneId in zoneList:
                datagram.addUint32(zoneId)
            self.cw.send(datagram, connection)
            datagram = PyDatagram()
            datagram.addUint16(CLIENT_DONE_INTEREST_RESP)
            datagram.addUint16(handle)
            datagram.addUint32(contextId)
            datagram.addUint32(parentId)
            for zoneId in zoneList:
                datagram.addUint32(zoneId)
            self.cw.send(datagram, connection)
        elif msgType == CLIENT_REMOVE_INTEREST:
            return None
        #Lets start with the tewtow specific msgtypes.
        elif msgType == CLIENT_LOGIN_TOONTOWN:
            self.handleClientLoginToontown(dgi, connection)
        elif msgType == CLIENT_GET_AVATARS:
            self.handleGetAvatars(dgi, connection)			

        elif msgType == CLIENT_GET_AVATARS:
            self.handleGetAvatars(dgi, connection)

        elif msgType == CLIENT_CREATE_AVATAR:
            #return None
            datagram = PyDatagram()
            datagram.addUint16(CLIENT_CREATE_AVATAR_RESP)
            datagram.addUint16(0) #echoContext
            datagram.addUint8(0) #returnCode
            datagram.addUint32(1)
            self.cw.send(datagram, connection)
        elif msgType == CLIENT_SET_NAME_PATTERN:
            datagram = PyDatagram()
            datagram.addUint16(CLIENT_SET_NAME_PATTERN_ANSWER)
            datagram.addUint32(1)
            datagram.addUint8(0)
            self.cw.send(datagram, connection)
        elif msgType == CLIENT_SET_AVATAR:
                packer = DCPacker()
                dclass = self.dclassesByName['DistributedToon']
                datagram = PyDatagram()
                datagram.addUint16(15) #CLIENT_GET_AVATAR_DETAILS_RESP Msgtype
                datagram.addUint32(1)
                datagram.addUint8(0)
                datagram.addString('Infinity') #Toon name
                datagram.addString('Unknown')
                datagram.addUint32(0)
                datagram.addBool(1)
                datagram.addString('t\x05\x01\x00\x01\x39\x1b\x33\x1b\31\x1b\x14\x00\x14\x14') #DNA (blob)
                datagram.addUint8(1) #GM
                datagram.addUint16(2500) #Max Bank
                datagram.addUint16(0) #Current Bank
                datagram.addUint16(40) #Max Jellybeans
                datagram.addUint16(0) #Current Jellybeans
                datagram.addUint16(15) #Max Laff
                datagram.addUint16(15) #Current Laff
                datagram.addUint32(0) #Battle ID
                datagram.addString('Unknown') #Experience (blob)
                datagram.addUint8(10) #Max Gag Carry
 
                #setTrackAccess
 
                field = dclass.getField(13)
                print field
                arg = [0, 0, 0, 0, 1, 1, 0]
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addInt16(int(i))

                datagram.addInt8(3) #Track Progress 1
                datagram.addUint32(9) #Track Progress 2
 
               
 
                #setTrackBonusLevel
 
                field = dclass.getField(15)
                print field
 
                arg = [0, 0, 0, 0, 1, 1, 0]
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addInt8(int(i))

                datagram.addString('') #setInventory
 
                #setMaxNPCFriends (Uint16)
 
                datagram.addUint16(16)
               
 
                arg = []
                datagram.addUint16(len(arg) * 5)
                for i in arg:
                    datagram.addUint32(int(i))
 
                datagram.addUint32(316000000) #setDefaultShard
 
                datagram.addUint32(2000) #setDefaultZone
 
                datagram.addString('')
 
 
                field = dclass.getField(22)
                print field
 
                arg = [1000, 2000 , 3000, 4000, 5000, 6000, 8000, 9000, 10000, 11000, 12000, 13000]
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 

                field = dclass.getField(23)
                print field
 
                arg = [1000, 2000 , 3000, 4000, 5000, 6000, 8000, 9000, 10000, 11000, 12000, 13000]
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                datagram.addString('') #setInterface
 
                datagram.addUint32(2000) #setLastHood
 
                datagram.addUint8(1) #setTutorialAck
 
                datagram.addUint32(25) #setMaxClothes
 
                #setClothesTopsList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
 
                #setClothesBottomsList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint32(0) #setMaxAccessories
 
                #setHatList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setGlassessList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setBackpackList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setShoesList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint8(0) #setHat 1
                datagram.addUint8(0) #setHat 2
                datagram.addUint8(0) #setHat 3
 
                datagram.addUint8(0) #setGlasses 1
                datagram.addUint8(0) #setGlasses 2
                datagram.addUint8(0) #setGlasses 3
 
                datagram.addUint8(0) #setBackpack 1
                datagram.addUint8(0) #setBackpack 2
                datagram.addUint8(0) #setBackpack 3
 
                datagram.addUint8(0) #setShoes 1
                datagram.addUint8(0) #setShoes 2
                datagram.addUint8(0) #setShoes 3
 
                datagram.addString('')
 
                #setEmoteAccess(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setCustomMeeages(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addString('') #setResistanceMessages
 
                #setPetTrickPhrases(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint16(0) #setCatalogSchedule 1
                datagram.addUint32(0) #setVatalogSchedule 2
 
                datagram.addString('') #setCatalog 1
                datagram.addString('') #setCatalog 2
                datagram.addString('') #setCatalog 3
 
                datagram.addString('') #setMailBoxContents
 
                datagram.addString('') #SetDeliverySchedule
 
                datagram.addString('') #setGiftSchedule
 
                datagram.addString('') #setAwardMailboxContents
 
                datagram.addString('') #setAwardSchedule
 
                datagram.addUint8(0) #setAwardNotify
 
                datagram.addUint8(0) #setCatalogNotify 1
 
                datagram.addUint8(0) #setCatalogNotify 2
 
                datagram.addUint8(0) #setSpeedChatStyleIndex
 
                #setTeleportAccess (uint32array)
 
                arg = [1000, 2000 , 3000, 4000, 5000, 6000, 8000, 9000, 10000, 11000, 12000, 13000]
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setCogStatus (uint32array)
                arg = []
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setCogCount (uint32array)
                arg = []
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setCogRadar(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setBuildingRadar(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setCogLevels(uint8array)
 
                arg = [0, 0, 0, 0]
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setCogTypes(uint8array)
 
                arg = [0, 0, 0, 0]
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setCogParts (uint32array)
                arg = [0, 0, 0, 0]
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setCogMerits(uint16array)
 
                arg = [0, 0, 0, 0]
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addUint32(0) #setHouseId
 
                #setQuests (uint32array)
                arg = []
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setQuestHistory(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addUint8(0) #setRewardHistory 1
 
                #setRewardHistory 2(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
 
                datagram.addUint8(1) #setQuestCarryLimit
 
                datagram.addInt16(0) #setCheesyEffect 1
                datagram.addUint32(0) #setCheesyEffect 2
                datagram.addUint32(0) #setCheesyEffect 3
 
                datagram.addUint8(0) #setPosIndex
 
                #setFishCollection 1(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFishCollection 2(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFishCollection 3(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addUint8(20) #setMaxFishTank
 
                #setFishTank 1(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFishTank 2(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFishTank 3(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addUint8(1) #setFishingRod
 
                #setFishingTrophies(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFlowerCollection 1(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFlowerCollection 2(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFlowerBasket 1(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFlowerBasket 2(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint8(25) #setMaxFlowerBasket
 
                #setGardenTrophies(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint8(1) #setShovel
 
                datagram.addUint32(0) #setShovelSkill
 
                datagram.addUint8(1) #setWateringCan
 
                datagram.addUint32(0) #setWateringCanSkill
 
                datagram.addUint32(0) #setPetID
 
                datagram.addUint8(0) #setPetTutorialDone
 
                datagram.addUint8(0) #setFishBingoTutorialDone
 
                datagram.addUint8(0) #setFishBingoMarkTutorialDone
 
                datagram.addInt8(0) #setKartBodyType
 
                datagram.addInt8(0) #setKartBodyColor
 
                datagram.addInt8(0) #setKartAccessoryColor
 
                datagram.addInt8(0) #setKartEngineBlockType
 
                datagram.addInt8(0) #setKartSpoilerType
 
                datagram.addInt8(0) #setKartFrontWheelWellType
 
                datagram.addInt8(0) #setKartBackWheelWellType
 
                datagram.addInt8(0) #setKartRimType
 
                datagram.addInt8(0) #setKartDecalType
 
                datagram.addUint32(100) #setTickets
 
                datagram.addUint8(0) #setKartingHistory 1
                datagram.addUint8(0) #setKartingHistory 2
                datagram.addUint8(0) #setKartingHistory 3
                datagram.addUint8(0) #setKartingHistory 4
                datagram.addUint8(0) #setKartingHistory 5
                datagram.addUint8(0) #setKartingHistory 6
                datagram.addUint8(0) #setKartingHistory 7
                datagram.addUint8(0) #setKartingHistory 8
                datagram.addUint8(0) #setKartingHistory 9
                datagram.addUint8(0) #setKartingHistory 10
                datagram.addUint8(0) #setKartingHistory 11
                datagram.addUint8(0) #setKartingHistory 12
                datagram.addUint8(0) #setKartingHistory 13
                datagram.addUint8(0) #setKartingHistory 14
                datagram.addUint8(0) #setKartingHistory 15
                datagram.addUint8(0) #setKartingHistory 16
 
               
                datagram.addUint8(0) #setKartingTrophies 1
                datagram.addUint8(0) #setKartingTrophies 2
                datagram.addUint8(0) #setKartingTrophies 3
                datagram.addUint8(0) #setKartingTrophies 4
                datagram.addUint8(0) #setKartingTrophies 5
                datagram.addUint8(0) #setKartingTrophies 6
                datagram.addUint8(0) #setKartingTrophies 7
                datagram.addUint8(0) #setKartingTrophies 8
                datagram.addUint8(0) #setKartingTrophies 9
                datagram.addUint8(0) #setKartingTrophies 11
                datagram.addUint8(0) #setKartingTrophies 11
                datagram.addUint8(0) #setKartingTrophies 12
                datagram.addUint8(0) #setKartingTrophies 13
                datagram.addUint8(0) #setKartingTrophies 14
                datagram.addUint8(0) #setKartingTrophies 15
                datagram.addUint8(0) #setKartingTrophies 16
                datagram.addUint8(0) #setKartingTrophies 17
                datagram.addUint8(0) #setKartingTrophies 18
                datagram.addUint8(0) #setKartingTrophies 19
                datagram.addUint8(0) #setKartingTrophies 20
                datagram.addUint8(0) #setKartingTrophies 21
                datagram.addUint8(0) #setKartingTrophies 22
                datagram.addUint8(0) #setKartingTrophies 23
                datagram.addUint8(0) #setKartingTrophies 24
                datagram.addUint8(0) #setKartingTrophies 25
                datagram.addUint8(0) #setKartingTrophies 26
                datagram.addUint8(0) #setKartingTrophies 27
                datagram.addUint8(0) #setKartingTrophies 28
                datagram.addUint8(0) #setKartingTrophies 29
                datagram.addUint8(0) #setKartingTrophies 30
                datagram.addUint8(0) #setKartingTrophies 31
                datagram.addUint8(0) #setKartingTrophies 32
                datagram.addUint8(0) #setKartingTrophies 33
 
                datagram.addUint32(0) #setKartingPersonalBest 1
                datagram.addUint32(0) #setKartingPersonalBest 2
                datagram.addUint32(0) #setKartingPersonalBest 3
                datagram.addUint32(0) #setKartingPersonalBest 4
                datagram.addUint32(0) #setKartingPersonalBest 5
                datagram.addUint32(0) #setKartingPersonalBest 6
 
                datagram.addUint32(0) #setKartingPersonalBest2 1
                datagram.addUint32(0) #setKartingPersonalBest2 2
                datagram.addUint32(0) #setKartingPersonalBest2 3
                datagram.addUint32(0) #setKartingPersonalBest2 4
                datagram.addUint32(0) #setKartingPersonalBest2 5
                datagram.addUint32(0) #setKartingPersonalBest2 6
                datagram.addUint32(0) #setKartingPersonalBest2 7
                datagram.addUint32(0) #setKartingPersonalBest2 8
                datagram.addUint32(0) #setKartingPersonalBest2 9
                datagram.addUint32(0) #setKartingPersonalBest2 10
                datagram.addUint32(0) #setKartingPersonalBest2 11
                datagram.addUint32(0) #setKartingPersonalBest2 12
 
                #setKartAccessoriesOwned [16]
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
 
                #setCogSummonsEarned
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint8(0) #setGardenStart
 
                #setGolfHistory [18]
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
 
                #setPackedGolfHoleBest [18]
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
 
                #setGolfCourseBest
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
 
                datagram.addUint8(0) #setPinkSlips
 
                datagram.addUint8(0) #setNametagStyle

                self.cw.send(datagram, connection)

               
        elif msgType == CLIENT_SET_WISHNAME:
            #print dgi
            avId = dgi.getUint16()
            unknown = dgi.getString()
            pendingName = dgi.getString()
            print pendingName
            divide = pendingName.split(' ')
            lenStr = len(divide)
            s = 0
            while s != lenStr:
                nameCheck = divide[s]
                s += 1
            with open ("TewtowBlacklist.txt", "r") as badWordFile:
                data=badWordFile.readlines()
                for word in data:
                    chrList = list(word)
                    if chrList.count('\n') == 1:
                        chrList.remove('\n')
                    badWord = ''.join(chrList)
                    if nameCheck == badWord:
                        print 'Bad name detected, are you trying to get banned?'
                        datagram = PyDatagram()
                        datagram.addUint16(CLIENT_SET_WISHNAME_RESP)
                        datagram.addUint32(avId)
                        datagram.addUint16(0)
                        datagram.addString('NO')
                        datagram.addString('NO')
                        datagram.addString('')
                        message = PyDatagram()
                        message.addUint16(CLIENT_SYSTEM_MESSAGE)
                        message.addString('Sorry, That name is not allowed.')
                        self.cw.send(message, connection)
                    else:
                        datagram = PyDatagram()
                        datagram.addUint16(CLIENT_SET_WISHNAME_RESP)
                        datagram.addUint32(avId)
                        datagram.addUint16(0)
                        datagram.addString('NO')
                        datagram.addString('')
                        datagram.addString('NO')
                        self.cw.send(datagram, connection)
 
        elif msgType == CLIENT_OBJECT_LOCATION:
            doId = dgi.getUint32()
            parentId = dgi.getUint32()
            zoneId = dgi.getUint32()
            print 'Network :: Location -> (%d, %d, %d)' % (doId, parentId, zoneId)
            if zoneId == 2000:
               
                #DistributedMickey
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                #datagram.addUint16(83)
                datagram.addUint16(65)
                datagram.addUint32(433103088)
                datagram.addString("a")
                datagram.addString("a")
                datagram.addInt16(0)
                self.cw.send(datagram, connection)
           
            if zoneId == 1000:
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                #datagram.addUint16(83)
                datagram.addUint16(108)
                datagram.addUint32(433103088)
                datagram.addString("DockedEast")
                datagram.addInt16(100)
                self.cw.send(datagram, connection)
            if zoneId == 5000:
                '''
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                datagram.addUint16(68)
                datagram.addUint32(433103088)
                datagram.addString("a")
                datagram.addString("a")
                datagram.addInt16(0)
                self.cw.send(datagram, connection)
                '''
               
        #self.cw.send(datagram, connection)
            if zoneId == 2000:
                pass
                '''#message = PyDatagram()
                #message.addUint16(CLIENT_SYSTEM_MESSAGE)
                #message.addString('Surprised? I thought so. :P')
                #self.cw.send(message, connection)
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                #datagram.addUint16(83)
                datagram.addUint16(65)
                datagram.addUint32(433103088)
                datagram.addString("b")
                datagram.addString("a")
                datagram.addInt16(0)
                self.cw.send(datagram, connection)'''
               
            if zoneId == 3000:
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                #datagram.addUint16(83)
                datagram.addUint16(79)
                datagram.addUint32(433103089)
                datagram.addString("a")
                datagram.addString("a")
                datagram.addInt16(0)
                self.cw.send(datagram, connection)
               
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_GET_STATE_RESP)
                self.cw.send(datagram, connection)

			
        else:
            self.notify.warning('Got a datagram %d; but could not handle it.' % msgType)
    def enterWaitReward(self):
        self.updateHistoryForCourseComplete()
        self.awardTrophies()
        self.awardCups()
        self.awardHoleBest()
        self.awardCourseBest()
        self.recordHoleInOne()
        self.recordCourseUnderPar()
        trophiesList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newTrophies:
                oneTrophyList = map(int, self.newTrophies[avId])
                trophiesList.append(oneTrophyList)
                continue
            trophiesList.append([])
        while len(trophiesList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            trophiesList.append([])
        holeBestList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newHoleBest:
                oneTrophyList = map(int, self.newHoleBest[avId])
                holeBestList.append(oneTrophyList)
                continue
            holeBestList.append([])
        while len(holeBestList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            holeBestList.append([])
        courseBestList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newCourseBest:
                oneTrophyList = map(int, self.newCourseBest[avId])
                courseBestList.append(oneTrophyList)
                continue
            courseBestList.append([])
        while len(courseBestList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            courseBestList.append([])
        cupList = []
        for index in xrange(len(self.avIdList)):
            avId = self.avIdList[index]
            if avId in self.newCups:
                oneCupList = map(int, self.newCups[avId])
                cupList.append(oneCupList)
                self.cupListLen = self.cupListLen + 1
                continue
            cupList.append([])
        while len(cupList) < GolfGlobals.MAX_PLAYERS_PER_HOLE:
            cupList.append([])
        REWARD_TIMEOUT = (self.trophyListLen + self.holeBestListLen + self.courseBestListLen + self.cupListLen) * 5 + 19
        aimTimesList = [0] * 4
        aimIndex = 0
        stillPlaying = self.getStillPlayingAvIds()
        for avId in self.avIdList:
            if avId in stillPlaying:
                aimTime = 0
                if avId in self.aimTimes:
                    aimTime = self.aimTimes[avId]
                aimTimesList[aimIndex] = aimTime
            aimIndex += 1
            
        dg = PyDatagram()
        for list in trophiesList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)
        
        dg.addUint8(len(self.rankings))
        for item in self.rankings:
            dg.addInt8(item)
                
        for list in holeBestList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)
                
        for list in courseBestList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)
        
        for list in cupList:
            dg.addUint8(len(list))
            for item in list:
                dg.addUint8(item)
                
        dg.addUint32(self.winnerByTieBreak)
        for at in aimTimesList:
            dg.addUint32(int(at * 100))
           
        self.sendUpdate('setReward', [dg.getMessage()])

        def allAvatarsRewarded(self = self):
            self.notify.debug('GOLF COURSE: all avatars rewarded')
            self.rewardDone()


        def handleRewardTimeout(avIds, self = self):
            self.notify.debug('GOLF COURSE: timed out waiting for clients %s to finish reward' % avIds)
            self.rewardDone()

        stillPlaying = self.getStillPlayingAvIds()
        self.rewardBarrier = ToonBarrier('waitReward', self.uniqueName('waitReward'), stillPlaying, REWARD_TIMEOUT, allAvatarsRewarded, handleRewardTimeout)
Exemplo n.º 20
0
 def server_messager(self,msg,args=[]):
     if msg == "map_set":
         order = PyDatagram()
         order.addUint16(MAP_SET)
         order.addInt32(args[0])
         self.send_package(order)
     elif msg == "client_update":
         order = PyDatagram()
         order.addUint16(CLIENT_INIT_UPDATE)
         order.addString(args[0])
         order.addString(args[1])
         order.addInt32(args[2])
         order.addInt32(args[3])
         self.send_package(order)
     elif msg == "chat_send":
         r = args[0][0]
         g = args[0][1]
         b = args[0][2]
         order = PyDatagram()
         order.addUint16(SERVER_CHAT)
         order.addInt32(r)
         order.addInt32(g)
         order.addInt32(b)
         order.addString(args[1])
         self.send_package(order)
         base.menu_manager.menus["mp-game"].chat_add((r,g,b,1),args[1])
     elif msg == "ready_button":
         order = PyDatagram()
         order.addUint16(SERVER_READY)
         order.addInt32(args[0])
         order.addInt32(args[1])
         self.send_package(order)
         base.menu_manager.menus["mp-game"].obj_list[args[0]]["indicatorValue"]=args[1]
         base.menu_manager.menus["mp-game"].start_game_check()
     elif msg == "server_loaded":
         order = PyDatagram()
         order.addUint16(SERVER_LOADED)
         self.send_package(order)
     elif msg == "all_loaded":
         order = PyDatagram()
         order.addUint16(ALL_LOADED)
         self.send_package(order)
     elif msg == "game_start":
         order = PyDatagram()
         order.addUint16(GAME_START)
         self.send_package(order)
     elif msg == "army_kill":
         order = PyDatagram()
         order.addUint16(ARMY_KILL)
         order.addInt32(args[0])
         self.send_package(order)
     elif msg == "build_start":
         order = PyDatagram()
         order.addUint16(BUILD_START)
         order.addInt32(args[0])
         order.addInt8(args[1])
         order.addString(args[2])
         self.send_package(order)
     elif msg == "tower_capture":
         order = PyDatagram()
         order.addUint16(TOWER_CAPTURE)
         order.addInt32(args[0])
         order.addInt8(args[1])
         self.send_package(order)
     elif msg == "build_complete":
         order = PyDatagram()
         order.addUint16(BUILD_COMPLETE)
         order.addInt32(args[0])
         order.addInt8(args[1])
         order.addString(args[2])
         self.send_package(order)
     elif msg == "build_cancel":
         order = PyDatagram()
         order.addUint16(BUILD_CANCEL)
         order.addInt32(args[0])
         self.send_package(order)
     elif msg == "battle_start":
         order = PyDatagram()
         order.addUint16(BATTLE_START)
         order.addInt32(args[0])
         order.addFloat32(args[1])
         order.addFloat32(args[2])
         order.addInt32(args[3])
         order.addFloat32(args[4])
         order.addFloat32(args[5])
         order.addInt32(args[6])
         self.send_package(order)
     elif msg == "battle_clash":
         order = PyDatagram()
         order.addUint16(BATTLE_CLASH)
         order.addInt32(args[0])
         order.addInt32(args[1])
         order.addInt32(args[2])
         order.addString(args[3])
         order.addInt8(args[4])
         self.send_package(order)
     elif msg == "battle_turn":
         order = PyDatagram()
         order.addUint16(BATTLE_TURN)
         order.addInt32(args[0])
         order.addInt32(args[1])
         self.send_package(order)
     elif msg == "battle_end":
         order = PyDatagram()
         order.addUint16(BATTLE_END)
         order.addInt32(args[0])
         self.send_package(order)
     elif msg == "battle_armyadd":
         order = PyDatagram()
         order.addUint16(BATTLE_ARMYADD)
         order.addInt32(args[0])
         order.addInt32(args[1])
         order.addFloat32(args[2])
         order.addFloat32(args[3])
         self.send_package(order)