1 /* 2 * Copyright (C) 1998 Mark Baysinger (mbaysing@ucsd.edu) 3 * Copyright (C) 1998,1999,2000 Ross Combs (rocombs@cs.nmsu.edu) 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License 7 * as published by the Free Software Foundation; either version 2 8 * of the License, or (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 */ 19 #ifndef INCLUDED_BNET_PROTOCOL_TYPES 20 #define INCLUDED_BNET_PROTOCOL_TYPES 21 22 #ifdef JUST_NEED_TYPES 23 # include "common/bn_type.h" 24 #else 25 # define JUST_NEED_TYPES 26 # include "common/bn_type.h" 27 # undef JUST_NEED_TYPES 28 #endif 29 30 /* 31 * The "bnet" protocol (previously known as "normal") that is used for 32 * chatting, ladder info, game listings, etc. 33 * FIXME: put the #define's into the PROTO section 34 */ 35 36 37 /******************************************************/ 38 typedef struct 39 { 40 bn_short type; 41 bn_short size; 42 } PACKED_ATTR() t_bnet_header; 43 /******************************************************/ 44 45 /* [zap-zero] 20020529 - added support for war3 anongame routing packets */ 46 /******************************************************/ 47 typedef struct 48 { 49 bn_short type; 50 bn_short size; 51 } PACKED_ATTR() t_w3route_header; 52 /******************************************************/ 53 54 55 /******************************************************/ 56 typedef struct 57 { 58 t_bnet_header h; 59 } PACKED_ATTR() t_bnet_generic; 60 /******************************************************/ 61 62 /******************************************************/ 63 typedef struct 64 { 65 t_w3route_header h; 66 } PACKED_ATTR() t_w3route_generic; 67 /******************************************************/ 68 69 /* for unhandled pmap packets */ 70 #define CLIENT_NULL 0xfeff 71 72 73 /******************************************************/ 74 /* 75 14: recv class=w3route[0x0c] type=unknown[0x00f7] length=53 76 0000: F7 1E 35 00 02 02 00 00 68 BF 0B 08 00 E0 17 01 ..5.....h....... 77 0010: 00 00 00 42 6C 61 63 6B 72 61 74 00 08 81 3E 0C ...Blackrat...>. 78 0020: 00 20 00 00 00 02 00 17 E1 C0 A8 00 01 00 00 00 . .............. 79 0030: 00 00 00 00 00 ..... 80 */ 81 #define CLIENT_W3ROUTE_REQ 0x1ef7 82 typedef struct 83 { 84 t_w3route_header h; 85 bn_int unknown1; 86 bn_int id; /* unique id sent by server */ 87 bn_byte unknown2; 88 bn_short port; 89 bn_int handle; /* handle/descriptor for client <-> client communication */ 90 /* player name, ... */ 91 } PACKED_ATTR() t_client_w3route_req; 92 /******************************************************/ 93 94 95 96 /******************************************************/ 97 /* 98 f7 23 04 00 99 */ 100 #define CLIENT_W3ROUTE_LOADINGDONE 0x23f7 101 typedef struct 102 { 103 t_w3route_header h; 104 } PACKED_ATTR() t_client_w3route_loadingdone; 105 /******************************************************/ 106 107 108 /******************************************************/ 109 /* 110 f7 14 05 00 00 111 */ 112 #define SERVER_W3ROUTE_READY 0x14f7 113 typedef struct 114 { 115 t_w3route_header h; 116 bn_byte unknown1; 117 } PACKED_ATTR() t_server_w3route_ready; 118 /******************************************************/ 119 120 121 /******************************************************/ 122 /* 123 f7 21 08 00 01 00 00 00 124 */ 125 126 #define CLIENT_W3ROUTE_ABORT 0x21f7 127 128 typedef struct 129 { 130 t_w3route_header h; 131 bn_int unknown1; /* count? */ 132 } PACKED_ATTR() t_client_w3route_abort; 133 134 /******************************************************/ 135 /* 136 f7 08 05 00 02 137 */ 138 #define SERVER_W3ROUTE_LOADINGACK 0x08f7 139 typedef struct 140 { 141 t_w3route_header h; 142 bn_byte playernum; 143 } PACKED_ATTR() t_server_w3route_loadingack; 144 /******************************************************/ 145 146 147 /******************************************************/ 148 /* 149 f7 3b 06 00 09 00 150 */ 151 #define CLIENT_W3ROUTE_CONNECTED 0x3bf7 152 typedef struct 153 { 154 t_w3route_header h; 155 bn_short unknown1; 156 } PACKED_ATTR() t_client_w3route_connected; 157 /******************************************************/ 158 159 /******************************************************/ 160 /* 161 f7 01 08 00 2e 85 2d 7b 162 */ 163 #define SERVER_W3ROUTE_ECHOREQ 0x01f7 164 typedef struct 165 { 166 t_w3route_header h; 167 bn_int ticks; 168 } PACKED_ATTR() t_server_w3route_echoreq; 169 /******************************************************/ 170 171 172 #define CLIENT_W3ROUTE_ECHOREPLY 0x46f7 173 174 175 /******************************************************/ 176 /* 177 13: recv class=w3route[0x0c] type=unknown[0x2ef7] length=107 178 0000: F7 2E 6B 00 01 01 03 00 00 00 20 00 00 00 5C 01 ..k....... ...\. 179 0010: 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 1A ................ 180 0020: 04 00 00 00 00 00 00 00 00 00 00 05 00 00 00 00 ................ 181 0030: 00 00 00 01 00 00 00 00 00 00 00 05 00 00 00 00 ................ 182 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 183 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 184 0060: 00 00 00 00 00 00 00 00 00 00 00 ........... 185 */ 186 #define CLIENT_W3ROUTE_GAMERESULT 0x2ef7 187 /* 188 F7 3A-84 00 02 01 04 00 00 00 189 0x0040 20 00 00 00 83 09 00 00-00 00 00 00 02 03 00 00 190 0x0050 00 20 00 00 00 2C 01 00-00 00 00 00 00 5C 04 00 191 0x0060 00 00 03 00 00 00 00 00-00 00 01 00 00 00 CC 0B 192 0x0070 00 00 00 00 00 00 72 0B-00 00 0E 00 00 00 00 00 193 0x0080 00 00 04 00 00 00 01 00-00 00 15 00 00 00 00 00 194 0x0090 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 195 0x00A0 00 00 46 0A 00 00 2C 01-00 00 00 00 00 00 00 00 196 0x00B0 00 00 00 00 00 00 00 00-00 00 197 198 F7 3A-84 00 02 02 03 00 00 00 199 0x0040 20 00 00 00 2C 01 00 00-00 00 00 00 01 04 00 00 200 0x0050 00 20 00 00 00 83 09 00-00 00 00 00 00 5C 04 00 201 0x0060 00 00 01 00 00 00 01 00-00 00 00 00 00 00 39 03 202 0x0070 00 00 00 00 00 00 00 00-00 00 05 00 00 00 00 00 203 0x0080 00 00 01 00 00 00 00 00-00 00 05 00 00 00 00 00 204 0x0090 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 205 0x00A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 206 0x00B0 00 00 00 00 00 00 00 00-00 00 207 */ 208 209 #define CLIENT_W3ROUTE_GAMERESULT_W3XP 0x3af7 210 typedef struct 211 { 212 t_w3route_header h; 213 bn_byte number_of_results; 214 /* 215 t_client_w3route_gameresult_player players[]; 1-n times 216 t_client_w3route_gameresult_part2 part2; 217 t_client_w3route_gameresult_hero heroes[]; 0-n times 218 t_client_w3route_gameresult_part3 part3; */ 219 } PACKED_ATTR() t_client_w3route_gameresult; 220 /******************************************************/ 221 222 /* [zap-zero] what value is DRAW? */ 223 #define W3_GAMERESULT_LOSS 0x00000003 224 #define W3_GAMERESULT_WIN 0x00000004 225 226 typedef struct 227 { 228 bn_byte number; 229 bn_int result; 230 bn_int race; 231 bn_int unknown1; 232 bn_int unknown2; 233 } PACKED_ATTR() t_client_w3route_gameresult_player; 234 235 typedef struct 236 { 237 bn_byte unknown0; /* but could also contain info about result */ 238 bn_int unknown1; 239 bn_int unknown2; 240 bn_int unknown3; 241 bn_int unknown4; 242 bn_int unit_score; 243 bn_int heroes_score; 244 bn_int resource_score; 245 bn_int units_produced; 246 bn_int units_killed; 247 bn_int buildings_produced; 248 bn_int buildings_razed; 249 bn_int largest_army; 250 bn_int heroes_used_count; 251 } PACKED_ATTR() t_client_w3route_gameresult_part2; 252 253 typedef struct 254 { 255 bn_short level; 256 bn_int race_and_name; 257 bn_int hero_xp; 258 } PACKED_ATTR() t_client_w3route_gameresult_hero; 259 260 typedef struct 261 { 262 bn_int heroes_killed; 263 bn_int items_obtained; 264 bn_int mercenaries_hired; 265 bn_int total_hero_xp; 266 bn_int gold_mined; 267 bn_int lumber_harvested; 268 bn_int resources_traded_given; 269 bn_int resources_traded_taken; 270 bn_int tech_percentage; 271 bn_int gold_lost_to_upkeep; 272 } PACKED_ATTR() t_client_w3route_gameresult_part3; 273 274 /******************************************************/ 275 /* 276 f7 04 1e 00 07 00 00 b2 72 76 ..............rv 277 0040 ec cc cc 02 02 00 04 0b d9 e9 5f ac 00 00 00 00 .........._..... 278 0050 00 00 00 00 .... 279 */ 280 #define SERVER_W3ROUTE_ACK 0x04f7 281 typedef struct 282 { 283 t_w3route_header h; 284 bn_byte unknown1; /* 07 */ 285 bn_short unknown2; /* 00 00 */ 286 bn_int unknown3; /* random stuff */ 287 bn_short unknown4; /* cc cc */ 288 bn_byte playernum; /* 1-4 */ 289 bn_short unknown5; /* 0x0002 */ 290 bn_short port; /* client port */ 291 bn_int ip; /* client ip */ 292 bn_int unknown7; /* 00 00 00 00 */ 293 bn_int unknown8; /* 00 00 00 00 */ 294 } PACKED_ATTR() t_server_w3route_ack; 295 /******************************************************/ 296 297 #define SERVER_W3ROUTE_ACK_UNKNOWN3 0x484e2637 298 299 /******************************************************/ 300 /* 301 f7 06 3b 00 01 00 00 00 01 ** ........;......P 302 0040 ** ** ** ** ** ** ** 00 08 2d 09 9d 04 08 00 00 layer00..-...... 303 0050 00 02 00 17 e0 [censored] 00 00 00 00 00 00 00 .......g........ 304 0060 00 02 00 17 e0 [censored] 00 00 00 00 00 00 00 .......g........ 305 0070 00 306 307 */ 308 #define SERVER_W3ROUTE_PLAYERINFO 0x06f7 309 typedef struct 310 { 311 t_w3route_header h; 312 bn_int handle; 313 bn_byte playernum; 314 /* then: 315 opponent name 316 playerinfo2 317 playerinfo_addr (external addr) 318 playerinfo_addr (local lan addr) 319 */ 320 } PACKED_ATTR() t_server_w3route_playerinfo; 321 322 typedef struct 323 { 324 bn_byte unknown1; /* 8 (length?) */ 325 bn_int id; /* id from FINDANONGAME_SEARCH packet */ 326 bn_int race; /* see defines */ 327 } PACKED_ATTR() t_server_w3route_playerinfo2; 328 329 #define SERVER_W3ROUTE_LEVELINFO 0x47f7 330 typedef struct 331 { 332 t_w3route_header h; 333 bn_byte numplayers; 334 /* then: levelinfo2 for each player */ 335 } PACKED_ATTR() t_server_w3route_levelinfo; 336 337 typedef struct 338 { 339 bn_byte plnum; 340 bn_byte unknown1; /* 3 (length?) */ 341 bn_byte level; 342 bn_short unknown2; 343 } PACKED_ATTR() t_server_w3route_levelinfo2; 344 345 346 typedef struct 347 { 348 bn_short unknown1; /* 2 */ 349 bn_short port; 350 bn_int ip; 351 bn_int unknown2; /* 0 */ 352 bn_int unknown3; /* 0 */ 353 } PACKED_ATTR() t_server_w3route_playerinfo_addr; 354 355 356 typedef struct 357 { 358 t_w3route_header h; /* f7 0a 04 00 */ 359 } PACKED_ATTR() t_server_w3route_startgame1; 360 #define SERVER_W3ROUTE_STARTGAME1 0x0af7 361 362 typedef struct 363 { 364 t_w3route_header h; /* f7 0b 04 00 */ 365 } PACKED_ATTR() t_server_w3route_startgame2; 366 #define SERVER_W3ROUTE_STARTGAME2 0x0bf7 367 368 /*******************************************************/ 369 /* 370 ALL ANONGAME PACKET INFO (0x44ff) MOVED TO anongame_protocol.h 371 [Omega] 372 */ 373 /******************************************************/ 374 /* 375 These two dumps are from the original unpatched Starcraft client: 376 377 FF 05 28 00 01 00 00 00 ..(..... 378 D1 43 88 AA DA 9D 1B 00 9A F7 69 AB 4A 41 32 30 .C........i.JA20 379 35 43 2D 30 34 00 6C 61 62 61 73 73 69 73 74 00 5C-04.labassist. 380 381 FF 05 24 00 01 00 00 00 D1 43 88 AA DA 9D 1B 00 ..$......C...... 382 9A F7 69 AB 42 4F 42 20 20 20 20 20 20 20 20 00 ..i.BOB . 383 42 6F 62 00 Bob. 384 385 ??? note it sends NO host and user strings 386 FF 05 14 00 01 00 00 00 D8 94 F6 07 B3 2C 6E 02 .............,n. 387 B4 E0 3B 6C ..;l 388 ??? sent right after it... request for session key? 389 FF 28 08 00 F6 0F 08 00 .(...... 390 391 Diablo II 1.03 ... note it sends NO host and user strings 392 FF 05 14 00 01 00 00 00 D1 43 88 AA DA 9D ...... ...C.... 393 1B 00 9A F7 69 AB ....i. 394 */ 395 #define CLIENT_COMPINFO1 0x05ff 396 typedef struct 397 { 398 t_bnet_header h; 399 bn_int reg_version; /* 01 00 00 00 */ 400 bn_int reg_auth; /* D1 43 88 AA */ /* looks like server ip */ 401 bn_int client_id; /* DA 9D 1B 00 */ 402 bn_int client_token; /* 9A F7 69 AB */ 403 /* host */ /* optional */ 404 /* user */ /* optional */ 405 } PACKED_ATTR() t_client_compinfo1; 406 #define CLIENT_COMPINFO1_REG_VERSION 0x00000001 407 #define CLIENT_COMPINFO1_REG_AUTH 0xaa8843d1 408 #define CLIENT_COMPINFO1_CLIENT_ID 0x001b9dda 409 #define CLIENT_COMPINFO1_CLIENT_TOKEN 0xab69f79a 410 /******************************************************/ 411 412 413 /******************************************************/ 414 /* 415 CLIENT_COMPINFO2 was first seen in Starcraft 1.05 416 417 FF 1E 24 00 01 00 00 00 ..$..... 418 01 00 00 00 D1 43 88 AA 1C B9 48 00 31 8A F2 89 .....C....H.1... 419 43 4C 4F 55 44 00 63 6C 6F 75 64 00 CLOUD.cloud. 420 421 FF 1E 28 00 01 00 00 00 01 00 00 00 D1 43 88 AA ..(..........C.. 422 DA 9D 1B 00 9A F7 69 AB 42 4F 42 20 20 20 20 20 ......i.BOB 423 20 20 20 00 42 6F 62 00 .Bob. 424 425 Diablo II 1.03 ... note it sends empty host and user strings 426 FF 1E 1A 00 01 00 00 00 01 00 00 00 D1 43 ............C 427 88 AA DA 9D 1B 00 9A F7 69 AB 00 00 .......i... 428 */ 429 #define CLIENT_COMPINFO2 0x1eff 430 typedef struct 431 { 432 t_bnet_header h; 433 bn_int unknown1; /* 01 00 00 00 */ /* ??? Version */ 434 bn_int reg_version; /* 01 00 00 00 */ 435 bn_int reg_auth; /* D1 43 88 AA */ /* looks like server ip */ 436 bn_int client_id; /* 1C B9 48 00 */ /* DA 9D 1B 00 */ 437 bn_int client_token; /* 31 8A f2 89 */ /* 9A F7 69 AB */ 438 /* host */ 439 /* user */ 440 } PACKED_ATTR() t_client_compinfo2; 441 #define CLIENT_COMPINFO2_UNKNOWN1 0x00000001 442 #define CLIENT_COMPINFO2_REG_VERSION 0x00000001 443 #define CLIENT_COMPINFO2_REG_AUTH 0xaa8843d1 444 #define CLIENT_COMPINFO2_CLIENT_ID 0x001b9dda 445 #define CLIENT_COMPINFO2_CLIENT_TOKEN 0xab69f79a 446 /******************************************************/ 447 448 449 /******************************************************/ 450 /* 451 Sent in response to CLIENT_COMPINFO[12] along with sessionkey 452 453 FF 05 14 00 01 00 00 00 ........ 454 D1 43 88 AA 1C B9 48 00 31 8A F2 89 .C....H.1... 455 456 FF 05 14 00 01 00 00 00 D8 94 F6 07 3F 62 6E 02 ............?bn. 457 CA A4 0D 99 .... 458 459 FF 05 14 00 01 00 00 00 D8 94 F6 07 B3 2C 6E 02 .............,n. 460 B4 E0 3B 6C ..;l 461 462 To D2 Beta 1.02: 463 FF 05 14 00 01 00 00 00 D1 43 88 AA 42 8D 2E 02 .........C..B... 464 2B 81 8C 2B +..+ 465 */ 466 #define SERVER_COMPREPLY 0x05ff 467 typedef struct 468 { 469 t_bnet_header h; 470 bn_int reg_version; /* 01 00 00 00 */ 471 bn_int reg_auth; /* D1 43 88 AA */ /* looks like server ip */ 472 bn_int client_id; /* DA 9D 1B 00 */ /* 1C B9 48 00 */ 473 bn_int client_token; /* 9A F7 69 AB */ /* 31 8A F2 89 */ 474 } PACKED_ATTR() t_server_compreply; 475 #define SERVER_COMPREPLY_REG_VERSION 0x00000001 476 #define SERVER_COMPREPLY_REG_AUTH 0xaa8843d1 477 #define SERVER_COMPREPLY_CLIENT_ID 0x001b9dda 478 #define SERVER_COMPREPLY_CLIENT_TOKEN 0xab69f79a 479 /******************************************************/ 480 481 482 /******************************************************/ 483 /* 484 Sent in repsonse to COMPINFO1 along with COMPINFOREPLY. 485 Used for password hashing by the client. 486 */ 487 #define SERVER_SESSIONKEY1 0x28ff 488 typedef struct 489 { 490 t_bnet_header h; 491 bn_int sessionkey; 492 } PACKED_ATTR() t_server_sessionkey1; 493 /******************************************************/ 494 495 496 /******************************************************/ 497 /* 498 Sent in response to COMPINFO2 along with COMPINFOREPLY. 499 Used for password hashing by the client. 500 501 FF 1D 0C 00 40 24 02 00 ....@$.. 502 99 F3 FD 78 ...x 503 504 FF 1D 0C 00 0C 67 08 00 7A 3C D8 75 .....g..z<.u 505 506 FF 1D 0C 00 58 77 00 00 27 45 44 7A ....Xw..'EDz 507 508 FF 1D 0C 00 9D DF 01 00 7A 11 07 ED ........z... 509 */ 510 #define SERVER_SESSIONKEY2 0x1dff 511 typedef struct 512 { 513 t_bnet_header h; 514 bn_int sessionnum; 515 bn_int sessionkey; 516 } PACKED_ATTR() t_server_sessionkey2; 517 #define SERVER_SESSIONKEY2_UNKNOWN1 0x00004df3 518 /******************************************************/ 519 520 521 /******************************************************/ 522 /* 523 FF 12 3C 00 E0 28 02 E4 0A 37 BE 01 E0 50 A3 37 ..<..(...7...P.7 524 D0 36 BE 01 A4 01 00 00 09 04 00 00 09 04 00 00 .6.............. 525 09 04 00 00 65 6E 75 00 31 00 55 53 41 00 55 6E ....enu.1.USA.Un 526 69 74 65 64 20 53 74 61 74 65 73 00 ited States. 527 528 still original client, but at a later date 529 FF 12 3C 00 60 C5 4B 8B 19 DE BE 01 60 55 B1 40 ..<.`.K.....`U.@ 530 E7 DD BE 01 A4 01 00 00 09 04 00 00 09 04 00 00 ................ 531 09 04 00 00 65 6E 75 00 31 00 55 53 41 00 55 6E ....enu.1.USA.Un 532 69 74 65 64 20 53 74 61 74 65 73 00 ited States. 533 534 FF 12 3C 00 60 EA 02 23 F5 DE BE 01 60 7A 68 D8 ..<.`..#....`zh. 535 C2 DE BE 01 A4 01 00 00 09 04 00 00 09 04 00 00 ................ 536 09 04 00 00 65 6E 75 00 31 00 55 53 41 00 55 6E ....enu.1.USA.Un 537 69 74 65 64 20 53 74 61 74 65 73 00 ited States. 538 539 FF 12 35 00 ..5. 540 20 BA B0 55 F2 7B BE 01 20 62 98 C5 3D 7C BE 01 ..U.{.. b..=|.. 541 E4 FD FF FF 12 04 00 00 12 04 00 00 12 04 00 00 ................ 542 6B 6F 72 00 38 32 00 4B 4F 52 00 4B 6F 72 65 61 kor.82.KOR.Korea 543 00 . 544 545 FF 12 37 00 E0 D4 72 97 2F 8C BF 01 E0 3C 37 F9 ..7...r./....<7. 546 37 8C BF 01 C4 FF FF FF 07 04 00 00 07 04 00 00 7............... 547 07 04 00 00 64 65 75 00 34 39 00 44 45 55 00 47 ....deu.49.DEU.G 548 65 72 6D 61 6E 79 00 ermany. 549 550 FF 12 36 00 20 F3 31 08 40 A7 BF 01 20 C3 BA CB ..6. .1.@... ... 551 50 A7 BF 01 C4 FF FF FF 1D 04 00 00 1D 04 00 00 P............... 552 1D 04 00 00 73 76 65 00 34 36 00 53 57 45 00 53 ....sve.46.SWE.S 553 77 65 64 65 6E 00 weden. 554 555 Diablo II 1.03 556 FF 12 39 00 A0 DB AA 45 51 3F C0 01 A0 EB ..9....EQ?.... 557 56 17 A5 3F C0 01 A8 FD FF FF 09 0C 00 00 09 0C V..?............ 558 00 00 09 0C 00 00 65 6E 61 00 36 31 00 41 55 53 ......ena.61.AUS 559 00 41 75 73 74 72 61 6C 69 61 00 .Australia. 560 */ 561 #define CLIENT_COUNTRYINFO1 0x12ff 562 typedef struct 563 { 564 t_bnet_header h; 565 bn_long systemtime; /* GMT */ 566 bn_long localtime; /* time in local timezone */ 567 bn_int bias; /* (gmt-local)/60 (using signed math) */ 568 bn_int langid1; /* 09 04 00 00 */ /* 12 04 00 00 */ 569 bn_int langid2; /* 09 04 00 00 */ /* 12 04 00 00 */ 570 bn_int langid3; /* 09 04 00 00 */ /* 12 04 00 00 */ 571 /* langstr */ 572 /* countrycode (long distance phone) */ 573 /* countryabbrev */ 574 /* countryname */ 575 } PACKED_ATTR() t_client_countryinfo1; 576 /******************************************************/ 577 578 579 /******************************************************/ 580 /* 581 First seen in Diablo II (and LoD) 1.09 582 FF 50 34 00 00 00 00 00 36 38 58 49 50 58 32 44 .P4.....68XIPX2D 583 09 00 00 00 00 00 00 00 00 00 00 00 C4 FF FF FF ................ 584 07 04 00 00 07 04 00 00 44 45 55 00 47 65 72 6D ........DEU.Germ 585 61 6E 79 00 any. 586 587 FF 50 47 00 00 00 00 00 36 38 58 49 56 44 32 44 .PG.....68XIVD2D 588 09 00 00 00 00 00 00 00 00 00 00 00 20 FE FF FF ............ ... 589 04 08 00 00 04 08 00 00 43 48 4E 00 50 65 6F 70 ........CHN.Peop 590 6C 65 27 73 20 52 65 70 75 62 6C 69 63 20 6F 66 le's Republic of 591 20 43 68 69 6E 61 00 China. 592 */ 593 #define CLIENT_COUNTRYINFO_109 0x50ff 594 typedef struct 595 { 596 t_bnet_header h; 597 bn_int protocol; /* 00 00 00 00 always zero */ 598 bn_int archtag; 599 bn_int clienttag; 600 bn_int versionid; /* 09 00 00 00 */ /* FIXME: what is this? */ 601 bn_int gamelang; /* 00 00 00 00 always zero */ 602 bn_int localip; /* 00 00 00 00 always zero */ 603 bn_int bias; /* (gmt-local)/60 (using signed math) */ 604 bn_int lcid; /* Win32 LCID */ 605 bn_int langid; /* Win32 LangID */ 606 /* langstr */ 607 /* countryname */ 608 } PACKED_ATTR() t_client_countryinfo_109; 609 /******************************************************/ 610 611 612 /******************************************************/ 613 /* 614 FF 2A 20 00 91 4F 93 DF 57 74 B5 C8 48 0F 4D 9B .* ..O..Wt..H.M. 615 A2 28 A6 03 C1 D9 DA 11 42 69 6D 42 6F 3A 29 00 .(......BimBo:). 616 */ 617 #define CLIENT_CREATEACCTREQ1 0x2aff 618 typedef struct 619 { 620 t_bnet_header h; 621 bn_int password_hash1[5]; /* hash of lowercase password w/o null */ 622 /* player name */ 623 } PACKED_ATTR() t_client_createacctreq1; 624 /******************************************************/ 625 626 627 /******************************************************/ 628 /* 629 FF 2A 18 00 01 00 00 00 .*...... 630 13 00 00 00 78 52 82 02 00 00 00 00 00 00 00 00 ................ 631 ---120 82 130 2--- 632 633 FF 2A 08 00 01 00 00 00 .*...... 634 */ 635 #define SERVER_CREATEACCTREPLY1 0x2aff 636 typedef struct 637 { 638 t_bnet_header h; 639 bn_int result; 640 } PACKED_ATTR() t_server_createacctreply1; 641 #define SERVER_CREATEACCTREPLY1_RESULT_OK 0x00000001 642 #define SERVER_CREATEACCTREPLY1_RESULT_NO 0x00000000 643 /******************************************************/ 644 645 646 /******************************************************/ 647 /* 648 FF 2B 20 00 01 00 00 00 .+ ..... 649 00 00 00 00 4D 00 00 00 0E 01 00 00 20 00 00 00 ....M....... ... 650 CE 01 00 00 DD 07 00 00 ........ 651 652 FF 2B 20 00 01 00 00 00 00 00 00 00 06 00 00 .+ ............ 653 00 72 01 00 00 40 00 00 00 A9 07 00 00 FF 07 00 .r...@.......... 654 00 . 655 656 from Starcraft 1.05 657 FF 2B 20 00 01 00 00 00 00 00 00 00 06 00 00 00 .+ ............. 658 7C 01 00 00 20 00 00 00 00 02 00 00 FF 07 00 00 |... ........... 659 */ 660 #define CLIENT_UNKNOWN_2B 0x2bff /* FIXME: what is this? */ 661 typedef struct 662 { 663 t_bnet_header h; 664 bn_int unknown1; /* 01 00 00 00 */ /* 01 00 00 00 */ 665 bn_int unknown2; /* 00 00 00 00 */ /* 00 00 00 00 */ 666 bn_int unknown3; /* 4D 00 00 00 */ /* 06 00 00 00 */ 667 bn_int unknown4; /* 0E 01 00 00 */ /* 72 01 00 00 */ 668 bn_int unknown5; /* 20 00 00 00 */ /* 40 00 00 00 */ 669 bn_int unknown6; /* CE 01 00 00 */ /* A9 07 00 00 */ 670 bn_int unknown7; /* DD 07 00 00 */ /* FF 07 00 00 */ 671 } PACKED_ATTR() t_client_unknown_2b; 672 #define CLIENT_UNKNOWN_2B_UNKNOWN1 0x00000001 673 #define CLIENT_UNKNOWN_2B_UNKNOWN2 0x00000000 674 #define CLIENT_UNKNOWN_2B_UNKNOWN3 0x0000004d 675 #define CLIENT_UNKNOWN_2B_UNKNOWN4 0x0000010e 676 #define CLIENT_UNKNOWN_2B_UNKNOWN5 0x00000020 677 #define CLIENT_UNKNOWN_2B_UNKNOWN6 0x000001ce 678 #define CLIENT_UNKNOWN_2B_UNKNOWN7 0x000007dd 679 /******************************************************/ 680 681 682 /******************************************************/ 683 /* 684 later replaced by progident2 and the authreq packets 685 686 FF 06 14 00 36 38 58 49 ....68XI 687 50 58 45 53 BB 00 00 00 00 00 00 00 PXES........ 688 689 sent by 1.05 Starcraft 690 FF 06 14 00 36 38 58 49 52 41 54 53 BD 00 00 00 ....68XIRATS.... 691 00 00 00 00 .... 692 693 Diablo II 1.03 694 FF 06 14 00 36 38 58 49 56 44 32 44 03 00 ....68XIVD2D.. 695 00 00 00 00 00 00 ...... 696 */ 697 #define CLIENT_PROGIDENT 0x06ff 698 typedef struct 699 { 700 t_bnet_header h; 701 bn_int archtag; 702 bn_int clienttag; /* see tag.h */ 703 bn_int versionid; /* FIXME: how does the versionid work? */ 704 bn_int unknown1; /* FIXME: always zero? spawn flag? */ 705 } PACKED_ATTR() t_client_progident; 706 /******************************************************/ 707 708 709 /******************************************************/ 710 /* 711 These formulas are for authenticating the client version. 712 713 FF 06 5A 00 00 86 BA E3 ..Z..... 714 09 28 BC 01 49 58 38 36 76 65 72 32 2E 6D 70 71 .(..IX86ver2.mpq 715 00 41 3D 32 30 31 39 34 39 38 38 39 39 20 42 3D .A=2019498899 B= 716 33 34 32 33 32 39 32 33 39 34 20 43 3D 31 37 31 3423292394 C=171 717 39 30 31 31 32 32 32 20 34 20 41 3D 41 5E 53 20 9011222 4 A=A^S 718 42 3D 42 2D 43 20 43 3D 43 5E 41 20 41 3D 41 5E B=B-C C=C^A A=A^ 719 42 00 B. 720 721 FF 06 59 00 00 C1 12 EC 09 28 BC 01 49 58 38 36 ..Y......(..IX86 722 76 65 72 35 2E 6D 70 71 00 41 3D 31 38 37 35 35 ver5.mpq.A=18755 723 39 31 33 34 31 20 42 3D 32 34 39 31 30 39 39 38 91341 B=24910998 724 30 39 20 43 3D 36 33 34 38 35 36 36 30 34 20 34 09 C=634856604 4 725 20 41 3D 41 2D 53 20 42 3D 42 5E 43 20 43 3D 43 A=A-S B=B^C C=C 726 2B 41 20 41 3D 41 5E 42 00 +A A=A^B. 727 728 FF 06 5A 00 00 C1 12 EC 09 28 BC 01 49 58 38 36 ..Z......(..IX86 729 76 65 72 35 2E 6D 70 71 00 41 3D 31 37 31 32 39 ver5.mpq.A=17129 730 34 38 34 32 36 20 42 3D 33 36 30 30 30 33 30 36 48426 B=36000306 731 30 37 20 43 3D 33 33 39 30 34 31 37 39 35 39 20 07 C=3390417959 732 34 20 41 3D 41 2D 53 20 42 3D 42 5E 43 20 43 3D 4 A=A-S B=B^C C= 733 43 2D 41 20 41 3D 41 2D 42 00 C-A A=A-B. 734 735 FF 06 5A 00 00 3A 7F E8 09 28 BC 01 49 58 38 36 ..Z..:...(..IX86 736 76 65 72 34 2E 6D 70 71 00 41 3D 31 31 38 36 39 ver4.mpq.A=11869 737 35 38 31 34 31 20 42 3D 31 33 37 37 34 34 31 34 58141 B=13774414 738 35 37 20 43 3D 31 37 37 32 37 38 37 37 30 35 20 57 C=1772787705 739 34 20 41 3D 41 5E 53 20 42 3D 42 5E 43 20 43 3D 4 A=A^S B=B^C C= 740 43 2B 41 20 41 3D 41 5E 42 00 C+A A=A^B. 741 742 FF 06 5A 00 00 56 CD F6 09 28 BC 01 49 58 38 36 ..Z..V...(..IX86 743 76 65 72 37 2E 6D 70 71 00 41 3D 31 30 32 36 30 ver7.mpq.A=10260 744 34 34 33 35 34 20 42 3D 34 31 33 32 36 33 30 37 44354 B=41326307 745 31 31 20 43 3D 32 33 30 32 34 31 31 33 32 38 20 11 C=2302411328 746 34 20 41 3D 41 5E 53 20 42 3D 42 5E 43 20 43 3D 4 A=A^S B=B^C C= 747 43 5E 41 20 41 3D 41 2B 42 00 C^A A=A+B. 748 */ 749 #define SERVER_AUTHREQ1 0x06ff 750 typedef struct 751 { 752 t_bnet_header h; 753 bn_long timestamp; /* FIXME: file modification time? */ 754 /* versioncheck filename */ 755 /* equation */ 756 } PACKED_ATTR() t_server_authreq1; 757 /******************************************************/ 758 759 760 /******************************************************/ 761 /* 762 First seen in Diablo II (and LoD) 1.09 763 FF 50 65 00 00 00 00 00 36 1A 6C 45 76 BC 00 00 .Pe.....6.lEv... 764 00 48 A6 EF 09 28 BC 01 49 58 38 36 76 65 72 36 .H...(..IX86ver6 765 2E 6D 70 71 00 41 3D 33 38 34 35 35 38 31 36 33 .mpq.A=384558163 766 34 20 42 3D 38 38 30 38 32 33 35 38 30 20 43 3D 4 B=880823580 C= 767 31 33 36 33 39 33 37 31 30 33 20 34 20 41 3D 41 1363937103 4 A=A 768 2D 53 20 42 3D 42 2D 43 20 43 3D 43 2D 41 20 41 -S B=B-C C=C-A A 769 3D 41 2D 42 00 =A-B. 770 771 FF 50 65 00 00 00 00 00 .Pe..... 772 30 4B C1 33 10 EB 09 00 00 A5 C4 DD 09 28 BC 01 0K.3.........(.. 773 49 58 38 36 76 65 72 30 2E 6D 70 71 00 41 3D 31 IX86ver0.mpq.A=1 774 34 33 32 36 36 32 34 37 38 20 42 3D 36 35 32 32 432662478 B=6522 775 37 38 36 32 35 20 43 3D 31 37 36 31 35 31 35 38 78625 C=17615158 776 36 39 20 34 20 41 3D 41 5E 53 20 42 3D 42 2B 43 69 4 A=A^S B=B+C 777 20 43 3D 43 2B 41 20 41 3D 41 5E 42 00 C=C+A A=A^B. 778 */ 779 #define SERVER_AUTHREQ_109 0x50ff 780 typedef struct 781 { 782 t_bnet_header h; 783 bn_int logontype; /* 00 00 00 00 always zero */ 784 bn_int sessionkey; 785 bn_int sessionnum; 786 bn_long timestamp; 787 /* versioncheck filename */ 788 /* equation */ 789 } PACKED_ATTR() t_server_authreq_109; 790 #define SERVER_AUTHREQ_109_LOGONTYPE 0x0000000 791 #define SERVER_AUTHREQ_109_LOGONTYPE_W3 0x00000002 792 #define SERVER_AUTHREQ_109_LOGONTYPE_W3XP 0x00000002 793 /******************************************************/ 794 795 /* ADDED BY UNDYING SOULZZ 4/3/02 */ 796 #define VERSIONTAG_WARCRAFT3_113 "WAR3_113" 797 798 /******************************************************/ 799 /* 800 FF 07 40 00 36 38 58 49 52 41 54 53 BD 00 00 00 ..@.68XIRATS.... 801 00 05 00 01 1E 88 D7 08 73 74 61 72 63 72 61 66 ........starcraf 802 74 2E 65 78 65 20 30 33 2F 30 38 2F 39 39 20 32 t.exe 03/08/99 2 803 32 3A 34 31 3A 35 30 20 31 30 34 32 34 33 32 00 2:41:50 1042432. 804 805 sent by the 1.05 Starcraft 806 FF 07 40 00 36 38 58 49 52 41 54 53 BD 00 00 00 ..@.68XIRATS.... 807 00 05 00 01 AE AC DE 87 73 74 61 72 63 72 61 66 ........starcraf 808 74 2E 65 78 65 20 30 33 2F 30 38 2F 39 39 20 32 t.exe 03/08/99 2 809 32 3A 34 31 3A 35 30 20 31 30 34 32 34 33 32 00 2:41:50 1042432. 810 811 sent by the 1.08alpha Brood War (Starcraft game) in response to 812 A=2521522835 B=3428392135 C=218673704 4 A=A^S B=B-C C=C+A A=A-B 813 with IX86ver1.mpq 814 FF 07 40 00 36 38 58 49 52 41 54 53 C3 00 00 00 ..@.68XIRATS.... 815 01 08 00 01 A1 52 CE FE 73 74 61 72 63 72 61 66 .....R..starcraf 816 74 2E 65 78 65 20 31 32 2F 32 38 2F 30 30 20 31 t.exe 12/28/00 1 817 31 3A 32 38 3A 35 32 20 31 30 38 32 33 36 38 00 1:28:52 1082368. 818 819 sent by the 1.07 Diablo 820 FF 07 3C 00 36 38 58 49 4C 54 52 44 26 00 00 00 ..<.68XILTRD&... 821 01 06 05 62 8C 56 E6 21 64 69 61 62 6C 6F 2E 65 ...b.V.!diablo.e 822 78 65 20 30 39 2F 31 37 2F 39 38 20 31 38 3A 30 xe 09/17/98 18:0 823 30 3A 34 30 20 37 36 30 33 32 30 00 0:40 760320. 824 825 FF 07 45 00 36 38 58 49 4E 42 32 57 4B 00 00 00 ..E.68XINB2WK... 826 99 00 00 02 3D 51 C4 AA 57 61 72 63 72 61 66 74 ....=Q..Warcraft 827 20 49 49 20 42 4E 45 2E 65 78 65 20 31 30 2F 31 II BNE.exe 10/1 828 35 2F 39 39 20 30 30 3A 33 37 3A 35 34 20 37 30 5/99 00:37:54 70 829 34 35 31 32 00 4512. 830 831 sent by the 1.03 Diablo II 832 FF 07 3A 00 36 38 58 49 ..:.68XI 833 56 44 32 44 03 00 00 00 00 03 00 01 47 3E 26 73 VD2D........G>&s 834 47 61 6D 65 2E 65 78 65 20 30 38 2F 30 35 2F 30 Game.exe 08/05/0 835 30 20 30 31 3A 34 32 3A 32 38 20 32 39 34 39 31 0 01:42:28 29491 836 32 00 2. 837 */ 838 #define CLIENT_AUTHREQ1 0x07ff 839 typedef struct 840 { 841 t_bnet_header h; 842 bn_int archtag; 843 bn_int clienttag; 844 bn_int versionid; 845 bn_int gameversion; 846 bn_int checksum; 847 /* executable info */ 848 } PACKED_ATTR() t_client_authreq1; 849 850 /******************************************************/ 851 852 853 /******************************************************/ 854 /* 855 FF 07 0A 00 02 00 00 00 ........ 856 00 00 .. 857 858 FF 07 0A 00 02 00 00 00 00 00 .......... 859 */ 860 #define SERVER_AUTHREPLY1 0x07ff 861 typedef struct 862 { 863 t_bnet_header h; 864 bn_int message; 865 /* filename */ 866 /* unknown */ 867 } PACKED_ATTR() t_server_authreply1; 868 #define SERVER_AUTHREPLY1_MESSAGE_BADVERSION 0x00000000 869 #define SERVER_AUTHREPLY1_MESSAGE_UPDATE 0x00000001 /* initiate auto-update */ 870 #define SERVER_AUTHREPLY1_MESSAGE_OK 0x00000002 871 /******************************************************/ 872 873 874 /******************************************************/ 875 /* 876 First seen in Diablo II (and LoD) 1.09 877 FF 51 09 00 00 00 00 00 00 .Q....... 878 */ 879 #define SERVER_AUTHREPLY_109 0x51ff 880 typedef struct 881 { 882 t_bnet_header h; 883 bn_int message; 884 /* message string? */ 885 } PACKED_ATTR() t_server_authreply_109; 886 #define SERVER_AUTHREPLY_109_MESSAGE_OK 0x00000000 887 #define SERVER_AUTHREPLY_109_MESSAGE_UPDATE 0x00000100 888 #define SERVER_AUTHREPLY_109_MESSAGE_BADVERSION 0x00000101 889 /* we should check the first 10 values or so to see what they mean */ 890 /******************************************************/ 891 892 893 /******************************************************/ 894 /* 895 First seen in Diablo II (and LoD) 1.09 896 FF 51 67 00 C9 88 DA 42 00 09 00 01 46 97 62 9A .Qg....B....F.b. 897 01 00 00 00 00 00 00 00 10 00 00 00 06 00 00 00 ................ 898 A5 E7 39 00 00 00 00 00 ED CD 4F F7 6A 7A 4F 96 ..9.......O.jzO. 899 85 7A 2D A2 7F 1F B1 D6 81 B3 8D 50 47 61 6D 65 .z-........PGame 900 2E 65 78 65 20 30 38 2F 31 36 2F 30 31 20 32 33 .exe 08/16/01 23 901 3A 30 34 3A 34 30 20 34 32 34 30 36 37 00 74 73 :04:40 424067.ts 902 69 6E 67 68 75 61 00 inghua. 903 */ 904 #define CLIENT_AUTHREQ_109 0x51ff 905 typedef struct 906 { 907 t_bnet_header h; 908 bn_int ticks; 909 bn_int gameversion; 910 bn_int checksum; 911 bn_int cdkey_number; /* count of cdkeys, d2 = 1, lod = 2 */ 912 bn_int spawn; /* set if using spawn copy */ 913 /* cdkey info(s) */ 914 /* executable info */ 915 /* cdkey owner */ 916 } PACKED_ATTR() t_client_authreq_109; 917 /* values are the same as in CLIENT_AUTHREQ1 */ 918 919 typedef struct 920 { 921 bn_int len; 922 bn_int type; 923 bn_int checksum; 924 bn_int u1; 925 bn_int hash[5]; 926 } PACKED_ATTR() t_cdkey_info; 927 /******************************************************/ 928 929 930 /******************************************************/ 931 /* Batle.net used to send requests for registry and email info. 932 Thanks to bnetanon, I have a dump of these old packets. 933 */ 934 /* 935 FF 18 41 00 00 00 00 00 01 00 00 80 53 6F 66 74 ..A.........Soft 936 77 61 72 65 5C 4D 69 63 72 6F 73 6F 66 74 5C 4D ware\Microsoft\M 937 53 20 53 65 74 75 70 20 28 41 43 4D 45 29 5C 55 S Setup (ACME)\U 938 73 65 72 20 49 6E 66 6F 00 44 65 66 4E 61 6D 65 ser Info.DefName 939 00 . 940 941 FF 18 48 00 00 00 00 00 01 00 00 80 53 6F 66 74 ..H.........Soft 942 77 61 72 65 5C 4D 69 63 72 6F 73 6F 66 74 5C 4D ware\Microsoft\M 943 65 64 69 61 50 6C 61 79 65 72 5C 43 6F 6E 74 72 ediaPlayer\Contr 944 6F 6C 5C 50 6C 61 79 42 61 72 00 43 6C 72 42 61 ol\PlayBar.ClrBa 945 63 6B 43 6F 6C 6F 72 00 ckColor. 946 */ 947 #define SERVER_REGSNOOPREQ 0x18ff 948 typedef struct 949 { 950 t_bnet_header h; 951 bn_int unknown1; /* 00 00 00 00 */ /* sequence match like in other packets? */ 952 bn_int hkey; 953 /* registry key */ 954 /* value name */ 955 } PACKED_ATTR() t_server_regsnoopreq; 956 #define SERVER_REGSNOOPREQ_UNKNOWN1 0x00000000 957 #define SERVER_REGSNOOPREQ_HKEY_CLASSES_ROOT 0x80000000 958 #define SERVER_REGSNOOPREQ_HKEY_CURRENT_USER 0x80000001 959 #define SERVER_REGSNOOPREQ_HKEY_LOCAL_MACHINE 0x80000002 960 #define SERVER_REGSNOOPREQ_HKEY_USERS 0x80000003 961 #define SERVER_REGSNOOPREQ_HKEY_PERFORMANCE_DATA 0x80000004 962 #define SERVER_REGSNOOPREQ_HKEY_CURRENT_CONFIG 0x80000005 963 #define SERVER_REGSNOOPREQ_HKEY_DYN_DATA 0x80000006 964 #define SERVER_REGSNOOPREQ_HKEY_PERFORMANCE_TEXT 0x80000050 965 #define SERVER_REGSNOOPREQ_HKEY_PERFORMANCE_NLSTEXT 0x80000060 966 #define SERVER_REGSNOOPREQ_REGKEY "Software\\Microsoft\\MS Setup (ACME)\\User Info" 967 #define SERVER_REGSNOOPREQ_REGVALNAME "DefName" 968 /******************************************************/ 969 970 971 /******************************************************/ 972 /* If the key exists, the client send this back */ 973 /* 974 FF 18 0C 00 00 00 00 00 42 6F 62 00 ........Bob. 975 976 FF 18 0C 00 00 00 00 00 A0 9C A0 00 ............ 977 */ 978 #define CLIENT_REGSNOOPREPLY 0x18ff 979 typedef struct 980 { 981 t_bnet_header h; 982 bn_int unknown1; /* 00 00 00 00 */ /* same as request? */ 983 /* registry value (string, dword, or binary */ 984 } PACKED_ATTR() t_client_regsnoopreply; 985 /******************************************************/ 986 987 988 /******************************************************/ 989 /* 990 FF 07 0A 00 02 00 00 00 00 00 .......... 991 */ 992 #define CLIENT_ICONREQ 0x2dff 993 typedef struct 994 { 995 t_bnet_header h; 996 } PACKED_ATTR() t_client_iconreq; 997 /******************************************************/ 998 999 1000 /******************************************************/ 1001 /* 1002 FF 2D 16 00 76 34 1F 8F .-..v4.. 1003 C0 D6 BD 01 69 63 6F 6E 73 2E 62 6E 69 00 ....icons.bni. 1004 1005 FF 2D 16 00 00 77 D0 01 C7 B1 BE 01 69 63 6F 6E .-...w......icon 1006 73 2E 62 6E 69 00 s.bni. 1007 */ 1008 #define SERVER_ICONREPLY 0x2dff 1009 typedef struct 1010 { 1011 t_bnet_header h; 1012 bn_long timestamp; /* file modification time? */ 1013 /* filename */ 1014 } PACKED_ATTR() t_server_iconreply; 1015 /******************************************************/ 1016 1017 1018 /******************************************************/ 1019 #define CLIENT_LADDERSEARCHREQ 0x2fff 1020 typedef struct 1021 { 1022 t_bnet_header h; 1023 bn_int clienttag; 1024 bn_int id; /* (AKA ladder type) 1==standard, 3==ironman */ 1025 bn_int type; /* (AKA ladder sort) */ 1026 /* player name */ 1027 } PACKED_ATTR() t_client_laddersearchreq; 1028 #define CLIENT_LADDERSEARCHREQ_ID_STANDARD 0x00000001 1029 #define CLIENT_LADDERSEARCHREQ_ID_IRONMAN 0x00000003 1030 #define CLIENT_LADDERSEARCHREQ_TYPE_HIGHESTRATED 0x00000000 1031 #define CLIENT_LADDERSEARCHREQ_TYPE_MOSTWINS 0x00000002 1032 #define CLIENT_LADDERSEARCHREQ_TYPE_MOSTGAMES 0x00000003 1033 /******************************************************/ 1034 1035 1036 /******************************************************/ 1037 #define SERVER_LADDERSEARCHREPLY 0x2fff 1038 typedef struct /* FIXME: how does client know how many names? 1039 do we send separate replies for each name in the request? */ 1040 { 1041 t_bnet_header h; 1042 bn_int rank; /* 0 means 1st, etc */ 1043 } PACKED_ATTR() t_server_laddersearchreply; 1044 #define SERVER_LADDERSEARCHREPLY_RANK_NONE 0xffffffff 1045 /******************************************************/ 1046 1047 1048 /******************************************************/ 1049 /* 1050 FF 30 1C 00 00 00 00 00 .0...... 1051 32 37 34 34 37 37 32 39 31 34 38 32 38 00 63 6C 2744772914828.cl 1052 6F 75 64 00 oud. 1053 */ 1054 #define CLIENT_CDKEY 0x30ff 1055 typedef struct 1056 { 1057 t_bnet_header h; 1058 bn_int spawn; /* FIXME: not sure if this is correct, but cdkey2 does it this way */ 1059 /* cd key */ 1060 /* owner name */ /* Was this always here? */ 1061 } PACKED_ATTR() t_client_cdkey; 1062 #define CLIENT_CDKEY_UNKNOWN1 0x00000000 1063 /******************************************************/ 1064 1065 1066 /******************************************************/ 1067 /* 1068 FF 30 0E 00 01 00 00 00 .0...... 1069 63 6C 6F 75 64 00 cloud. 1070 */ 1071 #define SERVER_CDKEYREPLY 0x30ff 1072 typedef struct 1073 { 1074 t_bnet_header h; 1075 bn_int message; 1076 /* owner name */ 1077 } PACKED_ATTR() t_server_cdkeyreply; 1078 #define SERVER_CDKEYREPLY_MESSAGE_OK 0x00000001 1079 #define SERVER_CDKEYREPLY_MESSAGE_BAD 0x00000002 1080 #define SERVER_CDKEYREPLY_MESSAGE_WRONGAPP 0x00000003 1081 #define SERVER_CDKEYREPLY_MESSAGE_ERROR 0x00000004 /* disabled */ 1082 #define SERVER_CDKEYREPLY_MESSAGE_INUSE 0x00000005 1083 /* (any other value seems to correspond to ok) */ 1084 /******************************************************/ 1085 1086 1087 /******************************************************/ 1088 /* 1089 FF 36 34 00 00 00 00 00 0D 00 00 00 01 00 00 00 .64............. 1090 B5 AE 23 00 50 E5 D5 C0 DB 55 1E 38 0A F5 58 B9 ..#.P....U.8..X. 1091 47 64 C6 C2 9F BB FF B8 81 E7 EB EC 1B 13 C6 38 Gd.............8 1092 52 6F 62 00 Rob. 1093 1094 FF 36 34 00 00 00 00 00 0D 00 00 00 01 00 00 00 .64............. 1095 7F D7 00 00 90 64 77 2F D7 5B 42 38 1F A1 A2 6F .....dw/.[B8...o 1096 E8 FA BE F8 B6 0B BA 0F CA 64 3A 17 14 56 83 AB .........d:..V.. 1097 42 6F 62 00 Bob. 1098 1099 FF 36 35 00 00 00 00 00 10 00 00 00 04 00 00 00 .65............. 1100 0D 43 03 00 7A 11 07 ED 7C 9E 1E 38 E5 87 8B 3B .C..z...|..8...; 1101 9C 19 91 D9 0D 10 FC C1 C0 86 8C 8D DA A4 45 0B ..............E. 1102 XX XX XX XX 00 XXXX. 1103 1104 FF 36 34 00 00 00 00 00 10 00 00 00 04 00 00 00 .64............. 1105 70 F9 02 00 58 F9 B6 E6 38 49 5C 38 38 9C 31 E4 p...X...8I\88.1. 1106 1D 3D 40 05 66 AD 4C C8 1D 12 8E 49 9E 60 1A CB .=@.f.L....I.`.. 1107 42 6F 62 00 Bob. 1108 */ 1109 #define CLIENT_CDKEY2 0x36ff 1110 typedef struct 1111 { 1112 t_bnet_header h; 1113 bn_int spawn; 1114 bn_int keylen; /* without terminating NUL */ 1115 bn_int productid; 1116 bn_int keyvalue1; 1117 bn_int sessionkey; 1118 bn_int ticks; 1119 bn_int key_hash[5]; 1120 /* owner name */ 1121 } PACKED_ATTR() t_client_cdkey2; 1122 #define CLIENT_CDKEY2_SPAWN_TRUE 0x00000001 1123 #define CLIENT_CDKEY2_SPAWN_FALSE 0x00000000 1124 /******************************************************/ 1125 1126 1127 /******************************************************/ 1128 /* 1129 From Diablo II 1.08? 1130 FF 42 43 00 AB 4C A4 3B .BC..L.; 1131 01 00 00 00 00 00 00 00 10 00 00 00 06 00 00 00 ................ 1132 XX 60 12 00 00 00 00 00 5D 82 82 C4 F4 8F D0 91 X`......]....... 1133 E1 5B AB 95 D9 EE EF 18 44 3E F1 C9 XX XX XX XX .[......D>..XXXX 1134 XX XX XX XX XX XX XX XX XX XX 00 XXXXXXXXXX. 1135 1136 FF 42 44 00 17 78 42 77 01 00 00 00 00 00 00 00 .BD..xBw........ 1137 10 00 00 00 06 00 00 00 XX F3 10 00 00 00 00 00 ........X....... 1138 A8 29 8B C4 41 BD 33 AB 74 4C 1F 1E 5C XX CA 83 .)..A.3.tL..\X.. 1139 7F E5 36 14 XX XX XX XX XX XX XX XX XX XX XX XX ..6.XXXXXXXXXXXX 1140 XX XX XX 00 XXX. 1141 1142 FF 42 44 00 C6 25 A1 3B 01 00 00 00 00 00 00 00 .BD..%.;........ 1143 10 00 00 00 06 00 00 00 XX F3 10 00 00 00 00 00 ........X....... 1144 C4 3F FB 05 94 0C AC D4 3B 63 B1 90 E4 XX 53 B9 .?......;c...XS. 1145 70 C3 6F 2E XX XX XX XX XX XX XX XX XX XX XX XX p.o.XXXXXXXXXXXX 1146 XX XX XX 00 XXX. 1147 */ 1148 #define CLIENT_CDKEY3 0x42ff 1149 typedef struct 1150 { 1151 t_bnet_header h; 1152 bn_int unknown1; /* FIXME: some kind of salt? */ 1153 bn_int unknown2; /* 01 00 00 00 */ 1154 bn_int unknown3; /* 00 00 00 00 */ 1155 bn_int unknown4; /* 10 00 00 00 */ 1156 bn_int unknown5; /* 06 00 00 00 */ 1157 bn_int unknown6; /* FIXME: value1? */ 1158 bn_int unknown7; /* 00 00 00 00 */ 1159 bn_int key_hash[5]; 1160 /* owner name */ 1161 } PACKED_ATTR() t_client_cdkey3; 1162 #define CLIENT_CDKEY3_UNKNOWN1 0xffffffff 1163 #define CLIENT_CDKEY3_UNKNOWN2 0x00000001 1164 #define CLIENT_CDKEY3_UNKNOWN3 0x00000000 1165 #define CLIENT_CDKEY3_UNKNOWN4 0x00000010 1166 #define CLIENT_CDKEY3_UNKNOWN5 0x00000006 1167 #define CLIENT_CDKEY3_UNKNOWN6 0x00123456 1168 #define CLIENT_CDKEY3_UNKNOWN7 0x00000000 1169 /******************************************************/ 1170 1171 1172 /******************************************************/ 1173 /* 1174 FF 42 09 00 00 00 00 00 .B...... 1175 00 1176 1177 FF 42 09 00 00 00 00 00 00 .B....... 1178 */ 1179 #define SERVER_CDKEYREPLY3 0x42ff 1180 typedef struct 1181 { 1182 t_bnet_header h; 1183 bn_int message; 1184 /* owner name */ /* FIXME: or error message, or ... */ 1185 } PACKED_ATTR() t_server_cdkeyreply3; 1186 #define SERVER_CDKEYREPLY3_MESSAGE_OK 0x00000000 1187 /******************************************************/ 1188 1189 1190 /******************************************************/ 1191 /* 1192 FF 34 0D 00 00 00 00 00 00 00 00 00 00 .4........... 1193 */ 1194 #define CLIENT_REALMLISTREQ 0x34ff 1195 typedef struct 1196 { 1197 t_bnet_header h; 1198 bn_int unknown1; 1199 bn_int unknown2; 1200 } PACKED_ATTR() t_client_realmlistreq; 1201 /******************************************************/ 1202 1203 1204 /******************************************************/ 1205 /* 1206 0000: FF 40 04 00 .@.. 1207 1208 */ 1209 #define CLIENT_REALMLISTREQ_110 0x40ff 1210 typedef struct 1211 { 1212 t_bnet_header h; 1213 } PACKED_ATTR() t_client_realmlistreq_110; 1214 /******************************************************/ 1215 1216 1217 /******************************************************/ 1218 /* 1219 FF 34 5E 00 00 00 00 00 01 00 00 00 00 00 00 C0 .4^............. 1220 00 00 00 00 00 00 00 00 00 00 00 00 10 82 01 00 ................ 1221 FF FF FF FF 00 00 00 00 42 65 74 61 57 65 73 74 ........BetaWest 1222 00 50 6C 65 61 73 65 20 73 65 6C 65 63 74 20 74 .Please select t 1223 68 69 73 20 61 73 20 79 6F 75 72 20 72 65 61 6C his as your real 1224 6D 20 64 75 72 69 6E 67 20 62 65 74 61 00 m during beta. 1225 1226 ff 34 5e 00 00 00 00 00 01 00 00 00 00 00 00 c0 .4^............. 1227 00 00 00 00 00 00 00 00 00 00 00 00 bc 95 01 00 ................ 1228 ff ff ff ff 00 00 00 00 42 65 74 61 57 65 73 74 ........BetaWest 1229 00 50 6c 65 61 73 65 20 73 65 6c 65 63 74 20 74 .Please select t 1230 68 69 73 20 61 73 20 79 6f 75 72 20 72 65 61 6c his as your real 1231 6d 20 64 75 72 69 6e 67 20 62 65 74 61 00 m during beta. 1232 1233 ff 34 5e 00 00 00 00 00 01 00 00 00 00 00 00 c0 .4^............. 1234 00 00 00 00 00 00 00 00 00 00 00 00 c8 99 01 00 ................ 1235 ff ff ff ff 00 00 00 00 42 65 74 61 57 65 73 74 ........BetaWest 1236 00 50 6c 65 61 73 65 20 73 65 6c 65 63 74 20 74 .Please select t 1237 68 69 73 20 61 73 20 79 6f 75 72 20 72 65 61 6c his as your real 1238 6d 20 64 75 72 69 6e 67 20 62 65 74 61 00 m during beta. 1239 1240 from bnetd-0.3.23pre18 to Diablo II 1.03 1241 FF 34 4B 00 00 00 00 00 01 00 00 00 00 00 .4K........... 1242 00 C0 00 00 00 00 00 00 00 00 00 00 00 00 10 82 ................ 1243 01 00 FF FF FF FF 00 00 00 00 51 61 72 61 74 68 ..........Qarath 1244 52 65 61 6C 6D 00 54 48 45 20 43 68 6F 69 63 65 Realm.THE Choice 1245 20 46 6F 72 20 4E 6F 77 28 74 6D 29 00 For Now(tm). 1246 */ 1247 #define SERVER_REALMLISTREPLY 0x34ff /* realm list reply? */ 1248 typedef struct 1249 { 1250 t_bnet_header h; 1251 bn_int unknown1; 1252 bn_int count; 1253 /* realm entries */ 1254 } PACKED_ATTR() t_server_realmlistreply; 1255 #define SERVER_REALMLISTREPLY_UNKNOWN1 0x00000000 1256 1257 typedef struct 1258 { 1259 bn_int unknown3; 1260 bn_int unknown4; 1261 bn_int unknown5; 1262 bn_int unknown6; 1263 bn_int unknown7; /* this one is always different... 00 01 XX XX.. what is it? */ 1264 bn_int unknown8; 1265 bn_int unknown9; 1266 /* realm name */ 1267 /* realm description */ 1268 } PACKED_ATTR() t_server_realmlistreply_data; 1269 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN3 0xc0000000 1270 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN4 0x00000000 1271 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN5 0x00000000 1272 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN6 0x00000000 1273 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN7 0x00018210 /* 98832 or 1;33296 */ 1274 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN8 0xffffffff 1275 #define SERVER_REALMLISTREPLY_DATA_UNKNOWN9 0x00000000 1276 /******************************************************/ 1277 1278 1279 1280 /******************************************************/ 1281 /* 1282 # 44 packet from server: type=0x40ff(unknown) length=40 class=bnet 1283 0000: FF 40 28 00 00 00 00 00 01 00 00 00 01 00 00 00 .@(............. 1284 0010: 45 75 72 6F 70 65 00 52 65 61 6C 6D 20 66 6F 72 Europe.Realm for 1285 0020: 20 45 75 72 6F 70 65 00 Europe. 1286 */ 1287 #define SERVER_REALMLISTREPLY_110 0x40ff 1288 1289 typedef struct 1290 { 1291 t_bnet_header h; 1292 bn_int unknown1; 1293 bn_int count; 1294 /* realm entries */ 1295 } PACKED_ATTR() t_server_realmlistreply_110; 1296 #define SERVER_REALMLISTREPLY_110_UNKNOWN1 0x00000000 1297 1298 typedef struct 1299 { 1300 bn_int unknown1; 1301 /* realm name */ 1302 /* realm description */ 1303 } PACKED_ATTR() t_server_realmlistreply_110_data; 1304 #define SERVER_REALMLISTREPLY_110_DATA_UNKNOWN1 0x00000001 1305 1306 1307 #define CLIENT_PROFILEREQ 0x35ff 1308 typedef struct /* join realm request */ 1309 { 1310 t_bnet_header h; 1311 bn_int count; 1312 /* player name */ 1313 } PACKED_ATTR() t_client_profilereq; 1314 1315 1316 #define SERVER_PROFILEREPLY 0x35ff 1317 typedef struct /* realm join reply? */ 1318 { 1319 t_bnet_header h; 1320 bn_int count; /* same as in req */ 1321 bn_byte fail; /* != 0 if a problem occured */ 1322 /* profile-description */ 1323 /* profile-location */ 1324 /* bn_int clanTAG */ 1325 } PACKED_ATTR() t_server_profilereply; 1326 1327 #define CLIENT_UNKNOWN_37 0x37ff 1328 typedef struct /* character list request, character list upload? */ 1329 { 1330 t_bnet_header h; 1331 bn_int opencount; /* Number of OPEN characters on user's machine! */ 1332 /* Always zero for "closed" connections. */ 1333 /* unknown2 */ /* subsequent blocks of t_d2char_info or something */ 1334 /* similar, so server could read this list and */ 1335 /* include in the 0x37ff reply as a choice (this */ 1336 /* makes sense cuz the server does NOT store open */ 1337 /* character details - this also explains why */ 1338 /* unknown1 is always 0 in the beta, and the 0x00 */ 1339 /* of unknown2 acts as a EOF when client read the */ 1340 /* t_d2char_info structures */ 1341 } PACKED_ATTR() t_client_unknown_37; 1342 /******************************************************/ 1343 1344 1345 /******************************************************/ 1346 /* 1347 FF 37 01 01 00 00 00 00 08 00 00 00 04 00 00 00 .7.............. 1348 42 65 74 61 57 65 73 74 2C 4D 6F 4E 6B 00 87 80 BetaWest,MoNk... 1349 06 01 01 01 01 50 FF FF 02 02 FF FF FF FF FF FF .....P.......... 1350 02 49 50 50 50 50 FF FF FF 50 50 FF FF FF FF FF .IPPPP...PP..... 1351 FF 14 88 82 80 80 FF FF FF 00 42 65 74 61 57 65 ..........BetaWe 1352 73 74 2C 4D 6F 4E 6B 2D 65 00 83 80 05 02 02 01 st,MoNk-e....... 1353 01 2B FF 1B 02 02 FF FF FF FF FF FF 03 FF FF FF .+.............. 1354 FF FF FF FF A8 FF FF FF FF FF FF FF FF 10 80 82 ................ 1355 80 80 FF FF FF 00 42 65 74 61 57 65 73 74 2C 4D ......BetaWest,M 1356 6F 4E 6B 2D 65 65 00 83 80 06 01 01 01 01 FF 4C oNk-ee.........L 1357 FF 02 02 FF FF FF FF FF FF 01 FF 48 48 48 48 FF ...........HHHH. 1358 A6 FF 48 48 FF FF FF FF FF FF 0F 80 80 80 80 FF ..HH............ 1359 FF FF 00 42 65 74 61 57 65 73 74 2C 4D 6F 4E 6B ...BetaWest,MoNk 1360 2D 74 77 6F 00 87 80 01 01 01 01 01 FF FF FF 01 -two............ 1361 01 FF FF FF FF FF FF 02 FF FF FF FF FF FF FF FF ................ 1362 FF FF FF FF FF FF FF FF 01 84 80 FF FF FF 80 80 ................ 1363 00 . 1364 1365 ^-- 1: (BetaWest) MoNk 1366 2: (BetaWest) MoNk-e 1367 3: (BetaWest) MoNk-ee 1368 4: (BetaWest) MoNk-two 1369 1370 ff 37 4e 00 00 00 00 00 08 00 00 00 01 00 00 00 .7N............. 1371 42 65 74 61 57 65 73 74 2c 4c 69 66 65 6c 69 6b BetaWest,Lifelik 1372 65 00 87 80 01 01 01 01 01 ff ff ff 01 01 ff ff e............... 1373 ff ff ff ff 03 ff ff ff ff ff ff ff ff ff ff ff ................ 1374 ff ff ff ff ff 01 80 80 ff ff ff 80 80 00 .............. 1375 1376 ff 37 4e 00 00 00 00 00 08 00 00 00 01 00 00 00 .7N............. 1377 42 65 74 61 57 65 73 74 2c 51 6c 65 78 54 45 53 BetaWest,QlexTES 1378 54 00 83 80 ff ff ff ff ff 30 ff 1b ff ff ff ff T........0...... 1379 ff ff ff ff 04 ff ff ff ff ff ff ff ff ff ff ff ................ 1380 ff ff ff ff ff 01 80 80 80 80 ff ff ff 00 .............. 1381 1382 from bnetd-0.3.23pre18 to Diablo II 1.03 1383 "Char1 {BNE}" [lvl 20, amaz] 1384 "Char2 {BNE}" [lvl 21, sorc] 1385 "Char3 {BNE}" [lvl 22, necro] 1386 FF 37 D9 00 00 00 00 00 08 00 00 00 03 00 Gv.7............ 1387 00 00 51 61 72 61 74 68 52 65 61 6C 6D 2C 43 68 ..QarathRealm,Ch 1388 61 72 31 00 87 80 01 01 01 01 01 01 01 01 01 01 ar1............. 1389 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 ................ 1390 01 01 01 01 01 01 01 14 85 86 01 FF FF FF FF 42 ...............B 1391 4E 45 54 44 00 51 61 72 61 74 68 52 65 61 6C 6d NETD.QarathRealm 1392 2C 43 68 61 72 32 00 87 80 01 01 01 01 01 01 01 ,Char2.......... 1393 01 01 01 01 01 01 01 01 01 02 01 01 01 01 01 01 ................ 1394 01 01 01 01 01 01 01 01 01 01 15 85 86 01 FF FF ................ 1395 FF FF 42 4E 45 54 44 00 51 61 72 61 74 68 52 65 ..BNETD.QarathRe 1396 61 6C 6D 2C 43 68 61 72 33 00 87 80 01 01 01 01 alm,Char3....... 1397 01 01 01 01 01 01 01 01 01 01 01 01 03 01 01 01 ................ 1398 01 01 01 01 01 01 01 01 01 01 01 01 01 16 85 86 ................ 1399 01 FF FF FF FF 42 4E 45 54 44 00 .....BNETD. 1400 */ 1401 #define SERVER_UNKNOWN_37 0x37ff 1402 typedef struct /* character list reply? */ 1403 { 1404 t_bnet_header h; 1405 bn_int unknown1; 1406 bn_int unknown2; /* _bucky_: max chars allowed? */ 1407 bn_int count; /* # of chars, same number of */ 1408 /* t_char_info to follow in */ 1409 /* packet */ 1410 /* d2char_info blocks */ 1411 } PACKED_ATTR() t_server_unknown_37; 1412 #define SERVER_UNKNOWN_37_UNKNOWN1 0x00000000 1413 #define SERVER_UNKNOWN_37_UNKNOWN2 0x00000008 1414 1415 /* The ONLY 0x00 that should appear should be the terminating NUL for */ 1416 /* the character name string and the guild tag string, they're used as */ 1417 /* delimiters to separate character name and the character structure */ 1418 /* If you got any other NUL's in here the next character's info will */ 1419 /* be royally fucked up - using 0x01 or 0xff for unknowns seem to work */ 1420 /* well */ 1421 typedef struct 1422 { 1423 /* "RealmName,CharacterName" - for closed characters */ 1424 /* - OR - */ 1425 /* "CharacterName" - for open characters */ 1426 /* - strlen(CharacterName) must be <= 15 - */ 1427 bn_byte unknownb1; /* 0x83, 0x87? */ 1428 bn_byte unknownb2; /* 0x80...? */ 1429 bn_byte helmgfx; 1430 bn_byte bodygfx; 1431 bn_byte leggfx; 1432 bn_byte lhandweapon; 1433 bn_byte lhandgfx; 1434 bn_byte rhandweapon; 1435 1436 /* Partial weapon code list: 1437 0x2f: 1H Axe 1438 0x30: 1H Sword 1439 0x50: 2H Staff 1440 0x51: Another 2H Staff 1441 0x52: Another 2H Staff 1442 0x53: Another 2H Staff 1443 0x54: 2H Axe 1444 0x55: Scythe 1445 0x56: empty? 1446 0x57: Another 2H Axe 1447 0x58: Halberd? 1448 0x59: empty? 1449 0x5a: Another 2H Axe 1450 0x5b: Another Halberd 1451 0x5c: empty? 1452 0x5d: 1H club? 1453 0x5e: empty? 1454 0x5f: empty? 1455 */ 1456 1457 bn_byte rhandgfx; 1458 bn_byte unknownb3; 1459 bn_byte unknownb4; 1460 bn_byte unknownb5; 1461 bn_byte unknownb6; 1462 bn_byte unknownb7; 1463 bn_byte unknownb8; 1464 bn_byte unknownb9; 1465 bn_byte unknownb10; 1466 bn_byte unknownb11; 1467 bn_byte class; /* 0x01=Amazon, 0x02=Sor, 0x03=Nec, 0x04=Pal, 0x05=Bar */ 1468 1469 bn_int unknown1; 1470 bn_int unknown2; 1471 bn_int unknown3; 1472 bn_int unknown4; 1473 1474 bn_byte level; /* yes, byte, not short/int/long */ 1475 bn_byte status; /* 0x01-03 = Norm & alive */ 1476 /* 0x04-07 = HC & alive */ 1477 /* 0x08-0b = Norm & "dead"? */ 1478 /* 0x0c+ = HC & dead, chat only */ 1479 /* Add 0x80 to get same effect */ 1480 bn_byte title; /* 0x01=none 1481 0x02=Sir/Dame? 1482 0x03=Sir/Dame? 1483 0x04=Lord? 1484 0x05=Lord? 1485 0x06=Baron? 1486 0x07=Baron? */ 1487 /* Same codes for HC chars */ 1488 /* Add 0x80 to get same effect */ 1489 bn_byte unknownb13; 1490 bn_byte emblembgc; /* Guild emblem background colour */ 1491 bn_byte emblemfgc; /* Guild emblem foreground colour */ 1492 bn_byte emblemnum; /* Guild emblem type number */ 1493 1494 /* emblem number corresponds to D2DATA.MPQ/data/global/ui/Emblems/iconXXa.dc6 */ 1495 /* where XX = emblem number - 1 (ie, 0x0A corresponds to icon09a.dc6) use */ 1496 /* for dummy values seem safe... 0x01 won't work, you'll get an emblem... */ 1497 1498 bn_byte unknownb14; 1499 /* Guild Tag */ /* must not be longer than 3 chars */ 1500 } PACKED_ATTR() t_d2char_info; 1501 #define D2CHAR_INFO_UNKNOWNB1 0x83 1502 #define D2CHAR_INFO_UNKNOWNB2 0x80 1503 #define D2CHAR_INFO_FILLER 0xff /* non-zero padding */ 1504 #define D2CHAR_INFO_CLASS_AMAZON 0x01 1505 #define D2CHAR_INFO_CLASS_SORCERESS 0x02 1506 #define D2CHAR_INFO_CLASS_NECROMANCER 0x03 1507 #define D2CHAR_INFO_CLASS_PALADIN 0x04 1508 #define D2CHAR_INFO_CLASS_BARBARIAN 0x05 1509 #define D2CHAR_INFO_CLASS_DRUID 0x06 1510 #define D2CHAR_INFO_CLASS_ASSASSIN 0x07 1511 /******************************************************/ 1512 1513 1514 /******************************************************/ 1515 /* D2 packet... not sent very often and the client doesn't 1516 * seem to expect an answer */ 1517 /* FIXME: what the hell does this one do? */ 1518 /* 1519 FF 39 13 00 42 65 74 61 57 65 73 74 2C 62 75 73 .9..BetaWest,bus 1520 74 61 00 ta. 1521 1522 this one was sent after a closed character was deleted on the auth 1523 server... maybe a notifier for the gateway server? 1524 FF 39 17 00 42 6F 62 73 57 6F 72 6C 64 2C 63 68 .9..BobsWorld,ch 1525 61 72 6E 61 6D 65 00 arname. 1526 */ 1527 #define CLIENT_UNKNOWN_39 0x39ff 1528 typedef struct 1529 { 1530 t_bnet_header h; 1531 /* character name */ /* what about open chars? */ 1532 } PACKED_ATTR() t_client_unknown_39; 1533 /******************************************************/ 1534 1535 1536 /******************************************************/ 1537 /* 1538 FF 3A 2E 00 58 4C F2 00 19 C2 08 00 D7 33 37 D3 .:..XL.......37. 1539 42 8C 92 37 C2 26 08 A9 3E 92 05 28 A1 5A 18 B9 B..7.&..>..(.Z.. 1540 6D 61 73 74 6F 64 6F 6E 74 66 69 6C 6D 00 mastodontfilm. 1541 1542 FF 3A 28 00 2B 73 1C 01 88 91 F2 0D AF 22 43 25 .:(.+s......."C% 1543 BF E4 2D 45 42 37 04 DB AF 95 66 71 16 85 67 60 ..-EB7....fq..g` 1544 51 6C 65 78 53 5A 47 00 QlexSZG. 1545 */ 1546 #define CLIENT_LOGINREQ2 0x3aff 1547 typedef struct 1548 { 1549 t_bnet_header h; 1550 bn_int ticks; /* is it really? */ 1551 bn_int sessionkey; 1552 bn_int password_hash2[5]; 1553 /* player name */ 1554 } PACKED_ATTR() t_client_loginreq2; 1555 /******************************************************/ 1556 1557 1558 /******************************************************/ 1559 /* 1560 # 21 packet from client: type=0x46ff(unknown) length=8 class=bnet 1561 0000: FF 46 08 00 00 00 00 00 .F...... 1562 */ 1563 #define CLIENT_MOTD_W3 0x46ff 1564 typedef struct 1565 { 1566 t_bnet_header h; 1567 bn_int last_news_time; /* date of the last news item the client has */ 1568 } PACKED_ATTR() t_client_motd_w3; 1569 /******************************************************/ 1570 1571 1572 /******************************************************/ 1573 /* 1574 # 22 packet from server: type=0x46ff(unknown) length=225 class=bnet 1575 0000: FF 46 E1 00 01 16 3A 6C 3C FF FF FF FF 00 00 00 .F....:l<....... 1576 0010: 00 00 00 00 00 57 65 6C 63 6F 6D 65 20 74 6F 20 .....Welcome to 1577 0020: 42 61 74 74 6C 65 2E 6E 65 74 21 0A 54 68 69 73 Battle.net!.This 1578 0030: 20 73 65 72 76 65 72 20 69 73 20 68 6F 73 74 65 server is hoste 1579 0040: 64 20 62 79 20 41 54 26 54 2E 0A 54 68 65 72 65 d by AT&T..There 1580 0050: 20 61 72 65 20 63 75 72 72 65 6E 74 6C 79 20 36 are currently 6 1581 0060: 32 38 20 75 73 65 72 73 20 70 6C 61 79 69 6E 67 28 users playing 1582 0070: 20 31 35 39 20 67 61 6D 65 73 20 6F 66 20 57 61 159 games of Wa 1583 0080: 72 63 72 61 66 74 20 49 49 49 2C 20 61 6E 64 20 rcraft III, and 1584 0090: 31 37 37 33 34 36 20 75 73 65 72 73 20 70 6C 61 177346 users pla 1585 00A0: 79 69 6E 67 20 37 37 38 33 37 20 67 61 6D 65 73 ying 77837 games 1586 00B0: 20 6F 6E 20 42 61 74 74 6C 65 2E 6E 65 74 2E 0A on Battle.net.. 1587 00C0: 4C 61 73 74 20 6C 6F 67 6F 6E 3A 20 54 68 75 20 Last logon: Thu 1588 00D0: 46 65 62 20 31 34 20 20 35 3A 32 38 20 50 4D 0A Feb 14 5:28 PM. 1589 00E0: 00 . 1590 1591 # Match 4, 2002 1592 # 92 packet from server: type=0x46ff(unknown) length=859 class=bnet 1593 0000: FF 46 5B 03 01 B4 B2 82 3C 20 B6 83 3C 20 B6 83 .F[.....< ..< .. 1594 0010: 3C 20 B6 83 3C 57 65 20 68 61 76 65 20 62 65 65 < ..<We have bee 1595 # 93 packet from server: type=0x46ff(unknown) length=223 class=bnet 1596 0000: FF 46 DF 00 01 B4 B2 82 3C 20 B6 83 3C 20 B6 83 .F......< ..< .. 1597 0010: 3C 00 00 00 00 57 65 6C 63 6F 6D 65 20 74 6F 20 <....Welcome to 1598 1599 */ 1600 #define SERVER_MOTD_W3 0x46ff 1601 typedef struct 1602 { 1603 t_bnet_header h; 1604 bn_byte msgtype; /* we only saw "1" type so far */ 1605 bn_int curr_time; /* as seen by the server */ 1606 bn_int first_news_time; /* the oldest news item's timestamp */ 1607 bn_int timestamp; /* the timestamp of this news item */ 1608 /* it is equal with the latest news item timestamp for 1609 the welcome message */ 1610 bn_int timestamp2; /* always equal with the timestamp except the 1611 last packet which shows in the right panel */ 1612 /* text */ 1613 } PACKED_ATTR() t_server_motd_w3; 1614 #define SERVER_MOTD_W3_MSGTYPE 0x01 1615 #define SERVER_MOTD_W3_WELCOME 0x00000000 1616 /******************************************************/ 1617 1618 /******************************************************/ 1619 /* 1620 # Jon/bbbbb 1621 # 28 packet from client: type=0x53ff(unknown) length=40 class=bnet 1622 0000: FF 53 28 00 6F FD 5F 61 C3 D1 C4 78 E6 2E 24 8B .S(.o._a...x..$. 1623 0010: 32 EB 36 9C 39 57 D8 BA 57 84 67 5E E7 78 5B 01 2.6.9W..W.g^.x[. 1624 0020: 6D 99 87 15 4A 6F 6E 00 m...Jon. 1625 */ 1626 #define CLIENT_LOGINREQ_W3 0x53ff 1627 typedef struct 1628 { 1629 t_bnet_header h; 1630 bn_byte unknown[32]; 1631 /* player name */ 1632 } PACKED_ATTR() t_client_loginreq_w3; 1633 /******************************************************/ 1634 1635 /******************************************************/ 1636 /* 1637 12:33:56.255569 63.241.83.11.6112 > ws-2-11.1038: P 190:262(72) ack 272 win 65264 1638 ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 1639 ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 1640 ** ** ** ** ** ** ** ** FF 53 48 00 00 00 00 00 .SH..... 1641 4B A8 FF 5D 1E 5D 2D 50 D1 2B B2 95 74 AD 5F 4E K..].]-P.+..t._N 1642 88 A4 88 48 18 27 89 50 F1 AA 1B D5 D7 B6 47 BC ...H.'.P......G. 1643 30 8B 2A 54 AA 99 23 96 75 8A 5E 67 35 8E 5B 22 0.*T..#.u.^g5.[" 1644 2C 0E 68 2E C2 95 E9 D7 A1 82 F1 2C 1E 2B 28 36 ,.h........,.+(6 1645 */ 1646 #define SERVER_LOGINREPLY_W3 0x53ff 1647 typedef struct 1648 { 1649 t_bnet_header h; 1650 bn_int message; 1651 /* seems to be response to client-challenge */ 1652 bn_int unknown[16]; 1653 } PACKED_ATTR() t_server_loginreply_w3; 1654 #define SERVER_LOGINREPLY_W3_MESSAGE_SUCCESS 0x00000000 1655 #define SERVER_LOGINREPLY_W3_MESSAGE_ALREADY 0x00000001 /* Account already logged on */ 1656 #define SERVER_LOGINREPLY_W3_MESSAGE_BADACCT 0x00000001 /* Accoutn does not exist */ 1657 /******************************************************/ 1658 1659 /******************************************************/ 1660 /* single player crack based: 1661 # 34 packet from server: type=0x54ff(unknown) length=40 class=bnet 1662 0000: FF 54 28 00 00 00 00 00 00 00 00 00 00 00 00 00 .T(............. 1663 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 1664 0020: 00 00 00 00 00 00 00 00 ........ 1665 1666 * Password Checksum ? * 1667 -- client -- 1668 0x54ff - 2 bytes 1669 size - 2 bytes (0x0018) 1670 unknown1 - 20 bytes 1671 -- server -- 1672 0x54ff - 2 bytes 1673 size - 2 bytes 1674 msgid - 4 bytes 1675 { 1676 0x00000000 accept 1677 0x00000002 password incorrect 1678 } 1679 unknown1 - 20 bytes 1680 1681 Packet #13 1682 0x0000 FF 54 1C 00 00 00 00 00-3A D5 B9 B1 2B D9 B5 D9 �T......:չ?ٵ? 1683 0x0010 87 3B 2B 3D 28 57 C0 2E-02 93 5F 8B ?+=(W?.�_? 1684 */ 1685 #define CLIENT_LOGONPROOFREQ 0x54ff 1686 typedef struct 1687 { 1688 t_bnet_header h; 1689 bn_int password_hash1[5]; 1690 } PACKED_ATTR() t_client_logonproofreq; 1691 1692 #define SERVER_LOGONPROOFREPLY 0x54ff 1693 typedef struct 1694 { 1695 t_bnet_header h; 1696 bn_int response; 1697 bn_int unknown1; 1698 bn_short port0; 1699 bn_int unknown2; 1700 bn_short port1; 1701 bn_int unknown3; 1702 bn_int unknown4; 1703 } PACKED_ATTR() t_server_logonproofreply; 1704 #define SERVER_LOGONPROOFREPLY_RESPONSE_OK 0x00000000 1705 /*#define SERVER_LOGONPROOFREPLY_RESPONSE_BADPASS 0x00000001 */ 1706 #define SERVER_LOGONPROOFREPLY_RESPONSE_BADPASS 0x00000002 /* from the battle net dump... */ 1707 #define SERVER_LOGONPROOFREPLY_RESPONSE_EMAIL 0x0000000E 1708 #define SERVER_LOGONPROOFREPLY_UNKNOWN1 0x02825278 1709 #define SERVER_LOGONPROOFREPLY_UNKNOWN2 0x00000000 1710 #define SERVER_LOGONPROOFREPLY_UNKNOWN3 0x02825278 1711 #define SERVER_LOGONPROOFREPLY_UNKNOWN4 0x00000000 1712 /******************************************************/ 1713 1714 /******************************************************/ 1715 /* 1716 # 13 packet from client: type=0x52ff(unknown) length=83 class=bnet 1717 0000: FF 52 53 00 2B 63 B9 05 CA F3 E1 BA 58 5C ED 65 .RS.+c......X\.e 1718 0010: BE 8F 0E 89 A9 B8 C7 FE 75 2C 44 10 AE 19 B5 14 ........u,D..... 1719 0020: E8 CA E9 C7 37 50 7D 0F 9A 89 00 FF 2F 10 BB EE ....7P}...../... 1720 0030: A8 0C 81 64 AD AF DC C7 3F 58 F1 20 A1 05 E2 38 ...d....?X. ...8 1721 0040: 18 87 85 5B 74 68 65 61 63 63 6F 75 6E 74 6E 61 ...[theaccountna 1722 0050: 6D 65 00 me. 1723 */ 1724 #define CLIENT_CREATEACCOUNT_W3 0x52ff 1725 typedef struct 1726 { 1727 t_bnet_header h; 1728 bn_byte unknown[64]; 1729 /* player name */ 1730 } PACKED_ATTR() t_client_createaccount_w3; 1731 /******************************************************/ 1732 1733 1734 /******************************************************/ 1735 1736 /******************************************************/ 1737 1738 /* 1739 # 20 packet from client: type=0x45ff(unknown) length=6 class=bnet 1740 0000: FF 45 06 00 E0 17 .E.... 1741 */ 1742 #define CLIENT_CHANGEGAMEPORT 0x45ff 1743 typedef struct 1744 { 1745 t_bnet_header h; 1746 bn_short port; 1747 } PACKED_ATTR() t_client_changegameport; 1748 1749 1750 1751 1752 /******************************************************/ 1753 /* 1754 RECV-> 0000 FF 52 08 00 00 00 00 00 .R...... 1755 */ 1756 #define SERVER_CREATEACCOUNT_W3 0x52ff 1757 typedef struct 1758 { 1759 t_bnet_header h; 1760 bn_int result; 1761 } PACKED_ATTR() t_server_createaccount_w3; 1762 #define SERVER_CREATEACCOUNT_W3_RESULT_OK 0x00000000 1763 #define SERVER_CREATEACCOUNT_W3_RESULT_EXIST 0x00000004 1764 #define SERVER_CREATEACCOUNT_W3_RESULT_EMPTY 0x00000007 1765 #define SERVER_CREATEACCOUNT_W3_RESULT_INVALID 0x00000008 1766 #define SERVER_CREATEACCOUNT_W3_RESULT_BANNED 0x00000009 1767 #define SERVER_CREATEACCOUNT_W3_RESULT_SHORT 0x0000000A 1768 #define SERVER_CREATEACCOUNT_W3_RESULT_PUNCTUATION 0x0000000B 1769 #define SERVER_CREATEACCOUNT_W3_RESULT_PUNCTUATION2 0x0000000C 1770 /******************************************************/ 1771 1772 /******************************************************/ 1773 /* 1774 FF 3A 08 00 00 00 00 00 .:...... 1775 */ 1776 #define SERVER_LOGINREPLY2 0x3aff 1777 typedef struct 1778 { 1779 t_bnet_header h; 1780 bn_int message; 1781 } PACKED_ATTR() t_server_loginreply2; 1782 #define SERVER_LOGINREPLY2_MESSAGE_SUCCESS 0x00000000 1783 #define SERVER_LOGINREPLY2_MESSAGE_NONEXIST 0x00000001 /* Account does not exists */ 1784 #define SERVER_LOGINREPLY2_MESSAGE_BADPASS 0x00000002 /* Bad password */ 1785 #define SERVER_LOGINREPLY2_MESSAGE_LOCKED 0x00000006 /* Account is locked */ 1786 /******************************************************/ 1787 1788 1789 /******************************************************/ 1790 /* Diablo II 1.03 */ 1791 /* sent when registering new player with open Battle.net */ 1792 /* and when logging in with closed Battle.net */ 1793 /* 1794 (closed) b.net login: 1795 enter name/password -> 3dff packet 1796 (open) b.net login: 1797 enter name/password -> "login" packet (bad account) <-- CORRECT 1798 "Create new account" -> TOS grab -> Enter password -> 3dff packet 1799 */ 1800 /* 1801 FF 3D 20 00 B8 C0 A1 2F 56 B1 47 65 CF 55 09 62 .= ..../V.Ge.U.b 1802 8E 21 3C 59 57 BC E8 EA 45 6C 66 6C 6F 72 64 00 .!<YW...Elflord. 1803 */ 1804 #define CLIENT_CREATEACCTREQ2 0x3dff 1805 typedef struct 1806 { 1807 t_bnet_header h; 1808 bn_int password_hash1[5]; 1809 /* username (charactername?) */ 1810 } PACKED_ATTR() t_client_createacctreq2; 1811 /******************************************************/ 1812 1813 1814 /******************************************************/ 1815 /* Diablo II 1.03 */ 1816 #define SERVER_CREATEACCTREPLY2 0x3dff 1817 typedef struct 1818 { 1819 t_bnet_header h; 1820 bn_int result; 1821 } PACKED_ATTR() t_server_createacctreply2; 1822 #define SERVER_CREATEACCTREPLY2_RESULT_OK 0x00000000 1823 #define SERVER_CREATEACCTREPLY2_RESULT_SHORT 0x00000001 /* Username must be a minimum of 2 characters */ 1824 #define SERVER_CREATEACCTREPLY2_RESULT_INVALID 0x00000002 1825 #define SERVER_CREATEACCTREPLY2_RESULT_BANNED 0x00000003 1826 #define SERVER_CREATEACCTREPLY2_RESULT_EXIST 0x00000004 1827 #define SERVER_CREATEACCTREPLY2_RESULT_LAST_CREATE_IN_PROGRESS 0x00000005 1828 #define SERVER_CREATEACCTREPLY2_RESULT_ALPHANUM 0x00000006 1829 #define SERVER_CREATEACCTREPLY2_RESULT_PUNCTUATION 0x00000007 1830 #define SERVER_CREATEACCTREPLY2_RESULT_PUNCTUATION2 0x00000008 1831 /******************************************************/ 1832 1833 1834 /******************************************************/ 1835 /* 1836 FF 36 0C 00 01 00 00 00 52 6F 62 00 .6......Rob. 1837 1838 FF 36 0C 00 01 00 00 00 42 6F 62 00 .6......Bob. 1839 */ 1840 #define SERVER_CDKEYREPLY2 0x36ff 1841 typedef struct 1842 { 1843 t_bnet_header h; 1844 bn_int message; 1845 /* owner name */ 1846 } PACKED_ATTR() t_server_cdkeyreply2; 1847 #define SERVER_CDKEYREPLY2_MESSAGE_OK 0x00000001 1848 #define SERVER_CDKEYREPLY2_MESSAGE_BAD 0x00000002 1849 #define SERVER_CDKEYREPLY2_MESSAGE_WRONGAPP 0x00000003 1850 #define SERVER_CDKEYREPLY2_MESSAGE_ERROR 0x00000004 1851 #define SERVER_CDKEYREPLY2_MESSAGE_INUSE 0x00000005 1852 /* (any other value seems to correspond to ok) */ 1853 /******************************************************/ 1854 1855 1856 /******************************************************/ 1857 /* 1858 FF 14 08 00 74 65 6E 62 ....tenb 1859 */ 1860 #define CLIENT_UDPOK 0x14ff 1861 typedef struct 1862 { 1863 t_bnet_header h; 1864 bn_int echo; /* echo of what the server sent, normally "tenb" */ 1865 } PACKED_ATTR() t_client_udpok; 1866 /******************************************************/ 1867 1868 1869 /******************************************************/ 1870 /* 1871 FF 33 18 00 1A 00 00 00 00 00 00 00 74 6F 73 5F .3..........tos_ 1872 55 53 41 2E 74 78 74 00 USA.txt. 1873 1874 Diablo II 1.03 1875 FF 33 19 00 04 00 00 80 00 00 00 00 62 6E .3..........bn 1876 73 65 72 76 65 72 2E 69 6E 69 00 server.ini. 1877 */ 1878 #define CLIENT_FILEINFOREQ 0x33ff 1879 typedef struct 1880 { 1881 t_bnet_header h; 1882 bn_int type; /* type of file (TOS,icons,etc.) */ 1883 bn_int unknown2; /* 00 00 00 00 */ /* always zero? */ 1884 /* filename */ /* default/suggested filename? */ 1885 } PACKED_ATTR() t_client_fileinforeq; 1886 #define CLIENT_FILEINFOREQ_TYPE_TOS 0x0000001a /* tos_USA.txt */ 1887 #define CLIENT_FILEINFOREQ_TYPE_GATEWAYS 0x0000001b /* STAR bnserver.ini */ 1888 #define CLIENT_FILEINFOREQ_TYPE_GATEWAYS_D2 0x80000004 /* D2XP bnserver-D2DV.ini */ 1889 /* FIXME: what about icons.bni? */ 1890 #define CLIENT_FILEINFOREQ_TYPE_ICONS 0x0000001d /* STAR icons_STAR.bni */ 1891 #define CLIENT_FILEINFOREQ_UNKNOWN2 0x00000000 1892 #define CLIENT_FILEINFOREQ_FILE_TOSUSA "tos_USA.txt" 1893 #define CLIENT_FILEINFOREQ_FILE_TOSUNICODEUSA "tos-unicode_USA.txt" 1894 #define CLIENT_FILEINFOREQ_FILE_BNSERVER "bnserver.ini" 1895 /******************************************************/ 1896 1897 1898 /******************************************************/ 1899 /* 1900 FF 33 1C 00 1A 00 00 00 00 00 00 00 30 C3 89 86 .3..........0... 1901 09 4F BD 01 74 6F 73 2E 74 78 74 00 .O..tos.txt. 1902 1903 FF 33 20 00 1A 00 00 00 00 00 00 00 00 38 51 E2 .3 ..........8Q. 1904 30 A1 BD 01 74 6F 73 5F 55 53 41 2E 74 78 74 00 0...tos_USA.txt. 1905 */ 1906 #define SERVER_FILEINFOREPLY 0x33ff 1907 typedef struct 1908 { 1909 t_bnet_header h; 1910 bn_int type; /* type of file (TOS,icons,etc.) */ 1911 bn_int unknown2; /* 00 00 00 00 */ /* same as in TOSREQ */ 1912 bn_long timestamp; /* file modification time */ 1913 /* filename */ 1914 } PACKED_ATTR() t_server_fileinforeply; 1915 #define SERVER_FILEINFOREPLY_TYPE_TOSFILE 0x0000001a /* tos_USA.txt */ 1916 #define SERVER_FILEINFOREPLY_TYPE_GATEWAYS 0x0000001b /* STAR bnserver.ini */ 1917 #define SERVER_FILEINFOREPLY_TYPE_GATEWAYS_D2 0x80000004 /* D2XP bnserver-D2DV.ini */ 1918 #define SERVER_FILEINFOREPLY_TYPE_ICONS 0x0000001d /* STAR icons_STAR.bni */ 1919 #define SERVER_FILEINFOREPLY_UNKNOWN2 0x00000000 /* always zero */ 1920 /******************************************************/ 1921 1922 1923 /******************************************************/ 1924 /* 1925 FF 26 9E 01 01 00 00 00 13 00 00 00 .&.......... 1926 78 52 82 02 42 6F 62 00 70 72 6F 66 69 6C 65 5C xR..Bob.profile\ 1927 73 65 78 00 70 72 6F 66 69 6C 65 5C 61 67 65 00 sex.profile\age. 1928 70 72 6F 66 69 6C 65 5C 6C 6F 63 61 74 69 6F 6E profile\location 1929 00 70 72 6F 66 69 6C 65 5C 64 65 73 63 72 69 70 .profile\descrip 1930 74 69 6F 6E 00 52 65 63 6F 72 64 5C 53 45 58 50 tion.Record\SEXP 1931 5C 30 5C 77 69 6E 73 00 52 65 63 6F 72 64 5C 53 \0\wins.Record\S 1932 45 58 50 5C 30 5C 6C 6F 73 73 65 73 00 52 65 63 EXP\0\losses.Rec 1933 6F 72 64 5C 53 45 58 50 5C 30 5C 64 69 73 63 6F ord\SEXP\0\disco 1934 6E 6E 65 63 74 73 00 52 65 63 6F 72 64 5C 53 45 nnects.Record\SE 1935 58 50 5C 30 5C 6C 61 73 74 20 67 61 6D 65 00 52 XP\0\last game.R 1936 65 63 6F 72 64 5C 53 45 58 50 5C 30 5C 6C 61 73 ecord\SEXP\0\las 1937 74 20 67 61 6D 65 20 72 65 73 75 6C 74 00 52 65 t game result.Re 1938 63 6F 72 64 5C 53 45 58 50 5C 31 5C 77 69 6E 73 cord\SEXP\1\wins 1939 00 52 65 63 6F 72 64 5C 53 45 58 50 5C 31 5C 6C .Record\SEXP\1\l 1940 6F 73 73 65 73 00 52 65 63 6F 72 64 5C 53 45 58 osses.Record\SEX 1941 50 5C 31 5C 64 69 73 63 6F 6E 6E 65 63 74 73 00 P\1\disconnects. 1942 52 65 63 6F 72 64 5C 53 45 58 50 5C 31 5C 72 61 Record\SEXP\1\ra 1943 74 69 6E 67 00 52 65 63 6F 72 64 5C 53 45 58 50 ting.Record\SEXP 1944 5C 31 5C 68 69 67 68 20 72 61 74 69 6E 67 00 52 \1\high rating.R 1945 65 63 6F 72 64 5C 53 45 58 50 5C 31 5C 72 61 6E ecord\SEXP\1\ran 1946 6B 00 52 65 63 6F 72 64 5C 53 45 58 50 5C 31 5C k.Record\SEXP\1\ 1947 68 69 67 68 20 72 61 6E 6B 00 52 65 63 6F 72 64 high rank.Record 1948 5C 53 45 58 50 5C 31 5C 6C 61 73 74 20 67 61 6D \SEXP\1\last gam 1949 65 00 52 65 63 6F 72 64 5C 53 45 58 50 5C 31 5C e.Record\SEXP\1\ 1950 6C 61 73 74 20 67 61 6D 65 20 72 65 73 75 6C 74 last game result 1951 00 00 .. 1952 1953 FF 26 C2 01 05 00 00 00 13 00 00 00 .&.......... 1954 EE E4 84 03 6E 73 6C 40 63 6C 6F 75 64 00 63 6C ....nsl@cloud.cl 1955 6F 75 64 00 67 75 65 73 74 00 48 65 72 6E 40 73 oud.guest.Hern@s 1956 65 65 6D 65 00 6F 72 69 6F 6E 40 00 70 72 6F 66 eeme.orion@.prof 1957 69 6C 65 5C 73 65 78 00 70 72 6F 66 69 6C 65 5C ile\sex.profile\ 1958 61 67 65 00 70 72 6F 66 69 6C 65 5C 6C 6F 63 61 age.profile\loca 1959 74 69 6F 6E 00 70 72 6F 66 69 6C 65 5C 64 65 73 tion.profile\des 1960 63 72 69 70 74 69 6F 6E 00 52 65 63 6F 72 64 5C cription.Record\ 1961 53 74 61 72 5C 30 5C 77 69 6E 73 00 52 65 63 6F Star\0\wins.Reco 1962 72 64 5C 53 74 61 72 5C 30 5C 6C 6F 73 73 65 73 rd\Star\0\losses 1963 00 52 65 63 6F 72 64 5C 53 74 61 72 5C 30 5C 64 .Record\Star\0\d 1964 69 73 63 6F 6E 6E 65 63 74 73 00 52 65 63 6F 72 isconnects.Recor 1965 64 5C 53 74 61 72 5C 30 5C 6C 61 73 74 20 67 61 d\Star\0\last ga 1966 6D 65 00 52 65 63 6F 72 64 5C 53 74 61 72 5C 30 me.Record\Star\0 1967 5C 6C 61 73 74 20 67 61 6D 65 20 72 65 73 75 6C \last game resul 1968 74 00 52 65 63 6F 72 64 5C 53 74 61 72 5C 31 5C t.Record\Star\1\ 1969 77 69 6E 73 00 52 65 63 6F 72 64 5C 53 74 61 72 wins.Record\Star 1970 5C 31 5C 6C 6F 73 73 65 73 00 52 65 63 6F 72 64 \1\losses.Record 1971 5C 53 74 61 72 5C 31 5C 64 69 73 63 6F 6E 6E 65 \Star\1\disconne 1972 63 74 73 00 52 65 63 6F 72 64 5C 53 74 61 72 5C cts.Record\Star\ 1973 31 5C 72 61 74 69 6E 67 00 52 65 63 6F 72 64 5C 1\rating.Record\ 1974 53 74 61 72 5C 31 5C 68 69 67 68 20 72 61 74 69 Star\1\high rati 1975 6E 67 00 52 65 63 6F 72 64 5C 53 74 61 72 5C 31 ng.Record\Star\1 1976 5C 72 61 6E 6B 00 52 65 63 6F 72 64 5C 53 74 61 \rank.Record\Sta 1977 72 5C 31 5C 68 69 67 68 20 72 61 6E 6B 00 52 65 r\1\high rank.Re 1978 63 6F 72 64 5C 53 74 61 72 5C 31 5C 6C 61 73 74 cord\Star\1\last 1979 20 67 61 6D 65 00 52 65 63 6F 72 64 5C 53 74 61 game.Record\Sta 1980 72 5C 31 5C 6C 61 73 74 20 67 61 6D 65 20 72 65 r\1\last game re 1981 73 75 6C 74 00 00 sult.. 1982 */ 1983 #define CLIENT_STATSREQ 0x26ff 1984 typedef struct 1985 { 1986 t_bnet_header h; 1987 bn_int name_count; 1988 bn_int key_count; 1989 bn_int requestid; /* 78 52 82 02 */ 1990 /* player name */ 1991 /* field key ... */ 1992 } PACKED_ATTR() t_client_statsreq; 1993 #define CLIENT_STATSREQ_UNKNOWN1 0x02825278 1994 /******************************************************/ 1995 1996 1997 /******************************************************/ 1998 /* 1999 FF 26 23 00 01 00 00 00 .&#..... 2000 13 00 00 00 78 52 82 02 00 00 00 00 00 00 00 00 ....xR.......... 2001 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .............. 2002 2003 FF 26 13 02 05 00 00 00 13 00 00 00 .&.......... 2004 EE E4 84 03 20 20 A1 F0 00 20 20 A1 F0 00 68 74 .... ... ...ht 2005 74 70 3A 2F 2F 6E 73 6C 2E 6B 6B 69 72 69 2E 6F tp://nsl.kkiri.o 2006 72 67 00 20 20 20 20 20 20 20 20 20 20 20 A2 CB rg. .. 2007 20 50 72 6F 74 6F 73 73 20 69 73 20 54 68 65 20 Protoss is The 2008 42 65 73 74 20 A2 CB 20 0D 0A 0D 0A 20 20 20 49 Best .. .... I 2009 66 20 59 6F 75 20 57 61 6E 74 20 54 6F 20 4B 6E f You Want To Kn 2010 6F 77 20 41 62 6F 75 74 20 55 73 2C 20 47 6F 0D ow About Us, Go. 2011 0A 0D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 2012 20 68 74 74 70 3A 2F 2F 6E 73 6C 2E 6B 6B 69 72 http://nsl.kkir 2013 69 2E 6F 72 67 00 38 38 00 37 30 00 33 00 32 39 i.org.88.70.3.29 2014 32 36 30 33 31 30 20 33 39 36 31 36 37 38 32 34 260310 396167824 2015 30 00 4C 4F 53 53 00 30 00 30 00 30 00 30 00 00 0.LOSS.0.0.0.0.. 2016 00 00 00 00 00 6D 00 31 35 00 53 69 6E 67 61 70 .....m.15.Singap 2017 6F 72 65 20 00 00 32 37 00 31 00 36 00 32 39 32 ore ..27.1.6.292 2018 35 34 32 33 37 20 32 34 35 37 32 33 30 39 38 00 54237 245723098. 2019 44 52 41 57 00 30 00 30 00 30 00 30 00 00 00 00 DRAW.0.0.0.0.... 2020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2021 00 00 00 00 00 00 00 00 00 00 31 00 00 00 32 39 ..........1...29 2022 32 35 39 38 31 32 20 31 31 35 33 38 33 37 39 34 259812 115383794 2023 36 00 57 49 4E 00 30 00 30 00 30 00 30 00 00 00 6.WIN.0.0.0.0... 2024 00 00 00 00 B0 C5 BD C3 B1 E2 00 3F 3F 00 B1 D9 ...........??... 2025 B0 C5 C1 F6 20 BE F8 C0 BD 2E 00 BA B0 C0 DA B8 .... ........... 2026 AE 20 6F 72 69 6F 6E 20 2C 2C 20 C3 CA C4 DA C6 . orion ,, ..... 2027 C4 C0 CC B0 A1 20 BE C6 B3 E0 BF EB 2E 2E 0D 0A ..... .......... 2028 C4 ED C4 ED 2E 2E 0D 0A 0D 0A C1 B9 B6 F3 20 C0 .............. . 2029 DF C7 CF B4 C2 20 B3 D1 20 3A 20 6E 73 6C B3 D1 ..... .. : nsl.. 2030 B5 E9 0D 0A C0 DF C7 CF B4 C2 20 C7 C1 C5 E4 20 .......... .... 2031 3A 20 6E 73 6C 40 74 6F 74 6F 72 6F 00 35 31 00 : nsl@totoro.51. 2032 34 38 00 36 00 32 39 32 35 39 32 36 33 20 39 35 48.6.29259263 95 2033 36 35 30 35 39 30 32 00 4C 4F 53 53 00 36 00 36 6505902.LOSS.6.6 2034 00 32 00 39 39 30 00 31 30 32 37 00 00 00 32 39 .2.990.1027...29 2035 32 35 39 32 35 38 20 33 31 32 32 37 39 38 38 32 259258 312279882 2036 00 4C 4F 53 53 00 00 .LOSS.. 2037 */ 2038 #define SERVER_STATSREPLY 0x26ff 2039 typedef struct 2040 { 2041 t_bnet_header h; 2042 bn_int name_count; 2043 bn_int key_count; 2044 bn_int requestid; /* 78 52 82 02 */ /* EE E4 84 03 */ /* same as request */ 2045 /* field values ... */ 2046 } PACKED_ATTR() t_server_statsreply; 2047 /******************************************************/ 2048 2049 2050 /******************************************************/ 2051 /* 2052 FF 29 25 00 CF 17 28 00 A3 D3 2C 5C F4 18 02 40 .)%...(...,\...@ 2053 F9 B8 EA F4 A5 B1 3F 39 85 89 2D DB 18 2D B9 D4 ......?9..-..-.. 2054 52 6F 73 73 00 Ross. 2055 */ 2056 #define CLIENT_LOGINREQ1 0x29ff 2057 typedef struct 2058 { 2059 t_bnet_header h; 2060 bn_int ticks; 2061 bn_int sessionkey; 2062 bn_int password_hash2[5]; /* hash of ticks, key, and hash1 */ 2063 /* player name */ 2064 } PACKED_ATTR() t_client_loginreq1; 2065 /******************************************************/ 2066 2067 2068 /******************************************************/ 2069 #define SERVER_LOGINREPLY1 0x29ff 2070 typedef struct 2071 { 2072 t_bnet_header h; 2073 bn_int message; 2074 } PACKED_ATTR() t_server_loginreply1; 2075 #define SERVER_LOGINREPLY1_MESSAGE_FAIL 0x00000000 2076 #define SERVER_LOGINREPLY1_MESSAGE_SUCCESS 0x00000001 2077 /******************************************************/ 2078 2079 2080 /******************************************************/ 2081 /* 2082 FF 31 3B 00 22 1A 9A 00 64 B7 C5 21 2C 82 57 F4 .1;."...d..!,.W. 2083 0A 36 73 25 1E A5 42 5F FA 36 54 97 BC 65 3F E1 .6s%..B_.6T..e?. 2084 7D 5A 54 17 4C 33 B9 1A 09 25 49 45 99 52 69 45 }ZT.L3...%IE.RiE 2085 B1 E6 5C 9C 77 72 73 70 6F 69 00 ..\.wrspoi. 2086 2087 FF 31 3B 00 3A 5B 9B 00 64 B7 C5 21 99 32 14 B7 .1;.:[..d..!.2.. 2088 89 02 3C 28 4A 75 84 05 70 EF B5 A7 99 CA 7E 12 ..<(Ju..p.....~. 2089 7D 5A 54 17 4C 33 B9 1A 09 25 49 45 99 52 69 45 }ZT.L3...%IE.RiE 2090 B1 E6 5C 9C 77 72 73 70 6F 69 00 ..\.wrspoi. 2091 2092 from D2 LoD 1.08 2093 FF 31 38 00 79 8E 09 00 F5 1C EB 4E 2E 7A 9C 6A .18.y......N.z.j 2094 13 43 4A 49 2C CE 49 24 2E 65 FB 95 44 FC C3 B2 .CJI,.I$.e..D... 2095 E1 75 1A DA 19 36 EE 9B AA EE 23 99 F0 82 4F F8 .u...6....#...O. 2096 B9 6B 09 55 62 6F 62 00 .k.Ubob. 2097 */ 2098 #define CLIENT_CHANGEPASSREQ 0x31ff 2099 typedef struct 2100 { 2101 t_bnet_header h; 2102 bn_int ticks; /* FIXME: upper two bytes seem constant for each client? */ 2103 bn_int sessionkey; 2104 bn_int oldpassword_hash2[5]; /* hash of ticks, key, hash1 */ 2105 bn_int newpassword_hash1[5]; /* hash of lowercase password w/o null */ 2106 /* player name */ 2107 } PACKED_ATTR() t_client_changepassreq; 2108 /******************************************************/ 2109 2110 2111 /******************************************************/ 2112 /* 2113 FF 31 08 00 01 00 00 00 .1...... 2114 2115 FF 31 08 00 00 00 00 00 .1...... 2116 */ 2117 #define SERVER_CHANGEPASSACK 0x31ff 2118 typedef struct 2119 { 2120 t_bnet_header h; 2121 bn_int message; 2122 } PACKED_ATTR() t_server_changepassack; 2123 #define SERVER_CHANGEPASSACK_MESSAGE_FAIL 0x00000000 2124 #define SERVER_CHANGEPASSACK_MESSAGE_SUCCESS 0x00000001 2125 /******************************************************/ 2126 2127 2128 /******************************************************/ 2129 /* 2130 FF 0A 0F 00 0F ..... 2131 4D 79 41 63 63 6F 75 6E MyAccoun 2132 74 00 00 t.. 2133 2134 ff 0a 1f 00 4c 69 66 65 6c 69 6b 65 00 42 65 74 ....Lifelike.Bet 2135 61 57 65 73 74 2c 4c 69 66 65 6c 69 6b 65 00 aWest,Lifelike. 2136 2137 Diablo II 1.03 - amazon just after creation 2138 ff 0a 20 00 47 6f 64 64 65 73 73 00 51 61 .. .Goddess.Qa 2139 72 61 74 68 52 65 61 6c 6d 2c 47 6f 64 64 65 73 rathRealm,Goddes 2140 73 00 s. 2141 */ 2142 #define CLIENT_PLAYERINFOREQ 0x0aff 2143 typedef struct 2144 { 2145 t_bnet_header h; 2146 /* player name */ 2147 /* player info */ /* used by Diablo and D2 (character,Realm) */ 2148 } PACKED_ATTR() t_client_playerinforeq; 2149 /******************************************************/ 2150 2151 2152 /******************************************************/ 2153 /* 2154 FF 0A 29 00 4D 79 41 63 ..).MyAc 2155 63 6F 75 6E 74 00 50 58 45 53 20 30 20 30 20 30 count.PXES 0 0 0 2156 20 30 20 30 20 30 00 4D 79 41 63 63 6F 75 6E 74 0 0 0.MyAccount 2157 00 . 2158 2159 FF 0A 2F 00 6C 61 77 75 65 66 00 4C 54 52 44 20 ../.lawuef.LTRD 2160 31 20 30 20 30 20 33 30 20 31 30 20 32 30 20 32 1 0 0 30 10 20 2 2161 35 20 31 30 30 20 30 00 6C 61 77 75 65 66 00 5 100 0.lawuef. 2162 2163 ff 0a 53 00 4d 6f 4e 6b 32 6b 00 56 44 32 44 ..S.MoNk2k.VD2D 2164 42 65 74 61 57 65 73 74 2c 4d 6f 4e 6b 2d 65 65 BetaWest,MoNk-ee 2165 2c 87 80 06 01 01 01 01 ff 4c ff 02 02 ff ff ff ,........L...... 2166 ff ff ff 01 ff 48 48 48 48 ff a6 ff 48 48 ff ff .....HHHH...HH.. 2167 ff ff ff ff 0f 88 80 80 80 ff ff ff 00 4d 6f 4e .............MoN 2168 6b 32 6b 00 k2k. 2169 2170 ff 0a 5c 00 47 61 6d 65 6f 66 4c 69 66 65 00 56 ..\.GameofLife.V 2171 44 32 44 42 65 74 61 57 65 73 74 2c 4c 69 66 65 D2DBetaWest,Life 2172 6c 69 6b 65 2c 87 80 01 01 01 01 01 ff ff ff 01 like,........... 2173 01 ff ff ff ff ff ff 03 ff ff ff ff ff ff ff ff ................ 2174 ff ff ff ff ff ff ff ff 01 80 80 ff ff ff 80 80 ................ 2175 00 47 61 6d 65 6f 66 4c 69 66 65 00 ff 0f 3c 00 .GameofLife...<. 2176 07 00 00 00 21 00 00 00 7d 00 00 00 00 00 00 00 ....!...}....... 2177 d8 94 f6 08 55 9e 77 02 47 61 6d 65 6f 66 4c 69 ....U.w.GameofLi 2178 66 65 00 44 69 61 62 6c 6f 20 49 49 20 42 65 74 fe.Diablo II Bet 2179 61 57 65 73 74 2d 31 00 ff 0f 68 00 01 00 00 00 aWest-1...h..... 2180 00 00 00 00 10 00 00 00 00 00 00 00 d8 94 f6 08 ................ 2181 b1 65 77 02 65 76 69 6c 67 72 75 73 73 6c 65 72 .ew.evilgrussler 2182 00 56 44 32 44 42 65 74 61 57 65 73 74 2c 74 61 .VD2DBetaWest,ta 2183 72 61 6e 2c 83 80 ff ff ff ff ff 2f ff ff ff ff ran,......./.... 2184 ff ff ff ff ff ff 03 ff ff ff ff ff ff ff ff ff ................ 2185 ff ff ff ff ff ff ff 07 80 80 80 80 ff ff ff 00 ................ 2186 2187 ff 0a 59 00 47 61 6d 65 6f 66 4c 69 66 65 00 56 ..Y.GameofLife.V 2188 44 32 44 42 65 74 61 57 65 73 74 2c 42 4e 45 54 D2DBetaWest,BNET 2189 44 2c 87 80 01 01 01 01 01 ff ff ff 01 01 ff ff D,.............. 2190 ff ff ff ff 02 ff ff ff ff ff ff ff ff ff ff ff ................ 2191 ff ff ff ff ff 01 80 80 ff ff ff 80 80 00 47 61 ..............Ga 2192 6d 65 6f 66 4c 69 66 65 00 meofLife. 2193 */ 2194 #define SERVER_PLAYERINFOREPLY 0x0aff 2195 typedef struct 2196 { 2197 t_bnet_header h; 2198 /* player name */ 2199 /* status */ 2200 /* player name?! (maybe character name?) */ 2201 } PACKED_ATTR() t_server_playerinforeply; 2202 /* 2203 * status string: 2204 * 2205 * for STAR, SEXP, SSHR < 1.10: 2206 * "%s %u %u %u %u %u" 2207 * client tag (RATS, PXES, RHSS) 2208 * rating 2209 * number (ladder rank) 2210 * stars (normal wins) 2211 * unknown3 (always zero?) 2212 * unknown4 (always zero?) FIXME: I don't see this last one in any dumps... 2213 is this only a SEXP thing? 2214 2215 * for STAR, SEXP, SSHR >= 1.10: 2216 * "%s %u %u %u %u %u %u %u %u %u %s" 2217 * client tag (RATS, PXES, RHSS) 2218 * rating 2219 * number (ladder rank) 2220 * stars (normal wins) 2221 * spawned (1 of spawned, 0 otherwise) 2222 * unknown4 (always zero?) 2223 * highest ladder rating 2224 * unknown6 (always zero?) 2225 * unknown7 (always zero?) 2226 * icon tag (usually client tag) 2227 2228 2229 * 2230 * for DRTL: 2231 * "%s %u %u %u %u %u %u %u %u %u" 2232 * client tag (LTRD) 2233 * level 2234 * class (0==warrior, 1==rogue, 2==sorcerer) 2235 * dots (times killed diablo) 2236 * strength 2237 * magic 2238 * dexterity 2239 * vitality 2240 * gold 2241 * unknown2 (always zero?) 2242 2243 * 2244 * for D2DV: 2245 * "%s%s,%s," 2246 * client tag (VD2D) 2247 * realm 2248 * character name 2249 * 43 unknown bytes 2250 */ 2251 #define PLAYERINFO_DRTL_CLASS_WARRIOR 0 2252 #define PLAYERINFO_DRTL_CLASS_ROGUE 1 2253 #define PLAYERINFO_DRTL_CLASS_SORCERER 2 2254 /******************************************************/ 2255 2256 2257 /******************************************************/ 2258 #define CLIENT_PROGIDENT2 0x0bff 2259 typedef struct 2260 { 2261 t_bnet_header h; 2262 bn_int clienttag; 2263 } PACKED_ATTR() t_client_progident2; 2264 /******************************************************/ 2265 2266 2267 /******************************************************/ 2268 #define CLIENT_JOINCHANNEL 0x0cff 2269 typedef struct 2270 { 2271 t_bnet_header h; 2272 bn_int channelflag; 2273 } PACKED_ATTR() t_client_joinchannel; 2274 #define CLIENT_JOINCHANNEL_NORMAL 0x00000000 2275 #define CLIENT_JOINCHANNEL_GENERIC 0x00000001 2276 #define CLIENT_JOINCHANNEL_CREATE 0x00000002 2277 /******************************************************/ 2278 2279 2280 /******************************************************/ 2281 #define SERVER_CHANNELLIST 0x0bff 2282 typedef struct 2283 { 2284 t_bnet_header h; 2285 /* channel names */ 2286 } PACKED_ATTR() t_server_channellist; 2287 /******************************************************/ 2288 2289 2290 /******************************************************/ 2291 /* 2292 We don't use this for now. It makes the client put 2293 the list of IPs/hostnames into the registry. 2294 2295 FF 04 8F 00 00 00 00 00 32 30 39 2E 36 37 2E 31 ........209.67.1 2296 33 36 2E 31 37 34 3B 32 30 37 2E 36 39 2E 31 39 36.174;207.69.19 2297 34 2E 32 31 30 3B 32 30 37 2E 36 39 2E 31 39 34 4.210;207.69.194 2298 2E 31 38 39 3B 32 31 36 2E 33 32 2E 37 33 2E 31 .189;216.32.73.1 2299 37 34 3B 32 30 39 2E 36 37 2E 31 33 36 2E 31 37 74;209.67.136.17 2300 31 3B 32 30 36 2E 37 39 2E 32 35 34 2E 31 39 32 1;206.79.254.192 2301 3B 32 30 37 2E 31 33 38 2E 33 34 2E 33 3B 32 30 ;207.138.34.3;20 2302 39 2E 36 37 2E 31 33 36 2E 31 37 32 3B 65 78 6F 9.67.136.172;exo 2303 64 75 73 2E 62 61 74 74 6C 65 2E 6E 65 74 00 dus.battle.net. 2304 */ 2305 #define SERVER_SERVERLIST 0x04ff 2306 typedef struct 2307 { 2308 t_bnet_header h; 2309 bn_int unknown1; /* 00 00 00 00 */ 2310 /* list */ 2311 } PACKED_ATTR() t_server_serverlist; 2312 #define SERVER_SERVERLIST_UNKNOWN1 0x00000000 2313 /******************************************************/ 2314 2315 2316 /******************************************************/ 2317 /* 2318 FF 0F 30 00 01 00 00 00 00 00 00 00 00 00 00 00 ..0............. 2319 00 00 00 00 00 00 00 00 00 00 00 00 52 6F 73 73 ............Ross 2320 00 52 41 54 53 20 30 20 30 20 30 20 30 20 30 00 .RATS 0 0 0 0 0. 2321 2322 FF 0F 38 00 07 00 00 00 21 00 00 00 64 00 00 00 ..8.....!...d... 2323 00 00 00 00 D8 94 F6 07 B3 2C 6E 02 4D 6F 4E 6B .........,n.MoNk 2324 32 6B 00 44 69 61 62 6C 6F 20 49 49 20 42 65 74 2k.Diablo II Bet 2325 61 57 65 73 74 2D 31 00 aWest-1. 2326 2327 MT_ADD: 2328 0x0000: ff 0a 53 00 4d 6f 4e 6b 32 6b 00 56 44 32 44 42 ..S.MoNk2k.VD2DB 2329 0x0010: 65 74 61 57 65 73 74 2c 4d 6f 4e 6b 2d 65 65 2c etaWest,MoNk-ee, 2330 0x0020: 83 80 06 01 01 01 01 ff 4c ff 02 02 ff ff ff ff ........L....... 2331 0x0030: ff ff 01 ff 48 48 48 48 ff a6 ff 48 48 ff ff ff ....HHHH...HH... 2332 0x0040: ff ff ff 10 80 80 80 80 ff ff ff 00 4d 6f 4e 6b ............MoNk 2333 0x0050: 32 6b 00 ff 0f 38 00 07 00 00 00 21 00 00 00 6d 2k...8.....!...m 2334 0x0060: 00 00 00 00 00 00 00 d8 94 f6 08 a4 46 6e 02 4d ............Fn.M 2335 0x0070: 6f 4e 6b 32 6b 00 44 69 61 62 6c 6f 20 49 49 20 oNk2k.Diablo II 2336 0x0080: 42 65 74 61 57 65 73 74 2d 31 00 ff 0f 62 00 01 BetaWest-1...b.. 2337 0x0090: 00 00 00 00 00 00 00 28 00 00 00 00 00 00 00 d8 .......(........ 2338 0x00a0: 94 f6 07 69 fb 6d 02 4e 6f 72 62 62 6f 00 56 44 ...i.m.Norbbo.VD 2339 0x00b0: 32 44 42 65 74 61 57 65 73 74 2c 44 6f 6f 73 68 2DBetaWest,Doosh 2340 0x00c0: 2c 87 80 05 02 01 01 01 2b ff 1b 02 02 ff ff ff ,.......+....... 2341 0x00d0: ff ff ff 03 ff ff ff ff ff ff ff ff ff ff ff ff ................ 2342 0x00e0: ff ff ff ff 0a 80 80 80 80 ff ff ff 00 ff 0f 65 ...............e 2343 0x00f0: 00 01 00 00 00 00 00 00 00 32 00 00 00 00 00 00 .........2...... 2344 0x0100: 00 d8 94 f6 07 23 00 6e 02 6e 6a 67 6f 61 6c 69 .....#.n.njgoali 2345 0x0110: 65 00 56 44 32 44 42 65 74 61 57 65 73 74 2c 73 e.VD2DBetaWest,s 2346 0x0120: 68 65 69 6b 61 2c 83 80 05 02 01 02 02 ff 4c ff heika,........L. 2347 0x0130: 02 02 ff ff ff ff ff ff 02 ff ff ff ff ff ff ff ................ 2348 0x0140: ff ff ff ff ff ff ff ff ff 09 80 80 80 80 ff ff ................ 2349 0x0150: ff 00 ff 0f 67 00 01 00 00 00 00 00 00 00 1f 00 ....g........... 2350 0x0160: 00 00 00 00 00 00 d8 94 f6 09 eb 24 6e 02 72 6f ...........$n.ro 2351 0x0170: 62 6d 6d 73 64 00 56 44 32 44 42 65 74 61 57 65 bmmsd.VD2DBetaWe 2352 0x0180: 73 74 2c 56 61 6e 63 6f 75 76 65 72 2c 83 80 05 st,Vancouver,... 2353 0x0190: 02 02 01 01 30 ff 1b 02 02 ff ff ff ff ff ff 04 ....0........... 2354 0x01a0: 4f ff ff ff ff ff ff a9 ff ff ff ff ff ff ff ff O............... 2355 0x01b0: 09 80 80 80 80 ff ff ff 00 ff 0f 62 00 01 00 00 ...........b.... 2356 0x01c0: 00 00 00 00 00 6e 00 00 00 00 00 00 00 ce 4f fe .....n........O. 2357 0x01d0: c0 f9 02 15 01 4c 79 63 74 68 69 73 00 56 44 32 .....Lycthis.VD2 2358 0x01e0: 44 42 65 74 61 57 65 73 74 2c 45 6c 6c 65 2c 83 DBetaWest,Elle,. 2359 0x01f0: 80 04 02 01 01 01 ff 4d ff 02 02 ff ff ff ff ff .......M........ 2360 0x0200: ff 01 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ 2361 0x0210: ff ff 06 80 80 80 80 ff ff ff 00 ff 0f 6b 00 01 .............k.. 2362 0x0220: 00 00 00 00 00 00 00 19 01 00 00 00 00 00 00 ce ................ 2363 0x0230: 4f fe c1 e2 1b 9c 00 52 6f 62 4d 69 74 63 68 65 O......RobMitche 2364 0x0240: 6c 6c 00 56 44 32 44 42 65 74 61 57 65 73 74 2c ll.VD2DBetaWest, 2365 0x0250: 53 6f 6f 6e 65 72 64 65 64 2c 83 80 06 02 02 01 Soonerded,...... 2366 0x0260: 01 46 46 ff 02 02 ff ff ff ff ff ff 05 ff ff ff .FF............. 2367 0x0270: ff ff ff 29 ff ff ff ff ff ff ff ff ff 11 80 82 ...)............ 2368 0x0280: 80 80 ff ff ff 00 ff 0f 66 00 01 00 00 00 00 00 ........f....... 2369 0x0290: 00 00 bc 00 00 00 00 00 00 00 d8 94 f6 09 8f 3f ...............? 2370 0x02a0: 6e 02 4d 61 72 6c 6f 63 6b 31 00 56 44 32 44 42 n.Marlock1.VD2DB 2371 0x02b0: 65 74 61 57 65 73 74 2c 6d 61 72 6c 6f 63 6b 2c etaWest,marlock, 2372 0x02c0: 83 80 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ 2373 0x02d0: ff ff 05 ff ff ff ff ff ff ff ff ff ff ff ff ff ................ 2374 0x02e0: ff ff ff 01 80 80 80 80 ff ff ff 00 ff 0f 63 00 ..............c. 2375 0x02f0: 01 00 00 00 00 00 00 00 c8 00 00 00 00 00 00 00 ................ 2376 0x0300: d1 43 88 aa bd ce 3c 00 42 2d 57 61 74 74 7a 00 .C....<.B-Wattz. 2377 2378 From bnetd-0.4.23pre18 to Diablo II 1.03 2379 FF 0F 69 00 09 00 00 00 00 00 00 00 12 00 I@..i... ........ 2380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 45 6C ........ ......El 2381 66 6C 6F 72 64 00 56 44 32 44 51 61 72 61 74 68 flord.VD 2DQarath 2382 52 65 61 6C 6D 2C 46 61 6B 65 43 68 61 72 2C 83 Realm,Fa keChar,. 2383 80 FF FF FF FF FF 2F FF FF FF FF FF FF FF FF FF ....../. ........ 2384 FF 03 FF FF FF FF FF FF FF FF FF FF FF FF FF FF ........ ........ 2385 FF FF 07 80 80 80 80 FF FF FF 00 ........ ... 2386 */ 2387 #define SERVER_MESSAGE 0x0fff 2388 typedef struct 2389 { 2390 t_bnet_header h; 2391 bn_int type; 2392 bn_int flags; /* player flags (or channel flags for MT_CHANNEL) */ 2393 bn_int latency; 2394 bn_int player_ip; /* always zero? */ 2395 bn_int account_num; /* player's IP (big endian), no longer used, always 0D F0 AD BA */ 2396 bn_int reg_auth; /* server ip and/or reg auth? CD key and/or account number? */ 2397 /* player name */ 2398 /* text */ 2399 } PACKED_ATTR() t_server_message; 2400 #define SERVER_MESSAGE_PLAYER_IP_DUMMY 0x00000000 2401 /* nok */ 2402 #define SERVER_MESSAGE_REG_AUTH 0xBAADF00D /* 0D F0 AD BA */ 2403 /* #define SERVER_MESSAGE_REG_AUTH 0x07f694d8 */ 2404 #define SERVER_MESSAGE_ACCOUNT_NUM 0x0df0adba 2405 /* For MT_ADD, MT_JOIN, the text portion looks like: 2406 * 2407 * for STAR, SEXP, SSHR: 2408 * "%4c %u %u %u %u %u" 2409 * client tag (RATS, PXES, RHSS) 2410 * rating 2411 * number (ladder rank) 2412 * stars (normal wins) 2413 * unknown3 (always zero?) 2414 * unknown4 (always zero?) 2415 * 2416 * for DRTL: 2417 * "%4c %u %u %u %u %u %u %u %u %u" 2418 * client tag (LTRD) FIXME: RHSD? 2419 * level 2420 * class (0==warrior, 1==rogue, 2==sorcerer) 2421 * dots (times killed diablo) 2422 * strength 2423 * magic 2424 * dexterity 2425 * vitality 2426 * gold 2427 * unknown2 (always zero?) 2428 * 2429 * for CHAT: 2430 * FIXME: ??? "%4c" 2431 * client tag (TAHC) 2432 * 2433 * FIXME: Warcraft II? 2434 * 2435 * for D2DV: 2436 * open: 2437 * "%4c" 2438 * client tag (VD2D) 2439 * closed: 2440 * "%4c%s,%s,%s" 2441 * client tag (VD2D) 2442 * realm name 2443 * character name 2444 * character info 2445 */ 2446 #define SERVER_MESSAGE_TYPE_ADDUSER 0x00000001 /* ADD,USER,SHOWUSER */ 2447 #define SERVER_MESSAGE_TYPE_JOIN 0x00000002 2448 #define SERVER_MESSAGE_TYPE_PART 0x00000003 /* LEAVE */ 2449 #define SERVER_MESSAGE_TYPE_WHISPER 0x00000004 2450 #define SERVER_MESSAGE_TYPE_TALK 0x00000005 /* MESSAGE */ 2451 #define SERVER_MESSAGE_TYPE_BROADCAST 0x00000006 2452 #define SERVER_MESSAGE_TYPE_CHANNEL 0x00000007 /* JOINING */ 2453 /* unused? 0x00000008 */ 2454 #define SERVER_MESSAGE_TYPE_USERFLAGS 0x00000009 2455 #define SERVER_MESSAGE_TYPE_WHISPERACK 0x0000000a /* WHISPERSENT */ 2456 /* unused? 0x0000000b */ 2457 /* unused? 0x0000000c */ 2458 #define SERVER_MESSAGE_TYPE_CHANNELFULL 0x0000000d 2459 #define SERVER_MESSAGE_TYPE_CHANNELDOESNOTEXIST 0x0000000e 2460 #define SERVER_MESSAGE_TYPE_CHANNELRESTRICTED 0x0000000f 2461 /* unused? 0x00000010 */ 2462 /* unused? 0x00000011 */ 2463 #define SERVER_MESSAGE_TYPE_INFO 0x00000012 2464 #define SERVER_MESSAGE_TYPE_ERROR 0x00000013 2465 /* unused? 0x00000014 */ 2466 /* unused? 0x00000015 */ 2467 /* unused? 0x00000016 */ 2468 #define SERVER_MESSAGE_TYPE_EMOTE 0x00000017 2469 2470 /****** Player Flags ******/ 2471 /* flag bits for above struct */ 2472 2473 /* ADDED BY UNDYING SOULZZ 4/7/02 */ 2474 #define W3_ICON_SET 0x00000000 2475 #define MAX_STR_RACELEN 20 2476 #define MAX_STR_ACCTPASSLEN 10 2477 #define W3_RACE_RANDOM 32 2478 #define W3_RACE_HUMANS 1 2479 #define W3_RACE_ORCS 2 2480 #define W3_RACE_UNDEAD 8 2481 #define W3_RACE_NIGHTELVES 4 2482 #define W3_RACE_DEMONS 16 2483 2484 #define W3_ICON_RANDOM 0 /* - Although when client presses random in PG and it sends "32" its "0" for icon */ 2485 #define W3_ICON_HUMANS 1 2486 #define W3_ICON_ORCS 2 2487 #define W3_ICON_UNDEAD 3 /* - Although when client presses undead in PG and it sends "8" its "3" for icon */ 2488 #define W3_ICON_NIGHTELVES 4 2489 #define W3_ICON_DEMONS 5 2490 2491 /* Icon setup 3RAW then <accounts level> <Race> <race wins> */ 2492 /* Races: 1 = human, 2 = orc, 8 = undead, 4 = nightelf 32 = random */ 2493 /* Misc icons are 6-9 * - There might be some icons not defined*/ 2494 /* If you find them let us know pse, forums.cheatlist.com in War3 Hacking/Development */ 2495 2496 /*Human Icons*/ 2497 #define W3_ICON_HUMAN_FOOTMAN "3RAW 1 1 11" 2498 #define W3_ICON_HUMAN_KNIGHT "3RAW 1 1 100" 2499 #define W3_ICON_HUMAN_ARCHMAGE "3RAW 1 1 250" 2500 #define W3_ICON_HUMAN_HERO "3RAW 1 1 1000" 2501 2502 /*Orc Icons*/ 2503 #define W3_ICON_ORC_PEON "3RAW 1 2 00" /* default icon , unless u change it in code*/ 2504 #define W3_ICON_ORC_GRUNT "3RAW 1 2 10" 2505 #define W3_ICON_ORC_TAUREN "3RAW 1 2 100" 2506 #define W3_ICON_ORC_FARSEER "3RAW 1 2 250" 2507 #define W3_ICON_ORC_HERO "3RAW 1 2 1000" 2508 2509 /*Undead Icons*/ 2510 #define W3_ICON_UNDEAD_GHOUL "3RAW 1 3 10" 2511 #define W3_ICON_UNDEAD_ABOM "3RAW 1 3 100" 2512 #define W3_ICON_UNDEAD_LICH "3RAW 1 3 250" 2513 #define W3_ICON_UNDEAD_HERO "3RAW 1 3 1000" 2514 2515 /*Night Elf Icons*/ 2516 #define W3_ICON_ELF_ARCHER "3RAW 1 4 10" 2517 #define W3_ICON_ELF_DRUIDCLAW "3RAW 1 4 100" 2518 #define W3_ICON_ELF_PRIESMOON "3RAW 1 4 250" 2519 #define W3_ICON_ELF_HERO "3RAW 1 4 1000" 2520 2521 /*Random Icons , like NPC's, Creeps*/ 2522 #define W3_ICON_RANDOM_GREENDRAGON "3RAW 1 9 10" 2523 #define W3_ICON_RANDOM_BLACKDRAGON "3RAW 1 9 100" 2524 #define W3_ICON_RANDOM_REDDRAGON "3RAW 1 9 250" 2525 #define W3_ICON_RANDOM_BLUEDRAGON "3RAW 1 9 1000" 2526 2527 /* End of Undying Edits */ 2528 2529 /* Blizzard Entertainment employee */ 2530 #define MF_BLIZZARD 0x00000001 /* blue Blizzard logo */ 2531 /* Channel operator */ 2532 #define MF_GAVEL 0x00000002 /* gavel */ 2533 /* Speaker in moderated channel */ 2534 #define MF_VOICE 0x00000004 /* megaphone */ 2535 /* System operator */ 2536 #define MF_BNET 0x00000008 /* (old: blue Blizzard, new: green b.net) or red BNETD logo */ 2537 /* Chat bot or other user without UDP support */ 2538 #define MF_PLUG 0x00000010 /* tiny plug to right of icon, no UDP */ 2539 /* Squelched/Ignored user */ 2540 #define MF_X 0x00000020 /* big red X */ 2541 /* Special guest of Blizzard Entertainment */ 2542 #define MF_SHADES 0x00000040 /* sunglasses */ 2543 /* unused 0x00000080 */ 2544 /* Use BEL character in error codes. Some bots use it as a flag. Battle.net */ 2545 /* stopped supporting it recently. */ 2546 #define MF_BEEP 0x00000100 /* no change in icon */ 2547 /* Registered Professional Gamers League player */ 2548 #define MF_PGLPLAY 0x00000200 /* PGL player logo */ 2549 /* Registered Professional Gamers League official */ 2550 #define MF_PGLOFFL 0x00000400 /* PGL official logo */ 2551 /* Registered KBK player */ 2552 #define MF_KBKPLAY 0x00000800 /* KBK player logo */ 2553 /* Official KBK Referee */ 2554 #define MF_KBKREF 0x00001000 /* KBK referee logo */ /* FIXME: this number may be wrong */ 2555 /* unused... FIXME: how many bits work? 16 or 32? */ 2556 2557 /****** Channel Flags ******/ 2558 /* flag bits for MT_CHANNEL message */ 2559 #define CF_PUBLIC 0x00000001 /* public channel */ 2560 #define CF_MODERATED 0x00000002 /* moderated channel */ 2561 #define CF_RESTRICTED 0x00000004 /* ? restricted channel ? */ 2562 #define CF_THEVOID 0x00000008 /* "The Void" */ 2563 #define CF_SYSTEM 0x00000020 /* system channel */ 2564 #define CF_OFFICIAL 0x00001000 /* official channel */ 2565 /* 2566 * Examples: 2567 * 0x00001003 Blizzard Tech Support 2568 * 0x00001001 Open Tech Support 2569 * 0x00000021 Diablo II USA-1 or War2BNE USA-1 2570 * 0x0000000D warez 2571 * 0x00000009 The Void 2572 * 0x00000001 War2 Ladder Challenges or Diablo II PvP 2573 * 0x00000000 clan randomchannel 2574 * 0x00000000 randomchannel 2575 */ 2576 /******************************************************/ 2577 2578 2579 /******************************************************/ 2580 #define CLIENT_MESSAGE 0x0eff 2581 typedef struct 2582 { 2583 t_bnet_header h; 2584 /* text */ 2585 } PACKED_ATTR() t_client_message; 2586 /******************************************************/ 2587 2588 2589 /******************************************************/ 2590 /* 2591 FF 09 17 00 03 00 00 00 FF FF 00 00 00 00 00 00 ................ 2592 19 00 00 00 00 00 00 ....... 2593 2594 FF 09 24 00 00 00 00 00 00 00 00 00 00 00 00 00 ..$............. 2595 01 00 00 00 4C 61 64 64 65 72 20 31 20 6F 6E 20 ....Ladder 1 on 2596 31 00 00 00 1... 2597 */ 2598 #define CLIENT_GAMELISTREQ 0x09ff 2599 typedef struct 2600 { 2601 t_bnet_header h; 2602 bn_short gametype; 2603 bn_short unknown1; 2604 bn_int unknown2; 2605 bn_int unknown3; 2606 bn_int maxgames; 2607 /* game name */ 2608 } PACKED_ATTR() t_client_gamelistreq; 2609 #define CLIENT_GAMELISTREQ_ALL 0x0000 2610 #define CLIENT_GAMELISTREQ_MELEE 0x0002 2611 #define CLIENT_GAMELISTREQ_FFA 0x0003 2612 #define CLIENT_GAMELISTREQ_ONEONONE 0x0004 2613 #define CLIENT_GAMELISTREQ_CTF 0x0005 2614 #define CLIENT_GAMELISTREQ_GREED 0x0006 2615 #define CLIENT_GAMELISTREQ_SLAUGHTER 0x0007 2616 #define CLIENT_GAMELISTREQ_SDEATH 0x0008 2617 #define CLIENT_GAMELISTREQ_LADDER 0x0009 2618 #define CLIENT_GAMELISTREQ_IRONMAN 0x0010 2619 #define CLIENT_GAMELISTREQ_MAPSET 0x000a 2620 #define CLIENT_GAMELISTREQ_TEAMMELEE 0x000b 2621 #define CLIENT_GAMELISTREQ_TEAMFFA 0x000c 2622 #define CLIENT_GAMELISTREQ_TEAMCTF 0x000d 2623 #define CLIENT_GAMELISTREQ_PGL 0x000e 2624 #define CLIENT_GAMELISTREQ_TOPVBOT 0x000f 2625 #define CLIENT_GAMELISTREQ_DIABLO 0x0409 /* FIXME: this should be the langid */ 2626 #define CLIENT_GAMELISTREQ_LOADED 0x0a00 2627 /* FIXME: Diablo reports differently than it is listed in GAMELIST */ 2628 #define CLIENT_GAMETYPE_DIABLO_0 0x00000000 /* Level 1 Char */ 2629 #define CLIENT_GAMETYPE_DIABLO_1 0x00000001 /* Level 2 Char */ 2630 #define CLIENT_GAMETYPE_DIABLO_2 0x00000002 /* Level ? Char */ 2631 #define CLIENT_GAMETYPE_DIABLO_3 0x00000003 /* Level 4 Char */ 2632 #define CLIENT_GAMETYPE_DIABLO_4 0x00000004 /* Level ? Char */ 2633 #define CLIENT_GAMETYPE_DIABLO_5 0x00000005 /* Level ? Char */ 2634 #define CLIENT_GAMETYPE_DIABLO_6 0x00000006 /* Level ? Char */ 2635 #define CLIENT_GAMETYPE_DIABLO_7 0x00000007 /* Level ? Char */ 2636 #define CLIENT_GAMETYPE_DIABLO_8 0x00000008 /* Level 20-24 Char */ 2637 #define CLIENT_GAMETYPE_DIABLO_9 0x00000009 /* Level 25-? Char */ 2638 #define CLIENT_GAMETYPE_DIABLO_a 0x0000000a /* Level ? Char */ 2639 #define CLIENT_GAMETYPE_DIABLO_b 0x0000000b /* Level ? Char */ 2640 #define CLIENT_GAMETYPE_DIABLO_c 0x0000000c /* Level ? Char */ 2641 #define CLIENT_GAMETYPE_DIABLO_d 0x0000000d /* Level ? Char */ 2642 /* list might continue - what is maximum diablo level ? */ 2643 /* FIXME: Not sure how Diablo II does things yet */ 2644 #define CLIENT_GAMETYPE_DIABLO2_CLOSE 0x00000000 /* close game */ 2645 #define CLIENT_GAMETYPE_DIABLO2_OPEN_NORMAL 0X00000008 /* open, normal difficulty */ 2646 #define CLIENT_GAMETYPE_DIABLO2_OPEN_NIGHTMARE 0X00000009 /* open, nightmare difficulty */ 2647 #define CLIENT_GAMETYPE_DIABLO2_OPEN_HELL 0X0000000a /* open, hell difficulty */ 2648 2649 /******************************************************/ 2650 2651 2652 /******************************************************/ 2653 /* 2654 FF 09 35 00 01 00 00 00 00 00 00 00 03 00 01 00 ..5............. 2655 00 00 00 00 02 00 17 E0 80 7B 4F 0D 00 00 00 00 .........{O..... 2656 00 00 00 00 04 00 00 00 64 00 00 00 4D 79 47 61 ........d...MyGa 2657 6D 65 00 00 00 me... 2658 2659 FF 09 5B 00 01 00 00 00 00 00 00 00 03 00 01 00 ..[............. 2660 02 00 17 E0 80 7B 4F 0D 00 00 00 00 00 00 00 00 .....{O......... 2661 04 00 00 00 2B 00 00 00 47 61 6D 65 00 50 61 73 ....+...Game.Pas 2662 73 00 2C 33 34 2C 31 32 2C 35 2C 31 2C 33 2C 31 s.,34,12,5,1,3,1 2663 2C 63 63 63 33 36 34 30 36 2C 2C 42 6F 62 0D 43 ,ccc36406,,Bob.C 2664 68 61 6C 6C 65 6E 67 65 72 0D 00 hallenger.. 2665 2666 FF 09 D4 03 0A 00 00 00 0C 00 00 00 09 04 00 00 ................ 2667 02 00 17 E0 CD E8 B5 E1 00 00 00 00 00 00 00 00 ................ 2668 00 00 00 00 3C 00 00 00 4A 65 73 73 65 27 73 20 ....<...Jesse's 2669 57 6F 72 6C 64 00 00 32 0D 4C 69 7A 7A 69 65 2E World..2.Lizzie. 2670 42 6F 72 64 65 6E 0D 4C 54 52 44 20 34 30 20 31 Borden.LTRD 40 1 2671 20 33 20 31 32 31 20 31 32 36 20 33 30 36 20 31 3 121 126 306 1 2672 33 36 20 35 34 37 30 32 20 30 00 ... 2673 2674 FF 09 70 00 01 00 00 00 0F 00 04 00 09 04 00 00 ..p............. 2675 02 00 17 E0 C6 0B 13 3C 00 00 00 00 00 00 00 00 .......<........ 2676 04 00 00 00 C5 00 00 00 4C 61 64 64 65 72 20 31 ........Ladder 1 2677 20 6F 6E 20 31 00 00 2C 2C 2C 36 2C 32 2C 66 2C on 1..,,,6,2,f, 2678 34 2C 66 63 63 35 38 65 34 61 2C 37 32 30 30 2C 4,fcc58e4a,7200, 2679 49 63 65 36 39 62 75 72 67 0D 46 6F 72 65 73 74 Ice69burg.Forest 2680 20 54 72 61 69 6C 20 42 4E 45 2E 70 75 64 0D 00 Trail BNE.pud.. 2681 2682 # war3 2683 # 66 packet from server: type=0x09ff(SERVER_GAMELISTREPLY) length=131 class=bnet 2684 0000: FF 09 83 00 01 00 00 00 01 00 00 00 09 04 00 00 ................ 2685 0010: 02 00 17 E0 18 CF BF 9B 00 00 00 00 00 00 00 00 ................ 2686 0020: 10 00 00 00 0F 00 00 00 33 20 6F 6E 20 33 20 64 ........3 on 3 d 2687 0030: 61 72 6B 20 66 6F 72 65 73 74 00 00 35 31 30 30 ark forest..5100 2688 0040: 30 30 30 30 30 01 03 01 01 81 01 81 01 73 27 25 00000........s'% 2689 0050: 15 29 4D 61 71 53 73 5D 63 65 75 61 5D A9 29 37 .)MaqSs]ceua].)7 2690 0060: 29 45 61 73 6B 69 21 47 6F 73 65 73 75 DD 2F 77 )Easki!Gosesu./w 2691 0070: 33 6D 01 4B 61 D7 69 73 69 69 6F 5B 53 07 4B 5D 3m.Ka.isiio[S.K] 2692 0080: 01 01 00 ... 2693 2694 [23:32] <@nok-> 0000: FF 09 E9 01 04 00 00 00 01 00 00 00 09 04 00 00 ................ 2695 [23:32] <@nok-> 0010: 02 00 17 E0 40 69 1B 07 00 00 00 00 00 00 00 00 ....@i.......... 2696 2697 0000: FF 09 7A 01 03 00 00 00 01 00 00 00 09 04 00 00 ..z............. 2698 0010: 02 00 17 E0 18 2C 7E 7B 00 00 00 00 00 00 00 00 .....,~{........ 2699 0020: 10 00 00 00 09 00 00 00 34 20 6F 6E 20 34 20 4D ........4 on 4 M 2700 0030: 69 73 74 00 00 37 31 30 30 30 30 30 30 30 01 03 ist..710000000.. 2701 0040: 01 01 89 01 89 01 75 4D 7B 27 A1 4D 61 71 53 73 ......uM{'.MaqSs 2702 0050: 5D 63 65 75 61 5D B9 29 39 29 47 6F 6D 65 17 6D ]ceua].)9)Gome.m 2703 0060: 73 21 69 6F 21 75 75 69 65 21 4D 69 73 75 1D 2F s!io!uuie!Misu./ 2704 0070: 77 33 6D 01 51 73 BB 69 6F 63 65 2D 4D 75 17 63 w3m.Qs.ioce-Mu.c 2705 0080: 69 67 65 73 01 01 00 01 00 00 00 09 04 00 00 02 iges............ 2706 2707 */ 2708 #define SERVER_GAMELISTREPLY 0x09ff 2709 typedef struct 2710 { 2711 t_bnet_header h; 2712 bn_int gamecount; 2713 bn_int sstatus; /* when reply with error to specific game */ 2714 /* games */ 2715 } PACKED_ATTR() t_server_gamelistreply; 2716 2717 #define SERVER_GAMELISTREPLY_GAME_SSTATUS_NOTFOUND 0x0 /* but also any other value diff from the ones bellow */ 2718 #define SERVER_GAMELISTREPLY_GAME_SSTATUS_PASS 0x2 /* password incorrect */ 2719 #define SERVER_GAMELISTREPLY_GAME_SSTATUS_FULL 0x3 /* game full */ 2720 #define SERVER_GAMELISTREPLY_GAME_SSTATUS_STARTED 0x4 /* game started */ 2721 #define SERVER_GAMELISTREPLY_GAME_SSTATUS_NOSPAWNCDKEY 0x5 /* trying to use a spawn install join invalid cdkey creator game */ 2722 #define SERVER_GAMELISTREPLY_GAME_SSTATUS_LOADED 0x0a00 /* Loaded game */ 2723 2724 typedef struct 2725 { 2726 /* if yak doesn't like this... then the client doesn't also =) (bbf) 2727 bn_int unknown7; */ 2728 bn_short gametype; 2729 bn_short unknown1; /* langid under Diablo... */ 2730 bn_short unknown3; 2731 /* bn_int deleted; */ /* they changed the structure at one point */ 2732 bn_short port; /* big endian byte order... at least they are consistent! */ 2733 bn_int game_ip; /* big endian byte order */ 2734 bn_int unknown4; 2735 bn_int unknown5; /* FIXME: got to figure out where latency is */ 2736 bn_int status; 2737 bn_int unknown6; 2738 /* game name */ 2739 /* clear password */ 2740 /* info */ 2741 } PACKED_ATTR() t_server_gamelistreply_game; 2742 #define SERVER_GAMELISTREPLY_GAME_UNKNOWN7 0x00000000 //0x00000409 // 0x0000000c 2743 #define SERVER_GAMELISTREPLY_GAME_UNKNOWN1 0x0001 //0x0000 //0x0001 // 0x0000 2744 #define SERVER_GAMELISTREPLY_GAME_UNKNOWN3 0x0002 2745 #define SERVER_GAMELISTREPLY_GAME_UNKNOWN4 0x00000000 2746 #define SERVER_GAMELISTREPLY_GAME_UNKNOWN5 0x00000000 2747 #define SERVER_GAMELISTREPLY_GAME_STATUS_OPEN 0x00000004 2748 #define SERVER_GAMELISTREPLY_GAME_STATUS_FULL 0x00000006 2749 #define SERVER_GAMELISTREPLY_GAME_STATUS_STARTED 0x0000000e 2750 #define SERVER_GAMELISTREPLY_GAME_STATUS_DONE 0x0000000c 2751 #define SERVER_GAMELISTREPLY_GAME_UNKNOWN6 0x0000002b /* latency? */ 2752 2753 #define SERVER_GAMELISTREPLY_TYPE_DIABLO2_OPEN 0x0704 /* open game */ 2754 /******************************************************/ 2755 2756 2757 /******************************************************/ 2758 #define CLIENT_STARTGAME1 0x08ff /* original starcraft or shareware (1.01) */ 2759 typedef struct 2760 { 2761 t_bnet_header h; 2762 bn_int status; 2763 bn_int unknown3; 2764 bn_short gametype; 2765 bn_short unknown1; 2766 bn_int unknown4; 2767 bn_int unknown5; 2768 /* game name */ 2769 /* game password */ 2770 /* game info */ 2771 } PACKED_ATTR() t_client_startgame1; 2772 /* I have also seen 1,5,7,f */ 2773 #define CLIENT_STARTGAME1_STATUSMASK 0x0000000f 2774 #define CLIENT_STARTGAME1_STATUS_OPEN 0x00000004 2775 #define CLIENT_STARTGAME1_STATUS_FULL 0x00000006 2776 #define CLIENT_STARTGAME1_STATUS_STARTED 0x0000000e 2777 #define CLIENT_STARTGAME1_STATUS_DONE 0x0000000c 2778 /******************************************************/ 2779 2780 2781 /******************************************************/ 2782 /* 2783 FF 1B 14 00 02 00 17 E0 80 7B 3F 54 00 00 00 00 .........{?T.... 2784 00 00 00 00 .... 2785 */ 2786 #define CLIENT_UNKNOWN_1B 0x1bff 2787 typedef struct 2788 { 2789 t_bnet_header h; 2790 bn_short unknown1; /* FIXME: This "2" is the same as in the game 2791 listings. What do they mean? */ 2792 bn_short port; /* big endian byte order */ 2793 bn_int ip; /* big endian byte order */ 2794 bn_int unknown2; 2795 bn_int unknown3; 2796 } PACKED_ATTR() t_client_unknown_1b; 2797 #define CLIENT_UNKNOWN_1B_UNKNOWN1 0x0002 2798 #define CLIENT_UNKNOWN_1B_UNKNOWN2 0x00000000 2799 #define CLIENT_UNKNOWN_1B_UNKNOWN3 0x00000000 2800 /******************************************************/ 2801 2802 2803 /******************************************************/ 2804 /* 2805 FF 1A 4C 00 01 00 00 00 00 00 00 00 00 00 00 00 ..L............. 2806 0F 00 00 00 00 00 00 00 E0 17 00 00 61 6E 73 00 ............ans. 2807 65 6C 6D 6F 00 30 0D 77 61 72 72 69 6F 72 0D 4C elmo.0.warrior.L 2808 54 52 44 20 31 20 30 20 30 20 33 30 20 31 30 20 TRD 1 0 0 30 10 2809 32 30 20 32 35 20 31 30 30 20 30 00 20 25 100 0. 2810 */ 2811 #define CLIENT_STARTGAME3 0x1aff /* Starcraft 1.03, Diablo 1.07 */ 2812 typedef struct 2813 { 2814 t_bnet_header h; 2815 bn_int status; 2816 bn_int unknown3; 2817 bn_short gametype; 2818 bn_short unknown1; 2819 bn_int unknown6; 2820 bn_int unknown4; /* port # under Diablo */ 2821 bn_int unknown5; 2822 /* game name */ 2823 /* game password */ 2824 /* game info */ 2825 } PACKED_ATTR() t_client_startgame3; 2826 #define CLIENT_STARTGAME3_STATUSMASK 0x0000000f 2827 #define CLIENT_STARTGAME3_STATUS_OPEN1 0x00000001 /* used by Diablo */ 2828 #define CLIENT_STARTGAME3_STATUS_OPEN 0x00000004 2829 #define CLIENT_STARTGAME3_STATUS_FULL 0x00000006 2830 #define CLIENT_STARTGAME3_STATUS_STARTED 0x0000000e 2831 #define CLIENT_STARTGAME3_STATUS_DONE 0x0000000c 2832 /******************************************************/ 2833 2834 2835 /******************************************************/ 2836 /* 2837 FF 1C 49 00 00 00 00 00 00 00 00 00 03 00 01 00 ..I............. 2838 00 00 00 00 00 00 00 00 74 65 61 6D 6D 65 6C 65 ........teammele 2839 65 00 00 2C 2C 2C 2C 31 2C 33 2C 31 2C 33 65 33 e..,,,,1,3,1,3e3 2840 37 61 38 34 63 2C 37 2C 61 6E 73 65 6C 6D 6F 0D 7a84c,7,anselmo. 2841 4F 63 74 6F 70 75 73 0D 00 Octopus.. 2842 2843 Brood War 1.04 ladder, disconnect==loss 2844 FF 1C 45 00 10 00 00 00 00 00 00 00 09 00 02 00 ..E............. 2845 00 00 00 00 01 00 00 00 54 45 53 54 00 00 2C 34 ........TEST..,4 2846 34 2C 31 34 2C 2C 32 2C 39 2C 32 2C 33 65 33 37 4,14,,2,9,2,3e37 2847 61 38 34 63 2C 33 2C 52 6F 73 73 0D 41 73 68 72 a84c,3,Ross.Ashr 2848 69 67 6F 0D 00 igo.. 2849 2850 Brood War 1.04 ladder, disconnect==disconnect 2851 FF 1C 45 00 00 00 00 00 00 00 00 00 09 00 01 00 ..E............. 2852 00 00 00 00 01 00 00 00 54 45 53 54 00 00 2C 34 ........TEST..,4 2853 34 2C 31 34 2C 2C 32 2C 39 2C 31 2C 33 65 33 37 4,14,,2,9,1,3e37 2854 61 38 34 63 2C 33 2C 52 6F 73 73 0D 41 73 68 72 a84c,3,Ross.Ashr 2855 69 67 6F 0D 00 igo.. 2856 2857 Brood War 1.04 greed, minerals==10000 2858 FF 1C 4C 00 00 00 00 00 00 00 00 00 06 00 04 00 ..L............. 2859 00 00 00 00 00 00 00 00 74 65 73 74 31 30 30 30 ........test1000 2860 30 00 00 2C 33 34 2C 31 32 2C 2C 31 2C 36 2C 34 0..,34,12,,1,6,4 2861 2C 33 65 33 37 61 38 34 63 2C 2C 52 6F 73 73 0D ,3e37a84c,,Ross. 2862 43 68 61 6C 6C 65 6E 67 65 72 0D 00 Challenger.. 2863 2864 FF 1C 4F 00 ..O. 2865 00 00 00 00 00 00 00 00 02 00 01 00 1F 00 00 00 ................ 2866 00 00 00 00 74 65 73 74 00 00 2C 34 34 2C 31 34 ....test..,44,14 2867 2C 35 2C 32 2C 32 2C 31 2C 32 31 30 34 62 62 33 ,5,2,2,1,2104bb3 2868 36 2C 34 2C 48 6F 6D 65 72 0D 54 68 65 20 4C 6F 6,4,Homer.The.Lo 2869 73 74 20 54 65 6D 70 6C 65 0D 00 st.Temple.. 2870 2871 Diablo II 1.03 (level diff 0) 2872 FF 1C 20 00 00 00 00 00 00 00 00 00 00 00 .. ... ........ 2873 00 00 00 00 00 00 00 00 00 00 54 65 73 74 00 00 ........ ..Test.. 2874 31 00 1. 2875 */ 2876 #define CLIENT_STARTGAME4 0x1cff /* Brood War or newer Starcraft (1.04, 1.05) */ 2877 typedef struct 2878 { 2879 t_bnet_header h; 2880 bn_short status; /* 0x0001 - private war3 game */ 2881 bn_short flag; 2882 bn_int unknown2; /* 00 00 00 00 */ 2883 bn_short gametype; 2884 bn_short option; /* 01 00 */ 2885 bn_int unknown4; /* 00 00 00 00 */ 2886 bn_int unknown5; /* 00 00 00 00 */ 2887 /* game name */ 2888 /* game password */ 2889 /* game info */ 2890 } PACKED_ATTR() t_client_startgame4; 2891 #define CLIENT_STARTGAME4_UNKNOWN2 0x00000000 2892 #define CLIENT_STARTGAME4_STATUSMASK_16 0x000000ff 2893 #define CLIENT_STARTGAME4_STATUSMASK_INIT_VALID 0x00000093 2894 #define CLIENT_STARTGAME4_STATUSMASK_OPEN_VALID 0x0000009f 2895 #define CLIENT_STARTGAME4_STATUS_INIT 0x00000000 2896 #define CLIENT_STARTGAME4_STATUS_PRIVATE 0x00000001 2897 #define CLIENT_STARTGAME4_STATUS_FULL 0x00000002 2898 #define CLIENT_STARTGAME4_STATUS_OPEN 0x00000004 2899 #define CLIENT_STARTGAME4_STATUS_START 0x00000008 2900 #define CLIENT_STARTGAME4_STATUS_DISC_IS_LOSS 0x00000010 2901 #define CLIENT_STARTGAME4_STATUS_REPLAY 0x00000080 2902 #define CLIENT_STARTGAME4_OPTION_MELEE_NORMAL 0x0001 2903 #define CLIENT_STARTGAME4_OPTION_FFA_NORMAL 0x0001 2904 #define CLIENT_STARTGAME4_OPTION_ONEONONE_NORMAL 0x0001 2905 #define CLIENT_STARTGAME4_OPTION_CTF_NORMAL 0x0001 2906 #define CLIENT_STARTGAME4_OPTION_GREED_10000 0x0004 2907 #define CLIENT_STARTGAME4_OPTION_GREED_7500 0x0003 2908 #define CLIENT_STARTGAME4_OPTION_GREED_5000 0x0002 2909 #define CLIENT_STARTGAME4_OPTION_GREED_2500 0x0001 2910 #define CLIENT_STARTGAME4_OPTION_SLAUGHTER_60 0x0004 2911 #define CLIENT_STARTGAME4_OPTION_SLAUGHTER_45 0x0003 2912 #define CLIENT_STARTGAME4_OPTION_SLAUGHTER_30 0x0002 2913 #define CLIENT_STARTGAME4_OPTION_SLAUGHTER_15 0x0001 2914 #define CLIENT_STARTGAME4_OPTION_SDEATH_NORMAL 0x0001 2915 #define CLIENT_STARTGAME4_OPTION_LADDER_COUNTASLOSS 0x0002 2916 #define CLIENT_STARTGAME4_OPTION_LADDER_NOPENALTY 0x0001 2917 #define CLIENT_STARTGAME4_OPTION_IRONMAN_ 0x000 /* FIXME */ 2918 #define CLIENT_STARTGAME4_OPTION_MAPSET_NORMAL 0x0001 2919 #define CLIENT_STARTGAME4_OPTION_TEAMMELEE_4 0x0003 2920 #define CLIENT_STARTGAME4_OPTION_TEAMMELEE_3 0x0002 2921 #define CLIENT_STARTGAME4_OPTION_TEAMMELEE_2 0x0001 2922 #define CLIENT_STARTGAME4_OPTION_TEAMFFA_4 0x0003 2923 #define CLIENT_STARTGAME4_OPTION_TEAMFFA_3 0x0002 2924 #define CLIENT_STARTGAME4_OPTION_TEAMFFA_2 0x0001 2925 #define CLIENT_STARTGAME4_OPTION_TEAMCTF_4 0x0003 2926 #define CLIENT_STARTGAME4_OPTION_TEAMCTF_3 0x0002 2927 #define CLIENT_STARTGAME4_OPTION_TEAMCTF_2 0x0001 2928 #define CLIENT_STARTGAME4_OPTION_PGL_ 0x000 /* FIXME */ 2929 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_1 0x0001 /* 1 vs all [ 1x1, 1x2, 1x3 ...] */ 2930 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_2 0x0002 /* f.e. for (8) The Hunters.scm 1 vs all */ 2931 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_3 0x0003 /* means 1x7 */ 2932 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_4 0x0004 /* 4 vs all */ 2933 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_5 0x0005 2934 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_6 0x0006 2935 #define CLIENT_STARTGAME4_OPTION_TOPVBOT_7 0x0007 2936 #define CLIENT_STARTGAME4_UNKNOWN4 0x00000000 2937 #define CLIENT_STARTGAME4_UNKNOWN5 0x00000000 2938 #define CLIENT_STARTGAME4_OPTION_NONE 0x000 /* FIXME */ 2939 2940 #define CLIENT_STARTGAME4_FLAG_PRIVATE 0x0001 2941 #define CLIENT_STARTGAME4_FLAG_PRIVATE_PASSWORD "password" 2942 2943 #define CLIENT_MAPTYPE_SELFMADE 0 2944 #define CLIENT_MAPTYPE_BLIZZARD 1 2945 #define CLIENT_MAPTYPE_LADDER 2 2946 #define CLIENT_MAPTYPE_PGL 3 2947 #define CLIENT_MAPTYPE_KBK 4 2948 #define CLIENT_MAPTYPE_CompUSA 5 2949 2950 /* CLIENT_GAMESPEED_FAST is NULL for "fast" games, I convert it into 4 */ 2951 #define CLIENT_GAMESPEED_SLOWEST 0 2952 #define CLIENT_GAMESPEED_SLOWER 1 2953 #define CLIENT_GAMESPEED_SLOW 2 2954 #define CLIENT_GAMESPEED_NORMAL 3 2955 #define CLIENT_GAMESPEED_FAST 4 2956 #define CLIENT_GAMESPEED_FASTER 5 2957 #define CLIENT_GAMESPEED_FASTEST 6 2958 2959 /* The tileset is NULL for BADLANDS, I'm using zero here */ 2960 #define CLIENT_TILESET_BADLANDS 0 2961 #define CLIENT_TILESET_SPACE 1 2962 #define CLIENT_TILESET_INSTALLATION 2 2963 #define CLIENT_TILESET_ASHWORLD 3 2964 #define CLIENT_TILESET_JUNGLE 4 2965 #define CLIENT_TILESET_DESERT 5 2966 #define CLIENT_TILESET_ICE 6 2967 #define CLIENT_TILESET_TWILIGHT 7 2968 2969 /* Diablo II Difficulty */ 2970 #define CLIENT_DIFFICULTY_NORMAL 1 2971 #define CLIENT_DIFFICULTY_NIGHTMARE 2 2972 #define CLIENT_DIFFICULTY_HELL 3 /* assumed */ 2973 #define CLIENT_DIFFICULTY_HARDCORE_NORMAL 4 2974 #define CLIENT_DIFFICULTY_HARDCORE_NIGHTMARE 5 /* assumed */ 2975 #define CLIENT_DIFFICULTY_HARDCORE_HELL 6 /* assumed */ 2976 /******************************************************/ 2977 2978 2979 /******************************************************/ 2980 #define SERVER_STARTGAME1_ACK 0x08ff 2981 typedef struct 2982 { 2983 t_bnet_header h; 2984 bn_int reply; 2985 } PACKED_ATTR() t_server_startgame1_ack; 2986 #define SERVER_STARTGAME1_ACK_NO 0x00000000 2987 #define SERVER_STARTGAME1_ACK_OK 0x00000001 2988 /******************************************************/ 2989 2990 2991 /******************************************************/ 2992 #define SERVER_STARTGAME3_ACK 0x1aff 2993 typedef struct 2994 { 2995 t_bnet_header h; 2996 bn_int reply; 2997 } PACKED_ATTR() t_server_startgame3_ack; 2998 #define SERVER_STARTGAME3_ACK_NO 0x00000000 2999 #define SERVER_STARTGAME3_ACK_OK 0x00000001 3000 /******************************************************/ 3001 3002 3003 /******************************************************/ 3004 #define SERVER_STARTGAME4_ACK 0x1cff 3005 typedef struct 3006 { 3007 t_bnet_header h; 3008 bn_int reply; 3009 } PACKED_ATTR() t_server_startgame4_ack; 3010 #define SERVER_STARTGAME4_ACK_NO 0x00000001 3011 #define SERVER_STARTGAME4_ACK_OK 0x00000000 3012 /******************************************************/ 3013 3014 3015 /******************************************************/ 3016 #define CLIENT_CLOSEGAME 0x02ff 3017 #define CLIENT_CLOSEGAME2 0x1fff 3018 typedef struct 3019 { 3020 t_bnet_header h; 3021 } PACKED_ATTR() t_client_closegame; 3022 /******************************************************/ 3023 3024 3025 /******************************************************/ 3026 #define CLIENT_LEAVECHANNEL 0x10ff 3027 typedef struct 3028 { 3029 t_bnet_header h; 3030 } PACKED_ATTR() t_client_leavechannel; 3031 3032 /******************************************************/ 3033 /* 3034 packets 0x60ff - 0x64ff moved to anongame_protocal.h 3035 [Omega] 3036 */ 3037 /******************************************************/ 3038 3039 /* 3040 FF 32 2A 00 1A 29 25 72 77 C3 3C 25 6B 4D 7A A4 .2*..)%rw.<%kMz. 3041 3B 92 38 D5 01 F4 A5 6B 28 32 29 43 68 61 6C 6C ;.8....k(2)Chall 3042 65 6E 67 65 72 2E 73 63 6D 00 enger.scm. 3043 3044 FF 32 2C 00 21 F8 16 2D 99 D9 BC A4 A6 5C BA 60 .2,.!..-.....\.` 3045 71 DE 6D 64 6F BC A5 03 28 34 29 44 69 72 65 20 q.mdo...(4)Dire 3046 53 74 72 61 69 74 73 2E 73 63 6D 00 Straits.scm. 3047 */ 3048 #define CLIENT_MAPAUTHREQ1 0x32ff 3049 typedef struct 3050 { 3051 t_bnet_header h; 3052 bn_int file_checksum[5]; 3053 /* mapfile */ 3054 } PACKED_ATTR() t_client_mapauthreq1; 3055 /******************************************************/ 3056 3057 3058 /******************************************************/ 3059 /* 3060 FF 32 08 00 01 00 00 00 .2...... 3061 */ 3062 #define SERVER_MAPAUTHREPLY1 0x32ff 3063 typedef struct 3064 { 3065 t_bnet_header h; 3066 bn_int response; 3067 } PACKED_ATTR() t_server_mapauthreply1; 3068 #define SERVER_MAPAUTHREPLY1_NO 0x00000000 3069 #define SERVER_MAPAUTHREPLY1_OK 0x00000001 3070 #define SERVER_MAPAUTHREPLY1_LADDER_OK 0x00000002 3071 /******************************************************/ 3072 3073 3074 /******************************************************/ 3075 /* 3076 From BW1.08alpha: 3077 FF 3C 31 00 7A 20 01 00 3B B7 C6 27 0D 61 C3 79 .<1.z ..;..'.a.y 3078 79 BE 24 5E 9C 07 05 7D 0B 6A A0 78 28 35 29 4A y.$^...}.j.x(5)J 3079 65 77 65 6C 65 64 20 52 69 76 65 72 2E 73 63 6D eweled River.scm 3080 00 . 3081 */ 3082 #define CLIENT_MAPAUTHREQ2 0x3cff 3083 typedef struct 3084 { 3085 t_bnet_header h; 3086 bn_int unknown; 3087 bn_int file_hash[5]; 3088 /* mapfile */ 3089 } PACKED_ATTR() t_client_mapauthreq2; 3090 /******************************************************/ 3091 3092 3093 /******************************************************/ 3094 /* 3095 assuming it looks like the REPLY1 packet.... 3096 */ 3097 #define SERVER_MAPAUTHREPLY2 0x3cff 3098 typedef struct 3099 { 3100 t_bnet_header h; 3101 bn_int response; 3102 } PACKED_ATTR() t_server_mapauthreply2; 3103 #define SERVER_MAPAUTHREPLY2_NO 0x00000000 /* FIXME: these values are guesses */ 3104 #define SERVER_MAPAUTHREPLY2_OK 0x00000001 3105 #define SERVER_MAPAUTHREPLY2_LADDER_OK 0x00000002 3106 /******************************************************/ 3107 3108 3109 /******************************************************/ 3110 /* 3111 FF 15 14 00 36 38 58 49 52 41 54 53 00 00 00 00 ....68XIRATS.... 3112 AF 14 55 36 ..U6 3113 */ 3114 #define CLIENT_ADREQ 0x15ff 3115 typedef struct 3116 { 3117 t_bnet_header h; 3118 bn_int archtag; 3119 bn_int clienttag; 3120 bn_int prev_adid; /* zero if first request */ 3121 bn_int ticks; /* Unix-style time in seconds */ 3122 } PACKED_ATTR() t_client_adreq; 3123 /******************************************************/ 3124 3125 3126 /******************************************************/ 3127 /* 3128 Sent in response to a CLIENT_ADREQ to tell the client which 3129 banner to display next 3130 3131 FF 15 3A 00 72 00 00 00 2E 70 63 78 50 15 7A 1C ..:.r....pcxP.z. 3132 CE 0F BD 01 61 64 30 30 30 30 37 32 2E 70 63 78 ....ad000072.pcx 3133 00 68 74 74 70 3A 2F 2F 77 77 77 2E 62 6C 69 7A .http://www.bliz 3134 7A 61 72 64 2E 63 6F 6D 2F 00 zard.com/. 3135 3136 FF 15 3C 00 C3 00 00 00 2E 73 6D 6B 00 9B 36 A6 ..<......smk..6. 3137 8F 5B BE 01 61 64 30 30 30 30 63 33 2E 73 6D 6B .[..ad0000c3.smk 3138 00 68 74 74 70 3A 2F 2F 77 77 77 2E 66 61 74 68 .http://www.fath 3139 65 72 68 6F 6F 64 2E 6F 72 67 2F 00 erhood.org/. 3140 3141 FF 15 36 00 2B 51 02 00 ..6.+Q.. 3142 2E 70 63 78 00 00 00 00 58 01 B2 00 61 64 30 32 .pcx....X...ad02 3143 35 31 32 62 2E 70 63 78 00 68 74 74 70 3A 2F 2F 512b.pcx.http:// 3144 77 77 77 2E 66 73 67 73 2E 63 6F 6D 2F 00 www.fsgs.com/. 3145 */ 3146 #define SERVER_ADREPLY 0x15ff 3147 typedef struct 3148 { 3149 t_bnet_header h; 3150 bn_int adid; 3151 bn_int extensiontag; /* unlike other tags, this one is "forward" */ 3152 bn_long timestamp; /* file modification time? */ 3153 /* filename */ 3154 /* link URL */ 3155 } PACKED_ATTR() t_server_adreply; 3156 /******************************************************/ 3157 3158 3159 /******************************************************/ 3160 #define CLIENT_ADACK 0x21ff 3161 /* 3162 Sent after client has displayed the banner 3163 3164 0000: FF 21 36 00 36 38 58 49 52 41 54 53 72 00 00 00 .!6.68XIRATSr... 3165 0010: 61 64 30 30 30 30 37 32 2E 70 63 78 00 68 74 74 ad000072.pcx.htt 3166 0020: 70 3A 2F 2F 77 77 77 2E 62 6C 69 7A 7A 61 72 64 p://www.blizzard 3167 0030: 2E 63 6F 6D 2F 00 .com/. 3168 3169 0000: FF 21 38 00 36 38 58 49 4C 54 52 44 C3 00 00 00 .!8.68XILTRD.... 3170 0010: 61 64 30 30 30 30 63 33 2E 73 6D 6B 00 68 74 74 ad0000c3.smk.htt 3171 0020: 70 3A 2F 2F 77 77 77 2E 66 61 74 68 65 72 68 6F p://www.fatherho 3172 0030: 6F 64 2E 6F 72 67 2F 00 od.org/. 3173 */ 3174 typedef struct 3175 { 3176 t_bnet_header h; 3177 bn_int archtag; 3178 bn_int clienttag; 3179 bn_int adid; 3180 /* adfile */ 3181 /* adlink */ 3182 } PACKED_ATTR() t_client_adack; 3183 /******************************************************/ 3184 3185 3186 /******************************************************/ 3187 /* 3188 Sent if the user clicks on the adbanner 3189 */ 3190 #define CLIENT_ADCLICK 0x16ff 3191 typedef struct 3192 { 3193 t_bnet_header h; 3194 bn_int adid; 3195 bn_int unknown1; 3196 } PACKED_ATTR() t_client_adclick; 3197 /******************************************************/ 3198 3199 3200 /******************************************************/ 3201 /* first seen in Diablo II? */ 3202 /* 3203 FF 41 08 00 01 00 00 00 .A...... 3204 */ 3205 #define CLIENT_ADCLICK2 0x41ff 3206 typedef struct 3207 { 3208 t_bnet_header h; 3209 bn_int adid; 3210 } PACKED_ATTR() t_client_adclick2; 3211 /******************************************************/ 3212 3213 3214 /******************************************************/ 3215 /* first seen in Diablo II? */ 3216 /* 3217 FF 41 2C 00 0B 20 00 00 68 74 .qT....A,.. ..ht 3218 74 70 3A 2F 2F 77 77 77 2E 62 6C 69 7A 7A 61 72 tp://www.blizzar 3219 64 2E 63 6F 6D 2F 64 69 61 62 6C 6F 32 65 78 70 d.com/diablo2exp 3220 2F 00 /. 3221 */ 3222 #define SERVER_ADCLICKREPLY2 0x41ff 3223 typedef struct 3224 { 3225 t_bnet_header h; 3226 bn_int adid; 3227 /* link URL */ 3228 } PACKED_ATTR() t_server_adclickreply2; 3229 /******************************************************/ 3230 3231 3232 /******************************************************/ 3233 /* seen in SC107a */ 3234 #define CLIENT_UNKNOWN_17 0x17ff 3235 typedef struct 3236 { 3237 t_bnet_header h; 3238 /* FIXME: what is in here... is there a cooresponding 3239 server packet? */ 3240 } PACKED_ATTR() t_client_unknown_17; 3241 /******************************************************/ 3242 3243 3244 /******************************************************/ 3245 /* seen in SC107a */ 3246 #define CLIENT_UNKNOWN_24 0x24ff 3247 typedef struct 3248 { 3249 t_bnet_header h; 3250 /* FIXME: what is in here... is there a cooresponding 3251 server packet? */ 3252 } PACKED_ATTR() t_client_unknown_24; 3253 /******************************************************/ 3254 3255 3256 /******************************************************/ 3257 /* 3258 FF 2E 18 00 4E 42 32 57 01 00 00 00 00 00 00 00 ....NB2W........ 3259 00 00 00 00 0A 00 00 00 ........ 3260 */ 3261 #define CLIENT_LADDERREQ 0x2eff 3262 typedef struct 3263 { 3264 t_bnet_header h; 3265 bn_int clienttag; 3266 bn_int id; /* (AKA ladder type) 1==standard, 3==ironman */ 3267 bn_int type; /* (AKA ladder sort) */ 3268 bn_int startplace; /* start listing on this entries */ 3269 bn_int count; /* how many entries to list */ 3270 } PACKED_ATTR() t_client_ladderreq; 3271 #define CLIENT_LADDERREQ_ID_STANDARD 0x00000001 3272 #define CLIENT_LADDERREQ_ID_IRONMAN 0x00000003 3273 #define CLIENT_LADDERREQ_TYPE_HIGHESTRATED 0x00000000 3274 #define CLIENT_LADDERREQ_TYPE_MOSTWINS 0x00000002 3275 #define CLIENT_LADDERREQ_TYPE_MOSTGAMES 0x00000003 3276 /******************************************************/ 3277 3278 3279 /******************************************************/ 3280 /* 3281 Sent in repsonse to CLIENT_LADDERREQ 3282 3283 FF 2E AB 03 52 41 54 53 01 00 00 00 00 00 00 00 ....RATS........ 3284 00 00 00 00 0A 00 00 00 27 00 00 00 01 00 00 00 ........'....... 3285 01 00 00 00 74 06 00 00 00 00 00 00 27 00 00 00 ....t.......'... 3286 01 00 00 00 01 00 00 00 74 06 00 00 00 00 00 00 ........t....... 3287 00 00 00 00 00 00 00 00 FF FF FF FF 74 06 00 00 ............t... 3288 00 00 00 00 00 00 00 00 12 27 4E FF 2D DD BE 01 .........'N.-... 3289 12 27 4E FF 2D DD BE 01 6E 65 6D 62 69 3A 29 6B .'N.-...nembi:)k 3290 69 6C 6C 65 72 00 1D 00 00 00 03 00 00 00 00 00 iller........... 3291 00 00 67 06 00 00 00 00 00 00 1D 00 00 00 03 00 ..g............. 3292 00 00 00 00 00 00 67 06 00 00 00 00 00 00 01 00 ......g......... 3293 00 00 00 00 00 00 FF FF FF FF 67 06 00 00 01 00 ..........g..... 3294 00 00 00 00 00 00 D8 5B 9E D0 32 DD BE 01 D8 5B .......[..2....[ 3295 9E D0 32 DD BE 01 53 4B 45 4C 54 4F 4E 00 1F 00 ..2...SKELTON... 3296 00 00 03 00 00 00 00 00 00 00 EF 05 00 00 00 00 ................ 3297 00 00 1F 00 00 00 03 00 00 00 00 00 00 00 EF 05 ................ 3298 00 00 00 00 00 00 02 00 00 00 00 00 00 00 FF FF ................ 3299 FF FF EF 05 00 00 02 00 00 00 00 00 00 00 62 26 ..............b& 3300 55 0C 51 DC BE 01 62 26 55 0C 51 DC BE 01 7A 69 U.Q...b&U.Q...zi 3301 7A 69 62 65 5E 2E 7E 00 19 00 00 00 02 00 00 00 zibe^.~......... 3302 00 00 00 00 FC 05 00 00 00 00 00 00 18 00 00 00 ................ 3303 02 00 00 00 00 00 00 00 EE 05 00 00 00 00 00 00 ................ 3304 03 00 00 00 00 00 00 00 FF FF FF FF FC 05 00 00 ................ 3305 03 00 00 00 00 00 00 00 A0 25 4F 31 90 DE BE 01 .........%O1.... 3306 8C F1 7F 9F 66 DD BE 01 59 4F 4F 4A 49 4E 27 53 ....f...YOOJIN'S 3307 00 1D 00 00 00 02 00 00 00 00 00 00 00 EC 05 00 ................ 3308 00 00 00 00 00 1D 00 00 00 02 00 00 00 00 00 00 ................ 3309 00 EC 05 00 00 00 00 00 00 04 00 00 00 00 00 00 ................ 3310 00 FF FF FF FF EC 05 00 00 03 00 00 00 00 00 00 ................ 3311 00 F4 58 78 82 2F D7 BE 01 F4 58 78 82 2F D7 BE ..Xx./....Xx./.. 3312 01 3D 7B 5F 7C 5F 7D 3D 00 1A 00 00 00 00 00 00 .={_|_}=........ 3313 00 00 00 00 00 E2 05 00 00 00 00 00 00 1A 00 00 ................ 3314 00 00 00 00 00 00 00 00 00 E2 05 00 00 00 00 00 ................ 3315 00 05 00 00 00 00 00 00 00 FF FF FF FF E2 05 00 ................ 3316 00 05 00 00 00 00 00 00 00 F2 DC 0D 1F 6C DD BE .............l.. 3317 01 F2 DC 0D 1F 6C DD BE 01 5B 53 50 41 43 45 5D .....l...[SPACE] 3318 2D 31 2D 54 2E 53 2E 4A 00 15 00 00 00 02 00 00 -1-T.S.J........ 3319 00 01 00 00 00 E0 05 00 00 00 00 00 00 15 00 00 ................ 3320 00 02 00 00 00 01 00 00 00 E0 05 00 00 00 00 00 ................ 3321 00 06 00 00 00 00 00 00 00 FF FF FF FF E0 05 00 ................ 3322 00 06 00 00 00 00 00 00 00 7A C9 F6 6E 0B DE BE .........z..n... 3323 01 7A C9 F6 6E 0B DE BE 01 5B 46 65 77 5D 2D 44 .z..n....[Few]-D 3324 2E 73 00 23 00 00 00 00 00 00 00 00 00 00 00 DF .s.#............ 3325 05 00 00 00 00 00 00 23 00 00 00 00 00 00 00 00 .......#........ 3326 00 00 00 DF 05 00 00 00 00 00 00 07 00 00 00 00 ................ 3327 00 00 00 FF FF FF FF E2 05 00 00 04 00 00 00 00 ................ 3328 00 00 00 6E D9 DC 3A E2 DA BE 01 6E D9 DC 3A E2 ...n..:....n..:. 3329 DA BE 01 5B 4C 2E 73 5D 2D 43 6F 6F 6C 00 1F 00 ...[L.s]-Cool... 3330 00 00 07 00 00 00 02 00 00 00 DD 05 00 00 00 00 ................ 3331 00 00 1F 00 00 00 07 00 00 00 02 00 00 00 DD 05 ................ 3332 00 00 00 00 00 00 08 00 00 00 00 00 00 00 FF FF ................ 3333 FF FF 07 06 00 00 02 00 00 00 00 00 00 00 B6 CE ................ 3334 B1 D8 7A D8 BE 01 B6 CE B1 D8 7A D8 BE 01 52 6F ..z.......z...Ro 3335 60 4C 65 58 7E 50 72 4F 27 5A 65 4E 00 18 00 00 `LeX~PrO'ZeN.... 3336 00 04 00 00 00 00 00 00 00 DD 05 00 00 00 00 00 ................ 3337 00 18 00 00 00 04 00 00 00 00 00 00 00 DD 05 00 ................ 3338 00 00 00 00 00 09 00 00 00 00 00 00 00 FF FF FF ................ 3339 FF DD 05 00 00 04 00 00 00 00 00 00 00 50 76 4C .............PvL 3340 F7 AD D7 BE 01 50 76 4C F7 AD D7 BE 01 48 61 6E .....PvL.....Han 3341 5F 65 53 54 68 65 72 2E 27 27 00 _eSTher.''. 3342 */ 3343 #define SERVER_LADDERREPLY 0x2eff 3344 typedef struct 3345 { 3346 t_bnet_header h; 3347 bn_int clienttag; 3348 bn_int id; /* (AKA ladder type) 1==standard, 3==ironman */ 3349 bn_int type; /* (AKA ladder sort) */ 3350 bn_int startplace; /* start listing on this entries */ 3351 bn_int count; /* how many entries to list */ 3352 /* ladder entry */ 3353 /* player name */ 3354 } PACKED_ATTR() t_server_ladderreply; 3355 #define CLIENT_LADDERREPLY_ID_STANDARD 0x00000001 3356 #define CLIENT_LADDERREPLY_ID_IRONMAN 0x00000003 3357 3358 typedef struct 3359 { 3360 bn_int wins; 3361 bn_int loss; 3362 bn_int disconnect; 3363 bn_int rating; 3364 bn_int rank; 3365 } PACKED_ATTR() t_ladder_data; 3366 3367 typedef struct 3368 { 3369 t_ladder_data current; 3370 t_ladder_data active; 3371 bn_int ttest[6]; /* 00 00 00 00 00 00 00 00 FF FF FF FF 74 06 00 00 00 00 00 00 00 00 00 00 */ 3372 bn_long lastgame_current; /* timestamp */ 3373 bn_long lastgame_active; /* timestamp */ 3374 } PACKED_ATTR() t_ladder_entry; 3375 /******************************************************/ 3376 3377 3378 /******************************************************/ 3379 /* 3380 FF 25 08 00 EA 7F DB 02 .%...... 3381 */ 3382 #define CLIENT_ECHOREPLY 0x25ff 3383 typedef struct 3384 { 3385 t_bnet_header h; 3386 bn_int ticks; 3387 } PACKED_ATTR() t_client_echoreply; 3388 /******************************************************/ 3389 3390 3391 /******************************************************/ 3392 #define SERVER_ECHOREQ 0x25ff 3393 typedef struct 3394 { 3395 t_bnet_header h; 3396 bn_int ticks; 3397 } PACKED_ATTR() t_server_echoreq; 3398 /******************************************************/ 3399 3400 3401 3402 /******************************************************/ 3403 /* 3404 What I'm calling the ping happens every 90 seconds during gameplay. I'm 3405 not exactly sure what it is, but it didn't hurt that we didn't respond up 3406 to now... I went ahead and coded a response in. This packet is sent 3407 at other times as well, even before login. 3408 3409 This is probably a keepalive packet and the UDP is sent to make 3410 sure the UDP entry on the NAT gateway remains valid. 3411 3412 Prolix calls these null packets and says they are sent every 60 3413 seconds. 3414 3415 This seems to be associated with a UDP packet 7 from the client: 3416 7: cli class=bnet[0x01] type=CLIENT_PINGREQ[0x00ff] length=4 3417 0000: FF 00 04 00 .... 3418 5: clt prot=udp[0x07] from=128.123.62.23:6112 to=128.123.62.23:6112 length=8 3419 0000: 07 00 00 00 2E 95 9D 00 ........ 3420 7: srv class=bnet[0x01] type=SERVER_PINGREPLY[0x00ff] length=4 3421 0000: FF 00 04 00 .... 3422 3423 FF 00 04 00 .... 3424 */ 3425 #define CLIENT_PINGREQ 0x00ff 3426 typedef struct 3427 { 3428 t_bnet_header h; 3429 } PACKED_ATTR() t_client_pingreq; 3430 /******************************************************/ 3431 3432 3433 /******************************************************/ 3434 /* 3435 FF 00 04 00 .... 3436 */ 3437 #define SERVER_PINGREPLY 0x00ff 3438 typedef struct 3439 { 3440 t_bnet_header h; 3441 } PACKED_ATTR() t_server_pingreply; 3442 /******************************************************/ 3443 3444 3445 /******************************************************/ 3446 /* 3447 FF 2C 3D 02 00 00 00 00 08 00 00 00 03 00 00 00 .,=............. 3448 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 3449 00 00 00 00 00 00 00 00 00 00 00 00 52 6F 73 73 ............Ross 3450 5F 43 4D 00 00 00 00 00 00 00 00 4F 6E 20 6D 61 _CM........On ma 3451 70 20 22 43 68 61 6C 6C 65 6E 67 65 72 22 3A 0A p "Challenger":. 3452 00 52 6F 73 73 5F 43 4D 20 77 61 73 20 50 72 6F .Ross_CM was Pro 3453 74 6F 73 73 20 61 6E 64 20 70 6C 61 79 65 64 20 toss and played 3454 66 6F 72 20 33 31 20 6D 69 6E 75 74 65 73 0A 0A for 31 minutes.. 3455 20 20 4F 76 65 72 61 6C 6C 20 53 63 6F 72 65 20 Overall Score 3456 32 38 31 30 35 0A 20 20 20 20 20 20 20 20 20 31 28105. 1 3457 31 37 30 30 20 66 6F 72 20 55 6E 69 74 73 0A 20 1700 for Units. 3458 20 20 20 20 20 20 20 20 20 31 34 37 35 20 66 6F 1475 fo 3459 72 20 53 74 72 75 63 74 75 72 65 73 0A 20 20 20 r Structures. 3460 20 20 20 20 20 20 31 34 39 33 30 20 66 6F 72 20 14930 for 3461 52 65 73 6F 75 72 63 65 73 0A 0A 20 20 55 6E 69 Resources.. Uni 3462 74 73 20 53 63 6F 72 65 20 31 31 37 30 30 0A 20 ts Score 11700. 3463 20 20 20 20 20 20 20 20 20 20 20 37 30 20 55 6E 70 Pn 3464 */ 3465 #define CLIENT_GAME_REPORT 0x2cff 3466 typedef struct 3467 { 3468 t_bnet_header h; 3469 bn_int unknown1; /* 0x00000000 */ 3470 bn_int count; /* (number of player slots (will be 8 for now) */ 3471 /* results... */ 3472 /* names... */ 3473 /* report header */ 3474 /* report body */ 3475 } PACKED_ATTR() t_client_game_report; 3476 3477 typedef struct 3478 { 3479 bn_int result; 3480 } PACKED_ATTR() t_client_game_report_result; 3481 #define CLIENT_GAME_REPORT_RESULT_PLAYING 0x00000000 3482 #define CLIENT_GAME_REPORT_RESULT_WIN 0x00000001 3483 #define CLIENT_GAME_REPORT_RESULT_LOSS 0x00000002 3484 #define CLIENT_GAME_REPORT_RESULT_DRAW 0x00000003 3485 #define CLIENT_GAME_REPORT_RESULT_DISCONNECT 0x00000004 3486 #define CLIENT_GAME_REPORT_RESULT_OBSERVER 0x00000005 3487 /******************************************************/ 3488 3489 3490 /******************************************************/ 3491 /* 3492 War Craft II BNE (original): 3493 FF 22 1B 00 4E 42 32 57 4B 00 00 00 4C 61 64 64 ."..NB2WK...Ladd 3494 65 72 20 31 20 6F 6E 20 31 00 00 er 1 on 1.. 3495 */ 3496 #define CLIENT_JOIN_GAME 0x22ff 3497 typedef struct 3498 { 3499 t_bnet_header h; 3500 bn_int clienttag; 3501 bn_int versiontag; 3502 /* game name */ 3503 /* game password */ 3504 } PACKED_ATTR() t_client_join_game; 3505 /******************************************************/ 3506 3507 3508 /******************************************************/ 3509 /* 3510 FF 27 84 00 01 00 00 00 04 00 00 00 52 6F 73 73 .'..........Ross 3511 5F 43 4D 00 70 72 6F 66 69 6C 65 5C 73 65 78 00 _CM.profile\sex. 3512 70 72 6F 66 69 6C 65 5C 61 67 65 00 70 72 6F 66 profile\age.prof 3513 69 6C 65 5C 6C 6F 63 61 74 69 6F 6E 00 70 72 6F ile\location.pro 3514 66 69 6C 65 5C 64 65 73 63 72 69 70 74 69 6F 6E file\description 3515 00 61 73 64 66 00 61 73 66 00 61 73 64 66 00 61 .asdf.asf.asdf.a 3516 73 64 66 61 73 64 66 61 73 64 66 61 73 64 66 0D sdfasdfasdfasdf. 3517 0A 61 73 64 0D 0A 66 61 73 64 0D 0A 66 61 73 64 .asd..fasd..fasd 3518 66 0D 0A 00 f... 3519 */ 3520 #define CLIENT_STATSUPDATE 0x27ff 3521 typedef struct 3522 { 3523 t_bnet_header h; 3524 bn_int name_count; 3525 bn_int key_count; 3526 /* names... */ 3527 /* values... */ 3528 } PACKED_ATTR() t_client_statsupdate; 3529 /******************************************************/ 3530 3531 /******************************************************/ 3532 #define CLIENT_REALMJOINREQ_109 0x3eff 3533 typedef struct 3534 { 3535 t_bnet_header h; 3536 bn_int seqno; 3537 bn_int seqnohash[5]; 3538 /* Realm Name */ 3539 } PACKED_ATTR() t_client_realmjoinreq_109; 3540 /******************************************************/ 3541 3542 /******************************************************/ 3543 #define SERVER_REALMJOINREPLY_109 0x3eff 3544 typedef struct 3545 { 3546 t_bnet_header h; 3547 bn_int seqno; 3548 bn_int u1; 3549 bn_int bncs_addr1; 3550 bn_int sessionnum; 3551 bn_int addr; 3552 bn_short port; 3553 bn_short u3; 3554 bn_int sessionkey; /* zero */ 3555 bn_int u5; 3556 bn_int u6; 3557 bn_int clienttag; 3558 bn_int versionid; 3559 bn_int bncs_addr2; 3560 bn_int u7; /* zero */ 3561 bn_int secret_hash[5]; 3562 /* account name */ 3563 } PACKED_ATTR() t_server_realmjoinreply_109; 3564 /******************************************************/ 3565 3566 #define CLIENT_SEARCH_LAN_GAMES 0x2ff7 3567 typedef struct 3568 { 3569 t_bnet_header h; 3570 bn_byte game_tag[4]; /* 3WAR */ 3571 bn_int unknown1; 3572 bn_int unknown2; 3573 } PACKED_ATTR() t_client_search_lan_games; 3574 3575 #define CLIENT_CHANGECLIENT 0x5cff 3576 typedef struct 3577 { 3578 t_bnet_header h; 3579 bn_int clienttag; 3580 } t_client_changeclient; 3581 3582 #define CLIENT_SETEMAILREPLY 0x59ff 3583 typedef struct 3584 { 3585 t_bnet_header h; 3586 /* email address */ 3587 } PACKED_ATTR() t_client_setemailreply; 3588 3589 #define SERVER_SETEMAILREQ 0x59ff 3590 /* send this packet to client before login ok packet will cause 3591 client to enter input email screen */ 3592 typedef struct 3593 { 3594 t_bnet_header h; 3595 } PACKED_ATTR() t_server_setemailreq; 3596 3597 #define CLIENT_GETPASSWORDREQ 0x5aff 3598 typedef struct 3599 { 3600 t_bnet_header h; 3601 /* account name */ 3602 /* email address */ 3603 } PACKED_ATTR() t_client_getpasswordreq; 3604 3605 #define CLIENT_CHANGEEMAILREQ 0x5bff 3606 typedef struct 3607 { 3608 t_bnet_header h; 3609 /* account name */ 3610 /* old email address */ 3611 /* new email address */ 3612 } PACKED_ATTR() t_client_changeemailreq; 3613 3614 #define CLIENT_MOTDREQ 0x46ff 3615 typedef struct 3616 { 3617 t_bnet_header h; 3618 bn_int last_news_time; /* date of the last news item the client has */ 3619 } PACKED_ATTR() t_client_motdreq; 3620 /* 3621 this packet is sent right after cdkey and version auth reply success and crashdump exist 3622 0x0000: ff 5d 14 00 01 01 00 27 00 0a 01 05 00 00 c0 00 .].....'........ 3623 0x0010: 00 00 00 00 .... 3624 */ 3625 3626 #define CLIENT_CRASHDUMP 0x5dff 3627 typedef struct 3628 { 3629 t_bnet_header h; 3630 /* crashdump file data */ 3631 /* contains data like client version, exception code, code address */ 3632 } PACKED_ATTR() t_client_crashdump; 3633 3634 #define CLIENT_CLANINFOREQ 0x82ff 3635 typedef struct 3636 { 3637 t_bnet_header h; 3638 bn_int count; 3639 bn_int clantag; 3640 /* player name */ 3641 } PACKED_ATTR() t_client_claninforeq; 3642 3643 #define SERVER_CLANINFOREPLY 0x82ff 3644 typedef struct 3645 { 3646 t_bnet_header h; 3647 bn_int count; 3648 bn_byte fail; 3649 /* string - clan name */ 3650 /* bn_byte - clan rank */ 3651 /* bn_int - join time */ 3652 } PACKED_ATTR() t_server_claninforeply; 3653 3654 #define CLIENT_ARRANGEDTEAM_ACCEPT_INVITE 0xfdff 3655 typedef struct 3656 { 3657 t_bnet_header h; 3658 } PACKED_ATTR() t_client_arrangedteam_accept_invite; 3659 3660 /* clan handling */ 3661 3662 #define SERVER_W3XP_CLAN_MEMBER_CHIEFTAIN 0x04 3663 #define SERVER_W3XP_CLAN_MEMBER_SHAMAN 0x03 3664 #define SERVER_W3XP_CLAN_MEMBER_GRUNT 0x02 3665 #define SERVER_W3XP_CLAN_MEMBER_PEON 0x01 3666 #define SERVER_W3XP_CLAN_MEMBER_NEW 0x00 3667 #define SERVER_W3XP_CLAN_MEMBER_OFFLINE 0x00 3668 #define SERVER_W3XP_CLAN_MEMBER_ONLINE 0x01 3669 #define SERVER_W3XP_CLAN_MEMBER_CHANNEL 0x02 3670 #define SERVER_W3XP_CLAN_MEMBER_GAME 0x03 3671 #define SERVER_W3XP_CLAN_MEMBER_PRIVATE_GAME 0x04 3672 3673 /*Paquet #267 3674 0x0000 FF 75 0A 00 00 00 42 54-54 04 �u....BTT. 3675 */ 3676 /* 3677 300: recv class=bnet[0x02] type=unknown[0x70ff] length=12 3678 0000: FF 70 0C 00 01 00 00 00 00 64 73 66 .p.......dsf 3679 300: send class=bnet[0x02] type=unknown[0x70ff] length=56 3680 0000: FF 70 38 00 01 00 00 00 00 09 44 4A 50 32 00 44 .p8.......DJP2.D 3681 0010: 4A 50 33 00 44 4A 50 34 00 44 4A 50 35 00 44 4A JP3.DJP4.DJP5.DJ 3682 0020: 50 36 00 44 4A 50 37 00 44 4A 50 38 00 44 4A 50 P6.DJP7.DJP8.DJP 3683 0030: 39 00 44 4A 50 31 30 00 9.DJP10. 3684 300: recv class=bnet[0x02] type=CLIENT_FRIENDINFOREQ[0x66ff] length=5 3685 0000: FF 66 05 00 01 .f... 3686 300: send class=bnet[0x02] type=unknown[0x66ff] length=12 3687 0000: FF 66 0C 00 01 00 00 00 00 00 00 00 .f.......... 3688 300: recv class=bnet[0x02] type=unknown[0x71ff] length=64 3689 0000: FF 71 40 00 01 00 00 00 74 65 73 74 00 00 64 73 .q@.....test..ds 3690 0010: 66 09 44 4A 50 32 00 44 4A 50 33 00 44 4A 50 34 f.DJP2.DJP3.DJP4 3691 0020: 00 44 4A 50 35 00 44 4A 50 36 00 44 4A 50 37 00 .DJP5.DJP6.DJP7. 3692 0030: 44 4A 50 38 00 44 4A 50 39 00 44 4A 50 31 30 00 DJP8.DJP9.DJP10. 3693 300: send class=bnet[0x02] type=unknown[0x71ff] length=10 3694 0000: FF 71 0A 00 01 00 00 00 00 00 .q........ 3695 300: send class=bnet[0x02] type=unknown[0x75ff] length=12 3696 0000: FF 75 0C 00 00 00 00 00 64 73 66 00 .u......dsf. 3697 300: recv class=bnet[0x02] type=CLIENT_FRIENDINFOREQ[0x66ff] length=5 3698 0000: FF 66 05 00 02 .f... 3699 300: send class=bnet[0x02] type=unknown[0x66ff] length=12 3700 0000: FF 66 0C 00 02 00 00 00 00 00 00 00 .f.......... 3701 */ 3702 3703 #define CLIENT_W3XP_CLAN_CREATEREQ 0x70ff 3704 typedef struct{ 3705 t_bnet_header h; 3706 bn_int count; 3707 bn_int clantag; 3708 } PACKED_ATTR() t_client_w3xp_clan_createreq; 3709 3710 3711 #define SERVER_W3XP_CLAN_CREATEREPLY 0x70ff 3712 typedef struct{ 3713 t_bnet_header h; 3714 bn_int count; 3715 bn_byte check_result; 3716 bn_byte friend_count; 3717 /* player name in chan or mutual 3718 char player_name[sizeof (friend_name)]; */ 3719 } PACKED_ATTR() t_server_w3xp_clan_createreply; 3720 #define SERVER_W3XP_CLAN_CREATEREPLY_CHECK_OK 0x00 3721 #define SERVER_W3XP_CLAN_CREATEREPLY_CHECK_ALLREADY_IN_USE 0x01 3722 #define SERVER_W3XP_CLAN_CREATEREPLY_CHECK_TIME_LIMIT 0x02 3723 #define SERVER_W3XP_CLAN_CREATEREPLY_CHECK_EXCEPTION 0x04 3724 #define SERVER_W3XP_CLAN_CREATEREPLY_CHECK_INVALID_CLAN_TAG 0x0a 3725 3726 /* 3727 3852: recv class=bnet[0x02] type=unknown[0x71ff] length=70 3728 0000: FF 71 46 00 01 00 00 00 53 75 62 57 61 72 5A 6F .qF.....SubWarZo 3729 0010: 6E 65 00 00 5A 57 53 09 44 4A 50 32 00 44 4A 50 ne..ZWS.DJP2.DJP 3730 0020: 33 00 44 4A 50 34 00 44 4A 50 35 00 44 4A 50 36 3.DJP4.DJP5.DJP6 3731 0030: 00 44 4A 50 37 00 44 4A 50 38 00 44 4A 50 31 30 .DJP7.DJP8.DJP10 3732 0040: 00 44 4A 50 39 00 .DJP9. 3733 */ 3734 #define CLIENT_W3XP_CLAN_CREATEINVITEREQ 0x71ff 3735 typedef struct{ 3736 t_bnet_header h; 3737 bn_int count; 3738 /* Clan Name (\0 terminated string) 3739 bn_int clantag; 3740 bn_byte friend_count; //Number of friend selected 3741 Name of friend (\0 terminated string) 3742 */ 3743 } PACKED_ATTR() t_client_w3xp_clan_createinvitereq; 3744 3745 /*3756: send class=bnet[0x02] type=unknown[0x71ff] length=14 3746 0000: FF 71 0E 00 02 00 00 00 05 44 4A 50 32 00 .q.......DJP2. 3747 <- Unable to receive invitation ( PG search, already in a clan, etc... )*/ 3748 /*3756: 3749 Paquet #266 3750 0x0000 FF 71 0A 00 05 00 00 00-00 00 �q........ 3751 <- Clan invitation = Sucessfully done */ 3752 #define SERVER_W3XP_CLAN_CREATEINVITEREPLY 0x71ff 3753 typedef struct{ 3754 t_bnet_header h; 3755 bn_int count; 3756 bn_byte status; /* 0x05 = Cannot contact(not in channel screen) or already in clan | 0x04 = Decline | 0x00 = OK :) 3757 Name of failed member(\0 terminated string) */ 3758 } PACKED_ATTR() t_server_w3xp_clan_createinvitereply; 3759 3760 #define SERVER_W3XP_CLAN_CREATEINVITEREQ 0x72ff 3761 typedef struct{ 3762 t_bnet_header h; 3763 bn_int count; 3764 bn_int clantag; 3765 /* Clan Name (\0 terminated string) 3766 Clan Creator (\0 terminated string) 3767 bn_byte friend_count; //Number of friend selected 3768 Name of friend (\0 terminated string) */ 3769 } PACKED_ATTR() t_server_w3xp_clan_createinvitereq; 3770 3771 #define CLIENT_W3XP_CLAN_CREATEINVITEREPLY 0x72ff 3772 typedef struct{ 3773 t_bnet_header h; 3774 bn_int count; 3775 bn_int clantag; 3776 /* Clan Creator (\0 terminated string) 3777 bn_byte reply */ /* 0x04--decline 0x05--Cannot contact(not in channel screen) or already in clan 0x06--accept*/ 3778 } PACKED_ATTR() t_client_w3xp_clan_createinvitereply; 3779 3780 /* 3781 3876: recv class=bnet[0x02] type=unknown[0x73ff] length=8 3782 0000: FF 73 08 00 01 00 00 00 .s...... */ 3783 #define CLIENT_W3XP_CLAN_DISBANDREQ 0x73ff 3784 typedef struct{ 3785 t_bnet_header h; 3786 bn_int count; 3787 } PACKED_ATTR() t_client_w3xp_clan_disbandreq; 3788 3789 #define SERVER_W3XP_CLAN_DISBANDREPLY 0x73ff 3790 typedef struct{ 3791 t_bnet_header h; 3792 bn_int count; 3793 bn_byte result; /* 0-- Success 1-- Exception raised 2-- Clan exists less than 1 week, cannot remove */ 3794 } PACKED_ATTR() t_server_w3xp_clan_disbandreply; 3795 #define SERVER_W3XP_CLAN_DISBANDREPLY_RESULT_OK 0x0 3796 #define SERVER_W3XP_CLAN_DISBANDREPLY_RESULT_EXCEPTION 0x1 3797 #define SERVER_W3XP_CLAN_DISBANDREPLY_RESULT_NOT_AUTHORIZED 0x07 3798 #define SERVER_W3XP_CLAN_DISBANDREPLY_RESULT_FAILED 0x2 3799 3800 #define CLIENT_W3XP_CLAN_MEMBERNEWCHIEFREQ 0x74ff 3801 typedef struct{ 3802 t_bnet_header h; 3803 bn_int count; 3804 /*Player_Name deleted(\0 terminated) */ 3805 } PACKED_ATTR() t_client_w3xp_clan_membernewchiefreq; 3806 3807 #define SERVER_W3XP_CLAN_MEMBERNEWCHIEFREPLY 0x74ff 3808 typedef struct{ 3809 t_bnet_header h; 3810 bn_int count; 3811 bn_byte result; /* 0-successful 1-failed */ 3812 } PACKED_ATTR() t_server_w3xp_clan_membernewchiefreply; 3813 #define SERVER_W3XP_CLAN_MEMBERNEWCHIEFREPLY_SUCCESS 0x00 3814 #define SERVER_W3XP_CLAN_MEMBERNEWCHIEFREPLY_FAILED 0x01 3815 3816 #define SERVER_W3XP_CLAN_CLANACK 0x75ff 3817 typedef struct{ 3818 t_bnet_header h; 3819 bn_byte unknow1; /* 0x00 */ 3820 bn_int clantag; 3821 bn_byte status; /* member status */ 3822 } PACKED_ATTR() t_server_w3xp_clan_clanack; 3823 3824 #define SERVER_W3XP_CLANQUITNOTIFY 0x76ff 3825 typedef struct{ 3826 t_bnet_header h; 3827 bn_byte status; 3828 } PACKED_ATTR() t_server_w3xp_clanquitnotify; 3829 #define SERVER_W3XP_CLANQUITNOTIFY_STATUS_REMOVED_FROM_CLAN 0x01 3830 3831 /* 3832 3876: recv class=bnet[0x02] type=unknown[0x77ff] length=13 3833 0000: FF 77 0D 00 01 00 00 00 44 4A 50 31 00 .w......DJP1. */ 3834 #define CLIENT_W3XP_CLAN_INVITEREQ 0x77ff 3835 typedef struct{ 3836 t_bnet_header h; 3837 bn_int count; 3838 /*Player_Name invited */ 3839 } PACKED_ATTR() t_client_w3xp_clan_invitereq; 3840 3841 #define SERVER_W3XP_CLAN_INVITEREPLY 0x77ff 3842 typedef struct{ 3843 t_bnet_header h; 3844 bn_int count; 3845 bn_byte result; /* 0x04--decline 0x05--Cannot contact(not in channel screen) or already in clan */ 3846 } PACKED_ATTR() t_server_w3xp_clan_invitereply; 3847 3848 #define CLIENT_W3XP_CLANMEMBER_REMOVE_REQ 0x78ff 3849 typedef struct{ 3850 t_bnet_header h; 3851 bn_int count; 3852 /*Player_Name deleted(\0 terminated) */ 3853 } PACKED_ATTR() t_client_w3xp_clanmember_remove_req; 3854 3855 #define SERVER_W3XP_CLANMEMBER_REMOVE_REPLY 0x78ff 3856 typedef struct{ 3857 t_bnet_header h; 3858 bn_int count; 3859 bn_byte result; /* 0-successful 1-failed */ 3860 } PACKED_ATTR() t_server_w3xp_clanmember_remove_reply; 3861 #define SERVER_W3XP_CLANMEMBER_REMOVE_SUCCESS 0x00 3862 #define SERVER_W3XP_CLANMEMBER_REMOVE_FAILED 0x01 3863 3864 #define SERVER_W3XP_CLAN_INVITEREQ 0x79ff 3865 typedef struct{ 3866 t_bnet_header h; 3867 bn_int count; 3868 bn_int clantag; 3869 /*Clan_Name (\0 terminated) 3870 Player_Name invited (\0 terminated) */ 3871 } PACKED_ATTR() t_server_w3xp_clan_invitereq; 3872 3873 #define CLIENT_W3XP_CLAN_INVITEREPLY 0x79ff 3874 typedef struct{ 3875 t_bnet_header h; 3876 bn_int count; 3877 bn_int clantag; 3878 /*Player_Name invited (\0 terminated) 3879 bn_byte reply *//* 0x04--decline 0x05--Cannot contact(not in channel screen) or already in clan 0x06--accept 0x07--no privilege to invite 0x08--cannot invite(??any difference from cannot contact?) 0x09--clan full*/ 3880 } PACKED_ATTR() t_client_w3xp_clan_invitereply; 3881 #define W3XP_CLAN_INVITEREPLY_SUCCESS 0x00 3882 #define W3XP_CLAN_INVITEREPLY_DECLINE 0x04 3883 #define W3XP_CLAN_INVITEREPLY_FAILED 0x05 3884 #define W3XP_CLAN_INVITEREPLY_ACCEPT 0x06 3885 #define W3XP_CLAN_INVITEREPLY_NOPRIVILEGE 0x07 3886 #define W3XP_CLAN_INVITEREPLY_CANNOT 0x08 3887 #define W3XP_CLAN_INVITEREPLY_CLANFULL 0x09 3888 3889 #define CLIENT_W3XP_CLANMEMBER_RANKUPDATE_REQ 0x7aff 3890 typedef struct{ 3891 t_bnet_header h; 3892 bn_int count; 3893 /*Player_Name invited(\0 terminated) 3894 Player_Status(bn_byte: 1~4) */ 3895 } PACKED_ATTR() t_client_w3xp_clanmember_rankupdate_req; 3896 3897 #define SERVER_W3XP_CLANMEMBER_RANKUPDATE_REPLY 0x7aff 3898 typedef struct{ 3899 t_bnet_header h; 3900 bn_int count; 3901 bn_byte result; /* 0-successful 1-failed */ 3902 } PACKED_ATTR() t_server_w3xp_clanmember_rankupdate_reply; 3903 #define SERVER_W3XP_CLANMEMBER_RANKUPDATE_SUCCESS 0x00 3904 #define SERVER_W3XP_CLANMEMBER_RANKUPDATE_FAILED 0x01 3905 3906 #define CLIENT_W3XP_CLAN_MOTDCHG 0x7bff 3907 typedef struct{ 3908 t_bnet_header h; 3909 bn_int unknow1; 3910 /* Motd en string ^^ */ 3911 } PACKED_ATTR() t_client_w3xp_clan_motdchg; 3912 #define SERVER_W3XP_CLAN_MOTDREPLY_UNKNOW1 0x00000000 3913 3914 #define SERVER_W3XP_CLAN_MOTDREPLY 0x7cff 3915 typedef struct{ 3916 t_bnet_header h; 3917 bn_int count; 3918 bn_int unknow1; /* 0x00000000 */ 3919 /* MOTD */ 3920 } PACKED_ATTR() t_server_w3xp_clan_motdreply; 3921 3922 #define CLIENT_W3XP_CLAN_MOTDREQ 0x7cff 3923 typedef struct{ 3924 t_bnet_header h; 3925 bn_int count; 3926 } PACKED_ATTR() t_client_w3xp_clan_motdreq; 3927 3928 /* 3929 Paquet #52 3930 0x0000 FF 7D 10 01 01 00 00 00-13 4D 79 73 74 69 2E 53 �}.......Mysti.S 3931 0x0010 77 5A 00 04 01 00 73 61-75 72 6F 6E 2E 73 77 7A wZ....sauron.swz 3932 0x0020 00 03 00 00 73 69 6D 6F-6E 2E 53 77 5A 00 03 00 ....simon.SwZ... 3933 0x0030 00 4E 65 6F 2D 56 61 67-72 61 6E 74 2E 73 77 7A .Neo-Vagrant.swz 3934 0x0040 00 02 00 00 77 4D 7A 00-02 00 00 6B 61 74 6E 6F ....wMz....katno 3935 0x0050 6D 61 64 2E 53 77 5A 00-02 00 00 47 7A 62 65 75 mad.SwZ....Gzbeu 3936 0x0060 68 2E 53 77 5A 00 02 00-00 53 69 6C 76 65 72 2E h.SwZ....Silver. 3937 0x0070 53 77 5A 00 02 00 00 4D-61 67 67 65 75 73 00 02 SwZ....Maggeus.. 3938 0x0080 00 00 4F 6E 69 2D 4D 75-73 68 61 2E 53 77 5A 00 ..Oni-Musha.SwZ. 3939 0x0090 02 00 00 4D 61 67 67 65-75 53 2E 53 77 5A 00 02 ...MaggeuS.SwZ.. 3940 0x00A0 00 00 53 69 72 65 5F 4C-6F 75 70 00 02 00 00 6B ..Sire_Loup....k 3941 0x00B0 69 6C 6C 69 62 6F 79 00-03 00 00 52 65 64 2E 44 illiboy....Red.D 3942 0x00C0 72 61 4B 65 00 02 00 00-53 69 72 65 2E 53 77 5A raKe....Sire.SwZ 3943 0x00D0 00 03 00 00 73 74 72 61-69 67 68 74 5F 63 6F 75 ....straight_cou 3944 0x00E0 67 61 72 00 02 00 00 52-65 64 44 72 61 6B 65 2E gar....RedDrake. 3945 0x00F0 53 77 5A 00 02 00 00 54-72 6F 6C 6C 6F 00 02 00 SwZ....Trollo... 3946 0x0100 00 53 69 6C 76 65 72 62-65 61 72 64 00 00 00 00 .Silverbeard.... 3947 */ 3948 #define SERVER_W3XP_CLANMEMBERLIST_REPLY 0x7dff 3949 typedef struct{ 3950 t_bnet_header h; 3951 bn_int count; 3952 bn_byte member_count; 3953 /* player repeat start 3954 * Name of player(\0 terminated string) 3955 * bn_byte CHIEFTAIN = 0x04 3956 * SHAMANS = 0x03 3957 * GRUNT = 0x02 3958 * PEON = 0x01 3959 * NEW_MEMBER = 0x00 <- can't be promoted/devoted 3960 * bn_byte online status 3961 * unknown(always \0) 3962 * repeat end 3963 */ 3964 } PACKED_ATTR() t_server_w3xp_clanmemberlist_reply; 3965 3966 /* 3967 Paquet #51 3968 0x0000 FF 7D 08 00 01 00 00 00- �}...... 3969 */ 3970 3971 #define CLIENT_W3XP_CLANMEMBERLIST_REQ 0x7dff 3972 typedef struct{ 3973 t_bnet_header h; 3974 bn_int count; 3975 } PACKED_ATTR() t_client_w3xp_clanmemberlist_req; 3976 3977 #define SERVER_W3XP_CLANMEMBER_REMOVED_NOTIFY 0x7eff 3978 typedef struct{ 3979 t_bnet_header h; 3980 /* Player_Name deleted(\0 terminated) */ 3981 } PACKED_ATTR() t_server_w3xp_clanmember_removed_notify; 3982 3983 #define SERVER_W3XP_CLANMEMBERUPDATE 0x7fff 3984 typedef struct{ 3985 t_bnet_header h; 3986 /* Player_Name invited(\0 terminated) 3987 * Player_Status(bn_byte: 1~4) 3988 * Player_Online(bn_short: 0x0/0x1) 3989 */ 3990 } PACKED_ATTR() t_server_w3xp_clanmemberupdate; 3991 3992 #endif 3993 3994