aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQAston <qaston@gmail.com>2011-09-03 21:16:12 +0200
committerQAston <qaston@gmail.com>2011-09-03 21:16:12 +0200
commitfab78d5e02ddaab3e4cfeee5ffb9b00f882be248 (patch)
tree66fbee5ea164c36692e5ee1b26040cbb8c87c382
parent81a841ed2044335f665fe7e6d875f8e148a6e365 (diff)
Scripts/Vault of Archavon: Earth, Wind & Fire achievement - by idostyle@zoit, with some spell attribute correction to the patch by me.
-rw-r--r--sql/updates/world/2011_09_03_09_world_spell_dbc.sql5
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp57
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h11
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