diff options
author | Nitair <peter.stein94@gmail.com> | 2019-05-31 08:26:42 +0200 |
---|---|---|
committer | Giacomo Pozzoni <giacomopoz@gmail.com> | 2019-05-31 08:26:42 +0200 |
commit | ee5101fbf74b0fa924a8467ee766b39c1d06875b (patch) | |
tree | 5b9b79d7a474824c4398f46a3e45745d085ff717 /src | |
parent | d333cd0ccfdaaab822eae4a6f5cc0d47ce521875 (diff) |
Scripts/Stratholme: Baron Rivendare rewrite (#22572)
* Adding last state of rivendare rewrite
* Fix aura beeing removed on reset, fix death pact
* Not needed
* SQL: Changed remove/inset into update, fixed delete at conditions part
* Typo
* Remove link spell, fix blank lines, change magic numbers to enum
* Test changes with SpellScript and DoCastSelf
* Revert SpellScript and moved DoCastSelf for the aura into UpdateAI part
* Damn, copyright.
* Fix Unholy Aura
* Fix again (does attack now / does cast if encounter resets)
* Adding handling of the aura to the db
* Rename 2018_99_99_99_world_335.sql to 2019_05_31_02_world_335.sql
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 6 | ||||
-rw-r--r-- | src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp | 245 |
2 files changed, 121 insertions, 130 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 624f0754739..c91cbcfccc9 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -4874,6 +4874,12 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_3_YARDS); // 3yd }); + // Baron Rivendare (Stratholme) - Unholy Aura + ApplySpellFix({ 17466, 17467 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_INITIAL_AGGRO; + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { SpellInfo* spellInfo = mSpellInfoMap[i]; diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp index 59a3d697a0c..a428f9eeae6 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/> - * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -16,170 +15,156 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* ScriptData -SDName: Boss_Baron_Rivendare -SD%Complete: 70 -SDComment: aura applied/defined in database -SDCategory: Stratholme -EndScriptData */ - #include "ScriptMgr.h" #include "InstanceScript.h" #include "ScriptedCreature.h" +#include "SpellInfo.h" #include "stratholme.h" -enum Says +enum Texts { - SAY_BARON_RUN_START = 0, - SAY_BARON_RUN_BOSS_KILL = 1, - SAY_BARON_RUN_FAIL = 2, - SAY_EVENT_RAMSTEIN = 3, - SAY_EVENT_BARON = 4 + EMOTE_RAISE_DEAD = 0, // %s raises an undead servant back to life! + EMOTE_DEATH_PACT = 1 // %s attempts to cast Death Pact on his servants! }; enum Spells { - SPELL_SHADOWBOLT = 17393, - SPELL_CLEAVE = 15284, - SPELL_MORTALSTRIKE = 15708, - - SPELL_UNHOLY_AURA = 15284, - SPELL_RAISEDEAD = 15708, //triggers death pact (17471) - - SPELL_RAISE_DEAD1 = 17475, - SPELL_RAISE_DEAD2 = 17476, - SPELL_RAISE_DEAD3 = 17477, - SPELL_RAISE_DEAD4 = 17478, - SPELL_RAISE_DEAD5 = 17479, - SPELL_RAISE_DEAD6 = 17480, + SPELL_SHADOWBOLT = 17393, + SPELL_CLEAVE = 15284, + SPELL_MORTALSTRIKE = 15708, + SPELL_DEATH_PACT_1 = 17698, // Heal Rivendare and damage skeleton + SPELL_DEATH_PACT_2 = 17471, // Visual effect + SPELL_DEATH_PACT_3 = 17472, // Instant kill self only + SPELL_RAISE_DEAD = 17473, // Inits. 17698 and 17471 + SPELL_RAISE_DEAD_1 = 17475, + SPELL_RAISE_DEAD_2 = 17476, + SPELL_RAISE_DEAD_3 = 17477, + SPELL_RAISE_DEAD_4 = 17478, + SPELL_RAISE_DEAD_5 = 17479, + SPELL_RAISE_DEAD_6 = 17480, + SPELL_UNHOLY_AURA = 17467 }; -// Define Add positions -Position const ADD_POS_1 = {4017.403809f, -3339.703369f, 115.057655f, 5.487860f}; -Position const ADD_POS_2 = {4013.189209f, -3351.808350f, 115.052254f, 0.134280f}; -Position const ADD_POS_3 = {4017.738037f, -3363.478016f, 115.057274f, 0.723313f}; -Position const ADD_POS_4 = {4048.877197f, -3363.223633f, 115.054253f, 3.627735f}; -Position const ADD_POS_5 = {4051.777588f, -3350.893311f, 115.055351f, 3.066176f}; -Position const ADD_POS_6 = {4048.375977f, -3339.966309f, 115.055222f, 2.457497f}; +enum BaronRivendareEvents +{ + EVENT_SHADOWBOLT = 1, + EVENT_CLEAVE = 2, + EVENT_MORTALSTRIKE = 3, + EVENT_RAISE_DEAD = 4 +}; + +uint32 const RaiseDeadSpells[6] = +{ + SPELL_RAISE_DEAD_1, SPELL_RAISE_DEAD_2, SPELL_RAISE_DEAD_3, + SPELL_RAISE_DEAD_4, SPELL_RAISE_DEAD_5, SPELL_RAISE_DEAD_6 +}; -class boss_baron_rivendare : public CreatureScript +struct boss_baron_rivendare : public BossAI { public: - boss_baron_rivendare() : CreatureScript("boss_baron_rivendare") { } + boss_baron_rivendare(Creature* creature) : BossAI(creature, TYPE_BARON), RaiseDead(false) { } - CreatureAI* GetAI(Creature* creature) const override + void Reset() override { - return GetStratholmeAI<boss_baron_rivendareAI>(creature); + // needed until re-write of instance scripts is done + if (instance->GetData(TYPE_RAMSTEIN) == DONE) + instance->SetData(TYPE_BARON, NOT_STARTED); + + BossAI::Reset(); } - struct boss_baron_rivendareAI : public ScriptedAI + void JustEngagedWith(Unit* who) override { - boss_baron_rivendareAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - instance = me->GetInstanceScript(); - } + // needed until re-write of instance scripts is done + if (instance->GetData(TYPE_BARON) == NOT_STARTED) + instance->SetData(TYPE_BARON, IN_PROGRESS); - void Initialize() - { - ShadowBolt_Timer = 5000; - Cleave_Timer = 8000; - MortalStrike_Timer = 12000; - // RaiseDead_Timer = 30000; - SummonSkeletons_Timer = 34000; - } + events.ScheduleEvent(EVENT_SHADOWBOLT, 5s); + events.ScheduleEvent(EVENT_CLEAVE, 8s); + events.ScheduleEvent(EVENT_MORTALSTRIKE, 12s); + events.ScheduleEvent(EVENT_RAISE_DEAD, 15s); - InstanceScript* instance; + BossAI::JustEngagedWith(who); + } - uint32 ShadowBolt_Timer; - uint32 Cleave_Timer; - uint32 MortalStrike_Timer; - // uint32 RaiseDead_Timer; - uint32 SummonSkeletons_Timer; + void JustDied(Unit* killer) override + { + // needed until re-write of instance scripts is done + instance->SetData(TYPE_BARON, DONE); - void Reset() override - { - Initialize(); - if (instance->GetData(TYPE_RAMSTEIN) == DONE) - instance->SetData(TYPE_BARON, NOT_STARTED); - } + BossAI::JustDied(killer); + } - void AttackStart(Unit* who) override - { - //can't use entercombat(), boss' dmg aura sets near players in combat, before entering the room's door - if (instance->GetData(TYPE_BARON) == NOT_STARTED) - instance->SetData(TYPE_BARON, IN_PROGRESS); - ScriptedAI::AttackStart(who); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void JustSummoned(Creature* summoned) override - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - summoned->AI()->AttackStart(target); - } + events.Update(diff); - void JustDied(Unit* /*killer*/) override - { - instance->SetData(TYPE_BARON, DONE); - } + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - void UpdateAI(uint32 diff) override + while (uint32 eventId = events.ExecuteEvent()) { - if (!UpdateVictim()) - return; - - //ShadowBolt - if (ShadowBolt_Timer <= diff) + switch (eventId) { - if (SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCastVictim(SPELL_SHADOWBOLT); - - ShadowBolt_Timer = 10000; - } else ShadowBolt_Timer -= diff; + case EVENT_SHADOWBOLT: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_SHADOWBOLT); + events.Repeat(10s); + break; + case EVENT_CLEAVE: + DoCastVictim(SPELL_CLEAVE); + events.Repeat(7s, 17s); + break; + case EVENT_MORTALSTRIKE: + DoCastVictim(SPELL_MORTALSTRIKE); + events.Repeat(10s, 25s); + break; + case EVENT_RAISE_DEAD: + if (!RaiseDead) + { + DoCastSelf(SPELL_RAISE_DEAD); + for (uint32 const& summonSkeletons : RaiseDeadSpells) + DoCastSelf(summonSkeletons, true); + RaiseDead = true; + Talk(EMOTE_RAISE_DEAD); + } + else + { + RaiseDead = false; + Talk(EMOTE_DEATH_PACT); + } + events.Repeat(12s); + break; + default: + break; + } + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + } + DoMeleeAttackIfReady(); + } - //Cleave - if (Cleave_Timer <= diff) - { - DoCastVictim(SPELL_CLEAVE); - //13 seconds until we should cast this again - Cleave_Timer = 7000 + (rand32() % 10000); - } else Cleave_Timer -= diff; +private: + bool RaiseDead; +}; - //MortalStrike - if (MortalStrike_Timer <= diff) - { - DoCastVictim(SPELL_MORTALSTRIKE); - MortalStrike_Timer = 10000 + (rand32() % 15000); - } else MortalStrike_Timer -= diff; - - //RaiseDead - // if (RaiseDead_Timer <= diff) - // { - // DoCast(me, SPELL_RAISEDEAD); - // RaiseDead_Timer = 45000; - // } else RaiseDead_Timer -= diff; - - //SummonSkeletons - if (SummonSkeletons_Timer <= diff) - { - me->SummonCreature(11197, ADD_POS_1, TEMPSUMMON_TIMED_DESPAWN, 29000); - me->SummonCreature(11197, ADD_POS_2, TEMPSUMMON_TIMED_DESPAWN, 29000); - me->SummonCreature(11197, ADD_POS_3, TEMPSUMMON_TIMED_DESPAWN, 29000); - me->SummonCreature(11197, ADD_POS_4, TEMPSUMMON_TIMED_DESPAWN, 29000); - me->SummonCreature(11197, ADD_POS_5, TEMPSUMMON_TIMED_DESPAWN, 29000); - me->SummonCreature(11197, ADD_POS_6, TEMPSUMMON_TIMED_DESPAWN, 29000); - - //34 seconds until we should cast this again - SummonSkeletons_Timer = 40000; - } else SummonSkeletons_Timer -= diff; - - DoMeleeAttackIfReady(); - } - }; +// Death Pact 3 (17472) needs to be casted by the skeletons +struct npc_summoned_skeleton : public ScriptedAI +{ + npc_summoned_skeleton(Creature* creature) : ScriptedAI(creature) { } + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override + { + if (spell->Id == SPELL_DEATH_PACT_2) + DoCastSelf(SPELL_DEATH_PACT_3, true); + } }; void AddSC_boss_baron_rivendare() { - new boss_baron_rivendare(); + RegisterStratholmeCreatureAI(boss_baron_rivendare); + RegisterStratholmeCreatureAI(npc_summoned_skeleton); } |