diff options
author | Erik Schilling <ablu.erikschilling@googlemail.com> | 2012-03-03 13:36:28 +0100 |
---|---|---|
committer | Erik Schilling <ablu.erikschilling@googlemail.com> | 2012-03-03 16:41:39 +0100 |
commit | f872528771f0b71741fb36ddf70f2ae23f54c1e3 (patch) | |
tree | 9b3751cab7d9f58ae0b15acf061e428f18bc07db /src/game-server | |
parent | c0c208d4c29ff49f940e8a6c54adb26cc4e5eba3 (diff) | |
download | manaserv-f872528771f0b71741fb36ddf70f2ae23f54c1e3.tar.gz manaserv-f872528771f0b71741fb36ddf70f2ae23f54c1e3.tar.bz2 manaserv-f872528771f0b71741fb36ddf70f2ae23f54c1e3.tar.xz manaserv-f872528771f0b71741fb36ddf70f2ae23f54c1e3.zip |
Added further missing callbacks
Reviewed-by: bjorn.
Diffstat (limited to 'src/game-server')
-rw-r--r-- | src/game-server/mapcomposite.cpp | 17 | ||||
-rw-r--r-- | src/game-server/mapcomposite.h | 7 | ||||
-rw-r--r-- | src/game-server/npc.cpp | 33 | ||||
-rw-r--r-- | src/game-server/npc.h | 25 |
4 files changed, 68 insertions, 14 deletions
diff --git a/src/game-server/mapcomposite.cpp b/src/game-server/mapcomposite.cpp index c9090008..ec455962 100644 --- a/src/game-server/mapcomposite.cpp +++ b/src/game-server/mapcomposite.cpp @@ -456,6 +456,8 @@ MapZone& MapContent::getZone(const Point &pos) const * MapComposite *****************************************************************************/ +Script::Ref MapComposite::mInitializeCallback; + MapComposite::MapComposite(int id, const std::string &name): mMap(NULL), mContent(NULL), @@ -493,10 +495,17 @@ bool MapComposite::activate() else mPvPRules = PVP_NONE; - Script *s = ScriptManager::currentState(); - s->setMap(this); - s->prepare("initialize"); - s->execute(); + if (!mInitializeCallback.isValid()) + { + LOG_WARN("No callback for map initialization found"); + } + else + { + Script *s = ScriptManager::currentState(); + s->setMap(this); + s->prepare(mInitializeCallback); + s->execute(); + } return true; } diff --git a/src/game-server/mapcomposite.h b/src/game-server/mapcomposite.h index 49296911..355f0f46 100644 --- a/src/game-server/mapcomposite.h +++ b/src/game-server/mapcomposite.h @@ -26,6 +26,8 @@ #include <vector> #include <map> +#include "scripting/script.h" + class Actor; class Being; class Character; @@ -336,6 +338,9 @@ class MapComposite const std::string &value) { mScriptVariables[key] = value; } + static void setInitializeCallback(Script *script) + { script->assignCallback(mInitializeCallback); } + private: MapComposite(const MapComposite &); @@ -348,6 +353,8 @@ class MapComposite /** Cached persistent variables */ std::map<std::string, std::string> mScriptVariables; PvPRules mPvPRules; + + static Script::Ref mInitializeCallback; }; #endif diff --git a/src/game-server/npc.cpp b/src/game-server/npc.cpp index c1b91d66..052b296e 100644 --- a/src/game-server/npc.cpp +++ b/src/game-server/npc.cpp @@ -22,6 +22,13 @@ #include "game-server/npc.h" #include "scripting/script.h" +Script::Ref NPC::mStartCallback; +Script::Ref NPC::mNextCallback; +Script::Ref NPC::mChooseCallback; +Script::Ref NPC::mIntegerCallback; +Script::Ref NPC::mStringCallback; +Script::Ref NPC::mUpdateCallback; + NPC::NPC(const std::string &name, int id, Script *s): Being(OBJECT_NPC), mScript(s), @@ -38,16 +45,19 @@ void NPC::enable(bool enabled) void NPC::update() { - if (!mScript || !mEnabled) return; - mScript->prepare("npc_update"); + if (!mScript || !mEnabled || !mUpdateCallback.isValid()) + return; + mScript->prepare(mUpdateCallback); mScript->push(this); mScript->execute(); } void NPC::prompt(Character *ch, bool restart) { - if (!mScript || !mEnabled) return; - mScript->prepare(restart ? "npc_start" : "npc_next"); + if (!mScript || !mEnabled || !mStartCallback.isValid() + || !mNextCallback.isValid()) + return; + mScript->prepare(restart ? mStartCallback : mNextCallback); mScript->push(this); mScript->push(ch); mScript->execute(); @@ -55,8 +65,9 @@ void NPC::prompt(Character *ch, bool restart) void NPC::select(Character *ch, int v) { - if (!mScript || !mEnabled) return; - mScript->prepare("npc_choose"); + if (!mScript || !mEnabled || !mChooseCallback.isValid()) + return; + mScript->prepare(mChooseCallback); mScript->push(this); mScript->push(ch); mScript->push(v); @@ -65,8 +76,9 @@ void NPC::select(Character *ch, int v) void NPC::integerReceived(Character *ch, int v) { - if (!mScript || !mEnabled) return; - mScript->prepare("npc_integer"); + if (!mScript || !mEnabled || !mIntegerCallback.isValid()) + return; + mScript->prepare(mIntegerCallback); mScript->push(this); mScript->push(ch); mScript->push(v); @@ -75,8 +87,9 @@ void NPC::integerReceived(Character *ch, int v) void NPC::stringReceived(Character *ch, const std::string &v) { - if (!mScript || !mEnabled) return; - mScript->prepare("npc_string"); + if (!mScript || !mEnabled || !mStringCallback.isValid()) + return; + mScript->prepare(mStringCallback); mScript->push(this); mScript->push(ch); mScript->push(v); diff --git a/src/game-server/npc.h b/src/game-server/npc.h index 566b481c..1ca6b1bb 100644 --- a/src/game-server/npc.h +++ b/src/game-server/npc.h @@ -73,6 +73,24 @@ class NPC : public Being virtual unsigned char getWalkMask() const { return 0x83; } // blocked like a monster by walls, monsters and characters ( bin 1000 0011) + static void setStartCallback(Script *script) + { script->assignCallback(mStartCallback); } + + static void setNextCallback(Script *script) + { script->assignCallback(mNextCallback); } + + static void setChooseCallback(Script *script) + { script->assignCallback(mChooseCallback); } + + static void setIntegerCallback(Script *script) + { script->assignCallback(mIntegerCallback); } + + static void setStringCallback(Script *script) + { script->assignCallback(mStringCallback); } + + static void setUpdateCallback(Script *script) + { script->assignCallback(mUpdateCallback); } + protected: /** * Gets the way a monster blocks pathfinding for other objects @@ -84,6 +102,13 @@ class NPC : public Being Script *mScript; /**< Script describing NPC behavior. */ unsigned short mID; /**< ID of the NPC. */ bool mEnabled; /**< Whether NPC is enabled */ + + static Script::Ref mStartCallback; + static Script::Ref mNextCallback; + static Script::Ref mChooseCallback; + static Script::Ref mIntegerCallback; + static Script::Ref mStringCallback; + static Script::Ref mUpdateCallback; }; #endif |