122 lines
2.8 KiB
Lua
122 lines
2.8 KiB
Lua
local modstorage = core.get_mod_storage()
|
|
|
|
local register_on_message = core.register_on_sending_chat_message
|
|
if core.register_on_sending_chat_messages then
|
|
register_on_message = core.register_on_sending_chat_messages
|
|
end
|
|
|
|
local function rgb_to_hex(rgb)
|
|
local hexadecimal = '#'
|
|
|
|
for key, value in pairs(rgb) do
|
|
local hex = ''
|
|
|
|
while(value > 0)do
|
|
local index = math.fmod(value, 16) + 1
|
|
value = math.floor(value / 16)
|
|
hex = string.sub('0123456789ABCDEF', index, index) .. hex
|
|
end
|
|
|
|
if(string.len(hex) == 0)then
|
|
hex = '00'
|
|
|
|
elseif(string.len(hex) == 1)then
|
|
hex = '0' .. hex
|
|
end
|
|
|
|
hexadecimal = hexadecimal .. hex
|
|
end
|
|
|
|
return hexadecimal
|
|
end
|
|
|
|
local function color_from_hue(hue)
|
|
local h = hue / 60
|
|
local c = 255
|
|
local x = (1 - math.abs(h%2 - 1)) * 255
|
|
|
|
local i = math.floor(h);
|
|
if (i == 0) then
|
|
return rgb_to_hex({c, x, 0})
|
|
elseif (i == 1) then
|
|
return rgb_to_hex({x, c, 0})
|
|
elseif (i == 2) then
|
|
return rgb_to_hex({0, c, x})
|
|
elseif (i == 3) then
|
|
return rgb_to_hex({0, x, c});
|
|
elseif (i == 4) then
|
|
return rgb_to_hex({x, 0, c});
|
|
else
|
|
return rgb_to_hex({c, 0, x});
|
|
end
|
|
end
|
|
|
|
local function canTalk()
|
|
if core.get_privilege_list then
|
|
return core.get_privilege_list().shout
|
|
else
|
|
return true
|
|
end
|
|
end
|
|
|
|
local function say(message)
|
|
if not canTalk() then
|
|
minetest.display_chat_message("You need 'shout' in order to talk")
|
|
return
|
|
end
|
|
minetest.send_chat_message(message)
|
|
if minetest.get_server_info().protocol_version < 29 then
|
|
local name = minetest.localplayer:get_name()
|
|
minetest.display_chat_message("<"..name.."> " .. message)
|
|
end
|
|
end
|
|
|
|
register_on_message(function(message)
|
|
if message:sub(1,1) == "/" or modstorage:get_string("colour") == "" or modstorage:get_string("colour") == "white" then
|
|
return false
|
|
end
|
|
|
|
say(core.get_color_escape_sequence(modstorage:get_string("colour")) .. message)
|
|
return true
|
|
end)
|
|
|
|
core.register_chatcommand("set_colour", {
|
|
description = core.gettext("Change chat colour"),
|
|
func = function(colour)
|
|
modstorage:set_string("colour", colour)
|
|
return true, "Chat colour changed."
|
|
end,
|
|
})
|
|
|
|
core.register_chatcommand("rainbow", {
|
|
description = core.gettext("rainbow text"),
|
|
func = function(param)
|
|
if not canTalk() then
|
|
return false, "You need 'shout' in order to use this command"
|
|
end
|
|
local step = 360 / param:len()
|
|
local hue = 0
|
|
-- iterate the whole 360 degrees
|
|
local output = ""
|
|
for i = 1, param:len() do
|
|
local char = param:sub(i,i)
|
|
if char:match("%s") then
|
|
output = output .. char
|
|
else
|
|
output = output .. core.get_color_escape_sequence(color_from_hue(hue)) .. char
|
|
end
|
|
hue = hue + step
|
|
end
|
|
say(output)
|
|
return true
|
|
end,
|
|
})
|
|
|
|
core.register_chatcommand("say", {
|
|
description = core.gettext("Send text without applying colour to it"),
|
|
func = function(text)
|
|
say(text)
|
|
return true
|
|
end,
|
|
})
|