Fixed spell 1254756

This commit is contained in:
luis
2026-09-11 10:50:29 -03:00
parent 78b7c0c895
commit 2ffefdb117
+63 -1
View File
@@ -105,6 +105,7 @@ enum MageSpells
SPELL_MAGE_ICE_BARRIER = 11426,
SPELL_MAGE_ICE_BLOCK = 45438,
SPELL_MAGE_IGNITE = 12654,
SPELL_MAGE_IGNITION = 1254756,
SPELL_MAGE_IGNITION_BURST = 1217359,
SPELL_MAGE_IMPROVED_COMBUSTION = 383967,
SPELL_MAGE_IMPROVED_SCORCH = 383608,
@@ -864,13 +865,70 @@ class spell_mage_firestarter_dots : public AuraScript
// 108853 - Fire Blast
class spell_mage_fire_blast : public SpellScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_MAGE_IGNITION, SPELL_MAGE_IGNITE });
}
void CalcCritChance(Unit const* /*victim*/, float& critChance)
{
critChance = 100.0f;
}
void HandleIgnitionSpread(SpellEffIndex /*effIndex*/)
{
if (!GetCaster() || !GetCaster()->HasAura(SPELL_MAGE_IGNITION))
return;
Unit* hitTarget = GetHitUnit();
if (!hitTarget || !hitTarget->IsAlive())
return;
Aura* sourceIgnite = hitTarget->GetAura(SPELL_MAGE_IGNITE);
if (!sourceIgnite)
return;
AuraEffect const* igniteAurEff = sourceIgnite->GetEffect(EFFECT_0);
if (!igniteAurEff)
return;
Aura* ignition = GetCaster()->GetAura(SPELL_MAGE_IGNITION);
int32 spreadPct = int32(ignition->GetEffect(EFFECT_2)->GetAmount());
int32 maxTargets = int32(ignition->GetEffect(EFFECT_0)->GetAmount());
if (spreadPct <= 0 || maxTargets <= 0)
return;
int32 spreadAmount = CalculatePct(int32(igniteAurEff->GetAmount()), spreadPct);
if (spreadAmount <= 0)
return;
std::list<Unit*> targets;
Trinity::AnyUnfriendlyUnitInObjectRangeCheck check(hitTarget, GetCaster(), 10.0f);
Trinity::UnitListSearcher searcher(hitTarget, targets, check);
Cell::VisitAllObjects(hitTarget, searcher, 10.0f);
uint32 spreadCount = 0;
targets.remove_if([&](Unit* target)
{
return !target->IsAlive() || target->GetGUID() == hitTarget->GetGUID() || !GetCaster()->IsInCombatWith(target);
});
targets.sort(Trinity::ObjectDistanceOrderPred(GetCaster()));
for (Unit* target : targets)
{
if (spreadCount >= uint32(maxTargets))
break;
CastSpellExtraArgs args(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR);
args.AddSpellMod(SPELLVALUE_BASE_POINT0, spreadAmount);
GetCaster()->CastSpell(target, SPELL_MAGE_IGNITE, args);
++spreadCount;
}
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_mage_fire_blast::HandleIgnitionSpread, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
OnCalcCritChance += SpellOnCalcCritChanceFn(spell_mage_fire_blast::CalcCritChance);
}
};
@@ -1912,7 +1970,7 @@ class spell_mage_ignite : public AuraScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_MAGE_HOT_STREAK, SPELL_MAGE_PYROBLAST, SPELL_MAGE_FLAMESTRIKE })
return ValidateSpellInfo({ SPELL_MAGE_HOT_STREAK, SPELL_MAGE_PYROBLAST, SPELL_MAGE_FLAMESTRIKE, SPELL_MAGE_IGNITION })
&& ValidateSpellEffect({ { SPELL_MAGE_IGNITE, EFFECT_0 } })
&& sSpellMgr->AssertSpellInfo(SPELL_MAGE_IGNITE, DIFFICULTY_NONE)->GetEffect(EFFECT_0).GetPeriodicTickCount() > 0;
}
@@ -1933,6 +1991,10 @@ class spell_mage_ignite : public AuraScript
if (spell_mage_hot_streak_ignite_marker::IsActive(eventInfo.GetProcSpell()))
pct *= 2;
if (Aura* ignition = eventInfo.GetActor()->GetAura(SPELL_MAGE_IGNITION))
if (eventInfo.GetProcSpell() && eventInfo.GetProcSpell()->GetSpellInfo()->Id == SPELL_MAGE_FLAMESTRIKE)
pct += ignition->GetEffect(EFFECT_1)->GetAmount();
SpellEffectValue amount = CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), pct) / igniteDot.GetPeriodicTickCount();
CastSpellExtraArgs args(aurEff);