Scripts/Ulduar/Flame Leviathan: Make both dummy effects apply on the same target, and boost range of spell Pursue to 50000yds to prevent boss reseting during the encounter.

This commit is contained in:
Machiavelli
2011-10-07 13:47:03 +02:00
parent 51edc06200
commit 1eb5bf1a65
2 changed files with 23 additions and 6 deletions
+3 -1
View File
@@ -2990,7 +2990,6 @@ void SpellMgr::LoadDbcDataCorrections()
case 25425: // Shoot case 25425: // Shoot
case 45761: // Shoot case 45761: // Shoot
case 42611: // Shoot case 42611: // Shoot
case 62374: // Pursued
case 61588: // Blazing Harpoon case 61588: // Blazing Harpoon
case 52479: // Gift of the Harvester case 52479: // Gift of the Harvester
spellInfo->MaxAffectedTargets = 1; spellInfo->MaxAffectedTargets = 1;
@@ -3177,6 +3176,9 @@ void SpellMgr::LoadDbcDataCorrections()
break; break;
// ULDUAR SPELLS // ULDUAR SPELLS
// //
case 62374: // Pursued (Flame Leviathan)
spellInfo->EffectRadiusIndex[0] = 28; // 50000yd
break;
case 63342: // Focused Eyebeam Summon Trigger (Kologarn) case 63342: // Focused Eyebeam Summon Trigger (Kologarn)
spellInfo->MaxAffectedTargets = 1; spellInfo->MaxAffectedTargets = 1;
break; break;
@@ -541,9 +541,6 @@ class boss_flame_leviathan : public CreatureScript
//! I also removed the spellInfo check //! I also removed the spellInfo check
void DoBatteringRamIfReady() void DoBatteringRamIfReady()
{ {
if (me->HasUnitState(UNIT_STAT_CASTING))
return;
if (me->isAttackReady()) if (me->isAttackReady())
{ {
Unit* target = ObjectAccessor::GetUnit(*me, _pursueTarget); Unit* target = ObjectAccessor::GetUnit(*me, _pursueTarget);
@@ -1662,9 +1659,24 @@ class spell_pursue : public SpellScriptLoader
{ {
targets.remove_if(FlameLeviathanPursuedTargetSelector(GetCaster())); targets.remove_if(FlameLeviathanPursuedTargetSelector(GetCaster()));
if (targets.empty()) if (targets.empty())
{
if (Creature* caster = GetCaster()->ToCreature()) if (Creature* caster = GetCaster()->ToCreature())
caster->AI()->EnterEvadeMode(); caster->AI()->EnterEvadeMode();
} }
else
{
//! In the end, only one target should be selected
_target = SelectRandomContainerElement(targets);
FilterTargetsSubsequently(targets);
}
}
void FilterTargetsSubsequently(std::list<Unit*>& targets)
{
ASSERT(_target);
targets.clear();
targets.push_back(_target);
}
void HandleScript(SpellEffIndex /*eff*/) void HandleScript(SpellEffIndex /*eff*/)
{ {
@@ -1687,8 +1699,11 @@ class spell_pursue : public SpellScriptLoader
void Register() void Register()
{ {
OnUnitTargetSelect += SpellUnitTargetFn(spell_pursue_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnUnitTargetSelect += SpellUnitTargetFn(spell_pursue_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
OnUnitTargetSelect += SpellUnitTargetFn(spell_pursue_SpellScript::FilterTargetsSubsequently, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
OnEffectHitTarget += SpellEffectFn(spell_pursue_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_APPLY_AURA); OnEffectHitTarget += SpellEffectFn(spell_pursue_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
} }
Unit* _target;
}; };
SpellScript* GetSpellScript() const SpellScript* GetSpellScript() const