summaryrefslogtreecommitdiff
path: root/src/game-server/npc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game-server/npc.cpp')
-rw-r--r--src/game-server/npc.cpp33
1 files changed, 23 insertions, 10 deletions
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);