*Implement achievement Timely Death.

--HG--
branch : trunk
This commit is contained in:
Anubisss
2009-08-12 02:30:27 +02:00
parent 6eeaea276c
commit 3ea9d899db
2 changed files with 32 additions and 8 deletions
@@ -83,10 +83,9 @@ struct TRINITY_DLL_DECL boss_bjarngrimAI : public ScriptedAI
{ {
boss_bjarngrimAI(Creature *pCreature) : ScriptedAI(pCreature) boss_bjarngrimAI(Creature *pCreature) : ScriptedAI(pCreature)
{ {
m_pInstance = (ScriptedInstance*)pCreature->GetInstanceData(); m_pInstance = pCreature->GetInstanceData();
m_bIsHeroic = pCreature->GetMap()->IsHeroic(); m_bIsHeroic = pCreature->GetMap()->IsHeroic();
m_uiStance = STANCE_DEFENSIVE; m_uiStance = STANCE_DEFENSIVE;
Reset();
} }
ScriptedInstance* m_pInstance; ScriptedInstance* m_pInstance;
@@ -354,9 +353,8 @@ struct TRINITY_DLL_DECL mob_stormforged_lieutenantAI : public ScriptedAI
{ {
mob_stormforged_lieutenantAI(Creature *pCreature) : ScriptedAI(pCreature) mob_stormforged_lieutenantAI(Creature *pCreature) : ScriptedAI(pCreature)
{ {
m_pInstance = ((ScriptedInstance*)pCreature->GetInstanceData()); m_pInstance = pCreature->GetInstanceData();
m_bIsHeroic = pCreature->GetMap()->IsHeroic(); m_bIsHeroic = pCreature->GetMap()->IsHeroic();
Reset();
} }
ScriptedInstance* m_pInstance; ScriptedInstance* m_pInstance;
@@ -26,6 +26,8 @@ EndScriptData */
enum enum
{ {
ACHIEVEMENT_TIMELY_DEATH = 1867,
SAY_AGGRO = -1602018, SAY_AGGRO = -1602018,
SAY_INTRO_1 = -1602019, SAY_INTRO_1 = -1602019,
SAY_INTRO_2 = -1602020, SAY_INTRO_2 = -1602020,
@@ -58,9 +60,8 @@ struct TRINITY_DLL_DECL boss_lokenAI : public ScriptedAI
{ {
boss_lokenAI(Creature *pCreature) : ScriptedAI(pCreature) boss_lokenAI(Creature *pCreature) : ScriptedAI(pCreature)
{ {
m_pInstance = (ScriptedInstance*)pCreature->GetInstanceData(); m_pInstance = pCreature->GetInstanceData();
m_bIsHeroic = pCreature->GetMap()->IsHeroic(); m_bIsHeroic = pCreature->GetMap()->IsHeroic();
Reset();
} }
ScriptedInstance* m_pInstance; ScriptedInstance* m_pInstance;
@@ -75,6 +76,8 @@ struct TRINITY_DLL_DECL boss_lokenAI : public ScriptedAI
uint32 m_uiHealthAmountModifier; uint32 m_uiHealthAmountModifier;
uint32 EncounterTimer;
void Reset() void Reset()
{ {
m_bIsAura = false; m_bIsAura = false;
@@ -86,6 +89,8 @@ struct TRINITY_DLL_DECL boss_lokenAI : public ScriptedAI
m_uiHealthAmountModifier = 1; m_uiHealthAmountModifier = 1;
EncounterTimer = 0;
if (m_pInstance) if (m_pInstance)
m_pInstance->SetData(TYPE_LOKEN, NOT_STARTED); m_pInstance->SetData(TYPE_LOKEN, NOT_STARTED);
} }
@@ -94,6 +99,8 @@ struct TRINITY_DLL_DECL boss_lokenAI : public ScriptedAI
{ {
DoScriptText(SAY_AGGRO, m_creature); DoScriptText(SAY_AGGRO, m_creature);
EncounterTimer = 1;
if (m_pInstance) if (m_pInstance)
m_pInstance->SetData(TYPE_LOKEN, IN_PROGRESS); m_pInstance->SetData(TYPE_LOKEN, IN_PROGRESS);
} }
@@ -101,6 +108,22 @@ struct TRINITY_DLL_DECL boss_lokenAI : public ScriptedAI
void JustDied(Unit* pKiller) void JustDied(Unit* pKiller)
{ {
DoScriptText(SAY_DEATH, m_creature); DoScriptText(SAY_DEATH, m_creature);
error_log("%u", EncounterTimer);
if(m_bIsHeroic && EncounterTimer <= 120000)
{
AchievementEntry const *AchievTimelyDeath = GetAchievementStore()->LookupEntry(ACHIEVEMENT_TIMELY_DEATH);
if(AchievTimelyDeath)
{
Map *map = m_creature->GetMap();
if(map && map->IsDungeon())
{
Map::PlayerList const &players = map->GetPlayers();
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
itr->getSource()->CompletedAchievement(AchievTimelyDeath);
}
}
}
if (m_pInstance) if (m_pInstance)
m_pInstance->SetData(TYPE_LOKEN, DONE); m_pInstance->SetData(TYPE_LOKEN, DONE);
@@ -119,9 +142,12 @@ struct TRINITY_DLL_DECL boss_lokenAI : public ScriptedAI
void UpdateAI(const uint32 uiDiff) void UpdateAI(const uint32 uiDiff)
{ {
//Return since we have no target //Return since we have no target
if(!UpdateVictim()) if(!UpdateVictim())
return; return;
if(EncounterTimer)
EncounterTimer += uiDiff;
if (m_bIsAura) if (m_bIsAura)
{ {
// workaround for PULSING_SHOCKWAVE // workaround for PULSING_SHOCKWAVE