From 56d355935b99de7039c3c21021d11b9713305b6a Mon Sep 17 00:00:00 2001 From: Paul Coene Date: Sat, 10 Sep 2016 14:21:19 -0400 Subject: [PATCH] Fix task experience by level % to take into account hell level rule. --- zone/exp.cpp | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/zone/exp.cpp b/zone/exp.cpp index 93c689b7c..63989a4e9 100644 --- a/zone/exp.cpp +++ b/zone/exp.cpp @@ -705,10 +705,33 @@ uint32 Client::GetEXPForLevel(uint16 check_level) return finalxp; } -void Client::AddLevelBasedExp(uint8 exp_percentage, uint8 max_level) { - if (exp_percentage > 100) { exp_percentage = 100; } - if (!max_level || GetLevel() < max_level) { max_level = GetLevel(); } - uint32 newexp = GetEXP() + ((GetEXPForLevel(max_level + 1) - GetEXPForLevel(max_level)) * exp_percentage / 100); +void Client::AddLevelBasedExp(uint8 exp_percentage, uint8 max_level) +{ + uint32 award; + uint32 xp_for_level; + + if (exp_percentage > 100) + { + exp_percentage = 100; + } + + if (!max_level || GetLevel() < max_level) + { + max_level = GetLevel(); + } + + xp_for_level = GetEXPForLevel(max_level + 1) - GetEXPForLevel(max_level); + award = xp_for_level * exp_percentage / 100; + + if(RuleB(Zone, LevelBasedEXPMods)) + { + if(zone->level_exp_mod[GetLevel()].ExpMod) + { + award *= zone->level_exp_mod[GetLevel()].ExpMod; + } + } + + uint32 newexp = GetEXP() + award; SetEXP(newexp, GetAAXP()); }