Edit on GitHub
This packet maintains the list of all users in the currently joined room.
This is a response to any user sending:
Name | Type | Summary |
---|---|---|
list_type | u1 | |
unknown_a | s2 | All examples show -1 (0xFFFF). |
list | switch(list_type) | |
case | census_initial | Case when list_type == |
case | census_addition | Case when list_type == |
case | census_removal | Case when list_type == |
case | census_modification | Case when list_type == |
case | census_lounge_initial | Case when list_type == |
Name | Type | Summary |
---|---|---|
user_count | u1 | |
users_initial | user[user_count] | |
user_additional_initial | user_character_data | Is either 1 byte (0x00) or 513 bytes long. |
Name | Type | Summary |
---|---|---|
user_addition | user | |
user_additional_addition | user_character_data | Is either 0 bytes or 513 bytes long. |
Name | Type | Summary |
---|---|---|
connection_id_removal | u4 | Connection ID of the user to remove. |
Name | Type | Summary |
---|---|---|
connection_id_modification | u4 | Connection ID of the user to modify. Note - not an error, it does appear twice in a row. |
user_modification | user |
Unlike type 0x00 census_initial, a type 0x07 is sent for each user in a lounge, with only their record contained therein.
Name | Type | Summary |
---|---|---|
user_count_lounge | u1 | As all type 0x07s are individual records, this value is trivial, not structural. |
user_lounge | user | |
user_additional_lounge | user_character_data | Is always present at 513 bytes. |
Name | Type | Summary |
---|---|---|
connection_id | u4 | Connection ID of the relevant user. |
user_nickname | strz[22] | Nickname of the relevant user. |
guild_name | strz[21] | Guild name to which the relevant user belongs. |
room_user_slot | u1 | Every user in the room has a unique slot number, from 1 to the user_max. |
unknown_c | bytes[4] | All 0x00. |
item_id_title | u4 | From pangya_xx.iff/Skin.iff. ID of the custom title badge. |
item_id_character | u4 | From pangya_xx.iff/Character.iff. ID of the character used. |
item_id_portrait_background | u4 | From pangya_xx.iff/Skin.iff. ID of the portrait background. 0 if unused. |
item_id_portrait_frame | u4 | From pangya_xx.iff/Skin.iff. ID of the portrait frame. 0 if unused. |
item_id_portrait_sticker | u4 | From pangya_xx.iff/Skin.iff. ID of the portrait sticker. 0 if unused. |
item_id_portrait_slot | u4 | From pangya_xx.iff/Skin.iff. ID of the portrait slot. 0 if unused. |
unknown_d | bytes[4] | All 0x00. |
item_id_title_b | u4 | Duplicate of item_id_title |
unknown_e | bytes[2] | |
user_rank | u1 | Unconfirmed. From 0x00 ('Rookie F') through 0x46 ('Infinity Legend I'). |
unknown_f | u1 | All examples either 0 (0x00) or 40 (0x28). |
unknown_g | u1 | All examples 10 (0x0A). |
unknown_h | bytes[4] | |
guild_emblem_id | strz[12] | If missing, 'guildmark'. |
unknown_k | u1 | |
user_id | u4 | |
unknown_l | bytes[4] | All 0x00. |
unknown_m | bytes[2] | Always C7,0A. |
unknown_n | u4 | All examples either 0 (0x00000000) or 1 (0x00000001). |
unknown_o | f4 | |
unknown_p | f4 | |
unknown_q | f4 | |
unknown_z | u4 | Seen 0-2. |
garbage_r | bytes[64] | Likely garbage data; contains local user's data. |
item_id_mascot | u4 | From pangya_xx.iff/Mascot.iff. ID for user's mascot. |
username_atnt | strz[128] | |
unknown_s | bytes[4] | |
unknown_t | u4 | All examples 66 (0x00000042). |
Key | Value |
---|---|
list_type::list_initial | 0 |
list_type::list_additions | 1 |
list_type::list_removals | 2 |
list_type::list_modifications | 3 |
list_type::list_lounge_initial | 7 |
meta:
id: gameservice_server_0048_room_census
title: GameService Server Room Census
encoding: ASCII
endian: le
imports:
- ../../common/id_bank
- ../../common/pstring
- ../../common/user_character_data
seq:
- id: list_type
type: u1
enum: list_type
- id: unknown_a
type: s2
- id: list
type:
switch-on: list_type
cases:
list_type::list_initial: census_initial
list_type::list_additions: census_addition
list_type::list_removals: census_removal
list_type::list_modifications: census_modification
list_type::list_lounge_initial: census_lounge_initial
types:
census_initial:
seq:
- id: user_count
type: u1
- id: users_initial
type: user
repeat: expr
repeat-expr: user_count
- id: user_additional_initial
type: user_character_data
census_addition:
seq:
- id: user_addition
type: user
- id: user_additional_addition
type: user_character_data
census_removal:
seq:
- id: connection_id_removal
type: u4
census_modification:
seq:
- id: connection_id_modification
type: u4
- id: user_modification
type: user
census_lounge_initial:
seq:
- id: user_count_lounge
type: u1
- id: user_lounge
type: user
- id: user_additional_lounge
type: user_character_data
user:
seq:
- id: connection_id
type: u4
- id: user_nickname
type: strz
size: 22
- id: guild_name
type: strz
size: 21
- id: room_user_slot
type: u1
- id: unknown_c
size: 4
- id: item_id_title
type: u4
- id: item_id_character
type: u4
- id: item_id_portrait_background
type: u4
- id: item_id_portrait_frame
type: u4
- id: item_id_portrait_sticker
type: u4
- id: item_id_portrait_slot
type: u4
- id: unknown_d
size: 4
- id: item_id_title_b
type: u4
- id: unknown_e
size: 2
- id: user_rank
type: u1
enum: id_bank::rank
- id: unknown_f
type: u1
- id: unknown_g
type: u1
- id: unknown_h
size: 4
- id: guild_emblem_id
type: strz
size: 12
- id: unknown_k
type: u1
- id: user_id
type: u4
- id: unknown_l
size: 4
- id: unknown_m
size: 2
- id: unknown_n
type: u4
- id: unknown_o
type: f4
- id: unknown_p
type: f4
- id: unknown_q
type: f4
- id: unknown_z
type: u4
- id: garbage_r
size: 64
- id: item_id_mascot
type: u4
enum: id_bank::item_id_mascot
- id: username_atnt
type: strz
size: 128
- id: unknown_s
size: 4
- id: unknown_t
type: u4
enums:
list_type:
0: list_initial
1: list_additions
2: list_removals
3: list_modifications
7: list_lounge_initial