diff options
author | QAston <qaston@gmail.com> | 2011-09-03 21:16:12 +0200 |
---|---|---|
committer | QAston <qaston@gmail.com> | 2011-09-03 21:16:12 +0200 |
commit | fab78d5e02ddaab3e4cfeee5ffb9b00f882be248 (patch) | |
tree | 66fbee5ea164c36692e5ee1b26040cbb8c87c382 | |
parent | 81a841ed2044335f665fe7e6d875f8e148a6e365 (diff) |
Scripts/Vault of Archavon: Earth, Wind & Fire achievement - by idostyle@zoit, with some spell attribute correction to the patch by me.
3 files changed, 73 insertions, 0 deletions
diff --git a/sql/updates/world/2011_09_03_09_world_spell_dbc.sql b/sql/updates/world/2011_09_03_09_world_spell_dbc.sql new file mode 100644 index 00000000000..31d4b19b1ca --- /dev/null +++ b/sql/updates/world/2011_09_03_09_world_spell_dbc.sql @@ -0,0 +1,5 @@ +-- Dummy effect with caster as target +DELETE FROM `spell_dbc` WHERE `id` IN (68308); +INSERT INTO `spell_dbc` (`Id`, `Attributes`, `AttributesEx`, `AttributesEx2`,`AttributesEx3`,`AttributesEx4`,`AttributesEx5`,`AttributesEx6`,`Effect1`,`EffectImplicitTargetA1`,`EffectImplicitTargetB1`,`comment`) +VALUES +(68308, 0x09800100, 0x00000420, 0x00004005, 0x10040000, 0x00000080, 0x00000008, 0x00001000, 3, 1, 0, 'Vault of Archavon - Earth, Wind & Fire - Achievement Check'); 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 |