Ejemplo n.º 1
0
    def write_data(self, stream):
        stream.write(c_bit(self.stats))

        if self.stats:
            stream.write(c_uint32(self.health))
            stream.write(c_float(self.max_health))

            stream.write(c_uint32(self.armor))
            stream.write(c_float(self.max_armor))

            stream.write(c_uint32(self.imagination))
            stream.write(c_float(self.max_imagination))

            stream.write(c_uint32(0))  # NOTE: unknown
            stream.write(c_bit(True))
            stream.write(c_bit(False))
            stream.write(c_bit(False))

            stream.write(c_float(self.max_health))
            stream.write(c_float(self.max_armor))
            stream.write(c_float(self.max_imagination))

            stream.write(c_uint32(len(self.factions)))

            for faction_id in self.factions:
                stream.write(c_int32(faction_id))

            stream.write(c_bit(self.smashable))
Ejemplo n.º 2
0
 def serialize(self, stream):
     """
     Serializes the packet
     """
     super().serialize(stream)
     stream.write(c_uint32(self.game_version))
     stream.write(c_uint32(self.unknown))
     stream.write(c_uint32(self.remote_conn_type))
     stream.write(c_uint32(self.process_id))
     stream.write(self.local_ip, allocated_length=33)
Ejemplo n.º 3
0
    def serialize(self, stream):
        stream.write(c_bit(True))
        stream.write(c_uint32(0))

        stream.write(c_bit(True))
        stream.write(c_uint32(self.state))
        stream.write(c_bit(self.success))
        stream.write(c_bit(self.enabled))
        stream.write(c_float(self.start))
        stream.write(c_float(self.paused))
Ejemplo n.º 4
0
    def write_construction(self, stream):
        stream.write(c_bit(self.jetpack))

        if self.jetpack:
            stream.write(c_uint32(self.jetpack_effect))
            stream.write(c_bit(False))

        stream.write(c_bit(True))  # NOTE: flag is unknown

        for _ in range(7):
            stream.write(c_uint32(0))

        self.write_data(stream)
Ejemplo n.º 5
0
    def serialize(self, stream):
        """
        Serializes the packet
        """
        super().serialize(stream)

        stream.write(c_uint16(self.zone_id))
        stream.write(c_uint16(self.map_instance))
        stream.write(c_uint32(self.map_clone))
        stream.write(c_uint32(self.map_checksum))
        stream.write(c_uint16(self.unknown1))
        stream.write(c_float(self.pos.x))
        stream.write(c_float(self.pos.y))
        stream.write(c_float(self.pos.z))
        stream.write(c_uint32(self.is_activity))
Ejemplo n.º 6
0
    def serialize(self, stream):
        stream.write(c_uint8(len(self.key) * 2))

        for char in self.key:
            stream.write(char.encode('latin1'))
            stream.write(b'\0')

        if not self.data_num:
            if isinstance(self.data, ElementTree.Element):
                stream.write(c_uint8(13))

                txt = b'<?xml version="1.0">' + ElementTree.tostring(self.data)

                stream.write(c_uint32(len(txt)))
                stream.write(txt)
            else:
                stream.write(c_uint8(LEGO_DATA_TYPES[self.data_type]))

                if self.data_type == str:
                    stream.write(self.data, length_type=c_uint)
                else:
                    stream.write(self.data_type(self.data))
        else:
            stream.write(c_uint8(self.data_num))
            stream.write(self.data)
Ejemplo n.º 7
0
    def serialize(self, stream):
        super().serialize(stream)

        stream.write(c_uint32(len(self.keys)))

        for key in self.keys:
            key.serialize(stream)
Ejemplo n.º 8
0
 def serialize(self, stream: WriteStream):
     """
     Serializes the packet
     """
     super().serialize(stream)
     stream.write(c_uint8(self.auth_status_code))
     stream.write(CString(self.unknown, allocated_length=33))
     stream.write(CString(self.unknown1, allocated_length=33*7))
     stream.write(self.client_version)
     stream.write(self.auth_token, allocated_length=33)
     stream.write(CString(self.char_ip, allocated_length=33))
     stream.write(CString(self.chat_ip, allocated_length=33))
     stream.write(c_uint16(self.char_port))
     stream.write(c_uint16(self.chat_port))
     stream.write(CString(self.unknown2, allocated_length=33))
     stream.write(CString(self.unknown3, allocated_length=37))
     stream.write(c_uint32(self.unknown4))
     stream.write(CString(self.localization, allocated_length=3))
     stream.write(c_bool(self.new_subscriber))
     stream.write(c_bool(self.is_ftp))
     stream.write(c_uint64(self.unknown5))
     stream.write(self.permission_error, length_type=c_uint16)
     # TODO: Implement stamps
     stream.write(c_uint32(4))
Ejemplo n.º 9
0
    def write_construction(self, stream):
        stream.write(c_bit(True))  # NOTE: unknown
        for _ in range(9):
            stream.write(c_uint32(0))

        self.write_data(stream)

        if self.stats:
            stream.write(c_bit(False))  # NOTE: unknown(?)
            stream.write(c_bit(False))  # NOTE: same as above

            if self.smashable:
                stream.write(c_bit(False))  # NOTE: unknown
                stream.write(c_bit(False))  # NOTE: same as above

        stream.write(c_bit(True))
        stream.write(c_bit(False))
Ejemplo n.º 10
0
    def post_creation(self, stream):
        """
        Writes part 2 of data
        """
        stream.write(c_bit(True))
        stream.write(c_bit(self.pvp))
        stream.write(c_bit(self.gm))
        stream.write(c_uint8(self.gmlevel))
        stream.write(c_bit(False))  # NOTE: unknown
        stream.write(c_uint8(0))  # NOTE: unknown

        stream.write(c_bit(True))
        stream.write(c_uint32(1 if self.glowing_head else 0))

        stream.write(c_bit(self.guild))

        if self.guild:
            stream.write(c_int64(self.guild_id))
            stream.write(self.guild_name, allocated_length=33)
            stream.write(c_bit(True))  # NOTE: unknown
            stream.write(c_int32(-1))  # NOTE: unknown
Ejemplo n.º 11
0
    def pre_creation(self, stream):
        """
        Writes part 1 of data
        """
        stream.write(c_bit(True))

        stream.write(c_bit(self.vehicle))

        if self.vehicle:
            stream.write(c_int64(self.vehicle_id))

        stream.write(c_uint8(0))  # NOTE: unknown

        stream.write(c_bit(self.level))

        if self.level:
            stream.write(c_uint32(self.level_num))

        stream.write(c_bit(True))
        stream.write(c_bit(False))
        stream.write(c_bit(True))
Ejemplo n.º 12
0
    def serialize(self, stream):
        """
        Serializes the component
        """
        stream.write(c_bit(True))
        stream.write(c_float(self.pos.x))
        stream.write(c_float(self.pos.y))
        stream.write(c_float(self.pos.z))
        stream.write(c_float(self.rot.x))
        stream.write(c_float(self.rot.y))
        stream.write(c_float(self.rot.z))
        stream.write(c_float(self.rot.w))

        stream.write(c_bit(True))
        stream.write(c_bit(self.effect))
        if self.effect:
            stream.write(c_uint32(self.effect_type))
            stream.write(c_float(self.effect_amount))
            stream.write(c_bit(False))
            stream.write(c_bit(True))
            stream.write(c_float(self.effect_direction.x))
            stream.write(c_float(self.effect_direction.y))
            stream.write(c_float(self.effect_direction.z))
Ejemplo n.º 13
0
    def write_construction(self, stream):
        self.pre_creation(stream)

        stream.write(c_bit(False))  # NOTE: unknown flag(?)
        stream.write(c_bit(False))  # NOTE: unknown flag
        stream.write(c_bit(False))  # NOTE: same as above
        stream.write(c_bit(False))  # NOTE: same here

        stream.write(c_uint32(self.hair_color))
        stream.write(c_uint32(self.hair_style))
        stream.write(c_uint32(0))  # NOTE: unknown(?)
        stream.write(c_uint32(self.shirt_color))
        stream.write(c_uint32(self.pants_color))
        stream.write(c_uint32(0))  # NOTE: unknown(?)
        stream.write(c_uint32(0))  # NOTE: unknown(?)
        stream.write(c_uint32(self.eyebrows))
        stream.write(c_uint32(self.eyes))
        stream.write(c_uint32(self.mouth))

        stream.write(c_uint64(self.account_id))
        stream.write(c_uint64(self.llog))
        stream.write(c_uint64(0))  # NOTE: unknown
        stream.write(c_uint64(self.lego_score))

        stream.write(c_bit(self.free_to_play))

        stream.write(c_uint64(self.currency_collected))
        stream.write(c_uint64(self.bricks_collected))
        stream.write(c_uint64(self.smashables_smashed))
        stream.write(c_uint64(self.quick_builds))
        stream.write(c_uint64(self.enemies_smashed))
        stream.write(c_uint64(self.rockets_used))
        stream.write(c_uint64(self.missions_completed))
        stream.write(c_uint64(self.pets_tamed))
        stream.write(c_uint64(self.imagination_powerups))
        stream.write(c_uint64(self.life_powerups))
        stream.write(c_uint64(self.armor_powerups))
        stream.write(c_uint64(self.distance_traveled))
        stream.write(c_uint64(self.times_smashed))
        stream.write(c_uint64(self.damage_taken))
        stream.write(c_uint64(self.damage_healed))
        stream.write(c_uint64(self.armor_repaired))
        stream.write(c_uint64(self.imagination_restored))
        stream.write(c_uint64(self.imagination_used))
        stream.write(c_uint64(self.distance_driven))
        stream.write(c_uint64(self.airborne_time_race_car))
        stream.write(c_uint64(self.racing_imagination_powerups))
        stream.write(c_uint64(self.racing_imagination_crates_smashed))
        stream.write(c_uint64(self.race_car_boosts))
        stream.write(c_uint64(self.race_car_wrecks))
        stream.write(c_uint64(self.racing_smashables_smashed))
        stream.write(c_uint64(self.races_finished))
        stream.write(c_uint64(self.first_place_finishes))

        stream.write(c_bit(False))  # NOTE: unknown(?)

        stream.write(c_bit(self.rocket))

        if self.rocket:
            stream.write(c_uint16(self.rocket_characters))
            # TODO: LDF rocket info

        self.post_creation(stream)
Ejemplo n.º 14
0
    def serialize(self, stream):
        """
        Serializes the packet
        """
        super().serialize(stream)

        # TODO: Make this stuff dynamic instead of just empty

        ldf = LegoData()

        ldf.write('accountID', self.account_id, data_type=c_int64)
        ldf.write('chatmode', 0, data_type=c_int32)
        ldf.write('editor_enabled', False, data_type=c_bool)
        ldf.write('editor_level', 0, data_type=c_int32)
        ldf.write('gmlevel', 0, data_type=c_int32)
        ldf.write('levelid', self.zone_id, data_type=c_int64)
        ldf.write('objid', self.objid, data_type=c_int64, data_num=9)
        ldf.write('reputation', 100, data_type=c_int64)
        ldf.write('template', 1, data_type=c_int32)

        xml = ElementTree.TreeBuilder()

        xml.start('obj', {'v': '1'})
        xml.start('buff', {})
        xml.end('buff')
        xml.start('skill', {})
        xml.end('skill')
        xml.start('inv', {})
        xml.start('bag', {})
        xml.start('b', {'t': '0', 'm': str(self.inventory_space)})
        xml.end('b')
        xml.end('bag')
        xml.start('items', {})
        xml.start('in', {})
        # TODO: inventory stuff here
        xml.end('in')
        xml.end('items')
        xml.end('inv')
        xml.start('mf', {})
        xml.end('mf')
        xml.start('char', {'cc': str(self.currency)})
        xml.end('char')
        xml.start('lvl', {'l': str(self.level)})
        xml.end('lvl')
        xml.start('flag', {})
        xml.end('flag')
        xml.start('pet', {})
        xml.end('pet')
        xml.start('mis', {})

        xml.start('cur', {})
        for mission in [
                mission for mission in self.missions if mission.state == 2
        ]:
            xml.start('m', {'id': str(mission.mission), 'o': '1'})
            xml.start('sv', {'v': str(mission.progress)})
            xml.end('sv')
            xml.end('m')
        xml.end('cur')

        xml.start('done', {})
        for mission in [
                mission for mission in self.missions if mission.state == 8
        ]:
            xml.start(
                'm', {
                    'cct': str(mission.times_completed),
                    'id': str(mission.mission),
                    'cts': str(mission.last_completion)
                })
            xml.end('m')
        xml.end('done')

        xml.end('mis')
        xml.start('mnt', {})
        xml.end('mnt')
        xml.start('dest', {})
        xml.end('dest')
        xml.end('obj')

        ldf.write('xmlData', xml.close())

        ldf.write('name', self.name, data_type=str)

        ldf_stream = WriteStream()
        ldf_stream.write(ldf)

        ldf_bytes = bytes(ldf_stream)
        compressed = zlib.compress(ldf_bytes)

        stream.write(c_uint32(len(compressed) + 9))
        stream.write(c_bool(True))
        stream.write(c_uint32(len(ldf_bytes)))
        stream.write(c_uint32(len(compressed)))

        stream.write(compressed)
Ejemplo n.º 15
0
 def write_construction(self, stream):
     """
     Writes construction data
     """
     if not self.disabled:
         stream.write(c_uint32(0))  # TODO: add a var for this
Ejemplo n.º 16
0
 def serialize(self, stream):
     """
     Serializes the packet
     """
     stream.write(c_int64(self.objid))
     stream.write(c_uint32(self.unknown1))
     stream.write(self.character_name, allocated_length=33)
     stream.write(self.character_unapproved_name, allocated_length=33)
     stream.write(c_bool(self.is_name_rejected))
     stream.write(c_bool(self.free_to_play))
     stream.write(self.unknown2)
     stream.write(c_uint32(self.shirt_color))
     stream.write(c_uint32(self.shirt_style))
     stream.write(c_uint32(self.pants_color))
     stream.write(c_uint32(self.hair_style))
     stream.write(c_uint32(self.hair_color))
     stream.write(c_uint32(self.lh))
     stream.write(c_uint32(self.rh))
     stream.write(c_uint32(self.eyebrows))
     stream.write(c_uint32(self.eyes))
     stream.write(c_uint32(self.mouth))
     stream.write(c_uint32(self.unknown3))
     stream.write(c_uint16(self.last_zone))
     stream.write(c_uint16(self.last_instance))
     stream.write(c_uint32(self.last_clone))
     stream.write(c_uint64(self.last_login))
     stream.write(c_uint16(len(self.equipped_items)))
     for item in self.equipped_items:
         stream.write(c_uint32(item))
Ejemplo n.º 17
0
 def serialize(self, stream):
     stream.write(c_uint8(0x53))
     stream.write(c_uint16(self.remote_conn_id))
     stream.write(c_uint32(self.packet_id))
     stream.write(c_uint8(0x00))