aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSubv <s.v.h21@hotmail.com>2012-07-01 14:10:36 -0700
committerSubv <s.v.h21@hotmail.com>2012-07-01 14:10:36 -0700
commitae13832efccb1cb4f0ed8edb545cdab67588095c (patch)
tree6daf95a800910e0e1b6e4037d89f384c18a40520 /src
parent80898c1d0c3b61d3824bd6ca5930b795dab36e78 (diff)
parent890c7e64e17b1303809787255b09a9818ff46c50 (diff)
Merge pull request #6490 from Vincent-Michael/notEvenAScratch
Battleground/Strand of the Ancients: Fix Achievement: Not Even a Scratch
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundSA.cpp12
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundSA.h9
-rwxr-xr-xsrc/server/scripts/World/achievement_scripts.cpp22
3 files changed, 36 insertions, 7 deletions
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
index 133a0aec560..d15c7943bab 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
@@ -56,6 +56,8 @@ void BattlegroundSA::Reset()
GateStatus[i] = BG_SA_GATE_OK;
ShipsStarted = false;
gateDestroyed = false;
+ _notEvenAScratch[BG_TEAM_ALLIANCE] = true;
+ _notEvenAScratch[BG_TEAM_HORDE] = true;
Status = BG_SA_WARMUP;
}
@@ -553,13 +555,13 @@ void BattlegroundSA::EventPlayerDamagedGO(Player* /*player*/, GameObject* go, ui
SendWarningToAll(LANG_BG_SA_IS_UNDER_ATTACK, go->GetGOInfo()->name.c_str());
}
-void BattlegroundSA::HandleKillUnit(Creature* unit, Player* killer)
+void BattlegroundSA::HandleKillUnit(Creature* creature, Player* killer)
{
- if (!unit)
- return;
-
- if (unit->GetEntry() == NPC_DEMOLISHER_SA)
+ if (creature->GetEntry() == NPC_DEMOLISHER_SA)
+ {
UpdatePlayerScore(killer, SCORE_DESTROYED_DEMOLISHER, 1);
+ _notEvenAScratch[Attackers] = false;
+ }
}
/*
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
index c18806490f2..fd11cb2c5ea 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
@@ -456,7 +456,7 @@ class BattlegroundSA : public Battleground
/// Called when a player deal damage to building (door)
virtual void EventPlayerDamagedGO(Player* player, GameObject* go, uint32 eventType);
/// Called when a player kill a unit in bg
- virtual void HandleKillUnit(Creature* unit, Player* killer);
+ virtual void HandleKillUnit(Creature* creature, Player* killer);
/// Return the nearest graveyard where player can respawn
virtual WorldSafeLocsEntry const* GetClosestGraveYard(Player* player);
/// Called when a player click on flag (graveyard flag)
@@ -531,9 +531,12 @@ class BattlegroundSA : public Battleground
/// Update score board
void UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor = true);
- // Achievement Defense of the Ancients
+ // Achievement: Defense of the Ancients
bool gateDestroyed;
+ // Achievement: Not Even a Scratch
+ bool notEvenAScratch(uint32 team) const { return _notEvenAScratch[GetTeamIndexByTeamId(team)]; }
+
/// Id of attacker team
TeamId Attackers;
@@ -615,5 +618,7 @@ class BattlegroundSA : public Battleground
bool InitSecondRound;
std::map<uint32/*id*/, uint32/*timer*/> DemoliserRespawnList;
+ // Achievement: Not Even a Scratch
+ bool _notEvenAScratch[BG_TEAMS_COUNT];
};
#endif
diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp
index 9bcf450b3aa..3dc737f0c95 100755
--- a/src/server/scripts/World/achievement_scripts.cpp
+++ b/src/server/scripts/World/achievement_scripts.cpp
@@ -313,6 +313,27 @@ class achievement_tilted : public AchievementCriteriaScript
}
};
+class achievement_not_even_a_scratch : public AchievementCriteriaScript
+{
+ public:
+ achievement_not_even_a_scratch() : AchievementCriteriaScript("achievement_not_even_a_scratch") { }
+
+ bool OnCheck(Player* source, Unit* /*target*/)
+ {
+ if (!source)
+ return false;
+
+ Battleground* battleground = source->GetBattleground();
+ if (!battleground)
+ return false;
+
+ if (static_cast<BattlegroundSA*>(battleground)->notEvenAScratch(source->GetTeam()))
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_achievement_scripts()
{
new achievement_resilient_victory();
@@ -331,4 +352,5 @@ void AddSC_achievement_scripts()
new achievement_arena_kills("achievement_arena_5v5_kills", ARENA_TYPE_5v5);
new achievement_bg_sa_defense_of_ancients();
new achievement_tilted();
+ new achievement_not_even_a_scratch();
}