From 41079fd0e69cde97fcb44d2e6fe03ad198764fea Mon Sep 17 00:00:00 2001 From: Philipp Sehmisch Date: Tue, 4 Mar 2008 06:08:39 +0000 Subject: Added natural HP regeneration, capped HP at maximum and set HP to 1 after respawn. --- src/game-server/being.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'src/game-server/being.cpp') diff --git a/src/game-server/being.cpp b/src/game-server/being.cpp index 6cbf4c3..a97d609 100644 --- a/src/game-server/being.cpp +++ b/src/game-server/being.cpp @@ -32,7 +32,8 @@ Being::Being(int type, int id): MovingObject(type, id), - mAction(STAND) + mAction(STAND), + mHpRegenTimer(0) { Attribute attr = { 0, 0 }; mAttributes.resize(NB_BEING_ATTRIBUTES, attr); @@ -222,6 +223,29 @@ int Being::getModifiedAttribute(int attr) const void Being::update() { + + int oldHP = getModifiedAttribute(BASE_ATTR_HP); + int newHP = oldHP; + int maxHP = getAttribute(BASE_ATTR_HP); + + // regenerate HP + if (mAction != DEAD && mHpRegenTimer++ >= TICKS_PER_HP_REGENERATION) + { + mHpRegenTimer = 0; + newHP += getModifiedAttribute(BASE_ATTR_HP_REGEN); + } + //cap HP at maximum + if (newHP > maxHP) + { + newHP = maxHP; + } + //only update HP when it actually changed to avoid network noise + if (newHP != oldHP) + { + LOG_INFO("HP Update - newHP:"<