def parse(users, channel, packet, packetID): if len(users.server.cache.captchaCaches) >= 100: letter = random.choice(list(users.server.cache.captchaCaches)) img = users.server.cache.captchaCaches[letter] else: letter, img = users.server.captcha.getCaptcha(4) users.server.cache.captchaCaches[letter] = img channel.player.captcha = letter.upper() width, height = img.size pixelsCount = 0 pixels = ByteArray() p2 = ByteArray() p2.writeByte(0) p2.writeShort(width) p2.writeShort(height) for row in range(height): for col in range(width): pix = img.getpixel((col, row)) pixels.writeUnsignedByte(pix[0]) pixels.writeUnsignedByte(pix[1]) pixels.writeUnsignedByte(pix[2]) pixels.writeUnsignedByte(0) pixelsCount += 1 p2.writeShort(pixelsCount) p2.writeBytes(pixels.toByteArray()) zlibCompress = zlib.compress(p2.toByteArray()) p3 = ByteArray() p3.writeInt(len(zlibCompress)) p3.writeBytes(zlibCompress) users.sendPacket(channel, [26, 20], p3.toByteArray())
def sendFriendsList(self, player): p = ByteArray() if player.marriage in self.users.players: marriage = self.users.players[player.marriage] p.writeBytes(self.getPlayerOnlineData(player, marriage)) elif self.users.checkPlayerNameExist(player.marriage): name, tag = player.marriage.split("#") pool = self.server.database.execute( "SELECT * FROM users WHERE playerName = %s AND playerTag = %s", (name, tag)) results = self.server.database.fetchone(pool) p.writeBytes(self.getPlayerDBData(player, results)) else: p.writeBytes(self.getPlayerNoData()) p.writeShort(len(player.friendsList)) for friend in player.friendsList: if friend in self.users.players: f = self.users.players[friend] p.writeBytes(self.getPlayerOnlineData(player, f)) elif self.users.checkPlayerNameExist(friend): name, tag = friend.split("#") pool = self.server.database.execute( "SELECT * FROM users WHERE playerName = %s AND playerTag = %s", (name, tag)) results = self.server.database.fetchone(pool) p.writeBytes(self.getPlayerDBData(player, results)) else: p.writeBytes(self.getPlayerNoData()) self.sendTribullePacket(player, 34, p.toByteArray())
def joinTribulle(self, player): self.users.sendPacket(player.channel, [60, 4], ByteArray().writeBoolean(True).toByteArray()) p = ByteArray().writeByte(player.gender).writeInt(player.playerID) if player.marriage in self.users.players: marriage = self.users.players[player.marriage] p.writeBytes(self.getPlayerOnlineData(player, marriage)) elif self.users.checkPlayerNameExist(player.marriage): name, tag = player.marriage.split("#") pool = self.server.database.execute( "SELECT * FROM users WHERE playerName = %s AND playerTag = %s", (name, tag)) results = self.server.database.fetchone(pool) p.writeBytes(self.getPlayerDBData(player, results)) else: p.writeBytes(self.getPlayerNoData()) p.writeShort(len(player.friendsList)) for friend in player.friendsList: if friend in self.users.players: f = self.users.players[friend] p.writeBytes(self.getPlayerOnlineData(player, f)) elif self.users.checkPlayerNameExist(friend): name, tag = friend.split("#") pool = self.server.database.execute( "SELECT * FROM users WHERE playerName = %s AND playerTag = %s", (name, tag)) results = self.server.database.fetchone(pool) p.writeBytes(self.getPlayerDBData(player, results)) else: p.writeBytes(self.getPlayerNoData()) p.writeShort(len(player.ignoredsList)) for ignored in player.ignoredsList: p.writeUTF(ignored) if player.tribe != None: p.writeUTF(self.session.tribe.tribeName).writeInt( self.session.tribe.tribeID).writeUTF( self.session.tribe.tribeMessage).writeInt( self.session.tribe.tribeHouse).writeUTF( self.session.tribe.tribeRanks).writeInt( self.session.user["tribe_rank"]) else: p.writeUTF("").writeInt(0).writeUTF("").writeInt(0).writeUTF( "").writeInt(0) self.sendTribullePacket(player, 3, p.toByteArray()) for friend in self.getFriendsClass(player): self.server.tribulle.sendFriendConnected(player, friend)