diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Player.cpp | 38 | ||||
-rw-r--r-- | src/game/Player.h | 1 |
2 files changed, 30 insertions, 9 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 4bb7956aa5e..718c025706a 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -483,6 +483,9 @@ Player::Player (WorldSession *session): Unit(), m_achievementMgr(this), m_reputa sWorld.IncreasePlayerCount(); m_ChampioningFaction = 0; + + for(int i = 0; i < MAX_POWERS; ++i) + m_powerFraction[i] = 0; } Player::~Player () @@ -2048,11 +2051,17 @@ void Player::RegenerateAll() void Player::Regenerate(Powers power) { + uint32 maxValue = GetMaxPower(power); + if(!maxValue) + return; + + uint32 curValue = GetPower(power); + if(curValue == maxValue) + return; + // TODO: possible use of miscvalueb instead of amount if (HasAuraTypeWithValue(SPELL_AURA_PREVENT_REGENERATE_POWER, power)) return; - uint32 curValue = GetPower(power); - uint32 maxValue = GetMaxPower(power); float addvalue = 0.0f; @@ -2107,22 +2116,33 @@ void Player::Regenerate(Powers power) addvalue *= ((*i)->GetAmount() + 100) / 100.0f; } + addvalue += m_powerFraction[power]; + uint32 integerValue = (uint32)addvalue; + if (power != POWER_RAGE && power != POWER_RUNIC_POWER) { - if((addvalue-uint32(addvalue)) >= 0.50f) - curValue += uint32(addvalue+1); - else - curValue += uint32(addvalue); + curValue += integerValue; if (curValue > maxValue) + { curValue = maxValue; + m_powerFraction[power] = 0; + } + else + m_powerFraction[power] = addvalue - integerValue; } else { - if(curValue <= uint32(addvalue)) - curValue = 0; + if(curValue > integerValue) + { + curValue -= integerValue; + m_powerFraction[power] = addvalue - integerValue; + } else - curValue -= uint32(addvalue); + { + curValue = 0; + m_powerFraction[power] = 0; + } } if(m_regenTimerCount >= 2000) SetPower(power, curValue); diff --git a/src/game/Player.h b/src/game/Player.h index 9693312e3df..ec58459bea0 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -2221,6 +2221,7 @@ Spell * m_spellModTakingSpell; protected: uint32 m_regenTimerCount; + float m_powerFraction[MAX_POWERS]; uint32 m_contestedPvPTimer; /*********************************************************/ |