67 lines
1.7 KiB
Lua
67 lines
1.7 KiB
Lua
lzr_messages = {}
|
|
|
|
local message_handles = {}
|
|
local message_timers = {}
|
|
|
|
--[[
|
|
Show a on-screen message in the center to a player for a given time.
|
|
If there is already a message shown, it will be replaced.
|
|
|
|
* player: ObjectRef of player
|
|
* text: Text to display
|
|
* duration: Duration in seconds
|
|
* color: Text color (as hexadecimal RGB number) (default: 0xFFFFFF)
|
|
|
|
Returns the HUD ID of the message on success
|
|
]]
|
|
function lzr_messages.show_message(player, text, duration, color)
|
|
local playername = player:get_player_name()
|
|
local id
|
|
if not color then
|
|
color = 0xFFFFFF
|
|
end
|
|
if message_handles[playername] then
|
|
id = message_handles[playername]
|
|
player:hud_change(id, "text", text)
|
|
player:hud_change(id, "number", color)
|
|
else
|
|
id = player:hud_add({
|
|
hud_elem_type = "text",
|
|
position = { x = 0.5, y = 0.5 },
|
|
name = "message",
|
|
text = text,
|
|
number = color,
|
|
alignment = { x = 0, y = -1 },
|
|
offset = { x = 0, y = -32 },
|
|
scale = { x = 100, y = 100 },
|
|
size = { x = 3, y = 3 },
|
|
z_index = 0,
|
|
})
|
|
end
|
|
if id then
|
|
message_handles[playername] = id
|
|
message_timers[playername] = duration
|
|
end
|
|
return id
|
|
end
|
|
|
|
minetest.register_on_leaveplayer(function(player)
|
|
message_handles[player:get_player_name()] = nil
|
|
message_timers[player:get_player_name()] = nil
|
|
end)
|
|
|
|
minetest.register_globalstep(function(dtime)
|
|
local players = minetest.get_connected_players()
|
|
for p=1, #players do
|
|
local name = players[p]:get_player_name()
|
|
if message_timers[name] then
|
|
message_timers[name] = message_timers[name] - dtime
|
|
if message_timers[name] <= 0 then
|
|
players[p]:hud_remove(message_handles[name])
|
|
message_handles[name] = nil
|
|
message_timers[name] = nil
|
|
end
|
|
end
|
|
end
|
|
end)
|