summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/content_sao.h10
-rw-r--r--src/script/lua_api/l_object.cpp7
2 files changed, 14 insertions, 3 deletions
diff --git a/src/content_sao.h b/src/content_sao.h
index e08795579..0dad54805 100644
--- a/src/content_sao.h
+++ b/src/content_sao.h
@@ -277,6 +277,16 @@ public:
return true;
}
+ inline void removeExtendedAttribute(const std::string &attr)
+ {
+ PlayerAttributes::iterator it = m_extra_attributes.find(attr);
+ if (it == m_extra_attributes.end())
+ return;
+
+ m_extra_attributes.erase(it);
+ m_extended_attributes_modified = true;
+ }
+
inline const PlayerAttributes &getExtendedAttributes()
{
return m_extra_attributes;
diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp
index 6f61ab55c..c7a31d048 100644
--- a/src/script/lua_api/l_object.cpp
+++ b/src/script/lua_api/l_object.cpp
@@ -1202,9 +1202,10 @@ int ObjectRef::l_set_attribute(lua_State *L)
}
std::string attr = luaL_checkstring(L, 2);
- std::string value = luaL_checkstring(L, 3);
-
- if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
+ if (lua_isnil(L, 3)) {
+ co->removeExtendedAttribute(attr);
+ } else {
+ std::string value = luaL_checkstring(L, 3);
co->setExtendedAttribute(attr, value);
}
return 1;