]> git.lizzy.rs Git - elidragon_v2.git/commitdiff
Improvements and fixes to the rank system
authorElias Fleckenstein <eliasfleckenstein@web.de>
Sun, 28 Feb 2021 15:05:31 +0000 (16:05 +0100)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Sun, 28 Feb 2021 15:05:31 +0000 (16:05 +0100)
mods/elidragon_playerdb/init.lua
mods/elidragon_ranks/init.lua
worlds/creative/minetest.conf
worlds/lobby/minetest.conf
worlds/skyblock/minetest.conf
worlds/survival/minetest.conf

index 6f53276b3f01c886a3ab707e6b57ed3cb3665d08..66e98ebcb10e22d0577b7c716641f95cd7a3eba1 100644 (file)
@@ -8,14 +8,14 @@ local playerdb = {
 local players = playerdb.players
 local env = assert(minetest.request_insecure_environment())
 
-minetest.register_on_joinplayer(function (player)
+table.insert(minetest.registered_on_joinplayers, 1, function(player)
        local name = player:get_player_name()
        if name ~= "rpc" then
                players[name] = db(name, playerdb.initial_data, "players", env)
        end
 end)
 
-minetest.register_on_leaveplayer(function (player)
+minetest.register_on_leaveplayer(function(player)
        local name = player:get_player_name()
        if name ~= "rpc" then
                players[name]:close()
index ee6a1b1776ae925285ee658752823a76afdb2a9e..a5831bdae3542ea8723457b2fbe0ea228cd9eaad 100644 (file)
@@ -3,34 +3,35 @@ local playerdb = elidragon.playerdb
 local ranks = {}
 
 local players = playerdb.players
-local admin = minetest.settings:get_string("name")
+local admin = minetest.settings:get("name")
+local server = minetest.settings:get("server_name")
 playerdb.initial_data.rank = "player"
 
 function ranks.get(name)
+       local rank
        if name == "rpc" then
-               return "system"
-       end
-       local playerdata = players[name]
-       if not playerdata then
-               return name == admin and "console" or "offline"
+               rank = "system"
+       else
+               local playerdata = players[name]
+               if playerdata then
+                       rank = playerdata.rank
+               else
+                       rank = name == admin and "console" or "offline"
+               end
        end
-       return playerdata.rank
-end
-
-function ranks.get_def(name)
-       return ranks.defs[ranks.get(name)]
+       return rank, ranks.defs[rank]
 end
 
 function ranks.get_player_name(name, brackets)
-       local def = ranks.get_def(name)
+       local _, def = ranks.get(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)})
+       local rank, def = ranks.get(name)
+       player:set_nametag_attributes({text = rank == "system" and "" or ranks.get_player_name(name)})
        minetest.set_player_privs(name, assert(def.privs))
 end
 
@@ -38,7 +39,8 @@ 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
+       local rank_def = ranks.defs[rank]
+       if not rank_def or rank_def.can_assign == false then
                return false, "Invalid rank."
        end
        local player = minetest.get_player_by_name(name)
@@ -51,14 +53,19 @@ function ranks.set(name, rank)
        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_joinplayer(ranks.reload)
 
-minetest.register_on_leaveplayer(function(player)
-       minetest.chat_send_all(ranks.get_player_name(player) .. " has left the Server.")
-end)
+function minetest.send_join_message(name)
+       if name ~= "rpc" then
+               minetest.chat_send_all("*** " .. ranks.get_player_name(name) .. " joined " .. server .. ".")
+       end
+end
+
+function minetest.send_leave_message(name, timed_out)
+       if name ~= "rpc" then
+               minetest.chat_send_all("*** " .. ranks.get_player_name(name) .. " left " .. server .. (timed_out and " (timed out)" or "") .. ".")
+       end
+end
 
 minetest.register_on_chat_message(function(name, message)
        if not minetest.check_player_privs(name, {shout = true}) then
@@ -80,13 +87,13 @@ minetest.register_chatcommand("rank", {
 })
 
 local function get_privs_setting(setting, tbl)
-       local privs = minetest.string_to_privs(minetest.settings:get_string(setting))
+       local privs = minetest.string_to_privs(minetest.settings:get(setting))
        if tbl then
                for k, v in pairs(tbl) do
                        privs[k] = v
                end
        end
-       return privs 
+       return privs
 end
 
 minetest.register_on_mods_loaded(function()
@@ -95,7 +102,7 @@ minetest.register_on_mods_loaded(function()
        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 = {
@@ -147,20 +154,23 @@ minetest.register_on_mods_loaded(function()
                        privs = default_privs,
                },
                console = {
-                       tag = "[Console] ",
+                       tag = "[Console]",
                        color = "000000",
                        description = "This is an offline rank for the console.",
+                       can_assign = false,
                },
                offline = {
-                       tag = "[Offline] ",
+                       tag = "[Offline]",
                        color = "969696",
                        description = "This is the default offline rank.",
+                       can_assign = false,
                },
                system = {
-                       tag = "[System] ",
+                       tag = "[System]",
                        color = "505050",
                        description = "This is the rank for the rpc player, which is a bot.",
                        privs = {},
+                       can_assign = false,
                },
        }
 end)
index 751ad5a69dca7ce2ec395f6a1640821a8f79910b..239b9ffa83a41623c617ef712070198c80ed332b 100644 (file)
@@ -4,6 +4,7 @@ bind_address = localhost
 port = 30032
 max_users = 100
 debug_log_size_max = 1
+server_name = Creative
 
 creative_mode = true
 enable_damage = false
index c71a9a07052bc416d5430ced48cfb84186f356c8..d0d66e3533966210f8b3b76528cb551079400a59 100644 (file)
@@ -4,6 +4,7 @@ bind_address = localhost
 port = 30030
 max_users = 100
 debug_log_size_max = 1
+server_name = the Lobby
 
 creative_mode = false
 enable_damage = true
index 577a7305c2a3dcace2b72832e5dfca502149e964..37564a53f0125b600bcc1419007d70802b8cfd8b 100644 (file)
@@ -4,6 +4,7 @@ bind_address = localhost
 port = 30033
 max_users = 100
 debug_log_size_max = 1
+server_name = Skyblock
 
 creative_mode = false
 enable_damage = true
index 86eaf9016b5b99b010e785d48d2e5aa1d61e9a98..b6da095c23e61a848ee32b53f67eab2b0b5a0a75 100644 (file)
@@ -4,6 +4,7 @@ bind_address = localhost
 port = 30031
 max_users = 100
 debug_log_size_max = 1
+server_name = Survival
 
 creative_mode = false
 enable_damage = true