diff options
Diffstat (limited to 'src/server/scripts/Kalimdor')
| -rw-r--r-- | src/server/scripts/Kalimdor/dustwallow_marsh.cpp | 145 | 
1 files changed, 61 insertions, 84 deletions
diff --git a/src/server/scripts/Kalimdor/dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/dustwallow_marsh.cpp index b38e95a4f87..5c4c134ad4c 100644 --- a/src/server/scripts/Kalimdor/dustwallow_marsh.cpp +++ b/src/server/scripts/Kalimdor/dustwallow_marsh.cpp @@ -25,7 +25,6 @@ EndScriptData */  /* ContentData  mobs_risen_husk_spirit -npc_restless_apparition  npc_deserter_agitator  npc_lady_jaina_proudmoore  npc_nat_pagle @@ -40,114 +39,93 @@ EndContentData */  ## mobs_risen_husk_spirit  ######*/ -enum eHuskSpirit +enum HauntingWitchHill  { +    // Quest      QUEST_WHATS_HAUNTING_WITCH_HILL     = 11180, +    // General spells      SPELL_SUMMON_RESTLESS_APPARITION    = 42511, -    SPELL_CONSUME_FLESH                 = 37933,               //Risen Husk -    SPELL_INTANGIBLE_PRESENCE           = 43127,               //Risen Spirit +    SPELL_WITCH_HILL_INFORMATION_CREDIT = 42512, +    // Risen Husk specific +    SPELL_CONSUME_FLESH                 = 37933,      NPC_RISEN_HUSK                      = 23555, + +    // Risen Spirit specific +    SPELL_INTANGIBLE_PRESENCE           = 43127,      NPC_RISEN_SPIRIT                    = 23554, -    NPC_RESTLESS_APPARITION             = 23861 + +    // Events +    EVENT_CONSUME_FLESH                 = 0, +    EVENT_INTANGIBLE_PRESENCE           = 1,  };  class mobs_risen_husk_spirit : public CreatureScript  { -public: -    mobs_risen_husk_spirit() : CreatureScript("mobs_risen_husk_spirit") { } - -    CreatureAI* GetAI(Creature* pCreature) const -    { -        return new mobs_risen_husk_spiritAI (pCreature); -    } - -    struct mobs_risen_husk_spiritAI : public ScriptedAI -    { -        mobs_risen_husk_spiritAI(Creature *c) : ScriptedAI(c) {} - -        uint32 m_uiConsumeFlesh_Timer; -        uint32 m_uiIntangiblePresence_Timer; - -        void Reset() -        { -            m_uiConsumeFlesh_Timer = 10000; -            m_uiIntangiblePresence_Timer = 5000; -        } +    public: +        mobs_risen_husk_spirit() : CreatureScript("mobs_risen_husk_spirit") { } -        void UpdateAI(const uint32 uiDiff) +        struct mobs_risen_husk_spiritAI : public ScriptedAI          { -            if (!UpdateVictim()) -                return; +            mobs_risen_husk_spiritAI(Creature* creature) : ScriptedAI(creature) { } -            if (m_uiConsumeFlesh_Timer <= uiDiff) +            void Reset()              { +                events.Reset();                  if (me->GetEntry() == NPC_RISEN_HUSK) -                    DoCast(me->getVictim(), SPELL_CONSUME_FLESH); - -                m_uiConsumeFlesh_Timer = 15000; +                    events.ScheduleEvent(EVENT_CONSUME_FLESH, 5000); +                else if (me->GetEntry() == NPC_RISEN_SPIRIT) +                    events.ScheduleEvent(EVENT_INTANGIBLE_PRESENCE, 5000);              } -            else -                m_uiConsumeFlesh_Timer -= uiDiff; -            if (m_uiIntangiblePresence_Timer <= uiDiff) +            void JustDied(Unit* killer)              { -                if (me->GetEntry() == NPC_RISEN_SPIRIT) -                    DoCast(me->getVictim(), SPELL_INTANGIBLE_PRESENCE); - -                m_uiIntangiblePresence_Timer = 20000; -            } -            else -                m_uiIntangiblePresence_Timer -= uiDiff; - -            DoMeleeAttackIfReady(); -        } - -        void JustDied(Unit* pKiller) -        { -            if (pKiller->GetTypeId() == TYPEID_PLAYER) -                if (CAST_PLR(pKiller)->GetQuestStatus(QUEST_WHATS_HAUNTING_WITCH_HILL) == QUEST_STATUS_INCOMPLETE) +                if (killer->GetTypeId() == TYPEID_PLAYER)                  { -                    DoCast(pKiller, SPELL_SUMMON_RESTLESS_APPARITION, true); -                    CAST_PLR(pKiller)->KilledMonsterCredit(NPC_RESTLESS_APPARITION, 0); +                    if (killer->ToPlayer()->GetQuestStatus(QUEST_WHATS_HAUNTING_WITCH_HILL) == QUEST_STATUS_INCOMPLETE) +                    { +                        DoCast(me, SPELL_SUMMON_RESTLESS_APPARITION, true); +                        DoCast(killer, SPELL_WITCH_HILL_INFORMATION_CREDIT, true); +                    }                  } -        } -    }; - -}; +            } -/*###### -## npc_restless_apparition -######*/ +            void UpdateAI(uint32 const diff) +            { +                if (!UpdateVictim()) +                    return; -enum eRestlessApparition -{ -    SAY_RESTLESS_1      = -1000469, -    SAY_RESTLESS_2      = -1000470, -    SAY_RESTLESS_3      = -1000471 -}; +                events.Update(diff); -class npc_restless_apparition : public CreatureScript -{ -public: -    npc_restless_apparition() : CreatureScript("npc_restless_apparition") { } +                while (uint32 eventId = events.ExecuteEvent()) +                { +                    switch (eventId) +                    { +                        case EVENT_CONSUME_FLESH: +                            DoCastVictim(SPELL_CONSUME_FLESH); +                            events.ScheduleEvent(EVENT_CONSUME_FLESH, 15000); +                            break; +                        case EVENT_INTANGIBLE_PRESENCE: +                            DoCastVictim(SPELL_INTANGIBLE_PRESENCE); +                            events.ScheduleEvent(EVENT_INTANGIBLE_PRESENCE, 15000); +                            break; +                        default: +                            break; +                    } +                } -    CreatureAI* GetAI(Creature* pCreature) const -    { -        return new npc_restless_apparitionAI (pCreature); -    } +                DoMeleeAttackIfReady(); +            } -    struct npc_restless_apparitionAI : public ScriptedAI -    { -        npc_restless_apparitionAI(Creature* pCreature) : ScriptedAI(pCreature) {} +        private: +            EventMap events; +        }; -        void Reset() +        CreatureAI* GetAI(Creature* creature) const          { -            DoScriptText(RAND(SAY_RESTLESS_1, SAY_RESTLESS_2, SAY_RESTLESS_3), me); +            return new mobs_risen_husk_spiritAI (creature);          } -    }; -  };  /*###### @@ -580,9 +558,9 @@ public:  }; -///////////////////// -/// npc_stinky -///////////////////// +/*###### +## npc_stinky +######*/  enum eStinky  { @@ -709,7 +687,6 @@ public:  void AddSC_dustwallow_marsh()  {      new mobs_risen_husk_spirit(); -    new npc_restless_apparition();      new npc_lady_jaina_proudmoore();      new npc_nat_pagle();      new npc_private_hendel();  | 
