diff options
author | Erik Schilling <ablu.erikschilling@googlemail.com> | 2013-04-22 09:21:01 +0200 |
---|---|---|
committer | Erik Schilling <ablu.erikschilling@googlemail.com> | 2013-08-26 22:56:46 +0200 |
commit | 10c33df8e5a13e7e7b4a3ea203516536582b2f4b (patch) | |
tree | 1a70952daf82d5e0d9067c7d95105da40c10b8b2 /src/game-server | |
parent | d1fe3b52bda94126ba96b20146f5e9dfd3a9c311 (diff) | |
download | manaserv-10c33df8e5a13e7e7b4a3ea203516536582b2f4b.tar.gz manaserv-10c33df8e5a13e7e7b4a3ea203516536582b2f4b.tar.bz2 manaserv-10c33df8e5a13e7e7b4a3ea203516536582b2f4b.tar.xz manaserv-10c33df8e5a13e7e7b4a3ea203516536582b2f4b.zip |
[Abilities] Added a autoconsume option
You do not need to reset the mana in the scripts if you do not want to.
We will need this for attacks later since those do not nessecary have a
script.
Diffstat (limited to 'src/game-server')
-rw-r--r-- | src/game-server/abilitycomponent.cpp | 10 | ||||
-rw-r--r-- | src/game-server/abilitymanager.cpp | 2 | ||||
-rw-r--r-- | src/game-server/abilitymanager.h | 2 |
3 files changed, 14 insertions, 0 deletions
diff --git a/src/game-server/abilitycomponent.cpp b/src/game-server/abilitycomponent.cpp index c8610b5a..eac5f1c5 100644 --- a/src/game-server/abilitycomponent.cpp +++ b/src/game-server/abilitycomponent.cpp @@ -120,6 +120,11 @@ void AbilityComponent::useAbilityOnBeing(Entity &user, int id, Entity *b) if (ability.abilityInfo->target != AbilityManager::TARGET_BEING) return; + if (ability.abilityInfo->autoconsume) { + ability.currentPoints = 0; + signal_ability_changed.emit(id); + } + //tell script engine to cast the spell Script *script = ScriptManager::currentState(); script->prepare(ability.abilityInfo->useCallback); @@ -143,6 +148,11 @@ void AbilityComponent::useAbilityOnPoint(Entity &user, int id, int x, int y) if (ability.abilityInfo->target != AbilityManager::TARGET_POINT) return; + if (ability.abilityInfo->autoconsume) { + ability.currentPoints = 0; + signal_ability_changed.emit(id); + } + //tell script engine to cast the spell Script *script = ScriptManager::currentState(); script->prepare(ability.abilityInfo->useCallback); diff --git a/src/game-server/abilitymanager.cpp b/src/game-server/abilitymanager.cpp index b492f65a..eb828e8e 100644 --- a/src/game-server/abilitymanager.cpp +++ b/src/game-server/abilitymanager.cpp @@ -100,6 +100,7 @@ void AbilityManager::readAbilityNode(xmlNodePtr abilityNode, int neededMana = XML::getProperty(abilityNode, "needed", 0); int rechargeAttribute = XML::getProperty(abilityNode, "rechargeattribute", 0); + bool autoconsume = XML::getBoolProperty(abilityNode, "autoconsume", true); if (rechargeable && neededMana <= 0) { @@ -117,6 +118,7 @@ void AbilityManager::readAbilityNode(xmlNodePtr abilityNode, newInfo->rechargeable = rechargeable; newInfo->neededPoints = neededMana; newInfo->rechargeAttribute = rechargeAttribute; + newInfo->autoconsume = autoconsume; newInfo->target = getTargetByString(XML::getProperty(abilityNode, "target", std::string())); diff --git a/src/game-server/abilitymanager.h b/src/game-server/abilitymanager.h index b363d1f8..2d23c481 100644 --- a/src/game-server/abilitymanager.h +++ b/src/game-server/abilitymanager.h @@ -45,6 +45,7 @@ public: rechargeable(false), rechargeAttribute(0), neededPoints(0), + autoconsume(true), target(TARGET_BEING) {} @@ -54,6 +55,7 @@ public: bool rechargeable; unsigned rechargeAttribute; unsigned neededPoints; + bool autoconsume; TargetMode target; Script::Ref rechargedCallback; Script::Ref useCallback; |