summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog.txt5
-rw-r--r--conf-tmpl/script_athena.conf4
-rw-r--r--src/map/clif.c110
-rw-r--r--src/map/map.h2
-rw-r--r--src/map/npc.c4
-rw-r--r--src/map/pc.c6
-rw-r--r--src/map/script.c9
-rw-r--r--src/map/script.h1
8 files changed, 75 insertions, 66 deletions
diff --git a/Changelog.txt b/Changelog.txt
index fea6df566..1edf9f9ed 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -1,5 +1,10 @@
Date Added
01/10
+ * Completed adding packet DB reading... still needs (a lot) more work in
+ clif.c [celest]
+ * Added Shinomori's suggestions for npc timers, thanks again ^^ [celest]
+ * Removed checking for script event timers' length, and added Shinomori's
+ changes [celest]
* Start adding packet DB reading [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
diff --git a/conf-tmpl/script_athena.conf b/conf-tmpl/script_athena.conf
index d47b0d5b5..45ee734f7 100644
--- a/conf-tmpl/script_athena.conf
+++ b/conf-tmpl/script_athena.conf
@@ -11,6 +11,4 @@ warn_cmd_mismatch_paramnum: yes
check_cmdcount: 8192
-check_gotocount: 512
-
-max_eventtimer_length: 32 \ No newline at end of file
+check_gotocount: 512 \ No newline at end of file
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);
diff --git a/src/map/map.h b/src/map/map.h
index e6ad63b08..26fc3e6c8 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -375,7 +375,7 @@ struct npc_data {
char *script;
short xs,ys;
int guild_id;
- int timer,timerid,timeramount,nexttimer,timerrid;
+ int timer,timerid,timeramount,nexttimer,rid;
unsigned int timertick;
struct npc_timerevent_list *timer_event;
int label_list_num;
diff --git a/src/map/npc.c b/src/map/npc.c
index d2379e5a8..ff752192a 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -589,7 +589,7 @@ int npc_timerevent(int tid,unsigned int tick,int id,int data)
nd->u.scr.timerid = add_timer(tick+next,npc_timerevent,id,next);
}
- run_script(nd->u.scr.script,te->pos,nd->u.scr.timerrid,nd->bl.id);
+ run_script(nd->u.scr.script,te->pos,nd->u.scr.rid,nd->bl.id);
return 0;
}
/*==========================================
@@ -612,7 +612,7 @@ int npc_timerevent_start(struct npc_data *nd)
}
nd->u.scr.nexttimer=j;
nd->u.scr.timertick=gettick();
- nd->u.scr.timerrid=0; // no players attached by default [celest]
+ nd->u.scr.rid=0; // reset attached player [celest]
if(j>=n)
return 0;
diff --git a/src/map/pc.c b/src/map/pc.c
index 5ff5f06fd..2954dfddf 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -6791,14 +6791,12 @@ int pc_addeventtimer(struct map_session_data *sd,int tick,const char *name)
nullpo_retr(0, sd);
- Assert(strlen(name) < script_config.max_eventtimer_len);
-
for(i=0;i<MAX_EVENTTIMER;i++)
if( sd->eventtimer[i]==-1 )
break;
if(i<MAX_EVENTTIMER){
- char *evname=(char *)aCalloc(script_config.max_eventtimer_len,sizeof(char));
- memcpy(evname,name,script_config.max_eventtimer_len);
+ char *evname=(char *)aMalloc((strlen(name)+1)*sizeof(char));
+ memcpy(evname,name,(strlen(name)+1));
sd->eventtimer[i]=add_timer(gettick()+tick,
pc_eventtimer,sd->bl.id,(int)evname);
sd->eventcount++;
diff --git a/src/map/script.c b/src/map/script.c
index 6e00d15cb..64e4a7692 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -3893,6 +3893,7 @@ int buildin_initnpctimer(struct script_state *st)
npc_settimerevent_tick(nd,0);
npc_timerevent_start(nd);
+ nd->u.scr.rid=st->rid;
return 0;
}
/*==========================================
@@ -3985,7 +3986,7 @@ int buildin_attachnpctimer(struct script_state *st)
if (sd==NULL)
return 0;
- nd->u.scr.timerrid = sd->bl.id;
+ nd->u.scr.rid = sd->bl.id;
return 0;
}
@@ -4001,7 +4002,7 @@ int buildin_detachnpctimer(struct script_state *st)
else
nd=(struct npc_data *)map_id2bl(st->oid);
- nd->u.scr.timerrid = 0;
+ nd->u.scr.rid = 0;
return 0;
}
@@ -7204,7 +7205,6 @@ int script_config_read(char *cfgName)
script_config.warn_cmd_mismatch_paramnum=1;
script_config.check_cmdcount=8192;
script_config.check_gotocount=512;
- script_config.max_eventtimer_len=32;
fp=fopen(cfgName,"r");
if(fp==NULL){
@@ -7238,9 +7238,6 @@ int script_config_read(char *cfgName)
else if(strcmpi(w1,"check_gotocount")==0) {
script_config.check_gotocount = battle_config_switch(w2);
}
- else if(strcmpi(w1,"max_eventtimer_length")==0) {
- script_config.max_eventtimer_len = battle_config_switch(w2);
- }
else if(strcmpi(w1,"import")==0){
script_config_read(w2);
}
diff --git a/src/map/script.h b/src/map/script.h
index 5dd266174..50aac9dd7 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -9,7 +9,6 @@ extern struct Script_Config {
int warn_cmd_mismatch_paramnum;
int check_cmdcount;
int check_gotocount;
- int max_eventtimer_len;
} script_config;
struct script_data {