]> git.lizzy.rs Git - coronaserver.git/blob - ranks.lua
Added New Chatcommands, a Team Chat and Chest Control
[coronaserver.git] / ranks.lua
1 coronaserver.ranks = {
2         {
3                 name = "evil",
4                 color = "#4E4E4E",
5                 tag = "[BÖSE]",
6                 privs = {shout = true},
7         },
8         {
9         name = "student",
10         color = "#BBBBBB",
11         tag = "[SCHÜLER*IN]",
12         privs = {student = true, interact = true, fast = true, spawn = true, home = true, zoom = true, pvp = true, iblocks = true},
13     },
14         {
15                 name = "feuerwehr",
16                 color = "#000000",
17                 tag = "[FEUERWEHR]",
18                 privs = {},
19         },
20         {
21         name = "teacher",
22         color = "#16AE00",
23         tag = "[LEHRER*IN / PÄDAGOG*IN]",
24         privs = {fly = true, teacher = true, creative = true, areas = true, student = false}
25     },
26         {
27                 name = "supporter",
28                 color = "#EE6E00",
29                 tag = "[SUPPORTER]",
30                 privs = {kick = true, team = true},
31         },
32         {
33                 name = "moderator",
34                 color = "#001FFF",
35                 tag = "[MODERATOR]",
36                 privs = {server = true, ban = true, worldedit = true, vanish = true, ["rename"] = true},
37         },
38         {
39                 name = "developer",
40                 color = "#EBEE00",
41                 tag = "[ENTWICKLER*IN]",
42                 privs = {privs = true},
43         },
44         {
45                 name = "admin",
46                 color = "#FF362D",
47                 tag = "[ADMIN]",
48                 privs = {},
49         },
50         {
51                 name = "owner",
52                 color = "#FF2D8D",
53                 tag = "[OWNER]",
54                 privs = {},
55         },
56 }
57 coronaserver.savedata.ranks = coronaserver.savedata.ranks or {}
58 function coronaserver.get_rank(name)
59     return coronaserver.get_rank_by_name(coronaserver.savedata.ranks[name] or "student")
60 end
61 function coronaserver.get_rank_by_name(rankname)
62         for _, rank in pairs(coronaserver.ranks) do
63                 if rank.name == rankname then
64                         return rank
65                 end
66         end
67 end
68 function coronaserver.get_player_name(name, brackets)
69     local rank = coronaserver.get_rank(name)
70     local rank_tag = minetest.colorize(rank.color, rank.tag)
71         if not brackets then 
72                 brackets = {"",""}
73         end
74         return rank_tag .. brackets[1] .. name .. brackets[2] .. " "
75 end
76 function coronaserver.reload_name_tag(name)
77         local player = minetest.get_player_by_name(name)
78         if not player then return end
79         player:set_nametag_attributes({color = coronaserver.get_rank(name).color})
80 end
81 minetest.register_on_joinplayer(function(player)
82         local name = player:get_player_name()
83         if coronaserver.get_rank(name).name == "student" and minetest.check_player_privs(name, {teacher = true}) then
84                 coronaserver.savedata.ranks[name] = "teacher"
85                 coronaserver.save()
86         end
87         if coronaserver.get_rank(name).name == "hacker" then
88                 coronaserver.savedata.ranks[name] = "student"
89         end
90     minetest.chat_send_all(coronaserver.get_player_name(name) .. "has joined the Server.")
91         coronaserver.reload_name_tag(name)
92 end)
93 minetest.register_on_leaveplayer(function(player)
94         local name = player:get_player_name()
95     minetest.chat_send_all(coronaserver.get_player_name(name) .. "has left the Server.")
96 end)
97 minetest.register_on_chat_message(function(name, message)
98     minetest.chat_send_all(coronaserver.get_player_name(name, {"<", ">"}) .. message)
99     return true
100 end)
101 minetest.register_chatcommand("rank", {
102         params = "<player> <rank>",
103         description = "Einem Spieler einen Rang geben (owner|admin|moderator|developer|supporter|teacher|student)",
104         privs = {privs = true},
105         func = function(name, param)
106                 local target = param:split(" ")[1] or ""
107                 local rank = param:split(" ")[2] or ""
108                 local target_ref = minetest.get_player_by_name(target)
109                 local rank_ref = coronaserver.get_rank_by_name(rank)
110                 if not rank_ref then 
111             minetest.chat_send_player(name, "Invalider Rang: " .. rank)
112         else
113                         coronaserver.savedata.ranks[target] = rank
114                         local privs = {}
115                         for _, r in pairs(coronaserver.ranks) do
116                                 for k, v in pairs(r.privs) do
117                                         privs[k] = v
118                                 end
119                                 if r.name == rank then
120                                         break
121                                 end
122                         end
123                         minetest.set_player_privs(target, privs)
124                         minetest.chat_send_all(target .. "s Rang ist jetzt " .. minetest.colorize(rank_ref.color, rank_ref.name))
125                         coronaserver.reload_name_tag(name)
126                 end
127         end,
128 })
129 minetest.register_privilege("team", "Team Member")