diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/server/game/Battlegrounds/Battleground.cpp | 1 | ||||
| -rwxr-xr-x | src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp | 13 | ||||
| -rwxr-xr-x | src/server/game/Battlegrounds/Zones/BattlegroundSA.h | 74 | ||||
| -rwxr-xr-x | src/server/scripts/World/achievement_scripts.cpp | 60 |
4 files changed, 110 insertions, 38 deletions
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index b78928e4fe0..ccfec03a77f 100755 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1115,6 +1115,7 @@ void Battleground::AddPlayer(Player* plr) plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE, ACHIEVEMENT_CRITERIA_CONDITION_MAP, GetMapId()); plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE, ACHIEVEMENT_CRITERIA_CONDITION_MAP, GetMapId()); + plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, ACHIEVEMENT_CRITERIA_CONDITION_MAP, GetMapId()); // setup BG group membership PlayerAddedToBGCheckIfBGIsRunning(plr); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index d8a9ff495dd..1f2c2c337c6 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -490,6 +490,15 @@ void BattlegroundSA::UpdatePlayerScore(Player* Source, uint32 type, uint32 value Battleground::UpdatePlayerScore(Source,type,value, doAddHonor); } +uint32 BattlegroundSA::GetPlayerDemolisherScore(Player* source) +{ + BattlegroundScoreMap::iterator itr = m_PlayerScores.find(source->GetGUID()); + if (itr == m_PlayerScores.end()) // player not found... + return 0; + else + return ((BattlegroundSAScore*)itr->second)->demolishers_destroyed; +} + void BattlegroundSA::TeleportPlayers() { for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) @@ -554,8 +563,8 @@ void BattlegroundSA::HandleKillUnit(Creature* unit, Player* killer) { if (!unit) return; - - if (unit->GetEntry() == 28781) //Demolisher + + if (unit->GetEntry() == NPC_DEMOLISHER_SA) UpdatePlayerScore(killer, SCORE_DESTROYED_DEMOLISHER, 1); } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h index fbfed1a3f56..068d71ba1c2 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h @@ -34,64 +34,65 @@ class BattlegroundSAScore : public BattlegroundScore #define BG_SA_DEMOLISHER_AMOUNT 4 enum BG_SA_Status - { +{ BG_SA_NOTSTARTED = 0, BG_SA_WARMUP, BG_SA_ROUND_ONE, BG_SA_SECOND_WARMUP, BG_SA_ROUND_TWO, BG_SA_BONUS_ROUND - }; +}; enum BG_SA_GateState - { +{ BG_SA_GATE_OK = 1, BG_SA_GATE_DAMAGED = 2, BG_SA_GATE_DESTROYED = 3 - }; +}; enum BG_SA_Timers - { - BG_SA_BOAT_START = 60000, - BG_SA_WARMUPLENGTH = 120000, - BG_SA_ROUNDLENGTH = 600000 - }; +{ + BG_SA_BOAT_START = 60*IN_MILLISECONDS, + BG_SA_WARMUPLENGTH = 120*IN_MILLISECONDS, + BG_SA_ROUNDLENGTH = 600*IN_MILLISECONDS +}; enum BG_SA_WorldStates - { +{ BG_SA_TIMER_MINS = 3559, BG_SA_TIMER_SEC_TENS = 3560, BG_SA_TIMER_SEC_DECS = 3561, BG_SA_ALLY_ATTACKS = 4352, BG_SA_HORDE_ATTACKS = 4353, - BG_SA_PURPLE_GATEWS = 3614, BG_SA_RED_GATEWS = 3617, BG_SA_BLUE_GATEWS = 3620, BG_SA_GREEN_GATEWS = 3623, BG_SA_YELLOW_GATEWS = 3638, BG_SA_ANCIENT_GATEWS = 3849, - BG_SA_LEFT_GY_ALLIANCE = 3635, BG_SA_RIGHT_GY_ALLIANCE = 3636, BG_SA_CENTER_GY_ALLIANCE = 3637, - BG_SA_RIGHT_ATT_TOKEN_ALL = 3627, BG_SA_LEFT_ATT_TOKEN_ALL = 3626, - BG_SA_LEFT_ATT_TOKEN_HRD = 3629, BG_SA_RIGHT_ATT_TOKEN_HRD = 3628, - BG_SA_HORDE_DEFENCE_TOKEN = 3631, BG_SA_ALLIANCE_DEFENCE_TOKEN = 3630, - BG_SA_RIGHT_GY_HORDE = 3632, BG_SA_LEFT_GY_HORDE = 3633, BG_SA_CENTER_GY_HORDE = 3634, - BG_SA_BONUS_TIMER = 0xdf3, BG_SA_ENABLE_TIMER = 3564, - }; +}; + +enum npc +{ + NPC_ANTI_PERSONNAL_CANNON = 27894, + NPC_DEMOLISHER_SA = 28781, + NPC_RIGGER_SPARKLIGHT = 29260, + NPC_GORGRIL_RIGSPARK = 29262, +}; enum BG_SA_NPCs { @@ -129,30 +130,30 @@ enum BG_SA_Boat const uint32 BG_SA_NpcEntries[BG_SA_MAXNPC] = { - 27894, - 27894, - 27894, - 27894, - 27894, - 27894, - 27894, - 27894, - 27894, - 27894, + NPC_ANTI_PERSONNAL_CANNON, + NPC_ANTI_PERSONNAL_CANNON, + NPC_ANTI_PERSONNAL_CANNON, + NPC_ANTI_PERSONNAL_CANNON, + NPC_ANTI_PERSONNAL_CANNON, + NPC_ANTI_PERSONNAL_CANNON, + NPC_ANTI_PERSONNAL_CANNON, + NPC_ANTI_PERSONNAL_CANNON, + NPC_ANTI_PERSONNAL_CANNON, + NPC_ANTI_PERSONNAL_CANNON, //4 beach demolishers - 28781, - 28781, - 28781, - 28781, + NPC_DEMOLISHER_SA, + NPC_DEMOLISHER_SA, + NPC_DEMOLISHER_SA, + NPC_DEMOLISHER_SA, //Triggers 23472, 23472, 23472, 23472, 23472, - //Fizzle Sparklight, or whatever his name was - 29260, - 29262 + //Used Demolisher Salesman + NPC_RIGGER_SPARKLIGHT, + NPC_GORGRIL_RIGSPARK }; const float BG_SA_NpcSpawnlocs[BG_SA_MAXNPC + BG_SA_DEMOLISHER_AMOUNT][4] = @@ -430,7 +431,6 @@ class BattlegroundSA : public Battleground /// Called when battle start virtual void StartingEventCloseDoors(); virtual void StartingEventOpenDoors(); - /// Called for ini battleground, after that the first player be entered virtual bool SetupBattleground(); virtual void Reset(); @@ -486,6 +486,8 @@ class BattlegroundSA : public Battleground /* Scorekeeping */ /// Update score board + + uint32 GetPlayerDemolisherScore(Player* /*source*/); void UpdatePlayerScore(Player *Source, uint32 type, uint32 value, bool doAddHonor = true); private: diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp index 59053315f72..76aa0b862f5 100755 --- a/src/server/scripts/World/achievement_scripts.cpp +++ b/src/server/scripts/World/achievement_scripts.cpp @@ -19,6 +19,7 @@ #include "BattlegroundAB.h" #include "BattlegroundWS.h" #include "BattlegroundIC.h" +#include "BattlegroundSA.h" class achievement_school_of_hard_knocks : public AchievementCriteriaScript { @@ -165,6 +166,62 @@ class achievement_bg_ic_mowed_down : public AchievementCriteriaScript } }; +class achievement_bg_sa_artillery_veteran : public AchievementCriteriaScript +{ + public: + achievement_bg_sa_artillery_veteran() : AchievementCriteriaScript("achievement_bg_sa_artillery_veteran") { } + + bool OnCheck(Player* source, Unit* target) + { + if (Creature* vehicle = source->GetVehicleCreatureBase()) + { + if (vehicle->GetEntry() == NPC_ANTI_PERSONNAL_CANNON) + return true; + } + + return false; + } +}; + +class achievement_bg_sa_artillery_expert : public AchievementCriteriaScript +{ + public: + achievement_bg_sa_artillery_expert() : AchievementCriteriaScript("achievement_bg_sa_artillery_expert") { } + + bool OnCheck(Player* source, Unit* target) + { + if (Creature* vehicle = source->GetVehicleCreatureBase()) + { + if (vehicle->GetEntry() != NPC_ANTI_PERSONNAL_CANNON) + return false; + + BattlegroundSA* SA = static_cast<BattlegroundSA*>(source->GetBattleground()); + return SA->GetPlayerDemolisherScore(source); + } + + return false; + } +}; + +class achievement_bg_sa_drop_it : public AchievementCriteriaScript +{ + public: + achievement_bg_sa_drop_it() : AchievementCriteriaScript("achievement_bg_sa_drop_it") { } + + enum AchievementData + { + SPELL_CARRYING_SEAFORIUM = 52418, + }; + + bool OnCheck(Player* /*source*/, Unit* target) + { + if (target->HasAura(SPELL_CARRYING_SEAFORIUM)) + return true; + + return false; + } +}; + void AddSC_achievement_scripts() { new achievement_school_of_hard_knocks(); @@ -175,4 +232,7 @@ void AddSC_achievement_scripts() new achievement_bg_ic_resource_glut(); new achievement_bg_ic_glaive_grave(); new achievement_bg_ic_mowed_down(); + new achievement_bg_sa_artillery_veteran(); + new achievement_bg_sa_artillery_expert(); + new achievement_bg_sa_drop_it(); } |
