Hi, since i want to use a offline Server to Test some Build and Equip-Combination for the offical Server (Renewal) i play on, i would like to change the ASPD Formula to the iRO ASPD Formula but could only find unsolved Requests of the same kind.
I know i need to make the changes in status.c and got an idea for some of it already but not so sure about other stuff and would like to ask for help.
The iRO Formula is the following:
I startet to change some Stuff but in the Process of it i figuered i need to unterstand more of the original rAthena Formula to make this changes
#ifdef RENEWAL_ASPD
int16 skill_lv, val = 0;
float temp_aspd = 0;
amotion = job_info[classidx].aspd_base[sd->weapontype1]; // Single weapon I'm no 100% sure but i think i can leave this part alone since the Job ASPD seem to be the same in iRO and kRO
if (sd->status.shield)
amotion += job_info[classidx].aspd_base[MAX_WEAPON_TYPE];
else if (sd->weapontype2 && sd->equip_index[EQI_HAND_R] != sd->equip_index[EQI_HAND_L])
amotion += job_info[classidx].aspd_base[sd->weapontype2] / 4; // Dual-wield
switch(sd->status.weapon) {
case W_BOW:
case W_MUSICAL:
case W_WHIP:
case W_REVOLVER:
case W_RIFLE:
case W_GATLING:
case W_SHOTGUN:
case W_GRENADE:
temp_aspd = status->dex * status->dex / 7.0f + status->agi * status->agi * 0.5f; This part i want to change to: temp_aspd = status->dex / 0.19212f + status->agi * 9.999f;
break;
default:
temp_aspd = status->dex * status->dex / 5.0f + status->agi * status->agi * 0.5f; This part i want to change to: temp_aspd = status->dex / 0.19212f + status->agi * 9.999f;
break;
}
temp_aspd = (float)(sqrt(temp_aspd) * 0.25f) + 0xc4; Here i belive i need to change the part: * 0.25f to multiplicate with the ASPD Penalty but I'm not sure how to get the Base ASPD to calculate that and what does the + 0xc4 mean?
if ((skill_lv = pc_checkskill(sd,SA_ADVANCEDBOOK)) > 0 && sd->status.weapon == W_BOOK)
val += (skill_lv - 1) / 2 + 1;
if ((skill_lv = pc_checkskill(sd,GS_SINGLEACTION)) > 0 && (sd->status.weapon >= W_REVOLVER && sd->status.weapon <= W_GRENADE))
val += ((skill_lv + 1) / 2);
amotion = ((int)(temp_aspd + ((float)(status_calc_aspd(&sd->bl, &sd->sc, true) + val) * status->agi / 200)) - min(amotion, 200)); At this point i dont know how to proceed further. I need to calculate the ASPD Correction, Equip ASPD% and Base ASPD but not exactly sure how to do it and put em together at the end.
Maybe someone did it already or could help me.
Best regards