Scripts/The Old Kingdom: Properly fixed achievement Respect Your Elders and small cleanup
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
DELETE FROM `disables` WHERE `entry`=7317 AND `sourceType`=4;
|
||||||
|
|
||||||
|
DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7317 AND `type`=11;
|
||||||
|
INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
|
||||||
|
VALUES
|
||||||
|
(7317,11,0,0,'achievement_respect_your_elders');
|
||||||
@@ -18,13 +18,6 @@
|
|||||||
#include "ScriptPCH.h"
|
#include "ScriptPCH.h"
|
||||||
#include "ahnkahet.h"
|
#include "ahnkahet.h"
|
||||||
|
|
||||||
bool DeadAhnkaharGuardian; // needed for achievement: Respect Your Elders(2038)
|
|
||||||
|
|
||||||
enum Achievements
|
|
||||||
{
|
|
||||||
ACHIEV_RESPECT_YOUR_ELDERS = 2038
|
|
||||||
};
|
|
||||||
|
|
||||||
//not in db
|
//not in db
|
||||||
enum Yells
|
enum Yells
|
||||||
{
|
{
|
||||||
@@ -53,18 +46,21 @@ enum Creatures
|
|||||||
MOB_AHNKAHAR_GUARDIAN_ENTRY = 30176
|
MOB_AHNKAHAR_GUARDIAN_ENTRY = 30176
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define ACTION_AHNKAHAR_GUARDIAN_DEAD 1
|
||||||
|
#define DATA_RESPECT_YOUR_ELDERS 2
|
||||||
|
|
||||||
#define EMOTE_HATCHES "An Ahn'kahar Guardian hatches!"
|
#define EMOTE_HATCHES "An Ahn'kahar Guardian hatches!"
|
||||||
|
|
||||||
class boss_elder_nadox : public CreatureScript
|
class boss_elder_nadox : public CreatureScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
boss_elder_nadox() : CreatureScript("boss_elder_nadox") { }
|
boss_elder_nadox() : CreatureScript("boss_elder_nadox") { }
|
||||||
|
|
||||||
struct boss_elder_nadoxAI : public ScriptedAI
|
struct boss_elder_nadoxAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_elder_nadoxAI(Creature *c) : ScriptedAI(c)
|
boss_elder_nadoxAI(Creature* creature) : ScriptedAI(creature)
|
||||||
{
|
{
|
||||||
pInstance = c->GetInstanceScript();
|
instance = me->GetInstanceScript();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 uiPlagueTimer;
|
uint32 uiPlagueTimer;
|
||||||
@@ -72,55 +68,72 @@ public:
|
|||||||
|
|
||||||
uint32 uiSwarmerSpawnTimer;
|
uint32 uiSwarmerSpawnTimer;
|
||||||
uint32 uiGuardSpawnTimer;
|
uint32 uiGuardSpawnTimer;
|
||||||
uint32 uiEnragueTimer;
|
uint32 uiEnrageTimer;
|
||||||
|
|
||||||
bool bGuardSpawned;
|
bool bGuardSpawned;
|
||||||
|
bool respectYourElders;
|
||||||
|
|
||||||
InstanceScript *pInstance;
|
InstanceScript* instance;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
uiPlagueTimer = 13*IN_MILLISECONDS;
|
uiPlagueTimer = 13000;
|
||||||
uiRagueTimer = 20*IN_MILLISECONDS;
|
uiRagueTimer = 20000;
|
||||||
|
|
||||||
uiSwarmerSpawnTimer = 10*IN_MILLISECONDS;
|
uiSwarmerSpawnTimer = 10000;
|
||||||
uiGuardSpawnTimer = 25*IN_MILLISECONDS;
|
uiGuardSpawnTimer = 25000;
|
||||||
|
|
||||||
uiEnragueTimer = 5*IN_MILLISECONDS;
|
uiEnrageTimer = 5000;
|
||||||
|
|
||||||
DeadAhnkaharGuardian = false;
|
|
||||||
bGuardSpawned = false;
|
bGuardSpawned = false;
|
||||||
|
respectYourElders = true;
|
||||||
|
|
||||||
if (pInstance)
|
if (instance)
|
||||||
pInstance->SetData(DATA_ELDER_NADOX_EVENT, NOT_STARTED);
|
instance->SetData(DATA_ELDER_NADOX_EVENT, NOT_STARTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnterCombat(Unit* /*who*/)
|
void EnterCombat(Unit* /*who*/)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_DEATH, me);
|
DoScriptText(SAY_DEATH, me);
|
||||||
|
|
||||||
if (pInstance)
|
if (instance)
|
||||||
pInstance->SetData(DATA_ELDER_NADOX_EVENT, IN_PROGRESS);
|
instance->SetData(DATA_ELDER_NADOX_EVENT, IN_PROGRESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KilledUnit(Unit* /*victim*/)
|
void KilledUnit(Unit* /*who*/)
|
||||||
{
|
{
|
||||||
DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me);
|
DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustDied(Unit* /*killer*/)
|
void JustDied(Unit* /*who*/)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_SLAY_3, me); //SAY_SLAY_3 on death?
|
DoScriptText(SAY_SLAY_3, me); //SAY_SLAY_3 on death?
|
||||||
|
|
||||||
if (pInstance)
|
if (instance)
|
||||||
{
|
instance->SetData(DATA_ELDER_NADOX_EVENT, DONE);
|
||||||
pInstance->SetData(DATA_ELDER_NADOX_EVENT, DONE);
|
|
||||||
if (IsHeroic() && !DeadAhnkaharGuardian)
|
|
||||||
pInstance->DoCompleteAchievement(ACHIEV_RESPECT_YOUR_ELDERS);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
void DoAction(int32 const action)
|
||||||
|
{
|
||||||
|
if (action == ACTION_AHNKAHAR_GUARDIAN_DEAD)
|
||||||
|
respectYourElders = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 GetData(uint32 type)
|
||||||
|
{
|
||||||
|
if (type == DATA_RESPECT_YOUR_ELDERS)
|
||||||
|
return respectYourElders ? 1 : 0;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetData(uint32 id, uint32 data)
|
||||||
|
{
|
||||||
|
if (id == DATA_RESPECT_YOUR_ELDERS)
|
||||||
|
respectYourElders = data ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(uint32 const diff)
|
||||||
{
|
{
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
return;
|
return;
|
||||||
@@ -128,19 +141,23 @@ public:
|
|||||||
if (uiPlagueTimer <= diff)
|
if (uiPlagueTimer <= diff)
|
||||||
{
|
{
|
||||||
DoCast(me->getVictim(), SPELL_BROOD_PLAGUE);
|
DoCast(me->getVictim(), SPELL_BROOD_PLAGUE);
|
||||||
uiPlagueTimer = 15*IN_MILLISECONDS;
|
uiPlagueTimer = 15000;
|
||||||
} else uiPlagueTimer -= diff;
|
}
|
||||||
|
else
|
||||||
|
uiPlagueTimer -= diff;
|
||||||
|
|
||||||
if (IsHeroic())
|
if (IsHeroic())
|
||||||
{
|
{
|
||||||
if (uiRagueTimer <= diff)
|
if (uiRagueTimer <= diff)
|
||||||
{
|
{
|
||||||
if (Creature *pSwarmer = me->FindNearestCreature(MOB_AHNKAHAR_SWARMER, 35))
|
if (Creature* Swarmer = me->FindNearestCreature(MOB_AHNKAHAR_SWARMER, 35.0f))
|
||||||
{
|
{
|
||||||
DoCast(pSwarmer, H_SPELL_BROOD_RAGE, true);
|
DoCast(Swarmer, H_SPELL_BROOD_RAGE, true);
|
||||||
uiRagueTimer = 15*IN_MILLISECONDS;
|
uiRagueTimer = 15000;
|
||||||
}
|
}
|
||||||
} else uiRagueTimer -= diff;
|
}
|
||||||
|
else
|
||||||
|
uiRagueTimer -= diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uiSwarmerSpawnTimer <= diff)
|
if (uiSwarmerSpawnTimer <= diff)
|
||||||
@@ -150,17 +167,21 @@ public:
|
|||||||
if (urand(1, 3) == 3) // 33% chance of dialog
|
if (urand(1, 3) == 3) // 33% chance of dialog
|
||||||
DoScriptText(RAND(SAY_EGG_SAC_1, SAY_EGG_SAC_2), me);
|
DoScriptText(RAND(SAY_EGG_SAC_1, SAY_EGG_SAC_2), me);
|
||||||
|
|
||||||
uiSwarmerSpawnTimer = 10*IN_MILLISECONDS;
|
uiSwarmerSpawnTimer = 10000;
|
||||||
} else uiSwarmerSpawnTimer -= diff;
|
}
|
||||||
|
else
|
||||||
|
uiSwarmerSpawnTimer -= diff;
|
||||||
|
|
||||||
if (!bGuardSpawned && uiGuardSpawnTimer <= diff)
|
if (!bGuardSpawned && uiGuardSpawnTimer <= diff)
|
||||||
{
|
{
|
||||||
me->MonsterTextEmote(EMOTE_HATCHES, me->GetGUID(), true);
|
me->MonsterTextEmote(EMOTE_HATCHES, me->GetGUID(), true);
|
||||||
DoCast(me, SPELL_SUMMON_SWARM_GUARD);
|
DoCast(me, SPELL_SUMMON_SWARM_GUARD);
|
||||||
bGuardSpawned = true;
|
bGuardSpawned = true;
|
||||||
} else uiGuardSpawnTimer -= diff;
|
}
|
||||||
|
else
|
||||||
|
uiGuardSpawnTimer -= diff;
|
||||||
|
|
||||||
if (uiEnragueTimer <= diff)
|
if (uiEnrageTimer <= diff)
|
||||||
{
|
{
|
||||||
if (me->HasAura(SPELL_ENRAGE, 0))
|
if (me->HasAura(SPELL_ENRAGE, 0))
|
||||||
return;
|
return;
|
||||||
@@ -171,14 +192,16 @@ public:
|
|||||||
if (!me->IsNonMeleeSpellCasted(false))
|
if (!me->IsNonMeleeSpellCasted(false))
|
||||||
DoCast(me, SPELL_ENRAGE, true);
|
DoCast(me, SPELL_ENRAGE, true);
|
||||||
|
|
||||||
uiEnragueTimer = 5*IN_MILLISECONDS;
|
uiEnrageTimer = 5000;
|
||||||
} else uiEnragueTimer -= diff;
|
}
|
||||||
|
else
|
||||||
|
uiEnrageTimer -= diff;
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatureAI *GetAI(Creature *creature) const
|
CreatureAI* GetAI(Creature* creature) const
|
||||||
{
|
{
|
||||||
return new boss_elder_nadoxAI(creature);
|
return new boss_elder_nadoxAI(creature);
|
||||||
}
|
}
|
||||||
@@ -192,33 +215,36 @@ enum AddSpells
|
|||||||
|
|
||||||
class mob_ahnkahar_nerubian : public CreatureScript
|
class mob_ahnkahar_nerubian : public CreatureScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
mob_ahnkahar_nerubian() : CreatureScript("mob_ahnkahar_nerubian") { }
|
mob_ahnkahar_nerubian() : CreatureScript("mob_ahnkahar_nerubian") { }
|
||||||
|
|
||||||
struct mob_ahnkahar_nerubianAI : public ScriptedAI
|
struct mob_ahnkahar_nerubianAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
mob_ahnkahar_nerubianAI(Creature *c) : ScriptedAI(c)
|
mob_ahnkahar_nerubianAI(Creature* creature) : ScriptedAI(creature)
|
||||||
{
|
{
|
||||||
pInstance = c->GetInstanceScript();
|
instance = me->GetInstanceScript();
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceScript *pInstance;
|
InstanceScript* instance;
|
||||||
uint32 uiSprintTimer;
|
uint32 uiSprintTimer;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
if (me->GetEntry() == MOB_AHNKAHAR_GUARDIAN_ENTRY) //magic numbers are bad!
|
if (me->GetEntry() == MOB_AHNKAHAR_GUARDIAN_ENTRY)
|
||||||
DoCast(me, SPELL_GUARDIAN_AURA, true);
|
DoCast(me, SPELL_GUARDIAN_AURA, true);
|
||||||
uiSprintTimer = 10*IN_MILLISECONDS;
|
uiSprintTimer = 10000;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustDied(Unit* /*killer*/)
|
void JustDied(Unit* /*who*/)
|
||||||
{
|
{
|
||||||
if (me->GetEntry() == MOB_AHNKAHAR_GUARDIAN_ENTRY)
|
if (me->GetEntry() == MOB_AHNKAHAR_GUARDIAN_ENTRY)
|
||||||
DeadAhnkaharGuardian = true;
|
if (Creature* Nadox = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ELDER_NADOX)))
|
||||||
|
Nadox->AI()->DoAction(ACTION_AHNKAHAR_GUARDIAN_DEAD);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnterCombat(Unit* /*who*/){}
|
void EnterCombat(Unit* /*who*/)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
@@ -228,28 +254,23 @@ public:
|
|||||||
if (me->GetEntry() == MOB_AHNKAHAR_GUARDIAN_ENTRY)
|
if (me->GetEntry() == MOB_AHNKAHAR_GUARDIAN_ENTRY)
|
||||||
me->RemoveAurasDueToSpell(SPELL_GUARDIAN_AURA);
|
me->RemoveAurasDueToSpell(SPELL_GUARDIAN_AURA);
|
||||||
|
|
||||||
if (pInstance)
|
if (instance)
|
||||||
{
|
if (instance->GetData(DATA_ELDER_NADOX_EVENT) != IN_PROGRESS)
|
||||||
if (pInstance->GetData(DATA_ELDER_NADOX_EVENT) != IN_PROGRESS)
|
me->DespawnOrUnsummon();
|
||||||
{
|
|
||||||
me->DisappearAndDie();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!UpdateVictim())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (uiSprintTimer <= diff)
|
if (uiSprintTimer <= diff)
|
||||||
{
|
{
|
||||||
DoCast(me, SPELL_SPRINT);
|
DoCast(me, SPELL_SPRINT);
|
||||||
uiSprintTimer = 25*IN_MILLISECONDS;
|
uiSprintTimer = 25000;
|
||||||
} else uiSprintTimer -= diff;
|
}
|
||||||
|
else
|
||||||
|
uiSprintTimer -= diff;
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatureAI *GetAI(Creature *creature) const
|
CreatureAI* GetAI(Creature* creature) const
|
||||||
{
|
{
|
||||||
return new mob_ahnkahar_nerubianAI(creature);
|
return new mob_ahnkahar_nerubianAI(creature);
|
||||||
}
|
}
|
||||||
@@ -281,9 +302,28 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class achievement_respect_your_elders : public AchievementCriteriaScript
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
achievement_respect_your_elders() : AchievementCriteriaScript("achievement_respect_your_elders")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OnCheck(Player* /*player*/, Unit* target)
|
||||||
|
{
|
||||||
|
sLog->outString("OnCheck()");
|
||||||
|
if (Creature* Nadox = target->ToCreature())
|
||||||
|
if (Nadox->AI()->GetData(DATA_RESPECT_YOUR_ELDERS))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void AddSC_boss_elder_nadox()
|
void AddSC_boss_elder_nadox()
|
||||||
{
|
{
|
||||||
new boss_elder_nadox;
|
new boss_elder_nadox;
|
||||||
new mob_ahnkahar_nerubian;
|
new mob_ahnkahar_nerubian;
|
||||||
new mob_nadox_eggs;
|
new mob_nadox_eggs;
|
||||||
|
new achievement_respect_your_elders();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user