diff options
-rw-r--r-- | src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_keleseth.cpp | 24 | ||||
-rw-r--r-- | src/game/AchievementMgr.h | 2 | ||||
-rw-r--r-- | src/game/DBCStores.cpp | 1 | ||||
-rw-r--r-- | src/game/DBCStores.h | 1 | ||||
-rw-r--r-- | src/game/Player.cpp | 7 | ||||
-rw-r--r-- | src/game/Player.h | 5 |
6 files changed, 37 insertions, 3 deletions
diff --git a/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_keleseth.cpp b/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_keleseth.cpp index 9f3164d9b89..ea3b829ef6a 100644 --- a/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_keleseth.cpp +++ b/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_keleseth.cpp @@ -28,6 +28,8 @@ EndScriptData */ enum { + ACHIEVEMENT_ON_THE_ROCKS = 1919, + SPELL_SHADOWBOLT = 43667, SPELL_SHADOWBOLT_HEROIC = 59389, SPELL_FROST_TOMB = 48400, @@ -57,6 +59,8 @@ float SkeletonSpawnPoint[5][5]= float AttackLoc[3]={197.636, 194.046, 40.8164}; +bool ShatterFrostTomb; // needed for achievement: On The Rocks(1919) + struct TRINITY_DLL_DECL mob_frost_tombAI : public ScriptedAI { mob_frost_tombAI(Creature *c) : ScriptedAI(c) @@ -78,6 +82,9 @@ struct TRINITY_DLL_DECL mob_frost_tombAI : public ScriptedAI void JustDied(Unit *killer) { + if(killer->GetGUID() != m_creature->GetGUID()) + ShatterFrostTomb = true; + if(FrostTombGUID) { Unit* FrostTomb = Unit::GetUnit((*m_creature),FrostTombGUID); @@ -118,6 +125,8 @@ struct TRINITY_DLL_DECL boss_kelesethAI : public ScriptedAI ShadowboltTimer = 0; Skeletons = false; + ShatterFrostTomb = false; + ResetTimer(); if(pInstance) @@ -136,6 +145,21 @@ struct TRINITY_DLL_DECL boss_kelesethAI : public ScriptedAI { DoScriptText(SAY_DEATH, m_creature); + if(Heroic && !ShatterFrostTomb) + { + AchievementEntry const *AchievOnTheRocks = GetAchievementStore()->LookupEntry(ACHIEVEMENT_ON_THE_ROCKS); + if(AchievOnTheRocks) + { + 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(AchievOnTheRocks); + } + } + } + if(pInstance) pInstance->SetData(DATA_PRINCEKELESETH_EVENT, DONE); } diff --git a/src/game/AchievementMgr.h b/src/game/AchievementMgr.h index 6f30dbfa446..5020539bb5c 100644 --- a/src/game/AchievementMgr.h +++ b/src/game/AchievementMgr.h @@ -234,6 +234,7 @@ class AchievementMgr void SaveToDB(); void ResetAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1=0, uint32 miscvalue2=0); void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1=0, uint32 miscvalue2=0, Unit *unit=NULL, uint32 time=0); + void CompletedAchievement(AchievementEntry const* entry); void CheckAllAchievementCriteria(); void SendAllAchievementData(); void SendRespondInspectAchievements(Player* player); @@ -245,7 +246,6 @@ class AchievementMgr void SendCriteriaUpdate(uint32 id, CriteriaProgress const* progress); void SetCriteriaProgress(AchievementCriteriaEntry const* entry, uint32 changeValue, ProgressType ptype = PROGRESS_SET); void CompletedCriteriaFor(AchievementEntry const* achievement); - void CompletedAchievement(AchievementEntry const* entry); bool IsCompletedCriteria(AchievementCriteriaEntry const* criteria, AchievementEntry const* achievement); bool IsCompletedAchievement(AchievementEntry const* entry); void CompleteAchievementsWithRefs(AchievementEntry const* entry); diff --git a/src/game/DBCStores.cpp b/src/game/DBCStores.cpp index d35087c324a..42780870499 100644 --- a/src/game/DBCStores.cpp +++ b/src/game/DBCStores.cpp @@ -696,3 +696,4 @@ TRINITY_DLL_SPEC DBCStorage <ItemEntry> const* GetItemDisplayStore() TRINITY_DLL_SPEC DBCStorage <CreatureDisplayInfoEntry> const* GetCreatureDisplayStore() { return &sCreatureDisplayInfoStore; } TRINITY_DLL_SPEC DBCStorage <EmotesEntry> const* GetEmotesStore() { return &sEmotesStore; } TRINITY_DLL_SPEC DBCStorage <EmotesTextEntry> const* GetEmotesTextStore() { return &sEmotesTextStore; } +TRINITY_DLL_SPEC DBCStorage <AchievementEntry> const* GetAchievementStore() { return &sAchievementStore; } diff --git a/src/game/DBCStores.h b/src/game/DBCStores.h index a423cd0bfc8..fc47568e6a5 100644 --- a/src/game/DBCStores.h +++ b/src/game/DBCStores.h @@ -158,4 +158,5 @@ TRINITY_DLL_SPEC DBCStorage <ItemEntry> const* GetItemDisplaySt TRINITY_DLL_SPEC DBCStorage <CreatureDisplayInfoEntry> const* GetCreatureDisplayStore(); TRINITY_DLL_SPEC DBCStorage <EmotesEntry> const* GetEmotesStore(); TRINITY_DLL_SPEC DBCStorage <EmotesTextEntry> const* GetEmotesTextStore(); +TRINITY_DLL_SPEC DBCStorage <AchievementEntry> const* GetAchievementStore(); #endif diff --git a/src/game/Player.cpp b/src/game/Player.cpp index a4f88581dca..8a3a4bffd93 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -20725,7 +20725,12 @@ void Player::HandleFall(MovementInfo const& movementInfo) void Player::UpdateAchievementCriteria( AchievementCriteriaTypes type, uint32 miscvalue1/*=0*/, uint32 miscvalue2/*=0*/, Unit *unit/*=NULL*/, uint32 time/*=0*/ ) { - GetAchievementMgr().UpdateAchievementCriteria(type, miscvalue1,miscvalue2,unit,time); + GetAchievementMgr().UpdateAchievementCriteria(type, miscvalue1, miscvalue2, unit, time); +} + +void Player::CompletedAchievement(AchievementEntry const* entry) +{ + GetAchievementMgr().CompletedAchievement(entry); } void Player::LearnTalent(uint32 talentId, uint32 talentRank) diff --git a/src/game/Player.h b/src/game/Player.h index 9f67fa6ff81..a63cb719d6f 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -2144,8 +2144,11 @@ class TRINITY_DLL_SPEC Player : public Unit void ResyncRunes(uint8 count); void AddRunePower(uint8 index); void InitRunes(); + AchievementMgr& GetAchievementMgr() { return m_achievementMgr; } - void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1=0, uint32 miscvalue2=0, Unit *unit=NULL, uint32 time=0); + void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1 = 0, uint32 miscvalue2 = 0, Unit *unit = NULL, uint32 time = 0); + void CompletedAchievement(AchievementEntry const* entry); + bool HasTitle(uint32 bitIndex); bool HasTitle(CharTitlesEntry const* title) { return HasTitle(title->bit_index); } void SetTitle(CharTitlesEntry const* title, bool lost = false); |