jqkeric11 Posted May 29, 2016 Posted May 29, 2016 If i want to modify skill calculate What i should do now ? Quote
0 Promise Posted May 30, 2016 Posted May 30, 2016 battle.c static int64 battle_calc_base_damage(struct status_data *status, struct weapon_atk *wa, struct status_change *sc, unsigned short t_size, struct map_session_data *sd, int flag) { unsigned int atkmin = 0, atkmax = 0; short type = 0; int64 damage = 0; if (!sd) { //Mobs/Pets if(flag&4) { atkmin = status->matk_min; atkmax = status->matk_max; } else { atkmin = wa->atk; atkmax = wa->atk2; } if (atkmin > atkmax) atkmin = atkmax; } else { //PCs atkmax = wa->atk; type = (wa == &status->lhw)?EQI_HAND_L:EQI_HAND_R; if (!(flag&1) || (flag&2)) { //Normal attacks atkmin = status->dex; if (sd->equip_index[type] >= 0 && sd->inventory_data[sd->equip_index[type]]) atkmin = atkmin*(80 + sd->inventory_data[sd->equip_index[type]]->wlv*20)/100; if (atkmin > atkmax) atkmin = atkmax; if(flag&2 && !(flag&16)) { //Bows atkmin = atkmin*atkmax/100; if (atkmin > atkmax) atkmax = atkmin; } } } if (sc && sc->data[SC_MAXIMIZEPOWER]) atkmin = atkmax; //Weapon Damage calculation if (!(flag&1)) damage = (atkmax>atkmin? rnd()%(atkmax-atkmin):0)+atkmin; else damage = atkmax; if (sd) { //rodatazone says the range is 0~arrow_atk-1 for non crit if (flag&2 && sd->bonus.arrow_atk) damage += ( (flag&1) ? sd->bonus.arrow_atk : rnd()%sd->bonus.arrow_atk ); // Size fix only for players if (!(sd->special_state.no_sizefix || (flag&8))) damage = damage * (type == EQI_HAND_L ? sd->left_weapon.atkmods[t_size] : sd->right_weapon.atkmods[t_size]) / 100; } //Finally, add baseatk if(flag&4) damage += status->matk_min; else damage += status->batk; //rodatazone says that Overrefine bonuses are part of baseatk //Here we also apply the weapon_damage_rate bonus so it is correctly applied on left/right hands. if(sd) { if (type == EQI_HAND_L) { if(sd->left_weapon.overrefine) damage += rnd()%sd->left_weapon.overrefine+1; if (sd->weapon_damage_rate[sd->weapontype2]) damage += damage * sd->weapon_damage_rate[sd->weapontype2] / 100; } else { //Right hand if(sd->right_weapon.overrefine) damage += rnd()%sd->right_weapon.overrefine+1; if (sd->weapon_damage_rate[sd->weapontype1]) damage += damage * sd->weapon_damage_rate[sd->weapontype1] / 100; } } #ifdef RENEWAL if (flag&1) damage = (damage * 14) / 10; #endif return damage; } Here you can edit the damage calc as you want, but we need to know wich part you want to edit. Quote
0 Aureon Posted May 29, 2016 Posted May 29, 2016 What do you mean by skill calculate? Are you referring to modify skill damage?If that's what you're looking for, you can find it in src/map/battle.c or you can also this, db/skill_damage_db.txt (be sure you uncomment this line on src/config/core.h coz rAthena disabled it by default, then recompile it to take effect) Quote
Question
jqkeric11
If i want to modify skill calculate
What i should do now ?
3 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.