Fixed spell 1254756
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user