Merge pull request #3 from Athemis/master
[MineClone.git] / mods / chat_rewirte / init.lua
blobe604a1aaeecd77ca086663d833dcd5c100710c39
1 local init = os.clock()
2 -- config zone {{{
3 formats = {
4 -- ["MATCH"] = {"FORMAT" COLOR PRIV}, --
5 ["#(.+)"] = {"*** %s: %s ***", 0xFFFF00, "server"},
7 DEFAULT_FORMAT = "%s: %s"
8 DEFAULT_COLOR = 0xEEF3EE
9 GM_PREFIX = "[Admin] "
10 MESSAGES_ON_SCREEN = 10
11 MAX_LENGTH = 100
12 LEFT_INDENT = 0.01
13 TOP_INDENT = 0.92
14 FONT_WIDTH = 12
15 FONT_HEIGHT = 24
16 -- config zone }}}
18 firsthud = nil
20 function addMessage(player, new_text, new_color)
21 local temp_text
22 local temp_color
23 local hud
24 for id = firsthud, (firsthud+MESSAGES_ON_SCREEN-1) do
25 hud = player:hud_get(id)
26 if hud and hud.name == "chat" then
27 temp_text = hud.text
28 temp_color = hud.number
29 player:hud_change(id, "number", new_color)
30 player:hud_change(id, "text", new_text)
31 new_text = temp_text
32 new_color = temp_color
33 end
34 end
35 end
37 function sendMessage(player, message, color)
38 local splitter
39 while message:len() > MAX_LENGTH do
40 splitter = string.find (message, " ", MAX_LENGTH)
41 if splitter == nil then
42 splitter = MAX_LENGTH
43 end
44 addMessage(player, message:sub(0,splitter), color)
45 message = message:sub(splitter+1)
46 end
47 addMessage(player, message, color)
48 end
50 minetest.register_on_joinplayer(function(player)
51 minetest.after(2, function(player)
52 for i = 1, MESSAGES_ON_SCREEN do
53 local hud_id = player:hud_add({
54 hud_elem_type = "text",
55 text = "",
56 position = {x = LEFT_INDENT, y = TOP_INDENT},
57 name = "chat",
58 scale = {x=500, y=50},
59 number = 0xFFFFFF,
60 item = 0,
61 direction = 0,
62 alignment = {x=1, y=0},
63 offset = {x=0, y=-i*FONT_HEIGHT}
65 if not firsthud then
66 firsthud = hud_id
67 end
68 end
69 end, player)
70 end)
73 minetest.register_on_chat_message(function(name, message)
74 fmt = DEFAULT_FORMAT
75 color = DEFAULT_COLOR
76 pl = minetest.get_player_by_name(name)
77 pls = minetest.get_connected_players()
78 -- formats (see config zone)
79 for m, f in pairs(formats) do
80 submes = string.match(message, m)
81 if submes then
82 if not f[3] then -- if PRIV==nil
83 fmt = f[1]
84 color = f[2]
85 break
86 elseif minetest.check_player_privs(name, {[f[3]]=true}) then
87 fmt = f[1]
88 color = f[2]
89 break
90 end
91 end
92 end
94 if not submes then
95 submes = message
96 end
99 if minetest.check_player_privs(name, {["server"]=true,}) then
100 name = GM_PREFIX .. name
103 for i = 1, #pls do
104 sendMessage(pls[i], string.format(fmt, name, submes), color)
107 return true
108 end)
109 local time_to_load= os.clock() - init
110 print(string.format("[MOD] "..minetest.get_current_modname().." loaded in %.4f s", time_to_load))