Official song and dance formulas (fixes #1808)
* Fixed musical lessons not having any effect on Song of Lutie's MaxHP bonus (lesson/2) * Song of Lutie now heals 1 HP more every 2 vit instead of 5 HP more every 10 vit * Perfect Tablature's flee bonus in renewal is now 3*skill_lv + agi/15 + lesson/2 * Perfect Tablature's perfect dodge bonus is now (skill_lv+1)/2 + luk/30 + lesson/5 * Focus Ballet's hit bonus in renewal is now 20 + 2*skill_lv + dex/15 + lesson * Focus Ballet's hit bonus in pre-re is now 1 + 2*skill_lv + dex/10 + lesson * Slow Grace's ASPD decrease in renewal is now 3*skill_lv + dex/15 + lesson * Slow Grace's ASPD decrease in pre-re is now 5 + 3*skill_lv + dex/10 + lesson * Slow Grace's speed decrease in renewal is now 2*skill_lv + agi/20 + lesson/2 * Slow Grace's speed decrease in pre-re is now 5 + 3*skill_lv + agi/10 + lesson * Impressive Riff's ASPD increase in pre-re is now 5 + skill_lv + agi/20 + lesson/2 * Lady Luck's critical bonus is now 10 + skill_lv + luk/10 + 0.5*lesson (not rounded down)
This commit is contained in:
parent
08812e0523
commit
182557311b
@ -443,12 +443,12 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
|
||||
switch( skill_id ) {
|
||||
case BA_APPLEIDUN:
|
||||
#ifdef RENEWAL
|
||||
hp = 100 + 5 * skill_lv + 5 * (status_get_vit(src) / 10); // HP recovery
|
||||
hp = 100 + 5 * skill_lv + (status_get_vit(src) / 2); // HP recovery
|
||||
#else
|
||||
hp = 30 + 5 * skill_lv + 5 * (status_get_vit(src) / 10); // HP recovery
|
||||
hp = 30 + 5 * skill_lv + (status_get_vit(src) / 2); // HP recovery
|
||||
#endif
|
||||
if( sd )
|
||||
hp += 5 * pc_checkskill(sd,BA_MUSICALLESSON);
|
||||
if (sd)
|
||||
hp += 5 * pc_checkskill(sd, BA_MUSICALLESSON);
|
||||
break;
|
||||
case PR_SANCTUARY:
|
||||
hp = (skill_lv > 6) ? 777 : skill_lv * 100;
|
||||
@ -12628,61 +12628,76 @@ struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 skill_
|
||||
}
|
||||
|
||||
case BA_WHISTLE:
|
||||
val1 = skill_lv +status->agi/10; // Flee increase
|
||||
val2 = ((skill_lv+1)/2)+status->luk/10; // Perfect dodge increase
|
||||
if(sd){
|
||||
val1 += pc_checkskill(sd,BA_MUSICALLESSON);
|
||||
val2 += pc_checkskill(sd,BA_MUSICALLESSON);
|
||||
#ifdef RENEWAL
|
||||
val1 = 3 * skill_lv + status->agi / 15; // Flee increase
|
||||
#else
|
||||
val1 = skill_lv + status->agi / 10; // Flee increase
|
||||
#endif
|
||||
val2 = (skill_lv + 1) / 2 + status->luk / 30; // Perfect dodge increase
|
||||
if (sd) {
|
||||
val1 += pc_checkskill(sd, BA_MUSICALLESSON) / 2;
|
||||
val2 += pc_checkskill(sd, BA_MUSICALLESSON) / 5;
|
||||
}
|
||||
break;
|
||||
case DC_HUMMING:
|
||||
val1 = 2*skill_lv+status->dex/10; // Hit increase
|
||||
#ifdef RENEWAL
|
||||
val1 *= 2;
|
||||
val1 = 20 + 2 * skill_lv + status->dex / 15; // Hit increase
|
||||
#else
|
||||
val1 = 1 + 2 * skill_lv + status->dex / 10; // Hit increase
|
||||
#endif
|
||||
if(sd)
|
||||
val1 += pc_checkskill(sd,DC_DANCINGLESSON);
|
||||
if (sd)
|
||||
val1 += pc_checkskill(sd, DC_DANCINGLESSON);
|
||||
break;
|
||||
case BA_POEMBRAGI:
|
||||
val1 = 3*skill_lv+status->dex/10; // Casting time reduction
|
||||
val1 = 3 * skill_lv + status->dex / 10; // Casting time reduction
|
||||
//For some reason at level 10 the base delay reduction is 50%.
|
||||
val2 = (skill_lv<10?3*skill_lv:50)+status->int_/5; // After-cast delay reduction
|
||||
if(sd){
|
||||
val1 += pc_checkskill(sd,BA_MUSICALLESSON);
|
||||
val2 += 2*pc_checkskill(sd,BA_MUSICALLESSON);
|
||||
val2 = (skill_lv < 10 ? 3 * skill_lv : 50) + status->int_ / 5; // After-cast delay reduction
|
||||
if (sd) {
|
||||
val1 += pc_checkskill(sd, BA_MUSICALLESSON);
|
||||
val2 += 2 * pc_checkskill(sd, BA_MUSICALLESSON);
|
||||
}
|
||||
break;
|
||||
case DC_DONTFORGETME:
|
||||
val1 = 30 * skill_lv + status->dex; // ASPD decrease
|
||||
val2 = 2 * skill_lv + status->agi / 10; // Movement speed adjustment.
|
||||
if(sd){
|
||||
val1 += 10 * pc_checkskill(sd,DC_DANCINGLESSON);
|
||||
val2 += (pc_checkskill(sd,DC_DANCINGLESSON) + 1) / 2; // Movement speed -1% per 2 levels
|
||||
#ifdef RENEWAL
|
||||
val1 = 3 * skill_lv + status->dex / 15; // ASPD decrease
|
||||
val2 = 2 * skill_lv + status->agi / 20; // Movement speed adjustment.
|
||||
#else
|
||||
val1 = 5 + 3 * skill_lv + status->dex / 10; // ASPD decrease
|
||||
val2 = 5 + 3 * skill_lv + status->agi / 10; // Movement speed adjustment.
|
||||
#endif
|
||||
if (sd) {
|
||||
val1 += pc_checkskill(sd, DC_DANCINGLESSON);
|
||||
#ifdef RENEWAL
|
||||
val2 += pc_checkskill(sd, DC_DANCINGLESSON) / 2;
|
||||
#else
|
||||
val2 += pc_checkskill(sd, DC_DANCINGLESSON);
|
||||
#endif
|
||||
}
|
||||
val1 *= 10; //Because 10 is actually 1% aspd
|
||||
break;
|
||||
case DC_SERVICEFORYOU:
|
||||
val1 = 15+skill_lv+(status->int_/10); // MaxSP percent increase
|
||||
val2 = 20+3*skill_lv+(status->int_/10); // SP cost reduction
|
||||
if(sd){
|
||||
val1 += pc_checkskill(sd,DC_DANCINGLESSON)/2;
|
||||
val2 += pc_checkskill(sd,DC_DANCINGLESSON)/2;
|
||||
val1 = 15 + skill_lv + (status->int_ / 10); // MaxSP percent increase
|
||||
val2 = 20 + 3 * skill_lv + (status->int_ / 10); // SP cost reduction
|
||||
if (sd) {
|
||||
val1 += pc_checkskill(sd, DC_DANCINGLESSON) / 2;
|
||||
val2 += pc_checkskill(sd, DC_DANCINGLESSON) / 2;
|
||||
}
|
||||
break;
|
||||
case BA_ASSASSINCROSS:
|
||||
if (sd)
|
||||
val1 = pc_checkskill(sd,BA_MUSICALLESSON) / 2;
|
||||
val1 = pc_checkskill(sd, BA_MUSICALLESSON) / 2;
|
||||
#ifdef RENEWAL // ASPD increase
|
||||
val1 += skill_lv + (status->agi / 20);
|
||||
#else
|
||||
val1 += 10 + skill_lv + (status->agi / 10);
|
||||
val1 += 5 + skill_lv + (status->agi / 20);
|
||||
val1 *= 10; // ASPD works with 1000 as 100%
|
||||
#endif
|
||||
break;
|
||||
case DC_FORTUNEKISS:
|
||||
val1 = 10+skill_lv+(status->luk/10); // Critical increase
|
||||
if(sd)
|
||||
val1 += pc_checkskill(sd,DC_DANCINGLESSON);
|
||||
val1*=10; //Because every 10 crit is an actual cri point.
|
||||
val1 = 10 + skill_lv + (status->luk / 10); // Critical increase
|
||||
val1 *= 10; //Because every 10 crit is an actual cri point.
|
||||
if (sd)
|
||||
val1 += 5 * pc_checkskill(sd, DC_DANCINGLESSON);
|
||||
break;
|
||||
case BD_DRUMBATTLEFIELD:
|
||||
#ifdef RENEWAL
|
||||
|
@ -10637,10 +10637,13 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
val1 = MOBID_PORING; // Default poring
|
||||
break;
|
||||
case SC_APPLEIDUN:
|
||||
{
|
||||
struct map_session_data * s_sd = BL_CAST(BL_PC, src);
|
||||
val2 = (5 + 2 * val1) + (status_get_vit(src) / 10); //HP Rate: (5 + 2 * skill_lv) + (vit/10) + (BA_MUSICALLESSON level)
|
||||
if (sd)
|
||||
val2 += pc_checkskill(sd,BA_MUSICALLESSON);
|
||||
if (s_sd)
|
||||
val2 += pc_checkskill(s_sd, BA_MUSICALLESSON) / 2;
|
||||
break;
|
||||
}
|
||||
case SC_EPICLESIS:
|
||||
val2 = 5 * val1; //HP rate bonus
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user