diff options
Diffstat (limited to 'src/server/scripts/Northrend')
| -rw-r--r-- | src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp | 57 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h | 11 | 
2 files changed, 68 insertions, 0 deletions
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp index 904566e13a4..8d668011f9a 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp @@ -41,6 +41,9 @@ class instance_archavon : public InstanceMapScript              {                  EmalonGUID = 0;                  ToravonGUID = 0; +                ArchavonDeath = 0; +                EmalonDeath = 0; +                KoralonDeath = 0;              }              void OnCreatureCreate(Creature* creature) @@ -73,9 +76,63 @@ class instance_archavon : public InstanceMapScript                  return 0;              } +            bool SetBossState(uint32 type, EncounterState state) +            { +                if (!InstanceScript::SetBossState(type, state)) +                    return false; + +                if (state != DONE) +                   return true; + +                switch (type) +                { +                    case DATA_ARCHAVON: +                        ArchavonDeath = time(NULL); +                        break; +                    case DATA_EMALON: +                        EmalonDeath = time(NULL); +                        break; +                    case DATA_KORALON: +                        KoralonDeath = time(NULL); +                        break; +                    default: +                        return true; +                } + +                // on every death of Archavon, Emalon and Koralon check our achievement +                DoCastSpellOnPlayers(SPELL_EARTH_WIND_FIRE_ACHIEVEMENT_CHECK); + +                return true; +            } + +            bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) +            { +                switch (criteria_id) +                { +                    case CRITERIA_EARTH_WIND_FIRE_10: +                    case CRITERIA_EARTH_WIND_FIRE_25: +                        if (ArchavonDeath && EmalonDeath && KoralonDeath) +                        { +                            // instance difficulty check is already done in db (achievement_criteria_data) +                            // int() for Visual Studio, compile errors with abs(time_t) +                            return (abs(int(ArchavonDeath-EmalonDeath)) < MINUTE && \ +                                abs(int(EmalonDeath-KoralonDeath)) < MINUTE && \ +                                abs(int(KoralonDeath-ArchavonDeath)) < MINUTE); +                        } +                        break; +                    default: +                        break; +                } + +                return false; +            } +          private:              uint64 EmalonGUID;              uint64 ToravonGUID; +            time_t ArchavonDeath; +            time_t EmalonDeath; +            time_t KoralonDeath;          };          InstanceScript* GetInstanceScript(InstanceMap* map) const diff --git a/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h b/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h index 4aa01e58f5f..04f50d3adeb 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h +++ b/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h @@ -36,4 +36,15 @@ enum Data  #define MAX_ENCOUNTER 4 +enum AchievementCriteriaIds +{ +    CRITERIA_EARTH_WIND_FIRE_10 = 12018, +    CRITERIA_EARTH_WIND_FIRE_25 = 12019, +}; + +enum AchievementSpells +{ +    SPELL_EARTH_WIND_FIRE_ACHIEVEMENT_CHECK = 68308, +}; +  #endif  | 
