Valhalla Legends Forums Archive | Battle.net Bot Development | MCP 0x17

AuthorMessageTime
Tass
When you request the character list and you do not check for expansion and your on classic, if you try to login with a exp char when ur only on classic key, where in the packet data does it tell you classic or expansion?
November 27, 2005, 10:58 PM
LivedKrad
Since I don't have Diablo 2 installed, I can't delve into this any further. However, until I or someone else (or perhaps you?) figure it out, BnetDocs's documentation of the request packet seems to have someone's listed data for each character type. I suppose you could just look for those hex constants until the former is revised?
November 28, 2005, 1:27 AM
HdxBmx27
Just note, you cant packet log D2, Nither classic or expansion use 0x17 any more. Both use 0x19. And so should you.
~-~(HDX)~-~
November 28, 2005, 2:56 AM
Tass
I have already packet logged it and I can't find out where or what to parse that's why I'm posting here..

here's what I'v come up with meh

7E 01 17 08 00 08 00 00 00 08 00 54 61 73 73 54 65 73 74 00 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 81 80 80 80 FF FF FF 00 54 65 73 74 54 65 73 74 45 78 70 00 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 A1 80 80 80 FF FF FF 00 54 61 73 73 54 65 78 74 48 43 00 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 85 80 80 80 FF FF FF 00 54 61 73 73 54 65 78 74 48 63 45 78 70 00 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 A5 80 80 80 FF FF FF 00 54 61 73 73 54 65 73 74 4C 61 64 00 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 C1 80 80 80 03 FF FF 00 54 61 73 73 54 65 73 74 45 78 70 4C 61 64 00 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 E1 80 80 80 03 FF FF 00 54 61 73 73 54 65 73 74 41 6C 6C 00 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 E5 80 80 80 03 FF FF 00 54 61 73 73 54 65 73 74 48 43 4C 41 44 00 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 C5 80 80 80 03 FF FF 00

Classic
Flags: 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 81 80 80 80 FF FF FF

Expansion
Flags: 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 A1 80 80 80 FF FF FF

Hardcore Classic
Flags: 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 85 80 80 80 FF FF FF

Ladder Classic
Flags: 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 C1 80 80 80 03 FF FF

Hardcore Expansion
Flags: 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 A5 80 80 80 FF FF FF

Expansion Ladder
Flags: 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 E1 80 80 80 03 FF FF

Hardcore Expansion Ladder
Flags: 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 E5 80 80 80 03 FF FF

Hardcore Ladder Classic
Flags: 84 80 FF FF FF FF FF FF FF FF FF FF FF 05 FF FF FF FF FF FF FF FF FF FF FF 01 C5 80 80 80 03 FF FF
November 28, 2005, 3:19 AM
Ringo
hmm, i cant seem to find my research on d2 statstrings.
The statstring is exacly the same as the statstring found in BNCS chat event packets (0x0F).
I was making a realm server while back, but never got round to writieng down all the values (i think iago has done some of them already) but it might come in handy for this kinda thing:
[code]
Msg = Msg & Chr(&H84) 'unknown
Msg = Msg & Chr(&H80) 'unknown
       
Msg = Msg & Chr(&HFF) 'helm
Msg = Msg & Chr(&HFF) 'chest armor
Msg = Msg & Chr(&HFF) 'leg armor
Msg = Msg & Chr(&HFF) 'Chars right arm armor
Msg = Msg & Chr(&HFF) 'Chars left arm armor
Msg = Msg & Chr(5)    'Chars right hand wepon
Msg = Msg & Chr(&HFF) 'Chars left hand wepon
Msg = Msg & Chr(&H4F) 'Chars left hand shield
Msg = Msg & Chr(&HFF) 'Chars Right sholder pad
Msg = Msg & Chr(&HFF) 'Chars left sholder pad
Msg = Msg & Chr(&HFF) 'unknown
Msg = Msg & Chr(5)    'Char Type
Msg = Msg & Chr(&HFF) 'hair color
Msg = Msg & Chr(&HFF) 'chest color
Msg = Msg & Chr(&HFF) 'Leg Color
Msg = Msg & Chr(&HFF) 'Chars Right arm Color
Msg = Msg & Chr(&HFF) 'Chars Left arm color
Msg = Msg & Chr(&HFF) 'Chars right hand wepon color
Msg = Msg & Chr(&HFF) 'Chars left Hand Wepon color
Msg = Msg & Chr(&HFF) 'Chars left hand shield color
Msg = Msg & Chr(&HFF) 'Chars Right sholder pad color
Msg = Msg & Chr(&HFF) 'Chars left sholder pad Color
Msg = Msg & Chr(&HFF) 'unknown
Msg = Msg & Chr(1)    'Char level
Msg = Msg & Chr(&HE4) 'Char flags
Msg = Msg & Chr(&H80) 'Char flags
Msg = Msg & Chr(&HFF) 'unknown
Msg = Msg & Chr(&HFF) 'unknown
Msg = Msg & Chr(3)    'ladder
Msg = Msg & Chr(&HFF) 'unknown
Msg = Msg & Chr(&HFF) 'unknown
[/code]
Most/all of the general infomation about the char can be found in the char flags bytes, but to extract the basic infomation from the statstring, you can do it somthing like this:
[code]
'SS = the d2 statstring
Dim CharType as integer
Dim CharLvL as Integer
Dim IsHC as Boolean
Dim IsDead as Boolean
Dim IsLadder  as Boolean
CharType = Asc(Mid(SS, 14, 1))
CharLvL = Asc(Mid(SS, 26, 1))
IsHC = Asc(Mid(SS, 27, 1)) And 4
IsDead  = Asc(Mid(SS, 27, 1)) And 8
IsLadder = Asc(Mid(SS, 31, 1)) < &HFF
[/code]

If i can find the charflag values on my PC, i will post them.
Hope this helps
November 28, 2005, 12:59 PM
Tass
I know all this, thank you for posting. But how do you tell if the character is expansion or regular classic? If you try to login on a expansion character on a d2dv cdkey you get temp ipban from MCP :P
November 28, 2005, 3:59 PM
LivedKrad
[quote author=LivedKrad.fe link=topic=13363.msg135512#msg135512 date=1133141251]
I suppose you could just look for those hex constants until the former is revised?
[/quote]

http://bnetdocs.valhallalegends.com/content.php?Section=m&Code=102

Also, Hdx is right in saying that the Blizzard-made Diablo 2 client loader cannot be packet logged (due to it being a service). However, simply using another graphics engine loader would suffice to be a useful method to packet log (e.g.: d2loader). I also agree with him when he says you should use the packets that the client uses. When you emulate some protocol, it is best to emulate it as closely as possible so as to keep the connection running happily and smoothly.
November 28, 2005, 9:39 PM
Tass
Well you don't even need to packet log d2 or even d2loader because simply you can just send 0x17 or 0x19 and get the flags.. so why do extra work that needed, What I'm saying is I can't figure out where the flags for class/expansion are..
November 28, 2005, 9:59 PM
LivedKrad
This will be the third time I've told you. It would seem to me that a quick (but not as emulative) solution would be to check for the hex constants inside of the packet once you receive it. Posts upon posts and replies upon replies on BnetDocs and on the forums have revealed that the flags for each product & character mode are constant. Therefore, you can set up a switch control statement to check for each of these flag constants and act upon them. Since I'm assuming you prefer Visual Basic, I'll give this a try:

[code]
Select Case flagsrecv 'make this an Integer type

Case &H8101 'classic
  'act accordingly
Case &HA101 'expansion
  '...

End Select
[/code]

Edit: BTW, you should know that I set up that switch based on the message dump that you provided. If you're wondering where exactly I got those constants, I simply looked in the location that the flags are supposed to be located based on BnetDocs's information. Your reply says that you can't figure out where the flags are? Why? BnetDocs tells you exactly where they are and so do the comments posted under the message information. You even supplied the correct location for where to find the flags information. Personally, I think this question is answered unless I've done something totally wrong and therefore won't provide anything more.
November 28, 2005, 11:33 PM
Ringo
I cant find my research, i will fire up my realm server and get it abit later if you dont understand what LivedKrad was saying.
I think*Classic / LOD flag is 0x40 in d2 statstrings? (or is that realm ladder idk)


[EDIT]:
[code]
Dim IsLOD as boolean
IsLOD  = Asc(Mid(SS, 27, 1)) And 32
[/code]
Its 0x20
November 29, 2005, 1:18 AM
Tass
I diden't understand what you were saying.. Now I do  :-\
November 29, 2005, 3:14 PM

Search