diff options
-rw-r--r-- | src/server/game/Entities/Creature/GossipDef.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 22 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 1 |
6 files changed, 23 insertions, 24 deletions
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index 170aa2ecbb3..48a76bcc2bb 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -421,7 +421,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU packet.QuestID = quest->GetQuestId(); packet.PortraitGiver = quest->GetQuestGiverPortrait(); packet.PortraitTurnIn = quest->GetQuestTurnInPortrait(); - packet.DisplayPopup = activateAccept; + packet.AutoLaunched = activateAccept; packet.QuestFlags[0] = quest->GetFlags(); packet.QuestFlags[1] = quest->GetFlagsEx(); packet.SuggestedPartyMembers = quest->GetSuggestedPlayers(); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 0954cebe91d..f6884b36a61 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15310,8 +15310,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, SQLTransaction trans = SQLTransaction(nullptr); _SaveQuestStatus(trans); - if (announce) - SendQuestReward(quest, XP); + SendQuestReward(quest, questGiver->ToCreature(), XP, !announce); // cast spells after mark quest complete (some spells have quest completed state requirements in spell_area data) if (quest->GetRewSpell() > 0) @@ -16973,17 +16972,15 @@ void Player::SendQuestComplete(Quest const* quest) const } } -void Player::SendQuestReward(Quest const* quest, uint32 XP) const +void Player::SendQuestReward(Quest const* quest, Creature const* questGiver, uint32 xp, bool hideChatMessage) const { uint32 questId = quest->GetQuestId(); sGameEventMgr->HandleQuestComplete(questId); - uint32 xp; uint32 moneyReward; if (getLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) { - xp = XP; moneyReward = GetQuestMoneyReward(quest); } else // At max level, increase gold reward @@ -17000,10 +16997,17 @@ void Player::SendQuestReward(Quest const* quest, uint32 XP) const packet.SkillLineIDReward = quest->GetRewardSkillId(); packet.NumSkillUpsReward = quest->GetRewardSkillPoints(); - // @todo fix these 3 - packet.UseQuestReward = true; - packet.LaunchGossip = true; - //packet.ItemReward + if (questGiver) + { + if (questGiver->IsGossip()) + packet.LaunchGossip = true; + else if (questGiver->IsQuestGiver()) + packet.LaunchQuest = true; + else if (quest->GetNextQuestInChain() && !quest->HasFlag(QUEST_FLAGS_AUTOCOMPLETE)) + packet.UseQuestReward = true; + } + + packet.HideChatMessage = hideChatMessage; GetSession()->SendPacket(packet.Write()); } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index f1006c14e0f..6a8d1a09419 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1434,7 +1434,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SetQuestObjectiveData(QuestObjective const& objective, int32 data); bool IsQuestObjectiveProgressComplete(Quest const* quest) const; void SendQuestComplete(Quest const* quest) const; - void SendQuestReward(Quest const* quest, uint32 XP) const; + void SendQuestReward(Quest const* quest, Creature const* questGiver, uint32 xp, bool hideChatMessage) const; void SendQuestFailed(uint32 questID, InventoryResult reason = EQUIP_ERR_OK) const; void SendQuestTimerFailed(uint32 questID) const; void SendCanTakeQuestResponse(QuestFailedReason reason, bool sendErrorMessage = true, std::string reasonText = "") const; diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 6e63c64782d..73ff51c0032 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -536,7 +536,7 @@ void WorldSession::HandleQuestgiverCompleteQuest(WorldPackets::Quest::QuestGiver if (!object) return; - if (autoCompleteMode == 0) + if (!autoCompleteMode) { if (!object->hasInvolvedQuest(packet.QuestID)) return; @@ -578,10 +578,6 @@ void WorldSession::HandleQuestgiverCompleteQuest(WorldPackets::Quest::QuestGiver } } -void WorldSession::HandleQuestgiverQuestAutoLaunch(WorldPacket& /*recvPacket*/) -{ -} - void WorldSession::HandlePushQuestToParty(WorldPackets::Quest::PushQuestToParty& packet) { if (!_player->CanShareQuest(packet.QuestID)) diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 5ccb0e9b745..1492dc7e35e 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -300,8 +300,8 @@ WorldPacket const* WorldPackets::Quest::QuestGiverOfferRewardMessage::Write() { _worldPacket << QuestData; // WorldPackets::Quest::QuestGiverOfferReward _worldPacket << int32(QuestPackageID); - _worldPacket << int32(PortraitTurnIn); _worldPacket << int32(PortraitGiver); + _worldPacket << int32(PortraitTurnIn); _worldPacket.WriteBits(QuestTitle.size(), 9); _worldPacket.WriteBits(RewardText.size(), 12); @@ -359,13 +359,13 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestDetails::Write() _worldPacket << int32(QuestID); _worldPacket << int32(QuestPackageID); _worldPacket << int32(PortraitGiver); - _worldPacket << int32(SuggestedPartyMembers); + _worldPacket << int32(PortraitTurnIn); _worldPacket << uint32(QuestFlags[0]); // Flags _worldPacket << uint32(QuestFlags[1]); // FlagsEx - _worldPacket << int32(PortraitTurnIn); + _worldPacket << int32(SuggestedPartyMembers); _worldPacket << uint32(LearnSpells.size()); - _worldPacket << int32(DescEmotes.size()); - _worldPacket << int32(Objectives.size()); + _worldPacket << uint32(DescEmotes.size()); + _worldPacket << uint32(Objectives.size()); _worldPacket << int32(QuestStartItemID); for (int32 spell : LearnSpells) @@ -392,9 +392,9 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestDetails::Write() _worldPacket.WriteBits(PortraitGiverName.size(), 8); _worldPacket.WriteBits(PortraitTurnInText.size(), 10); _worldPacket.WriteBits(PortraitTurnInName.size(), 8); - _worldPacket.WriteBit(DisplayPopup); - _worldPacket.WriteBit(StartCheat); _worldPacket.WriteBit(AutoLaunched); + _worldPacket.WriteBit(StartCheat); + _worldPacket.WriteBit(DisplayPopup); _worldPacket.FlushBits(); _worldPacket << Rewards; // WorldPackets::Quest::QuestRewards diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 3680636ab02..ec535eee114 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -1433,7 +1433,6 @@ class TC_GAME_API WorldSession void HandleQuestLogRemoveQuest(WorldPackets::Quest::QuestLogRemoveQuest& packet); void HandleQuestConfirmAccept(WorldPackets::Quest::QuestConfirmAccept& packet); void HandleQuestgiverCompleteQuest(WorldPackets::Quest::QuestGiverCompleteQuest& packet); - void HandleQuestgiverQuestAutoLaunch(WorldPacket& recvPacket); void HandlePushQuestToParty(WorldPackets::Quest::PushQuestToParty& packet); void HandleQuestPushResult(WorldPackets::Quest::QuestPushResult& packet); void HandleRequestWorldQuestUpdate(WorldPackets::Quest::RequestWorldQuestUpdate& packet); |