Scripts/Icecrown Citadel
* Traps after Deathbringer Saurfang will not turn off anymore * Fixed Valithria Dreamwalker adds not attacking players Closes #2343 Closes #2485 Closes #2815
This commit is contained in:
@@ -339,9 +339,7 @@ class boss_valithria_dreamwalker : public CreatureScript
|
||||
_instance->SendEncounterUnit(ENCOUNTER_FRAME_REMOVE, me);
|
||||
me->RemoveAurasDueToSpell(SPELL_CORRUPTION_VALITHRIA);
|
||||
DoCast(me, SPELL_ACHIEVEMENT_CHECK);
|
||||
float x, y, z;
|
||||
me->GetPosition(x, y, z);
|
||||
me->CastSpell(x, y, z, SPELL_DREAMWALKERS_RAGE, false);
|
||||
DoCastAOE(SPELL_DREAMWALKERS_RAGE);
|
||||
_events.ScheduleEvent(EVENT_DREAM_SLIP, 3500);
|
||||
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_VALITHRIA_LICH_KING)))
|
||||
lichKing->AI()->EnterEvadeMode();
|
||||
@@ -529,7 +527,7 @@ class npc_green_dragon_combat_trigger : public CreatureScript
|
||||
|
||||
void JustReachedHome()
|
||||
{
|
||||
BossAI::JustReachedHome();
|
||||
_JustReachedHome();
|
||||
DoAction(ACTION_DEATH);
|
||||
}
|
||||
|
||||
@@ -537,7 +535,7 @@ class npc_green_dragon_combat_trigger : public CreatureScript
|
||||
{
|
||||
if (action == ACTION_DEATH)
|
||||
{
|
||||
instance->SetBossState(DATA_VALITHRIA_DREAMWALKER, FAIL);
|
||||
instance->SetBossState(DATA_VALITHRIA_DREAMWALKER, NOT_STARTED);
|
||||
me->m_Events.AddEvent(new ValithriaDespawner(me), me->m_Events.CalculateTime(5000));
|
||||
}
|
||||
}
|
||||
@@ -1180,6 +1178,13 @@ class spell_dreamwalker_summoner : public SpellScriptLoader
|
||||
{
|
||||
PrepareSpellScript(spell_dreamwalker_summoner_SpellScript);
|
||||
|
||||
bool Load()
|
||||
{
|
||||
if (!GetCaster()->GetInstanceScript())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void FilterTargets(std::list<Unit*>& targets)
|
||||
{
|
||||
targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_RECENTLY_SPAWNED));
|
||||
@@ -1191,9 +1196,19 @@ class spell_dreamwalker_summoner : public SpellScriptLoader
|
||||
targets.push_back(target);
|
||||
}
|
||||
|
||||
void HandleForceCast(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (!GetHitUnit())
|
||||
return;
|
||||
|
||||
GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true, NULL, NULL, GetCaster()->GetInstanceScript()->GetData64(DATA_VALITHRIA_LICH_KING));
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnUnitTargetSelect += SpellUnitTargetFn(spell_dreamwalker_summoner_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
|
||||
OnEffect += SpellEffectFn(spell_dreamwalker_summoner_SpellScript::HandleForceCast, EFFECT_0, SPELL_EFFECT_FORCE_CAST);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1220,7 +1235,7 @@ class spell_dreamwalker_summon_suppresser : public SpellScriptLoader
|
||||
return;
|
||||
|
||||
std::list<Creature*> summoners;
|
||||
GetCreatureListWithEntryInGrid(summoners, caster, 22515, 100.0f);
|
||||
GetCreatureListWithEntryInGrid(summoners, caster, NPC_WORLD_TRIGGER, 100.0f);
|
||||
summoners.remove_if(Trinity::UnitAuraCheck(true, SPELL_RECENTLY_SPAWNED));
|
||||
Trinity::RandomResizeList(summoners, 2);
|
||||
if (summoners.empty())
|
||||
@@ -1236,8 +1251,6 @@ class spell_dreamwalker_summon_suppresser : public SpellScriptLoader
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_dreamwalker_summon_suppresser_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
|
||||
}
|
||||
|
||||
int32 _decayRate;
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
@@ -1246,6 +1259,43 @@ class spell_dreamwalker_summon_suppresser : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
class spell_dreamwalker_summon_suppresser_effect : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dreamwalker_summon_suppresser_effect() : SpellScriptLoader("spell_dreamwalker_summon_suppresser_effect") { }
|
||||
|
||||
class spell_dreamwalker_summon_suppresser_effect_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_dreamwalker_summon_suppresser_effect_SpellScript);
|
||||
|
||||
bool Load()
|
||||
{
|
||||
if (!GetCaster()->GetInstanceScript())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleForceCast(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (!GetHitUnit())
|
||||
return;
|
||||
|
||||
GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true, NULL, NULL, GetCaster()->GetInstanceScript()->GetData64(DATA_VALITHRIA_LICH_KING));
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffect += SpellEffectFn(spell_dreamwalker_summon_suppresser_effect_SpellScript::HandleForceCast, EFFECT_0, SPELL_EFFECT_FORCE_CAST);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_dreamwalker_summon_suppresser_effect_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_dreamwalker_summon_dream_portal : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -1402,6 +1452,7 @@ void AddSC_boss_valithria_dreamwalker()
|
||||
new spell_dreamwalker_decay_periodic_timer();
|
||||
new spell_dreamwalker_summoner();
|
||||
new spell_dreamwalker_summon_suppresser();
|
||||
new spell_dreamwalker_summon_suppresser_effect();
|
||||
new spell_dreamwalker_summon_dream_portal();
|
||||
new spell_dreamwalker_summon_nightmare_portal();
|
||||
new spell_dreamwalker_nightmare_cloud();
|
||||
|
||||
@@ -273,6 +273,11 @@ enum EventIds
|
||||
EVENT_AWAKEN_WARD_4 = 22909,
|
||||
};
|
||||
|
||||
enum MovementPoints
|
||||
{
|
||||
POINT_LAND = 1,
|
||||
};
|
||||
|
||||
class FrostwingVrykulSearcher
|
||||
{
|
||||
public:
|
||||
@@ -666,10 +671,6 @@ class npc_frost_freeze_trap : public CreatureScript
|
||||
case 11000:
|
||||
_events.ScheduleEvent(EVENT_ACTIVATE_TRAP, uint32(action));
|
||||
break;
|
||||
case ACTION_STOP_TRAPS:
|
||||
me->RemoveAurasDueToSpell(SPELL_COLDFLAME_JETS);
|
||||
_events.CancelEvent(EVENT_ACTIVATE_TRAP);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -761,7 +762,6 @@ class boss_sister_svalna : public CreatureScript
|
||||
_EnterCombat();
|
||||
if (Creature* crok = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_CROK_SCOURGEBANE)))
|
||||
crok->AI()->Talk(SAY_CROK_COMBAT_SVALNA);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_1);
|
||||
events.ScheduleEvent(EVENT_SVALNA_COMBAT, 9000);
|
||||
events.ScheduleEvent(EVENT_IMPALING_SPEAR, urand(40000, 50000));
|
||||
events.ScheduleEvent(EVENT_AETHER_SHIELD, urand(100000, 110000));
|
||||
@@ -835,17 +835,30 @@ class boss_sister_svalna : public CreatureScript
|
||||
}
|
||||
}
|
||||
|
||||
void MovementInform(uint32 type, uint32 id)
|
||||
{
|
||||
if (type != POINT_MOTION_TYPE || id != POINT_LAND)
|
||||
return;
|
||||
|
||||
_isEventInProgress = false;
|
||||
me->setActive(false);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_PASSIVE);
|
||||
}
|
||||
|
||||
void SpellHitTarget(Unit* target, SpellInfo const* spell)
|
||||
{
|
||||
switch (spell->Id)
|
||||
{
|
||||
case SPELL_REVIVE_CHAMPION:
|
||||
{
|
||||
if (!_isEventInProgress)
|
||||
break;
|
||||
_isEventInProgress = false;
|
||||
me->setActive(false);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_PASSIVE);
|
||||
Position pos;
|
||||
me->GetPosition(&pos);
|
||||
me->UpdateGroundPositionZ(pos.GetPositionX(), pos.GetPositionY(), pos.m_positionZ);
|
||||
me->GetMotionMaster()->MovePoint(POINT_LAND, pos);
|
||||
break;
|
||||
}
|
||||
case SPELL_IMPALING_SPEAR_KILL:
|
||||
me->Kill(target);
|
||||
break;
|
||||
@@ -884,7 +897,6 @@ class boss_sister_svalna : public CreatureScript
|
||||
me->CastSpell(me, SPELL_REVIVE_CHAMPION, false);
|
||||
break;
|
||||
case EVENT_SVALNA_COMBAT:
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_1);
|
||||
me->SetReactState(REACT_DEFENSIVE);
|
||||
Talk(SAY_SVALNA_AGGRO);
|
||||
break;
|
||||
@@ -1987,8 +1999,7 @@ class at_icc_shutdown_traps : public AreaTriggerScript
|
||||
bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/)
|
||||
{
|
||||
if (InstanceScript* instance = player->GetInstanceScript())
|
||||
if (instance->GetData(DATA_COLDFLAME_JETS) == IN_PROGRESS)
|
||||
instance->SetData(DATA_COLDFLAME_JETS, DONE);
|
||||
instance->SetData(DATA_COLDFLAME_JETS, DONE);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -41,6 +41,7 @@ class icecrown_citadel_teleport : public GameObjectScript
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Deathbringer's Rise.", GOSSIP_SENDER_ICC_PORT, DEATHBRINGER_S_RISE_TELEPORT);
|
||||
if (instance->GetData(DATA_COLDFLAME_JETS) == DONE)
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Upper Spire.", GOSSIP_SENDER_ICC_PORT, UPPER_SPIRE_TELEPORT);
|
||||
// TODO: Gauntlet event before Sindragosa
|
||||
if (instance->GetBossState(DATA_VALITHRIA_DREAMWALKER) == DONE)
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to Sindragosa's Lair", GOSSIP_SENDER_ICC_PORT, SINDRAGOSA_S_LAIR_TELEPORT);
|
||||
}
|
||||
|
||||
@@ -207,9 +207,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
if (TeamInInstance == ALLIANCE)
|
||||
creature->UpdateEntry(NPC_SE_SKYBREAKER_MARINE, ALLIANCE);
|
||||
break;
|
||||
case NPC_FROST_FREEZE_TRAP:
|
||||
ColdflameJetGUIDs.insert(creature->GetGUID());
|
||||
break;
|
||||
case NPC_FESTERGUT:
|
||||
FestergutGUID = creature->GetGUID();
|
||||
break;
|
||||
@@ -310,12 +307,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
return entry;
|
||||
}
|
||||
|
||||
void OnCreatureRemove(Creature* creature)
|
||||
{
|
||||
if (creature->GetEntry() == NPC_FROST_FREEZE_TRAP)
|
||||
ColdflameJetGUIDs.erase(creature->GetGUID());
|
||||
}
|
||||
|
||||
void OnCreatureDeath(Creature* creature)
|
||||
{
|
||||
switch (creature->GetEntry())
|
||||
@@ -792,12 +783,7 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
case DATA_COLDFLAME_JETS:
|
||||
ColdflameJetsState = data;
|
||||
if (ColdflameJetsState == DONE)
|
||||
{
|
||||
SaveToDB();
|
||||
for (std::set<uint64>::iterator itr = ColdflameJetGUIDs.begin(); itr != ColdflameJetGUIDs.end(); ++itr)
|
||||
if (Creature* trap = instance->GetCreature(*itr))
|
||||
trap->AI()->DoAction(ACTION_STOP_TRAPS);
|
||||
}
|
||||
break;
|
||||
case DATA_BLOOD_QUICKENING_STATE:
|
||||
{
|
||||
@@ -1090,7 +1076,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
}
|
||||
|
||||
protected:
|
||||
std::set<uint64> ColdflameJetGUIDs;
|
||||
uint64 LadyDeathwisperElevatorGUID;
|
||||
uint64 DeathbringerSaurfangGUID;
|
||||
uint64 DeathbringerSaurfangDoorGUID;
|
||||
|
||||
Reference in New Issue
Block a user