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
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
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 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
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()
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
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()
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()
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
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 '''
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
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)
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)
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)
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)