aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/CMakeLists.txt1
-rw-r--r--src/server/scripts/World/achievement_scripts.cpp71
2 files changed, 70 insertions, 2 deletions
diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt
index a1b22f8d4b4..9a198774d90 100644
--- a/src/server/scripts/CMakeLists.txt
+++ b/src/server/scripts/CMakeLists.txt
@@ -82,6 +82,7 @@ include_directories(
${CMAKE_SOURCE_DIR}/src/server/game/AI/ScriptedAI
${CMAKE_SOURCE_DIR}/src/server/game/AuctionHouse
${CMAKE_SOURCE_DIR}/src/server/game/Battlegrounds
+ ${CMAKE_SOURCE_DIR}/src/server/game/Battlegrounds/Zones
${CMAKE_SOURCE_DIR}/src/server/game/Calendar
${CMAKE_SOURCE_DIR}/src/server/game/Chat
${CMAKE_SOURCE_DIR}/src/server/game/Chat/Channels
diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp
index 19a61ccd011..c2c282bf2f8 100644
--- a/src/server/scripts/World/achievement_scripts.cpp
+++ b/src/server/scripts/World/achievement_scripts.cpp
@@ -17,6 +17,8 @@
*/
#include "ScriptPCH.h"
+#include "BattlegroundAB.h"
+#include "BattlegroundWS.h"
class achievement_school_of_hard_knocks : public AchievementCriteriaScript
{
@@ -53,8 +55,73 @@ class achievement_storm_glory : public AchievementCriteriaScript
}
};
+class achievement_resilient_victory : public AchievementCriteriaScript
+{
+ public:
+ achievement_resilient_victory() : AchievementCriteriaScript("achievement_resilient_victory") { }
+
+ bool OnCheck(Player* source, Unit* /*target*/)
+ {
+ Battleground* bg = source->GetBattleground();
+ if (!bg)
+ return false;
+
+ if (bg->GetTypeID(true) != BATTLEGROUND_AB)
+ return false;
+
+ if (!static_cast<BattlegroundAB*>(bg)->IsTeamScores500Disadvantage(source->GetTeam()))
+ return false;
+
+ return true;
+ }
+};
+
+class achievement_bg_control_all_nodes : public AchievementCriteriaScript
+{
+ public:
+ achievement_bg_control_all_nodes() : AchievementCriteriaScript("achievement_bg_control_all_nodes") { }
+
+ bool OnCheck(Player* source, Unit* /*target*/)
+ {
+ Battleground* bg = source->GetBattleground();
+ if (!bg)
+ return false;
+
+ if (!bg->IsAllNodesConrolledByTeam(source->GetTeam()))
+ return false;
+
+ return true;
+ }
+};
+
+class achievement_save_the_day : public AchievementCriteriaScript
+{
+ public:
+ achievement_save_the_day() : AchievementCriteriaScript("achievement_save_the_day") { }
+
+ bool OnCheck(Player* source, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Player const* pTarget = target->ToPlayer())
+ {
+ if (source->GetBattlegroundTypeId() != BATTLEGROUND_WS || !source->GetBattleground())
+ return false;
+
+ BattlegroundWS* pWSG = static_cast<BattlegroundWS*>(source->GetBattleground());
+ if (pWSG->GetFlagState(pTarget->GetTeam()) == BG_WS_FLAG_STATE_ON_BASE)
+ return true;
+ }
+ return false;
+ }
+};
+
void AddSC_achievement_scripts()
{
- new achievement_school_of_hard_knocks;
- new achievement_storm_glory;
+ new achievement_school_of_hard_knocks();
+ new achievement_storm_glory();
+ new achievement_resilient_victory();
+ new achievement_bg_control_all_nodes();
+ new achievement_save_the_day();
}