aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp8
-rw-r--r--src/server/game/Entities/Player/Player.cpp17
-rw-r--r--src/server/game/Handlers/LFGHandler.cpp8
-rw-r--r--src/server/game/Quests/QuestDef.cpp11
-rw-r--r--src/server/game/Quests/QuestDef.h4
-rw-r--r--src/server/scripts/Commands/cs_quest.cpp2
6 files changed, 21 insertions, 29 deletions
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index 6ebe906aa92..4ad260d999e 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -473,8 +473,8 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU
data << uint32(0);
}
- data << uint32(quest->GetRewOrReqMoney());
- data << uint32(quest->XPValue(_session->GetPlayer()) * sWorld->getRate(RATE_XP_QUEST));
+ data << uint32(quest->GetRewOrReqMoney(_session->GetPlayer()));
+ data << uint32(quest->GetXPReward(_session->GetPlayer()) * sWorld->getRate(RATE_XP_QUEST));
}
// rewarded honor points. Multiply with 10 to satisfy client
@@ -587,8 +587,8 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUI
data << uint32(0);
}
- data << uint32(quest->GetRewOrReqMoney());
- data << uint32(quest->XPValue(_session->GetPlayer()) * sWorld->getRate(RATE_XP_QUEST));
+ data << uint32(quest->GetRewOrReqMoney(_session->GetPlayer()));
+ data << uint32(quest->GetXPReward(_session->GetPlayer()) * sWorld->getRate(RATE_XP_QUEST));
// rewarded honor points. Multiply with 10 to satisfy client
data << uint32(10 * quest->CalculateHonorGain(_session->GetPlayer()->GetQuestLevel(quest)));
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index c2fe6978456..a5f80989f96 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -15126,22 +15126,16 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
bool rewarded = IsQuestRewarded(quest_id) && !quest->IsDFQuest();
// Not give XP in case already completed once repeatable quest
- uint32 XP = rewarded ? 0 : uint32(quest->XPValue(this)*sWorld->getRate(RATE_XP_QUEST));
+ uint32 XP = rewarded ? 0 : uint32(quest->GetXPReward(this)*sWorld->getRate(RATE_XP_QUEST));
// handle SPELL_AURA_MOD_XP_QUEST_PCT auras
XP *= GetTotalAuraMultiplier(SPELL_AURA_MOD_XP_QUEST_PCT);
- int32 moneyRew = 0;
if (GetLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
GiveXP(XP, nullptr);
- else
- moneyRew = int32(quest->GetRewMoneyMaxLevel() * sWorld->getRate(RATE_DROP_MONEY));
// Give player extra money if GetRewOrReqMoney > 0 and get ReqMoney if negative
- if (quest->GetRewOrReqMoney())
- moneyRew += quest->GetRewOrReqMoney();
-
- if (moneyRew)
+ if (int32 moneyRew = quest->GetRewOrReqMoney(this))
{
ModifyMoney(moneyRew);
@@ -16696,16 +16690,11 @@ void Player::SendQuestReward(Quest const* quest, uint32 XP) const
data << uint32(questid);
if (GetLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
- {
data << uint32(XP);
- data << uint32(quest->GetRewOrReqMoney());
- }
else
- {
data << uint32(0);
- data << uint32(quest->GetRewOrReqMoney() + int32(quest->GetRewMoneyMaxLevel() * sWorld->getRate(RATE_DROP_MONEY)));
- }
+ data << uint32(quest->GetRewOrReqMoney(this));
data << uint32(10 * quest->CalculateHonorGain(GetQuestLevel(quest)));
data << uint32(quest->GetBonusTalents()); // bonus talents
data << uint32(quest->GetRewArenaPoints());
diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp
index 651f77b5477..5186fb10bca 100644
--- a/src/server/game/Handlers/LFGHandler.cpp
+++ b/src/server/game/Handlers/LFGHandler.cpp
@@ -205,8 +205,8 @@ void WorldSession::HandleLfgPlayerLockInfoRequestOpcode(WorldPacket& /*recvData*
if (quest)
{
data << uint8(done);
- data << uint32(quest->GetRewOrReqMoney());
- data << uint32(quest->XPValue(GetPlayer()));
+ data << uint32(quest->GetRewOrReqMoney(GetPlayer()));
+ data << uint32(quest->GetXPReward(GetPlayer()));
data << uint32(0);
data << uint32(0);
data << uint8(quest->GetRewItemsCount());
@@ -504,8 +504,8 @@ void WorldSession::SendLfgPlayerReward(lfg::LfgPlayerRewardData const& rewardDat
data << uint32(rewardData.sdungeonEntry); // Dungeon Finished
data << uint8(rewardData.done);
data << uint32(1);
- data << uint32(rewardData.quest->GetRewOrReqMoney());
- data << uint32(rewardData.quest->XPValue(GetPlayer()));
+ data << uint32(rewardData.quest->GetRewOrReqMoney(GetPlayer()));
+ data << uint32(rewardData.quest->GetXPReward(GetPlayer()));
data << uint32(0);
data << uint32(0);
data << uint8(itemNum);
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index 8ba3eda1f65..1157ba7d24f 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -199,7 +199,7 @@ void Quest::LoadQuestMailSender(Field* fields)
_rewardMailSenderEntry = fields[1].GetUInt32();
}
-uint32 Quest::XPValue(Player* player) const
+uint32 Quest::GetXPReward(Player const* player) const
{
if (player)
{
@@ -227,14 +227,17 @@ uint32 Quest::XPValue(Player* player) const
return 0;
}
-int32 Quest::GetRewOrReqMoney() const
+int32 Quest::GetRewOrReqMoney(Player const* player) const
{
// RequiredMoney: the amount is the negative copper sum.
- if (_rewardMoney <= 0)
+ if (_rewardMoney < 0)
return _rewardMoney;
// RewardMoney: the positive amount
- return int32(_rewardMoney * sWorld->getRate(RATE_MONEY_QUEST));
+ if (!player || player->GetLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ return int32(_rewardMoney * sWorld->getRate(RATE_MONEY_QUEST));
+ else // At level cap, the money reward is the maximum amount between normal and bonus money reward
+ return std::max(int32(GetRewMoneyMaxLevel()), int32(_rewardMoney * sWorld->getRate(RATE_MONEY_QUEST)));
}
uint32 Quest::GetRewMoneyMaxLevel() const
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index 0d2ecb40975..d3989b7ec45 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -207,7 +207,7 @@ class TC_GAME_API Quest
void LoadQuestTemplateAddon(Field* fields);
void LoadQuestMailSender(Field* fields);
- uint32 XPValue(Player* player) const;
+ uint32 GetXPReward(Player const* player) const;
bool HasFlag(uint32 flag) const { return (_flags & flag) != 0; }
void SetFlag(uint32 flag) { _flags |= flag; }
@@ -257,7 +257,7 @@ class TC_GAME_API Quest
std::string const& GetRequestItemsText() const { return _requestItemsText; }
std::string const& GetAreaDescription() const { return _areaDescription; }
std::string const& GetCompletedText() const { return _completedText; }
- int32 GetRewOrReqMoney() const;
+ int32 GetRewOrReqMoney(Player const* player = nullptr) const;
uint32 GetRewHonorAddition() const { return _rewardHonor; }
float GetRewHonorMultiplier() const { return _rewardKillHonor; }
uint32 GetRewMoneyMaxLevel() const; // use in XP calculation at client
diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp
index 3e089717c3a..5b2074cd288 100644
--- a/src/server/scripts/Commands/cs_quest.cpp
+++ b/src/server/scripts/Commands/cs_quest.cpp
@@ -259,7 +259,7 @@ public:
}
// If the quest requires money
- int32 ReqOrRewMoney = quest->GetRewOrReqMoney();
+ int32 ReqOrRewMoney = quest->GetRewOrReqMoney(player);
if (ReqOrRewMoney < 0)
player->ModifyMoney(-ReqOrRewMoney);