def scoreDatagram(self): # Send the player's score myPyDatagram = PyDatagram() myPyDatagram.addUint8(END_MESSAGE) myPyDatagram.addString(self.playername) myPyDatagram.addInt32(self.carData.carlist[self.carData.index].deaths) return myPyDatagram
def process_modules(self): ''' This method is called when it's time to write the output. For nuggets.nri, we use an encrypted datagram. The datagram is read by core.cxx, which populates Python frozen array. Datagram format: uint32 numModules for each module: string name int32 size * data(abs(size)) * Negative size means the file was an __init__ ''' dg = PyDatagram() dg.addUint32(len(self.modules)) for moduleName in self.modules: data, size = self.modules[moduleName] dg.addString(moduleName) dg.addInt32(size) dg.appendData(data) data = dg.getMessage() iv = '\0' * 16 key = 'AmazingNuggetKey' return aes.encrypt(data, key, iv)
def scoreDatagram(self): # Send a test message myPyDatagram = PyDatagram() myPyDatagram.addUint8(END_MESSAGE) myPyDatagram.addInt32(len(self.playerscores)) for pair in self.playerscores: myPyDatagram.addString(pair[0]) myPyDatagram.addInt32(pair[1]) return myPyDatagram
def getCarPosDatagram(self, num, data): newDatagram = PyDatagram() newDatagram.addUint8(CAR_MESSAGE) newDatagram.addUint8(num) for j in range(5): newDatagram.addFloat32(float(data[j])) for j in range(5): newDatagram.addBool(data[5][j]) newDatagram.addInt32(data[6]) return newDatagram
def send(self, gameId=None): try: print gameId pkg = PyDatagram() pkg.addUint16(Constants.CMSG_RANKINGS) pkg.addInt32(gameId) self.cWriter.send(pkg, self.connection) except: self.log("Bad [" + str(Constants.CMSG_RANKINGS) + "] Request") print_exc()
def send(self, gameId = None): try: print gameId pkg = PyDatagram() pkg.addUint16(Constants.CMSG_RESULTS) pkg.addInt32(gameId) self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_RESULTS) + '] Request') print_exc()
def send(self, health): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_HEALTH) pkg.addInt32(health) # Health Change self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_HEALTH) + '] Health Request')
def send(self, powerId): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_POWER_UP) pkg.addInt32(powerId) print "Request Power Pickup : ",powerId self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_POWER_UP) + '] Power Up Request')
def sendLoginMsg(self): cr = self.cr datagram = PyDatagram() datagram.addUint16(CLIENT_LOGIN_3) datagram.addString(self.DISLToken) datagram.addString(cr.serverVersion) datagram.addUint32(cr.hashVal) datagram.addInt32(CLIENT_LOGIN_3_DISL_TOKEN) datagram.addString(cr.validateDownload) datagram.addString(cr.wantMagicWords) cr.send(datagram)
def send(self, health): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_HEALTH) pkg.addInt32(Health) # Health Change self.cWriter.send(pkg, self.connection) except: self.log("Bad [" + str(Constants.CMSG_HEALTH) + "] Health Request")
def send(self, powerId = None): try: print powerId pkg = PyDatagram() pkg.addUint16(Constants.CMSG_POWER_PICKUP) pkg.addInt32(powerId) self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_POWER_PICKUP) + '] Request') print_exc()
def send(self, gameId): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_RESULTS) pkg.addInt32(gameId) # GameId self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_RESULTS) + '] Results Request')
def send(self, rank): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_SET_RANK) pkg.addInt32(rank) self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_SET_RANK) + '] Set Rank Request')
def send(self, dead = None): try: print dead pkg = PyDatagram() pkg.addUint16(Constants.CMSG_DEAD) pkg.addInt32(dead) self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_DEAD) + '] Request') print_exc()
def send(self, ready = None): try: print ready pkg = PyDatagram() pkg.addUint16(Constants.CMSG_READY) pkg.addInt32(ready) self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_READY) + '] Request') print_exc()
def send(self, kwargs): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_DEAD) pkg.addInt32(kwargs['gameId']) self.cWriter.send(pkg, self.connection) self.log('Sent [' + str(Constants.CMSG_DEAD) + '] RequestDead') except: self.log('Bad [' + str(Constants.CMSG_DEAD) + '] RequestDead') print_exc()
def send(self, powerId): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_POWER_UP) pkg.addInt32(powerId) self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_POWER_UP) + '] Power Up Request')
def send(self, kwargs): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_POWER_PICKUP) pkg.addInt32(kwargs['powerId']) self.cWriter.send(pkg, self.connection) self.log('Sent [' + str(Constants.CMSG_POWER_PICKUP) + '] RequestPowerUpPickUp') except: self.log('Bad [' + str(Constants.CMSG_POWER_PICKUP) + '] RequestPowerUpPickUp') print_exc()
def send(self, kwargs): try: pkg = PyDatagram() pkg.addUint16(Constants.C_SELECT_CHARACTER) pkg.addInt32(kwargs['character']) self.cWriter.send(pkg, self.connection) self.log('Sent [' + str(Constants.C_SELECT_CHARACTER) + '] RequestSelectCharacter') except: self.log('Bad [' + str(Constants.C_SELECT_CHARACTER) + '] RequestSelectCharacter') print_exc()
def send(self, args = []): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_COLLISION) pkg.addString(args[0]) # Username pkg.addInt32(args[1]) # Damage Dealt self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_COLLISION) + '] Collision Request')
def send(self, kwargs): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_RESULTS) pkg.addInt32(kwargs['gameId']) self.cWriter.send(pkg, self.connection) self.log('Sent [' + str(Constants.CMSG_RESULTS) + '] RequestResults') except: self.log('Bad [' + str(Constants.CMSG_RESULTS) + '] RequestResults') print_exc()
def send(self, kwargs): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_HEALTH) pkg.addString(kwargs['username']) pkg.addInt32(kwargs['healthChange']) self.cWriter.send(pkg, self.connection) self.log('Sent [' + str(Constants.CMSG_HEALTH) + '] RequestChangeHealth') except: self.log('Bad [' + str(Constants.CMSG_HEALTH) + '] RequestChangeHealth') print_exc()
def send(self, args=None): try: pkg = PyDatagram() pkg.addUint16(Constants.RAND_INT) pkg.addInt32(args) self.cWriter.send(pkg, self.connection) #self.log('Sent [' + str(Constants.RAND_INT) + '] Int Request') except: self.log('Bad [' + str(Constants.RAND_INT) + '] Int Request') print_exc()
def send(self, kwargs): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_COLLISION) pkg.addInt32(kwargs['playerId']) pkg.addInt32(kwargs['damage']) self.cWriter.send(pkg, self.connection) self.log('Sent [' + str(Constants.CMSG_COLLISION) + '] RequestCollision') except: self.log('Bad [' + str(Constants.CMSG_COLLISION) + '] RequestCollision') print_exc()
def send(self, args=[]): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_COLLISION) pkg.addString(args[0]) # Username pkg.addInt32(args[1]) # Damage Dealt self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_COLLISION) + '] Collision Request')
def send(self, args = None): try: pkg = PyDatagram() pkg.addUint16(Constants.RAND_INT) pkg.addInt32(args) self.cWriter.send(pkg, self.connection) #self.log('Sent [' + str(Constants.RAND_INT) + '] Int Request') except: self.log('Bad [' + str(Constants.RAND_INT) + '] Int Request') print_exc()
def send(self, args = []): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_CREATE_LOBBY) pkg.addString(args[0]) #game room name pkg.addInt32(int(args[1])) #gamemode pkg.addInt32(int(args[2])) #status self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_CREATE_LOBBY) + '] Create Lobby Request')
def send(self, args=None): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_HEALTH) pkg.addString(args[0]) #targeted player pkg.addInt32(args[1]) #damage amount self.cWriter.send(pkg, self.connection) #self.log('Sent [' + str(Constants.RAND_INT) + '] Int Request') except: self.log('Bad [' + str(Constants.RAND_INT) + '] Int Request') print_exc()
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
def getNewCarPosDatagram(self, num): newDatagram = PyDatagram() newDatagram.addUint8(PLAYER_ASSIGNMENT_MESSAGE) newDatagram.addUint8(num) newDatagram.addFloat32(self.carData.carlist[num].model.getX()) newDatagram.addFloat32(self.carData.carlist[num].model.getY()) vel = self.carData.carlist[num].vel.getXY() newDatagram.addFloat32(vel[0]) newDatagram.addFloat32(vel[1]) newDatagram.addFloat32(self.carData.carlist[num].model.getH()) for j in range(5): newDatagram.addBool(self.carData.carlist[num].input[j]) newDatagram.addInt32(self.carData.carlist[num].hp) return newDatagram
def send(self, args = None): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_HEALTH) pkg.addString(args[0])#targeted player pkg.addInt32(args[1])#damage amount self.cWriter.send(pkg, self.connection) #self.log('Sent [' + str(Constants.RAND_INT) + '] Int Request') except: self.log('Bad [' + str(Constants.RAND_INT) + '] Int Request') print_exc()
def send(self, args = None): try: pkg = PyDatagram() pkg.addUint16(Constants.RAND_STRING) pkg.addString(args['user_id']) pkg.addInt32(args['factionId'])#factionid pkg.addString(args['password']) self.cWriter.send(pkg, self.connection) #self.log('Sent [' + str(Constants.RAND_STRING) + '] Int Request') except: self.log('Bad [' + str(Constants.RAND_STRING) + '] String Request') print_exc()
def send(self, args=None): try: pkg = PyDatagram() pkg.addUint16(Constants.RAND_STRING) pkg.addString(args['user_id']) pkg.addInt32(args['factionId']) #factionid pkg.addString(args['password']) self.cWriter.send(pkg, self.connection) #self.log('Sent [' + str(Constants.RAND_STRING) + '] Int Request') except: self.log('Bad [' + str(Constants.RAND_STRING) + '] String Request') print_exc()
def handle_client_login(self, connection, di): ## Send the client OUR LOGIN response. (TODO) datagram = PyDatagram() #datagram.addUint16(0) #dummy datagram.addUint32(CLIENT_LOGIN_2_RESP) #msgType datagram.addUint8(0) #returnCode datagram.addString("") #errorString datagram.addString("dev") #username datagram.addUint8(1) #secretChatAllowed datagram.addUint8(1) # Client is always paid. datagram.addInt32(10000) # minutesRemaining, TODO! self.cw.send(datagram, connection)
def send(self, args=None): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_CONTROL_POINT_STATE) pkg.addInt32(args[0]) #cpId pkg.addInt32(args[1]) #timer pkg.addInt32(args[2]) #factionId self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_CONTROL_POINT_STATE) + '] CP Request') print_exc()
def send(self, args = None): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_CONTROL_POINT_STATE) pkg.addInt32(args[0])#cpId pkg.addInt32(args[1])#timer pkg.addInt32(args[2])#factionId self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_CONTROL_POINT_STATE) + '] CP Request') print_exc()
def send(self, args=[]): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_CREATE_LOBBY) pkg.addString(args[0]) #game room name pkg.addInt32(int(args[1])) #gamemode pkg.addInt32(int(args[2])) #status self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_CREATE_LOBBY) + '] Create Lobby Request')
def send(self, data = None): try: user_data = data.split() username = user_data[0] healthchange = int(user_data[1]) print username print healthchange pkg = PyDatagram() pkg.addUint16(Constants.CMSG_HEALTH) pkg.addString(username) pkg.addInt32(healthchange) self.cWriter.send(pkg, self.connection) except: self.log('Bad [' + str(Constants.CMSG_HEALTH) + '] Request') print_exc()
def send(self, args=[]): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_CHAT_ALL) pkg.addInt32(args[0]) #sender id pkg.addString(args[1]) #msg self.cWriter.send(pkg, self.connection) # print "id:", self.world.mainCharRef.playerId #elf.log('Sent [' + str(Constants.CMSG_CHAT_ALL) + '] Chat Request') except: self.log('Bad [' + str(Constants.CMSG_CHAT_ALL) + '] Chat Request') print_exc()
def getCarPosDatagramFromCar(self, num): # creates a car_message datagram from the entry in carData (used to get new cars up to date) newDatagram = PyDatagram() newDatagram.addUint8(CAR_MESSAGE) newDatagram.addUint8(num) newDatagram.addFloat32(self.carData.carlist[num].model.getX()) newDatagram.addFloat32(self.carData.carlist[num].model.getY()) vel = self.carData.carlist[num].vel.getXY() newDatagram.addFloat32(vel[0]) newDatagram.addFloat32(vel[1]) newDatagram.addFloat32(self.carData.carlist[num].model.getH()) for j in range(5): newDatagram.addBool(self.carData.carlist[num].input[j]) newDatagram.addBool(self.carData.carlist[num].lightsOn) newDatagram.addInt32(self.carData.carlist[num].hp) return newDatagram
def getNewCarPosDatagram(self, num): # same as getCarPosDatagramFromCar, but is a player_assignment_message newDatagram = PyDatagram() newDatagram.addUint8(PLAYER_ASSIGNMENT_MESSAGE) newDatagram.addUint8(num) newDatagram.addFloat32(self.carData.carlist[num].model.getX()) newDatagram.addFloat32(self.carData.carlist[num].model.getY()) vel = self.carData.carlist[num].vel.getXY() newDatagram.addFloat32(vel[0]) newDatagram.addFloat32(vel[1]) newDatagram.addFloat32(self.carData.carlist[num].model.getH()) for j in range(5): newDatagram.addBool(self.carData.carlist[num].input[j]) newDatagram.addBool(self.carData.carlist[num].lightsOn) newDatagram.addInt32(self.carData.carlist[num].hp) return newDatagram
def send(self, args=None): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_MOVE) pkg.addFloat32(args[0]) #x pkg.addFloat32(args[1]) #y pkg.addFloat32(args[2]) #z pkg.addFloat32(args[3]) #h pkg.addInt32(args[4]) #isMoving self.cWriter.send(pkg, self.connection) #self.log('Sent [' + str(Constants.RAND_FLOAT) + '] Float Request') except: self.log('Bad [' + str(Constants.CMSG_MOVE) + '] Move Request') print_exc()
def send(self, args=[]): try: # print "sender's id:", args[0] # print "receiver's id:", args[1] pkg = PyDatagram() pkg.addUint16(Constants.CMSG_CHAT_ONE) pkg.addInt32(args[0]) # sender's id pkg.addInt32(args[1]) # receiver's id pkg.addString(args[2]) # message self.cWriter.send(pkg, self.connection) # self.log('Sent [' + str(Constants.CMSG_CHAT_ONE) + '] Chat Request') except: self.log('Bad [' + str(Constants.CMSG_CHAT_ONE) + '] Chat Request') print_exc()
def handleClientLoginToontown(self, di, conn): if(MAINTENANCE == True): dg = PyDatagram() dg.addUint16(CLIENT_GO_GET_LOST) dg.addUint16(151) dg.addString('The servers are currently closed for maintenance.') self.cw.send(dg, conn) else: token = di.getString() sv = di.getString() if (token != 'daXy321/4432125/DSaGSX=='): self.notify.warning('Client doesn\'t have temporary token, booting.') dg = PyDatagram() dg.addUint16(CLIENT_GO_GET_LOST) dg.addUint16(101) dg.addString('Login token: %s doesn\'t exist.' % token) self.cw.send(dg, conn) elif (sv != SERVER_VERSION): self.notify.warning('Booting client out.') dg = PyDatagram() dg.addUint16(CLIENT_GO_GET_LOST) dg.addUint16(124) dg.addString('Client and Server version do not match. Server is running ' + SERVER_VERSION + ', while client was running ' + sv + '.') self.cw.send(dg, conn) else: now = datetime.now dg = PyDatagram() dg.addUint16(CLIENT_LOGIN_TOONTOWN_RESP) dg.addUint8(0) #Return Code dg.addString('OK') #respString dg.addUint32(123456) #Account Number dg.addString('Infinity') #Account Name dg.addUint8(1) #accountNameApproved dg.addString('YES') #self.openChatEnabled dg.addString('YES') #self.createFriendsWithChat dg.addString('YES') #chatCodeCreationRule dg.addUint32(time.time()) #sec? dg.addUint32(time.clock()) #usec? dg.addString('FULL') #self.isPaid dg.addString('YES') #WhiteListReponse dg.addString(time.strftime('%Y-%m-%d'))#lastLoggedInStr dg.addInt32(0) #accountDays dg.addString('NO_PARENT_ACCOUNT') dg.addString('Infinity') self.cw.send(dg, conn)
def send(self, pos): try: pkg = PyDatagram() pkg.addUint16(Constants.CMSG_MOVE) posNew = pos.split(",") pkg.addFloat32(float(posNew[0])) pkg.addFloat32(float(posNew[1])) pkg.addFloat32(float(posNew[2])) pkg.addFloat32(float(posNew[3])) pkg.addInt32(int(posNew[4])) self.cWriter.send(pkg, self.connection) #self.log('Sent [' + str(Constants.RAND_STRING) + '] Int Request') except: self.log('Bad [' + str(Constants.CMSG_MOVE) + '] Int Request') print_exc()
def sendLoginMsg(self): """ Send a message to the server with our loginName """ cr = self.cr # Time to send a login message datagram = PyDatagram() # Add message type datagram.addUint16(CLIENT_LOGIN_3) # Add the token datagram.addString(self.DISLToken) # Add the Server Version ID datagram.addString(cr.serverVersion) # Add the dc file hash datagram.addUint32(cr.hashVal) # Token type datagram.addInt32(CLIENT_LOGIN_3_DISL_TOKEN) # Add the download verification string. datagram.addString(cr.validateDownload) # And the magic word enable string. datagram.addString(cr.wantMagicWords) # Send the message cr.send(datagram)
def client_messager(self,msg,args=[]): if msg == "chat_send": order = PyDatagram() order.addUint16(CLIENT_CHAT) order.addInt32(args[0][0]) order.addInt32(args[0][1]) order.addInt32(args[0][2]) order.addString(args[1]) self.send_package(order) elif msg == "ready_button": order = PyDatagram() order.addUint16(CLIENT_READY) order.addInt32(args[0]) order.addInt32(args[1]) self.send_package(order) elif msg == "client_loaded": order = PyDatagram() order.addUint16(CLIENT_LOADED) self.send_package(order) elif msg == "game_init_request": order = PyDatagram() order.addUint16(CLIENT_INIT_REQUEST) order.addString(args[0]) order.addString(args[1]) self.send_package(order) elif msg == "build_start_request": order = PyDatagram() order.addUint16(BUILD_START_REQUEST) order.addInt32(args[0]) order.addInt32(args[1]) order.addString(args[2]) self.send_package(order) elif msg == "build_cancel_request": order = PyDatagram() order.addUint16(BUILD_CANCEL_REQUEST) order.addInt32(args[0]) self.send_package(order)
def intRequest(self, msg): pkg = PyDatagram() pkg.addUint16(1) pkg.addInt32(msg) return pkg
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)