mirror of
https://github.com/araxiaonline/TrinityCore2.git
synced 2026-06-13 03:22:40 -04:00
Core/Spells: More cleanup of deprecated spells code
This commit is contained in:
@@ -10469,12 +10469,6 @@ uint32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, ui
|
||||
if (victim->HealthBelowPct(50))
|
||||
AddPctN(DoneTotalMod, (*i)->GetAmount());
|
||||
break;
|
||||
case 7798: // Glyph of Regrowth
|
||||
{
|
||||
if (victim->GetAuraEffect(SPELL_AURA_PERIODIC_HEAL, SPELLFAMILY_DRUID, 0x40, 0, 0))
|
||||
AddPctN(DoneTotalMod, (*i)->GetAmount());
|
||||
break;
|
||||
}
|
||||
case 8477: // Nourish Heal Boost
|
||||
{
|
||||
int32 stepPercent = (*i)->GetAmount();
|
||||
@@ -10494,12 +10488,6 @@ uint32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, ui
|
||||
AddPctN(DoneTotalMod, modPercent);
|
||||
break;
|
||||
}
|
||||
case 7871: // Glyph of Lesser Healing Wave
|
||||
{
|
||||
if (victim->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_SHAMAN, 0, 0x00000400, 0, GetGUID()))
|
||||
AddPctN(DoneTotalMod, (*i)->GetAmount());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -10551,23 +10539,9 @@ uint32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, ui
|
||||
coeff /= 100.0f;
|
||||
}
|
||||
|
||||
// Earthliving - 0.45% of normal hot coeff
|
||||
if (spellProto->SpellFamilyName == SPELLFAMILY_SHAMAN && spellProto->SpellFamilyFlags[1] & 0x80000)
|
||||
factorMod *= 0.45f;
|
||||
|
||||
DoneTotal += int32(DoneAdvertisedBenefit * coeff * factorMod);
|
||||
}
|
||||
|
||||
// Gift of the Naaru
|
||||
if (spellProto->SpellFamilyFlags[2] & 0x80000000 && spellProto->SpellIconID == 329)
|
||||
{
|
||||
int32 apBonus = int32(std::max(GetTotalAttackPowerValue(BASE_ATTACK), GetTotalAttackPowerValue(RANGED_ATTACK)));
|
||||
if (apBonus > DoneAdvertisedBenefit)
|
||||
DoneTotal += int32(apBonus * 0.22f); // 22% of AP per tick
|
||||
else
|
||||
DoneTotal += int32(DoneAdvertisedBenefit * 0.377f); // 37.7% of BH per tick
|
||||
}
|
||||
|
||||
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
{
|
||||
switch (spellProto->Effects[i].ApplyAuraName)
|
||||
@@ -10665,10 +10639,6 @@ uint32 Unit::SpellHealingBonusTaken(Unit* caster, SpellInfo const* spellProto, u
|
||||
coeff /= 100.0f;
|
||||
}
|
||||
|
||||
// Earthliving - 0.45% of normal hot coeff
|
||||
if (spellProto->SpellFamilyName == SPELLFAMILY_SHAMAN && spellProto->SpellFamilyFlags[1] & 0x80000)
|
||||
factorMod *= 0.45f;
|
||||
|
||||
TakenTotal += int32(TakenAdvertisedBenefit * coeff * factorMod);
|
||||
}
|
||||
|
||||
|
||||
@@ -1154,20 +1154,8 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
case SPELLFAMILY_MAGE:
|
||||
if (!caster)
|
||||
break;
|
||||
if (GetSpellInfo()->SpellFamilyFlags[0] & 0x00000001 && GetSpellInfo()->SpellFamilyFlags[2] & 0x00000008)
|
||||
{
|
||||
// Glyph of Fireball
|
||||
if (caster->HasAura(56368))
|
||||
SetDuration(0);
|
||||
}
|
||||
else if (GetSpellInfo()->SpellFamilyFlags[0] & 0x00000020 && GetSpellInfo()->SpellVisual[0] == 13)
|
||||
{
|
||||
// Glyph of Frostbolt
|
||||
if (caster->HasAura(56370))
|
||||
SetDuration(0);
|
||||
}
|
||||
// Todo: This should be moved to similar function in spell::hit
|
||||
else if (GetSpellInfo()->SpellFamilyFlags[0] & 0x01000000)
|
||||
if (GetSpellInfo()->SpellFamilyFlags[0] & 0x01000000)
|
||||
{
|
||||
// Polymorph Sound - Sheep && Penguin
|
||||
if (GetSpellInfo()->SpellIconID == 82 && GetSpellInfo()->SpellVisual[0] == 12978)
|
||||
@@ -1199,18 +1187,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
caster->CastSpell(caster, spellId, true);
|
||||
}
|
||||
break;
|
||||
case 44544: // Fingers of Frost
|
||||
{
|
||||
// See if we already have the indicator aura. If not, create one.
|
||||
if (Aura* aur = target->GetAura(74396))
|
||||
{
|
||||
// Aura already there. Refresh duration and set original charges
|
||||
aur->SetCharges(2);
|
||||
aur->RefreshDuration();
|
||||
}
|
||||
else
|
||||
target->AddAura(74396, target);
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -1222,7 +1198,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
if (GetSpellInfo()->SpellFamilyFlags[0] & 0x02000000 && GetEffect(0))
|
||||
{
|
||||
// Improved Devouring Plague
|
||||
if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, 3790, 1))
|
||||
if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, 3790, 0))
|
||||
{
|
||||
uint32 damage = caster->SpellDamageBonusDone(target, GetSpellInfo(), GetEffect(0)->GetAmount(), DOT);
|
||||
damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, DOT);
|
||||
@@ -1252,49 +1228,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
if (target->HasAura(58039)) // Glyph of Blurred Speed
|
||||
target->CastSpell(target, 61922, true); // Sprint (waterwalk)
|
||||
break;
|
||||
case SPELLFAMILY_DEATHKNIGHT:
|
||||
if (!caster)
|
||||
break;
|
||||
// Frost Fever and Blood Plague
|
||||
if (GetSpellInfo()->SpellFamilyFlags[2] & 0x2)
|
||||
{
|
||||
// Can't proc on self
|
||||
if (GetCasterGUID() == target->GetGUID())
|
||||
break;
|
||||
|
||||
AuraEffect* aurEff = NULL;
|
||||
// Ebon Plaguebringer / Crypt Fever
|
||||
Unit::AuraEffectList const& TalentAuras = caster->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
|
||||
for (Unit::AuraEffectList::const_iterator itr = TalentAuras.begin(); itr != TalentAuras.end(); ++itr)
|
||||
{
|
||||
if ((*itr)->GetMiscValue() == 7282)
|
||||
{
|
||||
aurEff = *itr;
|
||||
// Ebon Plaguebringer - end search if found
|
||||
if ((*itr)->GetSpellInfo()->SpellIconID == 1766)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (aurEff)
|
||||
{
|
||||
uint32 spellId = 0;
|
||||
switch (aurEff->GetId())
|
||||
{
|
||||
// Ebon Plague
|
||||
case 51161: spellId = 51735; break;
|
||||
case 51160: spellId = 51734; break;
|
||||
case 51099: spellId = 51726; break;
|
||||
// Crypt Fever
|
||||
case 49632: spellId = 50510; break;
|
||||
case 49631: spellId = 50509; break;
|
||||
case 49032: spellId = 50508; break;
|
||||
default:
|
||||
sLog->outError(LOG_FILTER_SPELLS_AURAS, "Aura::HandleAuraSpecificMods: Unknown rank of Crypt Fever/Ebon Plague (%d) found", aurEff->GetId());
|
||||
}
|
||||
caster->CastSpell(target, spellId, true, 0, GetEffect(0));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
// mods at aura remove
|
||||
@@ -1333,18 +1266,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
target->CastSpell(target, 32612, true, NULL, GetEffect(1));
|
||||
target->CombatStop();
|
||||
break;
|
||||
case 74396: // Fingers of Frost
|
||||
// Remove the IGNORE_AURASTATE aura
|
||||
target->RemoveAurasDueToSpell(44544);
|
||||
break;
|
||||
case 44401: //Missile Barrage
|
||||
case 48108: //Hot Streak
|
||||
case 57761: //Fireball!
|
||||
if (removeMode != AURA_REMOVE_BY_EXPIRE || aurApp->GetBase()->IsExpired())
|
||||
break;
|
||||
if (target->HasAura(70752)) //Item - Mage T10 2P Bonus
|
||||
target->CastSpell(target, 70753, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -1354,34 +1275,11 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
if (removeMode == AURA_REMOVE_BY_ENEMY_SPELL && GetSpellInfo()->SpellFamilyFlags[1] & 0x1)
|
||||
{
|
||||
// Shattered Barrier
|
||||
if (AuraEffect * dummy = caster->GetDummyAuraEffect(SPELLFAMILY_MAGE, 2945, 0))
|
||||
if (AuraEffect * dummy = caster->GetDummyAuraEffect(SPELLFAMILY_MAGE, 3260, 0))
|
||||
if (roll_chance_i(dummy->GetSpellInfo()->ProcChance))
|
||||
caster->CastSpell(target, 55080, true, NULL, GetEffect(0));
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_WARRIOR:
|
||||
if (!caster)
|
||||
break;
|
||||
// Spell Reflection
|
||||
if (GetSpellInfo()->SpellFamilyFlags[1] & 0x2)
|
||||
{
|
||||
if (removeMode != AURA_REMOVE_BY_DEFAULT)
|
||||
{
|
||||
// Improved Spell Reflection
|
||||
if (caster->GetDummyAuraEffect(SPELLFAMILY_WARRIOR, 1935, 1))
|
||||
{
|
||||
// aura remove - remove auras from all party members
|
||||
std::list<Unit*> PartyMembers;
|
||||
target->GetPartyMembers(PartyMembers);
|
||||
for (std::list<Unit*>::iterator itr = PartyMembers.begin(); itr != PartyMembers.end(); ++itr)
|
||||
{
|
||||
if ((*itr)!= target)
|
||||
(*itr)->RemoveAurasWithFamily(SPELLFAMILY_WARRIOR, 0, 0x2, 0, GetCasterGUID());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_WARLOCK:
|
||||
if (!caster)
|
||||
break;
|
||||
@@ -1406,18 +1304,8 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
case SPELLFAMILY_PRIEST:
|
||||
if (!caster)
|
||||
break;
|
||||
// Shadow word: Pain // Vampiric Touch
|
||||
if (removeMode == AURA_REMOVE_BY_ENEMY_SPELL && (GetSpellInfo()->SpellFamilyFlags[0] & 0x00008000 || GetSpellInfo()->SpellFamilyFlags[1] & 0x00000400))
|
||||
{
|
||||
// Shadow Affinity
|
||||
if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, 178, 1))
|
||||
{
|
||||
int32 basepoints0 = aurEff->GetAmount() * caster->GetCreateMana() / 100;
|
||||
caster->CastCustomSpell(caster, 64103, &basepoints0, NULL, NULL, true, NULL, GetEffect(0));
|
||||
}
|
||||
}
|
||||
// Power word: shield
|
||||
else if (removeMode == AURA_REMOVE_BY_ENEMY_SPELL && GetSpellInfo()->SpellFamilyFlags[0] & 0x00000001)
|
||||
if (removeMode == AURA_REMOVE_BY_ENEMY_SPELL && GetSpellInfo()->SpellFamilyFlags[0] & 0x00000001)
|
||||
{
|
||||
// Rapture
|
||||
if (Aura const* aura = caster->GetAuraOfRankedSpell(47535))
|
||||
@@ -1433,68 +1321,12 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
// effect on caster
|
||||
if (AuraEffect const* aurEff = aura->GetEffect(0))
|
||||
{
|
||||
float multiplier = (float)aurEff->GetAmount();
|
||||
if (aurEff->GetId() == 47535)
|
||||
multiplier -= 0.5f;
|
||||
else if (aurEff->GetId() == 47537)
|
||||
multiplier += 0.5f;
|
||||
|
||||
float multiplier = float(aurEff->GetAmount());
|
||||
int32 basepoints0 = int32(CalculatePctF(caster->GetMaxPower(POWER_MANA), multiplier));
|
||||
caster->CastCustomSpell(caster, 47755, &basepoints0, NULL, NULL, true);
|
||||
}
|
||||
// effect on aura target
|
||||
if (AuraEffect const* aurEff = aura->GetEffect(1))
|
||||
{
|
||||
if (!roll_chance_i(aurEff->GetAmount()))
|
||||
break;
|
||||
|
||||
int32 triggeredSpellId = 0;
|
||||
switch (target->getPowerType())
|
||||
{
|
||||
case POWER_MANA:
|
||||
{
|
||||
int32 basepoints0 = int32(CalculatePctN(target->GetMaxPower(POWER_MANA), 2));
|
||||
caster->CastCustomSpell(target, 63654, &basepoints0, NULL, NULL, true);
|
||||
break;
|
||||
}
|
||||
case POWER_RAGE: triggeredSpellId = 63653; break;
|
||||
case POWER_ENERGY: triggeredSpellId = 63655; break;
|
||||
case POWER_RUNIC_POWER: triggeredSpellId = 63652; break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (triggeredSpellId)
|
||||
caster->CastSpell(target, triggeredSpellId, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
switch (GetId())
|
||||
{
|
||||
case 47788: // Guardian Spirit
|
||||
if (removeMode != AURA_REMOVE_BY_EXPIRE)
|
||||
break;
|
||||
if (caster->GetTypeId() != TYPEID_PLAYER)
|
||||
break;
|
||||
|
||||
Player* player = caster->ToPlayer();
|
||||
// Glyph of Guardian Spirit
|
||||
if (AuraEffect* aurEff = player->GetAuraEffect(63231, 0))
|
||||
{
|
||||
if (!player->HasSpellCooldown(47788))
|
||||
break;
|
||||
|
||||
player->RemoveSpellCooldown(GetSpellInfo()->Id, true);
|
||||
player->AddSpellCooldown(GetSpellInfo()->Id, 0, uint32(time(NULL) + aurEff->GetAmount()));
|
||||
|
||||
WorldPacket data(SMSG_SPELL_COOLDOWN, 8+1+4+4);
|
||||
data << uint64(player->GetGUID());
|
||||
data << uint8(0x0); // flags (0x1, 0x2)
|
||||
data << uint32(GetSpellInfo()->Id);
|
||||
data << uint32(aurEff->GetAmount()*IN_MILLISECONDS);
|
||||
player->SendDirectMessage(&data);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_ROGUE:
|
||||
// Remove Vanish on stealth remove
|
||||
@@ -1561,7 +1393,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
if (GetSpellInfo()->SpellFamilyFlags[0] & 0x00400000)
|
||||
{
|
||||
// Master of subtlety
|
||||
if (AuraEffect const* aurEff = target->GetAuraEffectOfRankedSpell(31221, 0))
|
||||
if (AuraEffect const* aurEff = target->GetAuraEffect(31223, 0))
|
||||
{
|
||||
if (!apply)
|
||||
target->CastSpell(target, 31666, true);
|
||||
@@ -1571,14 +1403,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
target->CastCustomSpell(target, 31665, &basepoints0, NULL, NULL, true);
|
||||
}
|
||||
}
|
||||
// Overkill
|
||||
if (target->HasAura(58426))
|
||||
{
|
||||
if (!apply)
|
||||
target->CastSpell(target, 58428, true);
|
||||
else
|
||||
target->CastSpell(target, 58427, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -1604,15 +1428,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
case SPELLFAMILY_PALADIN:
|
||||
switch (GetId())
|
||||
{
|
||||
case 19746:
|
||||
// Improved concentration aura - linked aura
|
||||
if (caster->HasAura(20254) || caster->HasAura(20255) || caster->HasAura(20256))
|
||||
{
|
||||
if (apply)
|
||||
target->CastSpell(target, 63510, true);
|
||||
else
|
||||
target->RemoveAura(63510);
|
||||
}
|
||||
case 31821:
|
||||
// Aura Mastery Triggered Spell Handler
|
||||
// If apply Concentration Aura -> trigger -> apply Aura Mastery Immunity
|
||||
@@ -1630,7 +1445,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
else
|
||||
target->RemoveAurasDueToSpell(64364, GetCasterGUID());
|
||||
break;
|
||||
case 31842: // Divine Illumination
|
||||
case 31842: // Divine Favor
|
||||
// Item - Paladin T10 Holy 2P Bonus
|
||||
if (target->HasAura(70755))
|
||||
{
|
||||
@@ -1641,115 +1456,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (GetSpellInfo()->GetSpellSpecific() == SPELL_SPECIFIC_AURA)
|
||||
{
|
||||
// Improved devotion aura
|
||||
if (caster->HasAura(20140) || caster->HasAura(20138) || caster->HasAura(20139))
|
||||
{
|
||||
if (apply)
|
||||
caster->CastSpell(target, 63514, true);
|
||||
else
|
||||
target->RemoveAura(63514);
|
||||
}
|
||||
// 63531 - linked aura for both Sanctified Retribution and Swift Retribution talents
|
||||
// Not allow for Retribution Aura (prevent stacking)
|
||||
if ((GetSpellInfo()->SpellIconID != 555) && (caster->HasAura(53648) || caster->HasAura(53484) || caster->HasAura(53379) || caster->HasAura(31869)))
|
||||
{
|
||||
if (apply)
|
||||
caster->CastSpell(target, 63531, true);
|
||||
else
|
||||
target->RemoveAura(63531);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_DEATHKNIGHT:
|
||||
if (GetSpellInfo()->GetSpellSpecific() == SPELL_SPECIFIC_PRESENCE)
|
||||
{
|
||||
AuraEffect* bloodPresenceAura=0; // healing by damage done
|
||||
AuraEffect* frostPresenceAura=0; // increased health
|
||||
AuraEffect* unholyPresenceAura=0; // increased movement speed, faster rune recovery
|
||||
|
||||
// Improved Presences
|
||||
Unit::AuraEffectList const& vDummyAuras = target->GetAuraEffectsByType(SPELL_AURA_DUMMY);
|
||||
for (Unit::AuraEffectList::const_iterator itr = vDummyAuras.begin(); itr != vDummyAuras.end(); ++itr)
|
||||
{
|
||||
switch ((*itr)->GetId())
|
||||
{
|
||||
// Improved Blood Presence
|
||||
case 50365:
|
||||
case 50371:
|
||||
{
|
||||
bloodPresenceAura = (*itr);
|
||||
break;
|
||||
}
|
||||
// Improved Frost Presence
|
||||
case 50384:
|
||||
case 50385:
|
||||
{
|
||||
frostPresenceAura = (*itr);
|
||||
break;
|
||||
}
|
||||
// Improved Unholy Presence
|
||||
case 50391:
|
||||
case 50392:
|
||||
{
|
||||
unholyPresenceAura = (*itr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint32 presence = GetId();
|
||||
if (apply)
|
||||
{
|
||||
// Blood Presence bonus
|
||||
if (presence == 48266)
|
||||
target->CastSpell(target, 63611, true);
|
||||
else if (bloodPresenceAura)
|
||||
{
|
||||
int32 basePoints1 = bloodPresenceAura->GetAmount();
|
||||
target->CastCustomSpell(target, 63611, NULL, &basePoints1, NULL, true, 0, bloodPresenceAura);
|
||||
}
|
||||
// Frost Presence bonus
|
||||
if (presence == 48263)
|
||||
target->CastSpell(target, 61261, true);
|
||||
else if (frostPresenceAura)
|
||||
{
|
||||
int32 basePoints0 = frostPresenceAura->GetAmount();
|
||||
target->CastCustomSpell(target, 61261, &basePoints0, NULL, NULL, true, 0, frostPresenceAura);
|
||||
}
|
||||
// Unholy Presence bonus
|
||||
if (presence == 48265)
|
||||
{
|
||||
if (unholyPresenceAura)
|
||||
{
|
||||
// Not listed as any effect, only base points set
|
||||
int32 basePoints0 = unholyPresenceAura->GetSpellInfo()->Effects[EFFECT_1].CalcValue();
|
||||
target->CastCustomSpell(target, 63622, &basePoints0, &basePoints0, &basePoints0, true, 0, unholyPresenceAura);
|
||||
}
|
||||
target->CastSpell(target, 49772, true);
|
||||
}
|
||||
else if (unholyPresenceAura)
|
||||
{
|
||||
int32 basePoints0 = unholyPresenceAura->GetAmount();
|
||||
target->CastCustomSpell(target, 49772, &basePoints0, NULL, NULL, true, 0, unholyPresenceAura);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Remove passive auras
|
||||
if (presence == 48266 || bloodPresenceAura)
|
||||
target->RemoveAurasDueToSpell(63611);
|
||||
if (presence == 48263 || frostPresenceAura)
|
||||
target->RemoveAurasDueToSpell(61261);
|
||||
if (presence == 48265 || unholyPresenceAura)
|
||||
{
|
||||
if (presence == 48265 && unholyPresenceAura)
|
||||
target->RemoveAurasDueToSpell(63622);
|
||||
target->RemoveAurasDueToSpell(49772);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_WARLOCK:
|
||||
// Drain Soul - If the target is at or below 25% health, Drain Soul causes four times the normal damage
|
||||
|
||||
Reference in New Issue
Block a user