Packets: Reading and Understanding

EQ2Emulator Development forum.

Moderator: Team Members

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Packets: Reading and Understanding

Post by John Adams » Wed Jan 21, 2009 2:03 pm

Please follow me through an attempt to see how structs work, trying to find why "pos_size" is always zero (0) in current logs. If I can figure this out, I may be able to understand why other data is also seemingly bad.

Reference: Updating Opcodes

I look in SpawnStructs.xml for my client version or the nearest earlier version - in this case:

Code: Select all

<Struct Name="WS_SpawnStruct" ClientVersion="936">
<Data ElementName="position" Substruct="Substruct_SpawnPositionStruct" Size="1" />
<Data ElementName="vis" Substruct="Substruct_SpawnVisualizationInfoStruct" Size="1" />
<Data ElementName="info" Substruct="Substruct_SpawnInfoStruct" Size="1" />
</Struct>
I assume that WS_SpawnStruct is made up of three (3) substructs, position, vis, and info. Position is what I am after for this example, since that is where I find pos_size.

I find Substruct_SpawnPositionStruct - which looks like this:

Code: Select all

<Struct Name="Substruct_SpawnPositionStruct" ClientVersion="936" >
<Data ElementName="pos_grid_id" Type="int32" Size="1" />
<Data ElementName="pos_x" Type="float" Size="1" />
<Data ElementName="pos_y" Type="float" Size="1" />
<Data ElementName="pos_z" Type="float" Size="1" />
<Data ElementName="pos_unknown" Type="sint16" Size="3" />
<Data ElementName="pos_heading1" Type="sint16" Size="1" />
<Data ElementName="pos_heading2" Type="sint16" Size="1" />
<Data ElementName="pos_speed" Type="int16" Size="1" />
<Data ElementName="pos_state" Type="int16" Size="1" />
<Data ElementName="pos_unknown2" Type="int8" Size="6" />
<Data ElementName="pos_next_x" Type="float" Size="1" />
<Data ElementName="pos_next_y" Type="float" Size="1" />
<Data ElementName="pos_next_z" Type="float" Size="1" />
<Data ElementName="pos_x3" Type="float" Size="1" />
<Data ElementName="pos_y3" Type="float" Size="1" />
<Data ElementName="pos_z3" Type="float" Size="1" />
<Data ElementName="pos_movement_mode" Type="int8" Size="1" />
<Data ElementName="pos_unknown3b" Type="int8" Size="1" />
<Data ElementName="pos_unknown4" Type="int16" Size="2" />
<Data ElementName="pos_move_type" Type="int16" Size="1" />
<Data ElementName="pos_unknown6" Type="int16" Size="8" />
<Data ElementName="pos_collision_radius" Type="int16" Size="1" />
<Data ElementName="pos_size" Type="int16" Size="1" />
<Data ElementName="pos_size_ratio" Type="float" Size="1" />
<Data ElementName="pos_size_multiplier_ratio" Type="float" Size="1" />
<Data ElementName="pos_unknown10" Type="int16" Size="6" />
</Struct>
I hit the PacketParser source and search for "pos_size" and find it in the procedure PacketParser::processSpawnPackets() - and after 2 hours of hunting, I finally found the "name" of the opcode that is responsible for this packet of data.

"OP_ClientCmdMsg::OP_EqCreateGhostCmd" or 507 (for version 944), or 1FB in Hex, or FB 01 in Little Endian ~sigh~

I open my captured log and search for FB 01:

Code: Select all

-- OP_ClientCmdMsg::OP_EqUpdateSubClassesCmd --
1/21/2009 10:40:15
199.108.12.38 -> 192.168.1.100
0000:	00 09 00 42 01 37 B0 00 00 00 FF FB 01 20 73 49 ...B.7....... sI
0010:	0A 00 FF FF 00 00 00 00 78 BD C1 39 00 06 00 61 ........x..9...a
0020:	74 74 61 63 6B 00 40 1C 46 01 73 49 0A 00 B8 6B ttack.@.F.sI...k
0030:	47 FA 6F 00 00 00 FF 62 F1 35 4C 07 22 5C FF C4 G.o....b.5L."\..
0040:	96 40 99 09 9C 41 CF DA FF CD C1 61 DF 02 E0 46 .@...A.....a...F
0050:	E0 46 FF 93 04 40 84 F8 3D A1 41 50 B3 C1 70 40 .F...@..=.AP..p@
0060:	9D FE 40 9E 74 D6 41 48 9C 02 C1 78 88 0B 0E F1 ..@.t.AH...x....
0070:	99 99 9A 0C F9 FF FF 3F 80 3E 83 FF FF 98 01 03 .......?.>......
0080:	81 76 09 81 64 7F 7E 81 02 8E 01 01 01 C4 C4 FF .v..d.~.........
0090:	FA FF FF FF FF C4 97 FF FF FF FF 7F 7F 68 81 0C .............h..
00A0:	20 8D 05 03 FF 05 00 61 20 72 61 74 00 00 00 00  ......a rat....
00B0	00 00 00 00 00 00 00 00 00 03                   ..........
Re-tracing LE's description of the packet:
00 09 == packet type
00 42 == sequence
01 == compressed ( !!! )
37 == OP_ClientCmdMsg for this version
B0 00 00 == packet size
FF == Opcode is next two bytes instead of one
FB 01 == Opcode (OP_EqCreateGhostCmd, or in v944's log, OP_EqUpdateSubClassesCmd haha)

Now, LE states that using WorldStructs.xml (which I assume now means SpawnStructs.xml) I can simply follow the rest of the data in this packet to understand what each value should be and try to locate pos_size. However, my packet is compressed... so what do I do?

I tried uncommenting out some DumpPacket() calls that already exist (PrintPacket is not the format I need, I don't think) but I do not believe it contains the part of the struct I am looking for (?)

Code: Select all

   0: 04 E7 CB 09 00 FF FF 00 - 00 00 00 47 CD 38 D6 00  | ...........G.8..
  16: 06 00 61 74 74 61 63 6B - 00 40 1C 46 01 E7 CB 09  | ..attack.@.F....
  32: 00 3C B1 19 FA 6E 00 00 - 00 FF 8F AB 86 4C 07 22  | .<...n.......L."
  48: 5C FF 37 5F 40 A9 3A 29 - C0 C7 EF 0C C2 11 EA 07  | \.7_@.:)........
  64: 80 C0 C0 93 04 40 84 F8 - 5A 90 C0 80 F3 F4 C1 D8  | .....@..Z.......
  80: 40 92 E7 40 88 C0 51 6A - 9F 02 C1 B3 D9 80 88 0B  | @..@..Qj........
  96: 0E F1 99 99 9A 0C F9 FF - FF 3F 80 3E 83 FF FF 98  | .........?.>....
 112: 01 03 81 76 09 81 64 7F - 7E 81 02 8E 01 01 01 C4  | ...v..d.~.......
 128: C4 FF FA FF FF FF FF C4 - 97 FF FF FF FF 7F 7F 68  | ...............h
 144: 81 0C 20 8D 05 03 FF 05 - 00 61 20 72 61 74 00 00  | .. ......a rat..
 160: 00 00 00 00 00 00 00 00 - 00 00 00 03              | ............
Should I assume that what is in this first (compressed) packet sample at position 000D is the start of the data in the second (uncompressed) packet sample at position 0?

Basically, where the hell is pos_size, gdi? :)
Last edited by John Adams on Sun Oct 09, 2011 2:21 pm, edited 2 times in total.
Reason: 90-day sticky

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Re: Packets: Reading and Understanding

Post by John Adams » Wed Jan 21, 2009 2:20 pm

And!!

Why would the ghost of "a rat" be so much smaller than the ghost of a Mender NPC?

Code: Select all

   0: 03 3C 66 00 00 FF FF 00 - 00 00 00 0C 9E C3 06 00  | .<f.............
  16: 06 00 72 65 70 61 69 72 - 00 00 20 41 00 3C B1 19  | ..repair.. A.<..
  32: FA 94 01 00 00 FF 27 AD - BD E5 AF AF 4A FF 27 8C  | ......'.....J.'.
  48: 41 13 07 24 41 83 C2 38 - 9E 1F 39 1F 39 93 04 40  | A..$A..8..9.9..@
  64: 80 19 C1 0B 02 11 C1 80 - 22 F9 FF FF 3F 80 3F 83  | ........"...?.?.
  80: FF FF B8 04 01 03 81 16 - 09 81 64 7F 7E 83 04 0A  | ..........d.~...
  96: 8E 01 0D 0D C4 4F FF FA - 48 81 8B C7 4F FF 8B C7  | .....O..H...O...
 112: 66 E5 E5 71 85 FF 66 E5 - E5 71 85 48 81 C3 50 0B  | f..q..f..q.H..P.
 128: 5E E1 0E 52 0E 8F 0E 51 - 0E 53 1D CF 81 04 A4 04  | ^..R...Q.S......
 144: 70 FF 04 A4 04 70 15 82 - 15 FF FF FF FF FF FF FF  | p....p..........
 160: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 176: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 192: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 208: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 224: FF FF FF FF FF FF FF FF - FF E3 0E 2F FF FF FF FF  | .........../....
 240: FF FF 12 0E 2F 12 FF FF - 56 76 79 6A 96 98 FF FF  | ..../...Vvyj....
 256: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 272: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 288: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 304: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 320: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF F1 02  | ................
 336: 18 23 FF FF FF FF FF FF - 02 18 23 FF 0E 2F FF FF  | .#........#../..
 352: FF FF FF FF 12 0E 2F 02 - 18 23 12 C7 D0 02 18 23  | ....../..#.....#
 368: EC D9 19 A8 EF F7 05 CE - F9 2C 3E FF FF 11 01 1A  | .........,>.....
 384: 22 42 C5 22 90 D0 FB 3E - FF D9 19 A8 EF FD C5 22  | "B."...>......."
 400: 05 CE F9 2C 9F 11 01 1A - 22 42 0F DF 4F 34 68 1C  | ...,...."B..O4h.
 416: 2D 36 FF 34 68 1C 2D 36 - 0F 1C 8E 0F 1C 4F C0 0C  | -6.4h.-6.....O..
 432: 1E 83 2E 24 9E 05 28 02 - 06 06 00 47 6C 61 6E 61  | ...$..(....Glana
 448: 65 00 00 00 00 00 00 00 - 00 00 00 08 00 3C 4D 65  | e............<Me
 464: 6E 64 65 72 3E 00 01                               | nder>..
This is the unpacked spawn record right above the rat in my log. Is it because NPCs have more stuff? How does it know? Inquiring minds must knows!

LethalEncounter
Team: Zombie
Posts: 2717
Joined: Wed Jul 25, 2007 10:10 pm

Re: Packets: Reading and Understanding

Post by LethalEncounter » Wed Jan 21, 2009 3:54 pm

John Adams wrote:Please follow me through an attempt to see how structs work, trying to find why "pos_size" is always zero (0) in current logs. If I can figure this out, I may be able to understand why other data is also seemingly bad.

Reference: Updating Opcodes

I look in SpawnStructs.xml for my client version or the nearest earlier version - in this case:

Code: Select all

<Struct Name="WS_SpawnStruct" ClientVersion="936">
<Data ElementName="position" Substruct="Substruct_SpawnPositionStruct" Size="1" />
<Data ElementName="vis" Substruct="Substruct_SpawnVisualizationInfoStruct" Size="1" />
<Data ElementName="info" Substruct="Substruct_SpawnInfoStruct" Size="1" />
</Struct>
I assume that WS_SpawnStruct is made up of three (3) substructs, position, vis, and info. Position is what I am after for this example, since that is where I find pos_size.

I find Substruct_SpawnPositionStruct - which looks like this:

Code: Select all

<Struct Name="Substruct_SpawnPositionStruct" ClientVersion="936" >
<Data ElementName="pos_grid_id" Type="int32" Size="1" />
<Data ElementName="pos_x" Type="float" Size="1" />
<Data ElementName="pos_y" Type="float" Size="1" />
<Data ElementName="pos_z" Type="float" Size="1" />
<Data ElementName="pos_unknown" Type="sint16" Size="3" />
<Data ElementName="pos_heading1" Type="sint16" Size="1" />
<Data ElementName="pos_heading2" Type="sint16" Size="1" />
<Data ElementName="pos_speed" Type="int16" Size="1" />
<Data ElementName="pos_state" Type="int16" Size="1" />
<Data ElementName="pos_unknown2" Type="int8" Size="6" />
<Data ElementName="pos_next_x" Type="float" Size="1" />
<Data ElementName="pos_next_y" Type="float" Size="1" />
<Data ElementName="pos_next_z" Type="float" Size="1" />
<Data ElementName="pos_x3" Type="float" Size="1" />
<Data ElementName="pos_y3" Type="float" Size="1" />
<Data ElementName="pos_z3" Type="float" Size="1" />
<Data ElementName="pos_movement_mode" Type="int8" Size="1" />
<Data ElementName="pos_unknown3b" Type="int8" Size="1" />
<Data ElementName="pos_unknown4" Type="int16" Size="2" />
<Data ElementName="pos_move_type" Type="int16" Size="1" />
<Data ElementName="pos_unknown6" Type="int16" Size="8" />
<Data ElementName="pos_collision_radius" Type="int16" Size="1" />
<Data ElementName="pos_size" Type="int16" Size="1" />
<Data ElementName="pos_size_ratio" Type="float" Size="1" />
<Data ElementName="pos_size_multiplier_ratio" Type="float" Size="1" />
<Data ElementName="pos_unknown10" Type="int16" Size="6" />
</Struct>
I hit the PacketParser source and search for "pos_size" and find it in the procedure PacketParser::processSpawnPackets() - and after 2 hours of hunting, I finally found the "name" of the opcode that is responsible for this packet of data.

"OP_ClientCmdMsg::OP_EqCreateGhostCmd" or 507 (for version 944), or 1FB in Hex, or FB 01 in Little Endian ~sigh~

I open my captured log and search for FB 01:

Code: Select all

-- OP_ClientCmdMsg::OP_EqUpdateSubClassesCmd --
1/21/2009 10:40:15
199.108.12.38 -> 192.168.1.100
0000:	00 09 00 42 01 37 B0 00 00 00 FF FB 01 20 73 49 ...B.7....... sI
0010:	0A 00 FF FF 00 00 00 00 78 BD C1 39 00 06 00 61 ........x..9...a
0020:	74 74 61 63 6B 00 40 1C 46 01 73 49 0A 00 B8 6B ttack.@.F.sI...k
0030:	47 FA 6F 00 00 00 FF 62 F1 35 4C 07 22 5C FF C4 G.o....b.5L."\..
0040:	96 40 99 09 9C 41 CF DA FF CD C1 61 DF 02 E0 46 .@...A.....a...F
0050:	E0 46 FF 93 04 40 84 F8 3D A1 41 50 B3 C1 70 40 .F...@..=.AP..p@
0060:	9D FE 40 9E 74 D6 41 48 9C 02 C1 78 88 0B 0E F1 ..@.t.AH...x....
0070:	99 99 9A 0C F9 FF FF 3F 80 3E 83 FF FF 98 01 03 .......?.>......
0080:	81 76 09 81 64 7F 7E 81 02 8E 01 01 01 C4 C4 FF .v..d.~.........
0090:	FA FF FF FF FF C4 97 FF FF FF FF 7F 7F 68 81 0C .............h..
00A0:	20 8D 05 03 FF 05 00 61 20 72 61 74 00 00 00 00  ......a rat....
00B0	00 00 00 00 00 00 00 00 00 03                   ..........
Re-tracing LE's description of the packet:
00 09 == packet type
00 42 == sequence
01 == compressed ( !!! )
37 == OP_ClientCmdMsg for this version
B0 00 00 == packet size
FF == Opcode is next two bytes instead of one
FB 01 == Opcode (OP_EqCreateGhostCmd, or in v944's log, OP_EqUpdateSubClassesCmd haha)

Now, LE states that using WorldStructs.xml (which I assume now means SpawnStructs.xml) I can simply follow the rest of the data in this packet to understand what each value should be and try to locate pos_size. However, my packet is compressed... so what do I do?

I tried uncommenting out some DumpPacket() calls that already exist (PrintPacket is not the format I need, I don't think) but I do not believe it contains the part of the struct I am looking for (?)

Code: Select all

   0: 04 E7 CB 09 00 FF FF 00 - 00 00 00 47 CD 38 D6 00  | ...........G.8..
  16: 06 00 61 74 74 61 63 6B - 00 40 1C 46 01 E7 CB 09  | ..attack.@.F....
  32: 00 3C B1 19 FA 6E 00 00 - 00 FF 8F AB 86 4C 07 22  | .<...n.......L."
  48: 5C FF 37 5F 40 A9 3A 29 - C0 C7 EF 0C C2 11 EA 07  | \.7_@.:)........
  64: 80 C0 C0 93 04 40 84 F8 - 5A 90 C0 80 F3 F4 C1 D8  | .....@..Z.......
  80: 40 92 E7 40 88 C0 51 6A - 9F 02 C1 B3 D9 80 88 0B  | @..@..Qj........
  96: 0E F1 99 99 9A 0C F9 FF - FF 3F 80 3E 83 FF FF 98  | .........?.>....
 112: 01 03 81 76 09 81 64 7F - 7E 81 02 8E 01 01 01 C4  | ...v..d.~.......
 128: C4 FF FA FF FF FF FF C4 - 97 FF FF FF FF 7F 7F 68  | ...............h
 144: 81 0C 20 8D 05 03 FF 05 - 00 61 20 72 61 74 00 00  | .. ......a rat..
 160: 00 00 00 00 00 00 00 00 - 00 00 00 03              | ............
Should I assume that what is in this first (compressed) packet sample at position 000D is the start of the data in the second (uncompressed) packet sample at position 0?

Basically, where the hell is pos_size, gdi? :)
heh :P

OK, this thing about spawn packets is that WS_SpawnStruct only covers the packed data sections. The entire packet as displayed in your log uses WS_SpawnStruct_Header, WS_SpawnStruct, and WS_SpawnStruct_Footer in that order. Through practice I can easily pick out the start of the packed data, but in your first packet (those packets are different) it is 6F 00 00 00. What you are looking for is a 32 bit number (4 hex number values) about 20 bytes after the default action. (Another hint is it is usually followed by a 0xFF value). Now what is this 32 bit number anyways? It is the size of the packed data. Starting with the 32 bit number and continuing on to the last hex value before the name gives you:

Code: Select all

6F 00 00 00 FF 62 F1 35 4C 07 22 5C FF C4 G.o....b.5L."\..
0040:	96 40 99 09 9C 41 CF DA FF CD C1 61 DF 02 E0 46 .@...A.....a...F
0050:	E0 46 FF 93 04 40 84 F8 3D A1 41 50 B3 C1 70 40 .F...@..=.AP..p@
0060:	9D FE 40 9E 74 D6 41 48 9C 02 C1 78 88 0B 0E F1 ..@.t.AH...x....
0070:	99 99 9A 0C F9 FF FF 3F 80 3E 83 FF FF 98 01 03 .......?.>......
0080:	81 76 09 81 64 7F 7E 81 02 8E 01 01 01 C4 C4 FF .v..d.~.........
0090:	FA FF FF FF FF C4 97 FF FF FF FF 7F 7F 68 81 0C .............h..
00A0:	20 8D 05 03 FF
This is the packed data in its entirety. Now that we have the packed data, it would be nice to do something with it, ya? :P

First you need to turn it into an array so that you can use it:

Code: Select all

uchar blah[] = {0x6F,0x00,0x00,0x00,0xFF,0x62,0xF1,0x35,0x4C,0x07,0x22,0x5C,0xFF,0xC4
,0x96,0x40,0x99,0x09,0x9C,0x41,0xCF,0xDA,0xFF,0xCD,0xC1,0x61,0xDF,0x02,0xE0,0x46
,0xE0,0x46,0xFF,0x93,0x04,0x40,0x84,0xF8,0x3D,0xA1,0x41,0x50,0xB3,0xC1,0x70,0x40
,0x9D,0xFE,0x40,0x9E,0x74,0xD6,0x41,0x48,0x9C,0x02,0xC1,0x78,0x88,0x0B,0x0E,0xF1
,0x99,0x99,0x9A,0x0C,0xF9,0xFF,0xFF,0x3F,0x80,0x3E,0x83,0xFF,0xFF,0x98,0x01,0x03
,0x81,0x76,0x09,0x81,0x64,0x7F,0x7E,0x81,0x02,0x8E,0x01,0x01,0x01,0xC4,0xC4,0xFF
,0xFA,0xFF,0xFF,0xFF,0xFF,0xC4,0x97,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x68,0x81,0x0C
,0x20,0x8D,0x05,0x03,0xFF};

Now that we have it in an array, we need to unpack it:

Code: Select all

uchar* blah2 = new uchar[1000];
Unpack(blah, blah2, 1000, 942);
Now we dump the uncompressed data, and just for fun also put it into a PacketStruct to print out all the values:

Code: Select all

PacketStruct* packet = configReader.getStruct("WS_SpawnStruct", 944);
packet->LoadPacketData(blah2, 1000);
DumpPacket(blah2, 1000);
packet->PrintPacket();
safe_delete_array(blah2);
safe_delete(packet);
You end up with:

Code: Select all

   0: 5C 22 07 4C 35 F1 62 41 - 9C 09 99 40 96 C4 61 C1  | \".L5.bA...@..a.
  16: CD FF 00 00 DA FF 46 E0 - 46 E0 00 02 84 40 00 00  | ......F.F....@..
  32: 04 00 00 00 00 00 50 41 - A1 3D 9D 40 00 00 70 C1  | ......PA.=.@..p.
  48: 00 00 48 41 D6 74 9E 40 - 00 00 78 C1 02 00 00 00  | ..HA.t.@..x.....
  64: 00 00 0B 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
  80: 00 00 00 00 0C 00 00 00 - 9A 99 99 3E 00 00 80 3F  | ...........>...?
  96: FF FF FF FF 00 00 00 00 - 00 00 00 00 03 01 00 00  | ................
 112: 76 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | v...............
 128: 64 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | d...............
 144: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 160: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 176: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 192: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 208: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 224: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 240: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 256: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 272: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 288: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 304: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 320: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 336: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 352: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 368: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 384: 00 00 00 00 02 00 00 00 - 00 00 00 00 01 01 01 00  | ................
 400: 00 00 00 00 FF 00 00 00 - C4 00 C4 00 FF FF FF FF  | ................
 416: FF FF FF 00 FF 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 432: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 448: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 464: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 480: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 496: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 512: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 528: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 544: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 560: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 576: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 592: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 608: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 624: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 640: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 656: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 672: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 688: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 704: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 720: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 736: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 752: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 768: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 0C 00 00  | ................
 784: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 800: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 816: 00 00 00 00 FF 00 03 05 - 00 00 00 BA 0D F0 AD BA  | ................
 832: 0D F0 AD BA 0D F0 AD BA - 0D F0 AD BA 0D F0 AD BA  | ................
 848: 0D F0 AD BA 0D F0 AD BA - 0D F0 AD BA 0D F0 AD BA  | ................
 864: 0D F0 AD BA 0D F0 AD BA - 0D F0 AD BA 0D F0 AD BA  | ................
 880: 0D F0 AD BA 0D F0 AD BA - 0D F0 AD BA 0D F0 AD BA  | ................
 896: 0D F0 AD BA 0D F0 AD BA - 0D F0 AD BA 0D F0 AD BA  | ................
 912: 0D F0 AD BA 0D F0 AD BA - 0D F0 AD BA 0D F0 AD BA  | ................
 928: 0D F0 AD BA 0D F0 AD BA - 0D F0 AD BA 0D F0 AD BA  | ................
 944: 0D F0 AD BA 0D F0 AD BA - 0D F0 AD BA 0D F0 AD BA  | ................
 960: 0D F0 AD BA 0D F0 AD BA - 0D F0 AD BA 0D F0 AD BA  | ................
 976: 0D F0 AD BA 0D F0 AD BA - 0D F0 AD BA 0D F0 AD BA  | ................
 992: 0D F0 AD BA 0D F0 AD BA                            | ........
Name: position_pos_grid_id_0    Index:  0       Type:  int32            Data:  1275535964
Name: position_pos_x_0          Index:  0       Type:  float            Data:  14.1839
Name: position_pos_y_0          Index:  0       Type:  float            Data:  4.78242
Name: position_pos_z_0          Index:  0       Type:  float            Data:  -14.1105
Name: position_pos_unknown_0    Index:  0       Type:  sint16           Data:  -51
Name: position_pos_unknown_0    Index:  1       Type:  sint16           Data:  00
Name: position_pos_unknown_0    Index:  2       Type:  sint16           Data:  -38
Name: position_pos_heading1_0   Index:  0       Type:  sint16           Data:  -8122
Name: position_pos_heading2_0   Index:  0       Type:  sint16           Data:  -8122
Name: position_pos_speed_0      Index:  0       Type:  int16            Data:  512
Name: position_pos_state_0      Index:  0       Type:  int16            Data:  16516
Name: position_pos_unknown2_0   Index:  0       Type:  int8             Data:  00
Name: position_pos_unknown2_0   Index:  1       Type:  int8             Data:  00
Name: position_pos_unknown2_0   Index:  2       Type:  int8             Data:  04
Name: position_pos_unknown2_0   Index:  3       Type:  int8             Data:  00
Name: position_pos_unknown2_0   Index:  4       Type:  int8             Data:  00
Name: position_pos_unknown2_0   Index:  5       Type:  int8             Data:  00
Name: position_pos_next_x_0     Index:  0       Type:  float            Data:  13
Name: position_pos_next_y_0     Index:  0       Type:  float            Data:  4.91377
Name: position_pos_next_z_0     Index:  0       Type:  float            Data:  -15
Name: position_pos_x3_0         Index:  0       Type:  float            Data:  12.5
Name: position_pos_y3_0         Index:  0       Type:  float            Data:  4.95176
Name: position_pos_z3_0         Index:  0       Type:  float            Data:  -15.5
Name: position_pos_movement_mode_0      Index:  0       Type:  int8             Data:  02
Name: position_pos_unknown3b_0          Index:  0       Type:  int8             Data:  00
Name: position_pos_unknown4_0   Index:  0       Type:  int16            Data:  00
Name: position_pos_unknown4_0   Index:  1       Type:  int16            Data:  00
Name: position_pos_move_type_0          Index:  0       Type:  int16            Data:  11
Name: position_pos_unknown6_0   Index:  0       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  1       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  2       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  3       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  4       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  5       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  6       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  7       Type:  int16            Data:  00
Name: position_pos_collision_radius_0   Index:  0       Type:  int16            Data:  12
Name: position_pos_size_0       Index:  0       Type:  int16            Data:  00
Name: position_pos_size_ratio_0         Index:  0       Type:  float            Data:  0.3
Name: position_pos_size_multiplier_ratio_0      Index:  0       Type:  float            Data:  1
Name: position_pos_unknown10_0          Index:  0       Type:  int16            Data:  65535
Name: position_pos_unknown10_0          Index:  1       Type:  int16            Data:  65535
Name: position_pos_unknown10_0          Index:  2       Type:  int16            Data:  00
Name: position_pos_unknown10_0          Index:  3       Type:  int16            Data:  00
Name: position_pos_unknown10_0          Index:  4       Type:  int16            Data:  00
Name: position_pos_unknown10_0          Index:  5       Type:  int16            Data:  00
Name: vis_arrow_color_0         Index:  0       Type:  int8             Data:  03
Name: vis_locked_no_loot_0      Index:  0       Type:  int8             Data:  01
Name: vis_npc_con_0     Index:  0       Type:  sint8            Data:  00
Name: vis_quest_flag_0          Index:  0       Type:  int8             Data:  00
Name: vis_vis_flags_0   Index:  0       Type:  int8             Data:  118
Name: vis_unknownb_0    Index:  0       Type:  int8             Data:  00
Name: vis_unknownb_0    Index:  1       Type:  int8             Data:  00
Name: vis_unknownb_0    Index:  2       Type:  int8             Data:  00
Name: vis_unknownb_0    Index:  3       Type:  int8             Data:  00
Name: vis_hand_flag_0   Index:  0       Type:  int8             Data:  00
Name: vis_unknown2_0    Index:  0       Type:  int8             Data:  00
Name: vis_unknown2_0    Index:  1       Type:  int8             Data:  00
Name: vis_unknown2_0    Index:  2       Type:  int8             Data:  00
Name: vis_unknown2_0    Index:  3       Type:  int8             Data:  00
Name: vis_unknown2_0    Index:  4       Type:  int8             Data:  00
Name: vis_unknown2_0    Index:  5       Type:  int8             Data:  00
Name: info_hp_remaining_0       Index:  0       Type:  int8             Data:  00
Name: info_unknown2a_0          Index:  0       Type:  int8             Data:  00
Name: info_unknown2a_0          Index:  1       Type:  int8             Data:  00
Name: info_unknown2a_0          Index:  2       Type:  int8             Data:  00
Name: info_health_percent_0     Index:  0       Type:  int8             Data:  100
Name: info_unknown2b_0          Index:  0       Type:  int8             Data:  00
Name: info_unknown3_0   Index:  0       Type:  int8             Data:  00
Name: info_unknown3_0   Index:  1       Type:  int8             Data:  00
Name: info_unknown3_0   Index:  2       Type:  int8             Data:  00
Name: info_unknown3_0   Index:  3       Type:  int8             Data:  00
Name: info_unknown3_0   Index:  4       Type:  int8             Data:  00
Name: info_unknown3_0   Index:  5       Type:  int8             Data:  00
Name: info_unknown3_0   Index:  6       Type:  int8             Data:  00
Name: info_unknown3_0   Index:  7       Type:  int8             Data:  00
Name: info_unknown3_0   Index:  8       Type:  int8             Data:  00
Name: info_unknown3_0   Index:  9       Type:  int8             Data:  00
Name: info_unknown3_0   Index:  10      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  11      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  12      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  13      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  14      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  15      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  16      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  17      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  18      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  19      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  20      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  21      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  22      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  23      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  24      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  25      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  26      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  27      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  28      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  29      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  30      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  31      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  32      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  33      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  34      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  35      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  36      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  37      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  38      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  39      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  40      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  41      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  42      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  43      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  44      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  45      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  46      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  47      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  48      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  49      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  50      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  51      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  52      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  53      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  54      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  55      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  56      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  57      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  58      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  59      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  60      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  61      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  62      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  63      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  64      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  65      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  66      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  67      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  68      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  69      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  70      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  71      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  72      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  73      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  74      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  75      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  76      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  77      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  78      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  79      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  80      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  81      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  82      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  83      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  84      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  85      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  86      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  87      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  88      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  89      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  90      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  91      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  92      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  93      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  94      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  95      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  96      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  97      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  98      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  99      Type:  int8             Data:  00
Name: info_unknown3_0   Index:  100     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  101     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  102     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  103     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  104     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  105     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  106     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  107     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  108     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  109     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  110     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  111     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  112     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  113     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  114     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  115     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  116     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  117     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  118     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  119     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  120     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  121     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  122     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  123     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  124     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  125     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  126     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  127     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  128     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  129     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  130     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  131     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  132     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  133     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  134     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  135     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  136     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  137     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  138     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  139     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  140     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  141     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  142     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  143     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  144     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  145     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  146     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  147     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  148     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  149     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  150     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  151     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  152     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  153     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  154     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  155     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  156     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  157     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  158     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  159     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  160     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  161     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  162     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  163     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  164     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  165     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  166     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  167     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  168     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  169     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  170     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  171     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  172     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  173     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  174     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  175     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  176     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  177     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  178     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  179     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  180     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  181     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  182     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  183     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  184     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  185     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  186     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  187     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  188     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  189     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  190     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  191     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  192     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  193     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  194     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  195     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  196     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  197     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  198     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  199     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  200     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  201     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  202     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  203     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  204     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  205     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  206     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  207     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  208     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  209     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  210     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  211     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  212     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  213     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  214     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  215     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  216     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  217     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  218     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  219     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  220     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  221     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  222     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  223     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  224     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  225     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  226     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  227     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  228     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  229     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  230     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  231     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  232     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  233     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  234     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  235     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  236     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  237     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  238     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  239     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  240     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  241     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  242     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  243     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  244     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  245     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  246     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  247     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  248     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  249     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  250     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  251     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  252     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  253     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  254     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  255     Type:  int8             Data:  00
Name: info_unknown3_0   Index:  256     Type:  int8             Data:  00
Name: info_heroic_flag_0        Index:  0       Type:  int8             Data:  00
Name: info_spawn_type_0         Index:  0       Type:  int8             Data:  02
Name: info_icon_0       Index:  0       Type:  int8             Data:  00
Name: info_activity_status_0    Index:  0       Type:  int32            Data:  00
Name: info_unknown6_0   Index:  0       Type:  int8             Data:  00
Name: info_unknown6_0   Index:  1       Type:  int8             Data:  00
Name: info_unknown4_0   Index:  0       Type:  int8             Data:  01
Name: info_level_0      Index:  0       Type:  int8             Data:  01
Name: info_unknown5_0   Index:  0       Type:  int8             Data:  01
Name: info_unknown5_0   Index:  1       Type:  int8             Data:  00
Name: info_unknown6b_0          Index:  0       Type:  int32            Data:  00
Name: info_unknown7_0   Index:  0       Type:  float            Data:  3.57331e-043
Name: info_model_type_0         Index:  0       Type:  int16            Data:  196
Name: info_soga_model_type_0    Index:  0       Type:  int16            Data:  196
Name: info_skin_color_0         Index:  0       Type:  EQ2_Color        Data: red: 255 green: 255 bl
ue: 255
Name: info_eye_color_0          Index:  0       Type:  EQ2_Color        Data: red: 255 green: 255 bl
ue: 255
Name: info_soga_eye_color_0     Index:  0       Type:  EQ2_Color        Data: red: 255 green: 00 blu
e: 255
Name: info_soga_skin_color_0    Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_kunark_unknown_color1_0      Index:  0       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_kunark_unknown_color2_0      Index:  0       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_types_0    Index:  0       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  1       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  2       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  3       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  4       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  5       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  6       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  7       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  8       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  9       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  a       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  b       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  c       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  d       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  e       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  f       Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  10      Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  11      Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  12      Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  13      Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  14      Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  15      Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  16      Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  17      Type:  int16            Data:  00
Name: info_equipment_types_0    Index:  18      Type:  int16            Data:  00
Name: info_hair_type_id_0       Index:  0       Type:  int16            Data:  00
Name: info_facial_hair_type_id_0        Index:  0       Type:  int16            Data:  00
Name: info_wing_type_id_0       Index:  0       Type:  int16            Data:  00
Name: info_chest_type_id_0      Index:  0       Type:  int16            Data:  00
Name: info_legs_type_id_0       Index:  0       Type:  int16            Data:  00
Name: info_soga_hair_type_id_0          Index:  0       Type:  int16            Data:  00
Name: info_soga_facial_hair_type_id_0   Index:  0       Type:  int16            Data:  00
Name: info_equipment_colors_0   Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  1       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  2       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  3       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  4       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  5       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  6       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  7       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  8       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  9       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  a       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  b       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  c       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  d       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  e       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  f       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  10      Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  11      Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  12      Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  13      Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  14      Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  15      Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  16      Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  17      Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_colors_0   Index:  18      Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_hair_type_color_0    Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_hair_face_color_0    Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_wing_color1_0        Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_unknown10_0          Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_unknown10_0          Index:  1       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_equipment_highlights_0       Index:  0       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  1       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  2       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  3       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  4       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  5       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  6       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  7       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  8       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  9       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  a       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  b       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  c       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  d       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  e       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  f       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  10      Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  11      Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  12      Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  13      Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  14      Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  15      Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  16      Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  17      Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_equipment_highlights_0       Index:  18      Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_hair_type_highlight_color_0          Index:  0       Type:  EQ2_Color        Data: red: 0
0 green: 00 blue: 00
Name: info_hair_face_highlight_color_0          Index:  0       Type:  EQ2_Color        Data: red: 0
0 green: 00 blue: 00
Name: info_wing_color2_0        Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_unknown11_0          Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_unknown11_0          Index:  1       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_soga_hair_type_color_0       Index:  0       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_soga_hair_type_highlight_color_0     Index:  0       Type:  EQ2_Color        Data: red: 0
0 green: 00 blue: 00
Name: info_soga_hair_face_color_0       Index:  0       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_soga_hair_face_highlight_color_0     Index:  0       Type:  EQ2_Color        Data: red: 0
0 green: 00 blue: 00
Name: info_unknown12_0          Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_eye_type_0   Index:  0       Type:  sint8            Data:  00
Name: info_eye_type_0   Index:  1       Type:  sint8            Data:  00
Name: info_eye_type_0   Index:  2       Type:  sint8            Data:  00
Name: info_ear_type_0   Index:  0       Type:  sint8            Data:  00
Name: info_ear_type_0   Index:  1       Type:  sint8            Data:  00
Name: info_ear_type_0   Index:  2       Type:  sint8            Data:  00
Name: info_eye_brow_type_0      Index:  0       Type:  sint8            Data:  00
Name: info_eye_brow_type_0      Index:  1       Type:  sint8            Data:  00
Name: info_eye_brow_type_0      Index:  2       Type:  sint8            Data:  00
Name: info_cheek_type_0         Index:  0       Type:  sint8            Data:  00
Name: info_cheek_type_0         Index:  1       Type:  sint8            Data:  00
Name: info_cheek_type_0         Index:  2       Type:  sint8            Data:  00
Name: info_lip_type_0   Index:  0       Type:  sint8            Data:  00
Name: info_lip_type_0   Index:  1       Type:  sint8            Data:  00
Name: info_lip_type_0   Index:  2       Type:  sint8            Data:  00
Name: info_chin_type_0          Index:  0       Type:  sint8            Data:  00
Name: info_chin_type_0          Index:  1       Type:  sint8            Data:  00
Name: info_chin_type_0          Index:  2       Type:  sint8            Data:  00
Name: info_nose_type_0          Index:  0       Type:  sint8            Data:  00
Name: info_nose_type_0          Index:  1       Type:  sint8            Data:  00
Name: info_nose_type_0          Index:  2       Type:  sint8            Data:  00
Name: info_body_size_0          Index:  0       Type:  sint8            Data:  00
Name: info_unknown13_0          Index:  0       Type:  int32            Data:  00
Name: info_soga_eye_type_0      Index:  0       Type:  sint8            Data:  00
Name: info_soga_eye_type_0      Index:  1       Type:  sint8            Data:  00
Name: info_soga_eye_type_0      Index:  2       Type:  sint8            Data:  00
Name: info_soga_ear_type_0      Index:  0       Type:  sint8            Data:  00
Name: info_soga_ear_type_0      Index:  1       Type:  sint8            Data:  00
Name: info_soga_ear_type_0      Index:  2       Type:  sint8            Data:  00
Name: info_soga_eye_brow_type_0         Index:  0       Type:  sint8            Data:  00
Name: info_soga_eye_brow_type_0         Index:  1       Type:  sint8            Data:  00
Name: info_soga_eye_brow_type_0         Index:  2       Type:  sint8            Data:  00
Name: info_soga_cheek_type_0    Index:  0       Type:  sint8            Data:  00
Name: info_soga_cheek_type_0    Index:  1       Type:  sint8            Data:  00
Name: info_soga_cheek_type_0    Index:  2       Type:  sint8            Data:  00
Name: info_soga_lip_type_0      Index:  0       Type:  sint8            Data:  00
Name: info_soga_lip_type_0      Index:  1       Type:  sint8            Data:  00
Name: info_soga_lip_type_0      Index:  2       Type:  sint8            Data:  00
Name: info_soga_chin_type_0     Index:  0       Type:  sint8            Data:  00
Name: info_soga_chin_type_0     Index:  1       Type:  sint8            Data:  00
Name: info_soga_chin_type_0     Index:  2       Type:  sint8            Data:  00
Name: info_soga_nose_type_0     Index:  0       Type:  sint8            Data:  00
Name: info_soga_nose_type_0     Index:  1       Type:  sint8            Data:  00
Name: info_soga_nose_type_0     Index:  2       Type:  sint8            Data:  00
Name: info_unknown14_0          Index:  0       Type:  int16            Data:  00
Name: info_unknown15_0          Index:  0       Type:  int16            Data:  00
Name: info_unknown15_0          Index:  1       Type:  int16            Data:  00
Name: info_unknown15_0          Index:  2       Type:  int16            Data:  00
Name: info_unknown15_0          Index:  3       Type:  int16            Data:  00
Name: info_unknown15_0          Index:  4       Type:  int16            Data:  00
Name: info_unknown15_0          Index:  5       Type:  int16            Data:  00
Name: info_unknown15_0          Index:  6       Type:  int16            Data:  00
Name: info_unknown15_0          Index:  7       Type:  int16            Data:  00
Name: info_hair_color1_0        Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_hair_color2_0        Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_hair_highlight_0     Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_soga_hair_color1_0   Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_soga_hair_color2_0   Index:  0       Type:  EQ2_Color        Data: red: 00 green: 00 blue
: 00
Name: info_soga_hair_highlight_0        Index:  0       Type:  EQ2_Color        Data: red: 00 green:
 00 blue: 00
Name: info_unknown18_0          Index:  0       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  1       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  2       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  3       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  4       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  5       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  6       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  7       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  8       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  9       Type:  int8             Data:  12
Name: info_unknown18_0          Index:  a       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  b       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  c       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  d       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  e       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  f       Type:  int8             Data:  00
Name: info_unknown18_0          Index:  10      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  11      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  12      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  13      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  14      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  15      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  16      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  17      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  18      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  19      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  1a      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  1b      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  1c      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  1d      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  1e      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  1f      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  20      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  21      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  22      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  23      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  24      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  25      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  26      Type:  int8             Data:  00
Name: info_unknown18_0          Index:  27      Type:  int8             Data:  00
Name: info_action_state_0       Index:  0       Type:  int16            Data:  00
Name: info_visual_state_0       Index:  0       Type:  int16            Data:  00
Name: info_mood_state_0         Index:  0       Type:  int16            Data:  00
Name: info_unknown19_0          Index:  0       Type:  int8             Data:  00
Name: info_unknown19_0          Index:  1       Type:  int8             Data:  00
Name: info_race_0       Index:  0       Type:  int8             Data:  255
Name: info_gender_0     Index:  0       Type:  int8             Data:  00
Name: info_class_0      Index:  0       Type:  int8             Data:  03
Name: info_difficulty_0         Index:  0       Type:  int8             Data:  05

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Re: Packets: Reading and Understanding

Post by John Adams » Wed Jan 21, 2009 3:58 pm

Awesome, let me absorb that a while and I'll give it a try. Is there some function existing in the parser that will simply dump whatever packet I send to it, in full? Or do I have to insert these blah's and dumppacket/printpackets as I find a section I want to learn about?

I thought there was something up with WS_SpawnStruct_Header... I just hadn't figured that part out yet. So I was eating this pie from the middle-out =)

LethalEncounter
Team: Zombie
Posts: 2717
Joined: Wed Jul 25, 2007 10:10 pm

Re: Packets: Reading and Understanding

Post by LethalEncounter » Wed Jan 21, 2009 3:59 pm

John Adams wrote:And!!

Why would the ghost of "a rat" be so much smaller than the ghost of a Mender NPC?

Code: Select all

   0: 03 3C 66 00 00 FF FF 00 - 00 00 00 0C 9E C3 06 00  | .<f.............
  16: 06 00 72 65 70 61 69 72 - 00 00 20 41 00 3C B1 19  | ..repair.. A.<..
  32: FA 94 01 00 00 FF 27 AD - BD E5 AF AF 4A FF 27 8C  | ......'.....J.'.
  48: 41 13 07 24 41 83 C2 38 - 9E 1F 39 1F 39 93 04 40  | A..$A..8..9.9..@
  64: 80 19 C1 0B 02 11 C1 80 - 22 F9 FF FF 3F 80 3F 83  | ........"...?.?.
  80: FF FF B8 04 01 03 81 16 - 09 81 64 7F 7E 83 04 0A  | ..........d.~...
  96: 8E 01 0D 0D C4 4F FF FA - 48 81 8B C7 4F FF 8B C7  | .....O..H...O...
 112: 66 E5 E5 71 85 FF 66 E5 - E5 71 85 48 81 C3 50 0B  | f..q..f..q.H..P.
 128: 5E E1 0E 52 0E 8F 0E 51 - 0E 53 1D CF 81 04 A4 04  | ^..R...Q.S......
 144: 70 FF 04 A4 04 70 15 82 - 15 FF FF FF FF FF FF FF  | p....p..........
 160: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 176: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 192: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 208: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 224: FF FF FF FF FF FF FF FF - FF E3 0E 2F FF FF FF FF  | .........../....
 240: FF FF 12 0E 2F 12 FF FF - 56 76 79 6A 96 98 FF FF  | ..../...Vvyj....
 256: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 272: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 288: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 304: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF  | ................
 320: FF FF FF FF FF FF FF FF - FF FF FF FF FF FF F1 02  | ................
 336: 18 23 FF FF FF FF FF FF - 02 18 23 FF 0E 2F FF FF  | .#........#../..
 352: FF FF FF FF 12 0E 2F 02 - 18 23 12 C7 D0 02 18 23  | ....../..#.....#
 368: EC D9 19 A8 EF F7 05 CE - F9 2C 3E FF FF 11 01 1A  | .........,>.....
 384: 22 42 C5 22 90 D0 FB 3E - FF D9 19 A8 EF FD C5 22  | "B."...>......."
 400: 05 CE F9 2C 9F 11 01 1A - 22 42 0F DF 4F 34 68 1C  | ...,...."B..O4h.
 416: 2D 36 FF 34 68 1C 2D 36 - 0F 1C 8E 0F 1C 4F C0 0C  | -6.4h.-6.....O..
 432: 1E 83 2E 24 9E 05 28 02 - 06 06 00 47 6C 61 6E 61  | ...$..(....Glana
 448: 65 00 00 00 00 00 00 00 - 00 00 00 08 00 3C 4D 65  | e............<Me
 464: 6E 64 65 72 3E 00 01                               | nder>..
This is the unpacked spawn record right above the rat in my log. Is it because NPCs have more stuff? How does it know? Inquiring minds must knows!

Nope, that data is still packed. You have to unpack it to actually use it. The reason that the sizes are so different is because packing removes empty 0s, reducing the size. Rats are pretty simple so most of the fields are 0s, thus whenever the spawn is packed the 0s get removed and the size is tiny. Since the Mender is more complex and have more data in the fields, there are less 0s and when packed less of the data can be removed, which is why the mender packet is larger :P

LethalEncounter
Team: Zombie
Posts: 2717
Joined: Wed Jul 25, 2007 10:10 pm

Re: Packets: Reading and Understanding

Post by LethalEncounter » Wed Jan 21, 2009 4:01 pm

John Adams wrote:Awesome, let me absorb that a while and I'll give it a try. Is there some function existing in the parser that will simply dump whatever packet I send to it, in full? Or do I have to insert these blah's and dumppacket/printpackets as I find a section I want to learn about?
Not yet there isn't.

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Re: Packets: Reading and Understanding

Post by John Adams » Wed Jan 21, 2009 4:06 pm

Not to stray, but if we had a little simple exe "packetanalyzer" or something, we could pass the struct or opcode to as a param and it spits out the packed, unpacked and/or structured data... it would be like Christmas. Again. ;)

Maybe something I can fiddle with if you don't have time, or maybe Bion - my new Parser hero =D haha

Image
Retired
Posts: 251
Joined: Sun Oct 26, 2008 10:07 am

Re: Packets: Reading and Understanding

Post by Image » Wed Jan 21, 2009 4:41 pm

put it on that major feature list I will see if I can get to it sometime

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Re: Packets: Reading and Understanding

Post by John Adams » Thu Jan 22, 2009 12:00 pm

LethalEncounter wrote:First you need to turn it into an array so that you can use it:

Code: Select all

uchar blah[] = {0x6F,0x00,0x00,0x00,0xFF,0x62,0xF1,0x35,0x4C,0x07,0x22,0x5C,0xFF,0xC4
,0x96,0x40,0x99,0x09,0x9C,0x41,0xCF,0xDA,0xFF,0xCD,0xC1,0x61,0xDF,0x02,0xE0,0x46
,0xE0,0x46,0xFF,0x93,0x04,0x40,0x84,0xF8,0x3D,0xA1,0x41,0x50,0xB3,0xC1,0x70,0x40
,0x9D,0xFE,0x40,0x9E,0x74,0xD6,0x41,0x48,0x9C,0x02,0xC1,0x78,0x88,0x0B,0x0E,0xF1
,0x99,0x99,0x9A,0x0C,0xF9,0xFF,0xFF,0x3F,0x80,0x3E,0x83,0xFF,0xFF,0x98,0x01,0x03
,0x81,0x76,0x09,0x81,0x64,0x7F,0x7E,0x81,0x02,0x8E,0x01,0x01,0x01,0xC4,0xC4,0xFF
,0xFA,0xFF,0xFF,0xFF,0xFF,0xC4,0x97,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x68,0x81,0x0C
,0x20,0x8D,0x05,0x03,0xFF};
Question! How are you turning this into an array? Or are you saying you have to type all those hex values into an array format by hand? I don't think that's what you mean. Where's my LazyJAAutoArrayMaker() function? ;)

User avatar
Zcoretri
Team Member
Posts: 1642
Joined: Fri Jul 27, 2007 12:55 pm
Location: SoCal

Re: Packets: Reading and Understanding

Post by Zcoretri » Thu Jan 22, 2009 12:25 pm

Uh yeah...I have been inputting hex values by hand, very time consuming indeed. :(

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Re: Packets: Reading and Understanding

Post by John Adams » Thu Jan 22, 2009 1:46 pm

Ok let's pretend LE will say "no silly you just have to read the data into the unpack() function!", and let's say I did that using existing examples that are commented out. In processSpawnPackets, the final overload heh... I see a place where DumpPacket() is commented out, so I uncomment it and run a -spawn log. When it hits that dump, the "collect" packet looks like this:

Code: Select all

   0: 00 9E C2 04 00 FF FF 00 - 00 00 00 00 54 A5 F0 00  | ............T...
  16: 07 00 63 6F 6C 6C 65 63 - 74 00 00 00 40 00 56 3A  | ..collect...@.V:
  32: 6D BC 44 00 00 00 FF D8 - 7A 25 A9 10 A4 D8 FF E7  | m.D.....z%......
  48: D8 C2 79 C3 50 C3 83 43 - 69 07 81 01 19 C1 10 02  | ..y.P..Ci.......
  64: 11 C1 80 20 F9 FF FF 3F - 80 3F 83 FF FF 07 81 14  | ... ...?.?......
  80: 7F 7F 0F 8B 02 06 02 0D - FF FF FF FF 08 C4 08 C4  | ................
  96: AF FF FF FF FF FF 7F 7F - 7F 15 01 00 3F 00 00 00  | ............?...
 112: 00 00 00 00 00 00 00 00 - 00 00 06                 | ...........
which I now presume is "packed".

Later on down the line in that same function, I see this code:

Code: Select all

		spawnInfoPacketStruct = configReader.getStruct("WS_SpawnStruct", version);
		unpacked = new uchar[900];
		Unpack((uchar*)(*itr)->data.c_str() + currentPos, unpacked, 900, version);
		currentPos +=length+4;
		//DumpPacket(unpacked, 900);
and if I uncomment that DumpPacket(), which I assumed was going to be the unpacked data (but some whacky currentPos offset thingy going on which is I am sure the answer to the next question), my packet doesn't look well at all:

Code: Select all

   0: D8 A4 10 A9 25 7A D8 C3 - 50 C3 79 C2 D8 E7 69 43  | ....%z..P.y...iC
  16: 00 00 00 00 00 00 00 00 - 00 00 00 00 01 00 00 00  | ................
  32: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
  48: 00 00 00 00 00 00 00 00 - 00 00 00 00 02 00 00 00  | ................
  64: 00 00 10 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
  80: 00 00 00 00 20 00 00 00 - 00 00 80 3F 00 00 80 3F  | .... ......?...?
  96: FF FF FF FF 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 112: 14 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 128: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 144: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 160: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 176: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 192: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 208: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 224: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 240: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 256: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 272: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 288: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 304: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 320: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 336: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 352: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 368: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 384: 00 00 00 00 02 06 00 02 - 00 00 00 00 00 00 00 00  | ................
 400: 00 00 00 00 00 00 00 00 - C4 08 C4 08 FF FF FF FF  | ................
 416: FF FF FF 00 FF 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 432: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 448: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 464: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 480: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 496: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 512: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 528: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 544: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 560: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 576: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 592: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 608: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 624: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 640: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 656: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 672: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 688: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 704: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 720: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 736: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 752: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 768: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 784: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 800: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 816: 00 00 00 00 00 00 00 00 - CD CD CD CD CD CD CD CD  | ................
 832: CD CD CD CD CD CD CD CD - CD CD CD CD CD CD CD CD  | ................
 848: CD CD CD CD CD CD CD CD - CD CD CD CD CD CD CD CD  | ................
 864: CD CD CD CD CD CD CD CD - CD CD CD CD CD CD CD CD  | ................
 880: CD CD CD CD CD CD CD CD - CD CD CD CD CD CD CD CD  | ................
 896: CD CD CD CD                                        | ....
Oh, it's unpacked alright... but I think it's only a specific section. So I will mess with these unpack ideas and see if I can actually unpack AN ENTIRE SPAWN PACKET AT ONCE - which is what I need in order to learn this.

See, I need a 1:1 map laid out in plain english, like LE did with the previous post showing what those first few bytes of a packet are... I need that for every single element, or this will never make sense. Once I find one magical piece of data in here that maps to an actual struct value, I think I'll be in business! Cuz, even I can count. Forward and backward.

LE, my hero, I hope that you understand that while this is childs play and simple for you, to outsiders it is like brain surgery. :) Bion is obviously much smarter than me, cuz I think he gets it. Not me! Not yet. Still trying though.

LethalEncounter
Team: Zombie
Posts: 2717
Joined: Wed Jul 25, 2007 10:10 pm

Re: Packets: Reading and Understanding

Post by LethalEncounter » Thu Jan 22, 2009 3:24 pm

John Adams wrote:
LethalEncounter wrote:First you need to turn it into an array so that you can use it:

Code: Select all

uchar blah[] = {0x6F,0x00,0x00,0x00,0xFF,0x62,0xF1,0x35,0x4C,0x07,0x22,0x5C,0xFF,0xC4
,0x96,0x40,0x99,0x09,0x9C,0x41,0xCF,0xDA,0xFF,0xCD,0xC1,0x61,0xDF,0x02,0xE0,0x46
,0xE0,0x46,0xFF,0x93,0x04,0x40,0x84,0xF8,0x3D,0xA1,0x41,0x50,0xB3,0xC1,0x70,0x40
,0x9D,0xFE,0x40,0x9E,0x74,0xD6,0x41,0x48,0x9C,0x02,0xC1,0x78,0x88,0x0B,0x0E,0xF1
,0x99,0x99,0x9A,0x0C,0xF9,0xFF,0xFF,0x3F,0x80,0x3E,0x83,0xFF,0xFF,0x98,0x01,0x03
,0x81,0x76,0x09,0x81,0x64,0x7F,0x7E,0x81,0x02,0x8E,0x01,0x01,0x01,0xC4,0xC4,0xFF
,0xFA,0xFF,0xFF,0xFF,0xFF,0xC4,0x97,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x68,0x81,0x0C
,0x20,0x8D,0x05,0x03,0xFF};
Question! How are you turning this into an array? Or are you saying you have to type all those hex values into an array format by hand? I don't think that's what you mean. Where's my LazyJAAutoArrayMaker() function? ;)

I originally created a php function that did that, but it got lost and now I just use a macro on my logitech g15 keyboard to get rid of all the data except the hex values. I then do a find/replace for spaces and replace them with ,0x

That allows me to format a packet into an array in a few seconds.

LethalEncounter
Team: Zombie
Posts: 2717
Joined: Wed Jul 25, 2007 10:10 pm

Re: Packets: Reading and Understanding

Post by LethalEncounter » Thu Jan 22, 2009 3:35 pm

John Adams wrote: and if I uncomment that DumpPacket(), which I assumed was going to be the unpacked data (but some whacky currentPos offset thingy going on which is I am sure the answer to the next question), my packet doesn't look well at all:

Code: Select all

   0: D8 A4 10 A9 25 7A D8 C3 - 50 C3 79 C2 D8 E7 69 43  | ....%z..P.y...iC
  16: 00 00 00 00 00 00 00 00 - 00 00 00 00 01 00 00 00  | ................
  32: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
  48: 00 00 00 00 00 00 00 00 - 00 00 00 00 02 00 00 00  | ................
  64: 00 00 10 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
  80: 00 00 00 00 20 00 00 00 - 00 00 80 3F 00 00 80 3F  | .... ......?...?
  96: FF FF FF FF 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 112: 14 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 128: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 144: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 160: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 176: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 192: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 208: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 224: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 240: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 256: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 272: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 288: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 304: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 320: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 336: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 352: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 368: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 384: 00 00 00 00 02 06 00 02 - 00 00 00 00 00 00 00 00  | ................
 400: 00 00 00 00 00 00 00 00 - C4 08 C4 08 FF FF FF FF  | ................
 416: FF FF FF 00 FF 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 432: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 448: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 464: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 480: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 496: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 512: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 528: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 544: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 560: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 576: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 592: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 608: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 624: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 640: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 656: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 672: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 688: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 704: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 720: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 736: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 752: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 768: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 784: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 800: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 816: 00 00 00 00 00 00 00 00 - CD CD CD CD CD CD CD CD  | ................
 832: CD CD CD CD CD CD CD CD - CD CD CD CD CD CD CD CD  | ................
 848: CD CD CD CD CD CD CD CD - CD CD CD CD CD CD CD CD  | ................
 864: CD CD CD CD CD CD CD CD - CD CD CD CD CD CD CD CD  | ................
 880: CD CD CD CD CD CD CD CD - CD CD CD CD CD CD CD CD  | ................
 896: CD CD CD CD                                        | ....
That is the correct unpacked data for the entire spawn struct (minus the header and footer).

If you look at WS_SpawnStruct:

Code: Select all

<Struct Name="WS_SpawnStruct" ClientVersion="1">
<Data ElementName="position" Substruct="Substruct_SpawnPositionStruct" Size="1" />
<Data ElementName="vis" Substruct="Substruct_SpawnVisualizationInfoStruct" Size="1" />
<Data ElementName="info" Substruct="Substruct_SpawnInfoStruct" Size="1" />
</Struct>
See that position is actually a Substruct_SpawnPositionStruct struct, so lets look at that struct (for version 936):

Code: Select all

<Struct Name="Substruct_SpawnPositionStruct" ClientVersion="936" >
<Data ElementName="pos_grid_id" Type="int32" Size="1" />
<Data ElementName="pos_x" Type="float" Size="1" />
<Data ElementName="pos_y" Type="float" Size="1" />
<Data ElementName="pos_z" Type="float" Size="1" />
<Data ElementName="pos_unknown" Type="sint16" Size="3" />
<Data ElementName="pos_heading1" Type="sint16" Size="1" />
<Data ElementName="pos_heading2" Type="sint16" Size="1" />
<Data ElementName="pos_speed" Type="int16" Size="1" />
<Data ElementName="pos_state" Type="int16" Size="1" />
<Data ElementName="pos_unknown2" Type="int8" Size="6" />
<Data ElementName="pos_next_x" Type="float" Size="1" />
<Data ElementName="pos_next_y" Type="float" Size="1" />
<Data ElementName="pos_next_z" Type="float" Size="1" />
<Data ElementName="pos_x3" Type="float" Size="1" />
<Data ElementName="pos_y3" Type="float" Size="1" />
<Data ElementName="pos_z3" Type="float" Size="1" />
<Data ElementName="pos_movement_mode" Type="int8" Size="1" />
<Data ElementName="pos_unknown3b" Type="int8" Size="1" />
<Data ElementName="pos_unknown4" Type="int16" Size="2" />
<Data ElementName="pos_move_type" Type="int16" Size="1" />
<Data ElementName="pos_unknown6" Type="int16" Size="8" />
<Data ElementName="pos_collision_radius" Type="int16" Size="1" />
<Data ElementName="pos_size" Type="int16" Size="1" />
<Data ElementName="pos_size_ratio" Type="float" Size="1" />
<Data ElementName="pos_size_multiplier_ratio" Type="float" Size="1" />
<Data ElementName="pos_unknown10" Type="int16" Size="6" />
</Struct>
Now starting at position 0 of the dumped data from above (D8 A4 10 A9 or 0xA910A4D8) and assigning the values directly to the above struct gives you:

Code: Select all

Name: position_pos_grid_id_0    Index:  0       Type:  int32            Data:  2836440280
Name: position_pos_x_0          Index:  0       Type:  float            Data:  -432.954
Name: position_pos_y_0          Index:  0       Type:  float            Data:  -62.4407
Name: position_pos_z_0          Index:  0       Type:  float            Data:  233.906
Name: position_pos_unknown_0    Index:  0       Type:  sint16           Data:  00
Name: position_pos_unknown_0    Index:  1       Type:  sint16           Data:  00
Name: position_pos_unknown_0    Index:  2       Type:  sint16           Data:  00
Name: position_pos_heading1_0   Index:  0       Type:  sint16           Data:  00
Name: position_pos_heading2_0   Index:  0       Type:  sint16           Data:  00
Name: position_pos_speed_0      Index:  0       Type:  int16            Data:  00
Name: position_pos_state_0      Index:  0       Type:  int16            Data:  01
Name: position_pos_unknown2_0   Index:  0       Type:  int8             Data:  00
Name: position_pos_unknown2_0   Index:  1       Type:  int8             Data:  00
Name: position_pos_unknown2_0   Index:  2       Type:  int8             Data:  00
Name: position_pos_unknown2_0   Index:  3       Type:  int8             Data:  00
Name: position_pos_unknown2_0   Index:  4       Type:  int8             Data:  00
Name: position_pos_unknown2_0   Index:  5       Type:  int8             Data:  00
Name: position_pos_next_x_0     Index:  0       Type:  float            Data:  0
Name: position_pos_next_y_0     Index:  0       Type:  float            Data:  0
Name: position_pos_next_z_0     Index:  0       Type:  float            Data:  0
Name: position_pos_x3_0         Index:  0       Type:  float            Data:  0
Name: position_pos_y3_0         Index:  0       Type:  float            Data:  0
Name: position_pos_z3_0         Index:  0       Type:  float            Data:  0
Name: position_pos_movement_mode_0      Index:  0       Type:  int8             Data:  02
Name: position_pos_unknown3b_0          Index:  0       Type:  int8             Data:  00
Name: position_pos_unknown4_0   Index:  0       Type:  int16            Data:  00
Name: position_pos_unknown4_0   Index:  1       Type:  int16            Data:  00
Name: position_pos_move_type_0          Index:  0       Type:  int16            Data:  16
Name: position_pos_unknown6_0   Index:  0       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  1       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  2       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  3       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  4       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  5       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  6       Type:  int16            Data:  00
Name: position_pos_unknown6_0   Index:  7       Type:  int16            Data:  00
Name: position_pos_collision_radius_0   Index:  0       Type:  int16            Data:  32
Name: position_pos_size_0       Index:  0       Type:  int16            Data:  00
Name: position_pos_size_ratio_0         Index:  0       Type:  float            Data:  1
Name: position_pos_size_multiplier_ratio_0      Index:  0       Type:  float            Data:  1
Name: position_pos_unknown10_0          Index:  0       Type:  int16            Data:  65535
Name: position_pos_unknown10_0          Index:  1       Type:  int16            Data:  65535
Name: position_pos_unknown10_0          Index:  2       Type:  int16            Data:  00
Name: position_pos_unknown10_0          Index:  3       Type:  int16            Data:  00
Name: position_pos_unknown10_0          Index:  4       Type:  int16            Data:  00
Name: position_pos_unknown10_0          Index:  5       Type:  int16            Data:  00

If you are unsure about some values, use a hex editor. My personal favorite is Hex Workshop.

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Re: Packets: Reading and Understanding

Post by John Adams » Thu Jan 22, 2009 3:48 pm

Ah hah!! See? We're getting somewhere. So what started this whole parade of silly questions was the fact that pos_size = 0 for everything parsed using 944 logs, and presumeably 936 structs. What I am hoping to see clear-as-day here is that the value for pos_size is just not in the right position anymore thus being set to 0, instead of "9" like a typical village rat or shrumbler size.

So I will go run this on some data that I know should have a size value. I think even NPCs should have a size... it should never be 0, but 32 appears to be "normal" for everything I've played with. less than 32 for smaller, greater than for larger, of course.

Like our small crabs on the Queen's Colony with 0 set as size is the same size as if it were 32. So in order to make them actuall "a small shore crab" vs "a shore crab" vs "a large shore crab", I had to make them size 24, 28 and 32 respectively. But lately... everything is parsing as size 0 (32) so I dunno wtf is going on. /babble off

Image
Retired
Posts: 251
Joined: Sun Oct 26, 2008 10:07 am

Re: Packets: Reading and Understanding

Post by Image » Thu Jan 22, 2009 4:17 pm

I can make it in PHP I guess, if you wanted to do specific packets... Pasting 30 MB+ files to convert over a site sucks

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest