summaryrefslogtreecommitdiff
path: root/src/game-server
diff options
context:
space:
mode:
authorErik Schilling <ablu.erikschilling@googlemail.com>2012-03-03 13:36:28 +0100
committerErik Schilling <ablu.erikschilling@googlemail.com>2012-03-03 16:41:39 +0100
commitf872528771f0b71741fb36ddf70f2ae23f54c1e3 (patch)
tree9b3751cab7d9f58ae0b15acf061e428f18bc07db /src/game-server
parentc0c208d4c29ff49f940e8a6c54adb26cc4e5eba3 (diff)
downloadmanaserv-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.cpp17
-rw-r--r--src/game-server/mapcomposite.h7
-rw-r--r--src/game-server/npc.cpp33
-rw-r--r--src/game-server/npc.h25
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