From 10809d9113426c4273b63a929622730f5b666b95 Mon Sep 17 00:00:00 2001 From: mik1893 Date: Sun, 10 Jul 2016 23:30:25 +0100 Subject: [PATCH] Core/Battleground: Deserter track on bg leaving --- src/game/Battlegrounds/BattlegroundQueue.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/game/Battlegrounds/BattlegroundQueue.cpp b/src/game/Battlegrounds/BattlegroundQueue.cpp index 5bbcffb09..75202db3c 100644 --- a/src/game/Battlegrounds/BattlegroundQueue.cpp +++ b/src/game/Battlegrounds/BattlegroundQueue.cpp @@ -989,6 +989,8 @@ bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) if (!player) return true; + Battleground* bg = sBattlegroundMgr->GetBattleground(m_BgInstanceGUID); + // battleground can be already deleted, bg may be NULL! // check if still in queue for this battleground @@ -999,6 +1001,15 @@ bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) BattlegroundQueue &bgQueue = sBattlegroundMgr->GetBattlegroundQueue(m_BgQueueTypeId); if (bgQueue.IsPlayerInvited(m_PlayerGuid, m_BgInstanceGUID, m_RemoveTime)) { + // track if player leaves the BG by not clicking enter button + if (bg && bg->isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS) && + (bg->GetStatus() == STATUS_IN_PROGRESS || bg->GetStatus() == STATUS_WAIT_JOIN)) + { + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK); + stmt->setUInt32(0, player->GetGUIDLow()); + stmt->setUInt8(1, BG_DESERTION_TYPE_NO_ENTER_BUTTON); + CharacterDatabase.Execute(stmt); + } player->RemoveBattlegroundQueueId(m_BgQueueTypeId); bgQueue.RemovePlayer(m_PlayerGuid, false, queueSlot); }