mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 08:55:32 +01:00
Core/Scripts: Fixed Suppresser behavior in Valithria Dreamwalker encounter
Closes #18530 * Fixed range issue * Fixed weave spawn when Summon Timmer Suppresser(70912) is casted * Fixed spawn count
This commit is contained in:
@@ -3293,6 +3293,7 @@ void SpellMgr::LoadSpellInfoCorrections()
|
||||
case 70936: // Summon Suppressor (needs target selection script)
|
||||
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
|
||||
spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
|
||||
spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(157); // 90yd
|
||||
break;
|
||||
case 72706: // Achievement Check (Valithria Dreamwalker)
|
||||
case 71357: // Order Whelp
|
||||
|
||||
@@ -140,11 +140,12 @@ enum Events
|
||||
EVENT_EXPLODE = 18,
|
||||
};
|
||||
|
||||
enum Actions
|
||||
enum Misc
|
||||
{
|
||||
ACTION_ENTER_COMBAT = 1,
|
||||
MISSED_PORTALS = 2,
|
||||
ACTION_DEATH = 3,
|
||||
ACTION_ENTER_COMBAT = 1,
|
||||
MISSED_PORTALS = 2,
|
||||
ACTION_DEATH = 3,
|
||||
DATA_SUPPRESSERS_COUNT = 4
|
||||
};
|
||||
|
||||
Position const ValithriaSpawnPos = {4210.813f, 2484.443f, 364.9558f, 0.01745329f};
|
||||
@@ -181,7 +182,7 @@ class DelayedCastEvent : public BasicEvent
|
||||
|
||||
bool Execute(uint64 /*time*/, uint32 /*diff*/) override
|
||||
{
|
||||
_trigger->CastSpell(_trigger, _spellId, false, NULL, NULL, _originalCaster);
|
||||
_trigger->CastSpell(_trigger, _spellId, false, nullptr, nullptr, _originalCaster);
|
||||
if (_despawnTime)
|
||||
_trigger->DespawnOrUnsummon(_despawnTime);
|
||||
return true;
|
||||
@@ -624,6 +625,14 @@ class npc_the_lich_king_controller : public CreatureScript
|
||||
me->setActive(true);
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 data) const override
|
||||
{
|
||||
if (data == DATA_SUPPRESSERS_COUNT)
|
||||
return RAID_MODE<uint32>(4, 6, 4, 6);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
{
|
||||
// must not be in dream phase
|
||||
@@ -1091,7 +1100,7 @@ class npc_dream_cloud : public CreatureScript
|
||||
{
|
||||
case EVENT_CHECK_PLAYER:
|
||||
{
|
||||
Player* player = NULL;
|
||||
Player* player = nullptr;
|
||||
Trinity::AnyPlayerInObjectRangeCheck check(me, 5.0f);
|
||||
Trinity::PlayerSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(me, player, check);
|
||||
me->VisitNearbyWorldObject(7.5f, searcher);
|
||||
@@ -1101,7 +1110,7 @@ class npc_dream_cloud : public CreatureScript
|
||||
case EVENT_EXPLODE:
|
||||
me->GetMotionMaster()->MoveIdle();
|
||||
// must use originalCaster the same for all clouds to allow stacking
|
||||
me->CastSpell(me, EMERALD_VIGOR, false, NULL, NULL, _instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER));
|
||||
me->CastSpell(me, EMERALD_VIGOR, false, nullptr, nullptr, _instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER));
|
||||
me->DespawnOrUnsummon(100);
|
||||
break;
|
||||
default:
|
||||
@@ -1229,7 +1238,7 @@ class spell_dreamwalker_summoner : public SpellScriptLoader
|
||||
if (!GetHitUnit())
|
||||
return;
|
||||
|
||||
GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true, NULL, NULL, GetCaster()->GetInstanceScript()->GetGuidData(DATA_VALITHRIA_LICH_KING));
|
||||
GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true, nullptr, nullptr, GetCaster()->GetInstanceScript()->GetGuidData(DATA_VALITHRIA_LICH_KING));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
@@ -1254,29 +1263,43 @@ class spell_dreamwalker_summon_suppresser : public SpellScriptLoader
|
||||
{
|
||||
PrepareAuraScript(spell_dreamwalker_summon_suppresser_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_SUPPRESSER))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void PeriodicTick(AuraEffect const* /*aurEff*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
Unit* caster = GetCaster();
|
||||
if (!caster)
|
||||
HandleSummon(GetCaster());
|
||||
}
|
||||
|
||||
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
HandleSummon(GetCaster());
|
||||
}
|
||||
|
||||
void HandleSummon(Unit* caster)
|
||||
{
|
||||
if (!caster || !caster->IsAIEnabled)
|
||||
return;
|
||||
|
||||
std::list<Creature*> summoners;
|
||||
GetCreatureListWithEntryInGrid(summoners, caster, NPC_WORLD_TRIGGER, 100.0f);
|
||||
summoners.remove_if(Trinity::UnitAuraCheck(true, SPELL_RECENTLY_SPAWNED));
|
||||
Trinity::Containers::RandomResizeList(summoners, 2);
|
||||
GetCreatureListWithEntryInGrid(summoners, caster, NPC_WORLD_TRIGGER, 90.0f);
|
||||
if (summoners.empty())
|
||||
return;
|
||||
|
||||
for (uint32 i = 0; i < 3; ++i)
|
||||
caster->CastSpell(summoners.front(), SPELL_SUMMON_SUPPRESSER, true);
|
||||
for (uint32 i = 0; i < 3; ++i)
|
||||
caster->CastSpell(summoners.back(), SPELL_SUMMON_SUPPRESSER, true);
|
||||
uint8 suppresserNumber = caster->GetAI()->GetData(DATA_SUPPRESSERS_COUNT);
|
||||
for (uint8 i = 0; i < suppresserNumber; ++i)
|
||||
caster->CastSpell(Trinity::Containers::SelectRandomContainerElement(summoners), SPELL_SUMMON_SUPPRESSER, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_dreamwalker_summon_suppresser_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
|
||||
AfterEffectApply += AuraEffectApplyFn(spell_dreamwalker_summon_suppresser_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1308,7 +1331,7 @@ class spell_dreamwalker_summon_suppresser_effect : public SpellScriptLoader
|
||||
if (!GetHitUnit())
|
||||
return;
|
||||
|
||||
GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true, NULL, NULL, GetCaster()->GetInstanceScript()->GetGuidData(DATA_VALITHRIA_LICH_KING));
|
||||
GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true, nullptr, nullptr, GetCaster()->GetInstanceScript()->GetGuidData(DATA_VALITHRIA_LICH_KING));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
@@ -1404,7 +1427,7 @@ class spell_dreamwalker_nightmare_cloud : public SpellScriptLoader
|
||||
bool Load() override
|
||||
{
|
||||
_instance = GetOwner()->GetInstanceScript();
|
||||
return _instance != NULL;
|
||||
return _instance != nullptr;
|
||||
}
|
||||
|
||||
void PeriodicTick(AuraEffect const* /*aurEff*/)
|
||||
@@ -1444,7 +1467,7 @@ class spell_dreamwalker_twisted_nightmares : public SpellScriptLoader
|
||||
// return;
|
||||
|
||||
if (InstanceScript* instance = GetHitUnit()->GetInstanceScript())
|
||||
GetHitUnit()->CastSpell((Unit*)NULL, GetSpellInfo()->Effects[effIndex].TriggerSpell, true, NULL, NULL, instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER));
|
||||
GetHitUnit()->CastSpell((Unit*)nullptr, GetSpellInfo()->Effects[effIndex].TriggerSpell, true, nullptr, nullptr, instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
|
||||
Reference in New Issue
Block a user