Browse Source

Start adding packet DB reading

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@946 54d463be-8e91-2dee-dedb-b68131a5f0ec
celest 20 years ago
parent
commit
38aa949355
4 changed files with 300 additions and 23 deletions
  1. 1 0
      Changelog.txt
  2. 34 4
      db/packet_db.txt
  3. 263 19
      src/map/clif.c
  4. 2 0
      src/map/clif.h

+ 1 - 0
Changelog.txt

@@ -1,5 +1,6 @@
 Date	Added
 Date	Added
 01/10
 01/10
+        * Start adding packet DB reading [celest]
         * Added 'max_eventtimer_length' (default is 32) to script_athena.conf. [celest]
         * Added 'max_eventtimer_length' (default is 32) to script_athena.conf. [celest]
           Some event timers with names longer than 24 could cause the server to close
           Some event timers with names longer than 24 could cause the server to close
           itself, change this if you need support for even longer names
           itself, change this if you need support for even longer names

+ 34 - 4
db/packet_db.txt

@@ -1,6 +1,13 @@
-//The packet database allows you to add support for new clients, because packets change every release.
-//This only allows 1 type of client at a time, make sure your client is the last one in the list
-//EX: You have client 628 and it goes up to 1021, delete or comment (use //) till your client is last.
+// The packet database allows you to add support for new clients,
+// because packets change every release. 
+// This only allows 1 type of client at a time, make sure your
+// client is the last one in the list
+// EX: You have client 628 and it goes up to 1021,
+// delete or comment (use //) till your client is last.
+
+// Version of packet database
+packet_db_ver: 16
+
 
 
 0x0064,55
 0x0064,55
 0x0065,17
 0x0065,17
@@ -573,4 +580,27 @@
 0x0215,6
 0x0215,6
 0x0143,23,npcamountinput,2:6
 0x0143,23,npcamountinput,2:6
 0x0145,19
 0x0145,19
-//0x01f9,6,adopt,5
+//0x01f9,6,adopt,5
+
+//2004-12-06aSakexe
+0x0190,15,useitem,3:11
+0x0094,14,movetokafra,4:10
+0x009f,18,actionrequest,6:17
+0x00a7,7,walktoxy,4
+0x007e,30,useskilltopos,4:9:22:28
+0x0116,12,dropitem,4:10
+0x008c,13,getcharnamerequest,9
+0x0085,-1,globalmessage,2:4
+0x00f7,14,solvecharname,10
+0x0113,110,useskilltopos,4:9:22:28:30
+0x00f3,8,changedir,3:7
+0x00f5,29,wanttoconnection,3:10:20:24:28
+0x00a2,7,takeitem,3
+0x0089,7,ticksend,3
+0x0072,22,useskilltoid,8:12:18
+0x0193,21,movefromkafra,4:17
+0x009b,2,closekafra,0
+0x0222,6
+0x0221,-1
+0x021d,6
+0x0223,8

+ 263 - 19
src/map/clif.c

@@ -52,8 +52,11 @@
 #endif
 #endif
 
 
 #define STATE_BLIND 0x10
 #define STATE_BLIND 0x10
+#define MAX_PACKET_DB 0x224
 
 
-static const int packet_len_table[0x224] = {
+int packet_db_ver = -1;
+
+static const int packet_len_table[MAX_PACKET_DB] = {
    10,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
    10,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
     0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
     0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
     0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
     0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,
@@ -109,7 +112,7 @@ static const int packet_len_table[0x224] = {
 };
 };
 
 
 // size list for each packet version after packet version 4.
 // size list for each packet version after packet version 4.
-static int packet_size_table[11][0x224];
+static int packet_size_table[11][MAX_PACKET_DB];
 
 
 // local define
 // local define
 enum {
 enum {
@@ -8645,7 +8648,7 @@ void clif_parse_TradeOk(int fd,struct map_session_data *sd)
  * 取引キャンセル
  * 取引キャンセル
  *------------------------------------------
  *------------------------------------------
  */
  */
-void clif_parse_TradeCansel(int fd,struct map_session_data *sd)
+void clif_parse_TradeCancel(int fd,struct map_session_data *sd)
 {
 {
 	trade_tradecancel(sd);
 	trade_tradecancel(sd);
 }
 }
@@ -9528,7 +9531,7 @@ void clif_parse_GuildCheckMaster(int fd, struct map_session_data *sd) {
  * ギルド情報要求
  * ギルド情報要求
  *------------------------------------------
  *------------------------------------------
  */
  */
-void clif_parse_GuildReqeustInfo(int fd, struct map_session_data *sd) {
+void clif_parse_GuildRequestInfo(int fd, struct map_session_data *sd) {
 	switch(RFIFOL(fd,2)){
 	switch(RFIFOL(fd,2)){
 	case 0:	// ギルド基本情報、同盟敵対情報
 	case 0:	// ギルド基本情報、同盟敵対情報
 		clif_guild_basicinfo(sd);
 		clif_guild_basicinfo(sd);
@@ -10148,8 +10151,28 @@ void clif_parse_GMkillall(int fd,struct map_session_data *sd)
 	return;
 	return;
 }
 }
 
 
+/*==========================================
+ * パケットデバッグ
+ *------------------------------------------
+ */
+void clif_parse_debug(int fd,struct map_session_data *sd)
+{
+	int i, cmd;
+
+	cmd = RFIFOW(fd,0);
+
+	printf("packet debug 0x%4X\n",cmd);
+	printf("---- 00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E-0F");
+	for(i=0;i<packet_size_table[packet_db_ver - 5][cmd];i++){
+		if((i&15)==0)
+			printf("\n%04X ",i);
+		printf("%02X ",RFIFOB(fd,i));
+	}
+	printf("\n");
+}
+
 // functions list
 // functions list
-static void (*clif_parse_func_table[9][0x220])() = {
+static void (*clif_parse_func_table[10][MAX_PACKET_DB])() = {
 	{
 	{
 	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -10186,7 +10209,7 @@ static void (*clif_parse_func_table[9][0x220])() = {
 	NULL, clif_parse_ChatAddMember, NULL, NULL, NULL, NULL, clif_parse_ChatRoomStatusChange, NULL,
 	NULL, clif_parse_ChatAddMember, NULL, NULL, NULL, NULL, clif_parse_ChatRoomStatusChange, NULL,
 	// e0
 	// e0
 	clif_parse_ChangeChatOwner, NULL, clif_parse_KickFromChat, clif_parse_ChatLeave, clif_parse_TradeRequest, NULL, clif_parse_TradeAck, NULL,
 	clif_parse_ChangeChatOwner, NULL, clif_parse_KickFromChat, clif_parse_ChatLeave, clif_parse_TradeRequest, NULL, clif_parse_TradeAck, NULL,
-	clif_parse_TradeAddItem, NULL, NULL, clif_parse_TradeOk, NULL, clif_parse_TradeCansel, NULL, clif_parse_TradeCommit,
+	clif_parse_TradeAddItem, NULL, NULL, clif_parse_TradeOk, NULL, clif_parse_TradeCancel, NULL, clif_parse_TradeCommit,
 	// f0
 	// f0
 	NULL, NULL, NULL, clif_parse_MoveToKafra, NULL, clif_parse_MoveFromKafra, NULL, clif_parse_CloseKafra,
 	NULL, NULL, NULL, clif_parse_MoveToKafra, NULL, clif_parse_MoveFromKafra, NULL, clif_parse_CloseKafra,
 	NULL, clif_parse_CreateParty, NULL, NULL, clif_parse_PartyInvite, NULL, NULL, clif_parse_ReplyPartyInvite,
 	NULL, clif_parse_CreateParty, NULL, NULL, clif_parse_PartyInvite, NULL, NULL, clif_parse_ReplyPartyInvite,
@@ -10206,7 +10229,7 @@ static void (*clif_parse_func_table[9][0x220])() = {
 
 
 	// 140
 	// 140
 	clif_parse_MapMove, NULL, NULL, clif_parse_NpcAmountInput, NULL, NULL, clif_parse_NpcCloseClicked, NULL,
 	clif_parse_MapMove, NULL, NULL, clif_parse_NpcAmountInput, NULL, NULL, clif_parse_NpcCloseClicked, NULL,
-	NULL, clif_parse_GMReqNoChat, NULL, NULL, NULL, clif_parse_GuildCheckMaster, NULL, clif_parse_GuildReqeustInfo,
+	NULL, clif_parse_GMReqNoChat, NULL, NULL, NULL, clif_parse_GuildCheckMaster, NULL, clif_parse_GuildRequestInfo,
 	// 150
 	// 150
 	NULL, clif_parse_GuildRequestEmblem, NULL, clif_parse_GuildChangeEmblem, NULL, clif_parse_GuildChangeMemberPosition, NULL, NULL,
 	NULL, clif_parse_GuildRequestEmblem, NULL, clif_parse_GuildChangeEmblem, NULL, clif_parse_GuildChangeMemberPosition, NULL, NULL,
 	NULL, clif_parse_GuildLeave, NULL, clif_parse_GuildExplusion, NULL, clif_parse_GuildBreak, NULL, NULL,
 	NULL, clif_parse_GuildLeave, NULL, clif_parse_GuildExplusion, NULL, clif_parse_GuildBreak, NULL, NULL,
@@ -10384,7 +10407,7 @@ static int clif_parse(int fd) {
 
 
 	// ゲーム用以外パケットか、認証を終える前に0072以外が来たら、切断する
 	// ゲーム用以外パケットか、認証を終える前に0072以外が来たら、切断する
 	if (packet_ver < 5 || packet_ver > 13 || // if packet is not inside these values: session is incorrect?? or auth packet is unknown
 	if (packet_ver < 5 || packet_ver > 13 || // if packet is not inside these values: session is incorrect?? or auth packet is unknown
-	    cmd >= 0x220 || packet_size_table[packet_ver-5][cmd] == 0) {
+	    cmd >= MAX_PACKET_DB || packet_size_table[packet_ver-5][cmd] == 0) {
 		if (!fd)
 		if (!fd)
 			return 0;
 			return 0;
 		session[fd]->eof = 1;
 		session[fd]->eof = 1;
@@ -10472,6 +10495,220 @@ static int clif_parse(int fd) {
 	return 0;
 	return 0;
 }
 }
 
 
+/*==========================================
+ * パケットデータベース読み込み
+ *------------------------------------------
+ */
+static int packetdb_readdb(void)
+{
+	FILE *fp;
+	char line[1024];
+	int ln=0;
+	int cmd,j;
+	char *str[32],*p,*str2[32],*p2;
+
+	struct {
+		void (*func)();
+		char *name;
+	} clif_parse_func[]={
+		{clif_parse_WantToConnection,"wanttoconnection"},
+		{clif_parse_LoadEndAck,"loadendack"},
+		{clif_parse_TickSend,"ticksend"},
+		{clif_parse_WalkToXY,"walktoxy"},
+		{clif_parse_QuitGame,"quitgame"},
+		{clif_parse_GetCharNameRequest,"getcharnamerequest"},
+		{clif_parse_GlobalMessage,"globalmessage"},
+		{clif_parse_MapMove,"mapmove"},
+		{clif_parse_ChangeDir,"changedir"},
+		{clif_parse_Emotion,"emotion"},
+		{clif_parse_HowManyConnections,"howmanyconnections"},
+		{clif_parse_ActionRequest,"actionrequest"},
+		{clif_parse_Restart,"restart"},
+		{clif_parse_Wis,"wis"},
+		{clif_parse_GMmessage,"gmmessage"},
+		{clif_parse_TakeItem,"takeitem"},
+		{clif_parse_DropItem,"dropitem"},
+		{clif_parse_UseItem,"useitem"},
+		{clif_parse_EquipItem,"equipitem"},
+		{clif_parse_UnequipItem,"unequipitem"},
+		{clif_parse_NpcClicked,"npcclicked"},
+		{clif_parse_NpcBuySellSelected,"npcbuysellselected"},
+		{clif_parse_NpcBuyListSend,"npcbuylistsend"},
+		{clif_parse_NpcSellListSend,"npcselllistsend"},
+		{clif_parse_CreateChatRoom,"createchatroom"},
+		{clif_parse_ChatAddMember,"chataddmember"},
+		{clif_parse_ChatRoomStatusChange,"chatroomstatuschange"},
+		{clif_parse_ChangeChatOwner,"changechatowner"},
+		{clif_parse_KickFromChat,"kickfromchat"},
+		{clif_parse_ChatLeave,"chatleave"},
+		{clif_parse_TradeRequest,"traderequest"},
+		{clif_parse_TradeAck,"tradeack"},
+		{clif_parse_TradeAddItem,"tradeadditem"},
+		{clif_parse_TradeOk,"tradeok"},
+		{clif_parse_TradeCancel,"tradecancel"},
+		{clif_parse_TradeCommit,"tradecommit"},
+		{clif_parse_StopAttack,"stopattack"},
+		{clif_parse_PutItemToCart,"putitemtocart"},
+		{clif_parse_GetItemFromCart,"getitemfromcart"},
+		{clif_parse_RemoveOption,"removeoption"},
+		{clif_parse_ChangeCart,"changecart"},
+		{clif_parse_StatusUp,"statusup"},
+		{clif_parse_SkillUp,"skillup"},
+		{clif_parse_UseSkillToId,"useskilltoid"},
+		{clif_parse_UseSkillToPos,"useskilltopos"},
+		{clif_parse_UseSkillMap,"useskillmap"},
+		{clif_parse_RequestMemo,"requestmemo"},
+		{clif_parse_ProduceMix,"producemix"},
+		{clif_parse_NpcSelectMenu,"npcselectmenu"},
+		{clif_parse_NpcNextClicked,"npcnextclicked"},
+		{clif_parse_NpcAmountInput,"npcamountinput"},
+		{clif_parse_NpcStringInput,"npcstringinput"},
+		{clif_parse_NpcCloseClicked,"npccloseclicked"},
+		{clif_parse_ItemIdentify,"itemidentify"},
+		{clif_parse_SelectArrow,"selectarrow"},
+		{clif_parse_AutoSpell,"autospell"},
+		{clif_parse_UseCard,"usecard"},
+		{clif_parse_InsertCard,"insertcard"},
+		{clif_parse_SolveCharName,"solvecharname"},
+		{clif_parse_ResetChar,"resetchar"},
+		{clif_parse_LGMmessage,"lgmmessage"},
+		{clif_parse_MoveToKafra,"movetokafra"},
+		{clif_parse_MoveFromKafra,"movefromkafra"},
+		{clif_parse_MoveToKafraFromCart,"movetokafrafromcart"},
+		{clif_parse_MoveFromKafraToCart,"movefromkafratocart"},
+		{clif_parse_CloseKafra,"closekafra"},
+		{clif_parse_CreateParty,"createparty"},
+		{clif_parse_CreateParty2,"createparty2"},
+		{clif_parse_PartyInvite,"partyinvite"},
+		{clif_parse_ReplyPartyInvite,"replypartyinvite"},
+		{clif_parse_LeaveParty,"leaveparty"},
+		{clif_parse_RemovePartyMember,"removepartymember"},
+		{clif_parse_PartyChangeOption,"partychangeoption"},
+		{clif_parse_PartyMessage,"partymessage"},
+		{clif_parse_CloseVending,"closevending"},
+		{clif_parse_VendingListReq,"vendinglistreq"},
+		{clif_parse_PurchaseReq,"purchasereq"},
+		{clif_parse_OpenVending,"openvending"},
+		{clif_parse_CreateGuild,"createguild"},
+		{clif_parse_GuildCheckMaster,"guildcheckmaster"},
+		{clif_parse_GuildRequestInfo,"guildrequestinfo"},
+		{clif_parse_GuildChangePositionInfo,"guildchangepositioninfo"},
+		{clif_parse_GuildChangeMemberPosition,"guildchangememberposition"},
+		{clif_parse_GuildRequestEmblem,"guildrequestemblem"},
+		{clif_parse_GuildChangeEmblem,"guildchangeemblem"},
+		{clif_parse_GuildChangeNotice,"guildchangenotice"},
+		{clif_parse_GuildInvite,"guildinvite"},
+		{clif_parse_GuildReplyInvite,"guildreplyinvite"},
+		{clif_parse_GuildLeave,"guildleave"},
+		{clif_parse_GuildExplusion,"guildexplusion"},
+		{clif_parse_GuildMessage,"guildmessage"},
+		{clif_parse_GuildRequestAlliance,"guildrequestalliance"},
+		{clif_parse_GuildReplyAlliance,"guildreplyalliance"},
+		{clif_parse_GuildDelAlliance,"guilddelalliance"},
+		{clif_parse_GuildOpposition,"guildopposition"},
+		{clif_parse_GuildBreak,"guildbreak"},
+		{clif_parse_PetMenu,"petmenu"},
+		{clif_parse_CatchPet,"catchpet"},
+		{clif_parse_SelectEgg,"selectegg"},
+		{clif_parse_SendEmotion,"sendemotion"},
+		{clif_parse_ChangePetName,"changepetname"},
+		{clif_parse_GMKick,"gmkick"},
+		{clif_parse_GMHide,"gmhide"},
+		{clif_parse_GMReqNoChat,"gmreqnochat"},
+		{clif_parse_GMReqNoChatCount,"gmreqnochatcount"},
+		{clif_parse_sn_doridori,"sndoridori"},
+		{clif_parse_sn_explosionspirits,"snexplosionspirits"},
+//		{clif_parse_wisexin,"wisexin"},
+//		{clif_parse_wisexlist,"wisexlist"},
+//		{clif_parse_wisall,"wisall"},
+		{clif_parse_GMkillall,"killall"},
+		{clif_parse_GM_Monster_Item,"summon"},
+		{clif_parse_Shift,"shift"},
+		{clif_parse_debug,"debug"},
+
+		{NULL,NULL}
+	};
+
+//	memset(packet_db,0,sizeof(packet_db));
+
+	if( (fp=fopen("db/packet_db.txt","r"))==NULL ){
+		printf("can't read db/packet_db.txt\n");		
+		return 1;
+	}
+
+	{
+		char w1[1024],w2[1024];
+		while(fgets(line,1020,fp)){
+			if(line[0]=='/' && line[1]=='/')
+				continue;
+			if (sscanf(line,"%[^:]: %[^\r\n]",w1,w2) != 2)
+				continue;
+			if(strcmpi(w1,"packet_db_ver")==0) {
+				packet_db_ver = atoi(w2);
+				printf ("packet db version = %d\n", packet_db_ver);
+				break;	// stop reading config and load the rest of the file
+			}
+		}
+	}
+	while(fgets(line,1020,fp)){
+		if (packet_db_ver <= 7)	// minimum packet version allowed
+			break;
+		if(line[0]=='/' && line[1]=='/')
+			continue;
+		memset(str,0,sizeof(str));
+		for(j=0,p=line;j<4 && p;j++){
+			str[j]=p;
+			p=strchr(p,',');
+			if(p) *p++=0;
+		}
+		if(str[0]==NULL)
+			continue;
+
+		cmd=strtol(str[0],(char **)NULL,0);
+		if(cmd<=0 || cmd>=MAX_PACKET_DB)
+			continue;
+
+		if(str[1]==NULL){
+			sprintf(tmp_output, "packet_db: packet len error\n");
+			ShowError(tmp_output);
+			continue;
+		}
+		packet_size_table[packet_db_ver - 5][cmd] = atoi(str[1]);
+
+		if(str[2]==NULL){
+			ln++;
+			continue;
+		}
+		for(j=0;j<sizeof(clif_parse_func)/sizeof(clif_parse_func[0]);j++){
+			if(clif_parse_func[j].name != NULL &&
+				strcmp(str[2],clif_parse_func[j].name)==0){
+				clif_parse_func_table[packet_db_ver - 7][cmd] = clif_parse_func[j].func;
+				break;
+			}
+		}
+		if(str[3]==NULL){
+			sprintf(tmp_output, "packet_db: packet error\n");
+			ShowError(tmp_output);
+			exit(1);
+		}
+		for(j=0,p2=str[3];p2;j++){
+			str2[j]=p2;
+			p2=strchr(p2,':');
+			if(p2) *p2++=0;
+//			packet_db[cmd].pos[j]=atoi(str2[j]);	// since this isn't implemented yet
+		}
+
+		ln++;
+//		if(packet_size_table[packet_db_ver - 5][cmd] > 2 /* && packet_db[cmd].pos[0] == 0 */)
+//			printf("packet_db: %d 0x%x %d %s %p\n",ln,cmd,packet_size_table[packet_db_ver - 5][cmd],str[2],clif_parse_func_table[packet_db_ver - 7][cmd]);
+	}
+	fclose(fp);
+	sprintf(tmp_output,"Done reading '"CL_WHITE"%s"CL_RESET"'.\n","db/packet_db.txt");
+	ShowStatus(tmp_output);
+	return 0;
+
+}
+
 /*==========================================
 /*==========================================
  *
  *
  *------------------------------------------
  *------------------------------------------
@@ -10549,10 +10786,12 @@ int do_init_clif(void) {
 	clif_parse_func_table[8][0x116] = clif_parse_DropItem;
 	clif_parse_func_table[8][0x116] = clif_parse_DropItem;
 	clif_parse_func_table[8][0x190] = clif_parse_UseItem;
 	clif_parse_func_table[8][0x190] = clif_parse_UseItem;
 	clif_parse_func_table[8][0x193] = clif_parse_MoveFromKafra;
 	clif_parse_func_table[8][0x193] = clif_parse_MoveFromKafra;
+	// Init packet function calls for packet ver 16 (packet db)
+	memcpy(clif_parse_func_table[9], clif_parse_func_table[8], sizeof(clif_parse_func_table[0]));
 
 
-	// size of packet version 5
+	// size of packet version 5 (old)
 	memcpy(&packet_size_table[0], &packet_len_table, sizeof(packet_len_table));
 	memcpy(&packet_size_table[0], &packet_len_table, sizeof(packet_len_table));
-	// size of packet version 6
+	// size of packet version 6 (7july04)
 	memcpy(&packet_size_table[1], &packet_size_table[0], sizeof(packet_len_table));
 	memcpy(&packet_size_table[1], &packet_size_table[0], sizeof(packet_len_table));
 	packet_size_table[1][0x072] = 22;
 	packet_size_table[1][0x072] = 22;
 	packet_size_table[1][0x085] = 8;
 	packet_size_table[1][0x085] = 8;
@@ -10560,7 +10799,7 @@ int do_init_clif(void) {
 	packet_size_table[1][0x113] = 15;
 	packet_size_table[1][0x113] = 15;
 	packet_size_table[1][0x116] = 15;
 	packet_size_table[1][0x116] = 15;
 	packet_size_table[1][0x190] = 95;
 	packet_size_table[1][0x190] = 95;
-	// size of packet version 7
+	// size of packet version 7 (13july04)
 	memcpy(&packet_size_table[2], &packet_size_table[1], sizeof(packet_len_table));
 	memcpy(&packet_size_table[2], &packet_size_table[1], sizeof(packet_len_table));
 	packet_size_table[2][0x072] = 39;
 	packet_size_table[2][0x072] = 39;
 	packet_size_table[2][0x085] = 9;
 	packet_size_table[2][0x085] = 9;
@@ -10570,7 +10809,7 @@ int do_init_clif(void) {
 	packet_size_table[2][0x113] = 19;
 	packet_size_table[2][0x113] = 19;
 	packet_size_table[2][0x116] = 19;
 	packet_size_table[2][0x116] = 19;
 	packet_size_table[2][0x190] = 99;
 	packet_size_table[2][0x190] = 99;
-	// size of packet version 8
+	// size of packet version 8 (26july04)
 	memcpy(&packet_size_table[3], &packet_size_table[2], sizeof(packet_len_table));
 	memcpy(&packet_size_table[3], &packet_size_table[2], sizeof(packet_len_table));
 	packet_size_table[3][0x072] = 14;
 	packet_size_table[3][0x072] = 14;
 	packet_size_table[3][0x07e] = 33;
 	packet_size_table[3][0x07e] = 33;
@@ -10589,7 +10828,7 @@ int do_init_clif(void) {
 	packet_size_table[3][0x116] = 2;
 	packet_size_table[3][0x116] = 2;
 	packet_size_table[3][0x190] = 26;
 	packet_size_table[3][0x190] = 26;
 	packet_size_table[3][0x193] = 9;
 	packet_size_table[3][0x193] = 9;
-	// size of packet version 9
+	// size of packet version 9 (9aug04/16aug04/17aug04)
 	memcpy(&packet_size_table[4], &packet_size_table[3], sizeof(packet_len_table));
 	memcpy(&packet_size_table[4], &packet_size_table[3], sizeof(packet_len_table));
 	packet_size_table[4][0x072] = 17;
 	packet_size_table[4][0x072] = 17;
 	packet_size_table[4][0x07e] = 37;
 	packet_size_table[4][0x07e] = 37;
@@ -10614,7 +10853,7 @@ int do_init_clif(void) {
 	packet_size_table[4][0x212] = 26;
 	packet_size_table[4][0x212] = 26;
 	packet_size_table[4][0x213] = 26;
 	packet_size_table[4][0x213] = 26;
 	packet_size_table[4][0x214] = 42;
 	packet_size_table[4][0x214] = 42;
-	// size of packet version 10
+	// size of packet version 10 (6sept04)
 	memcpy(&packet_size_table[5], &packet_size_table[4], sizeof(packet_len_table));
 	memcpy(&packet_size_table[5], &packet_size_table[4], sizeof(packet_len_table));
 	packet_size_table[5][0x072] = 20;
 	packet_size_table[5][0x072] = 20;
 	packet_size_table[5][0x07e] = 19;
 	packet_size_table[5][0x07e] = 19;
@@ -10633,7 +10872,7 @@ int do_init_clif(void) {
 	packet_size_table[5][0x116] = 11;
 	packet_size_table[5][0x116] = 11;
 	packet_size_table[5][0x190] = 22;
 	packet_size_table[5][0x190] = 22;
 	packet_size_table[5][0x193] = 17;
 	packet_size_table[5][0x193] = 17;
-	// size of packet version 11
+	// size of packet version 11 (21sept04)
 	memcpy(&packet_size_table[6], &packet_size_table[5], sizeof(packet_len_table));
 	memcpy(&packet_size_table[6], &packet_size_table[5], sizeof(packet_len_table));
 	packet_size_table[6][0x072] = 18;
 	packet_size_table[6][0x072] = 18;
 	packet_size_table[6][0x07e] = 25;
 	packet_size_table[6][0x07e] = 25;
@@ -10652,7 +10891,7 @@ int do_init_clif(void) {
 	packet_size_table[6][0x116] = 14;
 	packet_size_table[6][0x116] = 14;
 	packet_size_table[6][0x190] = 14;
 	packet_size_table[6][0x190] = 14;
 	packet_size_table[6][0x193] = 12;
 	packet_size_table[6][0x193] = 12;
-	// size of packet version 12
+	// size of packet version 12 (18oct04)
 	memcpy(&packet_size_table[7], &packet_size_table[6], sizeof(packet_len_table));
 	memcpy(&packet_size_table[7], &packet_size_table[6], sizeof(packet_len_table));
 	packet_size_table[7][0x072] = 17;
 	packet_size_table[7][0x072] = 17;
 	packet_size_table[7][0x07e] = 16;
 	packet_size_table[7][0x07e] = 16;
@@ -10671,7 +10910,7 @@ int do_init_clif(void) {
 	packet_size_table[7][0x116] = 10;
 	packet_size_table[7][0x116] = 10;
 	packet_size_table[7][0x190] = 20;
 	packet_size_table[7][0x190] = 20;
 	packet_size_table[7][0x193] = 26;
 	packet_size_table[7][0x193] = 26;
-	// size of packet version 13
+	// size of packet version 13 (25oct04)
 	memcpy(&packet_size_table[8], &packet_size_table[7], sizeof(packet_len_table));
 	memcpy(&packet_size_table[8], &packet_size_table[7], sizeof(packet_len_table));
 	packet_size_table[8][0x072] = 13;
 	packet_size_table[8][0x072] = 13;
 	packet_size_table[8][0x07e] = 13;
 	packet_size_table[8][0x07e] = 13;
@@ -10690,7 +10929,7 @@ int do_init_clif(void) {
 	packet_size_table[8][0x116] = 9;
 	packet_size_table[8][0x116] = 9;
 	packet_size_table[8][0x190] = 26;
 	packet_size_table[8][0x190] = 26;
 	packet_size_table[8][0x193] = 22;
 	packet_size_table[8][0x193] = 22;
-	// size of packet version 14 - Added by nsstrunks
+	// size of packet version 14 - Added by nsstrunks (1nov04)
 	memcpy(&packet_size_table[9], &packet_size_table[8], sizeof(packet_len_table));
 	memcpy(&packet_size_table[9], &packet_size_table[8], sizeof(packet_len_table));
 	packet_size_table[9][0x072] = 13;
 	packet_size_table[9][0x072] = 13;
 	packet_size_table[9][0x07e] = 13;
 	packet_size_table[9][0x07e] = 13;
@@ -10716,7 +10955,7 @@ int do_init_clif(void) {
 	packet_size_table[9][0x21a] = 282;
 	packet_size_table[9][0x21a] = 282;
 	packet_size_table[9][0x21b] = 10;
 	packet_size_table[9][0x21b] = 10;
 	packet_size_table[9][0x21c] = 10;
 	packet_size_table[9][0x21c] = 10;
-	// Size of packet version 15 - Added by nsstrunks
+	// Size of packet version 15 - Added by nsstrunks (6dec04)
 	memcpy(&packet_size_table[10], &packet_size_table[9], sizeof(packet_len_table));
 	memcpy(&packet_size_table[10], &packet_size_table[9], sizeof(packet_len_table));
 	packet_size_table[10][0x072] = 22;
 	packet_size_table[10][0x072] = 22;
 	packet_size_table[10][0x07e] = 30;
 	packet_size_table[10][0x07e] = 30;
@@ -10740,6 +10979,11 @@ int do_init_clif(void) {
 	packet_size_table[10][0x221] = -1;
 	packet_size_table[10][0x221] = -1;
 	packet_size_table[10][0x223] = 8;
 	packet_size_table[10][0x223] = 8;
 
 
+	// Size of packet version 16 (packet db)
+	memcpy(&packet_size_table[11], &packet_size_table[10], sizeof(packet_len_table));
+
+	packetdb_readdb();
+	
 	set_defaultparse(clif_parse);
 	set_defaultparse(clif_parse);
 #ifdef __WIN32
 #ifdef __WIN32
 	if (!make_listen_port(map_port)) {
 	if (!make_listen_port(map_port)) {

+ 2 - 0
src/map/clif.h

@@ -13,6 +13,8 @@ typedef unsigned int in_addr_t;
 
 
 #include "map.h"
 #include "map.h"
 
 
+extern int packet_db_ver;
+
 void clif_setip(char*);
 void clif_setip(char*);
 void clif_setport(int);
 void clif_setport(int);