Core/Spells: Combustion will no longer pick up other Combustion effects and the eligible aura effects will now have their amount devided

This commit is contained in:
Ovahlord committed 2020-07-11 20:35:40 +02:00
1 parent 791e42b2a7
commit eedb17447a
1 file changed
+31 -9
+31 -9
View File
@@ -82,6 +82,7 @@ enum MageSpells
SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED = 44413,
SPELL_MAGE_INCANTERS_ABSORBTION_KNOCKBACK = 86261,
SPELL_MAGE_IGNITE = 12654,
SPELL_MAGE_LIVING_BOMB = 44457,
SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE = 29077,
SPELL_MAGE_MIRROR_IMAGE_TRIGGERED_FIRE = 88092,
SPELL_MAGE_MIRROR_IMAGE_TRIGGERED_ARCANE = 88091,
@@ -89,6 +90,7 @@ enum MageSpells
SPELL_MAGE_PERMAFROST_REDUCE_HEAL = 68391,
SPELL_MAGE_PERMAFROST_HEAL = 91394,
SPELL_MAGE_PYROBLAST = 11366,
SPELL_MAGE_PYROBLAST_HOT_STREAK = 92315,
SPELL_MAGE_PYROMANIAC_TRIGGERED = 83582,
SPELL_MAGE_SCORCH = 2948,
SPELL_MAGE_SLOW = 31589,
@@ -2216,24 +2218,44 @@ class spell_mage_combustion : public SpellScript
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_MAGE_COMBUSTION_DAMAGE });
return ValidateSpellInfo(
{
SPELL_MAGE_COMBUSTION_DAMAGE,
SPELL_MAGE_LIVING_BOMB
});
}
void HandleDotEffect(SpellEffIndex /*effIndex*/)
{
Unit* caster = GetCaster();
Unit* target = GetHitUnit();
if (!target || !caster)
if (!caster)
return;
std::list<AuraEffect*> dotAuraEffects = target->GetAuraEffectsByType(SPELL_AURA_PERIODIC_DAMAGE);
if (dotAuraEffects.empty())
return;
Unit* target = GetHitUnit();
int32 totalAmount = 0;
for (AuraEffect const* effect : dotAuraEffects)
if (effect->GetCasterGUID() == caster->GetGUID() && effect->GetSpellInfo()->SpellFamilyFlags[2] & 0x00000008)
totalAmount += effect->GetAmount();
for (AuraEffect const* aurEff : target->GetAuraEffectsByType(SPELL_AURA_PERIODIC_DAMAGE))
{
if (aurEff->GetCasterGUID() == caster->GetGUID() && aurEff->GetSpellInfo()->SpellFamilyFlags[2] & 0x00000008)
{
if (aurEff->GetSpellInfo()->Id == SPELL_MAGE_COMBUSTION_DAMAGE)
continue;
switch (aurEff->GetSpellInfo()->Id)
{
case SPELL_MAGE_IGNITE:
totalAmount += aurEff->GetAmount() / 2;
break;
case SPELL_MAGE_LIVING_BOMB:
case SPELL_MAGE_PYROBLAST:
case SPELL_MAGE_PYROBLAST_HOT_STREAK:
totalAmount += aurEff->GetAmount() / 3;
break;
default:
break;
}
}
}
if (totalAmount)
caster->CastCustomSpell(SPELL_MAGE_COMBUSTION_DAMAGE, SPELLVALUE_BASE_POINT0, totalAmount, target, true);