S>C 0x37 SID_UNKNOWN_37
Transport Layer:
Transmission Control Protocol (TCP)
Application Layer:
Battle.net v1 TCP Messages (SID)
Message Id:
0x37
Message Name:
SID_UNKNOWN_37
Direction:
Server to Client
Options:
In Research
In Research
Used By:
Diablo IIDiablo II Lord of Destruction
Message Format:
(does not include protocol header)
(does not include protocol header)
(UINT32) Unknown 1
(UINT32) Unknown 2
(UINT32) Count of characters
For each character:
(see related C>S packet for struct)
Remarks
Not much is known about this packet, its structure and its documentation was taken from PvPGN.
The collected information can be found here and below, which includes possible values for the packet format.
#define CLIENT_UNKNOWN_37 0x37ff
typedef struct /* character list request, character list upload? */
{
t_bnet_header h;
bn_int opencount; /* Number of OPEN characters on user's machine! */
/* Always zero for "closed" connections. */
/* unknown2 */ /* subsequent blocks of t_d2char_info or something */
/* similar, so server could read this list and */
/* include in the 0x37ff reply as a choice (this */
/* makes sense cuz the server does NOT store open */
/* character details - this also explains why */
/* unknown1 is always 0 in the beta, and the 0x00 */
/* of unknown2 acts as a EOF when client read the */
/* t_d2char_info structures */
} PACKED_ATTR() t_client_unknown_37;
/******************************************************/
/******************************************************/
/*
FF 37 01 01 00 00 00 00 08 00 00 00 04 00 00 00 .7..............
42 65 74 61 57 65 73 74 2C 4D 6F 4E 6B 00 87 80 BetaWest,MoNk...
06 01 01 01 01 50 FF FF 02 02 FF FF FF FF FF FF .....P..........
02 49 50 50 50 50 FF FF FF 50 50 FF FF FF FF FF .IPPPP...PP.....
FF 14 88 82 80 80 FF FF FF 00 42 65 74 61 57 65 ..........BetaWe
73 74 2C 4D 6F 4E 6B 2D 65 00 83 80 05 02 02 01 st,MoNk-e.......
01 2B FF 1B 02 02 FF FF FF FF FF FF 03 FF FF FF .+..............
FF FF FF FF A8 FF FF FF FF FF FF FF FF 10 80 82 ................
80 80 FF FF FF 00 42 65 74 61 57 65 73 74 2C 4D ......BetaWest,M
6F 4E 6B 2D 65 65 00 83 80 06 01 01 01 01 FF 4C oNk-ee.........L
FF 02 02 FF FF FF FF FF FF 01 FF 48 48 48 48 FF ...........HHHH.
A6 FF 48 48 FF FF FF FF FF FF 0F 80 80 80 80 FF ..HH............
FF FF 00 42 65 74 61 57 65 73 74 2C 4D 6F 4E 6B ...BetaWest,MoNk
2D 74 77 6F 00 87 80 01 01 01 01 01 FF FF FF 01 -two............
01 FF FF FF FF FF FF 02 FF FF FF FF FF FF FF FF ................
FF FF FF FF FF FF FF FF 01 84 80 FF FF FF 80 80 ................
00 .
^-- 1: (BetaWest) MoNk
2: (BetaWest) MoNk-e
3: (BetaWest) MoNk-ee
4: (BetaWest) MoNk-two
ff 37 4e 00 00 00 00 00 08 00 00 00 01 00 00 00 .7N.............
42 65 74 61 57 65 73 74 2c 4c 69 66 65 6c 69 6b BetaWest,Lifelik
65 00 87 80 01 01 01 01 01 ff ff ff 01 01 ff ff e...............
ff ff ff ff 03 ff ff ff ff ff ff ff ff ff ff ff ................
ff ff ff ff ff 01 80 80 ff ff ff 80 80 00 ..............
ff 37 4e 00 00 00 00 00 08 00 00 00 01 00 00 00 .7N.............
42 65 74 61 57 65 73 74 2c 51 6c 65 78 54 45 53 BetaWest,QlexTES
54 00 83 80 ff ff ff ff ff 30 ff 1b ff ff ff ff T........0......
ff ff ff ff 04 ff ff ff ff ff ff ff ff ff ff ff ................
ff ff ff ff ff 01 80 80 80 80 ff ff ff 00 ..............
from bnetd-0.3.23pre18 to Diablo II 1.03
"Char1 {BNE}" [lvl 20, amaz]
"Char2 {BNE}" [lvl 21, sorc]
"Char3 {BNE}" [lvl 22, necro]
FF 37 D9 00 00 00 00 00 08 00 00 00 03 00 Gv.7............
00 00 51 61 72 61 74 68 52 65 61 6C 6D 2C 43 68 ..QarathRealm,Ch
61 72 31 00 87 80 01 01 01 01 01 01 01 01 01 01 ar1.............
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 ................
01 01 01 01 01 01 01 14 85 86 01 FF FF FF FF 42 ...............B
4E 45 54 44 00 51 61 72 61 74 68 52 65 61 6C 6d NETD.QarathRealm
2C 43 68 61 72 32 00 87 80 01 01 01 01 01 01 01 ,Char2..........
01 01 01 01 01 01 01 01 01 02 01 01 01 01 01 01 ................
01 01 01 01 01 01 01 01 01 01 15 85 86 01 FF FF ................
FF FF 42 4E 45 54 44 00 51 61 72 61 74 68 52 65 ..BNETD.QarathRe
61 6C 6D 2C 43 68 61 72 33 00 87 80 01 01 01 01 alm,Char3.......
01 01 01 01 01 01 01 01 01 01 01 01 03 01 01 01 ................
01 01 01 01 01 01 01 01 01 01 01 01 01 16 85 86 ................
01 FF FF FF FF 42 4E 45 54 44 00 .....BNETD.
*/
#define SERVER_UNKNOWN_37 0x37ff
typedef struct /* character list reply? */
{
t_bnet_header h;
bn_int unknown1;
bn_int unknown2; /* _bucky_: max chars allowed? */
bn_int count; /* # of chars, same number of */
/* t_char_info to follow in */
/* packet */
/* d2char_info blocks */
} PACKED_ATTR() t_server_unknown_37;
#define SERVER_UNKNOWN_37_UNKNOWN1 0x00000000
#define SERVER_UNKNOWN_37_UNKNOWN2 0x00000008
/* The ONLY 0x00 that should appear should be the terminating NUL for */
/* the character name string and the guild tag string, they're used as */
/* delimiters to separate character name and the character structure */
/* If you got any other NUL's in here the next character's info will */
/* be royally fucked up - using 0x01 or 0xff for unknowns seem to work */
/* well */
typedef struct
{
/* "RealmName,CharacterName" - for closed characters */
/* - OR - */
/* "CharacterName" - for open characters */
/* - strlen(CharacterName) must be <= 15 - */
bn_byte unknownb1; /* 0x83, 0x87? */
bn_byte unknownb2; /* 0x80...? */
bn_byte helmgfx;
bn_byte bodygfx;
bn_byte leggfx;
bn_byte lhandweapon;
bn_byte lhandgfx;
bn_byte rhandweapon;
/* Partial weapon code list:
0x2f: 1H Axe
0x30: 1H Sword
0x50: 2H Staff
0x51: Another 2H Staff
0x52: Another 2H Staff
0x53: Another 2H Staff
0x54: 2H Axe
0x55: Scythe
0x56: empty?
0x57: Another 2H Axe
0x58: Halberd?
0x59: empty?
0x5a: Another 2H Axe
0x5b: Another Halberd
0x5c: empty?
0x5d: 1H club?
0x5e: empty?
0x5f: empty?
*/
bn_byte rhandgfx;
bn_byte unknownb3;
bn_byte unknownb4;
bn_byte unknownb5;
bn_byte unknownb6;
bn_byte unknownb7;
bn_byte unknownb8;
bn_byte unknownb9;
bn_byte unknownb10;
bn_byte unknownb11;
bn_byte class; /* 0x01=Amazon, 0x02=Sor, 0x03=Nec, 0x04=Pal, 0x05=Bar */
bn_int unknown1;
bn_int unknown2;
bn_int unknown3;
bn_int unknown4;
bn_byte level; /* yes, byte, not short/int/long */
bn_byte status; /* 0x01-03 = Norm & alive */
/* 0x04-07 = HC & alive */
/* 0x08-0b = Norm & "dead"? */
/* 0x0c+ = HC & dead, chat only */
/* Add 0x80 to get same effect */
bn_byte title; /* 0x01=none
0x02=Sir/Dame?
0x03=Sir/Dame?
0x04=Lord?
0x05=Lord?
0x06=Baron?
0x07=Baron? */
/* Same codes for HC chars */
/* Add 0x80 to get same effect */
bn_byte unknownb13;
bn_byte emblembgc; /* Guild emblem background colour */
bn_byte emblemfgc; /* Guild emblem foreground colour */
bn_byte emblemnum; /* Guild emblem type number */
/* emblem number corresponds to D2DATA.MPQ/data/global/ui/Emblems/iconXXa.dc6 */
/* where XX = emblem number - 1 (ie, 0x0A corresponds to icon09a.dc6) use */
/* for dummy values seem safe... 0x01 won't work, you'll get an emblem... */
bn_byte unknownb14;
/* Guild Tag */ /* must not be longer than 3 chars */
} PACKED_ATTR() t_d2char_info;
#define D2CHAR_INFO_UNKNOWNB1 0x83
#define D2CHAR_INFO_UNKNOWNB2 0x80
#define D2CHAR_INFO_FILLER 0xff /* non-zero padding */
#define D2CHAR_INFO_CLASS_AMAZON 0x01
#define D2CHAR_INFO_CLASS_SORCERESS 0x02
#define D2CHAR_INFO_CLASS_NECROMANCER 0x03
#define D2CHAR_INFO_CLASS_PALADIN 0x04
#define D2CHAR_INFO_CLASS_BARBARIAN 0x05
#define D2CHAR_INFO_CLASS_DRUID 0x06
#define D2CHAR_INFO_CLASS_ASSASSIN 0x07
/******************************************************/
🔖diablo-iidiablo-ii-lord-of-destruction
| Edited:
xboi209
Comments
no one has commented yet.