def give_item(name='give_item'):
    return Struct(
        name,
        star_string('name'),
        VLQ('count'),
        Byte('variant_type'),
        star_string('description')
    )
Beispiel #2
0
def client_connect(name='client_connect'):
    return Struct(
        name, StarByteArray('asset_digest'), HexAdapter(Field('uuid', 16)),
        star_string('name'), star_string('species'), ChunkVariant('ship_data'),
        UBInt32('ship_level'), UBInt32('max_fuel'), VLQ('capabilities_length'),
        Array(lambda ctx: ctx.capabilities_length,
              Struct('capabilities', star_string('value'))),
        star_string('account'))
Beispiel #3
0
def damage_request(name='damage_request'):
    return Struct(name, UBInt32('source_entity_id'),
                  UBInt32('target_entity_id'), UBInt8('hit_type'),
                  UBInt8('damage_type'), BFloat32('damage'),
                  BFloat32('knockback_x'), BFloat32('knockback_y'),
                  UBInt32('source_entity_id_wut'),
                  star_string('damage_source_kind'),
                  GreedyRange(star_string('stuats_effects')))
def damage_notification(name='damage_notification'):
    return Struct(
        name,
        UBInt32('source_entity_id'),
        UBInt32('source_entity_id_wut'),
        UBInt32('target_entity_id'),
        VLQ('x'),
        VLQ('y'),
        VLQ('damage'),
        star_string('damage_kind'),
        star_string('target_material'),
        Flag('killed')
    )
def damage_request(name='damage_request'):
    return Struct(
        name,
        UBInt32('source_entity_id'),
        UBInt32('target_entity_id'),
        UBInt8('hit_type'),
        UBInt8('damage_type'),
        BFloat32('damage'),
        BFloat32('knockback_x'),
        BFloat32('knockback_y'),
        UBInt32('source_entity_id_wut'),
        star_string('damage_source_kind'),
        GreedyRange(star_string('stuats_effects'))
    )
def chat_received(name='chat_received'):
    return Struct(
        name,
        Enum(
            Byte('mode'),
            CHANNEL=0,
            BROADCAST=1,
            WHISPER=2,
            COMMAND_RESULT=3
        ),
        star_string('channel'),
        UBInt32('client_id'),
        star_string('name'),
        star_string('message')
    )
def swap_in_container_result(name='swap_in_container_result'):
    return Struct(
        name,
        star_string('item_name'),
        VLQ('count'),
        Byte('variant_type'),
        GreedyRange(StarByteArray('item_description'))
    )
def warp_touniqueworld_write(name='warp_touniqueworld_write'):
    return Struct(
        name,
        Byte('warp_type'),
        Byte('world_type'),
        star_string('unique_world_name'),
        Byte('has_position')
    )
Beispiel #9
0
def swap_in_container(name='swap_in_container'):
    return Struct(
        name,
        VLQ('entity_id'),  # Where are we putting stuff
        star_string('item_name'),
        VLQ('count'),
        Byte('variant_type'),
        StarByteArray('item_description'),
        VLQ('slot'))
def swap_in_container(name='swap_in_container'):
    return Struct(
        name,
        VLQ('entity_id'),  # Where are we putting stuff
        star_string('item_name'),
        VLQ('count'),
        Byte('variant_type'),
        StarByteArray('item_description'),
        VLQ('slot')
    )
def client_connect(name='client_connect'):
    return Struct(
        name,
        StarByteArray('asset_digest'),
        HexAdapter(Field('uuid', 16)),
        star_string('name'),
        star_string('species'),
        ChunkVariant('ship_data'),
        UBInt32('ship_level'),
        UBInt32('max_fuel'),
        VLQ('capabilities_length'),
        Array(
            lambda ctx: ctx.capabilities_length,
            Struct(
                'capabilities',
                star_string('value')
            )
        ),
        star_string('account')
    )
def chat_sent(name='chat_sent'):
    return Struct(
        name,
        star_string('message'),
        Enum(
            Byte('send_mode'),
            BROADCAST=0,
            LOCAL=1,
            PARTY=2
        )
    )
def update_world_properties(name='world_properties'):
    return Struct(
        name,
        UBInt8('count'),
        Array(
            lambda ctx: ctx.count,
            Struct(
                'properties',
                star_string('key'),
                Variant('value')
            )
        )
    )
# ----- Primary connection sequence -----

# (0) - ProtocolVersion : S -> C
protocol_version = lambda name="protocol_version": Struct(name,
                                                          UBInt32("server_build"))

# (7) - ClientConnect : C -> S
client_connect = lambda name="client_connect": Struct(name,
                                                      VLQ("asset_digest_length"),
                                                      String("asset_digest",
                                                             lambda ctx: ctx.asset_digest_length),
                                                      Flag("uuid_exists"),
                                                      If(lambda ctx: ctx.uuid_exists is True,
                                                         HexAdapter(Field("uuid", 16))
                                                      ),
                                                      star_string("name"),
                                                      star_string("species"),
                                                      StarByteArray("ship_data"),
                                                      UBInt32("ship_level"),
                                                      UBInt32("max_fuel"),
                                                      VLQ("capabilities_length"),
                                                      Array(lambda ctx: ctx.capabilities_length,
                                                            Struct("capabilities",
                                                                   star_string("value"))),
                                                      star_string("account"))

# (3) - HandshakeChallenge : S -> C
handshake_challenge = lambda name="handshake_challenge": Struct(name,
                                                                StarByteArray("salt"))

# (9) - HandshakeResponse : C -> S
Beispiel #15
0
def world_stop(name='world_stop'):
    return Struct(name, star_string('reason'))
Beispiel #16
0
def give_item(name='give_item'):
    return Struct(name, star_string('name'), VLQ('count'),
                  Byte('variant_type'), star_string('description'))
Beispiel #17
0
def chat_sent(name='chat_sent'):
    return Struct(name, star_string('message'),
                  Enum(Byte('send_mode'), BROADCAST=0, LOCAL=1, PARTY=2))
Beispiel #18
0
def celestial_request(name='celestial_request'):
    return Struct(name, GreedyRange(star_string('requests')))
Beispiel #19
0
def server_disconnect(name='server_disconnect'):
    return Struct(name, star_string('reason'))
Beispiel #20
0
def chat_received(name='chat_received'):
    return Struct(
        name,
        Enum(Byte('mode'), CHANNEL=0, BROADCAST=1, WHISPER=2,
             COMMAND_RESULT=3), star_string('channel'), UBInt32('client_id'),
        star_string('name'), star_string('message'))
Beispiel #21
0
def handshake_response(name='handshake_response'):
    return Struct(name, star_string('hash'))
Beispiel #22
0
def connect_failure(name='connect_failure'):
    return Struct(name, star_string('reject_reason'))
Beispiel #23
0
def warp_touniqueworld_write(name='warp_touniqueworld_write'):
    return Struct(name, Byte('warp_type'), Byte('world_type'),
                  star_string('unique_world_name'), Byte('has_position'))
def server_disconnect(name='server_disconnect'):
    return Struct(name, star_string('reason'))
def connect_failure(name='connect_failure'):
    return Struct(name, star_string('reject_reason'))
Beispiel #26
0
def swap_in_container_result(name='swap_in_container_result'):
    return Struct(name, star_string('item_name'), VLQ('count'),
                  Byte('variant_type'),
                  GreedyRange(StarByteArray('item_description')))
Beispiel #27
0
def damage_notification(name='damage_notification'):
    return Struct(name, UBInt32('source_entity_id'),
                  UBInt32('source_entity_id_wut'), UBInt32('target_entity_id'),
                  VLQ('x'), VLQ('y'), VLQ('damage'),
                  star_string('damage_kind'), star_string('target_material'),
                  Flag('killed'))
def celestial_request(name='celestial_request'):
    return Struct(name, GreedyRange(star_string('requests')))
def world_stop(name='world_stop'):
    return Struct(name, star_string('reason'))
    'player_world',
    HexAdapter(Field('uuid', 16)),
    Optional(Byte('has_position')),
    If(
        lambda ctx: ctx['has_position'],
        Struct(
            'position',
            SBInt32('x'),
            SBInt32('y')
        )
    )
)

WARP_WORLD_MISSION = Struct(
    'mission_world',
    star_string('mission_world_name'),
    Byte('check'),
    If(
        lambda ctx: ctx['check'] == 1,
        HexAdapter(Field('instance', 16))
    )
)


def packet(name='base_packet'):
    return Struct(
        name,
        Byte('id'),
        SignedVLQ('payload_size'),
        Field('data', lambda ctx: abs(ctx.payload_size))
    )
def handshake_response(name='handshake_response'):
    return Struct(name, star_string('hash'))
Beispiel #32
0
def update_world_properties(name='world_properties'):
    return Struct(
        name, UBInt8('count'),
        Array(lambda ctx: ctx.count,
              Struct('properties', star_string('key'), Variant('value'))))
Beispiel #33
0
           default=Pass))

WARP_WORLD_CELESTIAL = Struct(
    'celestial_world', SBInt32('x'), SBInt32('y'), SBInt32('z'),
    SBInt32('planet'), SBInt32('satellite'), Optional(Byte('has_position')),
    If(lambda ctx: ctx['has_position'],
       Struct('position', SBInt32('x'), SBInt32('y'))))

WARP_WORLD_PLAYER = Struct(
    'player_world', HexAdapter(Field('uuid', 16)),
    Optional(Byte('has_position')),
    If(lambda ctx: ctx['has_position'],
       Struct('position', SBInt32('x'), SBInt32('y'))))

WARP_WORLD_MISSION = Struct(
    'mission_world', star_string('mission_world_name'), Byte('check'),
    If(lambda ctx: ctx['check'] == 1, HexAdapter(Field('instance', 16))))


def packet(name='base_packet'):
    return Struct(name, Byte('id'), SignedVLQ('payload_size'),
                  Field('data', lambda ctx: abs(ctx.payload_size)))


def start_packet(name='interim_packet'):
    return Struct(name, Byte('id'), SignedVLQ('payload_size'))


def connection(name='connection'):
    return Struct(name, GreedyRange(Byte('compressed_data')))
Beispiel #34
0
class PacketOutOfOrder(Exception):
    pass


class HexAdapter(Adapter):
    def _encode(self, obj, context):
        return obj.decode(
            "hex")  # The code seems backward, but I assure you it's correct.

    def _decode(self, obj, context):
        return obj.encode("hex")


handshake_response = lambda name="handshake_response": Struct(name,
                                                              star_string("claim_response"),
                                                              star_string("hash"))

universe_time_update = lambda name="universe_time": Struct(name,
                                                           VLQ("unknown"))

packet = lambda name="base_packet": Struct(name,
                                           Byte("id"),
                                           SignedVLQ("payload_size"),
                                           Field("data", lambda ctx: abs(
                                               ctx.payload_size)))

start_packet = lambda name="interim_packet": Struct(name,
                                                    Byte("id"),
                                                    SignedVLQ("payload_size"))
Beispiel #35
0
class PacketOutOfOrder(Exception):
    pass


class HexAdapter(Adapter):
    def _encode(self, obj, context):
        return obj.decode(
            "hex")  # The code seems backward, but I assure you it's correct.

    def _decode(self, obj, context):
        return obj.encode("hex")


handshake_response = lambda name="handshake_response": Struct(
    name, star_string("claim_response"), star_string("hash"))

universe_time_update = lambda name="universe_time": Struct(
    name, VLQ("unknown"))

packet = lambda name="base_packet": Struct(
    name, Byte("id"), SignedVLQ("payload_size"),
    Field("data", lambda ctx: abs(ctx.payload_size)))

start_packet = lambda name="interim_packet": Struct(name, Byte("id"),
                                                    SignedVLQ("payload_size"))

protocol_version = lambda name="protocol_version": Struct(
    name, UBInt32("server_build"))

connection = lambda name="connection": Struct(