diff options
author | Kandera <KanderaDev@gmail.com> | 2012-02-29 11:08:08 -0500 |
---|---|---|
committer | Kandera <KanderaDev@gmail.com> | 2012-02-29 11:08:08 -0500 |
commit | 413a0c08130976676ac26088ccf0afeefdec2a74 (patch) | |
tree | ef42f44f1456d9b7829bc659112d9d2214c8a025 | |
parent | 8e8ff7c66037753ffb2a707f5bfde153405e5f35 (diff) |
Core/Battleground: fix issue with picking up opposite teams flag when returning your teams
-rwxr-xr-x | src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp index 43a29e93c55..f5ee788b68a 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp @@ -435,7 +435,7 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* Source, GameObject* target int32 message_id = 0; ChatMsg type = CHAT_MSG_BG_SYSTEM_NEUTRAL; - + bool flagHandled = false; //alliance flag picked up from base if (Source->GetTeam() == HORDE && this->GetFlagState(ALLIANCE) == BG_WS_FLAG_STATE_ON_BASE && this->BgObjects[BG_WS_OBJECT_A_FLAG] == target_obj->GetGUID()) @@ -453,11 +453,12 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* Source, GameObject* target Source->GetAchievementMgr().StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_SPELL_TARGET, BG_WS_SPELL_SILVERWING_FLAG_PICKED); if (_flagState[1] == BG_WS_FLAG_STATE_ON_PLAYER) _bothFlagsKept = true; + flagHandled = true; } //horde flag picked up from base if (Source->GetTeam() == ALLIANCE && this->GetFlagState(HORDE) == BG_WS_FLAG_STATE_ON_BASE - && this->BgObjects[BG_WS_OBJECT_H_FLAG] == target_obj->GetGUID()) + && this->BgObjects[BG_WS_OBJECT_H_FLAG] == target_obj->GetGUID() && !flagHandled) { message_id = LANG_BG_WS_PICKEDUP_HF; type = CHAT_MSG_BG_SYSTEM_ALLIANCE; @@ -472,10 +473,11 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* Source, GameObject* target Source->GetAchievementMgr().StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_SPELL_TARGET, BG_WS_SPELL_WARSONG_FLAG_PICKED); if (_flagState[0] == BG_WS_FLAG_STATE_ON_PLAYER) _bothFlagsKept = true; + flagHandled = true; } //Alliance flag on ground(not in base) (returned or picked up again from ground!) - if (GetFlagState(ALLIANCE) == BG_WS_FLAG_STATE_ON_GROUND && Source->IsWithinDistInMap(target_obj, 10)) + if (GetFlagState(ALLIANCE) == BG_WS_FLAG_STATE_ON_GROUND && Source->IsWithinDistInMap(target_obj, 10) && !flagHandled) { if (Source->GetTeam() == ALLIANCE) { @@ -487,6 +489,7 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* Source, GameObject* target PlaySoundToAll(BG_WS_SOUND_FLAG_RETURNED); UpdatePlayerScore(Source, SCORE_FLAG_RETURNS, 1); _bothFlagsKept = false; + flagHandled = true; } else { @@ -503,13 +506,14 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* Source, GameObject* target if (_flagDebuffState == 2) Source->CastSpell(Source, WS_SPELL_BRUTAL_ASSAULT, true); UpdateWorldState(BG_WS_FLAG_UNK_ALLIANCE, 1); + flagHandled = true; } //called in HandleGameObjectUseOpcode: //target_obj->Delete(); } //Horde flag on ground(not in base) (returned or picked up again) - if (GetFlagState(HORDE) == BG_WS_FLAG_STATE_ON_GROUND && Source->IsWithinDistInMap(target_obj, 10)) + if (GetFlagState(HORDE) == BG_WS_FLAG_STATE_ON_GROUND && Source->IsWithinDistInMap(target_obj, 10) && !flagHandled) { if (Source->GetTeam() == HORDE) { @@ -521,6 +525,7 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* Source, GameObject* target PlaySoundToAll(BG_WS_SOUND_FLAG_RETURNED); UpdatePlayerScore(Source, SCORE_FLAG_RETURNS, 1); _bothFlagsKept = false; + flagHandled = true; } else { @@ -537,6 +542,7 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* Source, GameObject* target if (_flagDebuffState == 2) Source->CastSpell(Source, WS_SPELL_BRUTAL_ASSAULT, true); UpdateWorldState(BG_WS_FLAG_UNK_HORDE, 1); + flagHandled = true; } //called in HandleGameObjectUseOpcode: //target_obj->Delete(); |