fix(Core/TempleOfAhnQiraj): Huhuran timers + EventMap::Repeat (#13182)
fix(Core/TempleOfAhnQiraj): Huhuran timers + EventMap::Repeat using std::chrono
This commit is contained in:
@@ -106,6 +106,11 @@ void EventMap::Repeat(Milliseconds time)
|
|||||||
RepeatEvent(time.count());
|
RepeatEvent(time.count());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EventMap::Repeat(Milliseconds minTime, Milliseconds maxTime)
|
||||||
|
{
|
||||||
|
RepeatEvent(randtime(minTime, maxTime).count());
|
||||||
|
}
|
||||||
|
|
||||||
uint32 EventMap::ExecuteEvent()
|
uint32 EventMap::ExecuteEvent()
|
||||||
{
|
{
|
||||||
while (!Empty())
|
while (!Empty())
|
||||||
|
|||||||
@@ -198,6 +198,14 @@ public:
|
|||||||
*/
|
*/
|
||||||
void Repeat(Milliseconds time);
|
void Repeat(Milliseconds time);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name RepeatEvent
|
||||||
|
* @brief Repeats the most recently executed event.
|
||||||
|
* @param minTime The minimum time until the event occurs as std::chrono type.
|
||||||
|
* @param maxTime The maximum time until the event occurs as std::chrono type.
|
||||||
|
*/
|
||||||
|
void Repeat(Milliseconds minTime, Milliseconds maxTime);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @name ExecuteEvent
|
* @name ExecuteEvent
|
||||||
* @brief Returns the next event to execute and removes it from map.
|
* @brief Returns the next event to execute and removes it from map.
|
||||||
|
|||||||
@@ -35,8 +35,7 @@ enum Spells
|
|||||||
SPELL_WYVERN_STING = 26180,
|
SPELL_WYVERN_STING = 26180,
|
||||||
SPELL_ACID_SPIT = 26050,
|
SPELL_ACID_SPIT = 26050,
|
||||||
SPELL_WYVERN_STING_DAMAGE = 26233,
|
SPELL_WYVERN_STING_DAMAGE = 26233,
|
||||||
SPELL_POISON_BOLT = 26052,
|
SPELL_POISON_BOLT = 26052
|
||||||
SPELL_HARD_ENRAGE = 26662
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Events
|
enum Events
|
||||||
@@ -54,18 +53,18 @@ struct boss_huhuran : public BossAI
|
|||||||
|
|
||||||
void Reset() override
|
void Reset() override
|
||||||
{
|
{
|
||||||
_Reset();
|
BossAI::Reset();
|
||||||
_berserk = false;
|
_berserk = false;
|
||||||
_hardEnrage = false;
|
_hardEnrage = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnterCombat(Unit* /*who*/) override
|
void EnterCombat(Unit* /*who*/) override
|
||||||
{
|
{
|
||||||
events.ScheduleEvent(EVENT_FRENZY, urand(25000, 35000));
|
events.ScheduleEvent(EVENT_FRENZY, 12s, 21s);
|
||||||
events.ScheduleEvent(EVENT_WYVERN_STING, urand(18000, 28000));
|
events.ScheduleEvent(EVENT_WYVERN_STING, 25s, 43s);
|
||||||
events.ScheduleEvent(EVENT_ACID_SPIT, 8000);
|
events.ScheduleEvent(EVENT_ACID_SPIT, 1s, 20s);
|
||||||
events.ScheduleEvent(EVENT_NOXIOUS_POISON, urand(10000, 20000));
|
events.ScheduleEvent(EVENT_NOXIOUS_POISON, 10s, 22s);
|
||||||
events.ScheduleEvent(EVENT_HARD_ENRAGE, 300000);
|
events.ScheduleEvent(EVENT_HARD_ENRAGE, 5min);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DamageTaken(Unit*, uint32& /*damage*/, DamageEffectType, SpellSchoolMask) override
|
void DamageTaken(Unit*, uint32& /*damage*/, DamageEffectType, SpellSchoolMask) override
|
||||||
@@ -74,6 +73,7 @@ struct boss_huhuran : public BossAI
|
|||||||
{
|
{
|
||||||
DoCastSelf(SPELL_BERSERK, true);
|
DoCastSelf(SPELL_BERSERK, true);
|
||||||
me->TextEmote(EMOTE_BERSERK);
|
me->TextEmote(EMOTE_BERSERK);
|
||||||
|
events.CancelEvent(EVENT_FRENZY);
|
||||||
_berserk = true;
|
_berserk = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -91,36 +91,40 @@ struct boss_huhuran : public BossAI
|
|||||||
case EVENT_FRENZY:
|
case EVENT_FRENZY:
|
||||||
DoCastSelf(SPELL_FRENZY, true);
|
DoCastSelf(SPELL_FRENZY, true);
|
||||||
Talk(EMOTE_FRENZY_KILL);
|
Talk(EMOTE_FRENZY_KILL);
|
||||||
events.RepeatEvent(urand(25000, 35000));
|
events.Repeat(12s, 21s);
|
||||||
break;
|
break;
|
||||||
case EVENT_WYVERN_STING:
|
case EVENT_WYVERN_STING:
|
||||||
me->CastCustomSpell(SPELL_WYVERN_STING, SPELLVALUE_MAX_TARGETS, 10, me, true);
|
me->CastCustomSpell(SPELL_WYVERN_STING, SPELLVALUE_MAX_TARGETS, 10, me, true);
|
||||||
events.RepeatEvent(urand(15000, 32000));
|
events.Repeat(25s, 43s);
|
||||||
break;
|
break;
|
||||||
case EVENT_ACID_SPIT:
|
case EVENT_ACID_SPIT:
|
||||||
DoCastVictim(SPELL_ACID_SPIT);
|
DoCastVictim(SPELL_ACID_SPIT);
|
||||||
events.RepeatEvent(urand(5000, 10000));
|
events.Repeat(1s, 20s);
|
||||||
break;
|
break;
|
||||||
case EVENT_NOXIOUS_POISON:
|
case EVENT_NOXIOUS_POISON:
|
||||||
DoCastRandomTarget(SPELL_NOXIOUS_POISON, 0, 100, true);
|
DoCastRandomTarget(SPELL_NOXIOUS_POISON, 0, 100.f, true);
|
||||||
events.RepeatEvent(urand(12000, 24000));
|
events.Repeat(10s, 22s);
|
||||||
break;
|
break;
|
||||||
case EVENT_HARD_ENRAGE:
|
case EVENT_HARD_ENRAGE:
|
||||||
if (!_hardEnrage)
|
if (!_hardEnrage)
|
||||||
{
|
{
|
||||||
DoCastSelf(SPELL_HARD_ENRAGE, true);
|
DoCastSelf(SPELL_BERSERK, true);
|
||||||
|
events.CancelEvent(EVENT_FRENZY);
|
||||||
_hardEnrage = true;
|
_hardEnrage = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DoCastAOE(SPELL_POISON_BOLT);
|
DoCastAOE(SPELL_POISON_BOLT);
|
||||||
}
|
}
|
||||||
events.RepeatEvent(3000);
|
events.Repeat(2s);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool _berserk;
|
bool _berserk;
|
||||||
bool _hardEnrage;
|
bool _hardEnrage;
|
||||||
|
|||||||
Reference in New Issue
Block a user