aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMalcrom <malcromdev@gmail.com>2014-09-23 03:12:14 -0230
committerMalcrom <malcromdev@gmail.com>2014-09-23 03:12:14 -0230
commit0f1c819ccbb2443af025354b1d3b19ee04bf7355 (patch)
tree1c84d4ba0abda50b59e69014b478a2d4b4ed4c58 /src
parent878ffbc22a61566f6f450efc8b9f4f81d5486cdf (diff)
Scripting/Blackrock Caverens: A few updates to scripts.
Spawning almost complete.
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellMgr.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp141
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_corla.cpp42
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_romogg_bonecrusher.cpp2
4 files changed, 128 insertions, 63 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index c7944173817..c43413d4cd6 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3727,6 +3727,12 @@ void SpellMgr::LoadSpellInfoCorrections()
case 101009: // Gaze of Occu'thar
spellInfo->AttributesEx &= ~SPELL_ATTR1_CHANNELED_1;
break;
+ case 75610: // Evolution
+ spellInfo->MaxAffectedTargets = 1;
+ break;
+ case 75697: // Evolution
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
+ break;
// ISLE OF CONQUEST SPELLS
//
case 66551: // Teleport
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp
index 1ff4e178b8b..ce92d8242c4 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp
@@ -17,6 +17,7 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "TemporarySummon.h"
#include "blackrock_caverns.h"
#include "SpellScript.h"
#include "SpellAuras.h"
@@ -46,7 +47,6 @@ class npc_fire_cyclone : public CreatureScript
void Reset() override
{
- me->AddUnitState(UNIT_STATE_ROOT);
_events.ScheduleEvent(EVENT_FIRE_CYCLONE_AURA, 100);
}
@@ -69,7 +69,7 @@ class npc_fire_cyclone : public CreatureScript
}
private:
- EventMap _events;
+ EventMap _events;
InstanceScript* _instance;
};
@@ -88,8 +88,8 @@ enum TwilightFlameCallerSpells
SPELL_FIRE_CHANNELING_1 = 74911,
SPELL_FIRE_CHANNELING_2 = 74912,
SPELL_BLAST_WAVE = 76473,
- SPELL_CALL_FLAMES = 76325
-
+ SPELL_CALL_FLAMES = 76325,
+ NPC_FIRE_CYCLONE = 40164
};
enum TwilightFlameCallerEvents
@@ -99,38 +99,74 @@ enum TwilightFlameCallerEvents
EVENT_CALL_FLAMES = 4
};
+Position const SummonPos[6] =
+{
+ { 162.5990f, 1085.321f, 201.1190f, 0.0f },
+ { 170.5469f, 1063.403f, 201.1409f, 0.0f },
+ { 191.2326f, 1100.160f, 201.1071f, 0.0f },
+ { 228.0816f, 1106.000f, 201.1292f, 0.0f },
+ { 252.8351f, 1095.127f, 201.1436f, 0.0f },
+ { 253.6476f, 1070.226f, 201.1344f, 0.0f }
+};
+
class npc_twilight_flame_caller : public CreatureScript
{
- public: npc_twilight_flame_caller() : CreatureScript("npc_twilight_flame_caller") {}
+public: npc_twilight_flame_caller() : CreatureScript("npc_twilight_flame_caller") {}
struct npc_twilight_flame_callerAI : public ScriptedAI
{
- npc_twilight_flame_callerAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
+ npc_twilight_flame_callerAI(Creature* creature) : ScriptedAI(creature), _summons(me), _instance(creature->GetInstanceScript()) { }
void Reset() override
{
+ _combatPhase = false;
_flamecaller1GUID = 0;
_flamecaller2GUID = 0;
- if (me->GetPositionX() > 172 && me->GetPositionX() < 173 && me->GetPositionY() > 1086 && me->GetPositionY() < 1087)
- _flamecaller1GUID = me->GetGUID();
- if (me->GetPositionX() > 247 && me->GetPositionX() < 248 && me->GetPositionY() > 1081 && me->GetPositionY() < 1082)
- _flamecaller2GUID = me->GetGUID();
- _events.ScheduleEvent(EVENT_CHANNEL, 100);
+
+ if (_instance)
+ {
+ if (me->GetPositionX() > 172 && me->GetPositionX() < 173 && me->GetPositionY() > 1086 && me->GetPositionY() < 1087)
+ {
+ _flamecaller1GUID = me->GetGUID();
+ me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[0], TEMPSUMMON_CORPSE_DESPAWN, 0);
+ me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[1], TEMPSUMMON_CORPSE_DESPAWN, 0);
+ me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[2], TEMPSUMMON_CORPSE_DESPAWN, 0);
+ }
+ if (me->GetPositionX() > 247 && me->GetPositionX() < 248 && me->GetPositionY() > 1081 && me->GetPositionY() < 1082)
+ {
+ _flamecaller2GUID = me->GetGUID();
+ me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[3], TEMPSUMMON_CORPSE_DESPAWN, 0);
+ me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[4], TEMPSUMMON_CORPSE_DESPAWN, 0);
+ me->SummonCreature(NPC_FIRE_CYCLONE, SummonPos[5], TEMPSUMMON_CORPSE_DESPAWN, 0);
+ }
+ _events.ScheduleEvent(EVENT_CHANNEL, 100);
+ }
+ }
+
+ void JustSummoned(Creature* summoned) override
+ {
+ _summons.Summon(summoned);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ _summons.DespawnAll();
}
void EnterCombat(Unit* /*who*/) override
{
+ _combatPhase = true;
+ _events.Reset();
_events.ScheduleEvent(EVENT_BLAST_WAVE, urand(8000, 10000));
_events.ScheduleEvent(EVENT_CALL_FLAMES, urand(10000, 14000));
}
void UpdateAI(uint32 diff) override
{
-
_events.Update(diff);
- if (!UpdateVictim())
- {
+ if (!_combatPhase)
+ {
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
@@ -149,6 +185,9 @@ class npc_twilight_flame_caller : public CreatureScript
return;
}
+ if (!UpdateVictim())
+ return;
+
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
@@ -169,10 +208,12 @@ class npc_twilight_flame_caller : public CreatureScript
}
private:
- EventMap _events;
+ EventMap _events;
InstanceScript* _instance;
- uint64 _flamecaller1GUID;
- uint64 _flamecaller2GUID;
+ uint64 _flamecaller1GUID;
+ uint64 _flamecaller2GUID;
+ SummonList _summons;
+ bool _combatPhase;
};
CreatureAI* GetAI(Creature* creature) const
@@ -211,21 +252,24 @@ class npc_twilight_torturer : public CreatureScript
void Reset() override
{
+ _combatPhase = false;
+ if (!me->GetWaypointPath())
+ _events.ScheduleEvent(EVENT_INFLICT_PAIN_TT, urand(6000, 18000));
}
void EnterCombat(Unit* /*who*/) override
{
+ _combatPhase = true;
_events.ScheduleEvent(EVENT_RED_HOT_POKER, 9000);
- _events.ScheduleEvent(EVENT_SHACKLES, 13000);
+ _events.ScheduleEvent(EVENT_SHACKLES, 13000);
_events.ScheduleEvent(EVENT_WILD_BEATDOWN, 17000);
}
void UpdateAI(uint32 diff) override
{
-
_events.Update(diff);
- if (!UpdateVictim())
+ if (!_combatPhase)
{
while (uint32 eventId = _events.ExecuteEvent())
{
@@ -242,6 +286,9 @@ class npc_twilight_torturer : public CreatureScript
return;
}
+ if (!UpdateVictim())
+ return;
+
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
@@ -266,8 +313,9 @@ class npc_twilight_torturer : public CreatureScript
}
private:
- EventMap _events;
+ EventMap _events;
InstanceScript* _instance;
+ bool _combatPhase;
};
CreatureAI* GetAI(Creature* creature) const
@@ -306,12 +354,14 @@ class npc_twilight_sadist : public CreatureScript
void Reset() override
{
+ _combatPhase = false;
if(!me->GetWaypointPath())
_events.ScheduleEvent(EVENT_INFLICT_PAIN_TS, urand(6000, 18000));
}
void EnterCombat(Unit* /*who*/) override
{
+ _combatPhase = true;
_events.ScheduleEvent(EVENT_INFLICT_PAIN_TS, 9000);
_events.ScheduleEvent(EVENT_HEAT_SEEKER_BLADE, 13000);
_events.ScheduleEvent(EVENT_SHORT_THROW, 17000);
@@ -320,10 +370,9 @@ class npc_twilight_sadist : public CreatureScript
void UpdateAI(uint32 diff) override
{
-
_events.Update(diff);
- if (!UpdateVictim())
+ if (!_combatPhase)
{
while (uint32 eventId = _events.ExecuteEvent())
{
@@ -340,6 +389,9 @@ class npc_twilight_sadist : public CreatureScript
return;
}
+ if (!UpdateVictim())
+ return;
+
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
@@ -364,8 +416,9 @@ class npc_twilight_sadist : public CreatureScript
}
private:
- EventMap _events;
+ EventMap _events;
InstanceScript* _instance;
+ bool _combatPhase;
};
CreatureAI* GetAI(Creature* creature) const
@@ -415,26 +468,11 @@ class npc_mad_prisoner : public CreatureScript
void UpdateAI(uint32 diff) override
{
+ if (!UpdateVictim())
+ return;
_events.Update(diff);
- if (!UpdateVictim())
- {
- while (uint32 eventId = _events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_INFLICT_PAIN_MP1:
- DoCast(me, SPELL_INFLICT_PAIN);
- _events.ScheduleEvent(EVENT_INFLICT_PAIN_MP1, urand(25000, 32000));
- break;
- default:
- break;
- }
- }
- return;
- }
-
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
@@ -459,7 +497,7 @@ class npc_mad_prisoner : public CreatureScript
}
private:
- EventMap _events;
+ EventMap _events;
InstanceScript* _instance;
};
@@ -503,26 +541,11 @@ class npc_crazed_mage : public CreatureScript
void UpdateAI(uint32 diff) override
{
+ if (!UpdateVictim())
+ return;
_events.Update(diff);
- if (!UpdateVictim())
- {
- while (uint32 eventId = _events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_INFLICT_PAIN_MP2:
- DoCast(me, SPELL_INFLICT_PAIN);
- _events.ScheduleEvent(EVENT_INFLICT_PAIN_MP2, urand(25000, 32000));
- break;
- default:
- break;
- }
- }
- return;
- }
-
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_corla.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_corla.cpp
index e6407047d6d..fbb2ac064a5 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_corla.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_corla.cpp
@@ -30,13 +30,19 @@ enum Text
enum Spells
{
+ SPELL_EVOLUTION = 75610,
+ SPELL_DRAIN_ESSENSE = 75645,
SPELL_SHADOW_POWER = 35322,
H_SPELL_SHADOW_POWER = 39193
};
enum Events
{
-
+ // Out of combat events
+ EVENT_DRAIN_ESSENSE = 1,
+ EVENT_STOP_DRAIN_ESSENSE = 2,
+ EVENT_EVOLUTION = 3
+ // Combat events
};
class boss_corla : public CreatureScript
@@ -50,13 +56,16 @@ class boss_corla : public CreatureScript
void Reset() override
{
-
+ combatPhase = false;
+ events.ScheduleEvent(EVENT_DRAIN_ESSENSE, 2000);
}
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(YELL_AGGRO);
+ events.Reset();
+ combatPhase = true;
}
void KilledUnit(Unit* /*victim*/) override
@@ -72,11 +81,38 @@ class boss_corla : public CreatureScript
void UpdateAI(uint32 /*diff*/) override
{
- if (!UpdateVictim())
+ events.Update(diff);
+
+ if (!combatPhase)
+ {
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_DRAIN_ESSENSE:
+ DoCast(me, SPELL_DRAIN_ESSENSE);
+ events.ScheduleEvent(EVENT_STOP_DRAIN_ESSENSE, 15000);
+ break;
+ case EVENT_STOP_DRAIN_ESSENSE:
+ me->InterruptSpell(CURRENT_CHANNELED_SPELL);
+ events.ScheduleEvent(EVENT_EVOLUTION, 2000);
+ break;
+ case EVENT_EVOLUTION:
+ DoCast(me, SPELL_EVOLUTION);
+ events.ScheduleEvent(EVENT_DRAIN_ESSENSE, 2000);
+ break;
+ default:
+ break;
+ }
+ }
return;
+ }
DoMeleeAttackIfReady();
}
+
+ private:
+ bool combatPhase;
};
CreatureAI* GetAI(Creature* creature) const
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_romogg_bonecrusher.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_romogg_bonecrusher.cpp
index 240d1f661b7..708204a7239 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_romogg_bonecrusher.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/boss_romogg_bonecrusher.cpp
@@ -48,7 +48,7 @@ enum Events
Position const SummonPos[1] =
{
- { 249.2639f, 949.1614f, 191.7866f, 3.141593f }
+ { 249.2639f, 949.1614f, 191.7866f, 3.141593f } // Two more to add
};
class boss_romogg_bonecrusher : public CreatureScript