2017-07-27 19:29:05 -07:00
|
|
|
--[[ MIT LICENSE HEADER
|
2021-04-19 04:55:53 -07:00
|
|
|
|
2017-07-27 19:29:05 -07:00
|
|
|
Copyright © 2017 Jordan Irwin (AntumDeluge)
|
2021-04-19 04:55:53 -07:00
|
|
|
|
2017-07-27 19:29:05 -07:00
|
|
|
See: LICENSE.txt
|
|
|
|
--]]
|
|
|
|
|
|
|
|
|
2021-08-04 12:44:12 -07:00
|
|
|
--- Hide Name API
|
2017-08-04 16:25:32 -07:00
|
|
|
--
|
2021-08-04 12:44:12 -07:00
|
|
|
-- @topic api
|
2017-07-28 02:20:04 -07:00
|
|
|
|
|
|
|
|
2021-05-17 20:23:04 -07:00
|
|
|
local S = core.get_translator(hidename.modname)
|
2017-07-27 19:29:05 -07:00
|
|
|
|
|
|
|
|
2021-08-04 15:39:33 -07:00
|
|
|
-- START: compatibility with mods that provide "invisibility"
|
|
|
|
|
|
|
|
local msupport = {
|
|
|
|
invisibility = invisibility,
|
|
|
|
invisible = invisible,
|
|
|
|
}
|
|
|
|
|
|
|
|
if msupport.invisible and msupport.invisible.toggle then
|
|
|
|
local invis_toggle_orig = msupport.invisible.toggle
|
|
|
|
msupport.invisible.toggle = function(user, ...)
|
|
|
|
if hidename.hidden(user:get_nametag_attributes(), user:get_player_name()) then
|
|
|
|
-- don't unhide player nametag
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
return invis_toggle_orig(user, ...)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
-- END:
|
2021-08-04 15:13:00 -07:00
|
|
|
|
|
|
|
|
2017-07-27 19:29:05 -07:00
|
|
|
--- Checks if player's nametag is hidden.
|
|
|
|
--
|
2021-05-17 22:25:49 -07:00
|
|
|
-- @tparam table nametag_data Nametag data retrieved by *player:get_nametag_attributes()*.
|
2021-08-04 15:13:00 -07:00
|
|
|
-- @tparam[opt] string pname Player name.
|
2021-05-17 22:25:49 -07:00
|
|
|
-- @treturn bool `true` if player's nametag is hidden
|
2021-08-04 15:13:00 -07:00
|
|
|
function hidename.hidden(nametag_data, pname)
|
2017-08-04 18:32:35 -07:00
|
|
|
if hidename.use_alpha then
|
|
|
|
return nametag_data.color.a == 0
|
|
|
|
end
|
2021-04-19 04:55:53 -07:00
|
|
|
|
2021-08-04 15:13:00 -07:00
|
|
|
-- check "invisibility" mod
|
2021-08-04 15:39:33 -07:00
|
|
|
if msupport.invisibility and msupport.invisibility[pname] then
|
2021-08-04 15:13:00 -07:00
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
2021-05-17 22:15:35 -07:00
|
|
|
if nametag_data.text then
|
|
|
|
return nametag_data.text:len() > 0 and nametag_data.text:trim() == ""
|
|
|
|
end
|
|
|
|
|
|
|
|
return false
|
2017-07-27 19:29:05 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
|
2017-07-27 20:45:30 -07:00
|
|
|
--- Messages info to player about nametag text & visibility.
|
2017-07-27 20:27:33 -07:00
|
|
|
--
|
2021-05-17 22:25:49 -07:00
|
|
|
-- @tparam string name Name of player to check & message
|
2017-07-27 20:27:33 -07:00
|
|
|
function hidename.tellStatus(name)
|
|
|
|
local player = core.get_player_by_name(name)
|
|
|
|
local nametag = player:get_nametag_attributes()
|
2021-04-19 04:55:53 -07:00
|
|
|
|
2021-08-04 13:49:52 -07:00
|
|
|
local status = "Status: @1"
|
2021-08-04 15:13:00 -07:00
|
|
|
if hidename.hidden(nametag, name) then
|
2021-08-04 13:49:52 -07:00
|
|
|
status = S(status, S("hidden"))
|
2017-07-27 20:27:33 -07:00
|
|
|
else
|
2021-08-04 13:49:52 -07:00
|
|
|
status = S(status, S("visible"))
|
2017-07-27 20:27:33 -07:00
|
|
|
end
|
2021-04-19 04:55:53 -07:00
|
|
|
|
2021-08-04 14:11:27 -07:00
|
|
|
-- Use stored text or name parameter value if nametag.text is empty
|
2021-05-17 21:48:06 -07:00
|
|
|
if not nametag.text or nametag.text:trim() == "" then
|
2021-08-04 14:11:27 -07:00
|
|
|
nametag.text = player:get_meta():get_string("nametag_stored_text")
|
|
|
|
if nametag.text:trim() == "" then
|
|
|
|
nametag.text = name
|
|
|
|
end
|
2017-07-27 20:27:33 -07:00
|
|
|
end
|
2021-04-19 04:55:53 -07:00
|
|
|
|
2021-05-17 22:25:02 -07:00
|
|
|
core.chat_send_player(name, S("Nametag: @1", nametag.text))
|
2021-08-04 13:49:52 -07:00
|
|
|
core.chat_send_player(name, status)
|
2017-07-27 20:27:33 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
|
2017-07-27 19:29:05 -07:00
|
|
|
--- Hides a player's nametag.
|
|
|
|
--
|
2021-05-17 22:25:49 -07:00
|
|
|
-- @tparam string name Name of player whose nametag should be made hidden
|
|
|
|
-- @treturn bool `true` if player's nametag is hidden
|
2017-07-27 19:29:05 -07:00
|
|
|
function hidename.hide(name)
|
|
|
|
local player = core.get_player_by_name(name)
|
2017-08-04 18:03:56 -07:00
|
|
|
local nametag = player:get_nametag_attributes()
|
2021-04-19 04:55:53 -07:00
|
|
|
|
2021-08-04 15:13:00 -07:00
|
|
|
if hidename.hidden(nametag, name) then
|
2021-05-17 20:28:45 -07:00
|
|
|
core.chat_send_player(name, S("Nametag is already hidden"))
|
2017-07-27 19:29:05 -07:00
|
|
|
return true
|
|
|
|
end
|
2021-04-19 04:55:53 -07:00
|
|
|
|
2021-05-17 22:06:00 -07:00
|
|
|
local pmeta = player:get_meta()
|
2017-08-04 18:32:35 -07:00
|
|
|
if hidename.use_alpha then
|
2017-08-04 18:32:55 -07:00
|
|
|
-- Preserve nametag alpha level
|
2021-05-17 22:06:00 -07:00
|
|
|
pmeta:set_int("nametag_stored_alpha", nametag.color.a)
|
2021-04-19 04:55:53 -07:00
|
|
|
|
2017-08-04 18:32:35 -07:00
|
|
|
-- Set nametag alpha level to 0
|
2021-05-17 21:57:46 -07:00
|
|
|
nametag.color.a = 0
|
|
|
|
player:set_nametag_attributes(nametag)
|
2017-08-04 18:32:35 -07:00
|
|
|
else
|
2021-05-17 22:06:00 -07:00
|
|
|
-- preserve original nametag text (might be different than player name)
|
|
|
|
pmeta:set_string("nametag_stored_text", nametag.text)
|
2021-05-17 21:48:06 -07:00
|
|
|
-- preserve original nametag bg color (we store entire color
|
|
|
|
-- because bgcolor attribute can be boolean)
|
2021-05-17 22:06:00 -07:00
|
|
|
pmeta:set_string("nametag_stored_bgcolor", core.serialize(nametag.bgcolor))
|
2021-05-17 21:48:06 -07:00
|
|
|
|
|
|
|
-- remove text from nametag
|
|
|
|
nametag.text = " " -- HACK: empty nametag triggers using player name
|
|
|
|
nametag.bgcolor = {a=0, r=255, g=255, b=255} -- can't just set alpha because may be a boolean value
|
|
|
|
|
|
|
|
player:set_nametag_attributes(nametag)
|
2017-08-04 18:32:35 -07:00
|
|
|
end
|
2021-04-19 04:55:53 -07:00
|
|
|
|
2021-08-04 15:13:00 -07:00
|
|
|
if hidename.hidden(player:get_nametag_attributes(), name) then
|
2021-05-17 20:28:45 -07:00
|
|
|
core.chat_send_player(name, S("Nametag is now hidden"))
|
2017-07-27 19:29:05 -07:00
|
|
|
else
|
2021-05-17 20:28:45 -07:00
|
|
|
core.chat_send_player(name, S("ERROR: Could not hide nametag"))
|
|
|
|
core.log("error", "Could not set nametag to \"hidden\" for player " .. name)
|
|
|
|
core.log("error", "Please submit an error report to the \"hidename\" mod developer")
|
2017-07-27 19:29:05 -07:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
--- Makes a player's nametag visible.
|
|
|
|
--
|
2021-05-17 22:25:49 -07:00
|
|
|
-- @tparam string name Name of player whose nametag should be made visible
|
|
|
|
-- @treturn bool `true` if player's nametag is visible
|
2017-07-27 19:29:05 -07:00
|
|
|
function hidename.show(name)
|
2021-08-04 15:39:33 -07:00
|
|
|
if msupport.invisibility and msupport.invisibility[name] then
|
2021-08-04 15:13:00 -07:00
|
|
|
core.chat_send_player(name, S("Cannot make nametag visible while you are invisible"))
|
2021-08-04 15:37:46 -07:00
|
|
|
return true
|
2021-08-04 15:13:00 -07:00
|
|
|
end
|
|
|
|
|
2017-07-27 19:29:05 -07:00
|
|
|
local player = core.get_player_by_name(name)
|
2017-08-04 18:03:56 -07:00
|
|
|
local nametag = player:get_nametag_attributes()
|
2021-04-19 04:55:53 -07:00
|
|
|
|
2021-08-04 15:13:00 -07:00
|
|
|
if not hidename.hidden(nametag, name) then
|
2021-05-17 20:28:45 -07:00
|
|
|
core.chat_send_player(name, S("Nametag is already visible"))
|
2017-07-27 19:29:05 -07:00
|
|
|
return true
|
|
|
|
end
|
2021-04-19 04:55:53 -07:00
|
|
|
|
2021-05-17 21:48:06 -07:00
|
|
|
local pmeta = player:get_meta()
|
2017-08-04 18:32:35 -07:00
|
|
|
if hidename.use_alpha then
|
2021-05-17 21:57:46 -07:00
|
|
|
-- restore nametag alpha level
|
|
|
|
nametag.color.a = pmeta:get_int("nametag_stored_alpha")
|
|
|
|
player:set_nametag_attributes(nametag)
|
|
|
|
|
|
|
|
-- clean meta info
|
2021-05-17 21:01:34 -07:00
|
|
|
player:get_meta():set_string("nametag_stored_alpha", nil)
|
2017-08-04 18:32:35 -07:00
|
|
|
else
|
2021-05-17 21:48:06 -07:00
|
|
|
-- restore nametag text & bg color
|
2021-05-17 22:06:00 -07:00
|
|
|
nametag.text = pmeta:get_string("nametag_stored_text")
|
|
|
|
if nametag.text:trim() == "" then
|
|
|
|
nametag.text = nil
|
|
|
|
end
|
2021-05-17 21:48:06 -07:00
|
|
|
nametag.bgcolor = core.deserialize(pmeta:get_string("nametag_stored_bgcolor"))
|
2021-05-17 22:06:00 -07:00
|
|
|
|
2021-05-17 21:48:06 -07:00
|
|
|
player:set_nametag_attributes(nametag)
|
|
|
|
|
|
|
|
-- clean meta info
|
2021-05-17 22:06:00 -07:00
|
|
|
pmeta:set_string("nametag_stored_text", nil)
|
2021-05-17 21:48:06 -07:00
|
|
|
pmeta:set_string("nametag_stored_bgcolor", nil)
|
2017-08-04 18:32:35 -07:00
|
|
|
end
|
2021-04-19 04:55:53 -07:00
|
|
|
|
2021-08-04 15:13:00 -07:00
|
|
|
if not hidename.hidden(player:get_nametag_attributes(), name) then
|
2021-05-17 20:28:45 -07:00
|
|
|
core.chat_send_player(name, S("Nametag is now visible"))
|
2017-07-27 19:29:05 -07:00
|
|
|
else
|
2021-05-17 20:28:45 -07:00
|
|
|
core.chat_send_player(name, S("ERROR: Could not show nametag"))
|
|
|
|
core.log("error", "Could not set nametag to \"visible\" for player " .. name)
|
|
|
|
core.log("error", "Please submit an error report to the \"hidename\" mod developer")
|
2017-07-27 19:29:05 -07:00
|
|
|
end
|
|
|
|
end
|