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 "ahnkahet.h"
|
||||
|
||||
bool DeadAhnkaharGuardian; // needed for achievement: Respect Your Elders(2038)
|
||||
|
||||
enum Achievements
|
||||
{
|
||||
ACHIEV_RESPECT_YOUR_ELDERS = 2038
|
||||
};
|
||||
|
||||
//not in db
|
||||
enum Yells
|
||||
{
|
||||
@@ -53,6 +46,9 @@ enum Creatures
|
||||
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!"
|
||||
|
||||
class boss_elder_nadox : public CreatureScript
|
||||
@@ -62,9 +58,9 @@ public:
|
||||
|
||||
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;
|
||||
@@ -72,55 +68,72 @@ public:
|
||||
|
||||
uint32 uiSwarmerSpawnTimer;
|
||||
uint32 uiGuardSpawnTimer;
|
||||
uint32 uiEnragueTimer;
|
||||
uint32 uiEnrageTimer;
|
||||
|
||||
bool bGuardSpawned;
|
||||
bool respectYourElders;
|
||||
|
||||
InstanceScript *pInstance;
|
||||
InstanceScript* instance;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
uiPlagueTimer = 13*IN_MILLISECONDS;
|
||||
uiRagueTimer = 20*IN_MILLISECONDS;
|
||||
uiPlagueTimer = 13000;
|
||||
uiRagueTimer = 20000;
|
||||
|
||||
uiSwarmerSpawnTimer = 10*IN_MILLISECONDS;
|
||||
uiGuardSpawnTimer = 25*IN_MILLISECONDS;
|
||||
uiSwarmerSpawnTimer = 10000;
|
||||
uiGuardSpawnTimer = 25000;
|
||||
|
||||
uiEnragueTimer = 5*IN_MILLISECONDS;
|
||||
uiEnrageTimer = 5000;
|
||||
|
||||
DeadAhnkaharGuardian = false;
|
||||
bGuardSpawned = false;
|
||||
respectYourElders = true;
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_ELDER_NADOX_EVENT, NOT_STARTED);
|
||||
if (instance)
|
||||
instance->SetData(DATA_ELDER_NADOX_EVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, me);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_ELDER_NADOX_EVENT, IN_PROGRESS);
|
||||
if (instance)
|
||||
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);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
void JustDied(Unit* /*who*/)
|
||||
{
|
||||
DoScriptText(SAY_SLAY_3, me); //SAY_SLAY_3 on death?
|
||||
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_ELDER_NADOX_EVENT, DONE);
|
||||
if (IsHeroic() && !DeadAhnkaharGuardian)
|
||||
pInstance->DoCompleteAchievement(ACHIEV_RESPECT_YOUR_ELDERS);
|
||||
}
|
||||
if (instance)
|
||||
instance->SetData(DATA_ELDER_NADOX_EVENT, DONE);
|
||||
}
|
||||
|
||||
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())
|
||||
return;
|
||||
@@ -128,19 +141,23 @@ public:
|
||||
if (uiPlagueTimer <= diff)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_BROOD_PLAGUE);
|
||||
uiPlagueTimer = 15*IN_MILLISECONDS;
|
||||
} else uiPlagueTimer -= diff;
|
||||
uiPlagueTimer = 15000;
|
||||
}
|
||||
else
|
||||
uiPlagueTimer -= diff;
|
||||
|
||||
if (IsHeroic())
|
||||
{
|
||||
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);
|
||||
uiRagueTimer = 15*IN_MILLISECONDS;
|
||||
DoCast(Swarmer, H_SPELL_BROOD_RAGE, true);
|
||||
uiRagueTimer = 15000;
|
||||
}
|
||||
} else uiRagueTimer -= diff;
|
||||
}
|
||||
else
|
||||
uiRagueTimer -= diff;
|
||||
}
|
||||
|
||||
if (uiSwarmerSpawnTimer <= diff)
|
||||
@@ -150,17 +167,21 @@ public:
|
||||
if (urand(1, 3) == 3) // 33% chance of dialog
|
||||
DoScriptText(RAND(SAY_EGG_SAC_1, SAY_EGG_SAC_2), me);
|
||||
|
||||
uiSwarmerSpawnTimer = 10*IN_MILLISECONDS;
|
||||
} else uiSwarmerSpawnTimer -= diff;
|
||||
uiSwarmerSpawnTimer = 10000;
|
||||
}
|
||||
else
|
||||
uiSwarmerSpawnTimer -= diff;
|
||||
|
||||
if (!bGuardSpawned && uiGuardSpawnTimer <= diff)
|
||||
{
|
||||
me->MonsterTextEmote(EMOTE_HATCHES, me->GetGUID(), true);
|
||||
DoCast(me, SPELL_SUMMON_SWARM_GUARD);
|
||||
bGuardSpawned = true;
|
||||
} else uiGuardSpawnTimer -= diff;
|
||||
}
|
||||
else
|
||||
uiGuardSpawnTimer -= diff;
|
||||
|
||||
if (uiEnragueTimer <= diff)
|
||||
if (uiEnrageTimer <= diff)
|
||||
{
|
||||
if (me->HasAura(SPELL_ENRAGE, 0))
|
||||
return;
|
||||
@@ -171,8 +192,10 @@ public:
|
||||
if (!me->IsNonMeleeSpellCasted(false))
|
||||
DoCast(me, SPELL_ENRAGE, true);
|
||||
|
||||
uiEnragueTimer = 5*IN_MILLISECONDS;
|
||||
} else uiEnragueTimer -= diff;
|
||||
uiEnrageTimer = 5000;
|
||||
}
|
||||
else
|
||||
uiEnrageTimer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
@@ -197,28 +220,31 @@ public:
|
||||
|
||||
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;
|
||||
|
||||
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);
|
||||
uiSprintTimer = 10*IN_MILLISECONDS;
|
||||
uiSprintTimer = 10000;
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
void JustDied(Unit* /*who*/)
|
||||
{
|
||||
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)
|
||||
{
|
||||
@@ -228,22 +254,17 @@ public:
|
||||
if (me->GetEntry() == MOB_AHNKAHAR_GUARDIAN_ENTRY)
|
||||
me->RemoveAurasDueToSpell(SPELL_GUARDIAN_AURA);
|
||||
|
||||
if (pInstance)
|
||||
{
|
||||
if (pInstance->GetData(DATA_ELDER_NADOX_EVENT) != IN_PROGRESS)
|
||||
{
|
||||
me->DisappearAndDie();
|
||||
}
|
||||
}
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
if (instance)
|
||||
if (instance->GetData(DATA_ELDER_NADOX_EVENT) != IN_PROGRESS)
|
||||
me->DespawnOrUnsummon();
|
||||
|
||||
if (uiSprintTimer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_SPRINT);
|
||||
uiSprintTimer = 25*IN_MILLISECONDS;
|
||||
} else uiSprintTimer -= diff;
|
||||
uiSprintTimer = 25000;
|
||||
}
|
||||
else
|
||||
uiSprintTimer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
@@ -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()
|
||||
{
|
||||
new boss_elder_nadox;
|
||||
new mob_ahnkahar_nerubian;
|
||||
new mob_nadox_eggs;
|
||||
new achievement_respect_your_elders();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user