Changed monster group parsing to svreaddb

This commit is contained in:
Lemongrass3110 2016-05-28 17:14:24 +02:00
parent 08893675a1
commit a89e97e5bd

View File

@ -4155,67 +4155,29 @@ static bool mob_readdb_mobavail(char* str[], int columns, int current)
* Reading of random monster data * Reading of random monster data
* MobGroup,MobID,DummyName,Rate * MobGroup,MobID,DummyName,Rate
*------------------------------------------*/ *------------------------------------------*/
static int mob_read_randommonster_sub(const char* filename, bool silent) { static bool mob_readdb_group(char* str[], int columns, int current){
FILE *fp;
char line[1024];
unsigned int entries = 0;
if ((fp = fopen(filename,"r")) == NULL) {
if (!silent)
ShowError("mob_read_randommonster: can't read %s\n",filename);
return -1;
}
while(fgets(line, sizeof(line), fp)) {
struct s_randomsummon_group *msummon = NULL; struct s_randomsummon_group *msummon = NULL;
int mob_id, group = 0; int mob_id, group = 0;
unsigned short i = 0; unsigned short i = 0;
char *str[4], *p;
bool set_default = false; bool set_default = false;
if (line[0] == '/' && line[1] == '/')
continue;
if (strstr(line,"import")) {
char w1[16], w2[64];
if (sscanf(line,"%15[^:]: %63[^\r\n]",w1,w2) == 2 &&
strcmpi(w1,"import") == 0)
{
mob_read_randommonster_sub(w2, 0);
continue;
}
}
p = line;
while(ISSPACE(*p))
++p;
memset(str,0,sizeof(str));
for (i = 0; i < 5 && p; i++) {
str[i] = p;
p = strchr(p,',');
if (p)
*p++=0;
}
if (str[0] == NULL || str[2] == NULL)
continue;
if (ISDIGIT(str[0][0]) && ISDIGIT(str[0][1])) if (ISDIGIT(str[0][0]) && ISDIGIT(str[0][1]))
group = atoi(str[0]); group = atoi(str[0]);
else if (!script_get_constant(str[0], &group)) { else if (!script_get_constant(str[0], &group)) {
ShowError("mob_read_randommonster_sub: Invalid random monster group '%s' at line '%s'.\n", str[0], line); //ShowError("mob_read_randommonster_sub: Invalid random monster group '%s' at line '%s'.\n", str[0], line);
continue; return false;
} }
mob_id = atoi(str[1]); mob_id = atoi(str[1]);
if (mob_id != 0 && mob_db(mob_id) == mob_dummy) { if (mob_id != 0 && mob_db(mob_id) == mob_dummy) {
ShowError("mob_read_randommonster_sub: Invalid random monster group '%s' at line '%s'.\n", str[0], line); //ShowError("mob_read_randommonster_sub: Invalid random monster group '%s' at line '%s'.\n", str[0], line);
continue; return false;
} }
else if (mob_id == 0){ else if (mob_id == 0){
mob_id = atoi(str[3]); mob_id = atoi(str[3]);
if (mob_db(mob_id) == mob_dummy) { if (mob_db(mob_id) == mob_dummy) {
ShowError("mob_read_randommonster_sub: Invalid random monster group '%s' at line '%s'.\n", str[0], line); //ShowError("mob_read_randommonster_sub: Invalid random monster group '%s' at line '%s'.\n", str[0], line);
continue; return false;
} }
set_default = true; set_default = true;
} }
@ -4236,19 +4198,7 @@ static int mob_read_randommonster_sub(const char* filename, bool silent) {
msummon->list[i].rate = atoi(str[3]); msummon->list[i].rate = atoi(str[3]);
} }
entries++; return true;
}
fclose(fp);
ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", entries, filename);
return 0;
}
static void mob_read_randommonster(const char* basedir, bool silent) {
char filepath[256];
sprintf(filepath, "%s/%s", basedir, "mob_random_db.txt");
mob_read_randommonster_sub(filepath, silent);
return;
} }
//processes one mob_chat_db entry [SnakeDrak] //processes one mob_chat_db entry [SnakeDrak]
@ -4995,7 +4945,11 @@ static void mob_load(void)
sv_readdb(dbsubpath2, "mob_race2_db.txt", ',', 2, MAX_RACE2_MOBS, -1, &mob_readdb_race2, i); sv_readdb(dbsubpath2, "mob_race2_db.txt", ',', 2, MAX_RACE2_MOBS, -1, &mob_readdb_race2, i);
sv_readdb(dbsubpath1, "mob_item_ratio.txt", ',', 2, 2+MAX_ITEMRATIO_MOBS, -1, &mob_readdb_itemratio, i); sv_readdb(dbsubpath1, "mob_item_ratio.txt", ',', 2, 2+MAX_ITEMRATIO_MOBS, -1, &mob_readdb_itemratio, i);
sv_readdb(dbsubpath1, "mob_chat_db.txt", '#', 3, 3, MAX_MOB_CHAT, &mob_parse_row_chatdb, i); sv_readdb(dbsubpath1, "mob_chat_db.txt", '#', 3, 3, MAX_MOB_CHAT, &mob_parse_row_chatdb, i);
mob_read_randommonster(dbsubpath2, i); sv_readdb(dbsubpath2, "mob_branch.txt", ',', 4, 4, -1, &mob_readdb_group, i );
sv_readdb(dbsubpath2, "mob_poring.txt", ',', 4, 4, -1, &mob_readdb_group, i );
sv_readdb(dbsubpath2, "mob_boss.txt", ',', 4, 4, -1, &mob_readdb_group, i );
sv_readdb(dbsubpath1, "mob_pouch.txt", ',', 4, 4, -1, &mob_readdb_group, i );
sv_readdb(dbsubpath1, "mob_classchange.txt", ',', 4, 4, -1, &mob_readdb_group, i );
aFree(dbsubpath1); aFree(dbsubpath1);
aFree(dbsubpath2); aFree(dbsubpath2);