From 9f8e4b031e4fd31f1260503f0f03e8ce62a0b1c2 Mon Sep 17 00:00:00 2001 From: Azazel Date: Fri, 3 Jun 2011 11:54:44 +0600 Subject: Core/Quests: add anti-cheat check in quest reward method --- src/server/game/Server/Protocol/Handlers/QuestHandler.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/server/game/Server/Protocol/Handlers/QuestHandler.cpp b/src/server/game/Server/Protocol/Handlers/QuestHandler.cpp index 324403d98b5..ae095eb4183 100755 --- a/src/server/game/Server/Protocol/Handlers/QuestHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/QuestHandler.cpp @@ -305,9 +305,15 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket & recv_data) if (!_player->CanInteractWithQuestGiver(pObject)) return; - Quest const *pQuest = sObjectMgr->GetQuestTemplate(quest); - if (pQuest) + if (Quest const *pQuest = sObjectMgr->GetQuestTemplate(quest)) { + if ((!_player->CanSeeStartQuest(pQuest) && _player->GetQuestStatus(quest) == QUEST_STATUS_NONE) || + (_player->GetQuestStatus(quest) != QUEST_STATUS_COMPLETE && !pQuest->IsAutoComplete())) + { + sLog->outError("HACK ALERT: Player %s (guid: %u) is trying to complete quest (id: %u) but he has no right to do it!", + _player->GetName(), _player->GetGUID(), quest); + return; + } if (_player->CanRewardQuest(pQuest, reward, true)) { _player->RewardQuest(pQuest, reward, pObject); -- cgit v1.2.3