Fixes Golden X potion reflect effect (#5719)

* Fixes #5651
* Resolves an issue with Golden X potion causing 1 reflect damage even if the target doesn't have any reflect abilities active.
Thanks to @eppc0330!
This commit is contained in:
Aleos 2021-01-26 10:08:14 -05:00 committed by GitHub
parent 9f87653e3a
commit 1e3d777853
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -7307,14 +7307,12 @@ int64 battle_calc_return_damage(struct block_list* bl, struct block_list *src, i
if (ssc) {
if (ssc->data[SC_HELLS_PLANT])
return 0;
if (ssc->data[SC_REF_T_POTION])
return 1; // Returns 1 damage
}
if (flag & BF_SHORT) {//Bounces back part of the damage.
if ( (skill_get_inf2(skill_id, INF2_ISTRAP) || !status_reflect) && sd && sd->bonus.short_weapon_damage_return ) {
rdamage += damage * sd->bonus.short_weapon_damage_return / 100;
rdamage = i64max(rdamage,1);
rdamage = i64max(rdamage, 1);
} else if( status_reflect && sc && sc->count ) {
if( sc->data[SC_REFLECTSHIELD] ) {
struct status_change_entry *sce_d;
@ -7343,8 +7341,7 @@ int64 battle_calc_return_damage(struct block_list* bl, struct block_list *src, i
rdamage = 0;
else {
rdamage += damage * sc->data[SC_REFLECTSHIELD]->val2 / 100;
if (rdamage < 1)
rdamage = 1;
rdamage = i64max(rdamage, 1);
}
}
@ -7363,14 +7360,14 @@ int64 battle_calc_return_damage(struct block_list* bl, struct block_list *src, i
if( sc->data[SC_SHIELDSPELL_DEF] && sc->data[SC_SHIELDSPELL_DEF]->val1 == 2 && !status_bl_has_mode(src,MD_STATUS_IMMUNE) ){
rdamage += damage * sc->data[SC_SHIELDSPELL_DEF]->val2 / 100;
if (rdamage < 1) rdamage = 1;
rdamage = i64max(rdamage, 1);
}
}
}
} else {
if (!status_reflect && sd && sd->bonus.long_weapon_damage_return) {
rdamage += damage * sd->bonus.long_weapon_damage_return / 100;
if (rdamage < 1) rdamage = 1;
rdamage = i64max(rdamage, 1);
}
}
@ -7393,6 +7390,9 @@ int64 battle_calc_return_damage(struct block_list* bl, struct block_list *src, i
}
if (ssc->data[SC_VENOMBLEED] && ssc->data[SC_VENOMBLEED]->val3 == 0)
rdamage -= damage * ssc->data[SC_VENOMBLEED]->val2 / 100;
if (rdamage > 0 && ssc->data[SC_REF_T_POTION])
return 1; // Returns 1 damage
}
if (sc) {