[Spells] SPA 79 SE_CurrentHPOnce now will check for focus, critical and partial resist checks, except for buffs. (#2018)

* [Spells] SPA 79 SE_CurrentHPOnce check for focus and related effects.

SPA 79 SE_CurrentHPOnce should have the damage checks as SPA 0 for heal/damage

* Update spell_effects.cpp

* [Spells] SPA 79 SE_CurrentHPOnce now will check for focus, critical and partial resist checks.
This commit is contained in:
KayenEQ 2022-02-24 13:47:54 -05:00 committed by GitHub
parent bfd1cf9379
commit 14648b96c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -289,36 +289,72 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
#ifdef SPELL_EFFECT_SPAM
snprintf(effect_desc, _EDLEN, "Current Hitpoints Once: %+i", effect_value);
#endif
if (spells[spell_id].limit_value[i] && !PassCastRestriction(spells[spell_id].limit_value[i])) {
break; //no messages are given on live if this fails.
}
// hack fix for client health not reflecting server value
last_hp = 0;
int32 dmg = effect_value;
//hardcoded for manaburn and life burn
if (spell_id == SPELL_MANA_BURN || spell_id == SPELL_LIFE_BURN)
{
if (spell_id == SPELL_MANA_BURN && caster) //Manaburn
{
dmg = caster->GetMana()*-3;
caster->SetMana(0);
} else if (spell_id == SPELL_LIFE_BURN && caster) //Lifeburn
}
else if (spell_id == SPELL_LIFE_BURN && caster) //Lifeburn
{
dmg = caster->GetHP(); // just your current HP
caster->SetHP(dmg / 4); // 2003 patch notes say ~ 1/4 HP. Should this be 1/4 your current HP or do 3/4 max HP dmg? Can it kill you?
dmg = -dmg;
}
// hack fix for client health not reflecting server value
last_hp = 0;
if (spells[spell_id].limit_value[i] && !PassCastRestriction(spells[spell_id].limit_value[i])) {
break;
}
//do any AAs apply to these spells?
if (dmg < 0) {
dmg = -dmg;
Damage(caster, dmg, spell_id, spell.skill, false, buffslot, false);
} else {
}
else {
HealDamage(dmg, caster);
}
break;
}
//normal effects
else {
if (dmg < 0){
dmg = (int32)(dmg * partial / 100);
if (caster) {
if (reflect_effectiveness) {
dmg = caster->GetActReflectedSpellDamage(spell_id, (int32)(spells[spell_id].base_value[i] * partial / 100), reflect_effectiveness);
}
else {
dmg = caster->GetActSpellDamage(spell_id, dmg, this);
}
caster->ResourceTap(-dmg, spell_id);
}
if (dmg <= 0) {
dmg = -dmg;
Damage(caster, dmg, spell_id, spell.skill, false, buffslot, false);
}
else {
HealDamage(dmg, caster);
}
}
else if (dmg > 0) {
//do not apply focus/critical to buff spells
if (caster && !IsEffectInSpell(spell_id, SE_TotalHP)) {
dmg = caster->GetActSpellHealing(spell_id, dmg, this);
}
HealDamage(dmg, caster);
}
}
break;
}
case SE_PercentalHeal:
{