summaryrefslogtreecommitdiffstats
path: root/src/game-server/character.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game-server/character.cpp')
-rw-r--r--src/game-server/character.cpp33
1 files changed, 18 insertions, 15 deletions
diff --git a/src/game-server/character.cpp b/src/game-server/character.cpp
index 9299f71..1e0a0b7 100644
--- a/src/game-server/character.cpp
+++ b/src/game-server/character.cpp
@@ -170,7 +170,10 @@ void CharacterComponent::update(Entity &entity)
if (s.abilityInfo->rechargeable &&
s.currentPoints < s.abilityInfo->neededPoints)
{
- s.currentPoints += s.rechargeSpeed;
+ auto *beingComponent = entity.getComponent<BeingComponent>();
+ const double rechargeSpeed = beingComponent->getModifiedAttribute(
+ s.abilityInfo->rechargeAttribute);
+ s.currentPoints += (int)rechargeSpeed;
if (s.currentPoints >= s.abilityInfo->neededPoints &&
s.abilityInfo->rechargedCallback.isValid())
{
@@ -184,7 +187,7 @@ void CharacterComponent::update(Entity &entity)
}
if (!mModifiedAbilities.empty())
- sendAbilityUpdate();
+ sendAbilityUpdate(entity);
}
void CharacterComponent::characterDied(Entity *being)
@@ -326,20 +329,10 @@ bool CharacterComponent::setAbilityMana(int id, int mana)
return false;
}
-bool CharacterComponent::setAbilityRechargeSpeed(int id, int speed)
+void CharacterComponent::sendAbilityUpdate(Entity &entity)
{
- AbilityMap::iterator it = mAbilities.find(id);
- if (it != mAbilities.end())
- {
- it->second.rechargeSpeed = speed;
- mModifiedAbilities.insert(id);
- return true;
- }
- return false;
-}
+ auto *beingComponent = entity.getComponent<BeingComponent>();
-void CharacterComponent::sendAbilityUpdate()
-{
MessageOut msg(GPMSG_ABILITY_STATUS);
for (unsigned id : mModifiedAbilities)
{
@@ -347,10 +340,13 @@ void CharacterComponent::sendAbilityUpdate()
if (it == mAbilities.end())
continue; // got deleted
+ const double rechargeSpeed = beingComponent->getModifiedAttribute(
+ it->second.abilityInfo->rechargeAttribute);
+
msg.writeInt8(id);
msg.writeInt32(it->second.currentPoints);
msg.writeInt32(it->second.abilityInfo->neededPoints);
- msg.writeInt32(it->second.rechargeSpeed);
+ msg.writeInt32((int)rechargeSpeed);
}
mModifiedAbilities.clear();
@@ -483,6 +479,13 @@ void CharacterComponent::attributeChanged(Entity *entity, unsigned attr)
knuckleDamage.base = beingComponent->getModifiedAttribute(ATTR_STR);
knuckleDamage.delta = knuckleDamage.base / 2;
}
+
+ for (auto &abilityIt : mAbilities)
+ {
+ // Inform the client about rechargespeed changes
+ if (abilityIt.second.abilityInfo->rechargeAttribute == attr)
+ mModifiedAbilities.insert(abilityIt.first);
+ }
}
int CharacterComponent::expForLevel(int level)