mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
[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.
This commit is contained in:
parent
2fab507ed6
commit
0220101f7e
2 changed files with 22 additions and 18 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue