diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Server/Protocol/Handlers/QuestHandler.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
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); |