diff options
author | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2012-03-10 23:38:36 +0100 |
---|---|---|
committer | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2012-03-11 16:56:56 +0100 |
commit | b822dcee52d15d41c4186a250e73b85b16c9dc39 (patch) | |
tree | 45515c75175b67fe458701f3a70bf0ee8b14bee5 /src/scripting/lua.cpp | |
parent | 2dd3c5c06978584e3e076609554f225ffbabd3e2 (diff) | |
download | manaserv-b822dcee52d15d41c4186a250e73b85b16c9dc39.tar.gz manaserv-b822dcee52d15d41c4186a250e73b85b16c9dc39.tar.bz2 manaserv-b822dcee52d15d41c4186a250e73b85b16c9dc39.tar.xz manaserv-b822dcee52d15d41c4186a250e73b85b16c9dc39.zip |
Removed the create_npc wrapper and the last two NPC callbacks
When creating an NPC, you now provide its optional talk and update functions
directly rather than them being stored in a table on the Lua side and then
called in response to a global callback.
Also fixed an issue with a missing gender parameter to the delayed NPC
creation callback used by NPCs defined on the map (found by Erik while
reviewing this patch).
Reviewed-by: Erik Schilling
Diffstat (limited to 'src/scripting/lua.cpp')
-rw-r--r-- | src/scripting/lua.cpp | 60 |
1 files changed, 24 insertions, 36 deletions
diff --git a/src/scripting/lua.cpp b/src/scripting/lua.cpp index a416771f..273bdf42 100644 --- a/src/scripting/lua.cpp +++ b/src/scripting/lua.cpp @@ -112,20 +112,6 @@ static int on_update(lua_State *s) return 0; } -static int on_npc_start(lua_State *s) -{ - luaL_checktype(s, 1, LUA_TFUNCTION); - NPC::setStartCallback(getScript(s)); - return 0; -} - -static int on_npc_update(lua_State *s) -{ - luaL_checktype(s, 1, LUA_TFUNCTION); - NPC::setUpdateCallback(getScript(s)); - return 0; -} - static int on_create_npc_delayed(lua_State *s) { luaL_checktype(s, 1, LUA_TFUNCTION); @@ -316,8 +302,10 @@ static int npc_ask_string(lua_State *s) } /** - * mana.npc_create(string name, int id, int gender, int x, int y): NPC* - * Callback for creating a NPC on the current map with the current script. + * mana.npc_create(string name, int id, int gender, int x, int y, + * function talk, function update): NPC* + * + * Callback for creating a NPC on the current map. */ static int npc_create(lua_State *s) { @@ -327,33 +315,36 @@ static int npc_create(lua_State *s) const int x = luaL_checkint(s, 4); const int y = luaL_checkint(s, 5); + if (!lua_isnoneornil(s, 6)) + luaL_checktype(s, 6, LUA_TFUNCTION); + if (!lua_isnoneornil(s, 7)) + luaL_checktype(s, 7, LUA_TFUNCTION); + MapComposite *m = checkCurrentMap(s); NPC *q = new NPC(name, id); q->setGender(getGender(gender)); q->setMap(m); q->setPosition(Point(x, y)); + + if (lua_isfunction(s, 6)) + { + lua_pushvalue(s, 6); + q->setTalkCallback(luaL_ref(s, LUA_REGISTRYINDEX)); + } + + if (lua_isfunction(s, 7)) + { + lua_pushvalue(s, 7); + q->setUpdateCallback(luaL_ref(s, LUA_REGISTRYINDEX)); + } + GameState::enqueueInsert(q); lua_pushlightuserdata(s, q); return 1; } /** - * mana.npc_end(NPC*, Character*): void - * Callback for ending a NPC conversation with the given character. - */ -static int npc_end(lua_State *s) -{ - NPC *p = checkNPC(s, 1); - Character *q = checkCharacter(s, 2); - - MessageOut msg(GPMSG_NPC_CLOSE); - msg.writeInt16(p->getPublicID()); - gameHandler->sendTo(q, msg); - return 0; -} - -/** * mana.npc_post(NPC*, Character*): void * Callback for sending a NPC_POST. */ @@ -376,7 +367,7 @@ static int npc_post(lua_State *s) static int npc_enable(lua_State *s) { NPC *p = checkNPC(s, 1); - p->enable(true); + p->setEnabled(true); GameState::enqueueInsert(p); return 0; } @@ -388,7 +379,7 @@ static int npc_enable(lua_State *s) static int npc_disable(lua_State *s) { NPC *p = checkNPC(s, 1); - p->enable(false); + p->setEnabled(false); GameState::remove(p); return 0; } @@ -2152,8 +2143,6 @@ LuaScript::LuaScript(): { "on_being_death", &on_being_death }, { "on_being_remove", &on_being_remove }, { "on_update", &on_update }, - { "on_npc_start", &on_npc_start }, - { "on_npc_update", &on_npc_update }, { "on_create_npc_delayed", &on_create_npc_delayed }, { "on_map_initialize", &on_map_initialize }, { "on_craft", &on_craft }, @@ -2243,7 +2232,6 @@ LuaScript::LuaScript(): { "item_drop", &item_drop }, { "item_get_name", &item_get_name }, { "npc_ask_integer", &npc_ask_integer }, - { "npc_end", &npc_end }, { "npc_ask_string", &npc_ask_string }, { "log", &log }, { "get_distance", &get_distance }, |