summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFreeyorp <Freeyorp101@hotmail.com>2010-07-10 21:45:38 +1200
committerFreeyorp <Freeyorp101@hotmail.com>2010-07-10 21:51:37 +1200
commit151f6acdee17556d249e1b61f264ed2e95b84354 (patch)
treeda38282be8a068cc3eba517bf7aacaf674b73b2f
parent98cdcb1de4f422255aa5ef924042ae7d00a5b968 (diff)
downloadmanaserv-151f6acdee17556d249e1b61f264ed2e95b84354.tar.gz
manaserv-151f6acdee17556d249e1b61f264ed2e95b84354.tar.bz2
manaserv-151f6acdee17556d249e1b61f264ed2e95b84354.tar.xz
manaserv-151f6acdee17556d249e1b61f264ed2e95b84354.zip
Add in stubs for scripted item effects
-rw-r--r--src/game-server/item.cpp11
-rw-r--r--src/game-server/item.hpp8
-rw-r--r--src/game-server/itemmanager.cpp22
3 files changed, 41 insertions, 0 deletions
diff --git a/src/game-server/item.cpp b/src/game-server/item.cpp
index 95ee973d..93b2bc10 100644
--- a/src/game-server/item.cpp
+++ b/src/game-server/item.cpp
@@ -63,6 +63,17 @@ void ItemEffectAutoAttack::dispell(Being *itemUser)
// TODO
}
+bool ItemEffectScript::apply(Being *itemUser)
+{
+ // TODO
+ return false;
+}
+
+void ItemEffectScript::dispell(Being *itemUser)
+{
+ // TODO
+}
+
bool ItemClass::useTrigger(Being *itemUser, ItemTriggerType trigger)
{
if (!trigger) return false;
diff --git a/src/game-server/item.hpp b/src/game-server/item.hpp
index 6fb7c380..3ccfe2bf 100644
--- a/src/game-server/item.hpp
+++ b/src/game-server/item.hpp
@@ -128,6 +128,14 @@ class ItemEffectConsumes : public ItemEffectInfo
void dispell(Being *itemUser) {}
};
+class ItemEffectScript : public ItemEffectInfo
+{
+ public:
+ bool apply(Being *itemUser);
+ void dispell(Being *itemUser);
+};
+
+
/**
* Class for simple reference to item information.
*/
diff --git a/src/game-server/itemmanager.cpp b/src/game-server/itemmanager.cpp
index 363ada4b..802197d6 100644
--- a/src/game-server/itemmanager.cpp
+++ b/src/game-server/itemmanager.cpp
@@ -286,6 +286,28 @@ void ItemManager::reload()
}
else if (xmlStrEqual(effectnode->name, BAD_CAST "consumes"))
item->addEffect(new ItemEffectConsumes(), triggerTypes.first);
+ else if (xmlStrEqual(effectnode->name, BAD_CAST "script"))
+ {
+ std::string src = XML::getProperty(effectnode, "src", "");
+ if (src.empty())
+ {
+ LOG_WARN("Item Manager: Empty src definition for script effect, skipping!");
+ continue;
+ }
+ std::string func = XML::getProperty(effectnode, "function", "");
+ if (func.empty())
+ {
+ LOG_WARN ("Item Manager: Empty func definition for script effect, skipping!");
+ continue;
+ }
+ for_each_xml_child_node(scriptnode, effectnode)
+ {
+ // TODO: Load variables from variable subnodes
+ }
+ std::string dfunc = XML::getProperty(effectnode, "dispell-function", "");
+ // STUB
+ item->addEffect(new ItemEffectScript(), triggerTypes.first, triggerTypes.second);
+ }
}
}
// More properties go here