From d3800536fffd9cf7aa26289ccfd99cf8ef505695 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Mon, 25 May 2020 14:53:40 +0200 Subject: [PATCH] Added some features --- ranks.lua | 60 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/ranks.lua b/ranks.lua index 6a40302..4237e22 100755 --- a/ranks.lua +++ b/ranks.lua @@ -1,38 +1,60 @@ +local function ReverseTable(t) + local reversedTable = {} + local itemCount = #t + for k, v in ipairs(t) do + reversedTable[itemCount + 1 - k] = v + end + return reversedTable +end coronaserver.ranks = { { name = "owner", color = "#FF2D8D", tag = "[OWNER]", + privs = {}, }, { name = "admin", color = "#FF362D", tag = "[ADMIN]", + privs = {}, }, { - name = "moderator", - color = "#001FFF", - tag = "[MODERATOR]", + name = "hacker", + color = "#000000", + tag = "[HACKER]", + privs = {}, }, { name = "developer", color = "#EBEE00", tag = "[DEVELOPER]", + privs = {privs = true}, + }, + }, + { + name = "moderator", + color = "#001FFF", + tag = "[MODERATOR]", + privs = {server = true, ban = true, worldedit = true, vanish = true, ["rename"] = true}, }, { name = "supporter", color = "#EE6E00", tag = "[SUPPORTER]", + privs = {kick = true}, }, { name = "teacher", color = "#16AE00", tag = "[TEACHER]", + privs = {fly = true, teacher = true, creative = true, areas = true, student = false} }, { name = "student", color = "#BBBBBB", tag = "[STUDENT]", + privs = {student = true}, } } coronaserver.savedata.ranks = coronaserver.savedata.ranks or {} @@ -75,19 +97,29 @@ minetest.register_chatcommand("rank", { params = " ", description = "Einem Spieler einen Rang geben (owner|admin|moderator|developer|supporter|teacher|student)", privs = {privs = true}, - func = function(admin, param) - local name = param:split(' ')[1] or "" - local player = minetest.get_player_by_name(name) - local rank = coronaserver.get_rank_by_name(param:split(' ')[2]) - if not rank then - minetest.chat_send_player(admin, "Invalid Rank.") + func = function(name, param) + local target = param:split(" ")[1] + local rank = param:split(" ")[2] + local target_ref = minetest.get_player_by_name(target) + local rank_ref = coronaserver.get_rank_by_name(rank) + if not rank_ref then + minetest.chat_send_player(name, "Invalider Rang: " .. (rank or "")) else - coronaserver.savedata.ranks[name] = rank.name - coronaserver.save() - if player then - player:set_nametag_attributes({color = rank.color}) + coronaserver.savedata.ranks[target] = rank + local privs = {} + for _, r in pairs(ReverseTable(coronaserver.ranks)) do + for k, v in pairs(r.privs) do + privs[k] = v + end + if r.name == rank then + break + end + end + minetest.set_player_privs(target, privs) + minetest.chat_send_all(target .. " is now a " .. minetest.colorize(rank_ref.color, rank_ref.name)) + if target_ref then + target_ref:set_nametag_attributes({color = rank_ref.color}) end - minetest.chat_send_all(name .. " ist jetzt ein " .. minetest.colorize(rank.color, rank.name)) end end, }) -- 2.44.0