diff --git a/src/game/Player.cpp b/src/game/Player.cpp index da41859ab..1e2c24c92 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -13985,33 +13985,37 @@ 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 = 0; + // Used for client inform but rewarded only in case not max level + uint32 xp = uint32(pQuest->XPValue(this) * sWorld.getConfig(CONFIG_FLOAT_RATE_XP_QUEST)); - // Not give XP (and money replacement) in case already completed once repeatable quest (not daily/weekly cases) - if (!q_status.m_rewarded || pQuest->IsDailyOrWeekly()) + if (getLevel() < sWorld.getConfig(CONFIG_UINT32_MAX_PLAYER_LEVEL)) { - xp = uint32(pQuest->XPValue(this)*sWorld.getConfig(CONFIG_FLOAT_RATE_XP_QUEST)); + GiveXP(xp , NULL); - if (getLevel() < sWorld.getConfig(CONFIG_UINT32_MAX_PLAYER_LEVEL)) - GiveXP(xp , NULL); - else + // Give player extra money (for max level already included in pQuest->GetRewMoneyMaxLevel()) + if (pQuest->GetRewOrReqMoney() > 0) { - uint32 money = uint32(pQuest->GetRewMoneyMaxLevel() * sWorld.getConfig(CONFIG_FLOAT_RATE_DROP_MONEY)); - ModifyMoney(money); - GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD, money); + ModifyMoney(pQuest->GetRewOrReqMoney()); + GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD, pQuest->GetRewOrReqMoney()); } } - - // Give player extra money if GetRewOrReqMoney > 0 and get ReqMoney if negative - if (pQuest->GetRewOrReqMoney()) + else { - ModifyMoney(pQuest->GetRewOrReqMoney()); + // reward money for max level already included in pQuest->GetRewMoneyMaxLevel() + uint32 money = uint32(pQuest->GetRewMoneyMaxLevel() * sWorld.getConfig(CONFIG_FLOAT_RATE_DROP_MONEY)); - if (pQuest->GetRewOrReqMoney() > 0) - GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD, pQuest->GetRewOrReqMoney()); + // reward money used if > xp replacement money + if (pQuest->GetRewOrReqMoney() > int32(money)) + money = pQuest->GetRewOrReqMoney(); + + ModifyMoney(money); + GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD, money); } + // req money case + if (pQuest->GetRewOrReqMoney() < 0) + ModifyMoney(pQuest->GetRewOrReqMoney()); + // honor reward if (uint32 honor = pQuest->CalculateRewardHonor(getLevel())) RewardHonor(NULL, 0, honor); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index c2abfca5f..602dddb1a 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "11758" + #define REVISION_NR "11759" #endif // __REVISION_NR_H__