mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
169 lines
5.8 KiB
C++
169 lines
5.8 KiB
C++
|
|
#include "ScriptMgr.h"
|
||
|
|
#include "SpellMgr.h"
|
||
|
|
#include "ScriptedCreature.h"
|
||
|
|
|
||
|
|
enum Texts
|
||
|
|
{
|
||
|
|
SAY_AGGRO = 0,
|
||
|
|
SAY_SLAY = 1,
|
||
|
|
SAY_DEATH = 2,
|
||
|
|
SAY_IMPENDING_DESPAIR = 3,
|
||
|
|
SAY_DEFILING_HORROR = 4,
|
||
|
|
SAY_SHADOW_NOVA = 5,
|
||
|
|
SAY_DECIMATE = 6,
|
||
|
|
SAY_ZOMBIES = 7,
|
||
|
|
SAY_PLAGUED_ZOMBIES = 8
|
||
|
|
};
|
||
|
|
|
||
|
|
enum Spells
|
||
|
|
{
|
||
|
|
SPELL_QUIVERING_STRIKE = 72422, //attack
|
||
|
|
SPELL_IMPENDING_DESPAIR = 72426, //stun
|
||
|
|
SPELL_DEFILING_HORROR = 72435, //bun fear
|
||
|
|
SPELL_HOPELESSNESS_1 = 72395, //bun curse
|
||
|
|
SPELL_HOPELESSNESS_2 = 72396, //bun curse
|
||
|
|
SPELL_HOPELESSNESS_3 = 72397, //bun curse
|
||
|
|
SPELL_SHADOW_NOVA = 36127, //boom nasol trebuie rar
|
||
|
|
SPELL_DECIMATE = 71123, //15% hp down
|
||
|
|
SPELL_AWAKEN_PLAGUED_ZOMBIES = 71159 //spawn Zombies
|
||
|
|
};
|
||
|
|
|
||
|
|
enum Events
|
||
|
|
{
|
||
|
|
EVENT_NONE,
|
||
|
|
EVENT_QUIVERING_STRIKE,
|
||
|
|
EVENT_IMPENDING_DESPAIR,
|
||
|
|
EVENT_DEFILING_HORROR,
|
||
|
|
EVENT_VOID_ZONE,
|
||
|
|
EVENT_SHADOW_NOVA,
|
||
|
|
EVENT_SUMMON_ZOMBIES
|
||
|
|
};
|
||
|
|
|
||
|
|
uint32 const HopelessnessHelper[3] = { SPELL_HOPELESSNESS_1, SPELL_HOPELESSNESS_2, SPELL_HOPELESSNESS_3 };
|
||
|
|
|
||
|
|
#define FALRIC_BOSS_ID 123411
|
||
|
|
|
||
|
|
//Zombalau - will rename later :)
|
||
|
|
class CustomBossFalric : public CreatureScript
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
CustomBossFalric() : CreatureScript("CustomBossFalric") { }
|
||
|
|
|
||
|
|
struct boss_falricAI : public BossAI
|
||
|
|
{
|
||
|
|
boss_falricAI(Creature* creature) : BossAI(creature, FALRIC_BOSS_ID)
|
||
|
|
{
|
||
|
|
Initialize();
|
||
|
|
}
|
||
|
|
|
||
|
|
void Initialize()
|
||
|
|
{
|
||
|
|
_hopelessnessCount = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
void Reset() override
|
||
|
|
{
|
||
|
|
BossAI::Reset();
|
||
|
|
Initialize();
|
||
|
|
}
|
||
|
|
|
||
|
|
void JustEngagedWith(Unit* /*who*/) override
|
||
|
|
{
|
||
|
|
Talk(SAY_AGGRO);
|
||
|
|
events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 9000);
|
||
|
|
events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 15000);
|
||
|
|
events.ScheduleEvent(EVENT_DEFILING_HORROR, 90000);
|
||
|
|
events.ScheduleEvent(EVENT_SHADOW_NOVA, 120000);
|
||
|
|
events.ScheduleEvent(EVENT_SUMMON_ZOMBIES, urand(20000, 22000));
|
||
|
|
}
|
||
|
|
|
||
|
|
void DoAction(int32 action) override
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
void DamageTaken(Unit* /*attacker*/, uint32& damage) override
|
||
|
|
{
|
||
|
|
if ((_hopelessnessCount < 1 && me->HealthBelowPctDamaged(66, damage))
|
||
|
|
|| (_hopelessnessCount < 2 && me->HealthBelowPctDamaged(33, damage))
|
||
|
|
|| (_hopelessnessCount < 3 && me->HealthBelowPctDamaged(10, damage)))
|
||
|
|
{
|
||
|
|
if (_hopelessnessCount)
|
||
|
|
me->RemoveOwnedAura(sSpellMgr->GetSpellIdForDifficulty(HopelessnessHelper[_hopelessnessCount - 1], me));
|
||
|
|
DoCast(me, HopelessnessHelper[_hopelessnessCount]);
|
||
|
|
++_hopelessnessCount;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void JustDied(Unit* /*killer*/) override
|
||
|
|
{
|
||
|
|
Talk(SAY_DEATH);
|
||
|
|
events.Reset();
|
||
|
|
}
|
||
|
|
|
||
|
|
void KilledUnit(Unit* who) override
|
||
|
|
{
|
||
|
|
if (who->GetTypeId() == TYPEID_PLAYER)
|
||
|
|
Talk(SAY_SLAY);
|
||
|
|
}
|
||
|
|
|
||
|
|
void UpdateAI(uint32 diff) override
|
||
|
|
{
|
||
|
|
if (!UpdateVictim())
|
||
|
|
return;
|
||
|
|
|
||
|
|
events.Update(diff);
|
||
|
|
|
||
|
|
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||
|
|
return;
|
||
|
|
|
||
|
|
switch (events.ExecuteEvent())
|
||
|
|
{
|
||
|
|
case EVENT_QUIVERING_STRIKE:
|
||
|
|
DoCastVictim(SPELL_QUIVERING_STRIKE);
|
||
|
|
events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 9000);
|
||
|
|
break;
|
||
|
|
case EVENT_IMPENDING_DESPAIR:
|
||
|
|
if (Unit* target = SelectTarget(SELECT_TARGET_MAXTHREAT, 0, 45.0f, true))
|
||
|
|
{
|
||
|
|
Talk(SAY_IMPENDING_DESPAIR);
|
||
|
|
DoCast(target, SPELL_IMPENDING_DESPAIR);
|
||
|
|
}
|
||
|
|
events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 15000);
|
||
|
|
break;
|
||
|
|
case EVENT_DEFILING_HORROR:
|
||
|
|
DoCastAOE(SPELL_DEFILING_HORROR);
|
||
|
|
events.ScheduleEvent(EVENT_DEFILING_HORROR, 90000);
|
||
|
|
break;
|
||
|
|
case EVENT_SHADOW_NOVA:
|
||
|
|
DoCastVictim(SPELL_SHADOW_NOVA, true);
|
||
|
|
Talk(SAY_SHADOW_NOVA);
|
||
|
|
events.ScheduleEvent(EVENT_SHADOW_NOVA, 120000);
|
||
|
|
break;
|
||
|
|
case EVENT_SUMMON_ZOMBIES:
|
||
|
|
Talk(SAY_PLAGUED_ZOMBIES);
|
||
|
|
for (uint32 i = 0; i < 7; ++i)
|
||
|
|
DoCast(me, SPELL_AWAKEN_PLAGUED_ZOMBIES, false);
|
||
|
|
events.ScheduleEvent(EVENT_SUMMON_ZOMBIES, urand(60000, 120000));
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
DoMeleeAttackIfReady();
|
||
|
|
}
|
||
|
|
|
||
|
|
private:
|
||
|
|
uint8 _hopelessnessCount;
|
||
|
|
};
|
||
|
|
|
||
|
|
CreatureAI* GetAI(Creature* creature) const override
|
||
|
|
{
|
||
|
|
return new boss_falricAI(creature);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
void AddCustomBossFalricScripts()
|
||
|
|
{
|
||
|
|
new CustomBossFalric();
|
||
|
|
}
|