diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/scripts/Northrend/zone_storm_peaks.cpp | 306 |
1 files changed, 219 insertions, 87 deletions
diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index c09c817a2bf..b1ece9b1aec 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -339,17 +339,9 @@ public: } } - void WaypointReached(uint32 /*waypointId*/) OVERRIDE - { - } - - void JustDied(Unit* /*killer*/) OVERRIDE - { - } - - void OnCharmed(bool /*apply*/) OVERRIDE - { - } + void WaypointReached(uint32 /*waypointId*/) OVERRIDE { } + void JustDied(Unit* /*killer*/) OVERRIDE { } + void OnCharmed(bool /*apply*/) OVERRIDE { } void UpdateAI(uint32 diff) OVERRIDE { @@ -414,7 +406,6 @@ class npc_hyldsmeet_protodrake : public CreatureScript } }; - /*##### # npc_brann_bronzebeard for Quest 13285 "Forging the Keystone" #####*/ @@ -438,19 +429,19 @@ enum BrannBronzebeard SAY_VOICE_4 = 3, SAY_VOICE_5 = 4, - EVENT_SCRIPT_1 = 1, - EVENT_SCRIPT_2 = 2, - EVENT_SCRIPT_3 = 3, - EVENT_SCRIPT_4 = 4, - EVENT_SCRIPT_5 = 5, - EVENT_SCRIPT_6 = 6, - EVENT_SCRIPT_7 = 7, - EVENT_SCRIPT_8 = 8, - EVENT_SCRIPT_9 = 9, - EVENT_SCRIPT_10 = 10, - EVENT_SCRIPT_11 = 11, - EVENT_SCRIPT_12 = 12, - EVENT_SCRIPT_13 = 13 + EVENT_SCRIPT_1 = 3, + EVENT_SCRIPT_2 = 4, + EVENT_SCRIPT_3 = 5, + EVENT_SCRIPT_4 = 6, + EVENT_SCRIPT_5 = 7, + EVENT_SCRIPT_6 = 8, + EVENT_SCRIPT_7 = 9, + EVENT_SCRIPT_8 = 10, + EVENT_SCRIPT_9 = 11, + EVENT_SCRIPT_10 = 12, + EVENT_SCRIPT_11 = 13, + EVENT_SCRIPT_12 = 14, + EVENT_SCRIPT_13 = 15 }; class npc_brann_bronzebeard_keystone : public CreatureScript @@ -588,64 +579,131 @@ public: } }; -enum CloseRift +/*##### +# Quest 13010 Krolmir, Hammer of Storms +#####*/ + +enum JokkumScriptcast { - SPELL_DESPAWN_RIFT = 61665 + NPC_KINGJOKKUM = 30331, + NPC_THORIM = 30390, + PATH_JOKKUM = 2072200, + PATH_JOKKUM_END = 2072201, + SAY_HOLD_ON = 0, + SAY_JOKKUM_1 = 1, + SAY_JOKKUM_2 = 2, + SAY_JOKKUM_3 = 3, + SAY_JOKKUM_4 = 4, + SAY_JOKKUM_5 = 5, + SAY_JOKKUM_6 = 6, + SAY_JOKKUM_7 = 7, + SAY_JOKKUM_8 = 8, + SAY_THORIM_1 = 0, + SAY_THORIM_2 = 1, + SAY_THORIM_3 = 2, + SAY_THORIM_4 = 3, + SPELL_JOKKUM_SUMMON = 56541, + SPELL_JOKKUM_KILL_CREDIT = 56545, + SPELL_EJECT_ALL_PASSENGERS = 50630, + SPELL_PLAYER_CAST_VERANUS_SUMMON = 56650, + SPELL_SUMMON_VERANUS_AND_THORIM = 56649, + EVENT_KROLMIR_1 = 16, + EVENT_KROLMIR_2 = 17, + EVENT_KROLMIR_3 = 18, + EVENT_KROLMIR_4 = 19, + EVENT_KROLMIR_5 = 20, + EVENT_KROLMIR_6 = 21, + EVENT_KROLMIR_7 = 22, + EVENT_KROLMIR_8 = 23, + EVENT_KROLMIR_9 = 24, }; -class spell_close_rift : public SpellScriptLoader +class npc_king_jokkum_vehicle : public CreatureScript { - public: - spell_close_rift() : SpellScriptLoader("spell_close_rift") { } +public: + npc_king_jokkum_vehicle() : CreatureScript("npc_king_jokkum_vehicle") { } - class spell_close_rift_AuraScript : public AuraScript + struct npc_king_jokkum_vehicleAI : public VehicleAI + { + npc_king_jokkum_vehicleAI(Creature* creature) : VehicleAI(creature) { } + + void Reset() OVERRIDE { - PrepareAuraScript(spell_close_rift_AuraScript); + playerGUID = 0; + pathEnd = false; + } - bool Load() OVERRIDE - { - _counter = 0; - return true; - } + void OnCharmed(bool /*apply*/) OVERRIDE { } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) OVERRIDE + { + if (apply) { - return sSpellMgr->GetSpellInfo(SPELL_DESPAWN_RIFT); + playerGUID = who->GetGUID(); + Talk(SAY_HOLD_ON, playerGUID); + me->CastSpell(who, SPELL_JOKKUM_KILL_CREDIT, true); + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC); + me->GetMotionMaster()->MovePath(PATH_JOKKUM, false); } + } - void HandlePeriodic(AuraEffect const* /* aurEff */) + void MovementInform(uint32 type, uint32 id) OVERRIDE + { + if (type != WAYPOINT_MOTION_TYPE) + return; + + if (pathEnd) { - if (++_counter == 5) - GetTarget()->CastSpell((Unit*)NULL, SPELL_DESPAWN_RIFT, true); - } + if (id == 4) + { - void Register() OVERRIDE + } + } + else { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_close_rift_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + if (id == 19) + { + pathEnd = true; + me->SetFacingTo(0.418879f); + Talk(SAY_JOKKUM_1); + if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) + me->CastSpell(player, SPELL_PLAYER_CAST_VERANUS_SUMMON); + me->CastSpell(me, SPELL_EJECT_ALL_PASSENGERS); + + } } + } - private: - uint8 _counter; + void UpdateAI(uint32 diff) OVERRIDE + { + if (!pathEnd) + return; - }; + events.Update(diff); - AuraScript* GetAuraScript() const OVERRIDE - { - return new spell_close_rift_AuraScript(); + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_KROLMIR_1: + Talk(SAY_JOKKUM_2); + events.ScheduleEvent(EVENT_KROLMIR_2, 4000); + break; + } + } } -}; -/*##### -# Krolmir, Hammer of Storms -#####*/ + private: + EventMap events; + uint64 playerGUID; + bool pathEnd; -enum JokkumScriptcast -{ - SPELL_JOKKUM_KILL_CREDIT = 56545, - SPELL_JOKKUM_SUMMON = 56541, - NPC_KINGJOKKUM = 30331, - SAY_HOLD_ON = 0, - PATH_JOKKUM = 2072200 + }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_king_jokkum_vehicleAI(creature); + } }; class spell_jokkum_scriptcast : public SpellScriptLoader @@ -665,8 +723,8 @@ class spell_jokkum_scriptcast : public SpellScriptLoader void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - Unit* target = GetTarget(); - target->CastSpell(target, SPELL_JOKKUM_SUMMON, true); + if (Unit* target = GetTarget()) + target->CastSpell(target, SPELL_JOKKUM_SUMMON, true); } void Register() OVERRIDE @@ -681,42 +739,114 @@ class spell_jokkum_scriptcast : public SpellScriptLoader } }; -class npc_king_jokkum_vehicle : public CreatureScript +class spell_veranus_summon : public SpellScriptLoader +{ + public: spell_veranus_summon() : SpellScriptLoader("spell_veranus_summon") { } + + class spell_veranus_summon_AuraScript : public AuraScript + { + PrepareAuraScript(spell_veranus_summon_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_VERANUS_AND_THORIM)) + return false; + return true; + } + + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* target = GetTarget()) + target->CastSpell(target, SPELL_SUMMON_VERANUS_AND_THORIM, true); + } + + void Register() OVERRIDE + { + OnEffectApply += AuraEffectApplyFn(spell_veranus_summon_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const OVERRIDE + { + return new spell_veranus_summon_AuraScript(); + } +}; + +/*##### +# spell_jokkum_eject_all +#####*/ + +class spell_jokkum_eject_all : public SpellScriptLoader +{ + public: spell_jokkum_eject_all() : SpellScriptLoader("spell_jokkum_eject_all") { } + + class spell_jokkum_eject_all_SpellScript : public SpellScript + { + PrepareSpellScript(spell_jokkum_eject_all_SpellScript); + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (Unit* caster = GetCaster()) + if (caster->IsVehicle()) + caster->GetVehicleKit()->RemoveAllPassengers(); + } + + void Register() OVERRIDE + { + OnEffectHitTarget += SpellEffectFn(spell_jokkum_eject_all_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const OVERRIDE + { + return new spell_jokkum_eject_all_SpellScript(); + } +}; + +enum CloseRift +{ + SPELL_DESPAWN_RIFT = 61665 +}; + +class spell_close_rift : public SpellScriptLoader { public: - npc_king_jokkum_vehicle() : CreatureScript("npc_king_jokkum_vehicle") { } + spell_close_rift() : SpellScriptLoader("spell_close_rift") { } - struct npc_king_jokkum_vehicleAI : public VehicleAI + class spell_close_rift_AuraScript : public AuraScript { - npc_king_jokkum_vehicleAI(Creature* creature) : VehicleAI(creature) { } + PrepareAuraScript(spell_close_rift_AuraScript); - void OnCharmed(bool /*apply*/) OVERRIDE { } + bool Load() OVERRIDE + { + _counter = 0; + return true; + } - void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) OVERRIDE { - if (apply) - { - Talk(SAY_HOLD_ON, who->GetGUID()); - me->CastSpell(who, SPELL_JOKKUM_KILL_CREDIT, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC); - me->GetMotionMaster()->MovePath(PATH_JOKKUM, false); - } + return sSpellMgr->GetSpellInfo(SPELL_DESPAWN_RIFT); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void HandlePeriodic(AuraEffect const* /* aurEff */) { - if (type != WAYPOINT_MOTION_TYPE) - return; + if (++_counter == 5) + GetTarget()->CastSpell((Unit*)NULL, SPELL_DESPAWN_RIFT, true); + } - // PointId in WaypointMovementGenerator doesn't match with PointId in DB - if (id == 19) - me->GetVehicleKit()->RemoveAllPassengers(); + void Register() OVERRIDE + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_close_rift_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } + + private: + uint8 _counter; + }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + AuraScript* GetAuraScript() const OVERRIDE { - return new npc_king_jokkum_vehicleAI(creature); + return new spell_close_rift_AuraScript(); } }; @@ -729,7 +859,9 @@ void AddSC_storm_peaks() new npc_icefang(); new npc_hyldsmeet_protodrake(); new npc_brann_bronzebeard_keystone(); - new spell_close_rift(); - new spell_jokkum_scriptcast(); new npc_king_jokkum_vehicle(); + new spell_jokkum_scriptcast(); + new spell_veranus_summon(); + new spell_jokkum_eject_all(); + new spell_close_rift(); } |
