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