diff options
author | Elias Fleckenstein <eliasfleckenstein@web.de> | 2020-07-07 14:16:44 +0200 |
---|---|---|
committer | Elias Fleckenstein <eliasfleckenstein@web.de> | 2020-07-07 14:16:44 +0200 |
commit | 5a2bf6634c73030a70fdef6bae1784f24cc6d48d (patch) | |
tree | 6a8d4ecb975410ff496f74368af4b474a0bd288b /clientmods/colour_chat/init.lua | |
parent | e610149c0cc3516b61115541f2f4f78344a0bb2c (diff) | |
download | dragonfireclient-5a2bf6634c73030a70fdef6bae1784f24cc6d48d.tar.xz |
Added Clientmods
Diffstat (limited to 'clientmods/colour_chat/init.lua')
-rw-r--r-- | clientmods/colour_chat/init.lua | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/clientmods/colour_chat/init.lua b/clientmods/colour_chat/init.lua new file mode 100644 index 000000000..e3c82bf59 --- /dev/null +++ b/clientmods/colour_chat/init.lua @@ -0,0 +1,121 @@ +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, +}) |