From 50de773053b9c1849381d0502021898782b5994a Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 11 Apr 2015 01:43:04 +0300 Subject: Allow for plugins read custom fields from jobdb1. --- src/map/status.c | 267 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 138 insertions(+), 129 deletions(-) (limited to 'src/map/status.c') diff --git a/src/map/status.c b/src/map/status.c index 91ab19558..2f514787d 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -12052,18 +12052,11 @@ int status_get_sc_type(sc_type type) { return status->sc_conf[type]; } -/*------------------------------------------ -* DB reading. -* job_db1.txt - weight, hp, sp, aspd -* job_db2.txt - job level stat bonuses -* size_fix.txt - size adjustment table for weapons -* refine_db.txt - refining data table -*------------------------------------------*/ -void status_read_job_db(void) { /* [malufett/Hercules] */ - int i = 0; - config_t job_db_conf; - config_setting_t *jdb = NULL; - const char *config_filename = "db/"DBPATH"job_db.conf"; +void status_read_job_db_sub(int idx, const char *name, config_setting_t *jdb) +{ + config_setting_t *temp = NULL; + int i32 = 0; + struct { const char *name; int id; @@ -12097,139 +12090,154 @@ void status_read_job_db(void) { /* [malufett/Hercules] */ #endif }; - if ( libconfig->read_file(&job_db_conf, config_filename) ) { - ShowError("can't read %s\n", config_filename); - return; - } - while ( (jdb = libconfig->setting_get_elem(job_db_conf.root, i++)) ) { - int class_, idx, i32 = 0; - config_setting_t *temp = NULL; - const char *name = config_setting_name(jdb); - - if ( (class_ = pc->check_job_name(name)) == -1 ) { - ShowWarning("pc_read_job_db: '%s' unknown job name!\n", name); - continue; - } - - idx = pc->class2idx(class_); - if ( (temp = libconfig->setting_get_member(jdb, "Inherit")) ) { - int nidx = 0, iidx, w; - const char *iname; - while ( (iname = libconfig->setting_get_string_elem(temp, nidx++)) ) { - int iclass, ave, total = 0; - if ( (iclass = pc->check_job_name(iname)) == -1 ) { - ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s'!\n", name, iname); - continue; - } - iidx = pc->class2idx(iclass); - status->max_weight_base[idx] = status->max_weight_base[iidx]; - memcpy(&status->aspd_base[idx], &status->aspd_base[iidx], sizeof(status->aspd_base[iidx])); - for ( w = 1; w <= MAX_LEVEL && status->HP_table[iidx][w]; w++ ) { - status->HP_table[idx][w] = status->HP_table[iidx][w]; - total += status->HP_table[idx][w]; - } - ave = total / (w - 1); - for ( ; w <= pc->max_level[idx][0]; w++ ) { - status->HP_table[idx][w] = min(ave * w, battle_config.max_hp); - } - for ( w = 1; w <= MAX_LEVEL && status->SP_table[iidx][w]; w++ ) { - status->SP_table[idx][w] = status->SP_table[iidx][w]; - total += status->SP_table[idx][w]; - } - ave = total / (w - 1); - for ( ; w <= pc->max_level[idx][0]; w++ ) { - status->SP_table[idx][w] = min(ave * w, battle_config.max_sp); - } + if ((temp = libconfig->setting_get_member(jdb, "Inherit"))) { + int nidx = 0, iidx, w; + const char *iname; + while ((iname = libconfig->setting_get_string_elem(temp, nidx++))) { + int iclass, ave, total = 0; + if ((iclass = pc->check_job_name(iname)) == -1) { + ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s'!\n", name, iname); + continue; + } + iidx = pc->class2idx(iclass); + status->max_weight_base[idx] = status->max_weight_base[iidx]; + memcpy(&status->aspd_base[idx], &status->aspd_base[iidx], sizeof(status->aspd_base[iidx])); + for (w = 1; w <= MAX_LEVEL && status->HP_table[iidx][w]; w++) { + status->HP_table[idx][w] = status->HP_table[iidx][w]; + total += status->HP_table[idx][w]; + } + ave = total / (w - 1); + for ( ; w <= pc->max_level[idx][0]; w++) { + status->HP_table[idx][w] = min(ave * w, battle_config.max_hp); + } + for (w = 1; w <= MAX_LEVEL && status->SP_table[iidx][w]; w++) { + status->SP_table[idx][w] = status->SP_table[iidx][w]; + total += status->SP_table[idx][w]; + } + ave = total / (w - 1); + for ( ; w <= pc->max_level[idx][0]; w++) { + status->SP_table[idx][w] = min(ave * w, battle_config.max_sp); } } - if ( (temp = libconfig->setting_get_member(jdb, "InheritHP")) ) { - int nidx = 0, iidx; - const char *iname; - while ( (iname = libconfig->setting_get_string_elem(temp, nidx++)) ) { - int iclass, w, ave, total = 0; - if ( (iclass = pc->check_job_name(iname)) == -1 ) { - ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s' HP!\n", name, iname); - continue; - } - iidx = pc->class2idx(iclass); - for ( w = 1; w <= MAX_LEVEL && status->HP_table[iidx][w]; w++ ) { - status->HP_table[idx][w] = status->HP_table[iidx][w]; - total += status->HP_table[idx][w]; - } - ave = total / (w - 1); - for ( ; w <= pc->max_level[idx][0]; w++ ) { - status->HP_table[idx][w] = min(ave * w, battle_config.max_hp); - } + } + if ((temp = libconfig->setting_get_member(jdb, "InheritHP"))) { + int nidx = 0, iidx; + const char *iname; + while ((iname = libconfig->setting_get_string_elem(temp, nidx++))) { + int iclass, w, ave, total = 0; + if ((iclass = pc->check_job_name(iname)) == -1) { + ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s' HP!\n", name, iname); + continue; + } + iidx = pc->class2idx(iclass); + for (w = 1; w <= MAX_LEVEL && status->HP_table[iidx][w]; w++) { + status->HP_table[idx][w] = status->HP_table[iidx][w]; + total += status->HP_table[idx][w]; + } + ave = total / (w - 1); + for ( ; w <= pc->max_level[idx][0]; w++ ) { + status->HP_table[idx][w] = min(ave * w, battle_config.max_hp); } } - if ( (temp = libconfig->setting_get_member(jdb, "InheritSP")) ) { - int nidx = 0, iidx, ave, total = 0; - const char *iname; - while ( (iname = libconfig->setting_get_string_elem(temp, nidx++)) ) { - int iclass, w; - if ( (iclass = pc->check_job_name(iname)) == -1 ) { - ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s' SP!\n", name, iname); - continue; - } - iidx = pc->class2idx(iclass); - for ( w = 1; w <= MAX_LEVEL && status->SP_table[iidx][w]; w++ ) { - status->SP_table[idx][w] = status->SP_table[iidx][w]; - total += status->SP_table[idx][w]; - } - ave = total / (w - 1); - for ( ; w <= pc->max_level[idx][0]; w++ ) { - status->SP_table[idx][w] = min(ave * w, battle_config.max_sp); - } + } + if ((temp = libconfig->setting_get_member(jdb, "InheritSP"))) { + int nidx = 0, iidx, ave, total = 0; + const char *iname; + while ((iname = libconfig->setting_get_string_elem(temp, nidx++))) { + int iclass, w; + if ((iclass = pc->check_job_name(iname)) == -1) { + ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s' SP!\n", name, iname); + continue; + } + iidx = pc->class2idx(iclass); + for (w = 1; w <= MAX_LEVEL && status->SP_table[iidx][w]; w++) { + status->SP_table[idx][w] = status->SP_table[iidx][w]; + total += status->SP_table[idx][w]; + } + ave = total / (w - 1); + for ( ; w <= pc->max_level[idx][0]; w++) { + status->SP_table[idx][w] = min(ave * w, battle_config.max_sp); } } + } - if ( libconfig->setting_lookup_int(jdb, "Weight", &i32) ) - status->max_weight_base[idx] = i32; - else if ( !status->max_weight_base[idx] ) - status->max_weight_base[idx] = 20000; + if (libconfig->setting_lookup_int(jdb, "Weight", &i32)) + status->max_weight_base[idx] = i32; + else if (!status->max_weight_base[idx]) + status->max_weight_base[idx] = 20000; - if ( (temp = libconfig->setting_get_member(jdb, "BaseASPD")) ) { - int widx = 0; - config_setting_t *wpn = NULL; - while ( (wpn = libconfig->setting_get_elem(temp, widx++)) ) { - int w, wlen = ARRAYLENGTH(wnames); - const char *wname = config_setting_name(wpn); + if ((temp = libconfig->setting_get_member(jdb, "BaseASPD"))) { + int widx = 0; + config_setting_t *wpn = NULL; + while ((wpn = libconfig->setting_get_elem(temp, widx++))) { + int w, wlen = ARRAYLENGTH(wnames); + const char *wname = config_setting_name(wpn); - ARR_FIND(0, wlen, w, strcmp(wnames[w].name, wname) == 0); - if ( w != wlen ) { - status->aspd_base[idx][wnames[w].id] = libconfig->setting_get_int(wpn); - } else { - ShowWarning("status_read_job_db: unknown weapon type '%s'!\n", wname); - } + ARR_FIND(0, wlen, w, strcmp(wnames[w].name, wname) == 0); + if (w != wlen) { + status->aspd_base[idx][wnames[w].id] = libconfig->setting_get_int(wpn); + } else { + ShowWarning("status_read_job_db: unknown weapon type '%s'!\n", wname); } } + } - if ( (temp = libconfig->setting_get_member(jdb, "HPTable")) ) { - int level = 0, ave, total = 0; - config_setting_t *hp = NULL; - while ( (hp = libconfig->setting_get_elem(temp, level++)) ) { - status->HP_table[idx][level] = i32 = min(libconfig->setting_get_int(hp), battle_config.max_hp); - total += i32 - status->HP_table[idx][level - 1]; - } - ave = total / (level - 1); - for ( ; level <= pc->max_level[idx][0]; level++ ) { /* limit only to possible maximum level of the given class */ - status->HP_table[idx][level] = min(ave * level, battle_config.max_hp); /* some are still empty? then let's use the average increase */ - } + if ((temp = libconfig->setting_get_member(jdb, "HPTable"))) { + int level = 0, ave, total = 0; + config_setting_t *hp = NULL; + while ((hp = libconfig->setting_get_elem(temp, level++))) { + status->HP_table[idx][level] = i32 = min(libconfig->setting_get_int(hp), battle_config.max_hp); + total += i32 - status->HP_table[idx][level - 1]; + } + ave = total / (level - 1); + for ( ; level <= pc->max_level[idx][0]; level++ ) { /* limit only to possible maximum level of the given class */ + status->HP_table[idx][level] = min(ave * level, battle_config.max_hp); /* some are still empty? then let's use the average increase */ } + } - if ( (temp = libconfig->setting_get_member(jdb, "SPTable")) ) { - int level = 0, ave, total = 0; - config_setting_t *sp = NULL; - while ( (sp = libconfig->setting_get_elem(temp, level++)) ) { - status->SP_table[idx][level] = i32 = min(libconfig->setting_get_int(sp), battle_config.max_sp); - total += i32 - status->SP_table[idx][level - 1]; - } - ave = total / (level - 1); - for ( ; level <= pc->max_level[idx][0]; level++ ) { - status->SP_table[idx][level] = min(ave * level, battle_config.max_sp); - } + if ((temp = libconfig->setting_get_member(jdb, "SPTable"))) { + int level = 0, ave, total = 0; + config_setting_t *sp = NULL; + while ((sp = libconfig->setting_get_elem(temp, level++))) { + status->SP_table[idx][level] = i32 = min(libconfig->setting_get_int(sp), battle_config.max_sp); + total += i32 - status->SP_table[idx][level - 1]; + } + ave = total / (level - 1); + for ( ; level <= pc->max_level[idx][0]; level++ ) { + status->SP_table[idx][level] = min(ave * level, battle_config.max_sp); } } +} + +/*------------------------------------------ +* DB reading. +* job_db1.txt - weight, hp, sp, aspd +* job_db2.txt - job level stat bonuses +* size_fix.txt - size adjustment table for weapons +* refine_db.txt - refining data table +*------------------------------------------*/ +void status_read_job_db(void) { /* [malufett/Hercules] */ + int i = 0; + config_t job_db_conf; + config_setting_t *jdb = NULL; + const char *config_filename = "db/"DBPATH"job_db.conf"; + + if ( libconfig->read_file(&job_db_conf, config_filename) ) { + ShowError("can't read %s\n", config_filename); + return; + } + while ( (jdb = libconfig->setting_get_elem(job_db_conf.root, i++)) ) { + int class_, idx; + const char *name = config_setting_name(jdb); + + if ( (class_ = pc->check_job_name(name)) == -1 ) { + ShowWarning("pc_read_job_db: '%s' unknown job name!\n", name); + continue; + } + + idx = pc->class2idx(class_); + status->read_job_db_sub(idx, name, jdb); + } libconfig->destroy(&job_db_conf); } @@ -12547,4 +12555,5 @@ void status_defaults(void) { status->readdb_refine = status_readdb_refine; status->readdb_scconfig = status_readdb_scconfig; status->read_job_db = status_read_job_db; + status->read_job_db_sub = status_read_job_db_sub; } -- cgit v1.2.3-60-g2f50 From 47c691f0e703af91702105a3a877fb8071fc0f1d Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 12 Apr 2015 01:55:48 +0300 Subject: In comment change job_db1.txt to job_db.conf --- src/map/status.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/map/status.c') diff --git a/src/map/status.c b/src/map/status.c index 2f514787d..4c6542846 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -12211,7 +12211,7 @@ void status_read_job_db_sub(int idx, const char *name, config_setting_t *jdb) /*------------------------------------------ * DB reading. -* job_db1.txt - weight, hp, sp, aspd +* job_db.conf - weight, hp, sp, aspd * job_db2.txt - job level stat bonuses * size_fix.txt - size adjustment table for weapons * refine_db.txt - refining data table -- cgit v1.2.3-60-g2f50 From 0f2b317372c2d1c95d4f09c94d054958418a39b4 Mon Sep 17 00:00:00 2001 From: malufett Date: Sun, 19 Apr 2015 22:26:47 +0800 Subject: Fixed Bug#8636 -http://hercules.ws/board/tracker/issue-8636-unknown-weapon-type/?gopid=25011#entry25011 Signed-off-by: malufett --- src/map/status.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/map/status.c') diff --git a/src/map/status.c b/src/map/status.c index 4c6542846..2ccaca1dc 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -12220,7 +12220,12 @@ void status_read_job_db(void) { /* [malufett/Hercules] */ int i = 0; config_t job_db_conf; config_setting_t *jdb = NULL; - const char *config_filename = "db/"DBPATH"job_db.conf"; + const char *config_filename = +#ifdef RENEWAL_ASPD + "db/re/job_db.conf"; +#else + "db/pre/job_db.conf"; +#endif if ( libconfig->read_file(&job_db_conf, config_filename) ) { ShowError("can't read %s\n", config_filename); -- cgit v1.2.3-60-g2f50 From 443c1d02e7351aa9e9ac8ddf0e7781dadc2b7d70 Mon Sep 17 00:00:00 2001 From: Taylor Locke Date: Sun, 19 Apr 2015 11:48:15 -0700 Subject: Fixed wrong job_db.conf path from 0f2b317372c2d1c95d4f09c94d054958418a39b4. --- src/map/status.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/map/status.c') diff --git a/src/map/status.c b/src/map/status.c index 2ccaca1dc..9977332df 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -12224,7 +12224,7 @@ void status_read_job_db(void) { /* [malufett/Hercules] */ #ifdef RENEWAL_ASPD "db/re/job_db.conf"; #else - "db/pre/job_db.conf"; + "db/pre-re/job_db.conf"; #endif if ( libconfig->read_file(&job_db_conf, config_filename) ) { -- cgit v1.2.3-60-g2f50 From 59b18ffcf7c834c78e1112337983d86e3649709f Mon Sep 17 00:00:00 2001 From: malufett Date: Mon, 20 Apr 2015 23:03:38 +0800 Subject: Fixed Bug#8638 -http://hercules.ws/board/tracker/issue-8638-sp/?gopid=25021#entry25021 Signed-off-by: malufett --- src/map/status.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/map/status.c') diff --git a/src/map/status.c b/src/map/status.c index 9977332df..0b406850e 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -12104,7 +12104,7 @@ void status_read_job_db_sub(int idx, const char *name, config_setting_t *jdb) memcpy(&status->aspd_base[idx], &status->aspd_base[iidx], sizeof(status->aspd_base[iidx])); for (w = 1; w <= MAX_LEVEL && status->HP_table[iidx][w]; w++) { status->HP_table[idx][w] = status->HP_table[iidx][w]; - total += status->HP_table[idx][w]; + total += status->HP_table[idx][w] - status->HP_table[idx][w - 1]; } ave = total / (w - 1); for ( ; w <= pc->max_level[idx][0]; w++) { @@ -12112,7 +12112,7 @@ void status_read_job_db_sub(int idx, const char *name, config_setting_t *jdb) } for (w = 1; w <= MAX_LEVEL && status->SP_table[iidx][w]; w++) { status->SP_table[idx][w] = status->SP_table[iidx][w]; - total += status->SP_table[idx][w]; + total += status->SP_table[idx][w] - status->SP_table[idx][w - 1]; } ave = total / (w - 1); for ( ; w <= pc->max_level[idx][0]; w++) { @@ -12132,7 +12132,7 @@ void status_read_job_db_sub(int idx, const char *name, config_setting_t *jdb) iidx = pc->class2idx(iclass); for (w = 1; w <= MAX_LEVEL && status->HP_table[iidx][w]; w++) { status->HP_table[idx][w] = status->HP_table[iidx][w]; - total += status->HP_table[idx][w]; + total += status->HP_table[idx][w] - status->HP_table[idx][w - 1]; } ave = total / (w - 1); for ( ; w <= pc->max_level[idx][0]; w++ ) { @@ -12152,7 +12152,7 @@ void status_read_job_db_sub(int idx, const char *name, config_setting_t *jdb) iidx = pc->class2idx(iclass); for (w = 1; w <= MAX_LEVEL && status->SP_table[iidx][w]; w++) { status->SP_table[idx][w] = status->SP_table[iidx][w]; - total += status->SP_table[idx][w]; + total += status->SP_table[idx][w] - status->SP_table[idx][w-1]; } ave = total / (w - 1); for ( ; w <= pc->max_level[idx][0]; w++) { @@ -12243,6 +12243,7 @@ void status_read_job_db(void) { /* [malufett/Hercules] */ idx = pc->class2idx(class_); status->read_job_db_sub(idx, name, jdb); } + ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", i, config_filename); libconfig->destroy(&job_db_conf); } -- cgit v1.2.3-60-g2f50