aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts')
-rwxr-xr-xsrc/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp1
-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
-rwxr-xr-xsrc/server/scripts/World/achievement_scripts.cpp45
4 files changed, 113 insertions, 1 deletions
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
index 91cd8dee55c..7566d9bc410 100755
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
@@ -85,7 +85,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript
EventStage = 0;
TributeChestGUID = 0;
- DataDamageTwin = 0;
MainGateDoorGUID = 0;
EastPortcullisGUID = 0;
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
diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp
index db09c12da0b..af966e3e22e 100755
--- a/src/server/scripts/World/achievement_scripts.cpp
+++ b/src/server/scripts/World/achievement_scripts.cpp
@@ -21,6 +21,7 @@
#include "BattlegroundWS.h"
#include "BattlegroundIC.h"
#include "BattlegroundSA.h"
+#include "BattlegroundAV.h"
#include "Vehicle.h"
class achievement_storm_glory : public AchievementCriteriaScript
@@ -207,6 +208,48 @@ public:
}
};
+class achievement_everything_counts : public AchievementCriteriaScript
+{
+ public:
+ achievement_everything_counts() : AchievementCriteriaScript("achievement_everything_counts") { }
+
+ bool OnCheck(Player* source, Unit* /*target*/)
+ {
+ Battleground* bg = source->GetBattleground();
+ if (!bg)
+ return false;
+
+ if (source->GetBattlegroundTypeId() != BATTLEGROUND_AV)
+ return false;
+
+ if (static_cast<BattlegroundAV*>(bg)->IsBothMinesControlledByTeam(source->GetTeam()))
+ return true;
+
+ return false;
+ }
+};
+
+class achievement_bg_av_perfection : public AchievementCriteriaScript
+{
+ public:
+ achievement_bg_av_perfection() : AchievementCriteriaScript("achievement_bg_av_perfection") { }
+
+ bool OnCheck(Player* source, Unit* /*target*/)
+ {
+ Battleground* bg = source->GetBattleground();
+ if (!bg)
+ return false;
+
+ if (source->GetBattlegroundTypeId() != BATTLEGROUND_AV)
+ return false;
+
+ if (static_cast<BattlegroundAV*>(bg)->IsAllTowersControlledAndCaptainAlive(source->GetTeam()))
+ return true;
+
+ return false;
+ }
+};
+
class achievement_wg_didnt_stand_a_chance : public AchievementCriteriaScript
{
public:
@@ -269,6 +312,8 @@ void AddSC_achievement_scripts()
new achievement_bg_sa_artillery();
new achievement_sickly_gazelle();
new achievement_wg_didnt_stand_a_chance();
+ new achievement_everything_counts();
+ new achievement_bg_av_perfection();
new achievement_arena_kills("achievement_arena_2v2_kills", ARENA_TYPE_2v2);
new achievement_arena_kills("achievement_arena_3v3_kills", ARENA_TYPE_3v3);
new achievement_arena_kills("achievement_arena_5v5_kills", ARENA_TYPE_5v5);