16
16
17
17
/* ScriptData
18
18
SDName: Boss_Gehennas
19
- SD%Complete: 90
20
- SDComment:
19
+ SD%Complete: 100
20
+ SDComment: -
21
21
SDCategory: Molten Core
22
22
EndScriptData */
23
23
@@ -26,9 +26,10 @@ EndScriptData */
26
26
27
27
enum
28
28
{
29
- SPELL_SHADOW_BOLT = 19728 , // 19729 exists too, but can be reflected
29
+ SPELL_GEHENNAS_CURSE = 19716 ,
30
30
SPELL_RAIN_OF_FIRE = 19717 ,
31
- SPELL_GEHENNAS_CURSE = 19716
31
+ SPELL_SHADOW_BOLT_RANDOM = 19728 ,
32
+ SPELL_SHADOW_BOLT_TARGET = 19729 ,
32
33
};
33
34
34
35
struct boss_gehennasAI : public ScriptedAI
@@ -41,15 +42,17 @@ struct boss_gehennasAI : public ScriptedAI
41
42
42
43
ScriptedInstance* m_pInstance;
43
44
44
- uint32 m_uiShadowBoltTimer;
45
- uint32 m_uiRainOfFireTimer;
46
45
uint32 m_uiGehennasCurseTimer;
46
+ uint32 m_uiRainOfFireTimer;
47
+ uint32 m_uiShadowBoltRandomTimer;
48
+ uint32 m_uiShadowBoltTargetTimer;
47
49
48
50
void Reset () override
49
51
{
50
- m_uiShadowBoltTimer = 6000 ;
51
- m_uiRainOfFireTimer = 10000 ;
52
- m_uiGehennasCurseTimer = 12000 ;
52
+ m_uiGehennasCurseTimer = urand (5 * IN_MILLISECONDS, 10 * IN_MILLISECONDS);
53
+ m_uiRainOfFireTimer = urand (6 * IN_MILLISECONDS, 12 * IN_MILLISECONDS);
54
+ m_uiShadowBoltRandomTimer = urand (3 * IN_MILLISECONDS, 6 * IN_MILLISECONDS);
55
+ m_uiShadowBoltTargetTimer = urand (3 * IN_MILLISECONDS, 6 * IN_MILLISECONDS);
53
56
}
54
57
55
58
void Aggro (Unit* /* pwho*/ ) override
@@ -75,41 +78,42 @@ struct boss_gehennasAI : public ScriptedAI
75
78
if (!m_creature->SelectHostileTarget () || !m_creature->getVictim ())
76
79
return ;
77
80
78
- // ShadowBolt Timer
79
- if (m_uiShadowBoltTimer < uiDiff)
80
- {
81
- if (Unit* pTarget = m_creature->SelectAttackingTarget (ATTACKING_TARGET_RANDOM, 1 ))
82
- {
83
- if (DoCastSpellIfCan (pTarget, SPELL_SHADOW_BOLT) == CAST_OK)
84
- m_uiShadowBoltTimer = 7000 ;
85
- }
86
- else // In case someone attempts soloing, we don't need to scan for targets every tick
87
- m_uiShadowBoltTimer = 7000 ;
88
- }
89
- else
90
- m_uiShadowBoltTimer -= uiDiff;
91
-
92
- // Rain of Fire Timer
81
+ // Rain_of_Fire-Timer
93
82
if (m_uiRainOfFireTimer < uiDiff)
94
83
{
95
- if (Unit* pTarget = m_creature->SelectAttackingTarget (ATTACKING_TARGET_RANDOM, 0 ))
96
- {
97
- if (DoCastSpellIfCan (pTarget, SPELL_RAIN_OF_FIRE) == CAST_OK)
98
- m_uiRainOfFireTimer = urand (4000 , 12000 );
99
- }
84
+ if (DoCastSpellIfCan (m_creature->SelectAttackingTarget (ATTACKING_TARGET_RANDOM, 0 ), SPELL_RAIN_OF_FIRE) == CAST_OK)
85
+ m_uiRainOfFireTimer = urand (6 * IN_MILLISECONDS, 12 * IN_MILLISECONDS);
100
86
}
101
87
else
102
88
m_uiRainOfFireTimer -= uiDiff;
103
89
104
- // GehennasCurse Timer
90
+ // Gehennas_Curse- Timer
105
91
if (m_uiGehennasCurseTimer < uiDiff)
106
92
{
107
93
if (DoCastSpellIfCan (m_creature, SPELL_GEHENNAS_CURSE) == CAST_OK)
108
- m_uiGehennasCurseTimer = 30000 ;
94
+ m_uiGehennasCurseTimer = urand ( 25 * IN_MILLISECONDS, 30 * IN_MILLISECONDS) ;
109
95
}
110
96
else
111
97
m_uiGehennasCurseTimer -= uiDiff;
112
98
99
+ // Shadow_Bolt_Random-Timer
100
+ if (m_uiShadowBoltRandomTimer < uiDiff)
101
+ {
102
+ if (DoCastSpellIfCan (m_creature->SelectAttackingTarget (ATTACKING_TARGET_RANDOM, 0 ), SPELL_SHADOW_BOLT_RANDOM) == CAST_OK)
103
+ m_uiShadowBoltRandomTimer = urand (3 * IN_MILLISECONDS, 6 * IN_MILLISECONDS);
104
+ }
105
+ else
106
+ m_uiShadowBoltRandomTimer -= uiDiff;
107
+
108
+ // Shadow_Bolt_Target-Timer
109
+ if (m_uiShadowBoltTargetTimer < uiDiff)
110
+ {
111
+ if (DoCastSpellIfCan (m_creature->getVictim (), SPELL_SHADOW_BOLT_TARGET) == CAST_OK)
112
+ m_uiShadowBoltTargetTimer = urand (3 * IN_MILLISECONDS, 6 * IN_MILLISECONDS);
113
+ }
114
+ else
115
+ m_uiShadowBoltTargetTimer -= uiDiff;
116
+
113
117
DoMeleeAttackIfReady ();
114
118
}
115
119
};
0 commit comments