summaryrefslogtreecommitdiffstats
path: root/src/game-server/abilitycomponent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game-server/abilitycomponent.cpp')
-rw-r--r--src/game-server/abilitycomponent.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/game-server/abilitycomponent.cpp b/src/game-server/abilitycomponent.cpp
index 5b27be1..60c9b86 100644
--- a/src/game-server/abilitycomponent.cpp
+++ b/src/game-server/abilitycomponent.cpp
@@ -27,7 +27,9 @@
#include "utils/logger.h"
-AbilityComponent::AbilityComponent(Entity &entity)
+AbilityComponent::AbilityComponent(Entity &entity):
+ mLastUsedAbilityId(0),
+ mLastTargetBeingId(0)
{
entity.getComponent<BeingComponent>()->signal_attribute_changed.connect(
sigc::mem_fun(this, &AbilityComponent::attributeChanged));
@@ -136,6 +138,14 @@ void AbilityComponent::useAbilityOnBeing(Entity &user, int id, Entity *b)
script->push(b);
script->push(ability.abilityInfo->id);
script->execute(user.getMap());
+
+ mLastUsedAbilityId = id;
+ if (b)
+ mLastTargetBeingId = b->getComponent<ActorComponent>()->getPublicID();
+ else
+ mLastTargetBeingId = 0;
+ user.getComponent<ActorComponent>()->raiseUpdateFlags(
+ UPDATEFLAG_ABILITY_ON_BEING);
}
/**
@@ -166,6 +176,11 @@ void AbilityComponent::useAbilityOnPoint(Entity &user, int id, int x, int y)
script->push(y);
script->push(ability.abilityInfo->id);
script->execute(user.getMap());
+
+ mLastUsedAbilityId = id;
+ mLastTargetPoint = Point(x, y);
+ user.getComponent<ActorComponent>()->raiseUpdateFlags(
+ UPDATEFLAG_ABILITY_ON_POINT);
}
/**
@@ -211,7 +226,10 @@ void AbilityComponent::startCooldown(
{
unsigned cooldownAttribute = abilityInfo->cooldownAttribute;
auto *bc = entity.getComponent<BeingComponent>();
- mCooldown.set((int)bc->getModifiedAttribute(cooldownAttribute));
+ int cooldown = (int)bc->getModifiedAttribute(cooldownAttribute);
+ // Enforce a minimum cooldown of 1 tick to prevent syncing issues
+ cooldown = std::max(cooldown, 1);
+ mCooldown.set(cooldown);
signal_cooldown_activated.emit();
}