📄 d2cs_protocol.h
字号:
/* * Copyright (C) 2000,2001 Onlyer (onlyer@263.net) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#ifndef INCLUDED_D2CS_PROTOCOL_H#define INCLUDED_D2CS_PROTOCOL_H#include "common/bn_type.h"typedef struct{ bn_short size; bn_byte type;} t_d2cs_client_header;typedef struct{ t_d2cs_client_header h;} t_d2cs_client_generic;#define CLIENT_D2CS_LOGINREQ 0x01typedef struct{ t_d2cs_client_header h; bn_int seqno; bn_int u1; bn_int bncs_addr1; bn_int sessionnum; bn_int sessionkey; /* always zero,self define */ bn_int cdkey_id; bn_int u5; bn_int clienttag; bn_int bnversion; bn_int bncs_addr2; bn_int u6; /* zero */ bn_int secret_hash[5]; /* account name */} t_client_d2cs_loginreq;#define D2CS_CLIENT_LOGINREPLY 0x01typedef struct{ t_d2cs_client_header h; bn_int reply;} t_d2cs_client_loginreply;#define D2CS_CLIENT_LOGINREPLY_SUCCEED 0x00#define D2CS_CLIENT_LOGINREPLY_BADPASS 0x0c#define CLIENT_D2CS_CREATECHARREQ 0x02typedef struct{ t_d2cs_client_header h; bn_short class; /* character class */ bn_short u1; /* always zero */ bn_short status; /* same as in .d2s file */ /* character name */} t_client_d2cs_createcharreq;#define D2CS_CLIENT_CREATECHARREPLY 0x02typedef struct{ t_d2cs_client_header h; bn_int reply;} t_d2cs_client_createcharreply;#define D2CS_CLIENT_CREATECHARREPLY_SUCCEED 0x00#define D2CS_CLIENT_CREATECHARREPLY_FAILED 0x01#define D2CS_CLIENT_CREATECHARREPLY_ALREADY_EXIST 0x14#define D2CS_CLIENT_CREATECHARREPLY_NAME_REJECT 0x15#define CLIENT_D2CS_CREATEGAMEREQ 0x03typedef struct{ t_d2cs_client_header h; bn_short seqno; bn_int gameflag; /* just difficulty is set here */ bn_byte u1; /* always 1 */ bn_byte leveldiff; /* Only allow people of +/- n level to join */ bn_byte maxchar; /* Maximum number of chars allowed in game */ /* game name */ /* game pass */ /* game desc */} t_client_d2cs_creategamereq;#define D2CS_CLIENT_CREATEGAMEREPLY 0x03typedef struct{ t_d2cs_client_header h; bn_short seqno; bn_short gameid; bn_short u1; /* always zero */ bn_int reply;} t_d2cs_client_creategamereply;#define D2CS_CLIENT_CREATEGAMEREPLY_SUCCEED 0x00#define D2CS_CLIENT_CREATEGAMEREPLY_FAILED 0x01#define D2CS_CLIENT_CREATEGAMEREPLY_INVALID_NAME 0x1e#define D2CS_CLIENT_CREATEGAMEREPLY_NAME_EXIST 0x1f#define D2CS_CLIENT_CREATEGAMEREPLY_SERVER_DOWN 0x20#define D2CS_CLIENT_CREATEGAMEREPLY_NOT_AVAILABLE 0x32#define D2CS_CLIENT_CREATEGAMEREPLY_U1 0x33#define CLIENT_D2CS_JOINGAMEREQ 0x04typedef struct{ t_d2cs_client_header h; bn_short seqno; /* game name */ /* game pass */} t_client_d2cs_joingamereq;#define D2CS_CLIENT_JOINGAMEREPLY 0x04typedef struct{ t_d2cs_client_header h; bn_short seqno; bn_short gameid; bn_short u1; /* always zero */ bn_int addr; bn_int token; bn_int reply;} t_d2cs_client_joingamereply;#define D2CS_CLIENT_JOINGAMEREPLY_SUCCEED 0x00#define D2CS_CLIENT_JOINGAMEREPLY_BAD_PASS 0x29#define D2CS_CLIENT_JOINGAMEREPLY_NOT_EXIST 0x2a#define D2CS_CLIENT_JOINGAMEREPLY_GAME_FULL 0x2b#define D2CS_CLIENT_JOINGAMEREPLY_LEVEL_LIMIT 0x2c#define D2CS_CLIENT_JOINGAMEREPLY_HARDCORE_SOFTCORE 0x71#define D2CS_CLIENT_JOINGAMEREPLY_NORMAL_NIGHTMARE 0x73#define D2CS_CLIENT_JOINGAMEREPLY_NIGHTMARE_HELL 0x74#define D2CS_CLIENT_JOINGAMEREPLY_CLASSIC_EXPANSION 0x78#define D2CS_CLIENT_JOINGAMEREPLY_EXPANSION_CLASSIC 0x79#define D2CS_CLIENT_JOINGAMEREPLY_NORMAL_LADDER 0x7D#define D2CS_CLIENT_JOINGAMEREPLY_FAILED 0x01#define CLIENT_D2CS_GAMELISTREQ 0x05typedef struct{ t_d2cs_client_header h; bn_short seqno; bn_int gameflag; /* only hardcore is set here */ /* bn_byte u1; string game name to search? */} t_client_d2cs_gamelistreq;#define D2CS_CLIENT_GAMELISTREPLY 0x05typedef struct{ t_d2cs_client_header h; bn_short seqno; bn_int token; bn_byte currchar; /* current number of characters in game */ bn_int gameflag; /* 0x04 is always set here */ /* game name */ /* game desc */} t_d2cs_client_gamelistreply;#define CLIENT_D2CS_GAMEINFOREQ 0x06typedef struct{ t_d2cs_client_header h; bn_short seqno; /* game name */} t_client_d2cs_gameinforeq;#define D2CS_CLIENT_GAMEINFOREPLY 0x06typedef struct{ t_d2cs_client_header h; bn_short seqno; bn_int gameflag; bn_int etime; bn_byte charlevel; bn_byte leveldiff; bn_byte maxchar; bn_byte currchar; bn_byte class[16]; /* 16 character class */ bn_byte level[16]; /* 16 character level */ /* game description */ /* currchar number of character names */} t_d2cs_client_gameinforeply;#define CLIENT_D2CS_CHARLOGINREQ 0x07typedef struct{ t_d2cs_client_header h; /* character name */} t_client_d2cs_charloginreq;#define D2CS_CLIENT_CHARLOGINREPLY 0x07typedef struct{ t_d2cs_client_header h; bn_int reply;} t_d2cs_client_charloginreply;#define D2CS_CLIENT_CHARLOGINREPLY_SUCCEED 0x00#define D2CS_CLIENT_CHARLOGINREPLY_FAILED 0x01#define D2CS_CLIENT_CHARLOGINREPLY_NOT_FOUND 0x46#define D2CS_CLIENT_CHARLOGINREPLY_EXPIRED 0x7b#define CLIENT_D2CS_DELETECHARREQ 0x0atypedef struct{ t_d2cs_client_header h; bn_short u1; /* always zero */ /* character name */} t_client_d2cs_deletecharreq;#define D2CS_CLIENT_DELETECHARREPLY 0x0atypedef struct{ t_d2cs_client_header h; bn_short u1; /* always zero */ bn_int reply;} t_d2cs_client_deletecharreply;#define D2CS_CLIENT_DELETECHARREPLY_SUCCEED 0x00#define D2CS_CLIENT_DELETECHARREPLY_FAILED 0x01#define CLIENT_D2CS_LADDERREQ 0x11typedef struct{ t_d2cs_client_header h; bn_byte type; /* jadder type request */ bn_short start_pos; /* list ladder from what position */} t_client_d2cs_ladderreq;#define D2CS_CLIENT_LADDERREPLY 0x11typedef struct{ t_d2cs_client_header h; bn_byte type; /* ladder type request */ bn_short total_len; /* total length of the ladder data */ bn_short curr_len; /* length of ladder data in this packet */ bn_short cont_len; /* length of ladder data in previous packets */ /* length here include the header but exclude this packet */} t_d2cs_client_ladderreply;typedef struct{ bn_short start_pos; /* start position of ladder */ bn_short u1; /* always zero */ bn_int count1; /* always 0x10 */} t_d2cs_client_ladderheader;typedef struct{ bn_int count2; /* 0x10 for first packet or 0x0 for continue */} t_d2cs_client_ladderinfoheader;typedef struct{ bn_int explow; bn_int exphigh; /* always zero */ bn_short status; bn_byte level; bn_byte u1; /* always zero */ char charname[16];} t_d2cs_client_ladderinfo;#define LADDERSTATUS_FLAG_DEAD 0x10#define LADDERSTATUS_FLAG_HARDCORE 0x20#define LADDERSTATUS_FLAG_EXPANSION 0x40#define LADDERSTATUS_FLAG_DIFFICULTY 0x0f00#define CLIENT_D2CS_MOTDREQ 0x12typedef struct{ t_d2cs_client_header h;} t_client_d2cs_motdreq;#define D2CS_CLIENT_MOTDREPLY 0x12typedef struct{ t_d2cs_client_header h; bn_byte u1; /* message */} t_d2cs_client_motdreply;#define CLIENT_D2CS_CANCELCREATEGAME 0x13typedef struct{ t_d2cs_client_header h;} t_client_d2cs_cancelcreategame;#define D2CS_CLIENT_CREATEGAMEWAIT 0x14typedef struct{ t_d2cs_client_header h; bn_int position;} t_d2cs_client_creategamewait;#define D2CS_CLIENT_CHARLADDERREQ 0x16typedef struct{ t_d2cs_client_header h; bn_int hardcore; bn_int expansion; /* character name */} t_client_d2cs_charladderreq;/* use 0x11 LADDER reply for this request */#define CLIENT_D2CS_CHARLISTREQ 0x17typedef struct{ t_d2cs_client_header h; bn_short maxchar; bn_short u1;} t_client_d2cs_charlistreq;#define D2CS_CLIENT_CHARLISTREPLY 0x17typedef struct{ t_d2cs_client_header h; bn_short maxchar; bn_short currchar; bn_short u1; /* always zero */ bn_short currchar2; /* character name */ /* character portrait blocks */ /* each block is 0x22 bytes static length */} t_d2cs_client_charlistreply;#define CLIENT_D2CS_CONVERTCHARREQ 0x18typedef struct{ t_d2cs_client_header h; /* character name */} t_client_d2cs_convertcharreq;#define D2CS_CLIENT_CONVERTCHARREPLY 0x18typedef struct{ t_d2cs_client_header h; bn_int reply;} t_d2cs_client_convertcharreply;#define D2CS_CLIENT_CONVERTCHARREPLY_SUCCEED 0x00#define D2CS_CLIENT_CONVERTCHARREPLY_FAILED 0x01#define CLIENT_D2CS_CHARLISTREQ_110 0x19typedef struct{ t_d2cs_client_header h; bn_short maxchar; bn_short u1;} t_client_d2cs_charlistreq_110;#define D2CS_CLIENT_CHARLISTREPLY_110 0x19typedef struct{ t_d2cs_client_header h; bn_short maxchar; bn_short currchar; bn_short u1; /* always zero */ bn_short currchar2;} t_d2cs_client_charlistreply_110;typedef struct{ bn_int expire_time; /* character expire time (in seconds) */ /* character name */ /* character portrait blocks */ /* each block is 0x22 bytes static length */} t_d2cs_client_chardata;#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -