summaryrefslogtreecommitdiff
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.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/game-server/abilitycomponent.cpp b/src/game-server/abilitycomponent.cpp
index c005635a..1ac82cdf 100644
--- a/src/game-server/abilitycomponent.cpp
+++ b/src/game-server/abilitycomponent.cpp
@@ -109,6 +109,7 @@ bool AbilityComponent::useAbilityOnBeing(Entity &user, int id, Entity *b)
AbilityMap::iterator it = mAbilities.find(id);
if (!abilityUseCheck(it))
return false;
+
AbilityValue &ability = it->second;
if (ability.abilityInfo->target != AbilityManager::TARGET_BEING)
@@ -141,6 +142,7 @@ bool AbilityComponent::useAbilityOnPoint(Entity &user, int id, int x, int y)
AbilityMap::iterator it = mAbilities.find(id);
if (!abilityUseCheck(it))
return false;
+
AbilityValue &ability = it->second;
if (ability.abilityInfo->target != AbilityManager::TARGET_POINT)
@@ -162,6 +164,33 @@ bool AbilityComponent::useAbilityOnPoint(Entity &user, int id, int x, int y)
return true;
}
+bool AbilityComponent::useAbilityOnDirection(Entity &user, int id,
+ ManaServ::BeingDirection direction)
+{
+ AbilityMap::iterator it = mAbilities.find(id);
+ if (!abilityUseCheck(it))
+ return false;
+
+ AbilityValue &ability = it->second;
+
+ if (ability.abilityInfo->target != AbilityManager::TARGET_DIRECTION)
+ return false;
+
+ //tell script engine to cast the spell
+ Script *script = ScriptManager::currentState();
+ script->prepare(ability.abilityInfo->useCallback);
+ script->push(&user);
+ script->push(direction);
+ script->push(ability.abilityInfo->id);
+ script->execute(user.getMap());
+
+ mLastUsedAbilityId = id;
+ mLastTargetDirection = direction;
+ user.getComponent<ActorComponent>()->raiseUpdateFlags(
+ UPDATEFLAG_ABILITY_ON_DIRECTION);
+ return true;
+}
+
/**
* Allows a character to perform a ability
*/