Pelf

falric

Dec 5th, 2011
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.04 KB | None | 0 0
  1. #include "ScriptPCH.h"
  2. #include "halls_of_reflection.h"
  3.  
  4. enum Yells
  5. {
  6.     SAY_AGGRO                                     = -1668050,
  7.     SAY_SLAY_1                                    = -1668051,
  8.     SAY_SLAY_2                                    = -1668052,
  9.     SAY_DEATH                                     = -1668053,
  10.     SAY_IMPENDING_DESPAIR                         = -1668054,
  11.     SAY_DEFILING_HORROR                           = -1668055,
  12. };
  13.  
  14. enum Spells
  15. {
  16.     SPELL_QUIVERING_STRIKE                        = 72422,
  17.     SPELL_IMPENDING_DESPAIR                       = 72426,
  18.     SPELL_DEFILING_HORROR                         = 72435,
  19.     SPELL_HOPELESSNESS                            = 72395,
  20.     H_SPELL_HOPELESSNESS                          = 72390, // TODO: not in dbc. Add in DB.
  21. };
  22.  
  23. enum Events
  24. {
  25.     EVENT_NONE,
  26.     EVENT_QUIVERING_STRIKE,
  27.     EVENT_IMPENDING_DESPAIR,
  28.     EVENT_DEFILING_HORROR,
  29. };
  30.  
  31. class boss_falric : public CreatureScript
  32. {
  33. public:
  34.     boss_falric() : CreatureScript("boss_falric") { }
  35.  
  36.     CreatureAI* GetAI(Creature* pCreature) const
  37.     {
  38.         return new boss_falricAI(pCreature);
  39.     }
  40.  
  41.     struct boss_falricAI : public boss_horAI
  42.     {
  43.         boss_falricAI(Creature *pCreature) : boss_horAI(pCreature) {
  44.         me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
  45.         me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_GRIP, true);}
  46.  
  47.         uint8 uiHopelessnessCount;
  48.  
  49.         void Reset()
  50.         {
  51.             boss_horAI::Reset();
  52.  
  53.             uiHopelessnessCount = 0;
  54.  
  55.             if (pInstance)
  56.                 pInstance->SetData(DATA_FALRIC_EVENT, NOT_STARTED);
  57.         }
  58.  
  59.         void EnterCombat(Unit* /*who*/)
  60.         {
  61.             DoScriptText(SAY_AGGRO, me);
  62.             if (pInstance)
  63.                 pInstance->SetData(DATA_FALRIC_EVENT, IN_PROGRESS);
  64.  
  65.             events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 23000);
  66.             events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 9000);
  67.             events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(25000,45000)); // TODO adjust timer.
  68.         }
  69.  
  70.         void JustDied(Unit* /*killer*/)
  71.         {
  72.             DoScriptText(SAY_DEATH, me);
  73.  
  74.             if (pInstance)
  75.                 pInstance->SetData(DATA_FALRIC_EVENT, DONE);
  76.         }
  77.  
  78.         void KilledUnit(Unit * /*victim*/)
  79.         {
  80.             DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), me);
  81.         }
  82.  
  83.         void UpdateAI(const uint32 diff)
  84.         {
  85.             // Return since we have no target
  86.             if (!UpdateVictim())
  87.                 return;
  88.  
  89.             events.Update(diff);
  90.  
  91.             if (me->HasUnitState(UNIT_STAT_CASTING))
  92.                 return;
  93.  
  94.             switch (events.ExecuteEvent())
  95.             {
  96.                 case EVENT_QUIVERING_STRIKE:
  97.                     DoCast(SPELL_QUIVERING_STRIKE);
  98.                     events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 10000);
  99.                     break;
  100.                 case EVENT_IMPENDING_DESPAIR:
  101.                     if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM))
  102.                     {
  103.                         DoScriptText(SAY_IMPENDING_DESPAIR, me);
  104.                         DoCast(pTarget, SPELL_IMPENDING_DESPAIR);
  105.                     }
  106.                     events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 13000);
  107.                     break;
  108.                 case EVENT_DEFILING_HORROR:
  109.                     DoCast(SPELL_DEFILING_HORROR);
  110.                     events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(25000,45000)); // TODO adjust timer.
  111.                     break;
  112.             }
  113.  
  114.             if ((uiHopelessnessCount < 1 && HealthBelowPct(66))
  115.                 || (uiHopelessnessCount < 2 && HealthBelowPct(33))
  116.                 || (uiHopelessnessCount < 3 && HealthBelowPct(10)))
  117.             {
  118.                 uiHopelessnessCount++;
  119.                 DoCast(DUNGEON_MODE(SPELL_HOPELESSNESS,H_SPELL_HOPELESSNESS));
  120.             }
  121.  
  122.             DoMeleeAttackIfReady();
  123.         }
  124.     };
  125.  
  126. };
  127.  
  128.  
  129. void AddSC_boss_falric()
  130. {
  131.     new boss_falric();
  132. }
  133.  
  134.  
Advertisement
Add Comment
Please, Sign In to add comment