from sampy.raknet.bitstream import Bitstream from sampy.client.player import PlayerClient import struct class Packet: def __init__(self, data: bytes, is_client: bool): self.data = data self.is_client = is_client self.bitstream = Bitstream(bytearray.fromhex(self.data)) PACKETS = [ Packet("18 69 69", True), Packet("1a 18 be", False), Packet("18 71 d7", True), Packet("19 00", False), Packet("00 00 43 80 0b", True), Packet("e3 00 00", False), Packet("00 00 42 98 0c 11 33 30 45 39 33 39 33 33 36 39 42 35 36 38 43 32 00", False) ] #client = PlayerClient(None, "127.0.0.1", 7777) #client.state = 1 def pbs(bitstream: Bitstream, prefix: str = ""): print(prefix, bitstream.pretty()) def deserialize(bitstream: Bitstream): # TODO: Something weird with range thing DS_RangeList.h@L92 success, count = bitstream.read_compressed(0x10, True) if not success: return False count, = struct.unpack(b" bool: if bitstream.length - bitstream.offset < 0x10: return False _, message_number = bitstream.read_bits(0x10) pbs(bitstream, "message_number") _, reliability = bitstream.read_bits(0x04) pbs(bitstream, "reliability") if reliability in (7, 9, 10): success, ordering_channel = bitstream.read_bits(0x05) pbs(bitstream, "ordering_channel") if not success: return False success, ordering_index = bitstream.read_bits(0x10) pbs(bitstream, "ordering_index") if not success: return False _, is_split_packet = bitstream.read_bit() pbs(bitstream, "is_split_packet") if is_split_packet: print("Skipping split packet") return # TODO: set global split_packet index and count back to 0 # Something I dont understand yet # TODO: ReadCompressed #bitstream.offset += 1 success, data_bit_length = bitstream.read_compressed(0x10, True) pbs(bitstream, "data_bit_length") if not success: return False #_, unknown = bitstream.read(0x01) #_, bit_length = bitstream.read(0x08) ## #logger.debug("bit_length: %d" % bit_length) #logger.debug("bitstream: %s" % bitstream) data_bit_length, = struct.unpack(b"> 3) pbs(bitstream, "data") print("data: %s" % data) on_player_packet(PACKETS[-2].bitstream._buffer)