def parse(users, channel, packet, packetID): tribulleID = packet.readInt() playerName = packet.readUTF().capitalize() player = channel.player if not users.checkPlayerNameExist(playerName): users.server.tribulle.sendTribullePacket( channel.player, 43, ByteArray().writeInt(tribulleID).writeByte(12).toByteArray()) elif len(player.ignoredsList) >= 200: users.server.tribulle.sendTribullePacket( channel.player, 43, ByteArray().writeInt(tribulleID).writeByte(7).toByteArray()) elif playerName in player.friendsList: users.server.tribulle.sendTribullePacket( channel.player, 43, ByteArray().writeInt(tribulleID).writeByte(4).toByteArray()) elif playerName in player.ignoredsList: users.server.tribulle.sendTribullePacket( channel.player, 43, ByteArray().writeInt(tribulleID).writeByte(4).toByteArray()) else: player.ignoredsList.append(playerName) users.server.tribulle.sendTribullePacket( channel.player, 43, ByteArray().writeInt(tribulleID).writeByte(1).toByteArray())
def parse(users, channel, packet, packetID): tribulleID = packet.readInt() chatName = packet.readUTF() player = channel.player if not re.match("^[ a-zA-Z0-9]*$", chatName): users.server.tribulle.sendTribullePacket( channel.player, 55, ByteArray().writeInt(tribulleID).writeByte(8).toByteArray()) elif chatName == "V.I.P": users.server.tribulle.sendTribullePacket( channel.player, 55, ByteArray().writeInt(tribulleID).writeByte(8).toByteArray()) else: if not chatName in users.server.chats: users.server.chats[chatName] = [] if len(users.server.chats[chatName]) >= 200: users.server.tribulle.sendTribullePacket( channel.player, 55, ByteArray().writeInt(tribulleID).writeByte( 7).toByteArray()) else: users.server.chats[chatName].append( users.parsePlayerName(player)) player.chats.append(chatName) users.server.tribulle.sendChatJoin(player, chatName) users.server.tribulle.sendTribullePacket( player, 55, ByteArray().writeInt(tribulleID).writeByte( 1).toByteArray())
def parse(users, channel, packet, packetID): tribulleID = packet.readInt() playerName = packet.readUTF().capitalize() player = channel.player if not playerName in player.friendsList: users.server.tribulle.sendTribullePacket( channel.player, 21, ByteArray().writeInt(tribulleID).writeByte(0).toByteArray()) else: player.friendsList.remove(playerName) if playerName in users.players and users.parsePlayerName( player ) in users.players[playerName].friendsList and users.players[ playerName].friendsOpen: users.server.tribulle.sendFriendsList( users.players[playerName]) if player.friendsOpen: users.server.tribulle.sendFriendsList(player) users.server.tribulle.sendTribullePacket( channel.player, 21, ByteArray().writeInt(tribulleID).writeByte(1).toByteArray())
def parse(users, channel, packet, packetID): fullItem = packet.readShort() isFraise = packet.readBoolean() price = packet.readShort() player = channel.player if isFraise: if player.shopFraises < price: return player.shopFraises -= price else: if player.shopCheeses < price: return player.shopCheeses -= price player.shamanItems.append(str(fullItem)) users.shop.sendShopList(player) users.checkShopTitleUnlocked(player) users.sendPacket( channel, [20, 2], ByteArray().writeInt(fullItem).writeByte(0).toByteArray()) users.server.rooms.sendAll( player.room, [8, 44], ByteArray().writeInt(player.playerCode).writeByte(1).writeInt( fullItem).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 msg(self, packet, packetID): keys = self.getKeys( "msg", self.users.server.config["protection"]["packetKeys"]) packet2 = ByteArray() while packet.bytesAvailable(): packetID = (packetID + 1) % len(keys) packet2.write( chr((packet.readByte() ^ keys[packetID]) & 255).encode()) return packet2
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 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 sendFriendDisconnected(self, player, player2): self.sendTribullePacket( player2, 33, ByteArray().writeUTF( self.users.parsePlayerName(player).lower()).toByteArray()) self.sendTribullePacket( player2, 35, ByteArray().writeInt(player.playerID).writeUTF( self.users.parsePlayerName(player).lower()).writeByte( player.gender).writeInt(player.playerID).writeByte( 1).writeByte(0).writeInt(1).writeUTF("").writeInt( player.lastLogin).toByteArray())
def parse(users, channel, packet, packetID): player = channel.player room = player.room handyMouseByte = packet.readByte() objectID = packet.readInt() if room.lastHandymouse[0] == -1: room.lastHandymouse = [objectID, handyMouseByte] else: users.server.rooms.sendAll(room, [5, 35], ByteArray().writeByte(handyMouseByte).writeInt(objectID).writeByte(room.lastHandymouse[1]).writeInt(room.lastHandymouse[0]).toByteArray()) users.server.rooms.sendAll(room, [5, 40], ByteArray().writeByte(77).writeByte(1).toByteArray()) room.lastHandymouse = [-1, -1]
def identification(self, packet, packetID): datas = [] count = packet.readUnsignedShort() for x in range(count): datas.append(packet.readUnsignedInt()) datas = self.xxtea_decrypt( datas, self.getKeys("identification", self.users.server.config["protection"]["packetKeys"])) packet2 = ByteArray() for data in datas: packet2.writeInt(data) return packet2
def parse(users, channel, packet, packetID): itemID = packet.readInt() isFraise = packet.readBoolean() price = packet.readShort() player = channel.player if isFraise: if player.shopFraises < price: return player.shopFraises -= price else: if player.shopCheeses < price: return player.shopCheeses -= price player.shopItems.append(str(itemID)) users.shop.sendShopList(player) users.checkShopTitleUnlocked(player) # mission if len(player.shopItems) >= 1 and not player.missions[50][4]: users.sendLangueMessage(channel, player.langue.lower(), "$Mission_Complete", ["32"]) users.skills.earnExp(player, 32) player.missions[50][1] += 1 player.missions[50][4] = True if not 550.1 in player.titlesList: player.titlesList.append(550.1) player.titleID = 550.1 users.sendUnlockedTitle(player) users.sendTitleList(player) users.sendChangeTitle(player) users.sendPacket( channel, [20, 2], ByteArray().writeInt(itemID).writeByte(1).toByteArray()) users.server.rooms.sendAll( player.room, [8, 44], ByteArray().writeInt( player.playerCode).writeByte(0).writeInt(itemID).toByteArray()) if itemID in users.shopBadges: unlockedBadge = users.shopBadges[itemID] player.shopBadges.append(unlockedBadge) users.server.rooms.sendAll( player.room, [8, 42], ByteArray().writeInt( player.playerCode).writeShort(unlockedBadge).toByteArray())
def parse(users, channel, packet, packetID): tribulleID = packet.readInt() player = channel.player if player.marriage in users.players: player2 = users.players[player.marriage] player.marriage = "" player2.marriage = "" users.server.tribulle.sendTribullePacket( player, 41, ByteArray().writeUTF( users.parsePlayerName(player2).lower().lower()). writeBoolean(False).toByteArray()) users.server.tribulle.sendTribullePacket( player2, 41, ByteArray().writeUTF( users.parsePlayerName(player).lower().lower()). writeBoolean(False).toByteArray()) if player.friendsOpen: users.server.tribulle.sendFriendsList(player) if player2.friendsOpen: users.server.tribulle.sendFriendsList(player2) users.server.tribulle.sendTribullePacket( player, 27, ByteArray().writeInt(tribulleID).writeByte(1).toByteArray()) elif users.checkPlayerNameExist(player.marriage): playerName, playerTag = player.marriage.split("#") pool = users.server.database.execute( "UPDATE users SET marriage = %s WHERE playerName = %s AND playerTag = %s", ("", playerName, playerTag)) users.server.database.commitAll() player.marriage = "" if player.friendsOpen: users.server.tribulle.sendFriendsList(player) users.server.tribulle.sendTribullePacket( player, 27, ByteArray().writeInt(tribulleID).writeByte(1).toByteArray()) else: users.server.tribulle.sendTribullePacket( player, 27, ByteArray().writeInt(tribulleID).writeByte(0).toByteArray())
def parse(users, channel, packet, packetID): tribulleID = packet.readInt() gender = packet.readByte() player = channel.player player.gender = gender users.server.tribulle.sendTribullePacket( channel.player, 12, ByteArray().writeByte(player.gender).toByteArray()) users.server.tribulle.sendTribullePacket( channel.player, 11, ByteArray().writeInt(tribulleID).writeByte(1).toByteArray())
def addClient(self, player): player.funColor = "" player.funMouseColor = "" player.isNewPlayer = True self.players[self.users.parsePlayerName(player)] = player if len(self.players) == 1: if not self.isEditeur: if self.started: self.startMap() else: self.start() else: self.users.resetPlayer(player) player.isDead = True if not player.isHide: self.rooms.sendAllOthers( player, self, [144, 2], ByteArray().writeBytes( self.rooms.server.users.getPlayerData(player)). writeBoolean(False).writeBoolean(True).toByteArray()) self.users.startPlayer(player, self) if not player.isHide: if self.autoRespawn: self.rooms.server.users.respawnMouse(player)
def movePlayer(self, player, xPosition, yPosition, pOffSet, xSpeed, ySpeed, sOffSet): self.users.sendPacket( player.channel, [8, 3], ByteArray().writeShort(xPosition).writeShort( yPosition).writeBoolean(pOffSet).writeShort(xSpeed).writeShort( ySpeed).writeBoolean(sOffSet).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 parse(users, channel, packet, packetID): tribulleID = packet.readInt() playerName = packet.readUTF().capitalize() player = channel.player if not playerName in player.ignoredsList: users.server.tribulle.sendTribullePacket( channel.player, 45, ByteArray().writeInt(tribulleID).writeByte(0).toByteArray()) else: player.ignoredsList.remove(playerName) users.server.tribulle.sendTribullePacket( channel.player, 45, ByteArray().writeInt(tribulleID).writeByte(1).toByteArray())
def getPlayerOnlineData(self, player, player2): return ByteArray().writeInt(player2.playerID).writeUTF( self.users.parsePlayerName(player2).lower()).writeByte( player2.gender).writeInt(player2.playerID).writeBoolean( self.users.parsePlayerName(player) in player2.friendsList ).writeBoolean(True).writeInt(4).writeUTF( player2.room.roomName).writeInt(0).toByteArray()
def parsePacket(self, packet, buff): if packet.length() > 0: x = 0 length = 0 byte1 = (packet.readByte() & 0xFF) length = (length | ((byte1 & 127) << (x * 7))) x += 1 while (byte1 & 128) == 128 and x < 5: if not packet.bytesAvailable(): return byte1 = (packet.readByte() & 0xFF) length = (length | ((byte1 & 127) << (x * 7))) x += 1 if length != 0: packetID = packet.readByte() if packet.length() == length: if packet.length() >= 2: self.parse.parsePacket(self, packet, packetID) elif packet.length() < length: self.lastPacket = buff elif packet.length() > length: data = packet.read(length) if length >= 2: self.parse.parsePacket(self, ByteArray(data), packetID) if packet.length() >= 2: self.parsePacket(packet, packet.toByteArray())
def sendFriendChangedRoom(self, player, player2): self.sendTribullePacket( player2, 35, ByteArray().writeInt(player.playerID).writeUTF( self.users.parsePlayerName(player).lower()).writeByte( player.gender).writeInt(player.playerID).writeByte( 1).writeByte(1).writeInt(4).writeUTF( player.room.roomName).writeInt(0).toByteArray())
def parse(users, channel, packet, packetID): pingID = packet.readByte() if pingID == 20: channel.player.playerPing[0] = round(users.server.getTime() * 1000) users.sendPacket(channel, [28, 6], ByteArray().writeByte(pingID).toByteArray())
def parse(users, channel, packet, packetID): player = channel.player room = channel.player.room room.rooms.sendAll( room, [27, 11], ByteArray().writeInt(player.playerCode).writeBytes( packet.toByteArray()).toByteArray())
def parse(users, channel, packet, packetID): player = channel.player room = player.room bridgeCode = packet.readShort() room.rooms.sendAllOthers( player, room, [5, 24], ByteArray().writeShort(bridgeCode).toByteArray())
def parse(users, channel, packet, packetID): emoteID = packet.readByte() playerCode = packet.readInt() flag = packet.readUTF() if packet.bytesAvailable() else "" player = channel.player room = channel.player.room users.sendPlayerEmote(player, room, emoteID, flag, True, False) if playerCode != -1: if emoteID == 14: users.sendPlayerEmote(player, room, 14, flag, False, False) users.sendPlayerEmote(player, room, 15, flag, False, False) player2 = None for p in room.players.values(): if p.playerCode == playerCode: player2 = p if player2 != None: users.sendPlayerEmote(player2, room, 14, flag, False, False) users.sendPlayerEmote(player2, room, 15, flag, False, False) elif emoteID == 18: users.sendPlayerEmote(player, room, 18, flag, False, False) users.sendPlayerEmote(player, room, 19, flag, False, False) player2 = None for p in room.players.values(): if p.playerCode == playerCode: player2 = p if player2 != None: users.sendPlayerEmote(player2, room, 17, flag, False, False) users.sendPlayerEmote(player2, room, 19, flag, False, False) elif emoteID == 22: users.sendPlayerEmote(player, room, 22, flag, False, False) users.sendPlayerEmote(player, room, 23, flag, False, False) player2 = None for p in room.players.values(): if p.playerCode == playerCode: player2 = p if player2 != None: users.sendPlayerEmote(player2, room, 22, flag, False, False) users.sendPlayerEmote(player2, room, 23, flag, False, False) elif emoteID == 26: users.sendPlayerEmote(player, room, 26, flag, False, False) users.sendPlayerEmote(player, room, 27, flag, False, False) player2 = None for p in room.players.values(): if p.playerCode == playerCode: player2 = p if player2 != None: users.sendPlayerEmote(player2, room, 26, flag, False, False) users.sendPlayerEmote(player2, room, 27, flag, False, False) room.rooms.sendAll(room, [100, 5], ByteArray().writeInt(player.playerCode).writeByte(random.choice([0, 1, 2])).writeInt(player2.playerCode).writeByte(random.choice([0, 1, 2])).toByteArray()) if player.isShaman: users.skills.parseEmoteSkill(player, room, emoteID)
def sendShamanSkills(self, channel, refresh): packet = ByteArray().writeByte(len(channel.player.playerSkills)) for skillID, count in channel.player.playerSkills.items(): packet.writeByte(skillID) packet.writeByte(count) self.users.sendPacket(channel, [8, 22], packet.writeBoolean(refresh).toByteArray())
def parse(users, channel, packet, packetID): tribulleID = packet.readInt() player = channel.player player.friendsOpen = True users.server.tribulle.sendFriendsList(channel.player) users.server.tribulle.sendTribullePacket(channel.player, 29, ByteArray().writeInt(tribulleID).writeByte(1).toByteArray())
def parse(users, channel, packet, packetID): objectID = packet.readShort() player = channel.player if not player.isDead: users.server.rooms.sendAll( channel.player.room, [27, 11], ByteArray().writeInt( player.playerCode).writeShort(objectID).toByteArray())
def getPlayerDBData(self, player, pool_result): return ByteArray().writeInt(pool_result["playerID"]).writeUTF( "{}#{}".format(pool_result["playerName"], pool_result["playerTag"]).lower() ).writeByte(pool_result["gender"]).writeInt( pool_result["playerID"]).writeBoolean( self.users.parsePlayerName(player) in pool_result["friendsList"].split(",")).writeBoolean( False).writeInt(1).writeUTF("").writeInt( pool_result["lastLogin"]).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())