Problem: After reaching max level (80) the player receives the bonus gold for each time he turns in a daily quests
Fix: rewrite code in that way the experience points or gold is only given the first time the quest is turned in
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index d16196b..f579213 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -13930,15 +13930,21 @@ void Player::RewardQuest(Quest const *pQuest, uint32 reward, Object* questGiver,
QuestStatusData& q_status = mQuestStatus[quest_id];
// Not give XP in case already completed once repeatable quest
- uint32 XP = q_status.m_rewarded ? 0 : uint32(pQuest->XPValue(this)*sWorld.getConfig(CONFIG_FLOAT_RATE_XP_QUEST));
+ uint32 xp = 0;
+ if ( !q_status.m_rewarded )
+ {
+ if (getLevel() < sWorld.getConfig(CONFIG_UINT32_MAX_PLAYER_LEVEL))
+ {
+ xp = uint32(pQuest->XPValue(this)*sWorld.getConfig(CONFIG_FLOAT_RATE_XP_QUEST));
+ GiveXP( xp, NULL);
+ }
+ else
+ {
+ uint32 money = uint32(pQuest->GetRewMoneyMaxLevel() * sWorld.getConfig(CONFIG_FLOAT_RATE_DROP_MONEY));
+ ModifyMoney( money );
+ GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD, money);
+ }
- if (getLevel() < sWorld.getConfig(CONFIG_UINT32_MAX_PLAYER_LEVEL))
- GiveXP(XP , NULL);
- else
- {
- uint32 money = uint32(pQuest->GetRewMoneyMaxLevel() * sWorld.getConfig(CONFIG_FLOAT_RATE_DROP_MONEY));
- ModifyMoney( money );
- GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD, money);
}
// Give player extra money if GetRewOrReqMoney > 0 and get ReqMoney if negative
@@ -13993,7 +13999,7 @@ void Player::RewardQuest(Quest const *pQuest, uint32 reward, Object* questGiver,
q_status.uState = QUEST_CHANGED;
if (announce)
- SendQuestReward(pQuest, XP, questGiver);
+ SendQuestReward(pQuest, xp, questGiver);
bool handled = false;
Sorry for not putting it into a code block but it totally spoils the view