I've finally solved it.
battle.cpp:
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);
} else if( status_reflect && sc && sc->count ) {
to
if (flag & BF_SHORT) {//Bounces back part of the damage.
if ( (skill_get_inf2(skill_id)&INF2_TRAP || !status_reflect) && sd && sd->bonus.short_weapon_damage_return) {
rdamage = i64max(rdamage,-1);
}
else if ( (status_reflect) && sd && sd->bonus.short_weapon_damage_return) {
rdamage += damage * sd->bonus.short_weapon_damage_return / 100;
rdamage = i64max(rdamage,1);
}
if( status_reflect && sc && sc->count ) {
Thanks a lot to @Wazaby for assisting me with this.
EDIT: You may just add this line on else if, if you want trap to reflect
skill_get_inf2(skill_id)&INF2_TRAP
EDIT 2:
Just to update to my fix, for those people using bLongWeaponDamageReturn:
in battle.cpp
Find:
if (!status_reflect && sd && sd->bonus.long_weapon_damage_return) {
rdamage += damage * sd->bonus.long_weapon_damage_return / 100;
rdamage = i64max(rdamage, 1);
}
}
to:
if (!status_reflect && sd && sd->bonus.long_weapon_damage_return) {
rdamage = i64max(rdamage,-1);
}
else if (status_reflect && sd && sd->bonus.long_weapon_damage_return) {
rdamage += damage * sd->bonus.long_weapon_damage_return / 100;
rdamage = i64max(rdamage, 1);
}