]> git.lizzy.rs Git - elidragon_v2.git/commitdiff
Add rank system
authorElias Fleckenstein <eliasfleckenstein@web.de>
Sun, 28 Feb 2021 13:23:55 +0000 (14:23 +0100)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Sun, 28 Feb 2021 13:23:55 +0000 (14:23 +0100)
mods/elidragon_ranks/init.lua [new file with mode: 0644]
mods/elidragon_ranks/mod.conf [new file with mode: 0644]
worlds/creative/minetest.conf
worlds/creative/world.mt
worlds/lobby/minetest.conf
worlds/lobby/world.mt
worlds/skyblock/minetest.conf
worlds/skyblock/world.mt
worlds/survival/minetest.conf
worlds/survival/world.mt

diff --git a/mods/elidragon_ranks/init.lua b/mods/elidragon_ranks/init.lua
new file mode 100644 (file)
index 0000000..ee6a1b1
--- /dev/null
@@ -0,0 +1,166 @@
+local playerdb = elidragon.playerdb
+
+local ranks = {}
+
+local players = playerdb.players
+local admin = minetest.settings:get_string("name")
+playerdb.initial_data.rank = "player"
+
+function ranks.get(name)
+       if name == "rpc" then
+               return "system"
+       end
+       local playerdata = players[name]
+       if not playerdata then
+               return name == admin and "console" or "offline"
+       end
+       return playerdata.rank
+end
+
+function ranks.get_def(name)
+       return ranks.defs[ranks.get(name)]
+end
+
+function ranks.get_player_name(name, brackets)
+       local def = ranks.get_def(name)
+       brackets = brackets or {"", ""}
+       return minetest.colorize("#" .. def.color, def.tag) .. brackets[1] .. name .. brackets[2]
+end
+
+function ranks.reload(player)
+       local name = player:get_player_name()
+       local def = ranks.get_def(name)
+       player:set_nametag_attributes({text = ranks.get_player_name(name)})
+       minetest.set_player_privs(name, assert(def.privs))
+end
+
+function ranks.set(name, rank)
+       if name == "rpc" then
+               return false, "The rank of the rpc player cannot be changed."
+       end
+       if not ranks.defs[rank] then
+               return false, "Invalid rank."
+       end
+       local player = minetest.get_player_by_name(name)
+       if not player then
+               return false, name .. " is not online."
+       end
+       local playerdata = players[name]
+       playerdata.rank = rank
+       playerdata:save()
+       ranks.reload(player)
+end
+
+minetest.register_on_joinplayer(function(player)
+       minetest.chat_send_all(ranks.get_player_name(player) .. " has joined the Server.")
+       ranks.reload(player)
+end)
+
+minetest.register_on_leaveplayer(function(player)
+       minetest.chat_send_all(ranks.get_player_name(player) .. " has left the Server.")
+end)
+
+minetest.register_on_chat_message(function(name, message)
+       if not minetest.check_player_privs(name, {shout = true}) then
+               return
+       end
+       minetest.chat_send_all(ranks.get_player_name(name, {"<", ">"}) .. " " .. message)
+       return true
+end)
+
+minetest.register_chatcommand("rank", {
+       params = "<player> <rank>",
+       description = "Set a player's rank",
+       privs = {privs = true},
+       func = function(name, param)
+               local target = param:split(" ")[1] or ""
+               local rank = param:split(" ")[2] or ""
+               return ranks.set(target, rank)
+       end,
+})
+
+local function get_privs_setting(setting, tbl)
+       local privs = minetest.string_to_privs(minetest.settings:get_string(setting))
+       if tbl then
+               for k, v in pairs(tbl) do
+                       privs[k] = v
+               end
+       end
+       return privs 
+end
+
+minetest.register_on_mods_loaded(function()
+       local all_privs = minetest.registered_privileges
+       local default_privs = get_privs_setting("default_privs")
+       local moderator_privs = get_privs_setting("moderator_privs", default_privs)
+       local vip_privs = get_privs_setting("vip_privs", default_privs)
+       local mvp_privs = get_privs_setting("mvp_privs", vip_privs)
+       
+
+       ranks.defs = {
+               developer = {
+                       tag = "[Developer]",
+                       color = "900A00",
+                       description = "The Developer rank is for the admins who maintain the server software.",
+                       privs = all_privs,
+               },
+               admin = {
+                       tag = "[Admin]",
+                       color = "FF2D8D",
+                       description = "The Admin rank is for people with ssh access to the server, they have all privileges. They are members of the Elidragon group.",
+                       privs = all_privs,
+               },
+               moderator = {
+                       tag = "[Moderator]",
+                       color = "006BFF",
+                       description = "People who moderate the server.",
+                       privs = moderator_privs,
+               },
+               contributor = {
+                       tag = "[Contributor]",
+                       color = "9D00FF",
+                       description = "The Contributor rank is for people that contribute to the server software. It has the same privs as the MVP rank.",
+                       privs = mvp_privs,
+               },
+               builder = {
+                       tag = "[Builder]",
+                       color = "FF9C00",
+                       description = "The Builder rank is for people that have helped constructing the buildings in the lobby etc. It has the same privs as the MVP rank.",
+                       privs = mvp_privs,
+               },
+               mvp = {
+                       tag = "[MVP]",
+                       color = "0CDCD8",
+                       description = "The MVP rank can be purchased in out store (upcoming). It is purely cosmetic.",
+                       privs = mvp_privs,
+               },
+               vip = {
+                       tag = "[VIP]",
+                       color = "2BEC37",
+                       description = "The VIP rank can be purchased in out store (upcoming). It is purely cosmetic.",
+                       privs = vip_privs,
+               },
+               player = {
+                       tag = "",
+                       color = "FFFFFF",
+                       description = "This is the rank for normal players.",
+                       privs = default_privs,
+               },
+               console = {
+                       tag = "[Console] ",
+                       color = "000000",
+                       description = "This is an offline rank for the console.",
+               },
+               offline = {
+                       tag = "[Offline] ",
+                       color = "969696",
+                       description = "This is the default offline rank.",
+               },
+               system = {
+                       tag = "[System] ",
+                       color = "505050",
+                       description = "This is the rank for the rpc player, which is a bot.",
+                       privs = {},
+               },
+       }
+end)
diff --git a/mods/elidragon_ranks/mod.conf b/mods/elidragon_ranks/mod.conf
new file mode 100644 (file)
index 0000000..9b76dca
--- /dev/null
@@ -0,0 +1,4 @@
+name = elidragon_ranks
+author = Fleckenstein
+description = Rank system for Elidragon v2
+depends = elidragon, elidragon_playerdb
index 4c38c1c1dca285a37582f475174500d6e6ddcef0..751ad5a69dca7ce2ec395f6a1640821a8f79910b 100644 (file)
@@ -20,7 +20,10 @@ mcl_superflat_classic = true
 fixed_map_seed = 0
 static_spawnpoint = 0, 10, 0
 
-default_privs = interact, shout
+default_privs = interact, shout, fly, fast
+vip_privs =
+mvp_privs =
+moderator_privs = kick, ban, teleport, bring, worldedit, settime, noclip, give
 
 profiler.load = true
 instrument.profiler = true
index d1c4aa36f4b0ce540e67b4f6b810c32de03f1b6d..791ebf65232b9286a08146645bbca070947bccd4 100644 (file)
@@ -15,6 +15,7 @@ load_mod_elidragon_playerdb = true
 load_mod_elidragon_plot = true
 load_mod_elidragon_plotmg = true
 load_mod_elidragon_random = false
+load_mod_elidragon_ranks = true
 load_mod_elidragon_request = true
 load_mod_elidragon_schems = true
 load_mod_elidragon_skyblock = false
index 64b3454584a100d7e42f33499d40345f4d15d13f..c71a9a07052bc416d5430ced48cfb84186f356c8 100644 (file)
@@ -21,6 +21,9 @@ fixed_map_seed = 0
 static_spawnpoint = 0, 0, 0
 
 default_privs = interact, shout
+vip_privs = fast
+mvp_privs = fly
+moderator_privs = kick, ban, teleport, bring, worldedit, settime, noclip, give, fly, fast
 
 profiler.load = true
 instrument.profiler = true
index 00027abf9a1e458022bba2f04a80c75e473a0ba8..957910e4a38abf5943daf092126fe6896a1ff596 100644 (file)
@@ -15,6 +15,7 @@ load_mod_elidragon_playerdb = true
 load_mod_elidragon_plot = false
 load_mod_elidragon_plotmg = false
 load_mod_elidragon_random = false
+load_mod_elidragon_ranks = true
 load_mod_elidragon_request = false
 load_mod_elidragon_schems = false
 load_mod_elidragon_skyblock = false
index e8835e686f1ee7754d1f167904de4ad5acd22414..577a7305c2a3dcace2b72832e5dfca502149e964 100644 (file)
@@ -21,6 +21,9 @@ fixed_map_seed = 0
 static_spawnpoint = 0, -10000, 0
 
 default_privs = interact, shout
+vip_privs =
+mvp_privs =
+moderator_privs = kick, ban, teleport, bring, worldedit, settime, noclip, give, fly, fast
 
 profiler.load = true
 instrument.profiler = true
index cfd77d71a63822010a71bf5c04dffbc3c19da664..1677631704ed1372a5fde0e748aec2da6ec99365 100644 (file)
@@ -15,6 +15,7 @@ load_mod_elidragon_playerdb = true
 load_mod_elidragon_plot = true
 load_mod_elidragon_plotmg = true
 load_mod_elidragon_random = false
+load_mod_elidragon_ranks = true
 load_mod_elidragon_request = true
 load_mod_elidragon_schems = false
 load_mod_elidragon_skyblock = true
index d8b146d2eedb6470c66aa9a8dae34ed5f2cc9297..86eaf9016b5b99b010e785d48d2e5aa1d61e9a98 100644 (file)
@@ -21,6 +21,9 @@ fixed_map_seed = 0
 static_spawnpoint = 200, 10, 0
 
 default_privs = interact, shout
+vip_privs =
+mvp_privs =
+moderator_privs = kick, ban, teleport, bring, worldedit, settime, noclip, give, fly, fast
 
 profiler.load = true
 instrument.profiler = true
index 9de9a2bf355372f8a3f8c10376fb7af7635c0741..24efdc28681e04c5beaf93263703016732b3033f 100644 (file)
@@ -15,6 +15,7 @@ load_mod_elidragon_playerdb = true
 load_mod_elidragon_plot = false
 load_mod_elidragon_plotmg = false
 load_mod_elidragon_random = false
+load_mod_elidragon_ranks = true
 load_mod_elidragon_request = true
 load_mod_elidragon_schems = false
 load_mod_elidragon_skyblock = false