X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=ranks.lua;h=55cdc7092f7aed61fc28d35c62c3cb3091595c9f;hb=d425869c0bd621ceb350a142255b0534466e83b9;hp=a353e7b6266548943292f59da54eef7957e24ab8;hpb=6175ef77f9a0a9fd717c5d0b9d85aafe29e84e98;p=coronaserver.git diff --git a/ranks.lua b/ranks.lua index a353e7b..55cdc70 100755 --- a/ranks.lua +++ b/ranks.lua @@ -1,33 +1,74 @@ coronaserver.ranks = { { - name = "owner", - color = "#FF2D8D", - tag = "[OWNER]", + name = "evil", + color = "#4E4E4E", + tag = "[BÖSE]", + privs = {shout = true}, }, { - name = "admin", - color = "#FF362D", - tag = "[ADMIN]", + name = "student", + color = "#BBBBBB", + tag = "[SPIELER*IN]", + privs = {student = true, interact = true, fast = true, spawn = true, home = true, zoom = true, pvp = true, iblocks = true}, + }, + { + name = "vip", + color = "#CD4D00", + tag = "[VIP]", + privs = {}, + }, + { + name = "feuerwehr", + color = "#000000", + tag = "[FEUERWEHR]", + privs = {}, }, { - name = "moderator", - color = "#001FFF", - tag = "[MODERATOR]", + name = "psupporter", + color = "#FF9C48", + tag = "[PROBE-SUPPORTER]", + privs = {team = true, student = false,}, }, + { + name = "teacher", + color = "#16AE00", + tag = "[LEHRER*IN / PÄDAGOG*IN]", + privs = {team = false, fly = true, teacher = true, creative = true, areas = true, basic_privs = true} + }, { name = "supporter", color = "#EE6E00", tag = "[SUPPORTER]", + privs = {kick = true, team = true}, + }, + { + name = "moderator", + color = "#001FFF", + tag = "[MODERATOR]", + privs = {server = true, ban = true, worldedit = true, vanish = true, ["rename"] = true}, + }, + { + name = "developer", + color = "#EBEE00", + tag = "[ENTWICKLER*IN]", + privs = {privs = true}, + }, + { + name = "admin", + color = "#FF362D", + tag = "[ADMIN]", + privs = {}, }, { - name = "player", - color = "#FFFFFF", - tag = "[PLAYER]", - } + name = "owner", + color = "#FF2D8D", + tag = "[OWNER]", + privs = {}, + }, } coronaserver.savedata.ranks = coronaserver.savedata.ranks or {} function coronaserver.get_rank(name) - return coronaserver.get_rank_by_name(coronaserver.savedata.ranks[name] or "player") + return coronaserver.get_rank_by_name(coronaserver.savedata.ranks[name] or "student") end function coronaserver.get_rank_by_name(rankname) for _, rank in pairs(coronaserver.ranks) do @@ -44,10 +85,23 @@ function coronaserver.get_player_name(name, brackets) end return rank_tag .. brackets[1] .. name .. brackets[2] .. " " end +function coronaserver.reload_name_tag(name) + local player = minetest.get_player_by_name(name) + if not player then return end + player:set_nametag_attributes({color = coronaserver.get_rank(name).color}) +end minetest.register_on_joinplayer(function(player) local name = player:get_player_name() + local rank = coronaserver.get_rank(name) + local privs = minetest.get_player_privs(name) + local rankname = rank.name + if rankname == "hacker" then rankname = "student" end + if rankname == "student" and privs.teacher then rankname = "teacher" end + if privs.kick then privs.team = true end + minetest.set_player_privs(name, privs) + coronaserver.savedata.ranks[name] = (rankname == "student") and nil or rankname minetest.chat_send_all(coronaserver.get_player_name(name) .. "has joined the Server.") - player:set_nametag_attributes({color = coronaserver.get_rank(name).color}) + coronaserver.reload_name_tag(name) end) minetest.register_on_leaveplayer(function(player) local name = player:get_player_name() @@ -59,21 +113,30 @@ minetest.register_on_chat_message(function(name, message) end) minetest.register_chatcommand("rank", { params = " ", - description = "Einem Spieler einen Rang geben (owner|admin|moderator|supporter)", + 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] - 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] or "" + local rank = param:split(" ")[2] or "" + 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) 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(coronaserver.ranks) do + for k, v in pairs(r.privs) do + privs[k] = v + end + if r.name == rank then + break + end end - minetest.chat_send_all(name .. " ist jetzt ein " .. minetest.colorize(rank.color, rank.name)) + minetest.set_player_privs(target, privs) + minetest.chat_send_all(target .. "s Rang ist jetzt " .. minetest.colorize(rank_ref.color, rank_ref.name)) + coronaserver.reload_name_tag(target) end end, }) +minetest.register_privilege("team", "Team Member")