aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Battlegrounds/Battleground.cpp1
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundSA.cpp13
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundSA.h74
-rwxr-xr-xsrc/server/scripts/World/achievement_scripts.cpp60
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();
}