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.cpp35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/game-server/abilitycomponent.cpp b/src/game-server/abilitycomponent.cpp
index 60c9b86..961617b 100644
--- a/src/game-server/abilitycomponent.cpp
+++ b/src/game-server/abilitycomponent.cpp
@@ -84,7 +84,7 @@ bool AbilityComponent::abilityUseCheck(AbilityMap::iterator it)
if (it == mAbilities.end())
{
- LOG_INFO("Character uses ability " << it->first
+ LOG_INFO("Entity uses ability " << it->first
<< " without authorization.");
return false;
}
@@ -115,15 +115,15 @@ bool AbilityComponent::abilityUseCheck(AbilityMap::iterator it)
* makes the character perform a ability on a being
* when it is allowed to do so
*/
-void AbilityComponent::useAbilityOnBeing(Entity &user, int id, Entity *b)
+bool AbilityComponent::useAbilityOnBeing(Entity &user, int id, Entity *b)
{
AbilityMap::iterator it = mAbilities.find(id);
if (!abilityUseCheck(it))
- return;
+ return false;
AbilityValue &ability = it->second;
if (ability.abilityInfo->target != AbilityManager::TARGET_BEING)
- return;
+ return false;
if (ability.abilityInfo->autoconsume) {
ability.currentPoints = 0;
@@ -146,21 +146,22 @@ void AbilityComponent::useAbilityOnBeing(Entity &user, int id, Entity *b)
mLastTargetBeingId = 0;
user.getComponent<ActorComponent>()->raiseUpdateFlags(
UPDATEFLAG_ABILITY_ON_BEING);
+ return true;
}
/**
* makes the character perform a ability on a map point
* when it is allowed to do so
*/
-void AbilityComponent::useAbilityOnPoint(Entity &user, int id, int x, int y)
+bool AbilityComponent::useAbilityOnPoint(Entity &user, int id, int x, int y)
{
AbilityMap::iterator it = mAbilities.find(id);
if (!abilityUseCheck(it))
- return;
+ return false;
AbilityValue &ability = it->second;
if (ability.abilityInfo->target != AbilityManager::TARGET_POINT)
- return;
+ return false;
if (ability.abilityInfo->autoconsume) {
ability.currentPoints = 0;
@@ -181,6 +182,7 @@ void AbilityComponent::useAbilityOnPoint(Entity &user, int id, int x, int y)
mLastTargetPoint = Point(x, y);
user.getComponent<ActorComponent>()->raiseUpdateFlags(
UPDATEFLAG_ABILITY_ON_POINT);
+ return true;
}
/**
@@ -190,22 +192,27 @@ bool AbilityComponent::giveAbility(int id, int currentPoints)
{
if (mAbilities.find(id) == mAbilities.end())
{
- const AbilityManager::AbilityInfo *abilityInfo =
- abilityManager->getAbilityInfo(id);
+ auto *abilityInfo = abilityManager->getAbilityInfo(id);
if (!abilityInfo)
{
LOG_ERROR("Tried to give not existing ability id " << id << ".");
return false;
}
- mAbilities.insert(std::pair<int, AbilityValue>(
- id, AbilityValue(currentPoints, abilityInfo)));
-
- signal_ability_changed.emit(id);
- return true;
+ return giveAbility(abilityInfo, currentPoints);
}
return false;
}
+bool AbilityComponent::giveAbility(const AbilityManager::AbilityInfo *info,
+ int currentPoints)
+{
+ bool added = mAbilities.insert(std::pair<int, AbilityValue>(info->id,
+ AbilityValue(currentPoints, info))).second;
+
+ signal_ability_changed.emit(info->id);
+ return added;
+}
+
/**
* Sets new current mana + makes sure that the client will get informed.
*/