C>S 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: Client to Server
Options:
In Research
Used By:
Diablo IIDiablo II Lord of Destruction
Message Format:
(does not include protocol header)
(UINT32) Count of open characters
(VOID) [] Character structure

For each character structure:
(STRING) Realm Name (if closed) and Character Name
(UINT8) Unknown B1
(UINT8) Unknown B2
(UINT8) Helm GFX
(UINT8) Body GFX
(UINT8) Leg GFX
(UINT8) Left Hand Weapon
(UINT8) Left Hand GFX
(UINT8) Right Hand Weapon
(UINT8) Right Hand GFX
(UINT8) Unknown B3
(UINT8) Unknown B4
(UINT8) Unknown B5
(UINT8) Unknown B6
(UINT8) Unknown B7
(UINT8) Unknown B8
(UINT8) Unknown B9
(UINT8) Unknown B10
(UINT8) Unknown B11
(UINT8) Class
(UINT32) Unknown DW1
(UINT32) Unknown DW2
(UINT32) Unknown DW3
(UINT32) Unknown DW4
(UINT8) Level
(UINT8) Status
(UINT8) Title
(UINT8) Unknown B13
(UINT8) Emblem BGC
(UINT8) Emblem FGC
(UINT8) Emblem Number
(UINT8) Unknown B14
(STRING) Guild Tag (max length: 3)

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.