summaryrefslogtreecommitdiff
path: root/src/game-server
diff options
context:
space:
mode:
authorPhilipp Sehmisch <tmw@crushnet.org>2008-05-06 18:49:04 +0000
committerPhilipp Sehmisch <tmw@crushnet.org>2008-05-06 18:49:04 +0000
commit7d559cbae9c713e15ae0c943a4d571122bf29bc6 (patch)
treed3edd6921006c28c62db25621f9ad1b44d1f0e69 /src/game-server
parent832584f65adff69659181d6fc884f779a79d62a9 (diff)
downloadmanaserv-7d559cbae9c713e15ae0c943a4d571122bf29bc6.tar.gz
manaserv-7d559cbae9c713e15ae0c943a4d571122bf29bc6.tar.bz2
manaserv-7d559cbae9c713e15ae0c943a4d571122bf29bc6.tar.xz
manaserv-7d559cbae9c713e15ae0c943a4d571122bf29bc6.zip
Implemented script trigger areas which call a script function when an object steps into them.
Diffstat (limited to 'src/game-server')
-rw-r--r--src/game-server/trigger.cpp13
-rw-r--r--src/game-server/trigger.hpp15
2 files changed, 28 insertions, 0 deletions
diff --git a/src/game-server/trigger.cpp b/src/game-server/trigger.cpp
index c0c9bd85..3309c754 100644
--- a/src/game-server/trigger.cpp
+++ b/src/game-server/trigger.cpp
@@ -28,6 +28,8 @@
#include "game-server/movingobject.hpp"
#include "game-server/state.hpp"
+#include "utils/logger.h"
+
void WarpAction::process(Object *obj)
{
if (obj->getType() == OBJECT_CHARACTER)
@@ -36,6 +38,17 @@ void WarpAction::process(Object *obj)
}
}
+void ScriptAction::process(Object *obj)
+{
+ LOG_DEBUG("Script trigger area activated: "<<mFunction<<"("<<obj<<", "<<mArg<<")");
+ if (!mScript) return;
+ if (mFunction == "") return;
+ mScript->prepare(mFunction);
+ mScript->push(obj);
+ mScript->push(mArg);
+ mScript->execute();
+}
+
void TriggerArea::update()
{
for (MovingObjectIterator i(getMap()->getInsideRectangleIterator(mZone)); i; ++i)
diff --git a/src/game-server/trigger.hpp b/src/game-server/trigger.hpp
index d6e4d2c9..3ca52fba 100644
--- a/src/game-server/trigger.hpp
+++ b/src/game-server/trigger.hpp
@@ -26,6 +26,7 @@
#include "point.h"
#include "game-server/thing.hpp"
+#include "scripting/script.hpp"
class Object;
@@ -49,6 +50,20 @@ class WarpAction : public TriggerAction
unsigned short mX, mY;
};
+class ScriptAction : public TriggerAction
+{
+ public:
+ ScriptAction(Script *script, std::string function, int arg)
+ : mScript(script), mFunction(function), mArg(arg) {}
+
+ virtual void process(Object *obj);
+
+ private:
+ Script *mScript; //Script object to be called
+ std::string mFunction; //Name of the function called in the script object
+ int mArg; //Argument passed to script function (meaning is function-specific)
+};
+
class TriggerArea : public Thing
{
public: