Example #1
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)
Example #2
0
 def serialize(self, stream: bitstream.WriteStream) -> None:
     key_num = len(self._keys)
     stream.write(bitstream.c_uint(key_num))
     for key in self._keys:
         name = key[0]
         value = key[1]
         value_type = key[2]
         stream.write(bitstream.c_uint8(len(name) * 2))
         for char in name:
             stream.write(char.encode('latin1'))
             stream.write(b'\0')
         stream.write(bitstream.c_ubyte(value_type))
         if value_type == 0:
             stream.write(value, length_type=bitstream.c_uint)
         elif value_type == 1:
             stream.write(bitstream.c_int(value))
         elif value_type == 3:
             stream.write(bitstream.c_float(value))
         elif value_type == 5:
             stream.write(bitstream.c_uint(value))
         elif value_type == 7:
             stream.write(bitstream.c_bool(value))
         elif value_type == 8 or value_type == 9:
             stream.write(bitstream.c_int64(value))
         elif value_type == 13:
             xml_str = bytes(ElementTree.tostring(value))
             xml_str = b'<?xml version="1.0">' + xml_str
             stream.write(bitstream.c_ulong(xml_str.__len__()))
             stream.write(xml_str)
Example #3
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))
Example #4
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))
Example #5
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))
Example #6
0
 def serialize(self, stream: WriteStream):
     stream.write(c_bit(True))
     stream.write(c_int64(0))
Example #7
0
    def serialize(self, stream: WriteStream):
        super().serialize(stream)

        stream.write(c_int64(self.object_id))
        stream.write(c_uint16(self.message_id))
        stream.write(self.data)
Example #8
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))