Skip to content

Commit

Permalink
Improve three drakes scripts in BWL
Browse files Browse the repository at this point in the history
* Shared abilities now also share mechanics and timers
* Improve a few timers
* Add Thrash ability
* Use correct spell ID for Wing Buffet
Thanks @Tobischinki for his precious help
  • Loading branch information
cala committed Nov 1, 2017
1 parent 9836d97 commit 5ab9c71
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@

/* ScriptData
SDName: Boss_Ebonroc
SD%Complete: 90
SDComment: Thrash is missing
SD%Complete: 100
SDComment:
SDCategory: Blackwing Lair
EndScriptData */

Expand All @@ -27,9 +27,9 @@ EndScriptData */
enum
{
SPELL_SHADOW_FLAME = 22539,
SPELL_WING_BUFFET = 18500,
SPELL_WING_BUFFET = 23339,
SPELL_SHADOW_OF_EBONROC = 23340,
SPELL_THRASH = 3391, // TODO missing
SPELL_THRASH = 3391,
};

struct boss_ebonrocAI : public ScriptedAI
Expand All @@ -44,12 +44,14 @@ struct boss_ebonrocAI : public ScriptedAI

uint32 m_uiShadowFlameTimer;
uint32 m_uiWingBuffetTimer;
uint32 m_uiThrashTimer;
uint32 m_uiShadowOfEbonrocTimer;

void Reset() override
{
m_uiShadowFlameTimer = 15000; // These times are probably wrong
m_uiWingBuffetTimer = 30000;
m_uiShadowFlameTimer = 18 * IN_MILLISECONDS;
m_uiWingBuffetTimer = 30 * IN_MILLISECONDS;
m_uiThrashTimer = 6 * IN_MILLISECONDS;
m_uiShadowOfEbonrocTimer = 45000;
}

Expand Down Expand Up @@ -80,7 +82,7 @@ struct boss_ebonrocAI : public ScriptedAI
if (m_uiShadowFlameTimer < uiDiff)
{
if (DoCastSpellIfCan(m_creature, SPELL_SHADOW_FLAME) == CAST_OK)
m_uiShadowFlameTimer = urand(12000, 15000);
m_uiShadowFlameTimer = urand(15 * IN_MILLISECONDS, 18 * IN_MILLISECONDS);
}
else
m_uiShadowFlameTimer -= uiDiff;
Expand All @@ -89,16 +91,32 @@ struct boss_ebonrocAI : public ScriptedAI
if (m_uiWingBuffetTimer < uiDiff)
{
if (DoCastSpellIfCan(m_creature, SPELL_WING_BUFFET) == CAST_OK)
m_uiWingBuffetTimer = 25000;
{
if (m_creature->getThreatManager().getThreat(m_creature->getVictim()))
m_creature->getThreatManager().modifyThreatPercent(m_creature->getVictim(), -50);

m_uiWingBuffetTimer = urand(30 * IN_MILLISECONDS, 35 * IN_MILLISECONDS);
}
}
else
m_uiWingBuffetTimer -= uiDiff;

// Thrash Timer
if (m_uiThrashTimer < uiDiff)
{
if (DoCastSpellIfCan(m_creature, SPELL_THRASH) == CAST_OK)
{
m_uiThrashTimer = urand(2 * IN_MILLISECONDS, 6 * IN_MILLISECONDS);
}
}
else
m_uiThrashTimer -= uiDiff;

// Shadow of Ebonroc Timer
if (m_uiShadowOfEbonrocTimer < uiDiff)
{
if (DoCastSpellIfCan(m_creature->getVictim(), SPELL_SHADOW_OF_EBONROC) == CAST_OK)
m_uiShadowOfEbonrocTimer = urand(25000, 35000);
m_uiShadowOfEbonrocTimer = urand(25 * IN_MILLISECONDS, 35 * IN_MILLISECONDS);
}
else
m_uiShadowOfEbonrocTimer -= uiDiff;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@

/* ScriptData
SDName: Boss_Firemaw
SD%Complete: 80
SDComment: Thrash missing
SD%Complete: 100
SDComment:
SDCategory: Blackwing Lair
EndScriptData */

Expand All @@ -29,7 +29,7 @@ enum
SPELL_SHADOW_FLAME = 22539,
SPELL_WING_BUFFET = 23339,
SPELL_FLAME_BUFFET = 23341,
SPELL_THRASH = 3391, // TODO, missing
SPELL_THRASH = 3391,
};

struct boss_firemawAI : public ScriptedAI
Expand All @@ -44,13 +44,15 @@ struct boss_firemawAI : public ScriptedAI

uint32 m_uiShadowFlameTimer;
uint32 m_uiWingBuffetTimer;
uint32 m_uiThrashTimer;
uint32 m_uiFlameBuffetTimer;

void Reset() override
{
m_uiShadowFlameTimer = 30000; // These times are probably wrong
m_uiWingBuffetTimer = 24000;
m_uiFlameBuffetTimer = 5000;
m_uiShadowFlameTimer = 18 * IN_MILLISECONDS;
m_uiWingBuffetTimer = 30 * IN_MILLISECONDS;
m_uiThrashTimer = 6 * IN_MILLISECONDS;
m_uiFlameBuffetTimer = 5000;
}

void Aggro(Unit* /*pWho*/) override
Expand Down Expand Up @@ -80,7 +82,7 @@ struct boss_firemawAI : public ScriptedAI
if (m_uiShadowFlameTimer < uiDiff)
{
if (DoCastSpellIfCan(m_creature, SPELL_SHADOW_FLAME) == CAST_OK)
m_uiShadowFlameTimer = urand(15000, 18000);
m_uiShadowFlameTimer = urand(15 * IN_MILLISECONDS, 18 * IN_MILLISECONDS);
}
else
m_uiShadowFlameTimer -= uiDiff;
Expand All @@ -90,18 +92,26 @@ struct boss_firemawAI : public ScriptedAI
{
if (DoCastSpellIfCan(m_creature, SPELL_WING_BUFFET) == CAST_OK)
{
if (Unit* pTarget = m_creature->getVictim())
{
if (m_creature->getThreatManager().getThreat(pTarget))
m_creature->getThreatManager().modifyThreatPercent(pTarget, -75);
}
if (m_creature->getThreatManager().getThreat(m_creature->getVictim()))
m_creature->getThreatManager().modifyThreatPercent(m_creature->getVictim(), -50);

m_uiWingBuffetTimer = 25000;
m_uiWingBuffetTimer = urand(30 * IN_MILLISECONDS, 35 * IN_MILLISECONDS);
}
}
else
m_uiWingBuffetTimer -= uiDiff;

// Thrash Timer
if (m_uiThrashTimer < uiDiff)
{
if (DoCastSpellIfCan(m_creature, SPELL_THRASH) == CAST_OK)
{
m_uiThrashTimer = urand(2 * IN_MILLISECONDS, 6 * IN_MILLISECONDS);
}
}
else
m_uiThrashTimer -= uiDiff;

// Flame Buffet Timer
if (m_uiFlameBuffetTimer < uiDiff)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@

/* ScriptData
SDName: Boss_Flamegor
SD%Complete: 90
SDComment: Thrash is missing
SD%Complete: 100
SDComment:
SDCategory: Blackwing Lair
EndScriptData */

Expand All @@ -31,7 +31,7 @@ enum
SPELL_SHADOW_FLAME = 22539,
SPELL_WING_BUFFET = 23339,
SPELL_FRENZY = 23342, // This spell periodically triggers fire nova
SPELL_THRASH = 3391, // TODO missing
SPELL_THRASH = 3391,
};

struct boss_flamegorAI : public ScriptedAI
Expand All @@ -46,13 +46,15 @@ struct boss_flamegorAI : public ScriptedAI

uint32 m_uiShadowFlameTimer;
uint32 m_uiWingBuffetTimer;
uint32 m_uiThrashTimer;
uint32 m_uiFrenzyTimer;

void Reset() override
{
m_uiShadowFlameTimer = 21000; // These times are probably wrong
m_uiWingBuffetTimer = 35000;
m_uiFrenzyTimer = 10000;
m_uiShadowFlameTimer = 18 * IN_MILLISECONDS;
m_uiWingBuffetTimer = 30 * IN_MILLISECONDS;
m_uiThrashTimer = 6 * IN_MILLISECONDS;
m_uiFrenzyTimer = 10000;
}

void Aggro(Unit* /*pWho*/) override
Expand Down Expand Up @@ -82,7 +84,7 @@ struct boss_flamegorAI : public ScriptedAI
if (m_uiShadowFlameTimer < uiDiff)
{
if (DoCastSpellIfCan(m_creature, SPELL_SHADOW_FLAME) == CAST_OK)
m_uiShadowFlameTimer = urand(15000, 22000);
m_uiShadowFlameTimer = urand(15 * IN_MILLISECONDS, 18 * IN_MILLISECONDS);
}
else
m_uiShadowFlameTimer -= uiDiff;
Expand All @@ -92,25 +94,33 @@ struct boss_flamegorAI : public ScriptedAI
{
if (DoCastSpellIfCan(m_creature, SPELL_WING_BUFFET) == CAST_OK)
{
if (Unit* pTarget = m_creature->getVictim())
{
if (m_creature->getThreatManager().getThreat(pTarget))
m_creature->getThreatManager().modifyThreatPercent(pTarget, -75);
}
if (m_creature->getThreatManager().getThreat(m_creature->getVictim()))
m_creature->getThreatManager().modifyThreatPercent(m_creature->getVictim(), -50);

m_uiWingBuffetTimer = 25000;
m_uiWingBuffetTimer = urand(30 * IN_MILLISECONDS, 35 * IN_MILLISECONDS);
}
}
else
m_uiWingBuffetTimer -= uiDiff;

// Thrash Timer
if (m_uiThrashTimer < uiDiff)
{
if (DoCastSpellIfCan(m_creature, SPELL_THRASH) == CAST_OK)
{
m_uiThrashTimer = urand(2 * IN_MILLISECONDS, 6 * IN_MILLISECONDS);
}
}
else
m_uiThrashTimer -= uiDiff;

// Frenzy Timer
if (m_uiFrenzyTimer < uiDiff)
{
if (DoCastSpellIfCan(m_creature, SPELL_FRENZY) == CAST_OK)
{
DoScriptText(EMOTE_GENERIC_FRENZY, m_creature);
m_uiFrenzyTimer = urand(8000, 10000);
m_uiFrenzyTimer = urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS);
}
}
else
Expand Down

0 comments on commit 5ab9c71

Please sign in to comment.