aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp54
1 files changed, 52 insertions, 2 deletions
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
index e96801f3ecb..0cf69eeb537 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
@@ -61,7 +61,7 @@ enum eEnums
//OTHER SPELLS
//SPELL_CHARGE_UP = 52098, // only used when starting walk from one platform to the other
- //SPELL_TEMPORARY_ELECTRICAL_CHARGE = 52092, // triggered part of above
+ SPELL_TEMPORARY_ELECTRICAL_CHARGE = 52092, // triggered part of above
NPC_STORMFORGED_LIEUTENANT = 29240,
SPELL_ARC_WELD = 59085,
@@ -77,6 +77,8 @@ enum eEnums
STANCE_BATTLE = 2
};
+#define DATA_LIGHTNING_STRUCK 1834
+
/*######
## boss_bjarngrim
######*/
@@ -98,11 +100,14 @@ public:
m_instance = creature->GetInstanceScript();
m_uiStance = STANCE_DEFENSIVE;
memset(&m_auiStormforgedLieutenantGUID, 0, sizeof(m_auiStormforgedLieutenantGUID));
+ canBuff = true;
}
InstanceScript* m_instance;
bool m_bIsChangingStance;
+ bool achiLightningStruck;
+ bool canBuff;
uint8 m_uiChargingStatus;
uint8 m_uiStance;
@@ -126,6 +131,11 @@ public:
void Reset()
{
+ if (canBuff)
+ if (!me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE))
+ me->AddAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE, me);
+
+ achiLightningStruck = false;
m_bIsChangingStance = false;
m_uiChargingStatus = 0;
@@ -167,8 +177,21 @@ public:
m_instance->SetData(TYPE_BJARNGRIM, NOT_STARTED);
}
+ void EnterEvadeMode()
+ {
+ if (me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE))
+ canBuff = true;
+ else
+ canBuff = false;
+
+ ScriptedAI::EnterEvadeMode();
+ }
+
void EnterCombat(Unit* /*who*/)
{
+ if (me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE))
+ achiLightningStruck = true;
+
DoScriptText(SAY_AGGRO, me);
//must get both lieutenants here and make sure they are with him
@@ -178,6 +201,14 @@ public:
m_instance->SetData(TYPE_BJARNGRIM, IN_PROGRESS);
}
+ uint32 GetData(uint32 type)
+ {
+ if (type == DATA_LIGHTNING_STRUCK)
+ return achiLightningStruck ? 1 : 0;
+
+ return 0;
+ }
+
void KilledUnit(Unit* /*victim*/)
{
DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me);
@@ -211,7 +242,7 @@ public:
void UpdateAI(const uint32 uiDiff)
{
//Return since we have no target
- if (!UpdateVictim())
+ if (!UpdateVictim())
return;
// Change stance
@@ -432,8 +463,27 @@ public:
};
+class achievement_lightning_struck : public AchievementCriteriaScript
+{
+ public:
+ achievement_lightning_struck() : AchievementCriteriaScript("achievement_lightning_struck") { }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* bjarngrim = target->ToCreature())
+ if (bjarngrim->AI()->GetData(DATA_LIGHTNING_STRUCK))
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_bjarngrim()
{
new boss_bjarngrim();
new mob_stormforged_lieutenant();
+ new achievement_lightning_struck();
}