diff options
author | ariel- <ariel-@users.noreply.github.com> | 2017-04-24 16:33:51 -0300 |
---|---|---|
committer | ariel- <ariel-@users.noreply.github.com> | 2017-04-24 16:34:50 -0300 |
commit | 157e9311c41a8d33f7a2e3d5381ffc09d4585c42 (patch) | |
tree | 7a28c7d3617a5dfb979d987f969d58a8018f066c /src | |
parent | 4c09b8a02f983e54bdd8049af130f7ca0bde218d (diff) |
Core/Quests: implemented MSG_QUEST_PUSH_RESULT notifications
- Allow to share already completed (but not rewarded) quests, restriction was unblizzlike
thanks Cannix for the heads up
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 31 | ||||
-rw-r--r-- | src/server/game/Quests/QuestDef.h | 3 |
4 files changed, 26 insertions, 20 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e73d83af94c..e359ec8af4f 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15952,12 +15952,12 @@ bool Player::CanShareQuest(uint32 quest_id) const QuestStatusMap::const_iterator itr = m_QuestStatus.find(quest_id); if (itr != m_QuestStatus.end()) { - if (itr->second.Status != QUEST_STATUS_INCOMPLETE) - return false; - // in pool and not currently available (wintergrasp weekly, dalaran weekly) - can't share if (sPoolMgr->IsPartOfAPool<Quest>(quest_id) && !sPoolMgr->IsSpawnedObject<Quest>(quest_id)) + { + SendPushToPartyResponse(this, QUEST_PARTY_MSG_CANT_BE_SHARED_TODAY); return false; + } return true; } @@ -16821,14 +16821,14 @@ void Player::SendQuestConfirmAccept(const Quest* quest, Player* pReceiver) const } } -void Player::SendPushToPartyResponse(Player* player, uint8 msg) const +void Player::SendPushToPartyResponse(Player const* player, uint8 msg) const { if (player) { WorldPacket data(MSG_QUEST_PUSH_RESULT, 8 + 1); data << uint64(player->GetGUID()); data << uint8(msg); // valid values: 0-8 - GetSession()->SendPacket(&data); + SendDirectMessage(&data); TC_LOG_DEBUG("network", "WORLD: Sent MSG_QUEST_PUSH_RESULT"); } } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index c251681eb09..75ebfe4e60c 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1420,7 +1420,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SendQuestTimerFailed(uint32 questId) const; void SendCanTakeQuestResponse(QuestFailedReason msg) const; void SendQuestConfirmAccept(Quest const* quest, Player* pReceiver) const; - void SendPushToPartyResponse(Player* player, uint8 msg) const; + void SendPushToPartyResponse(Player const* player, uint8 msg) const; void SendQuestUpdateAddItem(Quest const* quest, uint32 itemIdx, uint16 count) const; void SendQuestUpdateAddCreatureOrGo(Quest const* quest, ObjectGuid guid, uint32 creatureOrGOIdx, uint16 oldCount, uint16 addCount); void SendQuestUpdateAddPlayer(Quest const* quest, uint16 oldCount, uint16 addCount); diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index c549a49adf3..85254d068b7 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -555,7 +555,10 @@ void WorldSession::HandlePushQuestToParty(WorldPacket& recvPacket) Group* group = sender->GetGroup(); if (!group) + { + sender->SendPushToPartyResponse(sender, QUEST_PARTY_MSG_NOT_IN_PARTY); return; + } for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) { @@ -576,6 +579,12 @@ void WorldSession::HandlePushQuestToParty(WorldPacket& recvPacket) continue; } + if (!receiver->SatisfyQuestDay(quest, false)) + { + sender->SendPushToPartyResponse(receiver, QUEST_PARTY_MSG_NOT_ELIGIBLE_TODAY); + continue; + } + if (!receiver->CanTakeQuest(quest, false)) { sender->SendPushToPartyResponse(receiver, QUEST_PARTY_MSG_CANT_TAKE_QUEST); @@ -618,21 +627,17 @@ void WorldSession::HandleQuestPushResult(WorldPacket& recvPacket) TC_LOG_DEBUG("network", "WORLD: Received MSG_QUEST_PUSH_RESULT"); - if (_player->GetDivider()) + if (!_player->GetDivider()) + return; + + if (_player->GetDivider() == guid) { - if (_player->GetDivider() == guid) - { - Player* player = ObjectAccessor::FindPlayer(_player->GetDivider()); - if (player) - { - WorldPacket data(MSG_QUEST_PUSH_RESULT, 8 + 4 + 1); - data << uint64(_player->GetGUID()); - data << uint8(msg); // valid values: 0-8 - player->SendDirectMessage(&data); - } - } - _player->SetDivider(ObjectGuid::Empty); + Player* player = ObjectAccessor::FindPlayer(guid); + if (player) + player->SendPushToPartyResponse(_player, msg); } + + _player->SetDivider(ObjectGuid::Empty); } void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket*/) diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index c92b548f7b4..eb653ccf096 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -73,7 +73,8 @@ enum QuestShareMessages : uint8 QUEST_PARTY_MSG_FINISH_QUEST = 7, QUEST_PARTY_MSG_CANT_BE_SHARED_TODAY = 8, QUEST_PARTY_MSG_SHARING_TIMER_EXPIRED = 9, - QUEST_PARTY_MSG_NOT_IN_PARTY = 10 + QUEST_PARTY_MSG_NOT_IN_PARTY = 10, + QUEST_PARTY_MSG_NOT_ELIGIBLE_TODAY = 11 }; enum QuestTradeSkill |