aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWarpten <vertozor@gmail.com>2013-01-16 06:51:59 +0100
committerWarpten <vertozor@gmail.com>2013-01-16 06:51:59 +0100
commit803bf2f9cc1fa5f23d51d3d5c9f93b0fd49d0109 (patch)
tree180fa261c6584a7d755fb927dec9750f873a469e
parentace7bbeddf30a4d83df7500bce93348b63edbb6e (diff)
Scripts/ZulGurub:
* Fixed non-PCH compile. * Changed some codestyle on Mandokir. * Fixed compile warnings and a few typos. * Remove instance checks and use a wrapper to get AIs.
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp123
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h14
3 files changed, 69 insertions, 70 deletions
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
index 195a3b198f6..0a8b280de5b 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
@@ -23,10 +23,12 @@ SDComment: Ohgan function needs improvements.
SDCategory: Zul'Gurub
EndScriptData */
+#include "zulgurub.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "Spell.h"
-#include "zulgurub.h"
+#include "SpellAuras.h"
+#include "SpellScript.h"
enum Says
{
@@ -108,10 +110,7 @@ class boss_mandokir : public CreatureScript
struct boss_mandokirAI : public BossAI
{
- boss_mandokirAI(Creature* creature) : BossAI(creature, DATA_MANDOKIR) {}
-
- uint8 killCount;
- uint64 chainedSpirtGUIDs[CHAINED_SPIRT_COUNT];
+ boss_mandokirAI(Creature* creature) : BossAI(creature, DATA_MANDOKIR) { }
void Reset()
{
@@ -121,10 +120,9 @@ class boss_mandokir : public CreatureScript
killCount = 0;
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
events.ScheduleEvent(EVENT_CHECK_START, 1000);
- if (uint64 speakerGUID = instance->GetData64(NPC_SPEAKER))
- if (Creature* speaker = Creature::GetCreature(*me, NPC_SPEAKER))
- if (!speaker->isAlive())
- speaker->Respawn(true);
+ if (Creature* speaker = Creature::GetCreature(*me, instance->GetData64(NPC_VILEBRANCH_SPEAKER)))
+ if (!speaker->isAlive())
+ speaker->Respawn(true);
}
summons.DespawnAll();
me->Mount(MODEL_OHGAN_MOUNT);
@@ -134,10 +132,8 @@ class boss_mandokir : public CreatureScript
{
// Do not want to unsummon Ohgan
for (int i = 0; i < CHAINED_SPIRT_COUNT; ++i)
- {
if (Creature* unsummon = Creature::GetCreature(*me, chainedSpirtGUIDs[i]))
unsummon->DespawnOrUnsummon();
- }
instance->SetBossState(DATA_MANDOKIR, DONE);
instance->SaveToDB();
}
@@ -159,8 +155,7 @@ class boss_mandokir : public CreatureScript
// Summon Chained Spirits
for (int i = 0; i < CHAINED_SPIRT_COUNT; ++i)
{
- Creature* chainedSpirt = NULL;
- chainedSpirt = me->SummonCreature(NPC_CHAINED_SPIRT, PosSummonChainedSpirits[i], TEMPSUMMON_CORPSE_DESPAWN);
+ Creature* chainedSpirt = me->SummonCreature(NPC_CHAINED_SPIRT, PosSummonChainedSpirits[i], TEMPSUMMON_CORPSE_DESPAWN);
chainedSpirtGUIDs[i] = chainedSpirt->GetGUID();
}
DoZoneInCombat();
@@ -168,18 +163,17 @@ class boss_mandokir : public CreatureScript
void KilledUnit(Unit* victim)
{
- if (victim->GetTypeId() == TYPEID_PLAYER)
+ if (victim->GetTypeId() != TYPEID_PLAYER)
+ return;
+
+ if (++killCount == 3)
{
- if (++killCount == 3 && instance)
- {
- Talk(SAY_DING_KILL);
- if (uint64 JindoGUID = instance->GetData64(DATA_JINDO))
- if (Creature* jTemp = Creature::GetCreature(*me, JindoGUID))
- if (jTemp->isAlive())
- jTemp->AI()->Talk(SAY_GRATS_JINDO);
- DoCast(me, SPELL_LEVEL_UP, true);
- killCount = 0;
- }
+ Talk(SAY_DING_KILL);
+ if (Creature* jindo = Creature::GetCreature(*me, instance->GetData64(DATA_JINDO)))
+ if (jindo->isAlive())
+ jindo->AI()->Talk(SAY_GRATS_JINDO);
+ DoCast(me, SPELL_LEVEL_UP, true);
+ killCount = 0;
}
}
@@ -191,8 +185,7 @@ class boss_mandokir : public CreatureScript
if (id == POINT_MANDOKIR_END)
{
me->SetHomePosition(PosMandokir[0]);
- if (instance)
- instance->SetBossState(DATA_MANDOKIR, NOT_STARTED);
+ instance->SetBossState(DATA_MANDOKIR, NOT_STARTED);
me->DespawnOrUnsummon(6000); // No idea how to respawn on wipe.
}
}
@@ -203,6 +196,7 @@ class boss_mandokir : public CreatureScript
events.Update(diff);
if (!UpdateVictim())
+ {
if (instance->GetBossState(DATA_MANDOKIR) == NOT_STARTED || instance->GetBossState(DATA_MANDOKIR) == SPECIAL)
{
while (uint32 eventId = events.ExecuteEvent())
@@ -221,7 +215,7 @@ class boss_mandokir : public CreatureScript
break;
case EVENT_STARTED:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
- me->GetMotionMaster()->MovePath(PATH_MANDOKIR,false);
+ me->GetMotionMaster()->MovePath(PATH_MANDOKIR, false);
break;
default:
break;
@@ -229,6 +223,7 @@ class boss_mandokir : public CreatureScript
}
}
return;
+ }
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
@@ -251,14 +246,13 @@ class boss_mandokir : public CreatureScript
events.ScheduleEvent(EVENT_WHIRLWIND, urand(22000, 26000));
break;
case EVENT_CHECK_OHGAN:
- if (instance)
- if (instance->GetBossState(DATA_OHGAN) == DONE)
- {
- DoCast(me, SPELL_FRENZY);
- Talk(SAY_OHGAN_DEAD);
- }
- else
- events.ScheduleEvent(EVENT_CHECK_OHGAN, 1000);
+ if (instance->GetBossState(DATA_OHGAN) == DONE)
+ {
+ DoCast(me, SPELL_FRENZY);
+ Talk(SAY_OHGAN_DEAD);
+ }
+ else
+ events.ScheduleEvent(EVENT_CHECK_OHGAN, 1000);
break;
case EVENT_WATCH_PLAYER:
if (Unit* player = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
@@ -269,8 +263,8 @@ class boss_mandokir : public CreatureScript
events.ScheduleEvent(EVENT_WATCH_PLAYER, urand(12000, 15000));
break;
case EVENT_CHARGE_PLAYER:
- DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 40, true), SPELL_CHARGE);
- events.ScheduleEvent(EVENT_CHARGE_PLAYER, urand(22000, 30000));
+ DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 40, true), SPELL_CHARGE);
+ events.ScheduleEvent(EVENT_CHARGE_PLAYER, urand(22000, 30000));
break;
default:
break;
@@ -279,17 +273,21 @@ class boss_mandokir : public CreatureScript
DoMeleeAttackIfReady();
}
+
+ private:
+ uint8 killCount;
+ uint64 chainedSpirtGUIDs[CHAINED_SPIRT_COUNT];
};
CreatureAI* GetAI(Creature* creature) const
{
- return new boss_mandokirAI(creature);
+ return GetZulGurubAI<boss_mandokirAI>(creature);
}
};
// Ohgan
-enum O_Spells
+enum OhganSpells
{
SPELL_SUNDERARMOR = 24317
};
@@ -300,13 +298,7 @@ class mob_ohgan : public CreatureScript
struct mob_ohganAI : public ScriptedAI
{
- mob_ohganAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = me->GetInstanceScript();
- }
-
- uint32 SunderArmor_Timer;
- InstanceScript* instance;
+ mob_ohganAI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { }
void Reset()
{
@@ -317,17 +309,15 @@ class mob_ohgan : public CreatureScript
void JustDied(Unit* /*killer*/)
{
- if (instance)
- instance->SetBossState(DATA_OHGAN, DONE);
+ instance->SetBossState(DATA_OHGAN, DONE);
}
- void UpdateAI (const uint32 diff)
+ void UpdateAI(const uint32 diff)
{
- //Return since we have no target
+ // Return since we have no target
if (!UpdateVictim())
return;
- //SunderArmor_Timer
if (SunderArmor_Timer <= diff)
{
DoCastVictim(SPELL_SUNDERARMOR, true);
@@ -336,17 +326,19 @@ class mob_ohgan : public CreatureScript
DoMeleeAttackIfReady();
}
+
+ private:
+ uint32 SunderArmor_Timer;
+ InstanceScript* instance;
};
CreatureAI* GetAI(Creature* creature) const
{
- return new mob_ohganAI(creature);
+ return GetZulGurubAI<mob_ohganAI>(creature);
}
};
-// Vilebranch Speaker
-
-enum VS_Spells
+enum VilebranchSpells
{
SPELL_DEMORALIZING_SHOUT = 13730,
SPELL_CLEAVE = 15284
@@ -358,14 +350,7 @@ class mob_vilebranch_speaker : public CreatureScript
struct mob_vilebranch_speakerAI : public ScriptedAI
{
- mob_vilebranch_speakerAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = me->GetInstanceScript();
- }
-
- uint32 demoralizing_Shout_Timer;
- uint32 cleave_Timer;
- InstanceScript* instance;
+ mob_vilebranch_speakerAI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { }
void Reset()
{
@@ -377,24 +362,21 @@ class mob_vilebranch_speaker : public CreatureScript
void JustDied(Unit* /*killer*/)
{
- if (instance)
- instance->SetBossState(DATA_MANDOKIR, SPECIAL);
+ instance->SetBossState(DATA_MANDOKIR, SPECIAL);
}
- void UpdateAI (const uint32 diff)
+ void UpdateAI(const uint32 diff)
{
// Return since we have no target
if (!UpdateVictim())
return;
- // demoralizing_Shout_Timer
if (demoralizing_Shout_Timer <= diff)
{
DoCast(me, SPELL_DEMORALIZING_SHOUT);
demoralizing_Shout_Timer = urand(22000, 30000);
} else demoralizing_Shout_Timer -= diff;
- // cleave_Timer
if (cleave_Timer <= diff)
{
DoCastVictim(SPELL_CLEAVE, true);
@@ -403,6 +385,11 @@ class mob_vilebranch_speaker : public CreatureScript
DoMeleeAttackIfReady();
}
+
+ private:
+ uint32 demoralizing_Shout_Timer;
+ uint32 cleave_Timer;
+ InstanceScript* instance;
};
CreatureAI* GetAI(Creature* creature) const
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
index 04af601868e..2e8bfd621b9 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
@@ -29,7 +29,7 @@ EndScriptData */
class instance_zulgurub : public InstanceMapScript
{
- public: instance_zulgurub(): InstanceMapScript("instance_zulgurub", 309) {}
+ public: instance_zulgurub(): InstanceMapScript(ZGScriptName, 309) {}
struct instance_zulgurub_InstanceMapScript : public InstanceScript
{
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h
index a5e23dc2e3f..34680447cd7 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h
@@ -20,6 +20,8 @@
uint32 const EncounterCount = 13;
+#define ZGScriptName "instance_zulgurub"
+
enum DataTypes
{
DATA_JEKLIK = 0, // Main boss
@@ -45,7 +47,7 @@ enum CreatureIds
NPC_JINDO_THE_HEXXER = 11380,
NPC_NIGHTMARE_ILLUSION = 15163,
NPC_ZULIAN_PROWLER = 15101,
- NPC_SPEAKER = 11391,
+ NPC_VILEBRANCH_SPEAKER = 11391,
NPC_SHADE_OF_JINDO = 14986,
NPC_SACRIFICED_TROLL = 14826,
NPC_OHGAN = 14988,
@@ -53,4 +55,14 @@ enum CreatureIds
NPC_MANDOKIR = 11382
};
+template<class AI>
+CreatureAI* GetZulGurubAI(Creature* creature)
+{
+ if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
+ if (instance->GetInstanceScript())
+ if (instance->GetScriptId() == sObjectMgr->GetScriptId(ZGScriptName))
+ return new AI(creature);
+ return NULL;
+}
+
#endif