summaryrefslogtreecommitdiff
path: root/src/game-server/character.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game-server/character.cpp')
-rw-r--r--src/game-server/character.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/game-server/character.cpp b/src/game-server/character.cpp
index bf16e268..ccd629e8 100644
--- a/src/game-server/character.cpp
+++ b/src/game-server/character.cpp
@@ -86,6 +86,7 @@ Character::Character(MessageIn &msg):
mRecalculateLevel(true),
mParty(0),
mTransaction(TRANS_NONE),
+ mTalkNpcId(0),
mNpcThread(0)
{
const AttributeManager::AttributeScope &attr =
@@ -696,6 +697,31 @@ AttribmodResponseCode Character::useCorrectionPoint(size_t attribute)
return ATTRIBMOD_OK;
}
+void Character::startNpcThread(Script::Thread *thread, int npcId)
+{
+ mNpcThread = thread;
+ mTalkNpcId = npcId;
+
+ resumeNpcThread();
+}
+
+void Character::resumeNpcThread()
+{
+ Script *script = ScriptManager::currentState();
+
+ assert(script->getCurrentThread() == mNpcThread);
+
+ if (script->resume())
+ {
+ MessageOut msg(GPMSG_NPC_CLOSE);
+ msg.writeInt16(mTalkNpcId);
+ gameHandler->sendTo(this, msg);
+
+ mTalkNpcId = 0;
+ mNpcThread = 0;
+ }
+}
+
void Character::disconnected()
{
mConnected = false;