aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-11-12 18:34:04 +0200
committerPerttu Ahola <celeron55@gmail.com>2011-11-29 19:13:40 +0200
commit7b802c547dc23b022605bc7b934c31461b47622b (patch)
treeb3032709929ca05a49f98f2ab3343ead1b139613 /src
parent73bb3bc5958989db21eefb826e277dada248ceca (diff)
downloadminetest-7b802c547dc23b022605bc7b934c31461b47622b.tar.gz
minetest-7b802c547dc23b022605bc7b934c31461b47622b.tar.bz2
minetest-7b802c547dc23b022605bc7b934c31461b47622b.zip
Handle undefined objects better
Diffstat (limited to 'src')
-rw-r--r--src/content_sao.cpp9
-rw-r--r--src/luaentity_common.cpp2
-rw-r--r--src/scriptapi.cpp22
-rw-r--r--src/scriptapi.h3
4 files changed, 23 insertions, 13 deletions
diff --git a/src/content_sao.cpp b/src/content_sao.cpp
index eeb17bd30..1096ac116 100644
--- a/src/content_sao.cpp
+++ b/src/content_sao.cpp
@@ -1568,12 +1568,13 @@ void LuaEntitySAO::addedToEnvironment(u16 id)
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,
diff --git a/src/luaentity_common.cpp b/src/luaentity_common.cpp
index 26cfce1c2..138e72dcb 100644
--- a/src/luaentity_common.cpp
+++ b/src/luaentity_common.cpp
@@ -29,7 +29,7 @@ LuaEntityProperties::LuaEntityProperties():
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()
diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp
index 381664489..6d0522000 100644
--- a/src/scriptapi.cpp
+++ b/src/scriptapi.cpp
@@ -38,12 +38,12 @@ extern "C" {
/*
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
@@ -558,15 +558,17 @@ void scriptapi_export(lua_State *L, Server *server)
// 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");
@@ -694,7 +696,7 @@ void scriptapi_environment_step(lua_State *L, float dtime)
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);
@@ -712,7 +714,11 @@ void scriptapi_luaentity_add(lua_State *L, u16 id, const char *name,
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");
@@ -750,6 +756,8 @@ void scriptapi_luaentity_add(lua_State *L, u16 id, const char *name,
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)
diff --git a/src/scriptapi.h b/src/scriptapi.h
index c63977fc6..de8eb6abe 100644
--- a/src/scriptapi.h
+++ b/src/scriptapi.h
@@ -39,7 +39,8 @@ void scriptapi_rm_object_reference(lua_State *L, ServerActiveObject *cobj);
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);