コード例 #1
0
    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())
コード例 #2
0
    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())
コード例 #3
0
    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())
コード例 #4
0
    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())
コード例 #5
0
 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())
コード例 #6
0
 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
コード例 #7
0
 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())
コード例 #8
0
 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())
コード例 #9
0
 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())
コード例 #10
0
	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]
コード例 #11
0
 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
コード例 #12
0
    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())
コード例 #13
0
    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())
コード例 #14
0
    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())
コード例 #15
0
    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)
コード例 #16
0
 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())
コード例 #17
0
 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"
コード例 #18
0
    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())
コード例 #19
0
 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()
コード例 #20
0
    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())
コード例 #21
0
 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())
コード例 #22
0
    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())
コード例 #23
0
    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())
コード例 #24
0
    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())
コード例 #25
0
	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)
コード例 #26
0
 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())
コード例 #27
0
	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())
コード例 #28
0
    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())
コード例 #29
0
 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()
コード例 #30
0
    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())