diff options
-rw-r--r-- | src/server/game/Entities/Creature/GossipDef.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 17 | ||||
-rw-r--r-- | src/server/game/Handlers/LFGHandler.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Quests/QuestDef.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Quests/QuestDef.h | 4 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_quest.cpp | 2 |
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); |