aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp22
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp6
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp14
-rw-r--r--src/server/game/Server/WorldSession.h1
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);