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