def sendIgnoredsList(self, player, tribulleID): p = ByteArray() p.writeInt(tribulleID) p.writeShort(len(player.ignoredsList)) for ignored in player.ignoredsList: p.writeUTF(ignored) self.sendTribullePacket(player, 47, p.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 sendNewConsumable(self, player, consumable, count): player.playerConsumables[consumable] = count packet = ByteArray() packet.writeByte(0) packet.writeUnsignedShort(consumable) packet.writeUnsignedShort(count) self.users.sendPacket(player.channel, [100, 67], packet.toByteArray())
def sendChatQuem(self, player, tribulleID, chatName): quem = self.server.chats[ chatName] if chatName in self.server.chats else [] p = ByteArray().writeInt(tribulleID).writeByte( len(quem) > 0).writeShort(len(quem)) for playerName in quem: p.writeUTF(playerName) self.sendTribullePacket(player, 59, p.toByteArray())
def parse(users, channel, packet, packetID): player = channel.player room = player.room if room.isMusic: p = ByteArray().writeShort(len(room.musicList)) for playerName, data in room.musicList.items(): p.writeUTF(playerName) p.writeUTF(data["items"][0]["snippet"]["title"]) users.sendPacket(channel, [5, 73], p.toByteArray())
def parse(users, channel, packet, packetID): mode = packet.readByte() if mode == 0: mode = 1 channel.player.roomsListMode = mode packet2 = ByteArray() packet2.writeByte(len(users.server.rooms.roomsType)) for _type in users.server.rooms.roomsType: packet2.writeByte(_type) packet2.writeByte(mode) name = {9: "racing", 1: "", 10: "defilante", 2: "bootcamp", 8: "survivor", 3: "vanilla", 11: "music", 16: "village", 18: "minigame"}[mode] packet2.writeByte(1) packet2.writeUnsignedByte(channel.player.langueID) packet2.writeUTF("{} {}".format(users.server.config["name"], name)) packet2.writeUTF(str(users.server.rooms.getPlayersCountForMode(mode))) packet2.writeUTF("mjj") packet2.writeUTF("1") for roomName, room in users.server.rooms.rooms.items(): if room.roomType == mode: if not room.roomName[:1].lower() in ["*", "\x03"] or room.isPublic: if room.roomName[:2].lower() == channel.player.langue.lower() or room.isPublic: packet2.writeByte(0) packet2.writeUnsignedByte(users.server.langues.getLangueByName(room.roomName[:2])) packet2.writeUTF(roomName if room.isPublic else roomName[3:]) packet2.writeUnsignedShort(users.server.rooms.getPlayersCount(room)) packet2.writeUnsignedByte(0 if not room.isLimitedPlayers else room.maxPlayers) packet2.writeBoolean(room.isFuncorp) if mode == 8: if not "{}-quarentine1".format(channel.player.langue.lower()) in users.server.rooms.rooms: packet2.writeByte(0) packet2.writeUnsignedByte(users.server.langues.getLangueByName(channel.player.langue.lower())) packet2.writeUTF("quarentine1") packet2.writeUnsignedShort(0) packet2.writeUnsignedByte(0) packet2.writeBoolean(False) if mode == 9: if not "{}-fastracing1".format(channel.player.langue.lower()) in users.server.rooms.rooms: packet2.writeByte(0) packet2.writeUnsignedByte(users.server.langues.getLangueByName(channel.player.langue.lower())) packet2.writeUTF("fastracing1") packet2.writeUnsignedShort(0) packet2.writeUnsignedByte(0) packet2.writeBoolean(False) users.sendPacket(channel, [26, 35], packet2.toByteArray())
def openMissions(self, player): packet = ByteArray() packet.writeUnsignedByte(len(list(player.missions))) for id, values in player.missions.items(): packet.writeUnsignedShort(id) packet.writeUnsignedByte(values[0]) packet.writeUnsignedShort(values[1]) packet.writeUnsignedShort(values[2]) packet.writeUnsignedShort(values[3]) packet.writeUnsignedShort(0) packet.writeBoolean(False) self.users.sendPacket(player.channel, [144, 3], packet.toByteArray())
def sendShamanLook(self, player): p = ByteArray() count = 0 for item in player.shamanLook.split(","): realItem = int(item.split("_")[0]) if "_" in item else int(item) if realItem != 0: p.writeShort(realItem) count += 1 self.users.sendPacket( player.channel, [20, 24], ByteArray().writeShort(count).writeBytes( p.toByteArray()).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)
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 useConsumable(self, player, consumable): if consumable in list(player.playerConsumables): player.playerConsumables[consumable] -= 1 if player.playerConsumables[consumable] < 1: del player.playerConsumables[consumable] self.updateInventory(player, consumable, 0) else: self.updateInventory(player, consumable, player.playerConsumables[consumable]) packet = ByteArray() packet.writeInt(player.playerCode) packet.writeUnsignedShort(consumable) self.server.rooms.sendAll(player.room, [31, 3], packet.toByteArray())
def getShamanItemCustom(self, player, code): item = player.shamanItems for item in player.shamanItems: if "_" in item: itemSplited = item.split("_") custom = (itemSplited[1] if len(itemSplited) >= 2 else "").split("+") custom = list(filter(str, custom)) if int(itemSplited[0]) == code: p = ByteArray().writeByte(len(custom)) x = 0 while x < len(custom): p.writeInt(int(custom[x], 16)) x += 1 return p.toByteArray() return b"\x00"
def sendChatLog(self, player, player2): packet = ByteArray() packet.writeUTF(self.server.users.parsePlayerName(player2)) packet.writeByte(len(list(player2.chatLog["room"]))) for message in player2.chatLog["room"]: packet.writeUTF(message) packet.writeUTF("") packet.writeByte(len(list(player2.chatLog["whisper"]))) for playerName, messages in player2.chatLog["whisper"].items(): packet.writeUTF(playerName) packet.writeByte(len(messages)) for message in messages: packet.writeUTF(message) packet.writeUTF("") self.server.users.sendPacket(player.channel, [25, 10], packet.toByteArray())
def sendLookChange(self, player): p = ByteArray() look = player.playerLook.split(";") p.writeShort(int(look[0])) for item in look[1].split(","): if "_" in item: itemSplited = item.split("_") realItem = itemSplited[0] custom = itemSplited[1] if len(itemSplited) >= 2 else "" realCustom = [] if custom == "" else custom.split("+") p.writeInt(int(realItem)).writeByte(len(realCustom)) for cust in realCustom: p.writeInt(int(cust, 16)) else: p.writeInt(int(item)).writeByte(0) p.writeInt(int(player.mouseColor, 16)) self.users.sendPacket(player.channel, [20, 17], p.toByteArray())
def openInventory(self, player): packet = ByteArray() packet.writeShort(len(list(player.playerConsumables))) for id, count in player.playerConsumables.items(): packet.writeShort(id) packet.writeUnsignedByte(250 if count > 250 else count) packet.writeUnsignedByte(0) packet.writeBoolean(True) packet.writeBoolean(True) packet.writeBoolean(True) packet.writeBoolean(True) packet.writeBoolean(True) packet.writeBoolean(False) packet.writeBoolean(False) packet.writeUnsignedByte( player.equipedConsumables.index(id) + 1 if id in player.equipedConsumables else 0) self.users.sendPacket(player.channel, [31, 1], packet.toByteArray())
def parse(users, channel, packet, packetID): player = channel.player chatID = packet.readByte() message = String.filtreChatString(packet.readUTF()) k = ByteArray().writeByte(chatID).writeUTF( users.parsePlayerName(player)).writeUTF(message).writeBoolean( False).writeBoolean(False).writeByte(0) for player2 in users.players.values(): if chatID == 0 and player.privLevel >= 5: users.sendPacket(player2.channel, [6, 10], k.toByteArray()) elif chatID == 1 and player.privLevel >= 5: users.sendPacket(player2.channel, [6, 10], k.toByteArray()) elif chatID == 2 and player.privLevel >= 3: if player2.privLevel >= 3 and player2.langueID == player.langueID: users.sendPacket(player2.channel, [6, 10], k.toByteArray()) elif chatID == 3 and player.privLevel >= 5: if player2.privLevel >= 5 and player2.langueID == player.langueID: users.sendPacket(player2.channel, [6, 10], k.toByteArray()) elif chatID == 4 and player.privLevel >= 5: if player2.privLevel >= 5: users.sendPacket(player2.channel, [6, 10], k.toByteArray()) elif chatID == 5 and player.privLevel >= 3: if player2.privLevel >= 3: users.sendPacket(player2.channel, [6, 10], k.toByteArray()) elif chatID == 7 and player.isMapcrew: if player2.isMapcrew and player2.langueID == player.langueID: users.sendPacket(player2.channel, [6, 10], k.toByteArray()) elif chatID == 8 and player.isLuacrew: if player2.isLuacrew and player2.langueID == player.langueID: users.sendPacket(player2.channel, [6, 10], k.toByteArray()) elif chatID == 9 and player.isFuncorp: if player2.isFuncorp and player2.langueID == player.langueID: users.sendPacket(player2.channel, [6, 10], k.toByteArray()) else: break
def parse(users, channel, packet, packetID): codePartie = packet.readInt() droiteEnCours = packet.readBoolean() gaucheEnCours = packet.readBoolean() px = packet.readInt() py = packet.readInt() vx = packet.readUnsignedShort() vy = packet.readUnsignedShort() jump = packet.readBoolean() jump_img = packet.readByte() portal = packet.readByte() isAngle = packet.bytesAvailable() angle = packet.readUnsignedShort() if isAngle else -1 vel_angle = packet.readUnsignedShort() if isAngle else -1 loc1 = packet.readBoolean() if isAngle else False player = channel.player room = player.room if codePartie == room.lastCodePartie: if droiteEnCours or gaucheEnCours: player.isMovingRight = droiteEnCours player.isMovingLeft = gaucheEnCours if player.isAfk: player.isAfk = False player.lastAfkTime = users.server.getTime() player.posX = px * 800 / 2700 player.posY = py * 800 / 2700 player.velX = vx player.velY = vy player.isJumping = jump packet2 = ByteArray().writeInt( player.playerCode).writeInt(codePartie).writeBoolean( droiteEnCours).writeBoolean(gaucheEnCours).writeInt( px).writeInt(py).writeUnsignedShort( vx).writeUnsignedShort(vy).writeBoolean( jump).writeByte(jump_img).writeByte(portal) if isAngle: packet2.writeUnsignedShort(angle).writeUnsignedShort( vel_angle).writeBoolean(loc1) users.server.rooms.sendAllOthers(channel.player, room, [4, 4], packet2.toByteArray())
def parse(users, channel, packet, packetID): player = channel.player room = player.room roundCode = packet.readInt() if roundCode == room.lastCodePartie and room.rooms.getPlayersCount( room) >= 2: packet2 = ByteArray() while packet.bytesAvailable(): packet2.writeShort(packet.readShort()) code = packet.readShort() packet2.writeShort(code).writeBytes( packet.readBytes(14) if code != -1 else b"") if code != -1: packet2.writeBoolean(True) if ((((room.roundTime + room.addTime) * 1000) + (room.gameStartTimeMillis - int(users.server.getTime()))) > 5000): room.rooms.sendAllOthers(player, room, [4, 3], packet2.toByteArray())
def sendShopList(self, player): p = ByteArray().writeInt(player.shopCheeses).writeInt( player.shopFraises).writeUTF(player.playerLook).writeInt( len(player.shopItems)) for item in player.shopItems: if "_" in item: itemSplited = item.split("_") realItem = itemSplited[0] custom = itemSplited[1] if len(itemSplited) >= 2 else "" realCustom = [] if custom == "" else custom.split("+") p.writeByte(len(realCustom) + 1).writeInt(int(realItem)) for cust in realCustom: p.writeInt(int(cust, 16)) else: p.writeByte(0).writeInt(int(item)) p.writeInt(0).writeByte(0).writeShort(len(player.clothes)) for clothe in player.clothes: clotheSplited = clothe.split("/") p.writeUTF(clotheSplited[1] + ";" + clotheSplited[2] + ";" + clotheSplited[3]) p.writeShort(len(player.shamanItems)) for item in player.shamanItems: if "_" in item: itemSplited = item.split("_") realItem = itemSplited[0] custom = itemSplited[1] if len(itemSplited) >= 2 else "" realCustom = [] if custom == "" else custom.split("+") p.writeShort(int(realItem)).writeBoolean( item in player.shamanLook.split(",")).writeByte( len(realCustom) + 1) for cust in realCustom: p.writeInt(int(cust, 16)) else: p.writeShort(int(item)).writeBoolean( item in player.shamanLook.split(",")).writeByte(0) p.writeShort(0) self.users.sendPacket(player.channel, [8, 20], p.toByteArray())
def sendShamanItems(self, player): p = ByteArray() shamanItems = player.shamanItems p.writeShort(len(shamanItems)) for item in shamanItems: if "_" in item: itemSplited = item.split("_") realItem = itemSplited[0] custom = itemSplited[1] if len(itemSplited) >= 2 else "" realCustom = [] if custom == "" else custom.split("+") p.writeShort(int(realItem)).writeBoolean( item in player.shamanLook.split(",")).writeByte( len(realCustom) + 1) x = 0 while x < len(realCustom): p.writeInt(int(realCustom[x], 16)) x += 1 else: p.writeShort(int(item)).writeBoolean( item in player.shamanLook.split(",")).writeByte(0) self.users.sendPacket(player.channel, [20, 27], p.toByteArray())
def openModoPwet(self, player): reports = 0 totalReports = len(self.reports["names"]) count = 0 bannedList = {} deletedList = {} disconnectList = [] p = ByteArray() while reports < totalReports: playerName = self.reports["names"][reports] reports += 1 if player.modoPwetLangue == "ALL" or self.reports[playerName][ "langue"] == player.modoPwetLangue.upper(): count += 1 if count >= 255: break p.writeUnsignedByte(count) p.writeShort(reports) p.writeUTF(self.reports[playerName]["langue"].upper()) p.writeUTF(playerName) roomName = self.getPlayerRoomName(playerName) p.writeUTF(roomName) mods = self.getModsRoom(roomName) p.writeByte(len(mods)) for mod in mods: p.writeUTF(mod) p.writeInt(self.getProfileCheeseCount(playerName)) reporters = 0 totalReporters = len(self.reports[playerName]["types"]) p.writeByte(totalReporters) while reporters < totalReporters: reporters += 1 p.writeUTF( self.reports[playerName]["reporters"][reporters - 1]) p.writeShort( self.getProfileCheeseCount( self.reports[playerName]["reporters"][reporters - 1])) p.writeUTF(self.reports[playerName]["comments"][reporters - 1]) p.writeByte(self.reports[playerName]["types"][reporters - 1]) p.writeShort(reporters) p.writeBoolean(playerName in list(self.server.mutes)) if playerName in list(self.server.mutes): mute = self.server.mutes[playerName] p.writeUTF(mute["by"]) p.writeShort(self.server.getHoursDiff(mute["time"])) p.writeUTF(mute["reason"]) if self.reports[playerName]["status"] == "banned": x = {} x["banhours"] = self.reports[playerName]["banhours"] x["banreason"] = self.reports[playerName]["banreason"] x["bannedby"] = self.reports[playerName]["bannedby"] bannedList[playerName] = x if self.reports[playerName]["status"] == "deleted": x = {} x["deletedby"] = self.reports[playerName]["deletedby"] deletedList[playerName] = x if self.reports[playerName]["status"] == "disconnected": disconnectList.append(playerName) self.server.users.sendPacket( player.channel, [25, 2], ByteArray().writeUnsignedByte(count).writeBytes( p.toByteArray()).toByteArray()) for user in disconnectList: self.changeReportStatusDisconnect(player, user) for user in deletedList.keys(): self.changeReportStatusDeleted(player, user, deletedList[user]["deletedby"]) for user in bannedList.keys(): self.changeReportStatusBanned(player, user, bannedList[user]["banhours"], bannedList[user]["banreason"], bannedList[user]["bannedby"])
def parse(users, channel, packet, packetID): server = channel.server player = channel.player p = ByteArray() p.writeInt(player.shopCheeses) p.writeInt(player.shopFraises) p.writeUTF(player.playerLook) p.writeInt(len(player.shopItems)) for item in player.shopItems: if "_" in item: itemSplited = item.split("_") realItem = itemSplited[0] custom = itemSplited[1] if len(itemSplited) >= 2 else "" realCustom = [] if custom == "" else custom.split("+") p.writeByte(len(realCustom) + 1) p.writeInt(int(realItem)) for cust in realCustom: p.writeInt(int(cust, 16)) else: p.writeByte(0) p.writeInt(int(item)) p.writeInt(len(server.shopList["mouse"])) for shop in server.shopList["mouse"]: s = shop.split(",") p.writeUnsignedShort(int(s[0])) p.writeUnsignedShort(int(s[1])) p.writeByte(int(s[2])) p.writeBoolean(int(s[3])) p.writeByte(int(s[4])) p.writeInt(int(s[5])) p.writeInt(int(s[6])) p.writeUnsignedShort(0) p.writeByte(0) p.writeShort(len(player.clothes)) for clothe in player.clothes: clotheSplited = clothe.split("/") p.writeUTF(clotheSplited[1] + ";" + clotheSplited[2] + ";" + clotheSplited[3]) p.writeShort(len(player.shamanItems)) for item in player.shamanItems: if "_" in item: itemSplited = item.split("_") realItem = itemSplited[0] custom = itemSplited[1] if len(itemSplited) >= 2 else "" realCustom = [] if custom == "" else custom.split("+") p.writeShort(int(realItem)) p.writeBoolean(item in player.shamanLook.split(",")) p.writeByte(len(realCustom) + 1) for cust in realCustom: p.writeInt(int(cust, 16)) else: p.writeShort(int(item)) p.writeBoolean(item in player.shamanLook.split(",")) p.writeByte(0) p.writeShort(len(server.shopList["shaman"])) for shop in server.shopList["shaman"]: s = shop.split(",") p.writeInt(int(s[0])) p.writeByte(int(s[1])) p.writeBoolean(int(s[2])) p.writeByte(int(s[3])) p.writeInt(int(s[4])) p.writeShort(int(s[5])) users.sendPacket(channel, [8, 20], p.toByteArray())
def updateInventory(self, player, consumable, count): packet = ByteArray() packet.writeUnsignedShort(consumable) packet.writeUnsignedByte(250 if count > 250 else count) self.users.sendPacket(player.channel, [31, 2], packet.toByteArray())