diff options
author | Perttu Ahola <celeron55@gmail.com> | 2012-03-10 01:38:48 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-03-10 11:28:14 +0200 |
commit | f9da2c9507f10a9193c9bd94d69cc85e53b58ba2 (patch) | |
tree | 00885e82f4ab7ff193d481637bbfdeb80c41d0a6 /src/content_sao.cpp | |
parent | 989aba1966373885d4cac306daea25e102f8d68d (diff) | |
download | minetest-f9da2c9507f10a9193c9bd94d69cc85e53b58ba2.tar.gz minetest-f9da2c9507f10a9193c9bd94d69cc85e53b58ba2.tar.bz2 minetest-f9da2c9507f10a9193c9bd94d69cc85e53b58ba2.zip |
Immediate smoke puff when a normal entity is punched to death
Diffstat (limited to 'src/content_sao.cpp')
-rw-r--r-- | src/content_sao.cpp | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 568e4b1da..b04f03f26 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -381,42 +381,45 @@ void LuaEntitySAO::addedToEnvironment() { ServerActiveObject::addedToEnvironment(); - // Create entity from name and state + // Create entity from name lua_State *L = m_env->getLua(); - m_registered = scriptapi_luaentity_add(L, m_id, m_init_name.c_str(), - m_init_state.c_str()); + m_registered = scriptapi_luaentity_add(L, m_id, m_init_name.c_str()); if(m_registered){ // Get properties scriptapi_luaentity_get_properties(L, m_id, m_prop); + // Initialize HP from properties + m_hp = m_prop->hp_max; } + + // Activate entity, supplying serialized state + scriptapi_luaentity_activate(L, m_id, m_init_state.c_str()); } ServerActiveObject* LuaEntitySAO::create(ServerEnvironment *env, v3f pos, const std::string &data) { - std::istringstream is(data, std::ios::binary); - // read version - u8 version = readU8(is); std::string name; std::string state; s16 hp = 1; v3f velocity; float yaw = 0; - // check if version is supported - if(version == 0){ - name = deSerializeString(is); - state = deSerializeLongString(is); - } - else if(version == 1){ - name = deSerializeString(is); - state = deSerializeLongString(is); - hp = readS16(is); - velocity = readV3F1000(is); - yaw = readF1000(is); - } - else{ - return NULL; + if(data != ""){ + std::istringstream is(data, std::ios::binary); + // read version + u8 version = readU8(is); + // check if version is supported + if(version == 0){ + name = deSerializeString(is); + state = deSerializeLongString(is); + } + else if(version == 1){ + name = deSerializeString(is); + state = deSerializeLongString(is); + hp = readS16(is); + velocity = readV3F1000(is); + yaw = readF1000(is); + } } // create object infostream<<"LuaEntitySAO::create(name=\""<<name<<"\" state=\"" @@ -581,6 +584,9 @@ int LuaEntitySAO::punch(v3f dir, ActiveObjectMessage aom(getId(), true, os.str()); m_messages_out.push_back(aom); } + + if(getHP() == 0) + m_removed = true; } lua_State *L = m_env->getLua(); |