/* Minetest-c55 Copyright (C) 2011 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "scriptapi.h" #include extern "C" { #include #include #include } #include "log.h" #include "server.h" #include "porting.h" #include "filesys.h" #include "serverobject.h" #include "script.h" //#include "luna.h" static void stackDump(lua_State *L, std::ostream &o) { int i; int top = lua_gettop(L); for (i = 1; i <= top; i++) { /* repeat for each level */ int t = lua_type(L, i); switch (t) { case LUA_TSTRING: /* strings */ o<<"\""<= 30){ dstream<<"Stack is over 30:"<m_object; if(co == NULL) return 0; infostream<<"ObjectRef::l_remove(): id="<getId()<m_removed = true; return 0; } static int gc_object(lua_State *L) { //ObjectRef *o = checkobject(L, 1); ObjectRef *o = *(ObjectRef **)(lua_touserdata(L, 1)); //infostream<<"ObjectRef::gc_object: o="<getId()); // Push id lua_gettable(L, objectstable); // Object is at stack top lua_pop(L, 1); // pop object*/ // Set luaentities[id] = nil lua_pushnumber(L, cobj->getId()); // Push id lua_pushnil(L); lua_settable(L, objectstable); lua_pop(L, 2); // pop luaentities, minetest } void scriptapi_luaentity_step(lua_State *L, u16 id, float dtime, bool send_recommended) { realitycheck(L); assert(lua_checkstack(L, 20)); infostream<<"scriptapi_luaentity_step: id="<getId()); // Push id lua_gettable(L, objectstable); // TODO: Call step function lua_pop(L, 1); // pop object lua_pop(L, 2); // pop luaentities, minetest } std::string scriptapi_luaentity_get_state(lua_State *L, u16 id) { realitycheck(L); assert(lua_checkstack(L, 20)); infostream<<"scriptapi_luaentity_get_state: id="<getId()); // Push id lua_pushvalue(L, object); // Copy object to top of stack lua_settable(L, objectstable); // pop object_refs, minetest and the object lua_pop(L, 3); } void scriptapi_rm_object_reference(lua_State *L, ServerActiveObject *cobj) { realitycheck(L); assert(lua_checkstack(L, 20)); infostream<<"scriptapi_rm_object_reference: id="<getId()<getId()); // Push id lua_gettable(L, objectstable); // Set object reference to NULL ObjectRef::set_null(L); lua_pop(L, 1); // pop object // Set object_refs[id] = nil lua_pushnumber(L, cobj->getId()); // Push id lua_pushnil(L); lua_settable(L, objectstable); // pop object_refs, minetest lua_pop(L, 2); }