aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2013_12_23_00_world_misc.sql44
-rw-r--r--src/server/scripts/Northrend/zone_storm_peaks.cpp306
2 files changed, 263 insertions, 87 deletions
diff --git a/sql/updates/world/2013_12_23_00_world_misc.sql b/sql/updates/world/2013_12_23_00_world_misc.sql
new file mode 100644
index 00000000000..7b6207eb791
--- /dev/null
+++ b/sql/updates/world/2013_12_23_00_world_misc.sql
@@ -0,0 +1,44 @@
+DELETE FROM `spell_target_position` WHERE `id`=56649;
+INSERT INTO `spell_target_position` (`id`,`effIndex`,`target_map`,`target_position_x`,`target_position_y`,`target_position_z`,`target_orientation`) VALUES
+(56649,0,571,7989.938,-3195.042,922.6224,3.572167);
+
+DELETE FROM `spell_script_names` WHERE `spell_id`=50630;
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(50630, 'spell_jokkum_eject_all');
+
+DELETE FROM `spell_script_names` WHERE `spell_id`=56650;
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(56650, 'spell_veranus_summon');
+
+-- Pathing for King Jokkum Entry: 30331
+-- by malcrom
+SET @PATH := 2072200;
+DELETE FROM `waypoint_data` WHERE `id` IN (@PATH, @PATH+1);
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+-- Path to event
+(@PATH,1,7357.088,-2865.398,803.5008,0,0,1,0,100,0),
+(@PATH,2,7355.184,-2904.322,821.0084,0,0,1,0,100,0),
+(@PATH,3,7355.473,-2946.654,833.0916,0,0,1,0,100,0),
+(@PATH,4,7358.789,-2974.211,845.01801,0,0,1,0,100,0),
+(@PATH,5,7360.866,-2994.785,845.9886,0,0,1,0,100,0),
+(@PATH,6,7378.764,-3035.887,840.6003,0,0,1,0,100,0),
+(@PATH,7,7411.658,-3072.211,837.5768,0,0,1,0,100,0),
+(@PATH,8,7453.996,-3088.695,837.5768,0,0,1,0,100,0),
+(@PATH,9,7496.08,-3113.922,837.5829,0,0,1,0,100,0),
+(@PATH,10,7536.843,-3136.489,837.5808,0,0,1,0,100,0),
+(@PATH,11,7564.738,-3145.144,844.8308,0,0,1,0,100,0),
+(@PATH,12,7604.358,-3171.258,850.8867,0,0,1,0,100,0),
+(@PATH,13,7635.467,-3207.211,857.19,0,0,1,0,100,0),
+(@PATH,14,7657.858,-3219.258,863.19,0,0,1,0,100,0),
+(@PATH,15,7685.416,-3218.983,867.14136,0,0,1,0,100,0),
+(@PATH,16,7706.542,-3219.742,864.3326,0,0,1,0,100,0),
+(@PATH,17,7747.335,-3226.993,862.4576,0,0,1,0,100,0),
+(@PATH,18,7796.658,-3221.782,860.6461,0,0,1,0,100,0),
+(@PATH,19,7827.596,-3229.273,856.4147,0,0,1,0,100,0),
+(@PATH,20,7846.174,-3253.239,852.1281,0,0,1,0,100,0),
+-- Path after event and despawn
+(@PATH+1,1,7837.094,-3235.536,853.8781,0,0,1,0,100,0),
+(@PATH+1,2,7828.622,-3230.38,855.9147,0,0,1,0,100,0),
+(@PATH+1,3,7793.782,-3219.743,861.1461,0,0,1,0,100,0),
+(@PATH+1,4,7765.224,-3225.374,864.0826,0,0,1,0,100,0),
+(@PATH+1,5,7736.733,-3226.5,861.4576,0,0,1,0,100,0);
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();
}