diff options
author | Vincent_Michael <Vincent_Michael@gmx.de> | 2013-12-09 23:48:41 +0100 |
---|---|---|
committer | Vincent_Michael <Vincent_Michael@gmx.de> | 2013-12-09 23:48:41 +0100 |
commit | ee5c47f1af070c5e3a2ae5addb6de83516adc5ba (patch) | |
tree | 1e4a91ff6734292b2a2abb5c32a40f3393907f03 /src | |
parent | 89f381b1ff8cd8374488b81c7f5111fbc6af884b (diff) | |
parent | bdcbcc598735f2ede76eeb91cc3d5e5bc613d141 (diff) |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Diffstat (limited to 'src')
19 files changed, 303 insertions, 14 deletions
diff --git a/src/server/game/AI/CoreAI/PetAI.h b/src/server/game/AI/CoreAI/PetAI.h index 9cce00440e1..6e24a079f9f 100644 --- a/src/server/game/AI/CoreAI/PetAI.h +++ b/src/server/game/AI/CoreAI/PetAI.h @@ -57,7 +57,6 @@ class PetAI : public CreatureAI void UpdateAllies(); TimeTracker i_tracker; - bool inCombat; std::set<uint64> m_AllySet; uint32 m_updateAlliesTimer; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 849c1c9af49..cd4fa2139f9 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -936,6 +936,8 @@ void Unit::CastSpell(GameObject* go, uint32 spellId, bool triggered, Item* castI uint32 Unit::SpellNonMeleeDamageLog(Unit* victim, uint32 spellID, uint32 damage) { SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellID); + if (!spellInfo) + return 0; SpellNonMeleeDamage damageInfo(this, victim, spellInfo->Id, spellInfo->SchoolMask); damage = SpellDamageBonusDone(victim, spellInfo, damage, SPELL_DIRECT_DAMAGE); damage = victim->SpellDamageBonusTaken(this, spellInfo, damage, SPELL_DIRECT_DAMAGE); diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp index 6dbcdffca72..2b1b04cb654 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp @@ -60,6 +60,7 @@ public: { waterBoltTimer = 3 * IN_MILLISECONDS; resetTimer = 5 * IN_MILLISECONDS; + balindaGUID = 0; } void UpdateAI(uint32 diff) OVERRIDE diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp index 275b3802764..ff839e3cacb 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp @@ -171,6 +171,7 @@ public: _Reset(); gythEvent = false; victorGUID = 0; + portcullisGUID = 0; } void EnterCombat(Unit* /*who*/) OVERRIDE diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp index 622c34d3358..0c85e89ec4a 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp @@ -63,6 +63,7 @@ public: { // Razorgore EggCount = 0; + EggEvent = 0; RazorgoreTheUntamedGUID = 0; RazorgoreDoorGUID = 0; EggList.clear(); diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index 463e88b670b..0810d5ca2b8 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -807,6 +807,7 @@ public: me->GetPosition(x, y, z); //this visual aura some under ground me->SetPosition(x, y, z + 0.35f, 0.0f); Despawn(); + debuffGUID = 0; Creature* debuff = DoSpawnCreature(HELPER, 0, 0, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 14500); if (debuff) { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp index 164de89b017..52f706d5626 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp @@ -186,6 +186,7 @@ public: { npc_towering_infernalAI(Creature* creature) : ScriptedAI(creature) { + AnetheronGUID = 0; instance = creature->GetInstanceScript(); if (instance) AnetheronGUID = instance->GetData64(DATA_ANETHERON); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp index aaf2bb65ba0..dd486df16ed 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp @@ -193,6 +193,7 @@ public: { npc_lesser_doomguardAI(Creature* creature) : hyjal_trashAI(creature) { + AzgalorGUID = 0; instance = creature->GetInstanceScript(); if (instance) AzgalorGUID = instance->GetData64(DATA_AZGALOR); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp index 3653aaf5770..9245a0c648f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp @@ -431,7 +431,6 @@ public: bool meteor; bool CanMove; - bool WpEnabled; bool go; uint32 spawnTimer; uint32 FlameBuffetTimer; diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp index e2c83b9a445..3300f0d811b 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp @@ -341,7 +341,7 @@ public: void SetData(uint32 /*type*/, uint32 data) OVERRIDE { - if(!instance) + if (!instance) return; if (data < 7) @@ -352,7 +352,7 @@ public: me->SummonCreature(NPC_DEATHS_HEAD_GEOMANCER, me->GetPositionX() + (cos(me->GetOrientation() - (M_PI/2)) * 2), me->GetPositionY() + (sin(me->GetOrientation() - (M_PI/2)) * 2), me->GetPositionZ(), me->GetOrientation()); me->SummonCreature(NPC_WITHERED_QUILGUARD, me->GetPositionX() + (cos(me->GetOrientation() + (M_PI/2)) * 2), me->GetPositionY() + (sin(me->GetOrientation() + (M_PI/2)) * 2), me->GetPositionZ(), me->GetOrientation()); } - else if (data =7) + else if (data == 7) me->SummonCreature(NPC_PLAGUEMAW_THE_ROTTING, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); } diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp index ee8618eacc9..35fea896a10 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp +++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp @@ -176,6 +176,7 @@ public: void Reset() OVERRIDE { IsMovementActive = false; + TargetTubberGUID = 0; } void MovementInform(uint32 type, uint32 id) OVERRIDE diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp index d1f0bb10ecd..d2b5b5eaf8c 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp @@ -922,6 +922,7 @@ public: { eye_tentacleAI(Creature* creature) : ScriptedAI(creature) { + Portal = 0; if (Creature* pPortal = me->SummonCreature(NPC_SMALL_PORTAL, *me, TEMPSUMMON_CORPSE_DESPAWN)) { pPortal->SetReactState(REACT_PASSIVE); @@ -999,6 +1000,7 @@ public: { SetCombatMovement(false); + Portal = 0; if (Creature* pPortal = me->SummonCreature(NPC_SMALL_PORTAL, *me, TEMPSUMMON_CORPSE_DESPAWN)) { pPortal->SetReactState(REACT_PASSIVE); @@ -1109,6 +1111,7 @@ public: { SetCombatMovement(false); + Portal = 0; if (Creature* pPortal = me->SummonCreature(NPC_GIANT_PORTAL, *me, TEMPSUMMON_CORPSE_DESPAWN)) { pPortal->SetReactState(REACT_PASSIVE); @@ -1228,6 +1231,7 @@ public: { SetCombatMovement(false); + Portal = 0; if (Creature* pPortal = me->SummonCreature(NPC_GIANT_PORTAL, *me, TEMPSUMMON_CORPSE_DESPAWN)) { pPortal->SetReactState(REACT_PASSIVE); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index 8f6b951d524..3fdfc0c8ae3 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp @@ -310,8 +310,6 @@ class npc_snobold_vassal : public CreatureScript _targetGUID = 0; _targetDied = false; - if (_instance) - _bossGUID = _instance->GetData64(NPC_GORMOK); //Workaround for Snobold me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); } @@ -450,7 +448,6 @@ class npc_snobold_vassal : public CreatureScript private: EventMap _events; InstanceScript* _instance; - uint64 _bossGUID; uint64 _targetGUID; bool _targetDied; }; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 06355e25207..96b772df5a9 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -1185,6 +1185,7 @@ struct npc_gauntlet_trash : public ScriptedAI void Reset() OVERRIDE { + InternalWaveId = 0; me->CastSpell(me, SPELL_WELL_OF_SOULS, true); _events.Reset(); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 68387279c1d..f76c46d96ff 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -514,6 +514,7 @@ class npc_gothik_minion : public CreatureScript npc_gothik_minionAI(Creature* creature) : CombatAI(creature) { liveSide = IN_LIVE_SIDE(me); + gateClose = false; } bool liveSide; diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index 671628e4cbc..fd5b0a5ca1c 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -32,6 +32,8 @@ EndContentData */ #include "ScriptedGossip.h" #include "ScriptedEscortAI.h" #include "Player.h" +#include "SpellInfo.h" +#include "SpellScript.h" /*###### ## npc_apothecary_hanes @@ -43,7 +45,8 @@ enum Entries FACTION_ESCORTEE_H = 775, NPC_HANES_FIRE_TRIGGER = 23968, QUEST_TRAIL_OF_FIRE = 11241, - SPELL_COSMETIC_LOW_POLY_FIRE = 56274 + SPELL_COSMETIC_LOW_POLY_FIRE = 56274, + SPELL_HEALING_POTION = 17534 }; class npc_apothecary_hanes : public CreatureScript @@ -92,7 +95,7 @@ public: { if (PotTimer <= diff) { - DoCast(me, 17534, true); + DoCast(me, SPELL_HEALING_POTION, true); PotTimer = 10000; } else PotTimer -= diff; } @@ -380,10 +383,107 @@ public: } }; +enum MindlessAbomination +{ + EVENT_CHECK_CHARMED = 1 +}; + +class npc_mindless_abomination : public CreatureScript +{ +public: + npc_mindless_abomination() : CreatureScript("npc_mindless_abomination") { } + + struct npc_mindless_abominationAI : public ScriptedAI + { + npc_mindless_abominationAI(Creature* creature) : ScriptedAI(creature) { } + + void Reset() OVERRIDE + { + events.ScheduleEvent(EVENT_CHECK_CHARMED, 1000); + } + + void UpdateAI(uint32 diff) OVERRIDE + { + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_CHECK_CHARMED: + if (!me->IsCharmedOwnedByPlayerOrPlayer()) + me->DespawnOrUnsummon(); + else + events.ScheduleEvent(EVENT_CHECK_CHARMED, 1000); + break; + } + } + } + + private: + EventMap events; + }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_mindless_abominationAI(creature); + } +}; + +class spell_mindless_abomination_explosion_fx_master : public SpellScriptLoader +{ + enum Spells + { + SPELL_RANDOM_CIRCUMFERENCE_POINT_POISON = 42266, + SPELL_COSMETIC_BLOOD_EXPLOSION_GREEN_LARGE = 43401 + }; + + public: + spell_mindless_abomination_explosion_fx_master() : SpellScriptLoader("spell_mindless_abomination_explosion_fx_master") { } + + class spell_mindless_abomination_explosion_fx_master_SpellScript : public SpellScript + { + PrepareSpellScript(spell_mindless_abomination_explosion_fx_master_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_RANDOM_CIRCUMFERENCE_POINT_POISON) || !sSpellMgr->GetSpellInfo(SPELL_COSMETIC_BLOOD_EXPLOSION_GREEN_LARGE)) + return false; + return true; + } + + void HandleScript(SpellEffIndex /*eff*/) + { + Creature* caster = GetCaster()->ToCreature(); + if (!caster) + return; + + caster->AI()->DoCast(caster, SPELL_COSMETIC_BLOOD_EXPLOSION_GREEN_LARGE); + + for (uint8 i = 0; i < 10; ++i) + caster->AI()->DoCast(caster, SPELL_RANDOM_CIRCUMFERENCE_POINT_POISON); + + caster->DespawnOrUnsummon(4000); + } + + void Register() OVERRIDE + { + OnEffectHitTarget += SpellEffectFn(spell_mindless_abomination_explosion_fx_master_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const OVERRIDE + { + return new spell_mindless_abomination_explosion_fx_master_SpellScript(); + } +}; + void AddSC_howling_fjord() { - new npc_apothecary_hanes; - new npc_plaguehound_tracker; - new npc_razael_and_lyana; - new npc_daegarn; + new npc_apothecary_hanes(); + new npc_plaguehound_tracker(); + new npc_razael_and_lyana(); + new npc_daegarn(); + new npc_mindless_abomination(); + new spell_mindless_abomination_explosion_fx_master(); } diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index 825981ba5c5..48aeb678a21 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -413,6 +413,181 @@ class npc_hyldsmeet_protodrake : public CreatureScript } }; + +/*##### +# npc_brann_bronzebeard for Quest 13285 "Forging the Keystone" +#####*/ + +enum BrannBronzebeard +{ + NPC_BRANN_BRONZEBEARD = 31810, + NPC_A_DISTANT_VOICE = 31814, + OBJECT_TOL_SIGNAL_1 = 193590, + OBJECT_TOL_SIGNAL_2 = 193591, + OBJECT_TOL_SIGNAL_3 = 193592, + OBJECT_TOL_SIGNAL_4 = 193593, + OBJECT_TOL_SIGNAL_5 = 193594, + SPELL_RESURRECTION = 58854, + SAY_BRANN_1 = 0, + SAY_BRANN_2 = 1, + SAY_BRANN_3 = 2, + SAY_VOICE_1 = 0, + SAY_VOICE_2 = 1, + SAY_VOICE_3 = 2, + 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 +}; + +class npc_brann_bronzebeard : public CreatureScript +{ +public: + npc_brann_bronzebeard() : CreatureScript("npc_brann_bronzebeard") { } + + struct npc_brann_bronzebeardAI : public ScriptedAI + { + npc_brann_bronzebeardAI(Creature* creature) : ScriptedAI(creature) { } + + void Reset() OVERRIDE + { + memset(&objectGUID, 0, sizeof(objectGUID)); + playerGUID = 0; + voiceGUID = 0; + objectCounter = 0; + } + + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + { + player->CLOSE_GOSSIP_MENU(); + playerGUID = player->GetGUID(); + events.ScheduleEvent(EVENT_SCRIPT_1, 100); + } + + void UpdateAI(uint32 diff) OVERRIDE + { + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_SCRIPT_1: + Talk(SAY_BRANN_1, playerGUID); + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + if (Creature* voice = me->SummonCreature(NPC_A_DISTANT_VOICE, 7863.43f, -1396.585f, 1538.076f, 2.949606f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 49000)) + voiceGUID = voice->GetGUID(); + events.ScheduleEvent(EVENT_SCRIPT_2, 4000); + break; + case EVENT_SCRIPT_2: + me->SetWalk(true); + me->GetMotionMaster()->MovePoint(0, 7861.488f, -1396.376f, 1534.059f, false); + events.ScheduleEvent(EVENT_SCRIPT_3, 6000); + break; + case EVENT_SCRIPT_3: + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_WORK_MINING); + events.ScheduleEvent(EVENT_SCRIPT_4, 6000); + break; + case EVENT_SCRIPT_4: + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) + { + voice->AI()->DoCast(voice, SPELL_RESURRECTION); + voice->AI()->Talk(SAY_VOICE_1, playerGUID); + } + if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_1, 7860.273f, -1383.622f, 1538.302f, -1.658062f, 0, 0, -0.737277f, 0.6755905f, 0)) + objectGUID[objectCounter++] = go->GetGUID(); + events.ScheduleEvent(EVENT_SCRIPT_5, 6000); + break; + case EVENT_SCRIPT_5: + if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) + voice->AI()->Talk(SAY_VOICE_2, playerGUID); + if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_2, 7875.67f, -1387.266f, 1538.323f, -2.373644f, 0, 0, -0.9271832f, 0.3746083f, 0)) + objectGUID[objectCounter++] = go->GetGUID(); + events.ScheduleEvent(EVENT_SCRIPT_6, 6000); + break; + case EVENT_SCRIPT_6: + if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) + voice->AI()->Talk(SAY_VOICE_3, playerGUID); + if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_3, 7879.212f, -1401.175f, 1538.279f, 2.967041f, 0, 0, 0.9961939f, 0.08716504f, 0)) + objectGUID[objectCounter++] = go->GetGUID(); + events.ScheduleEvent(EVENT_SCRIPT_7, 6000); + break; + case EVENT_SCRIPT_7: + if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) + voice->AI()->Talk(SAY_VOICE_4, playerGUID); + if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_4, 7868.944f, -1411.18f, 1538.213f, 2.111848f, 0, 0, 0.8703556f, 0.4924237f, 0)) + objectGUID[objectCounter++] = go->GetGUID(); + events.ScheduleEvent(EVENT_SCRIPT_8, 6000); + break; + case EVENT_SCRIPT_8: + if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) + voice->AI()->Talk(SAY_VOICE_5, playerGUID); + if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_5, 7855.11f, -1406.839f, 1538.42f, 1.151916f, 0, 0, 0.5446386f, 0.8386708f, 0)) + objectGUID[objectCounter] = go->GetGUID(); + events.ScheduleEvent(EVENT_SCRIPT_9, 6000); + break; + case EVENT_SCRIPT_9: + if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) + voice->AI()->DoCast(voice, SPELL_RESURRECTION); + events.ScheduleEvent(EVENT_SCRIPT_10, 6000); + break; + case EVENT_SCRIPT_10: + Talk(SAY_BRANN_2, playerGUID); + if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) + player->KilledMonsterCredit(me->GetEntry()); + events.ScheduleEvent(EVENT_SCRIPT_11, 6000); + break; + case EVENT_SCRIPT_11: + me->SetOrientation(2.932153f); + me->SendMovementFlagUpdate(true); + Talk(SAY_BRANN_3, playerGUID); + for (uint8 i = 0; i < 5; ++i) + { + if (GameObject* go = ObjectAccessor::GetGameObject(*me, objectGUID[i])) + go->Delete(); + } + events.ScheduleEvent(EVENT_SCRIPT_12, 6000); + break; + case EVENT_SCRIPT_12: + me->GetMotionMaster()->Clear(); + me->SetWalk(false); + me->GetMotionMaster()->MovePoint(0, 7799.908f, -1413.561f, 1534.829f, false); + events.ScheduleEvent(EVENT_SCRIPT_13, 10000); + break; + case EVENT_SCRIPT_13: + me->DisappearAndDie(); + break; + } + } + } + + private: + EventMap events; + uint64 playerGUID; + uint64 objectGUID[5]; + uint64 voiceGUID; + uint8 objectCounter; + }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new npc_brann_bronzebeardAI(creature); + } +}; + enum CloseRift { SPELL_DESPAWN_RIFT = 61665 @@ -467,7 +642,7 @@ class spell_close_rift : public SpellScriptLoader enum JokkumScriptcast { SPELL_JOKKUM_KILL_CREDIT = 56545, - SPELL_JOKKUM_SUMMON = 56541 + SPELL_JOKKUM_SUMMON = 56541, }; class spell_jokkum_scriptcast : public SpellScriptLoader @@ -514,6 +689,7 @@ void AddSC_storm_peaks() new npc_freed_protodrake(); new npc_icefang(); new npc_hyldsmeet_protodrake(); + new npc_brann_bronzebeard(); new spell_close_rift(); new spell_jokkum_scriptcast(); } diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 00adfa59d8d..1137c86f287 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -457,6 +457,8 @@ public: void Reset() OVERRIDE { + _playerGUID = 0; + _getingredienttry = 0; _events.ScheduleEvent(EVENT_TURN_TO_POT, urand(15000, 26000)); } diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp index 4f7ac113547..783e7b9f09b 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp @@ -68,6 +68,7 @@ public: void Reset() OVERRIDE { + myClass = CLASS_NONE; Class_Timer = 1000; } |