diff options
Diffstat (limited to 'src/map/clif.c')
-rw-r--r-- | src/map/clif.c | 110 |
1 files changed, 61 insertions, 49 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index 00de30b59..54bf3a452 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -55,6 +55,9 @@ #define MAX_PACKET_DB 0x224 int packet_db_ver = -1; +int *packet_db_size; +void (**packet_db_parse_func)(); +short packet_db_pos[MAX_PACKET_DB][20]; 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, @@ -10159,11 +10162,14 @@ void clif_parse_debug(int fd,struct map_session_data *sd) { int i, cmd; + if (packet_db_ver < 0) + return; + 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++){ + for(i=0;i<packet_db_size[cmd];i++){ if((i&15)==0) printf("\n%04X ",i); printf("%02X ",RFIFOB(fd,i)); @@ -10630,7 +10636,8 @@ static int packetdb_readdb(void) }; // memset(packet_db,0,sizeof(packet_db)); - + memset(packet_db_pos,0,sizeof(packet_db_pos)); + if( (fp=fopen("db/packet_db.txt","r"))==NULL ){ printf("can't read db/packet_db.txt\n"); return 1; @@ -10645,62 +10652,64 @@ static int packetdb_readdb(void) 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; + if (packet_db_ver > 7) { // minimum packet version allowed + packet_db_size = packet_size_table[packet_db_ver - 5]; + packet_db_parse_func = clif_parse_func_table[packet_db_ver - 7]; - cmd=strtol(str[0],(char **)NULL,0); - if(cmd<=0 || cmd>=MAX_PACKET_DB) - continue; + while(fgets(line,1020,fp)){ + 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; - 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]); + cmd=strtol(str[0],(char **)NULL,0); + if(cmd<=0 || cmd>=MAX_PACKET_DB) + continue; - 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[1]==NULL){ + sprintf(tmp_output, "packet_db: packet len error\n"); + ShowError(tmp_output); + continue; + } + packet_db_size[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){ + packet_db_parse_func[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_pos[cmd][j]=atoi(str2[j]); } - } - 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]); + 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 | %p\n",ln,cmd,packet_db_size[cmd],str[2],packet_db_parse_func[cmd],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"); @@ -10982,6 +10991,9 @@ int do_init_clif(void) { // Size of packet version 16 (packet db) memcpy(&packet_size_table[11], &packet_size_table[10], sizeof(packet_len_table)); + packet_db_size = packet_size_table[0]; + packet_db_parse_func = clif_parse_func_table[0]; + packetdb_readdb(); set_defaultparse(clif_parse); |