int hom_calc_skilltree(struct homun_data *hd, int flag_evolve) { int i, id = 0; int j, f = 1; int c = 0; nullpo_ret(hd); /* load previous homunculus form skills first. */ if( hd->homunculus.prev_class != 0 ) { c = hd->homunculus.prev_class - HM_CLASS_BASE; for( i = 0; i < MAX_SKILL_TREE && ( id = hskill_tree[c][i].id ) > 0; i++ ) { if( hd->homunculus.hskill[ id - HM_SKILLBASE ].id ) continue; //Skill already known. if(!battle_config.skillfree) { for( j = 0; j < MAX_PC_SKILL_REQUIRE; j++ ) { if( hskill_tree[c][i].need[j].id && hom_checkskill(hd,hskill_tree[c][i].need[j].id) < hskill_tree[c][i].need[j].lv ) { f = 0; break; } } } if ( f ) hd->homunculus.hskill[id-HM_SKILLBASE].id = id; } f = 1; } c = hd->homunculus.class_ - HM_CLASS_BASE; for( i = 0; i < MAX_SKILL_TREE && ( id = hskill_tree[c][i].id ) > 0; i++ ) { if( hd->homunculus.hskill[ id - HM_SKILLBASE ].id ) continue; //Skill already known. j = ( flag_evolve ) ? 10 : hd->homunculus.intimacy; if( j < hskill_tree[c][i].intimacylv ) continue; if(!battle_config.skillfree) { for( j = 0; j < MAX_PC_SKILL_REQUIRE; j++ ) { if( hskill_tree[c][i].need[j].id && hom_checkskill(hd,hskill_tree[c][i].need[j].id) < hskill_tree[c][i].need[j].lv ) { f = 0; break; } } } if ( f ) hd->homunculus.hskill[id-HM_SKILLBASE].id = id; } if( hd->master ) clif_homskillinfoblock(hd->master); return 0; }
/** * Calculates homunculus skill tree * @param hd * @param flag_envolve */ void hom_calc_skilltree(struct homun_data *hd, int flag_evolve) { int i, skill_id = 0; int f = 1; short c = 0; nullpo_retv(hd); /* load previous homunculus form skills first. */ if (hd->homunculus.prev_class != 0 && (c = hom_class2index(hd->homunculus.prev_class)) >= 0) { for (i = 0; i < MAX_SKILL_TREE && (skill_id = hskill_tree[c][i].id) > 0; i++) { int idx = hom_skill_get_index(skill_id); if (idx < 0) continue; if (hd->homunculus.hskill[idx].id) continue; //Skill already known. if (!battle_config.skillfree) { int j; for (j = 0; j < MAX_HOM_SKILL_REQUIRE; j++) { if (hskill_tree[c][i].need[j].id && hom_checkskill(hd,hskill_tree[c][i].need[j].id) < hskill_tree[c][i].need[j].lv) { f = 0; break; } } } if (f) hd->homunculus.hskill[idx].id = skill_id; } f = 1; } if ((c = hom_class2index(hd->homunculus.class_)) < 0) return; for (i = 0; i < MAX_SKILL_TREE && (skill_id = hskill_tree[c][i].id) > 0; i++) { int intimacy; int idx = hom_skill_get_index(skill_id); if (idx < 0) continue; if (hd->homunculus.hskill[idx].id) continue; //Skill already known. intimacy = (flag_evolve) ? 10 : hd->homunculus.intimacy; if (intimacy < hskill_tree[c][i].intimacylv) continue; if (!battle_config.skillfree) { int j; for (j = 0; j < MAX_HOM_SKILL_REQUIRE; j++) { if (hskill_tree[c][i].need[j].id && hom_checkskill(hd,hskill_tree[c][i].need[j].id) < hskill_tree[c][i].need[j].lv) { f = 0; break; } } } if (f) hd->homunculus.hskill[idx].id = skill_id; } if (hd->master) clif_homskillinfoblock(hd->master); }
/** * Calculates homunculus skill tree * @param hd * @param flag_envolve */ void hom_calc_skilltree(struct homun_data *hd, bool flag_evolve) { uint8 i; short c = 0; nullpo_retv(hd); /* load previous homunculus form skills first. */ if (hd->homunculus.prev_class != 0 && (c = hom_class2index(hd->homunculus.prev_class)) >= 0) { for (i = 0; i < MAX_HOM_SKILL_TREE; i++) { uint16 skill_id; short idx = -1; bool fail = false; if (!(skill_id = hskill_tree[c][i].id) || (idx = hom_skill_get_index(skill_id)) == -1) continue; if (hd->homunculus.hskill[idx].id) continue; //Skill already known. if (!battle_config.skillfree) { uint8 j; if (hskill_tree[c][i].need_level > hd->homunculus.level) continue; for (j = 0; j < MAX_HOM_SKILL_REQUIRE; j++) { if (hskill_tree[c][i].need[j].id && hom_checkskill(hd,hskill_tree[c][i].need[j].id) < hskill_tree[c][i].need[j].lv) { fail = true; break; } } } if (!fail) hd->homunculus.hskill[idx].id = skill_id; } } if ((c = hom_class2index(hd->homunculus.class_)) < 0) return; for (i = 0; i < MAX_HOM_SKILL_TREE; i++) { unsigned int intimacy = 0; uint16 skill_id; short idx = -1; bool fail = false; if (!(skill_id = hskill_tree[c][i].id) || (idx = hom_skill_get_index(skill_id)) == -1) continue; if (hd->homunculus.hskill[idx].id) continue; //Skill already known. intimacy = (flag_evolve) ? 10 : hd->homunculus.intimacy; if (intimacy < hskill_tree[c][i].intimacy * 100) continue; if (!battle_config.skillfree) { uint8 j; if (hskill_tree[c][i].need_level > hd->homunculus.level) continue; for (j = 0; j < MAX_HOM_SKILL_REQUIRE; j++) { if (hskill_tree[c][i].need[j].id && hom_checkskill(hd,hskill_tree[c][i].need[j].id) < hskill_tree[c][i].need[j].lv) { fail = true; break; } } } if (!fail) hd->homunculus.hskill[idx].id = skill_id; } if (hd->master) clif_homskillinfoblock(hd->master); }