aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/QuestHandler.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-03-14 19:09:15 +0100
committerShauren <shauren.trinity@gmail.com>2025-03-14 19:09:15 +0100
commit4d0903c61ccce5ed44c87483f0cdbca7ec7ddf6b (patch)
tree659f891a464031c6391e862ea856bec36691fce6 /src/server/game/Handlers/QuestHandler.cpp
parente79228533e0856f34e1a6d2de88497cff3d164f3 (diff)
Core/Misc: Reduce differences between branches
Diffstat (limited to 'src/server/game/Handlers/QuestHandler.cpp')
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp100
1 files changed, 51 insertions, 49 deletions
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp
index 5dff546301b..7c74891d6d3 100644
--- a/src/server/game/Handlers/QuestHandler.cpp
+++ b/src/server/game/Handlers/QuestHandler.cpp
@@ -276,6 +276,10 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData)
TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_CHOOSE_REWARD npc = {}, quest = {}, reward = {}", guid.ToString(), questId, reward);
+ Quest const* quest = sObjectMgr->GetQuestTemplate(questId);
+ if (!quest)
+ return;
+
Object* object = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT);
if (!object || !object->hasInvolvedQuest(questId))
return;
@@ -284,71 +288,69 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData)
if (!_player->CanInteractWithQuestGiver(object))
return;
- if (Quest const* quest = sObjectMgr->GetQuestTemplate(questId))
+ if ((!_player->CanSeeStartQuest(quest) && _player->GetQuestStatus(questId) == QUEST_STATUS_NONE) ||
+ (_player->GetQuestStatus(questId) != QUEST_STATUS_COMPLETE && !quest->IsAutoComplete()))
{
- if ((!_player->CanSeeStartQuest(quest) && _player->GetQuestStatus(questId) == QUEST_STATUS_NONE) ||
- (_player->GetQuestStatus(questId) != QUEST_STATUS_COMPLETE && !quest->IsAutoComplete()))
- {
- TC_LOG_ERROR("entities.player.cheat", "Error in QUEST_STATUS_COMPLETE: player {} {} tried to complete quest {}, but is not allowed to do so (possible packet-hacking or high latency)",
- _player->GetName(), _player->GetGUID().ToString(), questId);
- return;
- }
- if (_player->CanRewardQuest(quest, true)) // First, check if player is allowed to turn the quest in (all objectives completed). If not, we send players to the offer reward screen
+ TC_LOG_ERROR("entities.player.cheat", "Error in QUEST_STATUS_COMPLETE: player {} {} tried to complete quest {}, but is not allowed to do so (possible packet-hacking or high latency)",
+ _player->GetName(), _player->GetGUID().ToString(), questId);
+ return;
+ }
+
+ if (_player->CanRewardQuest(quest, true)) // First, check if player is allowed to turn the quest in (all objectives completed). If not, we send players to the offer reward screen
+ {
+ if (_player->CanRewardQuest(quest, reward, true)) // Then check if player can receive the reward item (if inventory is not full, if player doesn't have too many unique items, and so on). If not, the client will close the gossip window
{
- if (_player->CanRewardQuest(quest, reward, true)) // Then check if player can receive the reward item (if inventory is not full, if player doesn't have too many unique items, and so on). If not, the client will close the gossip window
- {
- _player->RewardQuest(quest, reward, object);
+ _player->RewardQuest(quest, reward, object);
- switch (object->GetTypeId())
+ switch (object->GetTypeId())
+ {
+ case TYPEID_UNIT:
{
- case TYPEID_UNIT:
+ Creature* questgiver = object->ToCreature();
+ // Send next quest
+ if (Quest const* nextQuest = _player->GetNextQuest(questgiver, quest))
{
- Creature* questgiver = object->ToCreature();
- // Send next quest
- if (Quest const* nextQuest = _player->GetNextQuest(guid, quest))
+ // Only send the quest to the player if the conditions are met
+ if (_player->CanTakeQuest(nextQuest, false))
{
- // Only send the quest to the player if the conditions are met
- if (_player->CanTakeQuest(nextQuest, false))
- {
- if (nextQuest->IsAutoAccept() && _player->CanAddQuest(nextQuest, true))
- _player->AddQuestAndCheckCompletion(nextQuest, object);
-
- _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextQuest, guid, true);
- }
- }
+ if (nextQuest->IsAutoAccept() && _player->CanAddQuest(nextQuest, true))
+ _player->AddQuestAndCheckCompletion(nextQuest, object);
- _player->PlayerTalkClass->ClearMenus();
- questgiver->AI()->OnQuestReward(_player, quest, reward);
- break;
+ _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextQuest, guid, true);
+ }
}
- case TYPEID_GAMEOBJECT:
+
+ _player->PlayerTalkClass->ClearMenus();
+ questgiver->AI()->OnQuestReward(_player, quest, reward);
+ break;
+ }
+ case TYPEID_GAMEOBJECT:
+ {
+ GameObject* questGiver = object->ToGameObject();
+ // Send next quest
+ if (Quest const* nextQuest = _player->GetNextQuest(questGiver, quest))
{
- GameObject* questGiver = object->ToGameObject();
- // Send next quest
- if (Quest const* nextQuest = _player->GetNextQuest(guid, quest))
+ // Only send the quest to the player if the conditions are met
+ if (_player->CanTakeQuest(nextQuest, false))
{
- // Only send the quest to the player if the conditions are met
- if (_player->CanTakeQuest(nextQuest, false))
- {
- if (nextQuest->IsAutoAccept() && _player->CanAddQuest(nextQuest, true))
- _player->AddQuestAndCheckCompletion(nextQuest, object);
-
- _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextQuest, guid, true);
- }
- }
+ if (nextQuest->IsAutoAccept() && _player->CanAddQuest(nextQuest, true))
+ _player->AddQuestAndCheckCompletion(nextQuest, object);
- _player->PlayerTalkClass->ClearMenus();
- questGiver->AI()->OnQuestReward(_player, quest, reward);
- break;
+ _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextQuest, guid, true);
+ }
}
- default:
- break;
+
+ _player->PlayerTalkClass->ClearMenus();
+ questGiver->AI()->OnQuestReward(_player, quest, reward);
+ break;
}
+ default:
+ break;
}
}
- else
- _player->PlayerTalkClass->SendQuestGiverOfferReward(quest, guid, true);
}
+ else
+ _player->PlayerTalkClass->SendQuestGiverOfferReward(quest, guid, true);
}
void WorldSession::HandleQuestgiverRequestRewardOpcode(WorldPacket& recvData)