diff options
Diffstat (limited to 'src/game-server/abilitycomponent.cpp')
-rw-r--r-- | src/game-server/abilitycomponent.cpp | 29 |
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 */ |