missing changes

master
Och Noe 2020-05-10 10:10:27 +02:00
parent 67a8908d9f
commit 6bc407c12e
2 changed files with 136 additions and 43 deletions

View File

@ -2,6 +2,27 @@
A minetest CSM mod for changing the colour of text sent to the server.
### Usage
Use .set_colour to set the colour of chat sent to the server, you can
use either HTML named colours or HTML hexdecimal colour codes. Use
.rainbow to generate rainbow text
Use
.set_colour
to set the colour of chat sent to the server, you can
use either HTML named colours or HTML hexdecimal colour
codes.
.rainbow
generate rainbow text
.pastel
for a pastel coloured rainbow
.get_colour
to see the current colour
.mi / .mw
Moderator Info / Warning
(depends on /mi and /mw server commands)
.fade col1 col2 text
fades a text from col1 to col2
Original mod by red-001, additions (pastel and others) by dhausmig
Currently maintained by Och_Noe

152
init.lua
View File

@ -1,10 +1,44 @@
local modstorage = core.get_mod_storage()
local modpath = minetest.get_modpath("colour_chat")
dofile(modpath .. "/colournames.lua")
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 safe(func)
-- wrap a function w/ logic to avoid crashing the game
local f = function(...)
local status, out = pcall(func, ...)
if status then
return out
else
log('warning', 'Error (func): ' .. out)
return nil
end
end
return f
end
local function paramsplit(str)
-- minetest.display_chat_message("paramsplit 1")
local s = str:gsub("^%s*(.-)%s*$", "%1")
local p1 = string.find(s," ",1,true)
if not p1 then return nil end
-- minetest.display_chat_message("paramsplit 2")
local p2 = string.find(s," ",p1+1,true)
local s1 = str:sub(1,p1-1)
if not p2 then return {s1,s1,str:sub(p1+1,512)}
end
-- minetest.display_chat_message("paramsplit 3")
local s2 = str:sub(p1+1,p2-1)
local s3 = str:sub(p2+1,512)
return {s1,s2,s3}
end
local function rgb_to_hex(rgb)
local hexadecimal = '#'
@ -79,6 +113,8 @@ function hex2rgb(hex) -- added - found on github
end
local function color_step(pos, col1, col2) -- added - gets a color between colors
-- if not col1 then col1 = "#888888" end
-- if not col2 then col2 = "#888888" end
local rgb1 = hex2rgb(col1)
local rgb2 = hex2rgb(col2)
local rgb = {}
@ -109,30 +145,50 @@ local function say(message)
end
function fade(parameter)
local col1 = string.sub(parameter, 1, 7)
local col2 = string.sub(parameter, 9, 15)
local message = string.sub(parameter, 17)
if not canTalk() then
return false, "You need 'shout' in order to use this command"
end
if col1 == col2 then
say(core.get_color_escape_sequence(col1) .. message)
return true
end
local step = 255 / message:len()
local pos = 0
local output = ""
for i = 1, message:len() do
local char = message:sub(i,i)
if char:match("%s") then
output = output .. char
else
output = output .. core.get_color_escape_sequence(color_step(pos, col1, col2)) .. char
end
pos = pos + step
end
say(output)
return true
local p = paramsplit(parameter)
if not p then return end
-- local col1 = string.sub(parameter, 1, 7)
-- local col2 = string.sub(parameter, 9, 15)
-- local message = string.sub(parameter, 17)
local col1 = colourname2hex(p[1])
-- minetest.display_chat_message("col1.a: "..col1)
-- minetest.display_chat_message("col1.b: "..core.get_color_escape_sequence(col1):sub(2,-1))
-- minetest.display_chat_message("col1.c: "..minetest.colorize(col1):sub(2,-1))
local col2 = colourname2hex(p[2])
-- minetest.display_chat_message("col2.a: "..p[2])
-- minetest.display_chat_message("col2.b: "..col2)
local message = p[3]
-- minetest.display_chat_message("msg: "..message)
-- if true then return end
if not canTalk() then
return false, "You need 'shout' in order to use this command"
end
if col1 == col2 then
-- minetest.display_chat_message("col1=col2")
say(minetest.get_color_escape_sequence(col1) .. message)
-- minetest.display_chat_message("col1=col2 b")
return true
end
-- minetest.display_chat_message("pos4")
local step = 255 / (message:len()/2)
local pos = 0
local output = ""
for i = 1, message:len() do
local char = message:sub(i,i)
if char:match("%s") then
output = output .. char
else
output = output .. minetest.get_color_escape_sequence(color_step(pos, col1, col2)) .. char
end
pos = pos + step
end
say(output)
return true
end
register_on_message(function(message)
@ -147,12 +203,26 @@ end)
core.register_chatcommand("set_colour", {
description = core.gettext("Change chat colour"),
func = function(colour)
if colour:len() == 7 then
modstorage:set_string("colour", colour.." "..colour)
else
modstorage:set_string("colour", colour)
local c = paramsplit(colour)
if not c then
local c1 = colourname2hex(colour)
if c1 and c1 ~= "" then
modstorage:set_string("colour", colour.." "..colour)
return true, "Chat colour changed."
else
return true,"'"..colour.."' is not a colour"
end
end
return true, "Chat colour changed."
c1 = colourname2hex(c[1])
c2 = colourname2hex(c[3])
if not c1 or c1 == "" then
return true,"'"..c[1].."' is not a colour"
end
if not c2 or c2 == "" then
return true,"'"..c[2].."' is not a colour"
end
modstorage:set_string("colour", c1.." "..c2)
return true, "Chat colours changed."
end,
})
@ -190,9 +260,9 @@ end,
})
core.register_chatcommand("fade", { -- added - fades between any two colors
description = core.gettext("fade message between two colors"),
func = fade,
})
description = core.gettext("fade message between two colors"),
func = fade,
})
core.register_chatcommand("pastel", {
description = core.gettext("pastel rainbow text"),
@ -224,10 +294,11 @@ core.register_chatcommand("mw", {
if not canTalk() then
return false, "You need 'shout' in order to use this comand"
end
local output = ""
output = core.get_color_escape_sequence("#ffdf00") .. "MODERATOR WARNING: "
output = output .. core.get_color_escape_sequence("#ff7fff") ..param
say(output)
minetest.run_server_chatcommand('mw', param)
-- local output = ""
-- output = core.get_color_escape_sequence("#ffdf00") .. "MODERATOR WARNING: "
-- output = output .. core.get_color_escape_sequence("#ff7fff") ..param
-- say(output)
return true
end,
})
@ -239,10 +310,11 @@ core.register_chatcommand("mi", {
if not canTalk() then
return false, "You need 'shout' in order to use this command"
end
local output = ""
output = core.get_color_escape_sequence("#d0ff00") .. "MODERATOR INFO: "
output = output .. core.get_color_escape_sequence("#dfdfff") .. param
say(output)
minetest.run_server_chatcommand('mi', param)
-- local output = ""
-- output = core.get_color_escape_sequence("#d0ff00") .. "MODERATOR INFO: "
-- output = output .. core.get_color_escape_sequence("#dfdfff") .. param
-- say(output)
return true
end,
})