• Welcome to Valhalla Legends Archive.
 

D2GS Packet Research

Started by Ringo, June 02, 2005, 07:09 PM

Previous topic - Next topic
|

Ringo

Note; This research was done many years ago in a very short space of time.
- It has since been *refreshed* at 12th/jan/2010.



(Keep in mind my reserch was done in HC/SC ladder games)

So, Getting from the realm to game....

Responce to join request:
The last packet the realm sends you (with the game server info)
0000  15 00 04 03 00 C3 02 00 00 D5 F8 6A DB E2 BD C0    ...........j....
0010  0C 00 00 00 00                                     .....

15 00 - packet lengh
04 - Packet ID (MCP_JOINGAME)
03 00 - Request ID
C3 02 - D2GS Token
00 00 - 0x00
D5 F8 6A DB - D2GS IP
E2 BD C0 0C - D2GS Hash
00 00 00 00 - Result


Once connected to the game server, you should receve this:

S > C
AF 01                                              ..

In the above packets responce you will need to send some logon infomation to the game server.
The packet header is as follows for sending and recving(decompressed) packets:

(BYTE) Packet ID
(VOID) Data

The lengh of the packet is decided apone the packet ID and some/many packets have multiple formats/lenghs (this can be obtained from inside data values and in rare case's, inside packet lengh bytes)


As for sending logon info to the server:

C > S
68 D3 B0 B5 2C D9 03 04 0B 00 00 00 50 CC 5D ED
B6 19 A5 91 00 72 74 74 74 68 65 61 68 65 61 68
65 61 68 72 00

Clicky here and read the 1st packet in the list for infomation on sending this packet



Then if u get this packet its all good!
it means the game server has accepted you.
If u never recv this, it normaly can mean a few things, like failed to join game or say for example your proceeding data after ur char name wasnt right for your char)

S > C
02 5C                                              .\


Now the above packet has been recv, this packet should be sent to the server to enter the game enviroment.

C > S
6B                                                 k

After you have sent this, the server should then send you some very large clumped packets. (All the game infomation about you, other players etc)
You should notice that the large packets 1st byte does not match that of the packets lengh.
This is because most uncompressed packets have a lengh as the 1st byte.
This limits it to 240 as anything above that i used with a differnt method to obtain the uncompressed packets lengh (for decompression).
(Every packet from the server should be decompressed after u have sent this byte)
As for splitting the packets up, this is a matter of ones persional opinion, but you may want to keep chucking the clump of data back through ur parser, untill it comes to a unknown packet or parse's each message in the clump. But be warned, any bugs in your packet handlers will mess your whole parser up.












[size=8] C > S[/size] can be found here





[size=8]S > C[/size] - decompressed


0x01, Lengh=9, D2GS_SETUP
01 00 04 00 30 00 01 01 00
(BYTE) Difficulty (0x00=N, 0x01=NM, 0x02=H)
(BYTE) 0x04
(BYTE) Difficulty/Core Flag (0x08=HC, 0x10=NM, 0x20=HELL)
(WORD) Ladder/Expo Flag (0x10=LOD, 0x20=Ladder)
(BYTE) Expo (0x00=classic, 0x01=LOD)
(WORD) Ladder (0x00=No, 0x01=Yes)

State's the game type when entering a game.

0x02, Lengh=1, D2GS_0x02
02
Blank.

This packet only gets sent in the game login after 0x01 (in responce to clients 0x68 login packet)
Following this, the client will send 0x6B to enter the game.

0x03, Lengh=12, D2GS_SEED
03 04 8E DC C2 5A 67 00 8A 3F 23 B8
(BYTE) Act (0 based)
(DWORD) Seed 1
(WORD) Area ID
(DWORD) Seed 2

Used by the client to generat the map and derive what graphic/collision data to apply to an area of the map un/asigned via S>C 0x08/0x07.
Iirc, the 1st seed is used for map generation, the 2nd for NPC and general object, etc, asignment.

0x04, Lengh=1, D2GS_ENTERGAME
04
Blank

Notifys you that you have now enterd the game.

0x05, Lengh=1, D2GS_MOVEACT
05
Blank

Notifys you that you have now moved act's.

0x06, Lengh=1, D2GS_BOOT
06
Blank

Notifys you that the server has booted you (and most likely everyone else) from the game.

0x07, Lengh=6, D2GS_MAPADD
07 C0 04 A8 03 01
(WORD) Floor Cell X
(WORD) Floor Cell Y
(BYTE) Area ID

X and Y will not match up to the X and Y in witch you stand, this packet is for notifying D2 what floor file to load.
This is normal done in 4 sections at a time.

0x08, Lengh=6, D2GS_MAPREM
08 D1 04 9E 03 01
(WORD) Floor Cell X
(WORD) Floor Cell Y
(BYTE) Area ID

Speficys where to remove floor sections from the screen. (removes above, 0x07)

0x09, Lengh=11, D2GS_DOORASIGN
09 05 XX XX XX XX 04 5D 1D 9C 13
(BYTE) Entity's Type
(DWORD) Entity's ID
(BYTE) Side
(WORD) X
(WORD) Y

A door to another area has just come into you range of view.
The Side will be 0x04 when you get with in a screens distance from it, and the ID will be specifying the ID for the door/entity on the other* side. Other wise it will be specifying the ID to the door for the area you are on.

0x0A, Lengh=6, D2GS_LOSTSIGHT
0A 01 XX XX XX XX
(BYTE) Entity's Type
(DWORD) Entity's ID

An entity has left your range of view.

0x0B, Lengh=6, D2GS_0x0B
0B 00 XX XX XX XX
(BYTE) Entity's Type
(DWORD) Entity's ID

Sent when entering a game, with in the join game data/block.
Always seen to be a Player, belonging to you, the recving/joining client.
None the less, A very important packet for the join process.

0x0C, Lengh=9, D2GS_SHOWDMG
0C 01 XX XX XX XX 13 01 49
(BYTE) Entity's Type
(DWORD) Entity's ID
(BYTE) Effect/State
(BYTE) SFX
(BYTE) Life%

An Entity has lost some life and maybe changed animation states.


0x0D, Lengh=13, D2GS_ACTIONEFFECT
0D 00 XX XX XX XX 07 67 16 D8 15 00 5D
(BYTE) Entity's Type
(DWORD) Entity's ID
(BYTE) Effect/State
(WORD) Location X
(WORD) Location Y
(BYTE) Life%
(BITS[4]) State Graphic Code
(BITS[4]) State Sound Code

An Entity has a new effect.

0x0E, Lengh=12, D2GS_OBJECTSTATE
0E 02 XX XX XX XX 03 01 02 00 00 00
(BYTE) Entity's Type
(DWORD) Entity's ID
(BYTE) 0x03
(BYTE) Boolean (0x00=cant change back, 0x01 can change)
(DWORD) Entity's State

Notifys you of an object's state, such as a shrine, or a WP being active/inactive.
Note: Many differnt objects have differnt Entity state values, and they all mean differnt things depending on the object.

0x0F, Lengh=16, D2GS_ENTITYMOVE
0F 00 XX XX XX XX 17 3E 13 4B 16 00 40 13 45 16
(BYTE) Entity's Type
(DWORD) Entity's ID
(BYTE) Movment Type (0x20=knocked back, 0x17=Run, 0x01=Walk, etc)
(WORD) Going to Location X
(WORD) Going to Location Y
(BYTE) 0x00 (if not knockback)
(WORD) Current Location X
(WORD) Current Location Y

Notifys you that an entity (normaly a player) is moving to a new location.

0x10, Lengh=16, D2GS_ENTITYTOENTITY
10 00 XX XX XX XX 18 01 $$ $$ $$ $$ 65 15 6C 12
(BYTE) Entity's Type
(DWORD) Entity's ID
(BYTE) Movment Type (0x18=Run, 0x00=Walk, etc)
(BYTE) Entity's Type (being moved to)
(DWORD) Entity's ID (being moved to)
(WORD) Location X
(WORD) Location Y

Notify you that an Entity (normaly a player) is moving towards another entity.

0x11, Lengh=8, D2GS_REPORTKILL
11 00 XX XX XX XX 98 00
(BYTE) Entity's Type
(DWORD) Entity's ID
(WORD) 0x98 for player, 0x97 for merc

The useage of this packet is unknown.
But what is known about it, is that it's sent to a client who "witness's" a kill from a player or merc.
This doesnt seem to include summoned monsters.
It does include your own merc.

0x15, Lengh=11, D2GS_REASIGN
15 01 XX XX XX XX 20 14 83 10 01
(BYTE) Entity's Type
(DWORD) Entity's ID
(WORD) Location X
(WORD) Location Y
(BYTE) Reasign Boolean (0x01=true, 0x00=false)

Notifys you that, you or another player is at a location.
This packet is used when a player teleports, notifying you that both them and there merc and summon's have been reasigned to a new location.
This packet also notifys you of your X and Y when joining a game.
If reasign is false (0x00) then this packet should be ignored?.

0x18, Lengh=15, D2GS_POT
(BITS[15]) Life
(BITS[15]) Mana
(BITS[15]) Stamina
(BITS[15]) If > 0 Then you're Characters X
(BITS[1]) Unknown
(BITS[15]) If > 0 Then you're Characters Y
(BITS[36] Unknown

Notifys you're of you're current life, mana, stamina and location.
Format very much like S>C 0x95, plus a few extra bytes.
Relates to drinking potions.

0x19, Lengh=2, D2GS_BYTETOGOLDBANK
19 1B
(BYTE) Gold

A small amount of Gold has been added to your gold bank. (inventory)

0x1A, Lengh=2, D2GS_BYTETOEXP
1A 21
(BYTE) +Exp

You have gained experience.

0x1B, Lengh=3, D2GS_WORDTOEXP
1B 5F 02
(WORD) +Exp

You have gained more experience.

0x1C, Lengh=5, D2GS_DWORDTOEXP
1C C4 10 00 0F
(DWORD) +Exp

You have gained even more experience.

0x1D, Lengh=3, D2GS_BYTEATTRIBUTE
1D 03 DC
(BYTE) Attribute Code
(BYTE) Attribute Rating

Notifys you of base attributes.

0x1E, Lengh=4, D2GS_WORDATTRIBUTE
1E 09 00 24
(BYTE) Attribute Code
(WORD) Attribute Rating

Notifys you of base attributes.

0x1F, Lengh=6, D2GS_DWORDATTRIBUTE
1F 0F 64 E8 0C 00
(BYTE) Attribute Code
(DWORD) Attribute Rating

Notifys you of base attributes.

0x20, Lengh=10, D2GS_PLAYERATTRIBUTE
20 XX XX XX XX 02 1A 00 00 00
(DWORD) Player ID (that the stats points relates to)
(BYTE) Attribute Code
(DWORD) Attribute Rating

Notifys you of somones stats points/base attributes.

0x22, Lengh=12, D2GS_SKILLBOOKCOUNT
22 00 26 XX XX XX XX DC 00 10 1F 00
(BYTE) Entity's Type?
(BYTE) 0x26
(DWORD) Entity's ID
(WORD) Skill Code
(BYTE) Stats Amount
(WORD) Unknown

Notifys you of a skill's charge/count.
For example if you have a scroll book, you will be notifyed of how many scrolls are in the book, etc.
IIRC, The entity is noramly always you're own character.

0x23, Lengh=13, D2GS_SKILLSELECT
23 00 XX XX XX XX 00 44 00 FF FF FF FF
(BYTE) Entity's Type?
(DWORD) Entity's ID
(BYTE) Skill Side (0x00=Right, 0x01=Left)
(WORD) Skill Code
(DWORD) Unknown (-1 in HC, 0 in SC)

Notifys you when another player selects a new skill with in your range of view.

0x26, Lengh=10+n, D2GS_CHAT
26 01 00 02 00 00 00 00 00 05 (Character Name) 00 (Message) 00
(BYTE) Chat Type
(BYTE) Unknown
(BYTE) Entity's Type (if not over head, then 0x02?)
(DWORD) Entity's ID (if not over head, then 0x00)
(BYTE) Unknown
(BYTE) Unknown (0x05 chat, 0x01 recv-wisp)
(STRING) Character Name (Blank if over head)
(STRING) Message

Chat Type's;
0x01 = Open Chat
0x02 = @Recv Wisper
0x05 = Over Head Chat
0x06 = @Sent Wisper
Note; If a shrine displays an over head message (and they can/do), the message will contain a 4 character number;
"3684" will render as "You feel refreshed", etc.

0x27, Lengh=40, D2GS_NPCINTERACT
Lengh = 40
(BYTE) Entity's Type
(DWORD) Entity's ID
(BYTES[34]) Unknown (Un-Researched)

Notifys you that you have a merc, and the mercs ID.
Also notify's you of NPC interaction, etc.

0x28, Lengh=103, D2GS_QUESTTREE
(DWORD) Unknown (maybe a reassion id)
(WORD) Unknown (0x00)
(WORD) Unknown (Seen 0x00, 0x01)
For each quest:
_(BYTE) Flag 1
_(BYTE) Flag 2
(VOID) remaining extra mumbojumbo

Notifys you of thee game's/you're quest tree status.
The quest order seems to be:
1 = A1 Q1 (Den of evil)
2 = A1 Q2 (Kill blood raven)
3 = A1 Q5 (Kill blacksmith)
4 = A1 Q3 (Save cain)
5 = Unknown?
6 = A1 Q6 (Kill Andy)
7 = ACT2 ENABLER?
8 = Unknown
9 = A2 Q1 (Sewers)
10 = A2 Q2
11 = A2 Q3
12 = A2 Q4
13 = A2 Q5
14 = A2 Q6
15 = ACT3 ENABLER?
16 = Unknown
17 = A3 Q4
18 = A3 Q3
19 = A3 Q2
20 = A3 Q1
21 = A3 Q5 (travi)
22 = A3 Q6 (mep)
23 = ACT4 ENABLER?
24 = Unknown
25 = A4 Q1
26 = A4 Q3 (A5 Enabler)
27 = A4 Q2
23 = Unknown
24 = Unknown
25 = Unknown
26 = Unknown
27 = Unknown
28 = Unknown
29 = Unknown
30 = A5 Q1
31 = A5 Q2
32 = A5 Q3
33 = A5 Q4
34 = A5 Q5 (Ancients)
35 = A5 Q6


0x2C, Lengh=8, D2GS_SOUND
2C 00 XX XX XX XX 1A 00
(BYTE) Entity's Type
(DWORD) Entity's ID
(WORD) Speech ID

This packet is fairly common thorugh out the game, and is used to trigger a sound file to be played.
Player (Entity 0x00) Speech ID's;
19 00 = help / help me
1A 00 = follow me / come on!
1B 00 = this is urs / this is for you
1C 00 = thnks / thank you
1D 00 = ahh oops / forgive me
1E 00 = bye / Good Bye
1F 00 = Die / time to die
20 00  = Run / Run away

0x3F, Lengh=8, D2GS_ITEMRUNOUT
3F FF 1F 8D 95 15 FF FF
(BYTE) 0xFF
(DWORD) Item/Entity's ID
(WORD) 0xFFFF

Notifys you that you have just interacted with an item and its ran out?
Also notifys you when you have opened a scroll, etc.

0x42, Lengh=6, D2GS_MOUSECLEAR
42 00 C0 2A 19 B5
(BYTE) Entity's Type
(DWORD) Entity's ID

Notifys you that your mouse/item buffer is now clear/empty.

0x47 & 0x48, Lengh=11, D2GS_0x47/0x48
47 00 00 91 8F F7 BA 00 00 00 00
48 00 00 C8 A7 7B CD 00 00 00 00
(WORD) Unknown
(DWORD) Entity's ID
(DWORD) Unknown

These 2 packets can almost always be seen together, and 0x48 will always follow 0x47 and both contain the same ID field as each other.
They can also be recv in large rows based on the number of ID's a client would need in the cause of an event/update or distribution of infomation.
*shrugs*

0x4C, Lengh=16, D2GS_ENTITYATTACKENTITY
4C 00 XX XX XX XX 00 00 01 01 DC BF 5B 31 00 00
(BYTE) Entity's Type (Issueing attack)
(DWORD) Entity's ID (Issueing attack)
(WORD) Attack Method/Skill Code
(BYTE) Skill Level
(BYTE) Entity's Type (Being Attacked)
(DWORD) Entity's ID (Being Attacked)
(WORD) 0x00

Notifys you that a entity is attacking another entity.
This normaly covers range attacks when it comes to NPC's, but should cover all players other than your self.
This can also cover objects, which display state change FX, such as shrines. (need to look into that)

0x4D, Lengh=17, D2GS_ENTITYATTACKLOCATION - also relations with shrines
4D 00 XX XX XX XX 28 00 00 00 09 B7 16 62 11 00 00
(BYTE) Entity's Type (Issueing attack)
(DWORD) Entity's ID (Issueing attack)
(WORD) Skill Code
(WORD) 0x00
(BYTE) Skill Level?
(WORD) Attack/Cast Location X
(WORD) Attack/Cast Location Y
(WORD) 0x00

Notifys you that an entity has attacked/cast at a location.
This has also been seen in relation to shrines, when interacted with.

0x51, Lengh=14, D2GS_OBJECTASIGNMENT
51 02 XX XX XX XX 25 00 59 16 A0 15 02 00
(BYTE) Entity's Type (normaly always objects)
(DWORD) Entity's ID
(WORD) Entity's Unique Code/Class
(WORD) Location X
(WORD) Location Y
(BYTE) State (0x00=no &HE will follow, 0x02=expect a &HE)
(BYTE) Interaction Conditions

State's:
0x00 State = Objects state can be changed
0x02 State = Objects state can not be changed with interaction
Interaction's:
0x00 = Covers things like general objects/chests etc
0x01 = Refreshing Shrine
0x02 = Health Shrine
0x05 = Chest will catch fire
0x08 = Chest has a mommy inside
0x0D = Mana Recharge Shrine
0x0E = Stamina Shrine
0x0F = Exp Shrine
0x13 = Fire Shrine
0x80 = Locked chest (state should be 0x00)

0x53, Lengh=10, D2GS_GAMEREFRESH
53 02 00 00 00 00 44 00 00 00
(DWORD) Possible Player Slot Number - (used as party number for a player)
(BYTE) Boolean - (0x00=false, 0x80=true?)
(DWORD) Some kind of count

You should recv this packet every 1 min average and it will be followed by a 0x47 and a 0x48 packet for each player with in your 4 screen view.
The last DWORD seems to count up slowly and goes back to 00 after 0xA0(ish) and the boolean BYTE should differ from 0x00 and 0x80 every time you recv this packet.
At least, that was the case whe looked at.

0x59, Lengh=28, D2GS_PLAYERASIGN
59 XX XX XX XX 04 (Char Name) 00 00 00 00 00
(DWORD) Player's ID
(BYTE) Character Class
(BYTE[16]) Character Name
(WORD) Location X
(WORD) Location Y

Notifys you that a player is standing/coming into your range of view. (4 screens, aprox)
The X and Y locations in this packet will be null if it is for the recving player(you).

0x5A, Lengh=40, D2GS_EVENTNOTIFY
(BYTE) Event
(BYTE) Action (always 0x04, unless stated other wise)
(DWORD) Entity's ID
(BYTE) Entity's Type
(BYTE[16]) A
(BYTE[16]) B

Notifys you of events through out the game, that a D2 client would display, such as relation changes (hostile, loot etc) and players joining/leaving.
Events;
0x00="A-B Dropped Due To Timeout" (A=CharName, B=AccName)
0x01="A-B Dropped Due To Errors" (A=CharName, B=AccName)
0x02="A-B Joined The Game" (A=CharName, B=AccName)
0x03="A-B Quits The Game" (A=CharName, B=AccName)
0x04="A Is Not In The Game" (from use of @wisper, action should be 0)
0x05="A Is Not Logged In The Game" (action should be 0)
0x06="A Was Slain By...type"
- If Type Player: ID=class, B=Player who slained A.
- If Type NPC: ID=Class, [optional] B=text-number of unique boss ID, ie; pindle.
- Otherwise: ID=Class of entity that slained A.
0x07=Player Relation.. ID=Player's ID who changed relation.
- Actions: 0x00=Nutural, 0x02=Teaming, 0x04=Friendly, 0x08=Nasty, 0x09=Remove
- Type's:
-- 0x01=[friendly] ID has Give Loot
-- 0x02=[friendly] ID has Give Loot?
-- 0x03=[nasty] ID has gone Hostile
-- 0x04=[nutural] ID is no longer Hostile
-- 0x05=[teaming] ID Invites you to their party
-- 0x06=[remove] ID cancels party invite
-- 0x07=[teaming] ID is now in you're party
-- 0x08=[teaming] You're now in ID's party
-- 0x09=[remove] ID has left you're party
-- 0x0B=[remove] ID has removed loot
0x08="A Is Busy" (when clicking for trade)
0x09="Wait A Short Time Before Going Into Trade" (A=CharName)
0x0A="Item's In Box" (Cube is full or unacessable in current state)
0x0D="A Is Not Listening To You" (@Wisper responce, they have you squelched)
0x0E="Not Enough Mana" (action=1, ID=Player's ID who lacks the mana)
0x0F="Realm Is Going Down In ID Mins" (ID=number of mins)
0x10="You must wait awhile before hostiling A"
0x11="ID Soj's Have Been Sold" (ID=soj count)
0x12="Diablo Walks The Earth" (ID=soj count?)

0x5B, Lengh=36, D2GS_PLAYERINGAME
5B 24 00 XX XX XX XX 01 (Char Name) 00 01 00 FF FF 00 00 00 00 00 00 00 00
(WORD) Packet Lengh
(DWORD) Player's ID
(BYTE) Player's Class
(BYTE[16]) Character's Name
(WORD) Character's Level
(WORD) Party Number (0xFFFF = none)
(VOID) Null-Padding

Notifys you that a player is in the game and will only send you this packet once for each player present in the game.
This will also be sent to you when another player has joined the game as wall as being followed by a 0x5A packet type 0x02 for notification.

0x5C, Lengh=5, D2GS_PLAYERQUITGAME
5C XX XX XX XX
(DWORD) Player's ID

Notifys you that a player has exit'ed the game -- this make's it final.

0x60, Lengh=7, D2GS_TELESTATE
60 03 05 XX XX XX XX
(BYTE) Teleport's State
(BYTE) Area ID (where the portal can take you)
(DWORD) Teleport's ID (your side)

Notifys you of a teleports state and where it takes you to.
This will cover all teleports, including "public" static teleports. (like in TP-home shrines)
The entity ID will be the teleports asigned ID, and should already be asigned from S>C 0x51.
State's:
0x00 = Unused Town Area
0x03 = Unused Area
0x05 = Used Town Area
0x07 = Used Area

0x63, Lengh=21, D2GS_TELESTATE
63 XX XX XX XX 02 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00
(DWORD) Object/Waypoint's ID
(WORD) 0x0102
(BYTE[14]) Waypoint avaliblity flag(s)

Notifys you of your avalible waypoints, in responce to an interaction with a waypoint object.
Each bit in flag state's the avaliblity of the given waypoint, in waypoint order.
So for example;
BIT[1]=Rogue Encampment
BIT[2]=Cold Plains
BIT[3]=Stony Fields
BIT[4]=Dark Wood
BIT[5]=Black Marsh
BIT[6]=Outer Cloister
BIT[7]=Jail Level 1
BIT[8]=Inner Cloister
BIT[9]=CataCombs Level 2
..And so on, etc etc..

0x65, Lengh=7, D2GS_KILLCOUNT
65 XX XX XX XX 00 00
(DWORD) Entity's ID
(WORD) Kill Count

Notifys you of your own, and other players kill count on joining the game.
You will continue to get one of these everytime your self or another player kills somthing with on your range of view.

0x67, Lengh=16, D2GS_NPCMOVE
67 XX XX XX XX 01 87 11 0A 12 01 00 0D 46 00 05
(DWORD) NPC/Entity's ID
(BYTE) Movment Type (0x01=walk, 0x14=knockback, 0x17=run)
(WORD) Moving To X
(WORD) Moving To Y
(WORD) 0x01
(DWORD) Flag

Notifys you that a NPC (entity 1) is moving to a new location.

0x68, Lengh=21, D2GS_NPCTOTARGET
68 1B AE FF CD 18 3B 12 02 12 00 3E 32 6B 2E 01 00 0D 46 00 05
(DWORD) NPC/Entity's ID
(BYTE) Movment Type (0x00 = walk, 0x18=run, etc)
(WORD) Location X
(WORD) Location Y
(BYTE) Entity's Type (Target)
(DWORD) Entity's ID (Target)
(WORD) 0x01
(DWORD) Flag

Notifys you that a NPC (entity 1) is moving towards a target.

0x69, Lengh=12, D2GS_NPCSTATEASIGN
69 XX XX XX XX 06 3E 14 71 12 5C 03
(DWORD) NPC/Entity's ID
(BYTE) NPC's State/Effect
(WORD) Location X
(WORD) Location Y
(BYTE) Life%
(BYTE) Unknown - (might be Area ID)

Notifys you that a computer is alive/dieing/dead.

0x6B, Lengh=16, D2GS_NPCACTION
6B XX XX XX XX 0C 00 00 00 00 00 00 53 11 03 12
(DWORD) NPC/Entity's ID
(BYTE) Action Type
(DWORD) 0x00
(DWORD) 0x00
(WORD) X
(WORD) Y

Notifys you that a NPC has done an action at a location.
This will normaly be things like an NPC doing an anti idle of some kind, as well as when a summon'ed NPC is raised etc.
A few action type's;
Warriv: 0x0C = has a strech
Charsi: 0x0C = Cast/Hit a wepon

0x6C, Lengh=16, D2GS_NPCATTACK
6C XX XX XX XX 10 00 3E 32 6B 2E 00 4A 12 13 12
(DWORD) NPC/Entity's ID
(WORD) Skill Code/Attack method (Varys per NPC)
(DWORD) Entity's ID (being attacked)
(BYTE) Entity's Type (being attacked)
(WORD) X
(WORD) Y

Notifys you that a NPC (entity 1) is attacking a target.

0x6D, Lengh=10, D2GS_NPCSTOP
6D XX XX XX XX B1 11 02 12 80
(DWORD) NPC/Entity's ID
(WORD) Location X
(WORD) Location Y
(BYTE) Life%

Notifys you that a NPC has got to and stoped at its destination.

0x75, Lengh=13, D2GS_ABOUTPLAYER
75 XX XX XX XX FF FF 02 00 00 00 00 00   
(DWORD) Player/Entity's ID
(WORD) Party Number (0xFFFF = none)
(WORD) Character level
(WORD) Relationship Flag (To This Player)
(WORD) Player Is In Your Party (0=false, 1=true)

Notifys you of player updates, such as level up.

0x76, Lengh=6, D2GS_OVERHEADCLEAR
76 00 XX XX XX XX
(BYTE) Entity's Type
(DWORD) Entity's ID

Notifys you that a player/com/object is no longer displaying an overhead chat event.

0x77, Lengh=2, D2GS_TRADE
77 01
(BYTE) Request ID

Request ID's:
0x01 = A Player Wants To Trade
0x05 = A Player Has Press'd their 'Accept' button
0x06 = No Accept Buttons Can Be Clicked
0x09 = You Dont Have Room To Accept The Items
0x0C = A Player Cancels Trade
0x0D = You Have Accepted/Recved some items
0x0E = The accept Button Has Been Disabled
0x0F = The accept Button Has Been Re-enabled

0x78, Lengh=21, D2GS_WHOTRADE
78 (Char Name) 00 AB 38 71 44
(BYTE[16]) Character Name (Of the player you are trading with)
(DWORD) Player/Entity's ID (Of the player you are trading with)

Notifys you that your now in trade mode with another player.

0x79, Lengh=6, D2GS_GOLDTRADE
79 00 00 00 00 00
(BYTE) Verifyed (0x00=false, 0x01=true)
(DWORD) Trading Gold

Notify's you how much gold the other player has put in the trade window, for trade.

0x7A, Lengh=13, D2GS_SUMMONLOG
7A 01 04 6B 01 19 AD 0C 20 XX XX XX XX
(BYTE) Action (0x00=Remove, 0x01=Add)
(BYTE) Skill number (in skill tree)
(WORD) Summoned/Entity's Unique Code/Class
(DWORD) Player ID (The summoned relates to)
(DWORD) Summoned ID

Notifys you that a player has summoned/unsummoned a helper.
This does NOT include mercs, and when removing, expect the same packet to be sent 3 times in a row.
You will also be expected to keep track of summon's for players who are anywhere in the game.

0x7F, Lengh=10, D2GS_PARTYUPDATE
7F 01 1E 00 A8 B1 FE 60 02 00
(BYTE) Entity's Type
(WORD) Life %
(DWORD) Entity's ID
(WORD) Area ID

Notifys you that a party number, merc or summoned helper's info has changed.
For players this will normaly cover changeing areas, or life% changes.
For mercs/summons this will normaly only cover life% changes.

0x81, Lengh=20, D2GS_MERCOWNER
81 07 52 01 XX XX XX XX $$ $$ $$ $$ 57 85 E5 B1 FB 03 00 00
(BYTE) Unknown - 0x07
(BYTE) Unknown - 0x52
(BYTE) Entity Type?
(DWORD) Player/Entity's ID
(DWORD) Merc/Entity's ID
(DWORD) Unknown (Entity ID of some kind?)
(DWORD) Unknown

Notifys you that you own a merc and that said merc is alive.
You will recv this for your merc on joining the game and on hireing a merc to say that "its alive".
This will also notify you of joining player's merc's.

0x82, Lengh=29, D2GS_TELEOWNER
82 E4 B7 10 30 (Char Name) 00 21 26 83 53 42 8C 06 A7
(DWORD) Player/Entity's ID (Who is the TP owner)
(BYTE[16]) Character Name
(DWORD) Teleport's ID Your Side
(DWORD) Teleport's ID Other Side

Notifys you that somone owns a teleport.
The owner ID will be for example, the player who it belongs to.
Your side will be refering to the entity ID found in 0x60 Teleport state.
Other side will be the ID of the teleport on the area where it takes you.
(Each teleport has a twin)

0x89, Lengh=2, D2GS_QUESTEVENT
89 0D
(BYTE) Event ID

Notifys you that a quest has just been changed/under gone an event.

0x8A, Lengh=6, D2GS_ENTITYREQUESTCHAT
8A 01 XX XX XX XX
(BYTE) Entity's Type
(DWORD) Entity's ID

Notifys you that an entity (normaly always a NPC) would like to talk to you.
This will normaly be a NPC wanting to talk about a quest.

0x8B, Lengh=6, D2GS_PARTYINVITESTATUS
8B XX XX XX XX 02
(DWORD) Player/Entity's ID
(BYTE) Relatioin Status

Notifys you of a party status change.

0x8C, Lengh=11, D2GS_PLAYERRELATIONSHIP
8C 1B B1 2E 14 36 A2 5D 36 08 00
(DWORD) Player/Entity's 1 ID
(DWORD) Player/Entity's 2 ID
(WORD) Relationship Flag (Entity 1's Relationship With Entity 2)

Notifys you of relation changes between all ingame players.

0x8D, Lengh=7, D2GS_PARTYNUMBER
8D CB 20 0D A4 03 00
(DWORD) Player/Entity's ID
(WORD) Party Number (0xFFFF = none)

Notifys you of whos in whos party.
Party numbers should* range from 0 to 7.

0x8E, Lengh=10, D2GS_CORPSEASIGN
8E 01 CD 82 5D 88 B3 30 17 6A
(BYTE) Event (0=Remove, 1=Add)
(DWORD) Player/Entity's ID
(DWORD) Corpse/Entity's ID

Notifys you that a player is the owner of a corpse.
This is because inview corses will look like a new player, so this packet is to asign them to it before hand.

0x8F, Lengh=33, D2GS_PONG
(DWORD[8]) 0x00
This is a responce to sending a 0x6D ping.
Used to calculate the current latency between client and server.

0x90, Lengh=13, D2GS_PARTYPULSE
90 XX XX XX XX 7D 12 00 00 43 16 00 00
(DWORD) Player/Entity's ID
(DWORD) Mini Map Location X
(DWORD) Mini Map Location Y

Notifys you if inparty players mini map location.
This is sent for each player in your party every second, no matter where or what act they are in.

0x94, Lengh=6+n, D2GS_SKILLLOG
94 08 XX XX XX XX 00 00 01 02 00 01 01 00 01 D9 00 01 DA 00 01 DB 00 01 DC 00 01 03 00 01
(BYTE) Number of skills in this packet (that your character has upgraded)
(DWORD) Player/Entity's ID
~ For Each Skill Upgraded ~
(WORD) Skill Code
(BYTE) Skill Level

Notifys you of you're current upgraded and avalible skills.

0x95, Lengh=13, D2GS_RESOURCES
95 09 87 60 C1 9B 00 00 00 00 00 00 00
(BITS[15]) Life
(BITS[15]) Mana
(BITS[15]) Stamina
(BITS[15]) If > 0 Then you're Characters X
(BITS[1]) Unknown
(BITS[15]) If > 0 Then you're Characters Y
(BITS[20] Unknown

Notifys you're of you're current life, mana, stamina and location.

0x96, Lengh=9, D2GS_WALKVERIFY
96 4A 00 A8 09 2D 0B 00 00
(BITS[15]) Stamina
(BITS[15]) Location X
(BITS[1]) Unknown
(BITS[15]) Location Y
(BITS[18]) Unknown

Notifys you that your moving/made it to a new location.
This should be handled as desynq detection, rather than location asignment.

0x97, Lengh=1, D2GS_WEPONSWITCH
97
Blank

Notifys you that you were successfull switching you're wepons around.

0x9E, Lengh=7, D2GS_MERCATTRIBUTEBYTE
9E 00 37 00 00 00 B6
(BYTE) Attribute Code
(DWORD) Merc/Entity's ID
(BYTE) Attribute Amount

Asign stats to a merc, such as; max HP, str, dex etc.

0x9F, Lengh=8, D2GS_MERCATTRIBUTEWORD
9F 1F 37 00 00 00 8F 04
(BYTE) Attribute Code
(DWORD) Merc/Entity's ID
(WORD) Attribute Amount

Asign stats to a merc.

0xA0, Lengh=10, D2GS_MERCATTRIBUTEDWORD
A0 0D 37 00 00 00 4C 89 D0 04
(BYTE) Attribute Code
(DWORD) Merc/Entity's ID
(DWORD) Attribute Amount

Asign stats to a merc.

0xA1, Lengh=7, D2GS_MERCATTRIADDBYTE
A1 0D A0 0E 74 36 02
(BYTE) Attribute Code
(DWORD) Merc/Entity's ID
(DWORD) Attribute Amount (To Add onto Existing Amount)

Add to merc's exsting stats.

0xA2, Lengh=8, D2GS_MERCATTRIADDWORD
A2 0D A0 0E 74 36 8E 02
(BYTE) Attribute Code
(DWORD) Merc/Entity's ID
(WORD) Attribute Amount (To Add onto Existing Amount)

Add to merc's exsting stats.

0xA4, Lengh=3, D2GS_BALLSPAWN
A4 69 00
(WORD) NPC Unique Code/Class (Being Spawned)

Notifys you that you have triggerd baal to laugh and start spawning the next set of NPC's.
The NPC code will specify which NPC's are being summoned next.

0xA7, Lengh=7, D2GS_AURAEFFECT
A7 00 XX XX XX XX 79 
(BYTE) Player/Entity's Type
(DWORD) Player/Entity's ID
(BYTE) Effect/Aura Code

Notifys you an entity has been coverd by an effect, like frozen/posion etc.

0xA8, Lengh=7th Byte, D2GS_AURAADD
A8 00 EA F2 12 5D 0E B2 2D 64 B8 50 F0 1F
(BYTE) Entity's Type
(DWORD) Entity's ID
(BYTE) Lengh Of this packet
(BYTE) Effect/Aura Code
(VOID) Reward stats/list.

Notifys you that a player/merc is now coverd by an aura.

0xA9, Lengh=7, D2GS_AURAREM
A9 00 XX XX XX XX B4
(BYTE) Entity's Type
(DWORD) Entity's ID
(BYTE) Effect/Aura Code

Notifys you that a entity is no longer coverd by an aura or its rewards/effect's.

0xAA, Lengh=7th Byte, D2GS_ENTITYINFOADD
AA 01 70 94 22 49 0A 69 FE 01
(BYTE) Entity's Type
(DWORD) Entity's ID
(BYTE) Lengh of this packet
(VOID) Reward stats/list.

Contains a string of data to be asigned to an entity.

0xAB, Lengh=7, D2GS_ENTITYHEAL
AB 01 XX XX XX XX 75
(BYTE) Entity's Type
(DWORD) Entity's ID
(BYTE) Life%

Notifys you that another player/comp has gained some extra life.

0xAC, Lengh=13th Byte, D2GS_NPCASIGN
AC XX XX XX XX 39 02 DA 17 1E 18 80 0E 01
(DWORD) NPC/Entity's ID
(WORD) NPC/Entity's Unique Code/Class
(WORD) X
(WORD) Y
(BYTE) Life%
(BYTE) Lengh of this packet
(VOID) Reward stats/list.

Notifys you that a NPC has come into you're range of view.

0xAE, Lengh=3+n, D2GS_WARDEN
AE 02 00 4C EF
(WORD) Lengh Of Payload
(VOID) Payload

The Warden.

0xAF, Lengh=13th Byte, D2GS_COMPRESSION
AF 01
(BYTE) D2GS Protocol Compressed (1=yes, 0=no)

Notifys you if the D2GS server/protocol is useing

0xB0, Lengh=1, D2GS_TIMEOUT
B0
Blank

Notifys you that you have been droped due to time out.
If you sent 0x69 exit game, you should recv this just before the D2GS closes the connection, when in a closed game.

0xB4, Lengh=5, D2GS_TIMEOUT
B4 06 00 00 00
(DWORD) Reassion

Notifys you that your attempt to join the game server was rejected.
This packet is a respoince to C >S 0x68 logon.
0x01 = Bad character version
0x02 = Bad character quest data
0x03 = Bad character WP data
0x04 = bad character stats data
0x05 = Bad character skill data
0x06 = Unable to join game
0x07 = Bad character inventory data
0x08 = Bad character bodies (corpses im guessing)
0x09 = Bad Header
0x0A = Bad character merc
0x0B = Bad intro data
0x0C = Bad item data
0x0D = Bad character dead body item
0x0E = Genertic Bad file
0x0F = Game is full
0x10 = Bad Game version
0x11 = Must kill baal in normal to enter a nightmare game
0x12 = Must kill baal in nightmare to enter a hell game
0x13 = A Softcore player cant join a hardcore game
0x14 = A Hardcore player cant join a softcore game
0x15 = A Dead hardcore player cant join or create games
0x16 = Unknown failur
0x17 = A Classic player cant enter a expantion game
0x18 = A Expantion player cant enter a classic game
0x19 = Failed to join the game
0x1A = Unable to enter game

LordNevar

Here's a refrence to alot of the packets for ingame in a decompressed state if anyone wants it.

http://rumkin.com/software/diabloii/packets.php

A good fortune may forbode a bad luck, which may in turn disguise a good fortune.
The greatest trick the Devil ever pulled, was convincing the world he didn't exsist.

Ringo

#2
Nice :)
I notice alot of your recv are question marked as well, we should beable to make sence out alota this.

[edit] is that your reserch?

Newby

- Newby

Quote[17:32:45] * xar sets mode: -oooooooooo algorithm ban chris cipher newby stdio TehUser tnarongi|away vursed warz
[17:32:54] * xar sets mode: +o newby
[17:32:58] <xar> new rule
[17:33:02] <xar> me and newby rule all

Quote<TehUser> Man, I can't get Xorg to work properly.  This sucks.
<torque> you should probably kill yourself
<TehUser> I think I will.  Thanks, torque.

LordNevar

No it is not my research, although I have put quite an extensive packet refrence like that together. It's rough but it works for what I need it for. I do not remember how I got my hands on that link, but it also serves it's purpose and maybe someone who really needs it can put it to a good use, and maybe identify alot more of it, and if Arta has the time and ambition could be added to a sub section of bnetdocs when it's more intuned. :)

A good fortune may forbode a bad luck, which may in turn disguise a good fortune.
The greatest trick the Devil ever pulled, was convincing the world he didn't exsist.

Ringo

Iv got some notes all over the place, so i will put some more up tomorow.
I think alot of my notes were more based on figgering packets lenghs out, but i will also read through my parser, cos i expect that is more up todate than the notes iv just been reading through.
That link should proove very resourcefull and i will read through it tomorow to check for any errors in my notes, thanks.
This should at least get the ball rolling anyway :)

QwertyMonster

Wow Ringo, very nice job! I understand all of that :)

Edit: I suggest this being stickied or something, as its pretty usual.

UserLoser.

#7
Don't forget about D2GS private messages (or whispers).  In a game, type @playername message, it has a different formatted chat messages

I'd love to help you out and do this all *again*, but I don't even have a client which can even connect to Battle.net anymore.  Only thing I have is SphtBot, well, I'd have to write a plugin to log onto realms then get back into D2 games...

Ringo

#8
Thanks, i have added both other messages to the chat event packet but i didnt know of that @command, is there anymore like that? :P

Quote
I'd love to help you out and do this all *again*, but I don't even have a client which can even connect to Battle.net anymore.  Only thing I have is SphtBot, well, I'd have to write a plugin to log onto realms then get back into D2 games...
If u generaly would love to help and have a set of d2 cdkeys still, id be happy to do a reinstall on them and send you the whole D2 folder - with d2loader
i think 1.5GB over msn would take awhile but if ur up for that idea then its ok with me.

I checked through some notes just now, and most of them i just dumped in txt's with nothing wrote with them so i will need to get my bot out and recatch them to get there values :(

UserLoser, how many(ish) packet IDs were there in the last patch? im guessing 100's  :o

[edit]
added a few more, but im outa time, iv got to go out, i will try do a few more tomorow if i get time.

l)ragon

Pretty sure the player id is marked as a byte with a value range of 0-7
*^~·.,¸¸,.·´¯`·.,¸¸,.-·~^*ˆ¨¯¯¨ˆ*^~·.,l)ragon,.-·~^*ˆ¨¯¯¨ˆ*^~·.,¸¸,.·´¯`·.,¸¸,.-·~^*

Ringo

#10
Quote from: l)ragon on June 03, 2005, 11:44 PM
Pretty sure the player id is marked as a byte with a value range of 0-7

Hmm, this could have been one of the things that changed in the new patch, cos it seems everything is done via a 32bit value.

Players / town folks / gold / objects in general will have verying dwords for differnt games, and can change each time they go out of view.

Iv got a few things to do, but i got alot of packet dumps this morning, witch should be needed to sort alot more out, i will sort through abit of it later.

l)ragon

#11
Can check if the death packet is still the same as this.

;User Killed Example - l)ragon
;
;pid            vMonstersID    Act?    vv    UsersName    vvvvvvvvvvvvvvvvvvvvvvvvv   
;5A   06 04     00 00 00 00     01     44 72 61 67 6F 6E 73 53 6B 61 6E 6B 5F 49 49    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
'******************User Killed Example********************************'
'*'Z    DragonsSkank                                             '*'
'*'Fallen Den     MonID     Act?                                    '*'
'*'5A >06 04< >13 00 00 00< >01< 44 72 61 67 6F 6E 73 53 6B 61 6E 6B'*'
'*'2D  49 56   00 00 00 00   00  00 00 00 00 00 00 00 00 00 00 00 00'*'
'*'                                                                 '*'
'*'Z    DragonsSkank                                             '*'
'*'FallenShamen Den  MonID  Act?                                    '*'
'*'5A >06 04< >3A 00 00 00< >01< 44 72 61 67 6F 6E 73 53 6B 61 6E 6B'*'
'*'2D  49 56   00 00 00 00   00  00 00 00 00 00 00 00 00 00 00 00 00'*'
'*'                                                                 '*'
'*'Z    NixSorc                                                  '*'
'*'Tainted Cat 2   MonID    Act?                                    '*'
'*'5A >06 04< >0B 00 00 00< >01< 4E 69 78 53 6F 72 63 00 00 00 00 00'*'
'*'00  00 00   00 00 00 00   00  00 00 00 00 00 00 00 00 00 00 00 00'*'
'*'                                                                 '*'
'*************************************************  ******************' Extra dumps i had
;
;
[MonsterIDs]
MonID-0=Skeleton
MonID-1=Returned
MonID-2=Bone Warrior
MonID-3=Burning Dead
MonID-4=Horror
MonID-5=Zombie
MonID-6=Hungry Dead
MonID-7=Ghoul
MonID-8=Drowned Carcass
MonID-9=Plague Bearer
MonID-10=Afflicted
MonID-11=Tainted
MonID-12=Misshappen
MonID-13=Disfigured
MonID-14=Damned
MonID-15=Foul Crow
MonID-16=BloodHawk
MonID-17=Black Raptor
MonID-18=Cloud Stalker
MonID-19=Fallen
MonID-20=Carver
MonID-21=Devil Kin
MonID-22=DarkOne
MonID-23=Warped Fallen
MonID-24=Brute
MonID-25=Yeti
MonID-26=Crusher
MonID-27=Wailing Beast
MonID-28=Gargantuan Beast
MonID-29=Sand Raider
MonID-30=Marauder
MonID-31=Invader
MonID-32=Infidel
MonID-33=Assailant
MonID-34=
MonID-35=
MonID-36=
MonID-37=
MonID-38=Ghost
MonID-39=Wraith
MonID-40=Specter
MonID-41=Apparition
MonID-42=Dark Shape
MonID-43=Dark Hunter
MonID-44=Vile Hunter
MonID-45=Dark Stalker
MonID-46=Black Rogue
MonID-47=Flesh Hunter
MonID-48=Dune Beast
MonID-49=Rock Dweller
MonID-50=Jungle Hunter
MonID-51=Doom Ape
MonID-52=Temple Guard
MonID-53=Moon Clan
MonID-54=Night Clan
MonID-55=Blood Clan
MonID-56=Hell Clan
MonID-57=Death Clan
MonID-58=Fallen Shamen
MonID-59=Carver Shamen
MonID-60=Devilkin Shamen
MonID-61=Dark Shamen
MonID-62=Warped Shamen
MonID-63=Quill Rat
MonID-64=Spike Fiend
MonID-65=Thorn Beast
MonID-66=Razor Spike
MonID-67=Jungle Urchin
MonID-68=Sand Maggot
MonID-69=Rock Worm
MonID-70=Devourer
MonID-71=Giant Lamprey
MonID-72=World Killer
MonID-73=Tomb Viper
MonID-74=Claw Viper
MonID-75=Salamander
MonID-76=Pit Viper
MonID-77=Serpent Magus
MonID-78=Sand Leaper
MonID-79=Cave Leaper
MonID-80=Tomb Creeper
MonID-81=Tree Lurker
MonID-82=Razor Pit Demon
MonID-83=Huntress
MonID-84=Saber Cat
MonID-85=Night Tiger
MonID-86=Hell Cat
MonID-87=Itches
MonID-88=Black Locusts
MonID-89=Plague Bugs
MonID-90=Hell Swarm
MonID-91=Dung Soldier
MonID-92=Sand Warrior
MonID-93=Scarab
MonID-94=Steel Weevil
MonID-95=Albino Roach
MonID-96=Dried Corpse
MonID-97=Decayed
MonID-98=Embalmed
MonID-99=Preserved Dead
MonID-100=Cadaver
MonID-101=Hallow One
MonID-102=Guardian
MonID-103=Unraveler
MonID-104=Horadrim Ancient
MonID-105=Baal Subject Mummy
MonID-106=
MonID-107=
MonID-108=
MonID-109=
MonID-110=Carrion Bird
MonID-111=UndeadS cavenger
MonID-112=Hell Buzzard
MonID-113=Winged Nightmare
MonID-114=Sucker
MonID-115=Feeder
MonID-116=Blood Hook
MonID-117=Blood Wing
MonID-118=Gloam
MonID-119=Swamp Ghost
MonID-120=Burning Soul
MonID-121=Black Soul
MonID-122=Arach
MonID-123=Sand Fisher
MonID-124=Poison Spinner
MonID-125=Flame Spider
MonID-126=Spider Magus
MonID-127=Thorned Hulk
MonID-128=Bramble Hulk
MonID-129=Thrasher
MonID-130=Spike Fist
MonID-131=Ghoul Lord
MonID-132=Night Lord
MonID-133=Dark Lord
MonID-134=Blood Lord
MonID-135=Banished
MonID-136=Desert Wing
MonID-137=Fiend
MonID-138=Gloom Bat
MonID-139=Blood Diver
MonID-140=Dark Familiar
MonID-141=Rat Man
MonID-142=Fetish
MonID-143=Flayer
MonID-144=Soul Killer
MonID-145=Stygian Doll
MonID-146=Deckard Cain
MonID-147=Gheed
MonID-148=Akara
MonID-149=
MonID-150=Kashya
MonID-151=
MonID-152=
MonID-153=
MonID-154=Charsi
MonID-155=Warriv
MonID-156=Andarial
MonID-157=
MonID-158=
MonID-159=
MonID-160=Dark Ranger
MonID-161=Vile Archer
MonID-162=Dark Archer
MonID-163=Black Archer
MonID-164=Flesh Archer
MonID-165=Dark Spearwomen
MonID-166=Vile Lancer
MonID-167=Dark Lancer
MonID-168=Black Lancer
MonID-169=Flesh Lancer
MonID-170=Skeleton Archer
MonID-171=Returned Archer
MonID-172=Bone Archer
MonID-173=Burning Dead Archer
MonID-174=Horror Archer
MonID-175=Warriv
MonID-176=Atma
MonID-177=Drognan
MonID-178=Fara
MonID-179=
MonID-180=Sand Maggot Young
MonID-181=Rock Worm Young
MonID-182=Devourer Young
MonID-183=Giant Lamprey Young
MonID-184=World Killer Yound
MonID-185=
MonID-186=Blunderbore
MonID-187=Gorbelly
MonID-188=Mauler
MonID-189=Urdar
MonID-190=Sand Maggot Egg
MonID-191=Rock Worm Egg
MonID-192=Devourer Egg
MonID-193=Giant Lamprey Egg
MonID-194=World Killer Egg
MonID-195=
MonID-196=
MonID-197=
MonID-198=Greiz
MonID-199=Elzix
MonID-200=Geglash
MonID-201=Jerhyn
MonID-202=Lysander
MonID-203=
MonID-204=
MonID-205=
MonID-206=Foul Crow Nest
MonID-207=Blood Hawk Nest
MonID-208=Black Vulture Nest
MonID-209=Cloud Stalker Nest
MonID-210=Meshif
MonID-211=Duriel
MonID-212=
MonID-213=
MonID-214=
MonID-215=
MonID-216=
MonID-217=
MonID-218=
MonID-219=
MonID-220=
MonID-221=
MonID-222=
MonID-223=
MonID-224=
MonID-225=
MonID-226=
MonID-227=Maggot
MonID-228=Mummy Generator
MonID-229=Radament
MonID-230=
MonID-231=
MonID-232=
MonID-233=
MonID-234=Flying Scimitar
MonID-235=Zakarumite
MonID-236=Faithful
MonID-237=Zealot
MonID-238=Sexton
MonID-239=Cantor
MonID-240=Heirophant
MonID-241=Heirophant
MonID-242=Mephesto
MonID-243=Diablo
MonID-244=Deckard Cain
MonID-245=Deckard Cain
MonID-246=Deckard Cain
MonID-247=Swamp Dweller
MonID-248=Bog Creature
MonID-249=Slime Prince
MonID-250=Summoner
MonID-251=Tyrael
MonID-252=Asheara
MonID-253=Hratli
MonID-254=Alkor
MonID-255=Ormus
MonID-256=Izual
MonID-257=Halbu
MonID-258=Water Watcher Limb
MonID-259=River Stalker Limb
MonID-260=Stygain Watcher Limb
MonID-261=Water Watcher Head
MonID-262=River Stalker Head
MonID-263=Stygain Watcher Head
MonID-264=Meshif
MonID-265=Deckard Cain
MonID-266=Navi
MonID-267=Blood Raven
MonID-268=
MonID-269=
MonID-270=Rogue Scout
MonID-271=
MonID-272=
MonID-273=Gargoyle Trap
MonID-274=Returned Mage
MonID-275=Bone Mage
MonID-276=Burning Dead Mage
MonID-277=Horror Mage
MonID-278=Rat Man Shamen
MonID-279=Fetish Shamen
MonID-280=Flayer Shamen
MonID-281=Soul Killer Shamen
MonID-282=Stygian Doll Shamen
MonID-283=Larva
MonID-284=Sand Maggot Queen
MonID-285=Rock Worm Queen
MonID-286=Devourer Queen
MonID-287=Giant Lamprey Queen
MonID-288=World Killer Queen
MonID-289=Clay Golem
MonID-290=Blood Golem
MonID-291=Iron Golem
MonID-292=Fire Golem
MonID-293=
MonID-294=
MonID-295=Night Maraduer
MonID-296=
MonID-297=Natalya
MonID-298=Flesh Spawner
MonID-299=Stygian Hag
MonID-300=Grotesque
MonID-301=Flesh Beast
MonID-302=Stygian Dog
MonID-303=Grotesque Wyrm
MonID-304=Groper
MonID-305=Strangler
MonID-306=Storm Caster
MonID-307=Corpulent
MonID-308=Corpse Spitter
MonID-309=Maw Fiend
MonID-310=Doom Knight
MonID-311=Abyss Knight
MonID-312=Oblivion Knight
MonID-313=Quill Bear
MonID-314=Spike Giant
MonID-315=Thorn Brute
MonID-316=Razor Beast
MonID-317=Giant Urchin
MonID-318=
MonID-319=
MonID-320=
MonID-321=
MonID-322=
MonID-323=
MonID-324=
MonID-325=
MonID-326=A Trap
MonID-327=A Trap
MonID-328=A Trap
MonID-329=A Trap
MonID-330=A Trap
MonID-331=Kaelan
MonID-332=
MonID-333=
MonID-334=Sucker Nest
MonID-335=Feeder Nest
MonID-336=Blood Hook Nest
MonID-337=Blood Wing Nest
MonID-338=Guard
MonID-339=
MonID-340=
MonID-341=
MonID-342=
MonID-343=
MonID-344=
MonID-345=Council Member
MonID-346=Council Member
MonID-347=Council Member
MonID-348=Turret
MonID-349=Turret
MonID-350=Turret
MonID-351=Hydra
MonID-352=Hydra
MonID-353=Hydra
MonID-354=A Trap
MonID-355=
MonID-356=Dopplezon
MonID-357=Valkyrie
MonID-358=
MonID-359=Iron Wolf
MonID-360=Balrog
MonID-361=Pit Lord
MonID-362=Venom Lord
MonID-363=Necro Skeleton
MonID-364=Necro Mage
MonID-365=Griswold
MonID-366=Compelling Orb
MonID-367=Tyrael
MonID-368=Young Diablo
MonID-369=A Trap
MonID-370=
MonID-371=Lightning Spire
MonID-372=Fire Tower
MonID-373=Slinger
MonID-374=Spear Cat
MonID-375=Night Slinger
MonID-376=Hell Slinger
MonID-377=
MonID-378=
MonID-379=Returned Mage
MonID-380=Bone Mage
MonID-381=Baal Cold Mage
MonID-382=Horror Mage
MonID-383=Returned Mage
MonID-384=Bone Mage
MonID-385=Burning Dead Mage
MonID-386=Horror Mage
MonID-387=Returned Mage
MonID-388=Bone Mage
MonID-389=Burning Dead Mage
MonID-390=Horror Mage
MonID-391=Hell Bovine
MonID-392=
MonID-393=
MonID-394=Spear Cat
MonID-395=Night Slinger
MonID-396=Rat Man
MonID-397=Fetish
MonID-398=Flayer
MonID-399=Soul Killer
MonID-400=Stygian Doll
MonID-401=
MonID-402=The Smith
MonID-403=Traped Soul
MonID-404=Traped Soul
MonID-405=Jamella
MonID-406=Izual
MonID-407=Rat Man
MonID-408=Malachai
MonID-409=The Feature Creep
MonID-410=
MonID-411=Wake Of Destruction
MonID-412=Charged Bolt Sentry
MonID-413=Lightning Sentry
MonID-414=Blade Creeper
MonID-415=Invis Pet
MonID-416=Inferno Sentry
MonID-417=Death Sentry
MonID-418=Shadow Warrior
MonID-419=Shadow Master
MonID-420=Druid Hawk
MonID-421=Druid Spirit Wolf
MonID-422=Druid Fenris
MonID-423=Spirit Of Barbs
MonID-424=Heart Of Wolverine
MonID-425=Oak Sage
MonID-426=Druid Plague Poppy
MonID-427=Druid Cycle Of Life
MonID-428=Vine Creature
MonID-429=Druid Bear
MonID-430=Eagle
MonID-431=Wolf
MonID-432=Bear
MonID-433=Barricaded Door
MonID-434=Barricaded Door
MonID-435=Prison Door
MonID-436=Barricaded Door
MonID-437=Rot Walker
MonID-438=Reanimate Horde
MonID-439=Prowling Dead
MonID-440=Unholy Corpse
MonID-441=Defiled Warrior
MonID-442=Siege Beast
MonID-443=Crush Biest
MonID-444=Blood Bringer
MonID-445=Gore Bearer
MonID-446=Deamon Steed
MonID-447=Snow Yeti 1
MonID-448=Snow Yeti 2
MonID-449=Snow Yeti 3
MonID-450=Snow Yeti 4
MonID-451=Wolf Rider 1
MonID-452=Wolf Rider 2
MonID-453=Wolf Rider 3
MonID-454=Minionexp
MonID-455=Slayerexp
MonID-456=Ice Boar
MonID-457=Fire Boar
MonID-458=Hell Spawn
MonID-459=Ice Spawn
MonID-460=Greater Hell Spawn
MonID-461=Greater Ice Spawn
MonID-462=Fanatic Minion
MonID-463=Berserk Slayer
MonID-464=Consumed Fire Boar
MonID-465=Consumed Ice Boar
MonID-466=Frenzied Hell Spawn
MonID-467=Frenzied Ice Spawn
MonID-468=Insane Hell Spawn
MonID-469=Insane Ice Spawn
MonID-470=Succubusexp
MonID-471=Vile Temptress
MonID-472=Stygian Harlot
MonID-473=Hell Temptress
MonID-474=Blood Temptress
MonID-475=Dominus
MonID-476=Vile Witch
MonID-477=Stygian Fury
MonID-478=Blood Witch
MonID-479=Hell Witch
MonID-480=Over Seer
MonID-481=Lasher
MonID-482=Over Lord
MonID-483=Blood Boss
MonID-484=Hell Whip
MonID-485=Minion Spawner
MonID-486=Minion Slayer Spawner
MonID-487=Minion Ice/Fire Boar Spawner
MonID-488=Minion Ice/Fire Boar Spawner
MonID-489=Minion Ice/Hell Spawn Spawner
MonID-490=Minion Ice/Fire Boar Spawner
MonID-491=Minion Ice/Fire Boar Spawner
MonID-492=Minion Ice/Hell Spawn Spawner
MonID-493=Imp 1
MonID-494=Imp 2
MonID-495=Imp 3
MonID-496=Imp 4
MonID-497=Imp 5
MonID-498=Catapults
MonID-499=Catapulte
MonID-500=Catapult Seige
MonID-501=Catapult W
MonID-502=Frozen Horror 1
MonID-503=Frozen Horror 2
MonID-504=Frozen Horror 3
MonID-505=Frozen Horror 4
MonID-506=Frozen Horror 5
MonID-507=Blood Lord 1
MonID-508=Blood Lord 2
MonID-509=Blood Lord 3
MonID-510=Blood Lord 4
MonID-511=Blood Lord 5
MonID-512=Larzuk
MonID-513=Drehya
MonID-514=Malah
MonID-515=Nihlathak
MonID-516=Qual-kehk
MonID-517=Catapult Spotter S
MonID-518=Catapult Spotter E
MonID-519=Catapult Spotter Siege
MonID-520=Catapult Spotter W
MonID-521=Deckard Cain
MonID-522=Tyrael
MonID-523=Barbarian Fighter
MonID-524=Barbarian Fighter
MonID-525=Barricade Wall Right
MonID-526=Barricade Wall Left
MonID-527=Nihlathak
MonID-528=Drehya
MonID-529=Evil Hut
MonID-530=Death Mauler 1
MonID-531=Death Mauler 2
MonID-532=Death Mauler 3
MonID-533=Death Mauler 4
MonID-534=Death Mauler 5
MonID-535=POW
MonID-536=Barbarian Fighter
MonID-537=Barbarian Fighter
MonID-538=Ancient Statue 1
MonID-539=Ancient Statue 2
MonID-540=Ancient Statue 3
MonID-541=Ancient Barbarian 1
MonID-542=Ancient Barbarian 2
MonID-543=Ancient Barbarian 3
MonID-544=Baal Throne
MonID-545=Baal Crab
MonID-546=Baal Taunt
MonID-547=Putrid Defiler
MonID-548=Putrid Defiler
MonID-549=Putrid Defiler
MonID-550=Putrid Defiler
MonID-551=Putrid Defiler
MonID-552=Pain Worm
MonID-553=Pain Worm
MonID-554=Pain Worm
MonID-555=Pain Worm
MonID-556=Pain Worm
MonID-557=Bunny
MonID-558=Council Member
MonID-559=Venom Lord
MonID-560=Baal Crab To Stairs
MonID-561=Hireling
MonID-562=Hireling
MonID-563=Baal Tentacle
MonID-564=Baal Tentacle
MonID-565=Baal Tentacle
MonID-566=Baal Tentacle
MonID-567=Baal Tentacle
MonID-568=Injured Barbarian
MonID-569=Injured Barbarian
MonID-570=Injured Barbarian
MonID-571=Baal Crab Clone
MonID-572=Baals Minion
MonID-573=Baals Minion
MonID-574=Baals Minion
MonID-575=Worldstone Effect

Edit: These are the 1.08 or 1.09 monsters by id, youll need to consult the db files for 1.10.
*^~·.,¸¸,.·´¯`·.,¸¸,.-·~^*ˆ¨¯¯¨ˆ*^~·.,l)ragon,.-·~^*ˆ¨¯¯¨ˆ*^~·.,¸¸,.·´¯`·.,¸¸,.-·~^*

Ringo

#12
now thats what im talking about, THANK YOU!
it tolk me hours just to obtain the World Map ID's  :D

In regards to the top packet the char recving the packets, was that the char that got slained or was it a observer? :)

I will defernetly be doing some follow/packet logging out side town tomorow thanks!

[edit] np thanks alot !



At the time of death:
MID = 56 AC 13 E0
PID = 1F 99 35 17
X   = 4C 12
Y   = 09 12
Char name = gWf
slained by = fallen

unknown 0x5A party packet recv
  5A 06 04 13 00 00 00 01 67 77 66 00 00 00 00 00        Z.......gWf.....
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00        ................
  00 00 00 00 00 00 00 00 0D 00 1F 99 35 17 08 4A        ............5..J
  12 0B 12 03 00 9C 00 18 10 66 19 27 58 10 20 A0        .........f.'X. .
  00 65 8C 49 C2        .e.I.
  ~~~~ UNKNOWN ~~~~ 
  8E 01 1F 99 35 17 8F AC 9A 9B 9D 08 1E 05 32 8B        ....5.........2.
  39 81 00 1F 99 35 17 30 00 82 08 65 84 08 32 37        9....5.0...e..27
  47 06 82 80 80 81 E1 3F 9D 08 20 07 99 A5 9C 40        G......?.. ....@
  00 1F 99 35 17 30 00 82 08 65 A4 0A 22 56 37 06        ...5.0...e...V7.
  82 80 00 01 86 04 FF 01 47 00 00 1F 99 35 17 00        ........G....5..
  00 00 00 48 00 00 1F 99 35 17 00 00 00 00 0D 00        ...H....5.......
  1F 99 35 17 09 4A 12 0B 12 03 00 59 8F AC 9A 9B        ..5..J.....Y....
  03 67 77 66 00 00 00 00 00 00 00 00 00 00 00 00        .gWf............
  00 4A 12 0B 12 75 8F AC 9A 9B FF FF 00 00 00 00        .J...u..........
  00 00 20 8F AC 9A 9B 43 00 00 00 00 20 8F AC 9A        .. ....C.... ...
  9B 44 00 00 00 00 20 8F AC 9A 9B 0C 00 00 00 00        .D.... .........
  20 8F AC 9A 9B 00 00 00 00 00 20 8F AC 9A 9B 02         ......... .....
  00 00 00 00 74 01 1F 99 35 17 8F AC 9A 9B AA 00        ....t...5.......
  8F AC 9A 9B 0D 07 D2 B2 F2 FF 3F 0D 00 8F AC 9A        ..........?.....
  9B 09 4A 12 0B 12 00 00 76 00 8F AC 9A 9B 0D 00        ..J.....v.......
  8F AC 9A 9B        ....

hmm i dont think they have changed :)
Il check some other monster types tomorow tho, thanks



MID        = 56 AC 13 E0
PID        = 1F 99 35 17
PID X      = 4A 12
PID Y      = 0B 12
MID X      = 4C 12
MID Y      = 09 12
Char name  = gWf
slained by = fallen (lvl 1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5A 06 04 13 00 00 00 01 67 77 66 00 00 00 00 00        Z.......gWf.....
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00        ................
  00 00 00 00 00 00 00 00                                ........
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  0D 00 1F 99 35 17 08 4A 12 0B 12 03 00                 ....5..J.....
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  9C 00 18 10 66 19 27 58 10 20 A0 00 65 8C 49 C2        ....f.'X. ..e.I.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Player gets slained
5A
06 04 <- relation to a player being slained
13 00 00 00 <- monster type
01 <- one persion was slained by the monster
(NS) <- char name of the persion slained
(0x00 x 28) <- veryable nulls

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The player stops moving
0D
00 <- player related
1F 99 35 17 <- The PlayerID
08 <- Facing direction of the char
4A 12 <- X
0B 12 <- Y
03 00 <- unknown

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Slained player drops gold
9C 00 18 10 66 19 27 58 10 20 A0 00 65 8C 49 C2 (got cut short)



MID        = 56 AC 13 E0
PID        = ## ## ## ##
PID X      = << >>
PID Y      = ^^ vv
MID X      = 4C 12
MID Y      = 09 12
Char name  = gWf
slained by = fallen (lvl 1)

  8E 01 ## ## ## ## 8F AC 9A 9B 9D 08 1E 05 32 8B        ....5.........2.
  39 81 00 ## ## ## ## 30 00 82 08 65 84 08 32 37        9....5.0...e..27
  47 06 82 80 80 81 E1 3F 9D 08 20 07 99 A5 9C 40        G......?.. ....@
  00 ## ## ## ## 30 00 82 08 65 A4 0A 22 56 37 06        ...5.0...e...V7.
  82 80 00 01 86 04 FF 01 47 00 00 ## ## ## ## 00        ........G....5..
  00 00 00 48 00 00 ## ## ## ## 00 00 00 00 0D 00        ...H....5.......
  ## ## ## ## 09 << >> ^^ vv 03 00 59 8F AC 9A 9B        ..5..J.....Y....
  03 67 77 66 00 00 00 00 00 00 00 00 00 00 00 00        .gWf............
  00 << >> ^^ vv 75 8F AC 9A 9B FF FF 00 00 00 00        .J...u..........
  00 00 20 8F AC 9A 9B 43 00 00 00 00 20 8F AC 9A        .. ....C.... ...
  9B 44 00 00 00 00 20 8F AC 9A 9B 0C 00 00 00 00        .D.... .........
  20 8F AC 9A 9B 00 00 00 00 00 20 8F AC 9A 9B 02         ......... .....
  00 00 00 00 74 01 ## ## ## ## 8F AC 9A 9B AA 00        ....t...5.......
  8F AC 9A 9B 0D 07 D2 B2 F2 FF 3F 0D 00 8F AC 9A        ..........?.....
  9B 09 << >> ^^ vv 00 00 76 00 8F AC 9A 9B 0D 00        ..J.....v.......
  8F AC 9A 9B                                            ....

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
MID        = 56 AC 13 E0
PID        = ## ## ## ##
PID X      = << >>
PID Y      = ^^ vv
MID X      = 4C 12
MID Y      = 09 12
Char name  = gWf
slained by = fallen (lvl 1)

8E 01 ## ## ## ## 8F AC 9A 9B <- asign player ID to corpse ID

9D 08 1E 05 32 8B 39 81 00 ## ## ## ## 30 00 82 08 65 84 08 32
37 47 06 82 80 80 81 E1 3F <- slained player is no longer wareing this item

9D 08 20 07 99 A5 9C 40 00 ## ## ## ## 30 00 82 08 65 A4 0A 22
56 37 06 82 80 00 01 86 04 FF 01 <- slained player is no longer wareing this item

47 00 00 ## ## ## ## 00 00 00 00 <- next coming messages relate to this Player ID

48 00 00 ## ## ## ## 00 00 00 00 <- next coming messages relate to this Player ID

0D 00 ## ## ## ## 09 << >> ^^ vv 03 00 <- slained player has stoped

59 8F AC 9A 9B 03 (NS) 00 00 .... 00 00 << >> ^^ vv <- notification asign corpse to location (mini map related)

75 8F AC 9A 9B FF FF 00 00 00 00 00 00 <- corpse char level is a dummy.

20 8F AC 9A 9B 43 00 00 00 00 <- setting Corpses statpoints to zero

20 8F AC 9A 9B 44 00 00 00 00 <-

20 8F AC 9A 9B 0C 00 00 00 00 <-

20 8F AC 9A 9B 00 00 00 00 00 <- strengh (of the corpse)

20 8F AC 9A 9B 02 00 00 00 00 <- Dextority (of the corpse)

74 01 ## ## ## ## 8F AC 9A 9B <- Visibility toggle related?

AA 00 8F AC 9A 9B 0D 07 D2 B2 F2 FF 3F <- mask/draw corpse related?

0D 00 8F AC 9A 9B 09 << >> ^^ vv 00 00 <- Corpse stops

76 00 8F AC 9A 9B <- finilize corpse's existance?

0D 00 8F AC 9A 9B <- ment to be 0x0D stop moving (decompression cut short)

l)ragon

Quote from: Ringo on June 05, 2005, 10:01 PM
now thats what im talking about, THANK YOU!
it tolk me hours just to obtain the World Map ID's  :D

In regards to the top packet the char recving the packets, was that the char that got slained or was it a observer? :)

I will defernetly be doing some follow/packet logging out side town tomorow thanks!

[edit] np thanks alot !
dosent matter where your at if somone dies you will recieve the packet.
never did much besides leave the bot in town and watch others get them selves killed.
*^~·.,¸¸,.·´¯`·.,¸¸,.-·~^*ˆ¨¯¯¨ˆ*^~·.,l)ragon,.-·~^*ˆ¨¯¯¨ˆ*^~·.,¸¸,.·´¯`·.,¸¸,.-·~^*

Ringo

#14
[size=8]C > S[/size]

0x68
Send Logon Infomation

68 D3 B0 B5 2C D9 03 04 0B 00 00 00 50 CC 5D ED B6 19 A5 91 00 72 74 74 74 68 65 61 68 65 61 68 65 61 68 72 00
(DWORD) D2GS Hash
(WORD) D2GS Token
(BYTE) Your Char's Type
(DWORD) Version Byte (0x0B)
(DWORD) Unknown - 0xED5DCC50
(DWORD) Unknown - 0x91A519B6
(BYTE) Unknown - 0x00
(STRAND[16]) Character Name

This is the main packet for the D2GS logon where you need to send your char infomation to the game server.
This packet must be 37 bytes long, so if your char name is not 15 letters in lengh, you will need to add the correct number of bytes after your Char name.
Your char name should be inbedded to the start of the following hex strand:

00000000B5D6779A81B36F4B00000000

The strand must be 16 bytes long and contain your character name with a null terminator.
The server will not answer this packet if it is not 37 bytes long, doesnt contain the D2GS hash or D2GS token or doesnt contain your char name.
Char Type's:
0x00 = Amazon
0x01 = Sorceress
0x02 = Necromancer
0x03 = Paladin
0x04 = Barbarian
0x05 = Druid
0x06 = Assassin



0x6D
Ping Packet (keep alive)

(DWORD) Tickcount
(DWORD) *Unknown
(DWORD) Unused - 0x00

Should be sent every 5 to 7 seconds to stop from dropping from the game.
The *Unknown should be a null value on joining the game server, and after that, a non-static value is used.
Averying DWORD between 0x30 and 0x50 seems to be ok for a temp solution.



0x4F
Cancel Or Accept a trade / Move gold / Close objects

(DWORD) Request ID
(WORD) Number Of Gold <- only relates to moving gold around

Request ID's
0x02 = Cancel Trade Request/Close Trade Screen
0x03 = Accept Trade Request
0x04 = Press The Accept Button
0x07 = Unclick The Accept Button <- send when placing/putting down items also
0x08 = Refresh (See below about refreshing why in trade)
0x12 = Close Stash
0x13 = Move Gold From Stash To Inventory
0x14 = Move Gold From Inventory To Stash
0x17 = Close Horadric Cube
Refreshing
It is important to send a 0x08 request of this packet when ever you do any thing in trade.
This would generaly cover things like:
After you have sent a 0x19 packet to pick up an object to the mouse curser
After you have sent a 0x18 packet to place the object onto the trade screen
After you have accepted/closed a trade and trade request's
After you have manualy unclicked the accept button
etc etc



0x14
Send OverHead Chat

14 00 00[68 65 68 65 68 65 68 65 5D 23 00]00 00
(WORD) Unknown - 0x00
(NULLSTRING) Overhead Chat Message
(NULLSTRING) Unused (Blank - 0x00)
(NULLSTRING) Unused (Blank - 0x00)

Sent to display a over head message from your char.
(This Command is aka !Message)



0x15
Multiple Formats:
Format 1:
Send Normal Chat:

15 01 00[68 65 68 65 65 5D 23 00]00 00
(WORD) Unknown - 0x01
(NULLSTRING) Chat Message
(NULLSTRING) Unused (Blank - 0x00)
(NULLSTRING) Unused (Blank - 0x00)

Sent to chat to other players.
(Will recv compressed chat message back, veryifying your chat)

Format 2:
@Wisper Chat:

15 02 00[74 65 73 74 79 00][62 6F 67 65 6E 5F 4C 65 78 69 00]00
(WORD) Unknown - 0x02
(NULLSTRING) @ Wispering Message
(NULLSTRING) Char Name (You are useing the @wisper command to wisper)
(NULLSTRING) Unused (Blank - 0x00)

Sent to wisper other ingame players.
(This Command is aka @CharName Message)



0x3F
Send Char Speech

3F 19 00
(WORD) Speech ID

Sent to 'talk' to other players with the speech commands.
Player Speech ID's:
All Players:
19 00 = help / help me
1A 00 = follow me / come on!
1B 00 = this is urs / this is for you
1C 00 = thnks / thank you
1D 00 = ahh oops / forgive me
1E 00 = bye / Good Bye
1F 00 = Die / time to die
20 00 = Run / Run away



0x03
Run around

03 65 15 61 12
(WORD) X location
(WORD) Y location

Sent to run around with your char.



0x01
Walk around

01 69 15 69 12
(WORD) X location
(WORD) Y location

Sent to walk around with your char.



0x5E
Party Request's

5E 08 3E 82 EB 2B
(BYTE) Action type
(DWORD) Player ID (Of The Other Persion)

Action Type's
0x06 = Invite A Player To Party With You
0x07 = Cancel A Party Invite To Another Player
0x08 = Accept A Party Invite From Another Player



0x5D
Set Player Relations

5D 01 01 DC A0 9F D7
(BYTE) Request ID
(BYTE) Action Types
(DWORD) Player ID (Of The Other Persion)

Request ID 0x01
Action Type's
0x00 = Remove This Players Rights To Loot Your Corpse
0x01 = Allow This Player To Loot Your Corpse

Request ID 0x02
Action Type's
0x00 = Allow This Player To Hear You
0x01 = Stop This Player From Hearing You

Request ID 0x03
Action Type's
0x00 = Unsquelch This Player
0x01 = Squelch This Player
(You must also send 0x0E /squelch there username to BNCS)

Request ID 0x04
Action Type's
0x00 = Remove Hostile With This Player
0x01 = Go Hostile With This Player



0x40
Request Quests Log

40
(BLANK)

Send this to the server to request your current quest logs for the act your currently on.



0x04
Run To A Object

04 02 00 00 00 E2 84 2F 64
(DWORD) Object Type
(DWORD) Object ID (asigned 32 bit value)

Sent to 'run' to an object.
Object Type's
0x00 = Run to another player
0x01 = Run to a Town Folk or Monster
0x02 = Run to a Object like stash, Waypoint or teleport.
0x04 = Run to a item
0x05 = Run to a Doorway



0x02
Walk To A Object

02 02 00 00 00 E2 84 2F 64 
(DWORD) Object Type
(DWORD) Object ID (asigned 32 bit value)

Sent to 'walk' to an object.
Object Type's
0x00 = Walk to another player
0x01 = Walk to a Town Folk or Monster
0x02 = Walk to a Object like stash, Waypoint or teleport.
0x04 = Walk to a item
0x05 = Walk to a Doorway



0x13
Interact With an Object

13 02 00 00 00 E2 84 2F 64 
(DWORD) Object Type
(DWORD) Object ID

Sent to interact with an object.
Object Type's
0x00 = Request trade Interaction with another player
0x01 = Interact with a Town Folk
0x02 = Interact with Object's like stash, teleports, shrines, chest's and waypoints etc
0x04 = Interact with an Item <- relates to some items/quest items i think
0x05 = Walk Through a Doorway



0x69
Exit Game

69
(BLANK)

When exiting a D2GS game, you will need to send this packet to notify the server that your leaving.
The server will then shut the connection on the client, and the client should then start logging back onto the realm.



0x6B
Enter Game

6B
(BLANK)

This is the packet used in the D2GS logon, it is to register you to the game.
Untill you send this packet you will not recv any game infomation.



0x06
Left Skill On Object

06 01 00 00 00 0D 99 C1 21
(DWORD) Object Type
(DWORD) Object ID

When sending this packet to attack somthing, your char will use its current selected left skill.
This will cover both melee attacking skills and missle casting skills.
Object Type's
0x00 = Left Attack another player
0x01 = Left Attack a Monster
0x02 = Left Attack An Object (tp, wp, stash, shrine etc)



0x09 - Not used in 1.11?
Left Skill Repeat On Object

09 01 00 00 00 F4 3B 32 8E
(DWORD) Object Type
(DWORD) Object ID

Keep sending this packet after you have sent a 0x06 packet to continue useing your selected left skill to cast/attack on a selected object.
Object Type's
0x00 = Left Attack another player
0x01 = Left Attack a Monster
0x02 = Left Attack An Object (tp, wp, stash, shrines etc)



0x0D
Right Skill On Object

0D 01 00 00 00 6C B0 40 96
(DWORD) Object Type
(DWORD) Object ID

When sending this packet to attack somthing, your char will use its current selected right skill.
This will cover both melee attacking skills and missle casting skills.
Object Type's
0x00 = Right Attack another player
0x01 = Right Attack a Monster
0x02 = Right Attack An Object (tp, wp, stash, shrines etc)


0x10 - Not used in 1.11?
Right Skill Repeat On Object

10 01 00 00 00 60 27 FA 9D
(DWORD) Object Type
(DWORD) Object ID

Keep sending this packet after you have sent a 0x0D packet to continue useing your selected right skill to cast/attack on a selected object.
Object Type's
0x00 = Right Attack another player
0x01 = Right Attack a Monster
0x02 = Right Attack An Object (tp, wp, stash, shrines etc)



0x0C
Right Skill On Location

0C 61 15 E4 16
(WORD) Use At Location X
(WORD) Use At Location Y

Sent to use the right side skill to cast/attck on a desired location.



0x0F - Not used in 1.11?
Right Skill Repeat On Location

0F BD 13 9E 10
(WORD) Repeat Right Skill Location X
(WORD) Repeat Right Skill Location Y

Keep sending this packet after you have sent a 0x0C packet to continue useing your selected right skill to cast/attack at the selected location.



0x05
Left Skill On Location

05 58 15 EC 16
(WORD) Use At Location X
(WORD) Use At Location Y

Sent to use the left side skill to cast/attck on a desired location.



0x08 - Not used in 1.11?
Left Skill Repeat On Location

08 99 13 99 10
(WORD) Repeat Left Skill Location X
(WORD) Repeat Left Skill Location Y

Keep sending this packet after you have sent a 0x05 packet to continue useing your selected left skill to cast/attack at the selected location.



0x3C
Select SKill

3C 28 00 00 00 FF FF FF FF
3C 27 00 00 80 FF FF FF FF
(WORD) Skill Type
(WORD) Skill Side (0x0000=Right, 0x8000=Left)
(DWORD) Unknown - 0xFFFFFFFF

Sent to select a skill for your char to use.
(Make sure your char has the skill your trying to select)



0x16
Pick Up A Ground Object

16 04 00 00 00 74 33 53 AB 00 00 00 00
(DWORD) Request ID (0x04)
(DWORD) Object's ID
(DWORD) Object's Direction

Send this packet to pick up an object from the ground.
Directions:
0x00 = Automaticly Put Object In Inventory
0x01 = Put Object In Mouse Curser



0x17
Drop Object From Mouse Curser To The Ground

17 74 33 53 AB
(DWORD) Object's ID

Send this packet to drop a seclected item (in the mouse curser) onto the ground.



0x18
Place Object In A Location

18 74 33 53 AB 00 00 00 00 00 00 00 00 00 00 00 00
(DWORD) Object's ID
(DWORD) Square X
(DWORD) Square Y
(DWORD) Object's Direction

Send this packet to remove an item from your mouse curser and place it a desired location.
Directions:
0x00 = Place Object In Inventory
0x02 = Place Object In Horadric Cube/On Trade Screen
0x04 = Place Object In Stash

Inventory And Trade Screen Dimention's:

  0   1   2   3   4   5   6   7   8   9
0

1

2

3


Horadric Cube Dimention's:

  0   1   2
0

1

2

3


Stash Dimention's:

  0   1   2   3   4   5
0

1

2

3

4

5

6

7




0x19
Pick Up A Object From Storage

19 74 33 53 AB
(DWORD) Object's ID

Send this packet to pick an object up from a selected location to your mouse curser.
This packet generaly covers most things when it comes to picking an object up for placment in a location.



0x1F
Replace A Storage Object

1F 56 8C F1 E1 C5 0C 1F 62 08 00 00 00 01 00 00 00
(DWORD) New Object's ID
(DWORD) Old Object's ID
(DWORD) Square X
(DWORD) Square Y

Send this packet to replace an object (old object) in your inventory/stash or horadric cube with the object in your curser. (new object)
The result will be the old object being in the mouse curser.
(Do not send this packet to replace objects on a trade screen, as a trade screen does not support object replacment)



0x20
Interact With An Inventory Object

20 87 1F 75 28 17 16 00 00 96 15 00 00
(DWORD) Object's ID
(DWORD) Your Location X
(DWORD) Your Location Y

Send this packet to interact with an item in your inventory.
X and Y must be your X and Y locations for the area your standing on.
This packet will cover things like drinking pots from your inventory, opening your horadric cube, opening a teleport where your standing and activating a identify scroll in the mouse curser.



0x2A
Place An Object In A Horadric Cube

2A 3D 1D 5E EF C8 A1 3D 70
(DWORD) Object's ID
(DWORD) Horadric Cube's ID

Send this packet to remove an item from your mouse curser and drop it into a Horadric cube. (Horadric cube must be closed)



0x50
Drop Gold

50 80 96 25 4E 01 00 00 00
(DWORD) Your Chars Player ID
(DWORD) Gold To Drop

Send this packet to the server to remove gold from your inventory and drop it onto the ground.
You may want to note that trying to drop gold that you dont have will cause a very long realm down.



0x59
Register Town Folk Interaction

59 01 00 00 00 69 2D E2 73 BB 14 00 00 9D 18 00 00
((DWORD) Request ID (0x01)
(DWORD) Town Folk's ID
(DWORD) Your Location X
(DWORD) Your Location Y

Send this packet before sending a 0x13 interaction packet when interacting with a town folk.



0x30
Cancel Twon Folk Interaction

30 01 00 00 00 E1 05 11 14
(DWORD) Request ID (0x01)
(DWORD) Town Folk's ID

Send this packet to stop/cancel/close all interaction's with a town folk.



0x38
Town Folk Interaction Selection

38 01 00 00 00 6E AF 39 3A 00 00 00 00
(DWORD) Request ID
(DWORD) Town Folk's ID
(DWORD) Unknown(0)

Send this packet to accept a desired type of interaction with the town folk.
Make sure the town folk supports/offers the selected type of trading before you send this packet, and make sure you have sent all the other interaction packets before hand.
Request ID's:
0x00 = Imbune An Item (Related to A1 Q5) - (item must be in curser)
0x01 = Accept Trading or Trade/Repair With The Town Folk
0x02 = Accept Gambleing With The Town Folk



0x2F
Finalize Town Folk Interaction Request

2F 01 00 00 00 6E AF 39 3A
(DWORD) Request ID (0x01)
(DWORD) Town Folk's ID

Send this packet after you have sent your other town folk request packets.
Im not sure what this packet is for, but on most town folk, D2 send's it after sending the other interaction packets.



0x26
Drink A Potion From Your Belt

26 99 9B 1C 5E 00 00 00 00 00 00 00 00
(DWORD) Potion's ID
(DWORD) Unknown(0)
(DWORD) Unknown(0)

Send this packet to drink a potion from your belt.



0x24
Move Belt Potion To Mouse Curser

24 AA A2 4B 2F
(DWORD) Potion's ID

Send this packet to Lift a pot from your belt to your mouse curser.



0x23
Place Potion In Belt

23 AA A2 4B 2F 0A 00 00 00
(DWORD) Potion's ID
(DWORD) Belt Slot Number

Send this packet to remove a potion from your mouse curser and place it into your belt.
(Make sure your belt has enough slots for your slot number and that a potion isnt already in its place)
Belt Demention's

12   13   14   15

8    9    10   11

4    5    6    7

0    1    2    3




0x63
Move Potion From Inventory To Belt

63 AA A2 4B 2F
(DWORD) Potion's ID

Send this packet to automaticly move a potion from your inventory to your belt.



0x25
Replace Belt Potion

25 AA A2 4B 2F A8 20 90 BA
(DWORD) Old Potion's ID (to the curser)
(DWORD) New Potion's ID (from the curser)

Send this packet to replace a potion in your belt with the potion in your mouse curser.
(The old potion will be the new object in the mouse curser after you send this packet)



0x1A
Put On A Body Item

1A 9B 85 88 97 04 00 00 00
(DWORD) Object's ID
(WORD) Body Location
(WORD) Unknown(0x00)

Send this packet to place an item from your curser onto your body.
(Make sure the body part you specify has no item on it and supports the style of item your trying to place on it)
Body Location's
0x01 = Hat
0x02 = Amulet
0x03 = Body Armor
0x04 = Left Side Wepon
0x05 = Right Side Wepon
0x06 = Left Side Ring
0x07 = Right Side Ring
0x08 = Belt
0x09 = Boots
0x0A = Golves



0x1D
Replace A Body Item

1D 5F BF 80 1E 03 00 00 00
(DWORD) Object's ID (of the item your now putting onto your body)
(WORD) Body Location
(WORD) Unknown(0x00)

Send this packet to replace an item on your body with an item in your curser.
(The result will be the old item from your body being in the curser)
Body Location's
0x01 = Hat
0x02 = Amulet
0x03 = Body Armor
0x04 = Left Side Wepon
0x05 = Right Side Wepon
0x06 = Left Side Ring
0x07 = Right Side Ring
0x08 = Belt
0x09 = Boots
0x0A = Golves



0x1C
Remove A Body Item

1C 03 00
(WORD) Body Location

Send this packet to remove a body item and place it in the mouse curser.
Body Location's
0x01 = Hat
0x02 = Amulet
0x03 = Body Armor
0x04 = Left Side Wepon
0x05 = Right Side Wepon
0x06 = Left Side Ring
0x07 = Right Side Ring
0x08 = Belt
0x09 = Boots
0x0A = Golves



0x27
Identify An Object

27 5F BF 80 1E E3 AB 1F B0
(DWORD) Object's ID (to use the unidentify scroll on)
(DWORD) Identify Scroll's ID

Send this packet to use a unidentify scroll on a item.
If the item is already unidentifyed then the scroll will be canceled and not used.



0x49
WayPoint Interaction

49 4B 87 58 BC 00 00 00 00
(DWORD) WayPoint's ID
(DWORD) Area ID

Send this packet to go to a new area via the way point.
Make sure your char has the waypoint your trying to go to.

0x00 = Close Waypoint Menu

~~~ Act 1 Waypoints ~~~

0x01 = Rogue Encampment
0x03 = Cold Plains
0x04 = Stony Fields
0x05 = Dark Wood
0x06 = Black Marsh
0x1B = Outer Cloister
0x1D = Jail Level 1
0x20 = Inner Cloister
0x23 = CataCombs Level 2


~~~ Act 2 Waypoints ~~~

0x28 = Lut Gholein
0x30 = Sewers Level 2
0x2A = Dry Hills
0x39 = Halls Of The Dead Level 2
0x2B = Far Oasis
0x2C = Lost City
0x34 = Palace Cellar Level 1
0x4A = Arcain Sanctuary
0x2E = Canyon Of The Magi


~~~ Act 3 Waypoints ~~~

0x4B = Kurast Docks
0x4C = Spider Forest
0x4D = Great Marsh
0x4E = Flayer Jungle
0x4F = Lower Kurast
0x50 = Kurast Bazaar
0x51 = Upper Kurast
0x53 = Travincal
0x65 = Durance Of Hate Level 2


~~~ Act 4 Waypoints ~~~

0x67 = The Pandeminoum Fortress
0x6A = City Of The Damned
0x6B = River Of Flame


~~~ Act 5 Waypoints ~~~

0x6D = Harrogath
0x6F = Frigid Highlands
0x70 = Arreat Plateau
0x71 = Crystalline Passage
0x73 = Glacial Trail
0x7B = Halls Of Pain
0x75 = Frozen Tundra
0x76 = The Ancient's Way
0x81 = Worldstone Keep Level 2




0x4B
Bring Merc In The Waypoint/Teleport

4B 01 00 00 00 36 A8 1A 00
(DWORD) Player Type (0x01)
(DWORD) Merc's ID

Its important to send this packet when ever you change area's useing a waypoint or teleport, to bring your merc with you. (If you have a merc and/or he is alive and with you)
(This only counts for merc's and not summoned helper's)



0xFF
Get D2GS Stats & Stuff

FF 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
(BYTE) 0x01
(BYTE[14]) Unknown

Requests the stats of a closed D2GS.
All responces from the D2GS to this request, will be sent back uncompressed, so keep that in mind while sending this request after you have enterd agame, when you wunder why you're decompression stream brakes.
Altho, depending what data is sent in the request, may very the responce, the responce should generaly be (for the above format);

01 00 00 00 00 01 00 00 00 06 00 08 00 38 00 CA       .............8..
00 FF FF FF 7F FF FF FF 7F 00 C0 80 C5 00 20 47       .............. G
D6 87 13 00 00 BC 21 00 00 44 32 47 53 20 63 6F       ......!..D2GS co
6D 70 69 6C 65 64 20 61 74 20 31 34 3A 33 37 3A       mpiled at 14:37:
30 36 20 6F 6E 20 46 65 62 20 32 30 20 32 30 30       06 on Feb 20 200
37 20 52 45 4C 45 41 53 45 00 00 00 00 00 00 00       7 RELEASE.......
9C FC D5 06 0C 1A 99 6F 00 00 00 47 A8 B5 57 7C       .......o...G..W|
00 00 00 00 00 00 00 00 01 00 00 00 DB B3 57 7C       ..............W|
0C 21 00 00 00 00 00 00 00 00 00 00 79 23 96 6F       .!..........y#.o
0F 97 57 7C 64 24 96 6F E4 88 59 7C 00 00 00 00       ..W|d$.o..Y|....
00 00 00 00 10 27 00 00 E4 19 00 00 00 17 00 00       .....'..........
00 F4 01 00 00 1F 00 00 00 00 04 00 00 04 00 00       ................
00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00       ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00       ................
00 9A 02 00 00 01 00 12 00 01 00 02 00 01 00 00       ................
00 00 00 00 00 00 00 07 00 05 00 01 00 01 00 04       ................
00 00 00 00 00 01 00 01 00 03 00 03 00 00 00 14       ................
00 00 00 09 00 00 00 16 00 00 00 00 00 00 00 00       ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00       ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00       ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00       ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00       ................
00 00 00 00 00                                        .....

The servers uptime is stored as a system time structure just after the 1st byte;

(BYTE) Unknown/0x01 normaly
(BYTE[16]) SYSTEMTIME structure (of this D2GS's current uptime)
etc.

Besides the system time structure of the servers uptime and the compile info string, i've no idea what the other values are, nore had the time/interest needed to probe them :)

|