summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Schilling <ablu.erikschilling@googlemail.com>2013-04-22 09:21:01 +0200
committerErik Schilling <ablu.erikschilling@googlemail.com>2013-08-26 22:56:46 +0200
commit10c33df8e5a13e7e7b4a3ea203516536582b2f4b (patch)
tree1a70952daf82d5e0d9067c7d95105da40c10b8b2
parentd1fe3b52bda94126ba96b20146f5e9dfd3a9c311 (diff)
downloadmanaserv-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.
-rw-r--r--example/scripts/abilities.lua1
-rw-r--r--src/game-server/abilitycomponent.cpp10
-rw-r--r--src/game-server/abilitymanager.cpp2
-rw-r--r--src/game-server/abilitymanager.h2
4 files changed, 14 insertions, 1 deletions
diff --git a/example/scripts/abilities.lua b/example/scripts/abilities.lua
index d7449b0e..263c20ce 100644
--- a/example/scripts/abilities.lua
+++ b/example/scripts/abilities.lua
@@ -12,6 +12,5 @@ local spell1 = get_ability_info("Magic_Test Spell 1")
spell1:on_use(function(user, x, y, abilityId)
target = target or user
target:say("Kaaame...Haaame... HAAAAAA! " .. x .. " " .. y)
- user:set_ability_mana(abilityId, 0)
end)
spell1:on_recharged(function(ch) ch:say("Hoooooooo...") end)
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;