diff options
-rw-r--r-- | doc/lua_api.txt | 17 | ||||
-rw-r--r-- | src/content_cao.cpp | 3 | ||||
-rw-r--r-- | src/content_sao.cpp | 4 | ||||
-rw-r--r-- | src/genericobject.cpp | 5 | ||||
-rw-r--r-- | src/genericobject.h | 4 | ||||
-rw-r--r-- | src/script/lua_api/l_object.cpp | 21 | ||||
-rw-r--r-- | src/script/lua_api/l_object.h | 8 |
7 files changed, 36 insertions, 26 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 8ade48b7b..0cc83bf69 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2491,12 +2491,17 @@ This is basically a reference to a C++ `ServerActiveObject` * `set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})`: defines offset value for camera per player * in first person view * in third person view (max. values `{x=-10/10,y=-10,15,z=-5/5}`) -* `get_nametag_color()` - * returns the color of the nametag as table - * { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } -* `set_nametag_color(color)` - * sets the color of the nametag - * `color`: { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } +* `get_nametag_attributes()` + * returns a table with the attributes of the nametag of the player + * { + color = { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } + } +* `set_nametag_attributes(attributes)` + * sets the attributes of the nametag of the player + * `attributes`: + { + color = { a = 0...255, r = 0...255, g = 0...255, b = 0...255 } + } ### `InvRef` An `InvRef` is a reference to an inventory. diff --git a/src/content_cao.cpp b/src/content_cao.cpp index 5bf4d8e9c..fe560a41a 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -1715,7 +1715,8 @@ void GenericCAO::processMessage(const std::string &data) int rating = readS16(is); m_armor_groups[name] = rating; } - } else if (cmd == GENERIC_CMD_SET_NAMETAG_COLOR) { + } else if (cmd == GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) { + u8 version = readU8(is); // forward compatibility m_nametag_color = readARGB8(is); if (m_textnode != NULL) { m_textnode->setTextColor(m_nametag_color); diff --git a/src/content_sao.cpp b/src/content_sao.cpp index c7f4b60c7..1f7323c9c 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -814,7 +814,7 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version) os<<serializeLongString(gob_cmd_update_physics_override(m_physics_override_speed, m_physics_override_jump, m_physics_override_gravity, m_physics_override_sneak, m_physics_override_sneak_glitch)); // 5 - os << serializeLongString(gob_cmd_set_nametag_color(m_nametag_color)); // 6 + os << serializeLongString(gob_cmd_update_nametag_attributes(m_nametag_color)); // 6 } else { @@ -971,7 +971,7 @@ void PlayerSAO::step(float dtime, bool send_recommended) if (m_nametag_sent == false) { m_nametag_sent = true; - std::string str = gob_cmd_set_nametag_color(m_nametag_color); + std::string str = gob_cmd_update_nametag_attributes(m_nametag_color); // create message and add to list ActiveObjectMessage aom(getId(), true, str); m_messages_out.push(aom); diff --git a/src/genericobject.cpp b/src/genericobject.cpp index 1f4f59e92..78dc7fa91 100644 --- a/src/genericobject.cpp +++ b/src/genericobject.cpp @@ -170,12 +170,13 @@ std::string gob_cmd_update_attachment(int parent_id, std::string bone, v3f posit return os.str(); } -std::string gob_cmd_set_nametag_color(video::SColor color) +std::string gob_cmd_update_nametag_attributes(video::SColor color) { std::ostringstream os(std::ios::binary); // command - writeU8(os, GENERIC_CMD_SET_NAMETAG_COLOR); + writeU8(os, GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES); // parameters + writeU8(os, 1); // version for forward compatibility writeARGB8(os, color); return os.str(); } diff --git a/src/genericobject.h b/src/genericobject.h index 854950d27..2233e4ea0 100644 --- a/src/genericobject.h +++ b/src/genericobject.h @@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define GENERIC_CMD_SET_BONE_POSITION 7 #define GENERIC_CMD_SET_ATTACHMENT 8 #define GENERIC_CMD_SET_PHYSICS_OVERRIDE 9 -#define GENERIC_CMD_SET_NAMETAG_COLOR 10 +#define GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES 10 #include "object_properties.h" std::string gob_cmd_set_properties(const ObjectProperties &prop); @@ -73,7 +73,7 @@ std::string gob_cmd_update_bone_position(std::string bone, v3f position, v3f rot std::string gob_cmd_update_attachment(int parent_id, std::string bone, v3f position, v3f rotation); -std::string gob_cmd_set_nametag_color(video::SColor color); +std::string gob_cmd_update_nametag_attributes(video::SColor color); #endif diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index c639a4834..845aab732 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -1274,8 +1274,8 @@ int ObjectRef::l_override_day_night_ratio(lua_State *L) return 1; } -// set_nametag_color(self, color) -int ObjectRef::l_set_nametag_color(lua_State *L) +// set_nametag_attributes(self, attributes) +int ObjectRef::l_set_nametag_attributes(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); @@ -1283,17 +1283,18 @@ int ObjectRef::l_set_nametag_color(lua_State *L) if (playersao == NULL) return 0; - video::SColor color(255,255,255,255); - if (!lua_isnil(L, 2)) - color = readARGB8(L, 2); + video::SColor color = playersao->getNametagColor(); + lua_getfield(L, 2, "color"); + if (!lua_isnil(L, -1)) + color = readARGB8(L, -1); playersao->setNametagColor(color); lua_pushboolean(L, true); return 1; } -// get_nametag_color(self) -int ObjectRef::l_get_nametag_color(lua_State *L) +// get_nametag_attributes(self) +int ObjectRef::l_get_nametag_attributes(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); @@ -1304,6 +1305,7 @@ int ObjectRef::l_get_nametag_color(lua_State *L) video::SColor color = playersao->getNametagColor(); lua_newtable(L); + lua_newtable(L); lua_pushnumber(L, color.getAlpha()); lua_setfield(L, -2, "a"); lua_pushnumber(L, color.getRed()); @@ -1312,6 +1314,7 @@ int ObjectRef::l_get_nametag_color(lua_State *L) lua_setfield(L, -2, "g"); lua_pushnumber(L, color.getBlue()); lua_setfield(L, -2, "b"); + lua_setfield(L, -2, "color"); return 1; } @@ -1438,7 +1441,7 @@ const luaL_reg ObjectRef::methods[] = { luamethod(ObjectRef, override_day_night_ratio), luamethod(ObjectRef, set_local_animation), luamethod(ObjectRef, set_eye_offset), - luamethod(ObjectRef, set_nametag_color), - luamethod(ObjectRef, get_nametag_color), + luamethod(ObjectRef, set_nametag_attributes), + luamethod(ObjectRef, get_nametag_attributes), {0,0} }; diff --git a/src/script/lua_api/l_object.h b/src/script/lua_api/l_object.h index 1f2931f29..af3ed5ef0 100644 --- a/src/script/lua_api/l_object.h +++ b/src/script/lua_api/l_object.h @@ -240,11 +240,11 @@ private: // set_eye_offset(self, v3f first pv, v3f third pv) static int l_set_eye_offset(lua_State *L); - // set_nametag_color(self, color) - static int l_set_nametag_color(lua_State *L); + // set_nametag_attributes(self, attributes) + static int l_set_nametag_attributes(lua_State *L); - // get_nametag_color(self) - static int l_get_nametag_color(lua_State *L); + // get_nametag_attributes(self) + static int l_get_nametag_attributes(lua_State *L); public: ObjectRef(ServerActiveObject *object); |