From 0220101f7e37370c3af14a7f32b7e78172eedc69 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Thu, 28 Jul 2011 17:52:16 +0400 Subject: [PATCH] [11759] Fixed money reward for max level and repeatable quests * Remove excluding normal repeatable quests not first cases for money/xp rewards. This is not confirmed functionality and possible related wrong repeating flag set for "first" repeating quest versions. Whern exist normal quest and second repeating quest with same details. * At max level positive RewOrReqMoney already included in RewMoneyMaxLevel and then not need rewarded\ * When RewOrReqMoney > RewMoneyMaxLevel then RewMoneyMaxLevel values ignored and always used RewOrReqMoney as money reward. Thanks to Lynx3d for original problem research. --- src/game/Player.cpp | 38 +++++++++++++++++++++----------------- src/shared/revision_nr.h | 2 +- 2 files changed, 22 insertions(+), 18 deletions(-) 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__