* Move HP/SP Vanish bonuses to vector * Corrected the BF flags usage * Immaterial Swords, Mental Destroyer, and Dark Priest trigger SPVanish by any attack types Co-Authored-By: cydh <cydh@users.noreply.github.com>
This commit is contained in:
@@ -6811,17 +6811,30 @@ void battle_vanish_damage(struct map_session_data *sd, struct block_list *target
|
||||
nullpo_retv(target);
|
||||
|
||||
// bHPVanishRate
|
||||
int16 vanish_rate_hp = cap_value(sd->bonus.hp_vanish_rate, 0, INT16_MAX);
|
||||
int8 vanish_hp = cap_value(sd->bonus.hp_vanish_per, INT8_MIN, INT8_MAX);
|
||||
int16 vanish_hp = 0;
|
||||
if (!sd->hp_vanish.empty()) {
|
||||
for (auto &it : sd->hp_vanish) {
|
||||
if (!(((it.flag)&flag)&BF_WEAPONMASK &&
|
||||
((it.flag)&flag)&BF_RANGEMASK &&
|
||||
((it.flag)&flag)&BF_SKILLMASK))
|
||||
continue;
|
||||
if (it.rate && (it.rate >= 1000 || rnd() % 1000 < it.rate))
|
||||
vanish_hp += it.per;
|
||||
}
|
||||
}
|
||||
|
||||
// bSPVanishRate
|
||||
int16 vanish_rate_sp = cap_value(sd->bonus.sp_vanish_rate, 0, INT16_MAX);
|
||||
int8 vanish_sp = cap_value(sd->bonus.sp_vanish_per, INT8_MIN, INT8_MAX);
|
||||
|
||||
if (vanish_hp && !(vanish_rate_hp && sd->bonus.hp_vanish_flag & flag && (vanish_rate_hp >= 1000 || rnd() % 1000 < vanish_rate_hp)))
|
||||
vanish_hp = 0;
|
||||
|
||||
if (vanish_sp && !(vanish_rate_sp && sd->bonus.sp_vanish_flag & flag && (vanish_rate_sp >= 1000 || rnd() % 1000 < vanish_rate_sp)))
|
||||
vanish_sp = 0;
|
||||
int16 vanish_sp = 0;
|
||||
if (!sd->sp_vanish.empty()) {
|
||||
for (auto &it : sd->sp_vanish) {
|
||||
if (!(((it.flag)&flag)&BF_WEAPONMASK &&
|
||||
((it.flag)&flag)&BF_RANGEMASK &&
|
||||
((it.flag)&flag)&BF_SKILLMASK))
|
||||
continue;
|
||||
if (it.rate && (it.rate >= 1000 || rnd() % 1000 < it.rate))
|
||||
vanish_sp += it.per;
|
||||
}
|
||||
}
|
||||
|
||||
if (vanish_hp > 0 || vanish_sp > 0)
|
||||
status_percent_damage(&sd->bl, target, -vanish_hp, -vanish_sp, false); // Damage HP/SP applied once
|
||||
|
||||
Reference in New Issue
Block a user