diff options
author | Shauren <shauren.trinity@gmail.com> | 2020-05-01 15:41:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-01 15:41:32 +0200 |
commit | 57a5969c2672b36160fea1b7c38c424de562a57b (patch) | |
tree | ee52f8ddaa8d37297142e59029df461d3000ce31 /src/server/game/Handlers/QuestHandler.cpp | |
parent | fbd74eb5d8b5aa3a6874ee99044054e097b5ef21 (diff) | |
parent | 05ba662d5daaa3428cc01cdaa3794bf5a073ef17 (diff) |
Merge pull request #24500 from funjoker/cherry-picks
Diffstat (limited to 'src/server/game/Handlers/QuestHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index b56e0ec130c..aeafff6d1cc 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -350,46 +350,41 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::Quest { //For AutoSubmition was added plr case there as it almost same exclute AI script cases. Creature* creatureQGiver = object->ToCreature(); - if (!creatureQGiver || !sScriptMgr->OnQuestReward(_player, creatureQGiver, quest, packet.ItemChoiceID)) + // Send next quest + if (Quest const* nextQuest = _player->GetNextQuest(packet.QuestGiverGUID, quest)) { - // Send next quest - if (Quest const* nextQuest = _player->GetNextQuest(packet.QuestGiverGUID, 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); + if (nextQuest->IsAutoAccept() && _player->CanAddQuest(nextQuest, true)) + _player->AddQuestAndCheckCompletion(nextQuest, object); - _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextQuest, packet.QuestGiverGUID, true, false); - } + _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextQuest, packet.QuestGiverGUID, true, false); } - - if (creatureQGiver) - creatureQGiver->GetAI()->sQuestReward(_player, quest, packet.ItemChoiceID); } + + if (creatureQGiver && !sScriptMgr->OnQuestReward(_player, creatureQGiver, quest, packet.ItemChoiceID)) + creatureQGiver->GetAI()->sQuestReward(_player, quest, packet.ItemChoiceID); break; } case TYPEID_GAMEOBJECT: { GameObject* questGiver = object->ToGameObject(); - if (!sScriptMgr->OnQuestReward(_player, questGiver, quest, packet.ItemChoiceID)) + // Send next quest + if (Quest const* nextQuest = _player->GetNextQuest(packet.QuestGiverGUID, quest)) { - // Send next quest - if (Quest const* nextQuest = _player->GetNextQuest(packet.QuestGiverGUID, 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); + if (nextQuest->IsAutoAccept() && _player->CanAddQuest(nextQuest, true)) + _player->AddQuestAndCheckCompletion(nextQuest, object); - _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextQuest, packet.QuestGiverGUID, true, false); - } + _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextQuest, packet.QuestGiverGUID, true, false); } + } + if (!sScriptMgr->OnQuestReward(_player, questGiver, quest, packet.ItemChoiceID)) questGiver->AI()->QuestReward(_player, quest, packet.ItemChoiceID); - } break; } default: @@ -590,7 +585,10 @@ void WorldSession::HandlePushQuestToParty(WorldPackets::Quest::PushQuestToParty& Group* group = sender->GetGroup(); if (!group) + { + sender->SendPushToPartyResponse(sender, QUEST_PUSH_NOT_IN_PARTY); return; + } for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) { @@ -611,6 +609,12 @@ void WorldSession::HandlePushQuestToParty(WorldPackets::Quest::PushQuestToParty& continue; } + if (!receiver->SatisfyQuestDay(quest, false)) + { + sender->SendPushToPartyResponse(receiver, QUEST_PUSH_DIFFERENT_SERVER_DAILY); + continue; + } + if (!receiver->CanTakeQuest(quest, false)) { sender->SendPushToPartyResponse(receiver, QUEST_PUSH_INVALID); |