/playersdb

Discovery on blob data for DayZ players.db

DayZ Player Database Protocol

Player data is saved in Players.db. The database consists of 3 tables. Table Players is where all the player data is stored. The table consists of 4 fields, Id, Alive, UID, and Data. The Data field is a blob containing a hex string. The hex string is translated as below:

02 00 B9 B0 6C 46 5D C5 6B 41 4E 15 54 46 07 1B // 16 bytes of location data

unknown PosX unknown PosY unknown
02 00 B9 B0 6C 46 5D C5 6B 41 4E 15 54 46 07 1B

0E 53 75 72 76 69 76 6F 72 46 5F 4A 75 64 79 // 14 bytes SurvivorF_Judy, Likely the player model

00 01 00 00 5A 00 00 00 00 00 05 00 // 12 bytes likely containing model customization

From here, player data is stored in a length prefix stream format followed by a 4 byte value.

04 64 69 73 74 A1 CC 0A 44

length data ASCII 4 byte value
04 64 69 73 74 dist A1 CC 0A 44

The above contains total distance traveled for the character. I've ascertained that the 4 byte value is a little endian float value.

0E 70 6C 61 79 65 72 73 5F 6B 69 6C 6C 65 64 00 00 00 00

length data ASCII 4 byte value
0E 70 6C 61 79 65 72 73 5F 6B 69 6C 6C 65 64 players_killed 00 00 00 00

0F 69 6E 66 65 63 74 65 64 5F 6B 69 6C 6C 65 64 00 00 00 00

length data ASCII 4 byte value
0F 69 6E 66 65 63 74 65 64 5F 6B 69 6C 6C 65 64 infected_killed 00 00 00 00

08 70 6C 61 79 74 69 6D 65 A9 36 2F 44

length data ASCII 4 byte value
08 08 70 6C 61 79 74 69 6D 65 A9 36 2F 44 playtime A9 36 2F 44

14 6C 6F 6E 67 65 73 74 5F 73 75 72 76 69 76 6F 72 5F 68 69 74

length data ASCII 4 byte value
14 6C 6F 6E 67 65 73 74 5F 73 75 72 76 69 76 6F 72 5F 68 69 74 00 00 00 00 longest_survivor_hit A9 36 2F 44

This is the beginning of a 170 byte blob of unknown data. I assume this is where the character's HP, Hydration, Bleeding, Sickness, etc. are stored.

81 00 00 00 3B 84 6F E7 E2 1E 41 17 94 8D 0E F2 EA 4E 14 81 58 00 00 00 C9 FF FF C9 FF FF C2 C9 FF FF C2 C9 FF FF C7 C9 FF FF C9 FF FF C7 C9 FF FF C9 FF FF C7 C9 FF FF C9 FF FF C7 C9 FF FF C9 FF FF C7 C9 FF FF C9 FF FF C7 C9 FF FF C9 FF FF C7 C9 FF FF C9 FF FF C7 C9 FF FF C9 FF FF C7 C9 FF FF C9 FF FF C7 C9 FF FF C9 FF FF C7 C9 FF FF 2E 00 00 00 00 00 00 00 00 C8 64 54 C7 00 CA 32 54 A8 43 CA 2F 3D 00 44 CA 00 40 1C 45 CA A4 C0 C1 42 C7 08 C7 C7 00 00 80 00 D2 04 53 5F 50 00 00 00 04 00 00 00 D9 01 00 00

Of the 170 byte block, these places represent the follow. ie. UnkBlock[33] is used to store blood Blood.

I am still unsure what the developers deal is here. It seems like for some values they use a byte, then uint16, and then unint32 on others. It doesn't make a whole lot of sense.

Blood [33]
Health [106, 107]
Hunger [127, 128, 129, 130]
Hydration [132, 133, 134, 135]
Bleeding [153]

Items begin after the 170 byte block:

Items conform to the same protocol as above. The item is prefixed by item name length with follow on item value data.

T S h i r t _ B l a c k

0C 54 53 68 69 72 74 5F 42 6C 61 63 6B 00 00 FF FF FF FF 04 42 6F 64 79 23 00 00 00 20 DF A1 81 28 65 43 3E AC EF 22 E7 5A BD 03 20 03 00 00 00 C9 23 77 08 00 00 00 01 FF 01 08 C9 8B 0C 00 05 00 00 00 49 00 00 00

B a n d a g e D r e s s i n g

0F 42 61 6E 64 61 67 65 44 72 65 73 73 69 6E 67 00 00 00 00 00 00 05 63 61 72 67 6F 25 00 00 00 76 FF 3C C1 54 78 45 CA 9D 9D 6A 7F 88 8F DB 5C 00 00 00 00 0D 00 00 00 01 FF 01 09 CA 00 00 00 40 C9 8B 0C 00 00 00 00 00 59 00 00 00

C h e m l i g h t _ Y e l l o w

10 43 68 65 6D 6C 69 67 68 74 5F 59 65 6C 6C 6F 77 00 00 00 00 01 00 05 63 61 72 67 6F 34 00 00 00 42 4C 34 EE DE 8C 43 A0 97 13 57 19 30 04 02 59 03 00 00 00 C9 AE 8E 19 00 00 00 CA 00 C0 28 46 00 00 00 00 00 00 00 01 FF 01 09 CA 00 00 C8 42 C9 8B 0C 00 00 00 00 00 46 00 00 00

I've been able to ascertain the below:

04 50 65 61 72
00 00 00 00 02 
00 05 63 61 72 
67 6F 2D 00 00
00 C8 28 42 EA 
FC 83 4D D9 A1 
19 47 F3 CC 44 
36 33 03 00 00 
00 C9 E3 89 12 
00 00 00 01 FF 
01 08 C9 8B 0C 
00 01 00 00 00 
CA BA A1 2D 47 
01 00 00 00 00 
3D 00 00 00
length data ASCII
04 50 65 61 72 Pear

After the item name comes the follow-on data. I've broken this up in to five byte rows but only for readability for what I currently know.

The first five bytes seem to relate to the container they are in. IE a shirt. The first two bytes are unknown. The third byte determines which row (starting with 0) the item belongs to in the container. The fourth byte is unknown. The fifth byte determines which column of the container the item belongs in.

Unk Unk Row Unk Col
00 00 00 00 02

P e a r

04 50 65 61 72 00 00 00 00 02 00 05 63 61 72 67 6F 2D 00 00 00 C8 28 42 EA FC 83 4D D9 A1 19 47 F3 CC 44 36 33 03 00 00 00 C9 E3 89 12 00 00 00 01 FF 01 08 C9 8B 0C 00 01 00 00 00 CA BA A1 2D 47 01 00 00 00 00 3D 00 00 00

L o c k p i c k

08 4C 6F 63 6B 70 69 63 6B 00 00 00 00 03 00 05 63 61 72 67 6F 20 00 00 00 C7 3B 0A 04 E4 7D 47 A9 BC 6E 8A CA E2 FE 9C 28 00 00 00 00 08 00 00 00 01 FF 01 08 C9 8B 0C 00 00 00 00 00 5D 00 00 00

M a g _ I J 7 0 _ 8 R n d

`0D 4D 61 67 5F 49 4A 37 30 5F 38 52 6E 64

00 01 02 00 00 00 05 63 61 72 67 6F 3B 00 00 00 7E BE 41 F2 F4 6D 4C A2 A9 C8 E3 B4 F5 D3 E1 BB 00 00 00 00 04 00 00 00 01 FF 00 00 85 D2 4A 07 8D D5 C7 D2 4A 07 8D D5 C7 D2 4A 07 8D D5 C7 D2 4A 07 8D D5 C7 D2 4A 07 8D D5 C7 00 00 00 00 A4 00 00 00`

CanvasPantsMidi_Red

`13 43 61 6E 76 61 73 50 61 6E 74 73 4D 69 64 69 5F 52 65 64

00 00 FF FF FF FF 04 4C 65 67 73 23 00 00 00 CD 50 F4 46 2C 43 49 8D 80 E3 DE 16 31 9D 67 19 03 00 00 00 C9 BF A4 08 00 00 00 01 FF 01 08 C9 8B 0C 00 01 00 00 00 56 00 00 00`

LargeGasCanister

`10 4C 61 72 67 65 47 61 73 43 61 6E 69 73 74 65 72

00 00 00 00 00 00 05 63 61 72 67 6F 31 00 00 00 DF 4B 83 15 CF B6 46 47 9D 1B FA E9 D7 7B 6A 25 00 00 00 00 19 00 00 00 CA 00 00 48 44 01 01 00 00 00 00 00 01 FF 01 09 CA 00 00 A0 41 C9 8B 0C 00 00 00 00 00 48 00 00 00`

HikingBoots_Black

`11 48 69 6B 69 6E 67 42 6F 6F 74 73 5F 42 6C 61 63 6B

00 00 FF FF FF FF 04 46 65 65 74 23 00 00 00 6F A9 30 5F 26 A8 40 7D 82 B8 12 69 A5 98 BB 26 03 00 00 00 C9 74 FE 08 00 00 00 01 FF 01 08 C9 8B 0C 00 00 00 00 00 14 01 00 00`

DryBag_Blue

`0B 44 72 79 42 61 67 5F 42 6C 75 65

00 00 FF FF FF FF 04 42 61 63 6B 23 00 00 00 25 36 B7 C9 2D 92 4A F7 BA 93 F3 AA 2F E4 52 77 03 00 00 00 C9 32 B3 08 00 00 00 01 FF 01 08 C9 8B 0C 00 03 00 00 00 44 00 00 00`

BakedBeansCan

`0D 42 61 6B 65 64 42 65 61 6E 73 43 61 6E

00 00 00 00 00 00 05 63 61 72 67 6F 22 00 00 00 B8 43 2C EE 07 2D 47 1D BA 28 5F 76 D6 21 7D 30 00 00 00 00 0A 00 00 00 01 FF 01 08 C9 8B 0C 00 C7 00 00 00 00 00 3C 00 00 00`

Crowbar

`07 43 72 6F 77 62 61 72

61 72 00 00 00 00 02 00 05 63 61 72 67 6F 20 00 00 00 28 D5 25 90 F0 7B 43 9A AB 2B B7 3D D2 E0 6A DF 00 00 00 00 08 00 00 00 01 FF 01 08 C9 8B 0C 00 00 00 00 00 46 00 00 00`

AmmoBox_380_35rnd

`11 41 6D 6D 6F 42 6F 78 5F 33 38 30 5F 33 35 72 6E 64

00 00 00 00 03 00 05 63 61 72 67 6F 20 00 00 00 5A C2 42 EA 32 BF 49 4D 84 89 B9 31 3E E1 80 9C 00 00 00 00 08 00 00 00 01 FF 01 08 C9 8B 0C 00 00 00 00 00`