-
Notifications
You must be signed in to change notification settings - Fork 4
/
init.lua
121 lines (104 loc) · 2.8 KB
/
init.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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,
})