aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2011_09_19_00_world_spell_script_names.sql3
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp67
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp33
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp1
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp15
5 files changed, 85 insertions, 34 deletions
diff --git a/sql/updates/world/2011_09_19_00_world_spell_script_names.sql b/sql/updates/world/2011_09_19_00_world_spell_script_names.sql
new file mode 100644
index 00000000000..5360210cef1
--- /dev/null
+++ b/sql/updates/world/2011_09_19_00_world_spell_script_names.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_dreamwalker_summon_suppresser_effect';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(70936, 'spell_dreamwalker_summon_suppresser_effect');
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index 436622549d5..fd8f2b3714a 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -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();
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 2f51e0683fb..16cb0c50beb 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -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;
}
};
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
index 01391f029ce..41bed882166 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
@@ -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);
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index 890fb66cb2b..41705ca0e78 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -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;