summaryrefslogtreecommitdiff
path: root/src/scripting/lua.cpp
diff options
context:
space:
mode:
authorDavid Athay <ko2fan@gmail.com>2008-10-24 15:18:02 +0000
committerDavid Athay <ko2fan@gmail.com>2008-10-24 15:18:02 +0000
commit20fe6419f8d9564e7ab098ead53c6ef5da1519fa (patch)
tree5313713cd9f12ca3fc503db2ceaccaa73f12a355 /src/scripting/lua.cpp
parentef9852cddecfc5abce38438ca2138defb1a9b1bf (diff)
downloadmanaserv-20fe6419f8d9564e7ab098ead53c6ef5da1519fa.tar.gz
manaserv-20fe6419f8d9564e7ab098ead53c6ef5da1519fa.tar.bz2
manaserv-20fe6419f8d9564e7ab098ead53c6ef5da1519fa.tar.xz
manaserv-20fe6419f8d9564e7ab098ead53c6ef5da1519fa.zip
Added post callback for getting post.
Added GM command for changing player attributes. Changed GM command to @ as '/' was already being used by client for local commands.
Diffstat (limited to 'src/scripting/lua.cpp')
-rw-r--r--src/scripting/lua.cpp31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/scripting/lua.cpp b/src/scripting/lua.cpp
index f5365623..7f421c67 100644
--- a/src/scripting/lua.cpp
+++ b/src/scripting/lua.cpp
@@ -42,6 +42,7 @@ extern "C" {
#include "game-server/monster.hpp"
#include "game-server/monstermanager.hpp"
#include "game-server/npc.hpp"
+#include "game-server/postman.hpp"
#include "game-server/quest.hpp"
#include "game-server/state.hpp"
#include "game-server/trigger.hpp"
@@ -80,6 +81,9 @@ class LuaScript: public Script
static void getQuestCallback(Character *, std::string const &,
std::string const &, void *);
+ static void getPostCallback(Character *, std::string const &,
+ std::string const &, void *);
+
void processDeathEvent(Being* thing);
private:
@@ -638,6 +642,23 @@ void LuaScript::getQuestCallback(Character *q, std::string const &name,
}
/**
+ * Called when the server has recovered the post for a user
+ */
+void LuaScript::getPostCallback(Character *q, std::string const &sender,
+ std::string const &letter, void *data)
+{
+ // get the script
+ LuaScript *s = static_cast<LuaScript*>(data);
+ assert(s->nbArgs == -1);
+ lua_getglobal(s->mState, "post_reply");
+ lua_pushlightuserdata(s->mState, q);
+ lua_pushstring(s->mState, sender.c_str());
+ lua_pushstring(s->mState, letter.c_str());
+ s->nbArgs = 3;
+ s->execute();
+}
+
+/**
* Callback for getting a quest variable. Starts a recovery and returns
* immediatly, if the variable is not known yet.
* tmw.chr_get_chest(character, string): nil or string
@@ -807,7 +828,7 @@ static int LuaGetBeingsInCircle(lua_State *s)
/**
* Gets the post for the character
*/
-static int LuaGetPost(lua_State *s)
+static int LuaChr_GetPost(lua_State *s)
{
if (lua_isuserdata(s, 1))
{
@@ -815,7 +836,11 @@ static int LuaGetPost(lua_State *s)
if (c)
{
- accountHandler->getPost(c);
+ lua_pushlightuserdata(s, (void *)&registryKey);
+ lua_gettable(s, LUA_REGISTRYINDEX);
+ Script *t = static_cast<Script *>(lua_touserdata(s, -1));
+ PostCallback f = { &LuaScript::getPostCallback, t };
+ postMan->getPost(c, f);
}
}
@@ -868,6 +893,7 @@ LuaScript::LuaScript():
{ "chr_inv_count", &LuaChr_InvCount },
{ "chr_get_quest", &LuaChr_GetQuest },
{ "chr_set_quest", &LuaChr_SetQuest },
+ { "chr_get_post", &LuaChr_GetPost },
{ "monster_create", &LuaMonster_Create },
{ "being_walk", &LuaBeing_Walk },
{ "being_say", &LuaBeing_Say },
@@ -879,7 +905,6 @@ LuaScript::LuaScript():
{ "trigger_create", &LuaTrigger_Create },
{ "chatmessage", &LuaChatmessage },
{ "get_beings_in_circle", &LuaGetBeingsInCircle },
- { "get_post", &LuaGetPost },
{ "note_on_death", &LuaNoteOnDeath },
{ NULL, NULL }
};