]> git.lizzy.rs Git - coronaserver.git/blob - ranks.lua
Add event-manager role
[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 = "[SPIELER:IN]",
12                 privs = {student = true, interact = true, fast = true, spawn = true, home = true, zoom = true, pvp = true, iblocks = true},
13         },
14         {
15                 name = "eventmanager",
16                 color = "#FF362D",
17                 tag = "[EVENT-MANAGER:IN]",
18                 privs = {},
19         },
20         {
21                 name = "chatmod",
22                 color = "#93E3D6",
23                 tag = "[CHATMODERATOR:IN]",
24                 privs = {},
25         },
26         {
27                 name = "vip",
28                 color = "#00E5FF",
29                 tag = "[VIP]",
30                 privs = {},
31         },
32         {
33                 name = "feuerwehr",
34                 color = "#000000",
35                 tag = "[FEUERWEHR]",
36                 privs = {},
37         },
38         {
39                 name = "psupporter",
40                 color = "#FF9C48",
41                 tag = "[PROBE-SUPPORTER:IN]",
42                 privs = {team = true, student = false,},
43         },
44         {
45                 name = "teacher",
46                 color = "#16AE00",
47                 tag = "[LEHRER:IN / PÄDAGOG:IN]",
48                 privs = {team = false, fly = true, teacher = true, creative = true, areas = true,  basic_privs = true, teleport = true, bring = true, settime = true, kick = true, signslib_edit = true}
49         },
50         {
51                 name = "supporter",
52                 color = "#EE6E00",
53                 tag = "[SUPPORTER:IN]",
54                 privs = {team = true},
55         },
56         {
57                 name = "moderator",
58                 color = "#001FFF",
59                 tag = "[MODERATOR:IN]",
60                 privs = {server = true, ban = true, worldedit = true, vanish = true, ["rename"] = true},
61         },
62         {
63                 name = "developer",
64                 color = "#EBEE00",
65                 tag = "[ENTWICKLER:IN]",
66                 privs = {privs = true},
67         },
68         {
69                 name = "admin",
70                 color = "#FF362D",
71                 tag = "[ADMIN]",
72                 privs = {},
73         },
74         {
75                 name = "live",
76                 color = "#8D0600",
77                 tag = "[LIVE - TWITCH]",
78                 privs = {},
79         },
80         {
81                 name = "owner",
82                 color = "#FF2D8D",
83                 tag = "[OWNER]",
84                 privs = {},
85         },
86 }
87 coronaserver.savedata.ranks = coronaserver.savedata.ranks or {}
88 function coronaserver.get_rank(name)
89         return coronaserver.get_rank_by_name(coronaserver.savedata.ranks[name] or "student")
90 end
91 function coronaserver.get_rank_by_name(rankname)
92         for i, rank in pairs(coronaserver.ranks) do
93                 if rank.name == rankname then
94                         return rank, i
95                 end
96         end
97 end
98 function coronaserver.get_player_name(name, brackets)
99         local rank = coronaserver.get_rank(name)
100         local rank_tag = minetest.colorize(rank.color, rank.tag)
101         if not brackets then
102                 brackets = {"",""}
103         end
104         return rank_tag .. brackets[1] .. name .. brackets[2] .. " "
105 end
106 function coronaserver.reload_name_tag(name)
107         local player = minetest.get_player_by_name(name)
108         if not player then return end
109         player:set_nametag_attributes({color = coronaserver.get_rank(name).color})
110 end
111 minetest.register_on_joinplayer(function(player)
112         local name = player:get_player_name()
113         local rank = coronaserver.get_rank(name)
114         local privs = minetest.get_player_privs(name)
115         local rankname = rank.name
116         if rankname == "hacker" then rankname = "student" end
117         if rankname == "student" and privs.teacher then rankname = "teacher" end
118         if privs.kick then privs.team = true end
119         minetest.set_player_privs(name, privs)
120         coronaserver.savedata.ranks[name] = (rankname == "student") and nil or rankname
121         minetest.chat_send_all(coronaserver.get_player_name(name) .. "has joined the Server.")
122         coronaserver.reload_name_tag(name)
123 end)
124 minetest.register_on_leaveplayer(function(player)
125         local name = player:get_player_name()
126         minetest.chat_send_all(coronaserver.get_player_name(name) .. "has left the Server.")
127 end)
128 minetest.register_on_chat_message(function(name, message)
129         minetest.chat_send_all(coronaserver.get_player_name(name, {"<", ">"}) .. message)
130         minetest.log("[CHAT] <" .. name .. "> " .. message)
131         return true
132 end)
133 minetest.register_chatcommand("rank", {
134         params = "<player> <rank>",
135         description = "Einem Spieler einen Rang geben (owner|admin|moderator|developer|supporter|teacher|student)",
136         privs = {privs = true},
137         func = function(name, param)
138                 local target = param:split(" ")[1] or ""
139                 local rank = param:split(" ")[2] or ""
140                 local target_ref = minetest.get_player_by_name(target)
141                 local rank_ref = coronaserver.get_rank_by_name(rank)
142                 if not rank_ref then
143                         minetest.chat_send_player(name, "Invalider Rang: " .. rank)
144                 else
145                         coronaserver.savedata.ranks[target] = rank
146                         local privs = {}
147                         for _, r in pairs(coronaserver.ranks) do
148                                 for k, v in pairs(r.privs) do
149                                         privs[k] = v
150                                 end
151                                 if r.name == rank then
152                                         break
153                                 end
154                         end
155                         minetest.set_player_privs(target, privs)
156                         minetest.chat_send_all(target .. "s Rang ist jetzt " .. minetest.colorize(rank_ref.color, rank_ref.name))
157                         coronaserver.reload_name_tag(target)
158                 end
159         end,
160 })
161 minetest.register_privilege("team", "Team Member")