From e40c88ecbfe3edeac98c925521b4e372c8b68ba6 Mon Sep 17 00:00:00 2001 From: aleos89 Date: Thu, 11 Aug 2016 18:31:59 -0400 Subject: [PATCH 1/4] Skill Tree cleanup * Added an optional base level requirement for skills. * Refactored some variable types and names. --- db/import-tmpl/skill_tree.txt | 2 +- db/pre-re/skill_tree.txt | 2 +- db/re/skill_tree.txt | 2 +- src/map/atcommand.c | 8 ++--- src/map/mob.c | 2 +- src/map/pc.c | 65 +++++++++++++++++++---------------- src/map/pc.h | 8 ++--- src/map/skill.c | 6 ++-- 8 files changed, 50 insertions(+), 45 deletions(-) diff --git a/db/import-tmpl/skill_tree.txt b/db/import-tmpl/skill_tree.txt index 11f1ce272b..d6cd46519a 100644 --- a/db/import-tmpl/skill_tree.txt +++ b/db/import-tmpl/skill_tree.txt @@ -1,2 +1,2 @@ -//JobNo,Skill-ID,MaxLV{,JobLV},Prerequisite Skill-ID-1,Prerequisite Skill-ID-1-Lv,PrereqSkill-ID-2,PrereqSkill-ID-2-Lv,PrereqSkill-ID-3,PrereqSkill-ID-3-Lv,PrereqSkill-ID-4,PrereqSkill-ID-4-Lv,PrereqSkill-ID-5,PrereqSkill-ID-5-Lv//CLASS_SKILLNAME#Skill Name# +//JobNo,Skill-ID,MaxLv{,BaseLvReq,JobLvReq},Prerequisite Skill-ID-1,Prerequisite Skill-ID-1-Lv,PrereqSkill-ID-2,PrereqSkill-ID-2-Lv,PrereqSkill-ID-3,PrereqSkill-ID-3-Lv,PrereqSkill-ID-4,PrereqSkill-ID-4-Lv,PrereqSkill-ID-5,PrereqSkill-ID-5-Lv//CLASS_SKILLNAME#Skill Name# diff --git a/db/pre-re/skill_tree.txt b/db/pre-re/skill_tree.txt index 3ecd28aab7..fa92074312 100644 --- a/db/pre-re/skill_tree.txt +++ b/db/pre-re/skill_tree.txt @@ -1,4 +1,4 @@ -//JobNo,Skill-ID,MaxLV{,JobLV},Prerequisite Skill-ID-1,Prerequisite Skill-ID-1-Lv,PrereqSkill-ID-2,PrereqSkill-ID-2-Lv,PrereqSkill-ID-3,PrereqSkill-ID-3-Lv,PrereqSkill-ID-4,PrereqSkill-ID-4-Lv,PrereqSkill-ID-5,PrereqSkill-ID-5-Lv//CLASS_SKILLNAME#Skill Name# +//JobNo,Skill-ID,MaxLv{,BaseLvReq,JobLvReq},Prerequisite Skill-ID-1,Prerequisite Skill-ID-1-Lv,PrereqSkill-ID-2,PrereqSkill-ID-2-Lv,PrereqSkill-ID-3,PrereqSkill-ID-3-Lv,PrereqSkill-ID-4,PrereqSkill-ID-4-Lv,PrereqSkill-ID-5,PrereqSkill-ID-5-Lv//CLASS_SKILLNAME#Skill Name# //Novice 0,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# 0,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid# diff --git a/db/re/skill_tree.txt b/db/re/skill_tree.txt index 5499e8c984..017e3f0a24 100644 --- a/db/re/skill_tree.txt +++ b/db/re/skill_tree.txt @@ -1,4 +1,4 @@ -//JobNo,Skill-ID,MaxLV{,JobLV},Prerequisite Skill-ID-1,Prerequisite Skill-ID-1-Lv,PrereqSkill-ID-2,PrereqSkill-ID-2-Lv,PrereqSkill-ID-3,PrereqSkill-ID-3-Lv,PrereqSkill-ID-4,PrereqSkill-ID-4-Lv,PrereqSkill-ID-5,PrereqSkill-ID-5-Lv//CLASS_SKILLNAME#Skill Name# +//JobNo,Skill-ID,MaxLv{,BaseLvReq,JobLvReq},Prerequisite Skill-ID-1,Prerequisite Skill-ID-1-Lv,PrereqSkill-ID-2,PrereqSkill-ID-2-Lv,PrereqSkill-ID-3,PrereqSkill-ID-3-Lv,PrereqSkill-ID-4,PrereqSkill-ID-4-Lv,PrereqSkill-ID-5,PrereqSkill-ID-5-Lv//CLASS_SKILLNAME#Skill Name# //Novice 0,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# 0,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid# diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 5025937772..ab48a4ce0c 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -5687,8 +5687,8 @@ ACMD_FUNC(skilltree) c = pc_class2idx(c); - ARR_FIND( 0, MAX_SKILL_TREE, j, skill_tree[c][j].id == 0 || skill_tree[c][j].id == skill_id ); - if( j == MAX_SKILL_TREE || skill_tree[c][j].id == 0 ) + ARR_FIND( 0, MAX_SKILL_TREE, j, skill_tree[c][j].skill_id == 0 || skill_tree[c][j].skill_id == skill_id ); + if( j == MAX_SKILL_TREE || skill_tree[c][j].skill_id == 0 ) { clif_displaymessage(fd, msg_txt(sd,1169)); // The player cannot use that skill. return 0; @@ -5699,9 +5699,9 @@ ACMD_FUNC(skilltree) meets = 1; for(j=0;jneed[j].id && pc_checkskill(sd,ent->need[j].id) < ent->need[j].lv) + if( ent->need[j].skill_id && pc_checkskill(sd,ent->need[j].skill_id) < ent->need[j].skill_lv) { - sprintf(atcmd_output, msg_txt(sd,1170), ent->need[j].lv, skill_db[skill_get_index(ent->need[j].id)]->desc); // Player requires level %d of skill %s. + sprintf(atcmd_output, msg_txt(sd,1170), ent->need[j].skill_lv, skill_db[skill_get_index(ent->need[j].skill_id)]->desc); // Player requires level %d of skill %s. clif_displaymessage(fd, atcmd_output); meets = 0; } diff --git a/src/map/mob.c b/src/map/mob.c index 5500dfb963..e0853bfffb 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -3646,7 +3646,7 @@ int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, cons //Go Backwards to give better priority to advanced skills. for (i=0,j = MAX_SKILL_TREE-1;j>=0 && i< MAX_MOBSKILL ;j--) { - uint16 skill_id = skill_tree[pc_class2idx(sd->status.class_)][j].id; + uint16 skill_id = skill_tree[pc_class2idx(sd->status.class_)][j].skill_id; uint16 sk_idx = 0; if (!skill_id || !(sk_idx = skill_get_index(skill_id)) || sd->status.skill[sk_idx].lv < 1 || (skill_get_inf2(skill_id)&(INF2_WEDDING_SKILL|INF2_GUILD_SKILL)) || diff --git a/src/map/pc.c b/src/map/pc.c index 29e9d23a2d..0c10f24f3f 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1628,10 +1628,10 @@ void pc_calc_skilltree(struct map_session_data *sd) uint16 c_ = pc_class2idx(JOB_TAEKWON); for (i = 0; i < MAX_SKILL_TREE; i++) { - uint16 sk_id = skill_tree[c_][i].id; + uint16 sk_id = skill_tree[c_][i].skill_id; uint16 sk_idx = 0; - if (!sk_id || !(sk_idx = skill_get_index(skill_tree[c_][i].id))) + if (!sk_id || !(sk_idx = skill_get_index(skill_tree[c_][i].skill_id))) continue; if (sd->status.skill[sk_idx].flag != SKILL_FLAG_PLAGIARIZED && sd->status.skill[sk_idx].flag != SKILL_FLAG_PERM_GRANTED) { @@ -1649,7 +1649,7 @@ void pc_calc_skilltree(struct map_session_data *sd) uint16 skid = 0; flag = 0; - for (i = 0; i < MAX_SKILL_TREE && (skid = skill_tree[c][i].id) > 0; i++) { + for (i = 0; i < MAX_SKILL_TREE && (skid = skill_tree[c][i].skill_id) > 0; i++) { bool fail = false; uint16 sk_idx = skill_get_index(skid); @@ -1661,7 +1661,7 @@ void pc_calc_skilltree(struct map_session_data *sd) // Checking required skills for(j = 0; j < MAX_PC_SKILL_REQUIRE; j++) { - uint16 sk_need_id = skill_tree[c][i].need[j].id; + uint16 sk_need_id = skill_tree[c][i].need[j].skill_id; uint16 sk_need_idx = 0; if (sk_need_id && (sk_need_idx = skill_get_index(sk_need_id))) { @@ -1674,13 +1674,19 @@ void pc_calc_skilltree(struct map_session_data *sd) else sk_need = pc_checkskill(sd,sk_need_id); - if (sk_need < skill_tree[c][i].need[j].lv) { + if (sk_need < skill_tree[c][i].need[j].skill_lv) { fail = true; break; } } } + if (sd->status.base_level < skill_tree[c][i].baselv) { //We need to get the actual class in this case + int class_ = pc_mapid2jobid(sd->class_, sd->status.sex); + class_ = pc_class2idx(class_); + if (class_ == c || (class_ != c && sd->status.base_level < skill_tree[class_][i].baselv)) + fail = true; // base level requirement wasn't satisfied + } if (sd->status.job_level < skill_tree[c][i].joblv) { //We need to get the actual class in this case int class_ = pc_mapid2jobid(sd->class_, sd->status.sex); class_ = pc_class2idx(class_); @@ -1718,7 +1724,7 @@ void pc_calc_skilltree(struct map_session_data *sd) - (c > 0) to avoid grant Novice Skill Tree in case of Skill Reset (need more logic) - (sd->status.skill_point == 0) to wait until all skill points are assigned to avoid problems with Job Change quest. */ - for( i = 0; i < MAX_SKILL_TREE && (skid = skill_tree[c][i].id) > 0; i++ ) { + for( i = 0; i < MAX_SKILL_TREE && (skid = skill_tree[c][i].skill_id) > 0; i++ ) { uint16 sk_idx = 0; if (!(sk_idx = skill_get_index(skid))) continue; @@ -1755,7 +1761,7 @@ static void pc_check_skilltree(struct map_session_data *sd) uint16 skid = 0; flag = 0; - for (i = 0; i < MAX_SKILL_TREE && (skid = skill_tree[c][i].id) > 0; i++ ) { + for (i = 0; i < MAX_SKILL_TREE && (skid = skill_tree[c][i].skill_id) > 0; i++ ) { uint16 sk_idx = skill_get_index(skid); bool fail = false; uint8 j = 0; @@ -1765,7 +1771,7 @@ static void pc_check_skilltree(struct map_session_data *sd) // Checking required skills for (j = 0; j < MAX_PC_SKILL_REQUIRE; j++) { - uint16 sk_need_id = skill_tree[c][i].need[j].id; + uint16 sk_need_id = skill_tree[c][i].need[j].skill_id; uint16 sk_need_idx = 0; if (sk_need_id && (sk_need_idx = skill_get_index(sk_need_id))) { @@ -1778,7 +1784,7 @@ static void pc_check_skilltree(struct map_session_data *sd) else sk_need = pc_checkskill(sd,sk_need_id); - if (sk_need < skill_tree[c][i].need[j].lv) { + if (sk_need < skill_tree[c][i].need[j].skill_lv) { fail = true; break; } @@ -1787,7 +1793,7 @@ static void pc_check_skilltree(struct map_session_data *sd) if( fail ) continue; - if( sd->status.job_level < skill_tree[c][i].joblv ) + if (sd->status.base_level < skill_tree[c][i].baselv || sd->status.job_level < skill_tree[c][i].joblv) continue; j = skill_get_inf2(skid); @@ -6976,7 +6982,7 @@ int pc_allskillup(struct map_session_data *sd) if (!pc_grant_allskills(sd, true)) { uint16 sk_id; - for (i = 0; i < MAX_SKILL_TREE && (sk_id = skill_tree[pc_class2idx(sd->status.class_)][i].id) > 0;i++){ + for (i = 0; i < MAX_SKILL_TREE && (sk_id = skill_tree[pc_class2idx(sd->status.class_)][i].skill_id) > 0;i++){ int inf2 = 0; uint16 sk_idx = 0; if (!sk_id || !(sk_idx = skill_get_index(sk_id))) @@ -8387,10 +8393,10 @@ bool pc_jobchange(struct map_session_data *sd,int job, char upper) if ( (b_class&MAPID_UPPERMASK) != (sd->class_&MAPID_UPPERMASK) ) { //Things to remove when changing class tree. const int class_ = pc_class2idx(sd->status.class_); - short id; - for(i = 0; i < MAX_SKILL_TREE && (id = skill_tree[class_][i].id) > 0; i++) { + uint16 skill_id; + for(i = 0; i < MAX_SKILL_TREE && (skill_id = skill_tree[class_][i].skill_id) > 0; i++) { //Remove status specific to your current tree skills. - enum sc_type sc = status_skill2sc(id); + enum sc_type sc = status_skill2sc(skill_id); if (sc > SC_COMMON_MAX && sd->sc.data[sc]) status_change_end(&sd->bl, sc, INVALID_TIMER); } @@ -10675,18 +10681,18 @@ int pc_split_atoui(char* str, unsigned int* val, char sep, int max) *------------------------------------------*/ static bool pc_readdb_skilltree(char* fields[], int columns, int current) { - unsigned char joblv = 0, skill_lv; - uint16 skill_id; + uint32 baselv = 0, joblv = 0; + uint16 skill_id, skill_lv; int idx, class_; unsigned int i, offset = 3, skill_idx; class_ = atoi(fields[0]); skill_id = (uint16)atoi(fields[1]); - skill_lv = (unsigned char)atoi(fields[2]); + skill_lv = (uint16)atoi(fields[2]); - if(columns==4+MAX_PC_SKILL_REQUIRE*2) - {// job level requirement extra column - joblv = (unsigned char)atoi(fields[3]); + if (columns == 5 + MAX_PC_SKILL_REQUIRE * 2) { // Base/Job level requirement extra columns + baselv = (uint32)atoi(fields[3]); + joblv = (uint32)atoi(fields[4]); offset++; } @@ -10698,25 +10704,26 @@ static bool pc_readdb_skilltree(char* fields[], int columns, int current) idx = pc_class2idx(class_); //This is to avoid adding two lines for the same skill. [Skotlex] - ARR_FIND( 0, MAX_SKILL_TREE, skill_idx, skill_tree[idx][skill_idx].id == 0 || skill_tree[idx][skill_idx].id == skill_id ); + ARR_FIND( 0, MAX_SKILL_TREE, skill_idx, skill_tree[idx][skill_idx].skill_id == 0 || skill_tree[idx][skill_idx].skill_id == skill_id ); if( skill_idx == MAX_SKILL_TREE ) { ShowWarning("pc_readdb_skilltree: Unable to load skill %hu into job %d's tree. Maximum number of skills per class has been reached.\n", skill_id, class_); return false; } - else if(skill_tree[idx][skill_idx].id) + else if(skill_tree[idx][skill_idx].skill_id) { ShowNotice("pc_readdb_skilltree: Overwriting skill %hu for job class %d.\n", skill_id, class_); } - skill_tree[idx][skill_idx].id = skill_id; - skill_tree[idx][skill_idx].max = skill_lv; - skill_tree[idx][skill_idx].joblv = joblv; + skill_tree[idx][skill_idx].skill_id = skill_id; + skill_tree[idx][skill_idx].skill_lv = skill_lv; + skill_tree[idx][skill_idx].baselv = baselv; + skill_tree[idx][skill_idx].joblv = joblv; for(i = 0; i < MAX_PC_SKILL_REQUIRE; i++) { - skill_tree[idx][skill_idx].need[i].id = atoi(fields[i*2+offset]); - skill_tree[idx][skill_idx].need[i].lv = atoi(fields[i*2+offset+1]); + skill_tree[idx][skill_idx].need[i].skill_id = atoi(fields[i*2+offset]); + skill_tree[idx][skill_idx].need[i].skill_lv = atoi(fields[i*2+offset+1]); } return true; } @@ -11087,8 +11094,8 @@ void pc_readdb(void) { // Reset and read skilltree memset(skill_tree,0,sizeof(skill_tree)); - sv_readdb(db_path, DBPATH"skill_tree.txt", ',', 3+MAX_PC_SKILL_REQUIRE*2, 4+MAX_PC_SKILL_REQUIRE*2, -1, &pc_readdb_skilltree, 0); - sv_readdb(db_path, DBIMPORT"/skill_tree.txt", ',', 3+MAX_PC_SKILL_REQUIRE*2, 4+MAX_PC_SKILL_REQUIRE*2, -1, &pc_readdb_skilltree, 1); + sv_readdb(db_path, DBPATH"skill_tree.txt", ',', 3+MAX_PC_SKILL_REQUIRE*2, 5+MAX_PC_SKILL_REQUIRE*2, -1, &pc_readdb_skilltree, 0); + sv_readdb(db_path, DBIMPORT"/skill_tree.txt", ',', 3+MAX_PC_SKILL_REQUIRE*2, 5+MAX_PC_SKILL_REQUIRE*2, -1, &pc_readdb_skilltree, 1); #if defined(RENEWAL_DROP) || defined(RENEWAL_EXP) sv_readdb(db_path, "re/level_penalty.txt", ',', 4, 4, -1, &pc_readdb_levelpenalty, 0); diff --git a/src/map/pc.h b/src/map/pc.h index 38cfe64f1e..40b432c12c 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -1144,12 +1144,10 @@ int pc_mapid2jobid(unsigned short class_, int sex); // Skotlex const char * job_name(int class_); struct skill_tree_entry { - uint16 id; - uint8 max; - uint8 joblv; + uint16 skill_id, skill_lv; + uint32 baselv, joblv; struct { - uint16 id; - uint8 lv; + uint16 skill_id, skill_lv; } need[MAX_PC_SKILL_REQUIRE]; }; // Celest extern struct skill_tree_entry skill_tree[CLASS_COUNT][MAX_SKILL_TREE]; diff --git a/src/map/skill.c b/src/map/skill.c index 889114b8fb..0574073a37 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -302,9 +302,9 @@ int skill_tree_get_max(uint16 skill_id, int b_class) int i; b_class = pc_class2idx(b_class); - ARR_FIND( 0, MAX_SKILL_TREE, i, skill_tree[b_class][i].id == 0 || skill_tree[b_class][i].id == skill_id ); - if( i < MAX_SKILL_TREE && skill_tree[b_class][i].id == skill_id ) - return skill_tree[b_class][i].max; + ARR_FIND( 0, MAX_SKILL_TREE, i, skill_tree[b_class][i].skill_id == 0 || skill_tree[b_class][i].skill_id == skill_id ); + if( i < MAX_SKILL_TREE && skill_tree[b_class][i].skill_id == skill_id ) + return skill_tree[b_class][i].skill_lv; else return skill_get_max(skill_id); } From 16b100d97de009c18c8070e03d6d6d12c7b13086 Mon Sep 17 00:00:00 2001 From: aleos89 Date: Wed, 17 Aug 2016 12:56:58 -0400 Subject: [PATCH 2/4] Follow up to e40c88e * Fixed the offset when base/job level requirements are active. * Added some validity checks for skill ID, skill level, base level and job level. * Moved the parsing of the skill tree database after the parsing of the job databases to make sure the max base and job level data is acquired first. --- src/map/pc.c | 80 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 66 insertions(+), 14 deletions(-) diff --git a/src/map/pc.c b/src/map/pc.c index 0c10f24f3f..8f5ccb4df0 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -6629,13 +6629,31 @@ void pc_lostexp(struct map_session_data *sd, unsigned int base_exp, unsigned int pc_gainexp_disp(sd, base_exp, pc_nextbaseexp(sd), job_exp, pc_nextjobexp(sd), true); } +/** + * Returns max base level for this character's class. + * @param class_: Player's class + * @return Max Base Level + */ +static unsigned int pc_class_maxbaselv(unsigned short class_) { + return job_info[pc_class2idx(class_)].max_level[0]; +} + /** * Returns max base level for this character. * @param sd Player * @return Max Base Level **/ unsigned int pc_maxbaselv(struct map_session_data *sd){ - return job_info[pc_class2idx(sd->status.class_)].max_level[0]; + return pc_class_maxbaselv(sd->status.class_); +} + +/** + * Returns max job level for this character's class. + * @param class_: Player's class + * @return Max Job Level + */ +static unsigned int pc_class_maxjoblv(unsigned short class_) { + return job_info[pc_class2idx(class_)].max_level[1]; } /** @@ -6644,7 +6662,7 @@ unsigned int pc_maxbaselv(struct map_session_data *sd){ * @return Max Job Level **/ unsigned int pc_maxjoblv(struct map_session_data *sd){ - return job_info[pc_class2idx(sd->status.class_)].max_level[1]; + return pc_class_maxjoblv(sd->status.class_); } /** @@ -10681,10 +10699,10 @@ int pc_split_atoui(char* str, unsigned int* val, char sep, int max) *------------------------------------------*/ static bool pc_readdb_skilltree(char* fields[], int columns, int current) { - uint32 baselv = 0, joblv = 0; - uint16 skill_id, skill_lv; + uint32 baselv, joblv, baselv_max, joblv_max; + uint16 skill_id, skill_lv, skill_lv_max; int idx, class_; - unsigned int i, offset = 3, skill_idx; + unsigned int i, offset, skill_idx; class_ = atoi(fields[0]); skill_id = (uint16)atoi(fields[1]); @@ -10693,7 +10711,10 @@ static bool pc_readdb_skilltree(char* fields[], int columns, int current) if (columns == 5 + MAX_PC_SKILL_REQUIRE * 2) { // Base/Job level requirement extra columns baselv = (uint32)atoi(fields[3]); joblv = (uint32)atoi(fields[4]); - offset++; + offset = 5; + } else { + baselv = joblv = 0; + offset = 3; } if(!pcdb_checkid(class_)) @@ -10703,6 +10724,23 @@ static bool pc_readdb_skilltree(char* fields[], int columns, int current) } idx = pc_class2idx(class_); + if (!skill_get_index(skill_id)) { + ShowWarning("pc_readdb_skilltree: Unable to load skill %hu into job %d's tree.", skill_id, class_); + return false; + } + if (skill_lv > (skill_lv_max = skill_get_max(skill_id))) { + ShowWarning("pc_readdb_skilltree: Skill %hu's level %hu is higher than defined max level %hu. Capping skill level..\n", skill_id, skill_lv, skill_lv_max); + skill_lv = skill_lv_max; + } + if (baselv > (baselv_max = pc_class_maxbaselv(class_))) { + ShowWarning("pc_readdb_skilltree: Skill %hu's base level requirement %d exceeds job %d's max base level %d. Capping skill base level..\n", skill_id, baselv, class_, baselv_max); + baselv = baselv_max; + } + if (joblv > (joblv_max = pc_class_maxjoblv(class_))) { + ShowWarning("pc_readdb_skilltree: Skill %hu's job level requirement %d exceeds job %d's max job level %d. Capping skill job level..\n", skill_id, joblv, class_, joblv_max); + joblv = joblv_max; + } + //This is to avoid adding two lines for the same skill. [Skotlex] ARR_FIND( 0, MAX_SKILL_TREE, skill_idx, skill_tree[idx][skill_idx].skill_id == 0 || skill_tree[idx][skill_idx].skill_id == skill_id ); if( skill_idx == MAX_SKILL_TREE ) @@ -10722,8 +10760,22 @@ static bool pc_readdb_skilltree(char* fields[], int columns, int current) for(i = 0; i < MAX_PC_SKILL_REQUIRE; i++) { - skill_tree[idx][skill_idx].need[i].skill_id = atoi(fields[i*2+offset]); - skill_tree[idx][skill_idx].need[i].skill_lv = atoi(fields[i*2+offset+1]); + skill_id = (uint16)atoi(fields[i * 2 + offset]); + skill_lv = (uint16)atoi(fields[i * 2 + offset + 1]); + + if (skill_id == 0) + continue; + if (skill_id > MAX_SKILL_ID || !skill_get_index(skill_id)) { + ShowWarning("pc_readdb_skilltree: Unable to load requirement skill %hu into job %d's tree.", skill_id, class_); + return false; + } + if (skill_lv > (skill_lv_max = skill_get_max(skill_id))) { + ShowWarning("pc_readdb_skilltree: Skill %hu's level (%hu) is higher than defined max level (%hu). Capping skill level..\n", skill_id, skill_lv, skill_lv_max); + skill_lv = skill_lv_max; + } + + skill_tree[idx][skill_idx].need[i].skill_id = skill_id; + skill_tree[idx][skill_idx].need[i].skill_lv = skill_lv; } return true; } @@ -11092,11 +11144,6 @@ void pc_readdb(void) { //reset memset(job_info,0,sizeof(job_info)); // job_info table - // Reset and read skilltree - memset(skill_tree,0,sizeof(skill_tree)); - sv_readdb(db_path, DBPATH"skill_tree.txt", ',', 3+MAX_PC_SKILL_REQUIRE*2, 5+MAX_PC_SKILL_REQUIRE*2, -1, &pc_readdb_skilltree, 0); - sv_readdb(db_path, DBIMPORT"/skill_tree.txt", ',', 3+MAX_PC_SKILL_REQUIRE*2, 5+MAX_PC_SKILL_REQUIRE*2, -1, &pc_readdb_skilltree, 1); - #if defined(RENEWAL_DROP) || defined(RENEWAL_EXP) sv_readdb(db_path, "re/level_penalty.txt", ',', 4, 4, -1, &pc_readdb_levelpenalty, 0); sv_readdb(db_path, DBIMPORT"/level_penalty.txt", ',', 4, 4, -1, &pc_readdb_levelpenalty, 1); @@ -11151,7 +11198,12 @@ void pc_readdb(void) { aFree(dbsubpath1); aFree(dbsubpath2); } - + + // Reset and read skilltree - needs to be read after pc_readdb_job_exp to get max base and job levels + memset(skill_tree, 0, sizeof(skill_tree)); + sv_readdb(db_path, DBPATH"skill_tree.txt", ',', 3 + MAX_PC_SKILL_REQUIRE * 2, 5 + MAX_PC_SKILL_REQUIRE * 2, -1, &pc_readdb_skilltree, 0); + sv_readdb(db_path, DBIMPORT"/skill_tree.txt", ',', 3 + MAX_PC_SKILL_REQUIRE * 2, 5 + MAX_PC_SKILL_REQUIRE * 2, -1, &pc_readdb_skilltree, 1); + // generate the remaining parts of the db if necessary k = battle_config.use_statpoint_table; //save setting battle_config.use_statpoint_table = 0; //temporarily disable to force pc_gets_status_point use default values From d7ee77caa3b955e99b8aa20cbe68d302fb9ec147 Mon Sep 17 00:00:00 2001 From: aleos89 Date: Wed, 17 Aug 2016 13:10:35 -0400 Subject: [PATCH 3/4] Follow up to 16b100d * Corrected some skill tree max levels not matching their defined max level. --- db/pre-re/skill_tree.txt | 56 ++++++++++++++++++++-------------------- db/re/skill_tree.txt | 56 ++++++++++++++++++++-------------------- 2 files changed, 56 insertions(+), 56 deletions(-) diff --git a/db/pre-re/skill_tree.txt b/db/pre-re/skill_tree.txt index fa92074312..88080ad129 100644 --- a/db/pre-re/skill_tree.txt +++ b/db/pre-re/skill_tree.txt @@ -80,7 +80,7 @@ 5,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart# 5,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar# 5,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# -5,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +5,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 5,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Thief 6,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -231,7 +231,7 @@ 10,1013,1,0,0,0,0,0,0,0,0,0,0 //BS_GREED#Greed# 10,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# 10,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush# -10,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +10,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 10,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Hunter 11,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -496,7 +496,7 @@ 18,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1# 18,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2# 18,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3# -18,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +18,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 18,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Bard 19,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -594,8 +594,8 @@ //WeddingClass 22,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# 22,334,1,0,0,0,0,0,0,0,0,0,0 //WE_MALE#I Will Protect You# -22,335,5,0,0,0,0,0,0,0,0,0,0 //WE_FEMALE#I Look up to You# -22,336,5,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARTNER#I miss You# +22,335,1,0,0,0,0,0,0,0,0,0,0 //WE_FEMALE#I Look up to You# +22,336,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARTNER#I miss You# 22,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# //SuperNovice 23,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -650,7 +650,7 @@ 23,52,10,0,0,0,0,0,0,0,0,0,0 //TF_POISON#Envenom# 23,53,1,52,3,0,0,0,0,0,0,0,0 //TF_DETOXIFY#Detoxify# 23,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# -23,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +23,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 23,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Gunslinger 24,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -786,7 +786,7 @@ 4006,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart# 4006,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar# 4006,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# -4006,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4006,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4006,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //ThiefHigh 4007,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -962,7 +962,7 @@ 4011,486,5,113,5,0,0,0,0,0,0,0,0 //WS_OVERTHRUSTMAX#Maximum Power Thrust# 4011,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# 4011,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush# -4011,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4011,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4011,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Sniper 4012,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -1270,7 +1270,7 @@ 4019,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1# 4019,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2# 4019,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3# -4019,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4019,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4019,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Clown 4020,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -1302,7 +1302,7 @@ 4020,313,5,321,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm# 4020,1010,1,0,0,0,0,0,0,0,0,0,0 //BA_PANGVOICE#Pang Voice# 4020,394,10,47,5,316,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow# -4020,395,5,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# +4020,395,1,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# 4020,396,1,45,5,315,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control# 4020,487,5,315,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom# 4020,488,5,45,10,315,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod# @@ -1338,7 +1338,7 @@ 4021,313,5,329,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm# 4021,1011,1,0,0,0,0,0,0,0,0,0,0 //DC_WINKCHARM#Wink of Charm# 4021,394,10,47,5,324,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow# -4021,395,5,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# +4021,395,1,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# 4021,396,1,45,5,323,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control# 4021,487,5,323,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom# 4021,488,5,45,10,323,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod# @@ -1468,7 +1468,7 @@ 4028,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar# 4028,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby# 4028,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent# -4028,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4028,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4028,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Baby Thief 4029,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -1623,7 +1623,7 @@ 4033,1012,1,0,0,0,0,0,0,0,0,0,0 //BS_UNFAIRLYTRICK#Unfair Trick# 4033,1013,1,0,0,0,0,0,0,0,0,0,0 //BS_GREED#Greed# 4033,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush# -4033,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4033,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4033,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Baby Hunter 4034,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -1896,7 +1896,7 @@ 4041,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1# 4041,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2# 4041,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3# -4041,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4041,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4041,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Baby Bard 4042,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -2048,7 +2048,7 @@ 4045,53,1,52,3,0,0,0,0,0,0,0,0 //TF_DETOXIFY#Detoxify# 4045,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby# 4045,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent# -4045,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4045,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4045,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Taekwon 4046,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -2656,7 +2656,7 @@ 4058,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal# 4058,5006,5,0,0,0,0,0,0,0,0,0,0 //NC_MAGMA_ERUPTION#Magma Eruption# 4058,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4058,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4058,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4058,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Guillotine Cross (Regular) 4059,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -3008,7 +3008,7 @@ 4064,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal# 4064,5006,5,0,0,0,0,0,0,0,0,0,0 //NC_MAGMA_ERUPTION#Magma Eruption# 4064,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4064,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4064,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4064,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Guillotine Cross (Trans) 4065,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -3412,7 +3412,7 @@ 4071,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy# 4071,5003,5,2497,1,0,0,0,0,0,0,0,0 //GN_ILLUSIONDOOPING#Hallucination Drug# 4071,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4071,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4071,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4071,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Shadow Chaser (Regular) 4072,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -3639,7 +3639,7 @@ 4075,313,5,321,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm# 4075,1010,1,0,0,0,0,0,0,0,0,0,0 //BA_PANGVOICE#Pang Voice# 4075,394,10,47,5,316,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow# -4075,395,5,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# +4075,395,1,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# 4075,396,1,45,5,315,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control# 4075,487,5,315,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom# 4075,488,5,45,10,315,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod# @@ -3701,7 +3701,7 @@ 4076,313,5,329,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm# 4076,1011,1,0,0,0,0,0,0,0,0,0,0 //DC_WINKCHARM#Wink of Charm# 4076,394,10,47,5,324,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow# -4076,395,5,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# +4076,395,1,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# 4076,396,1,45,5,323,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control# 4076,487,5,323,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom# 4076,488,5,45,10,323,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod# @@ -3856,7 +3856,7 @@ 4078,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy# 4078,5003,5,2497,1,0,0,0,0,0,0,0,0 //GN_ILLUSIONDOOPING#Hallucination Drug# 4078,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4078,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4078,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4078,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Shadow Chaser (Trans) 4079,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -4299,7 +4299,7 @@ 4086,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal# 4086,5006,5,0,0,0,0,0,0,0,0,0,0 //NC_MAGMA_ERUPTION#Magma Eruption# 4086,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4086,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4086,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4086,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Mechanic (Mado) (Trans) 4087,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -4375,7 +4375,7 @@ 4087,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal# 4087,5006,5,0,0,0,0,0,0,0,0,0,0 //NC_MAGMA_ERUPTION#Magma Eruption# 4087,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4087,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4087,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4087,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Baby Rune Knight 4096,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -4660,7 +4660,7 @@ 4100,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal# 4100,5006,5,0,0,0,0,0,0,0,0,0,0 //NC_MAGMA_ERUPTION#Magma Eruption# 4100,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4100,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4100,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4100,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Baby Guillotine Cross 4101,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -5066,7 +5066,7 @@ 4107,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy# 4107,5003,5,2497,1,0,0,0,0,0,0,0,0 //GN_ILLUSIONDOOPING#Hallucination Drug# 4107,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4107,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4107,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4107,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Baby Shadow Chaser 4108,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -5347,7 +5347,7 @@ 4112,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal# 4112,5006,5,0,0,0,0,0,0,0,0,0,0 //NC_MAGMA_ERUPTION#Magma Eruption# 4112,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4112,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4112,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4112,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Super Novice (Expanded) 4190,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -5431,7 +5431,7 @@ 4190,261,5,259,2,0,0,0,0,0,0,0,0 //MO_CALLSPIRITS#Summon Spirit Sphere# 4190,262,1,261,5,0,0,0,0,0,0,0,0 //MO_ABSORBSPIRITS#Absorb Spirit Sphere# 4190,365,1,9,1,0,0,0,0,0,0,0,0 //HW_MAGICCRASHER#Stave Crasher# -4190,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4190,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4190,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Super Baby (Expanded) 4191,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -5516,7 +5516,7 @@ 4191,261,5,259,2,0,0,0,0,0,0,0,0 //MO_CALLSPIRITS#Summon Spirit Sphere# 4191,262,1,261,5,0,0,0,0,0,0,0,0 //MO_ABSORBSPIRITS#Absorb Spirit Sphere# 4191,365,1,9,1,0,0,0,0,0,0,0,0 //HW_MAGICCRASHER#Stave Crasher# -4191,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4191,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4191,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Kagerou 4211,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# diff --git a/db/re/skill_tree.txt b/db/re/skill_tree.txt index 017e3f0a24..d58bf663f7 100644 --- a/db/re/skill_tree.txt +++ b/db/re/skill_tree.txt @@ -80,7 +80,7 @@ 5,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart# 5,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar# 5,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# -5,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +5,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 5,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Thief 6,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -231,7 +231,7 @@ 10,1013,1,0,0,0,0,0,0,0,0,0,0 //BS_GREED#Greed# 10,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# 10,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush# -10,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +10,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 10,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Hunter 11,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -496,7 +496,7 @@ 18,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1# 18,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2# 18,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3# -18,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +18,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 18,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Bard 19,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -594,8 +594,8 @@ //WeddingClass 22,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# 22,334,1,0,0,0,0,0,0,0,0,0,0 //WE_MALE#I Will Protect You# -22,335,5,0,0,0,0,0,0,0,0,0,0 //WE_FEMALE#I Look up to You# -22,336,5,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARTNER#I miss You# +22,335,1,0,0,0,0,0,0,0,0,0,0 //WE_FEMALE#I Look up to You# +22,336,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARTNER#I miss You# 22,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# //SuperNovice 23,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -650,7 +650,7 @@ 23,52,10,0,0,0,0,0,0,0,0,0,0 //TF_POISON#Envenom# 23,53,1,52,3,0,0,0,0,0,0,0,0 //TF_DETOXIFY#Detoxify# 23,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# -23,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +23,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 23,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Gunslinger 24,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -786,7 +786,7 @@ 4006,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart# 4006,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar# 4006,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# -4006,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4006,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4006,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //ThiefHigh 4007,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -962,7 +962,7 @@ 4011,486,5,113,5,0,0,0,0,0,0,0,0 //WS_OVERTHRUSTMAX#Maximum Power Thrust# 4011,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# 4011,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush# -4011,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4011,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4011,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Sniper 4012,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -1270,7 +1270,7 @@ 4019,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1# 4019,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2# 4019,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3# -4019,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4019,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4019,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Clown 4020,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -1302,7 +1302,7 @@ 4020,313,5,321,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm# 4020,1010,1,0,0,0,0,0,0,0,0,0,0 //BA_PANGVOICE#Pang Voice# 4020,394,10,47,5,316,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow# -4020,395,5,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# +4020,395,1,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# 4020,396,1,45,5,315,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control# 4020,487,5,315,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom# 4020,488,5,45,10,315,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod# @@ -1338,7 +1338,7 @@ 4021,313,5,329,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm# 4021,1011,1,0,0,0,0,0,0,0,0,0,0 //DC_WINKCHARM#Wink of Charm# 4021,394,10,47,5,324,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow# -4021,395,5,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# +4021,395,1,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# 4021,396,1,45,5,323,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control# 4021,487,5,323,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom# 4021,488,5,45,10,323,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod# @@ -1468,7 +1468,7 @@ 4028,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar# 4028,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby# 4028,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent# -4028,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4028,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4028,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Baby Thief 4029,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -1623,7 +1623,7 @@ 4033,1012,1,0,0,0,0,0,0,0,0,0,0 //BS_UNFAIRLYTRICK#Unfair Trick# 4033,1013,1,0,0,0,0,0,0,0,0,0,0 //BS_GREED#Greed# 4033,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush# -4033,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4033,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4033,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Baby Hunter 4034,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -1896,7 +1896,7 @@ 4041,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1# 4041,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2# 4041,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3# -4041,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4041,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4041,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Baby Bard 4042,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -2048,7 +2048,7 @@ 4045,53,1,52,3,0,0,0,0,0,0,0,0 //TF_DETOXIFY#Detoxify# 4045,408,1,0,0,0,0,0,0,0,0,0,0 //WE_BABY#Baby# 4045,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent# -4045,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4045,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4045,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Taekwon 4046,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -2656,7 +2656,7 @@ 4058,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal# 4058,5006,5,0,0,0,0,0,0,0,0,0,0 //NC_MAGMA_ERUPTION#Magma Eruption# 4058,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4058,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4058,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4058,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Guillotine Cross (Regular) 4059,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -3008,7 +3008,7 @@ 4064,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal# 4064,5006,5,0,0,0,0,0,0,0,0,0,0 //NC_MAGMA_ERUPTION#Magma Eruption# 4064,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4064,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4064,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4064,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Guillotine Cross (Trans) 4065,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -3412,7 +3412,7 @@ 4071,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy# 4071,5003,5,2497,1,0,0,0,0,0,0,0,0 //GN_ILLUSIONDOOPING#Hallucination Drug# 4071,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4071,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4071,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4071,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Shadow Chaser (Regular) 4072,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -3639,7 +3639,7 @@ 4075,313,5,321,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm# 4075,1010,1,0,0,0,0,0,0,0,0,0,0 //BA_PANGVOICE#Pang Voice# 4075,394,10,47,5,316,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow# -4075,395,5,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# +4075,395,1,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# 4075,396,1,45,5,315,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control# 4075,487,5,315,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom# 4075,488,5,45,10,315,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod# @@ -3701,7 +3701,7 @@ 4076,313,5,329,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm# 4076,1011,1,0,0,0,0,0,0,0,0,0,0 //DC_WINKCHARM#Wink of Charm# 4076,394,10,47,5,324,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow# -4076,395,5,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# +4076,395,1,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss# 4076,396,1,45,5,323,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control# 4076,487,5,323,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom# 4076,488,5,45,10,323,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod# @@ -3856,7 +3856,7 @@ 4078,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy# 4078,5003,5,2497,1,0,0,0,0,0,0,0,0 //GN_ILLUSIONDOOPING#Hallucination Drug# 4078,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4078,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4078,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4078,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Shadow Chaser (Trans) 4079,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -4299,7 +4299,7 @@ 4086,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal# 4086,5006,5,0,0,0,0,0,0,0,0,0,0 //NC_MAGMA_ERUPTION#Magma Eruption# 4086,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4086,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4086,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4086,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Mechanic (Mado) (Trans) 4087,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -4375,7 +4375,7 @@ 4087,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal# 4087,5006,5,0,0,0,0,0,0,0,0,0,0 //NC_MAGMA_ERUPTION#Magma Eruption# 4087,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4087,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4087,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4087,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Baby Rune Knight 4096,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -4660,7 +4660,7 @@ 4100,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal# 4100,5006,5,0,0,0,0,0,0,0,0,0,0 //NC_MAGMA_ERUPTION#Magma Eruption# 4100,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4100,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4100,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4100,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Baby Guillotine Cross 4101,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -5066,7 +5066,7 @@ 4107,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy# 4107,5003,5,2497,1,0,0,0,0,0,0,0,0 //GN_ILLUSIONDOOPING#Hallucination Drug# 4107,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4107,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4107,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4107,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Baby Shadow Chaser 4108,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -5347,7 +5347,7 @@ 4112,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal# 4112,5006,5,0,0,0,0,0,0,0,0,0,0 //NC_MAGMA_ERUPTION#Magma Eruption# 4112,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# -4112,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4112,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4112,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Super Novice (Expanded) 4190,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -5431,7 +5431,7 @@ 4190,261,5,259,2,0,0,0,0,0,0,0,0 //MO_CALLSPIRITS#Summon Spirit Sphere# 4190,262,1,261,5,0,0,0,0,0,0,0,0 //MO_ABSORBSPIRITS#Absorb Spirit Sphere# 4190,365,1,9,1,0,0,0,0,0,0,0,0 //HW_MAGICCRASHER#Stave Crasher# -4190,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4190,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4190,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Super Baby (Expanded) 4191,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# @@ -5516,7 +5516,7 @@ 4191,261,5,259,2,0,0,0,0,0,0,0,0 //MO_CALLSPIRITS#Summon Spirit Sphere# 4191,262,1,261,5,0,0,0,0,0,0,0,0 //MO_ABSORBSPIRITS#Absorb Spirit Sphere# 4191,365,1,9,1,0,0,0,0,0,0,0,0 //HW_MAGICCRASHER#Stave Crasher# -4191,2535,2,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# +4191,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store# 4191,2544,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTDECORATE#Cart Decorate# //Kagerou 4211,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# From b2a46a33ec2a843142ab7c3f52457050554c98c4 Mon Sep 17 00:00:00 2001 From: aleos89 Date: Wed, 17 Aug 2016 19:48:55 -0400 Subject: [PATCH 4/4] Follow up to 16b100d (part 2) * Cleaned up some of the warning messages during parsing. --- src/map/pc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/map/pc.c b/src/map/pc.c index 8f5ccb4df0..562feb8c64 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -10729,7 +10729,7 @@ static bool pc_readdb_skilltree(char* fields[], int columns, int current) return false; } if (skill_lv > (skill_lv_max = skill_get_max(skill_id))) { - ShowWarning("pc_readdb_skilltree: Skill %hu's level %hu is higher than defined max level %hu. Capping skill level..\n", skill_id, skill_lv, skill_lv_max); + ShowWarning("pc_readdb_skilltree: Skill %hu's level %hu exceeds job %d's max level %hu. Capping skill level..\n", skill_id, skill_lv, class_, skill_lv_max); skill_lv = skill_lv_max; } if (baselv > (baselv_max = pc_class_maxbaselv(class_))) { @@ -10745,12 +10745,12 @@ static bool pc_readdb_skilltree(char* fields[], int columns, int current) ARR_FIND( 0, MAX_SKILL_TREE, skill_idx, skill_tree[idx][skill_idx].skill_id == 0 || skill_tree[idx][skill_idx].skill_id == skill_id ); if( skill_idx == MAX_SKILL_TREE ) { - ShowWarning("pc_readdb_skilltree: Unable to load skill %hu into job %d's tree. Maximum number of skills per class has been reached.\n", skill_id, class_); + ShowWarning("pc_readdb_skilltree: Unable to load skill %hu into job %d's tree. Maximum number of skills per job has been reached.\n", skill_id, class_); return false; } else if(skill_tree[idx][skill_idx].skill_id) { - ShowNotice("pc_readdb_skilltree: Overwriting skill %hu for job class %d.\n", skill_id, class_); + ShowNotice("pc_readdb_skilltree: Overwriting skill %hu for job %d.\n", skill_id, class_); } skill_tree[idx][skill_idx].skill_id = skill_id; @@ -10770,7 +10770,7 @@ static bool pc_readdb_skilltree(char* fields[], int columns, int current) return false; } if (skill_lv > (skill_lv_max = skill_get_max(skill_id))) { - ShowWarning("pc_readdb_skilltree: Skill %hu's level (%hu) is higher than defined max level (%hu). Capping skill level..\n", skill_id, skill_lv, skill_lv_max); + ShowWarning("pc_readdb_skilltree: Skill %hu's level %hu exceeds job %d's max level %hu. Capping skill level..\n", skill_id, skill_lv, class_, skill_lv_max); skill_lv = skill_lv_max; }