aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkaelima <jeppo_meyer@msn.com>2011-05-07 17:30:17 +0200
committerkaelima <jeppo_meyer@msn.com>2011-05-07 17:30:17 +0200
commit985c85f44e8ebf60c6ef4ba9a2fb8f14cc6b8dfd (patch)
treece96e29dff34df50a42f944ebe67cc699443b643 /src
parent617d77c3b3fa8026091cfd6dad7485895dfb3b6f (diff)
Scripts/Dustwallow Marsh: Fix quest 11180 (What's Haunting Witch Hill?)
Move some parts to SAI.
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Kalimdor/dustwallow_marsh.cpp145
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();