aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNitair <peter.stein94@gmail.com>2019-05-31 08:26:42 +0200
committerGiacomo Pozzoni <giacomopoz@gmail.com>2019-05-31 08:26:42 +0200
commitee5101fbf74b0fa924a8467ee766b39c1d06875b (patch)
tree5b9b79d7a474824c4398f46a3e45745d085ff717 /src
parentd333cd0ccfdaaab822eae4a6f5cc0d47ce521875 (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.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp245
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);
}