示例#1
0
 def serialize(self, stream: bitstream.WriteStream) -> None:
     stream.write(bitstream.c_uint32(self.game_version))
     stream.write(bitstream.c_uint32(self.unknown_0))
     stream.write(bitstream.c_uint32(self.remote_connection_type))
     stream.write(bitstream.c_uint32(self.process_id))
     stream.write(bitstream.c_uint16(self.local_port))
     stream.write("127.0.0.1", allocated_length=33)
示例#2
0
    def write_construction(self, stream: WriteStream):
        stream.write(c_int64(self.object_id))
        stream.write(c_int32(self.lot))
        stream.write(self.name, length_type=c_uint8)
        stream.write(c_uint32(self.time_since_created))
        stream.write(c_bit(False))
        stream.write(c_bit(self.trigger))

        stream.write(c_bit(self.spawner_id is not None))
        if self.spawner_id is not None:
            stream.write(c_int64(self.spawner_id))

        stream.write(c_bit(self.spawner_node_id is not None))
        if self.spawner_node_id is not None:
            stream.write(c_uint32(self.spawner_node_id))

        stream.write(c_bit(self.scale is not None))
        if self.scale is not None:
            stream.write(c_float(self.scale))

        stream.write(c_bit(False))
        stream.write(c_bit(False))

        stream.write(c_bit(True))
        stream.write(c_bit(False))
        stream.write(c_bit(False))

        for c in self.components:
            c.construct(stream)
示例#3
0
 def serialize(self, stream):
     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)
示例#4
0
 def serialize(self, stream: bitstream.WriteStream) -> None:
     stream.write(bitstream.c_uint8(self.login_return_code))
     stream.write(CString("Talk_Like_A_Pirate", allocated_length=33))
     stream.write(CString("", allocated_length=33 * 7))
     stream.write(bitstream.c_uint16(self.client_version_major))
     stream.write(bitstream.c_uint16(self.client_version_current))
     stream.write(bitstream.c_uint16(self.client_version_minor))
     stream.write(self.user_key, allocated_length=33)
     stream.write(CString(self.char_ip, allocated_length=33))
     stream.write(CString(self.chat_ip, allocated_length=33))
     stream.write(bitstream.c_uint16(self.char_port))
     stream.write(bitstream.c_uint16(self.chat_port))
     stream.write(CString('0', allocated_length=33))
     stream.write(
         CString('00000000-0000-0000-0000-000000000000',
                 allocated_length=37))
     stream.write(bitstream.c_uint32(0))
     stream.write(CString(self.localization,
                          allocated_length=3))  # US Localization
     stream.write(bitstream.c_bool(self.display_first_time))
     stream.write(bitstream.c_bool(self.is_ftp))
     stream.write(bitstream.c_uint64(0))
     stream.write(self.custom_error,
                  length_type=bitstream.c_uint16)  # Custom error message
     stream.write(bitstream.c_uint16(0))
     stream.write(bitstream.c_uint32(4))
示例#5
0
    def serialize(self, stream: WriteStream):
        stream.write(c_bit(True))
        stream.write(c_uint32(len(self.items)))
        for item in self.items:
            stream.write(item)

        stream.write(c_bit(True))
        stream.write(c_uint32(0))
示例#6
0
 def serialize(self, stream: bitstream.WriteStream) -> None:
     stream.write(bitstream.c_uint16(self.zone_id))
     stream.write(bitstream.c_uint16(self.map_instance))
     stream.write(bitstream.c_uint32(self.map_clone))
     stream.write(bitstream.c_uint32(self.map_checksum))
     stream.write(bitstream.c_bool(self.editor_enabled))
     stream.write(bitstream.c_uint8(self.editor_level))
     stream.write(self.player_position)
     stream.write(bitstream.c_uint32(self.activity))
示例#7
0
    def serialize(self, stream: WriteStream):
        super().serialize(stream)

        stream.write(c_uint32(self.game_version))
        stream.write(c_uint32(0x93))
        stream.write(c_uint32(self.remote_connection_type))
        stream.write(c_uint32(self.pid))
        stream.write(c_uint16(self.port))
        stream.write(self.ip.encode('latin1'), allocated_length=33)
示例#8
0
    def serialize(self, stream: WriteStream):
        super().serialize(stream)

        stream.write(c_uint16(self.zone_id))
        stream.write(c_uint16(self.instance))
        stream.write(c_uint32(self.clone))
        stream.write(c_uint32(self.checksum))
        stream.write(c_uint16(0))
        stream.write(c_float(self.position.x))
        stream.write(c_float(self.position.y))
        stream.write(c_float(self.position.z))
        stream.write(c_uint32(4 if self.activity else 0))
示例#9
0
    def serialize(self, stream: WriteStream):
        super().serialize(stream)

        wstr = WriteStream()
        wstr.write(self.ldf)
        data = bytes(wstr)
        compressed_data = zlib.compress(data)

        stream.write(c_uint32(len(compressed_data) + 9))
        stream.write(c_bool(True))
        stream.write(c_uint32(len(data)))
        stream.write(c_uint32(len(compressed_data)))
        stream.write(compressed_data)
示例#10
0
    def serialize(self, stream: WriteStream):
        stream.write(c_uint8(0x53))
        stream.write(c_uint16(0x05))
        stream.write(c_uint32(0x00))
        stream.write(c_uint8(0))

        stream.write(c_uint8(self.login_code))
        stream.write(b'Talk_Like_A_Pirate', allocated_length=33)

        for _ in range(7):
            stream.write(b'', allocated_length=33)

        stream.write(c_uint16(1))
        stream.write(c_uint16(10))
        stream.write(c_uint16(64))

        stream.write(self.user_key, allocated_length=33)

        stream.write(self.char_ip.encode('latin1'), allocated_length=33)
        stream.write(self.chat_ip.encode('latin1'), allocated_length=33)

        stream.write(c_uint16(self.char_port))
        stream.write(c_uint16(self.chat_port))

        stream.write(self.ip.encode('latin1'), allocated_length=33)

        stream.write(b'00000000-0000-0000-0000-000000000000',
                     allocated_length=37)

        stream.write(c_uint32(0))

        stream.write(self.locale.encode('latin1'), allocated_length=3)

        stream.write(c_bool(self.first_login_sub))
        stream.write(c_bool(self.free_to_play))

        stream.write(c_uint64(0))

        if self.error:
            stream.write(c_uint16(len(self.error)))
            stream.write(self.error, allocated_length=len(self.error))
        else:
            stream.write(c_uint16(0))

        stream.write(c_uint32(4))
示例#11
0
    def serialize(self, stream: WriteStream):
        stream.write(c_int64(self.object_id))
        stream.write(c_int32(self.lot))

        stream.write(c_bit(False))

        stream.write(c_bit(self.amount is not None))
        if self.amount is not None:
            stream.write(c_uint32(self.amount))

        stream.write(c_bit(self.slot is not None))
        if self.slot is not None:
            stream.write(c_uint16(self.slot))

        stream.write(c_bit(True))
        stream.write(c_uint32(4))

        stream.write(c_bit(False))  # TODO: implement metadata

        stream.write(c_bit(False))
示例#12
0
 def serialize(self, stream):
     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))
示例#13
0
    def _write_part1(self, stream: WriteStream):
        stream.write(c_bit(True))
        stream.write(c_bit(self.vehicle_id is not None))
        if self.vehicle_id is not None:
            stream.write(c_int64(self.vehicle_id))
        stream.write(c_uint8(0))

        stream.write(c_bit(self.level is not None))
        if self.level is not None:
            stream.write(c_uint32(self.level))

        stream.write(c_bit(True))
        stream.write(c_bit(False))
        stream.write(c_bit(True))
示例#14
0
    def _write_part2(self, stream: WriteStream):
        stream.write(c_bit(True))
        stream.write(c_bit(self.pvp))
        stream.write(c_bit(self.gm))
        stream.write(c_uint8(self.gm_level))
        stream.write(c_bit(False))
        stream.write(c_uint8(0))

        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))
            stream.write(c_int32(-1))
示例#15
0
 def serialize(self, stream: WriteStream):
     stream.write(c_uint8(0x53))
     stream.write(c_uint16(self.connection_type.value))
     stream.write(c_uint32(self.packet_id))
     stream.write(c_uint8(0))
示例#16
0
 def serialize(self, stream: bitstream.WriteStream) -> None:
     stream.write(bitstream.c_uint64(self.object_id))
     stream.write(bitstream.c_uint32(0))
     stream.write(self.current_name, allocated_length=33)
     stream.write(self.unapproved_name, allocated_length=33)
     stream.write(bitstream.c_bool(self.name_rejected))
     stream.write(bitstream.c_bool(self.is_ftp))
     stream.write(bitstream.c_uint32(self.head_color))
     stream.write(bitstream.c_uint16(0))
     stream.write(bitstream.c_uint32(self.head))
     stream.write(bitstream.c_uint32(self.chest_color))
     stream.write(bitstream.c_uint32(self.chest))
     stream.write(bitstream.c_uint32(self.legs))
     stream.write(bitstream.c_uint32(self.hair_style))
     stream.write(bitstream.c_uint32(self.hair_color))
     stream.write(bitstream.c_uint32(self.left_hand))
     stream.write(bitstream.c_uint32(self.right_hand))
     stream.write(bitstream.c_uint32(self.eyebrows_style))
     stream.write(bitstream.c_uint32(self.eyes_style))
     stream.write(bitstream.c_uint32(self.mouth_style))
     stream.write(bitstream.c_uint32(0))
     stream.write(bitstream.c_uint16(self.last_zone))
     stream.write(bitstream.c_uint16(self.last_map_instance))
     stream.write(bitstream.c_uint32(self.last_map_clone))
     stream.write(bitstream.c_uint64(0))
     stream.write(bitstream.c_uint16(len(self.equipped_items)))
     for item in self.equipped_items:
         stream.write(bitstream.c_uint32(item))
示例#17
0
 def serialize(self, stream: bitstream.WriteStream) -> None:
     stream.write(bitstream.c_uint32(self.disconnect_id))
示例#18
0
 def serialize(self, stream: WriteStream):
     stream.write(c_uint32(len(self._nodes)))
     for node in self._nodes:
         stream.write(node)
示例#19
0
 def construct(self, stream: WriteStream):
     if not self.disabled:
         stream.write(c_uint32(len(self.effects)))
         for effect in self.effects:
             stream.write(effect)
示例#20
0
 def serialize(self, stream):
     stream.write(c_int64(character_id))
     stream.write(c_uint32(unknown1))
     stream.write(character_name)
     stream.write(character_unapproved_name)
     stream.write(is_name_rejected)
     stream.write(free_to_play)
     stream.write(unknown2, allocated_length=10)
     stream.write(c_uint32(shirt_color))
     stream.write(c_uint32(shirt_style))
     stream.write(c_uint32(pants_color))
     stream.write(c_uint32(hair_style))
     stream.write(c_uint32(hair_color))
     stream.write(c_uint32(lh))
     stream.write(c_uint32(rh))
     stream.write(c_uint32(eyebrows))
     stream.write(c_uint32(eyes))
     stream.write(c_uint32(mouth))
     stream.write(c_uint32(unknown3))
     stream.write(c_uint16(last_zone))
     stream.write(c_uint16(last_instance))
     stream.write(c_uint32(last_clone))
     stream.write(c_uint64(last_login))
     stream.write(c_uint16(len(items)))
     for item in items:
         stream.write(c_uint32(item))
示例#21
0
 def serialize(self, stream: bitstream.WriteStream) -> None:
     stream.write(bitstream.c_uint32(self.notify_id))
示例#22
0
    def construct(self, stream: WriteStream):
        self._write_part1(stream)

        stream.write(c_bit(False))
        stream.write(c_bit(False))
        stream.write(c_bit(False))
        stream.write(c_bit(False))

        stream.write(c_uint32(self.hair_color))
        stream.write(c_uint32(self.hair_style))
        stream.write(c_uint32(0))
        stream.write(c_uint32(self.shirt_color))
        stream.write(c_uint32(self.pants_color))
        stream.write(c_uint32(self.shirt_style))
        stream.write(c_uint32(0))
        stream.write(c_uint32(self.eyebrow_style))
        stream.write(c_uint32(self.eye_style))
        stream.write(c_uint32(self.mouth_style))

        stream.write(c_uint64(self.account_id))
        stream.write(c_uint64(self.llog))
        stream.write(c_uint64(0))
        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.quickbuilds_completed))
        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_collected))
        stream.write(c_uint64(self.life_powerups_collected))
        stream.write(c_uint64(self.armor_powerups_collected))
        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.time_airborne_racecar))
        stream.write(c_uint64(self.racing_imagination_powerups_collected))
        stream.write(c_uint64(self.racing_imagination_crates_smashed))
        stream.write(c_uint64(self.racecar_boosts_activated))
        stream.write(c_uint64(self.racecar_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))

        stream.write(c_bit(self.landing_rocket))
        if self.landing_rocket:
            stream.write(self.rocket_modules, length_type=c_uint16)

        self._write_part2(stream)
示例#23
0
 def serialize(self, stream: WriteStream):
     stream.write(self.name.encode('latin1'), length_type=c_uint8)
     stream.write(c_uint32(self.effect_id))
     stream.write(self.effect_type, length_type=c_uint8)
     stream.write(c_float(self.scale))
     stream.write(c_int64(self.secondary))
示例#24
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))