UserData Bits: Difference between revisions
Disseminate (talk | contribs) |
Disseminate (talk | contribs) No edit summary |
||
(4 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
There are 128 bytes. If you're rusty on terminology, a word is 4 bytes; a byte is 2 nibbles, or 8 bits; and a nibble is 4 bits. Thus, there are 16 words in the user data, of which 4 are used. | There are 128 bytes. If you're rusty on terminology, a word is 4 bytes; a byte is 2 nibbles, or 8 bits; and a nibble is 4 bits. Thus, there are 16 words in the user data, of which 4 are used. | ||
On the client, data from the auth server has every nibble swapped. So for example, if your Word 3 was 0x00b08080, the nibble-swapped version is 0x000b0808. This means bit 31 is 1 (has CoH), and bit 23 is 1 (has CoV). | On the client, data from the auth server has every nibble swapped. So for example, if your Word 3 was 0x00b08080, the nibble-swapped version is 0x000b0808. This means bit 31 is 1 (has CoH), and bit 23 is 1 (has CoV). This is subject to change depending on AuthServer2. | ||
In the vanilla database, there's two fields - "user_data" (16 bytes) and "user_data_new" (112 bytes). The auth server concatenates these together to send to the client. In CoX, only the first 16 bytes are used, but this does open up future functionality. | In the vanilla database, there's two fields - "user_data" (16 bytes) and "user_data_new" (112 bytes). The auth server concatenates these together to send to the client. In CoX, only the first 16 bytes are used, but this does open up future functionality. | ||
Line 24: | Line 24: | ||
* 19 - GR_PO_WILL_CLOCKWORK | * 19 - GR_PO_WILL_CLOCKWORK | ||
* 20 - GR_PO_WILL_MIGHT_EMPIRE | * 20 - GR_PO_WILL_MIGHT_EMPIRE | ||
* 21 - GR_PO_WILL_RESISTANCE | * 21 - GR_PO_WILL_RESISTANCE | ||
* 22 - Rogue Complete Box | * 22 - Rogue Complete Box | ||
* 23 - Loyalty Reward | * 23 - Loyalty Reward | ||
Line 77: | Line 77: | ||
* 14 - Jet Pack | * 14 - Jet Pack | ||
* 15 - Korean Level Minimum (??) | * 15 - Korean Level Minimum (??) | ||
* 16 - Valentine 2006 | * 16 - [https://cityofheroes.fandom.com/wiki/Valentine%27s_Day_Event_2006 Valentine 2006] | ||
* 17 - COV Beta | * 17 - COV Beta | ||
* 18 - COV Preorder 1 | * 18 - COV Preorder 1 | ||
Line 106: | Line 106: | ||
Unused. | Unused. | ||
== Game Data == | |||
Also on the same table is the game_data attribute, which is identical to the user_data formatting. If a bit on this is set, is will override the user_data on the DBserver. Generally, this can start as all 0s. DBServer sometimes tells AuthServer to change these in response to ingame events (like unlocking costumes, etc.) |
Latest revision as of 17:39, 28 April 2019
UserData is the set of 128 bytes that indicate user flags such as "Owns CoV", "Has Pocket D VIP pass", etc. The field user_data on player accounts is formatted as follows.
Format
There are 128 bytes. If you're rusty on terminology, a word is 4 bytes; a byte is 2 nibbles, or 8 bits; and a nibble is 4 bits. Thus, there are 16 words in the user data, of which 4 are used.
On the client, data from the auth server has every nibble swapped. So for example, if your Word 3 was 0x00b08080, the nibble-swapped version is 0x000b0808. This means bit 31 is 1 (has CoH), and bit 23 is 1 (has CoV). This is subject to change depending on AuthServer2.
In the vanilla database, there's two fields - "user_data" (16 bytes) and "user_data_new" (112 bytes). The auth server concatenates these together to send to the client. In CoX, only the first 16 bytes are used, but this does open up future functionality.
Reference
Word 1
- 0-10 - Unused
- 11 - Coralax Boss Costume
- 12 - Vahzilok Meat Doc Costume
- 13 - Rikti Costume
- 14 - Ghoul Costume
- 15 - Mutant Pack
- 16 - Create Primals
- 17 - Rogue Access
- 18 - GR_PO_WILL_SEERS
- 19 - GR_PO_WILL_CLOCKWORK
- 20 - GR_PO_WILL_MIGHT_EMPIRE
- 21 - GR_PO_WILL_RESISTANCE
- 22 - Rogue Complete Box
- 23 - Loyalty Reward
- 24 - CON_2009_BIT5
- 25 - CON_2009_BIT4
- 26 - CON_2009_BIT3
- 27 - CON_2009_BIT2
- 28 - CON_2009_BIT1
- 29 - Magic Pack
- 30 - Super Science Pack
- 31 - Martial Arts Pack
Word 2
- 0-11 - Months Played (note one of these counts for 3 months)
- 12 - Recreation Pack
- 13 - Holiday Pack
- 14 - Aura Pack
- 15 - Vanguard Pack
- 16 - Facepalm
- 17 - Animal Pack
- 18 - Limited Rogue Access
- 19 - Steam Punk
- 20 - PROMO_2011_A
- 21 - PROMO_2011_B
- 22 - PROMO_2011_C
- 23 - PROMO_2011_D
- 24 - PROMO_2011_E
- 25 - PROMO_2012_A
- 26 - PROMO_2012_B
- 27 - PROMO_2012_C
- 28 - PROMO_2012_D
- 29 - PROMO_2012_E
- 30-31 - Unused
Word 3
- 0 - Unused
- 1 - Alpha Preorder
- 2 - Cyborg Pack
- 3 - Mac Pack
- 4 - Is Retail Account
- 5 - Target Promo
- 6 - PAX Promo
- 7 - GenCon Promo
- 8 - Comicon Promo
- 9 - Arachnos Access
- 10 - Wedding Pack
- 11 - Trial Account
- 12 - Pocket D VIP
- 13 - Jump Pack
- 14 - Jet Pack
- 15 - Korean Level Minimum (??)
- 16 - Valentine 2006
- 17 - COV Beta
- 18 - COV Preorder 1
- 19 - COV Preorder 2
- 20 - COV Preorder 3
- 21 - COV Preorder 4
- 22 - COV Special Edition
- 23 - Villain Access
- 24-26 - Preorder
- 27 - DVD Special Edition
- 28 - Kheldian Access
- 29 - Beta
- 30 - Transfer to EU
- 31 - Hero Access
Word 4
(Looks reserved).
- 0 - ACEINHOLE_A
- 1 - ACEINHOLE_B
- 2 - ACEINHOLE_C
- 3 - ACEINHOLE_D
- 4 - ACEINHOLE_E
- 5-31 - Unused
Word 5+
Unused.
Game Data
Also on the same table is the game_data attribute, which is identical to the user_data formatting. If a bit on this is set, is will override the user_data on the DBserver. Generally, this can start as all 0s. DBServer sometimes tells AuthServer to change these in response to ingame events (like unlocking costumes, etc.)