diff options
-rw-r--r-- | Changelog.txt | 4 | ||||
-rw-r--r-- | src/common/grfio.c | 17 | ||||
-rw-r--r-- | src/map/atcommand.c | 2 | ||||
-rw-r--r-- | src/map/npc.c | 38 | ||||
-rw-r--r-- | src/map/skill.c | 48 |
5 files changed, 101 insertions, 8 deletions
diff --git a/Changelog.txt b/Changelog.txt index ae0556076..ccc02a939 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,6 +1,10 @@ Date Added 12/20 + * Added reading leveluseskillspamount.txt from the GRF to auto set sp used for each skill [celest] + * Added reading indoorrswtable.txt from the GRF to auto set 'indoor' mapflags + [celest] + * Added check in grfio.c to prevent crashing if a file wasn't found [celest] * Rolling GUILDCACHE and FASTCHAR into main branches/stable tree [MouseJstr] * Changed max_paramter to an unsigned int so that you can have over 255 as your max stat [Codemaster] diff --git a/src/common/grfio.c b/src/common/grfio.c index 507b66cb3..b005398cc 100644 --- a/src/common/grfio.c +++ b/src/common/grfio.c @@ -444,13 +444,13 @@ int grfio_size(char *fname) entry = filelist_find(fname); if (entry==NULL || entry->gentry<0) { // LocalFileCheck - char lfname[256],rname[256],*p; + char lfname[256],*rname,*p; FILELIST lentry; struct stat st; - if(strcmp(data_dir, "") != 0) { + if(strcmp(data_dir, "") != 0 && (rname=grfio_resnametable(fname,lfname))!=NULL) { //printf("%s\t",fname); - sprintf(rname,"%s",grfio_resnametable(fname,lfname)); + //sprintf(rname,"%s",grfio_resnametable(fname,lfname)); //printf("%s\n",rname); sprintf(lfname,"%s%s",data_dir,rname); //printf("%s\n",lfname); @@ -486,13 +486,16 @@ void* grfio_reads(char *fname, int *size) entry = filelist_find(fname); if (entry==NULL || entry->gentry<=0) { // LocalFileCheck - char lfname[256],rname[256],*p; + char lfname[256],*rname,*p; FILELIST lentry; strncpy(lfname,fname,255); - sprintf(rname,"%s",grfio_resnametable(fname,lfname)); - sprintf(lfname,"%s%s",data_dir,rname); - //printf("%s\n",lfname); + // i hope this is the correct way =p [celest] + if ((rname=grfio_resnametable(fname,lfname))!=NULL) { + //sprintf(rname,"%s",grfio_resnametable(fname,lfname)); + sprintf(lfname,"%s%s",data_dir,rname); + //printf("%s\n",lfname); + } for(p=&lfname[0];*p!=0;p++) if (*p=='\\') *p = '/'; // * At the time of Unix diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 742061caa..a1b90a5c3 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -8710,4 +8710,4 @@ int atcommand_refreshonline( return 0; } -#endif /* end sql only */
\ No newline at end of file +#endif /* end sql only */ diff --git a/src/map/npc.c b/src/map/npc.c index d9f515cfd..7b616282f 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -21,6 +21,7 @@ #include "pet.h" #include "battle.h" #include "skill.h" +#include "grfio.h" #include "showmsg.h" #ifdef MEMWATCH @@ -2135,6 +2136,39 @@ static int npc_parse_mapflag(char *w1,char *w2,char *w3,char *w4) return 0; } +static int npc_read_indoors(void) +{ + char *buf,*p; + int s, m; + + buf=grfio_reads("data\\indoorrswtable.txt",&s); + + if(buf==NULL) + return -1; + + buf[s]=0; + for(p=buf;p-buf<s;){ + char buf2[64]; + + if(sscanf(p,"%[^#]#",buf2) == 1){ + char map_name[64] = ""; + strncpy(map_name, buf2, strlen(buf2) - 4); + strcat(map_name, ".gat"); + if ((m = map_mapname2mapid(map_name)) >= 0) + map[m].flag.indoors=1; + } + + p=strchr(p,10); + if(!p) break; + p++; + } + free(buf); + sprintf(tmp_output,"Done reading '"CL_WHITE"%s"CL_RESET"'.\n","data\\indoorrswtable.txt"); + ShowStatus(tmp_output); + + return 0; +} + static int ev_db_final(void *key,void *data,va_list ap) { free(data); @@ -2227,6 +2261,10 @@ int do_init_npc(void) int busy = 0; char c = '-'; + // indoorrswtable.txt and etcinfo.txt [Celest] + npc_read_indoors(); + //npc_read_weather(); + ev_db=strdb_init(24); npcname_db=strdb_init(24); diff --git a/src/map/skill.c b/src/map/skill.c index ddfb04965..f74409caf 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -25,6 +25,7 @@ #include "chrif.h" #include "guild.h" #include "showmsg.h" +#include "grfio.h" #ifdef MEMWATCH #include "memwatch.h" @@ -11982,6 +11983,52 @@ int skill_readdb(void) return 0; } +/*=============================================== + * For reading leveluseskillspamount.txt [Celest] + *----------------------------------------------- + */ +static int skill_read_skillspamount(void) +{ + char *buf,*p; + struct skill_db *skill = NULL; + int s, idx, new_flag=1, level=1, sp=0; + + buf=grfio_reads("data\\leveluseskillspamount.txt",&s); + + if(buf==NULL) + return -1; + + buf[s]=0; + for(p=buf;p-buf<s;){ + char buf2[64]; + + if (sscanf(p,"%[@]",buf2) == 1) { + level = 1; + new_flag = 1; + } else if (new_flag && sscanf(p,"%[^#]#",buf2) == 1) { + for (idx=0; skill_names[idx].id != 0; idx++) { + if (strstr(buf2, skill_names[idx].name) != NULL) { + skill = &skill_db[ skill_names[idx].id ]; + new_flag = 0; + break; + } + } + } else if (!new_flag && sscanf(p,"%d#",&sp) == 1) { + skill->sp[level-1]=sp; + level++; + } + + p=strchr(p,10); + if(!p) break; + p++; + } + free(buf); + sprintf(tmp_output,"Done reading '"CL_WHITE"%s"CL_RESET"'.\n","data\\leveluseskillspamount.txt"); + ShowStatus(tmp_output); + + return 0; +} + void skill_reload(void) { /* @@ -12001,6 +12048,7 @@ void skill_reload(void) int do_init_skill(void) { skill_readdb(); + skill_read_skillspamount(); add_timer_func_list(skill_unit_timer,"skill_unit_timer"); add_timer_func_list(skill_castend_id,"skill_castend_id"); |