diff options
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/server/scripts/World/achievement_scripts.cpp | 71 |
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(); } |
