---[[function basicSerialize(o)
- if type(o) == "number" then
- return tostring(o)
- else -- assume it is a string
- return string.format("%q", o)
- end
-end
-
-function dump2(name, value, saved)
- saved = saved or {} -- initial value
- io.write(name, " = ")
- if type(value) == "number" or type(value) == "string" then
- io.write(basicSerialize(value), "\n")
- elseif type(value) == "table" then
- if saved[value] then -- value already saved?
- io.write(saved[value], "\n") -- use its previous name
- else
- saved[value] = name -- save name for next time
- io.write("{}\n") -- create a new table
- for k,v in pairs(value) do -- save its fields
- local fieldname = string.format("%s[%s]", name,
- basicSerialize(k))
- save(fieldname, v, saved)
- end
- end
- else
- error("cannot save a " .. type(value))
- end
-end]]
-
---[[function dump(o, name, dumped, s)
- name = name or "_"
- dumped = dumped or {}
- s = s or ""
- s = s .. name .. " = "
- if type(o) == "number" then
- s = s .. tostring(o)
- elseif type(o) == "string" then
- s = s .. string.format("%q", o)
- elseif type(o) == "boolean" then
- s = s .. tostring(o)
- elseif type(o) == "function" then
- s = s .. "<function>"
- elseif type(o) == "nil" then
- s = s .. "nil"
- elseif type(o) == "table" then
- if dumped[o] then
- s = s .. dumped[o]
- else
- dumped[o] = name
- local t = {}
- for k,v in pairs(o) do
- t[#t+1] = dump(v, k, dumped)
- end
- s = s .. "{" .. table.concat(t, ", ") .. "}"
- end
- else
- error("cannot dump a " .. type(o))
- return nil
- end
- return s
-end]]
-
function basic_dump2(o)
if type(o) == "number" then
return tostring(o)
ServerActiveObject::addedToEnvironment(id);
// Create entity from name and state
- m_registered = true;
lua_State *L = m_env->getLua();
- scriptapi_luaentity_add(L, id, m_init_name.c_str(), m_init_state.c_str());
+ m_registered = scriptapi_luaentity_add(L, id, m_init_name.c_str(), m_init_state.c_str());
- // Get properties
- scriptapi_luaentity_get_properties(L, m_id, m_prop);
+ if(m_registered){
+ // Get properties
+ scriptapi_luaentity_get_properties(L, m_id, m_prop);
+ }
}
ServerActiveObject* LuaEntitySAO::create(ServerEnvironment *env, v3f pos,
collisionbox(-0.5,-0.5,-0.5, 0.5,0.5,0.5),
visual("single_sprite")
{
- textures.push_back("unknown_block.png");
+ textures.push_back("unknown_object.png");
}
std::string LuaEntityProperties::dump()
/*
TODO:
-- Global environment step function
+- Node type definition
- Random node triggers
- Object visual client-side stuff
- Blink effect
- Spritesheets and animation
-- Named node types and dynamic id allocation
+- Named node types and dynamic id allocation per MapBlock
- LuaNodeMetadata
blockdef.has_metadata = true/false
- Stores an inventory and stuff in a Settings object
// Get the main minetest table
lua_getglobal(L, "minetest");
- // Add registered_entities table in minetest
+ // Add tables to minetest
+
+ /*lua_newtable(L);
+ lua_setfield(L, -2, "registered_blocks");*/
+
lua_newtable(L);
lua_setfield(L, -2, "registered_entities");
- // Add object_refs table in minetest
lua_newtable(L);
lua_setfield(L, -2, "object_refs");
- // Add luaentities table in minetest
lua_newtable(L);
lua_setfield(L, -2, "luaentities");
luaentity
*/
-void scriptapi_luaentity_add(lua_State *L, u16 id, const char *name,
+bool scriptapi_luaentity_add(lua_State *L, u16 id, const char *name,
const char *init_state)
{
realitycheck(L);
lua_pushstring(L, name);
lua_gettable(L, -2);
// Should be a table, which we will use as a prototype
- luaL_checktype(L, -1, LUA_TTABLE);
+ //luaL_checktype(L, -1, LUA_TTABLE);
+ if(lua_type(L, -1) != LUA_TTABLE){
+ errorstream<<"LuaEntity name \""<<name<<"\" not defined"<<std::endl;
+ return false;
+ }
int prototype_table = lua_gettop(L);
//dump2(L, "prototype_table");
if(lua_pcall(L, 1, 0, 0))
script_error(L, "error running function %s:on_activate: %s\n",
name, lua_tostring(L, -1));*/
+
+ return true;
}
void scriptapi_luaentity_rm(lua_State *L, u16 id)
void scriptapi_environment_step(lua_State *L, float dtime);
/* luaentity */
-void scriptapi_luaentity_add(lua_State *L, u16 id, const char *name,
+// Returns true if succesfully added into Lua; false otherwise.
+bool scriptapi_luaentity_add(lua_State *L, u16 id, const char *name,
const char *init_state);
void scriptapi_luaentity_rm(lua_State *L, u16 id);
std::string scriptapi_luaentity_get_state(lua_State *L, u16 id);