From: Elias Fleckenstein Date: Sun, 28 Feb 2021 15:05:31 +0000 (+0100) Subject: Improvements and fixes to the rank system X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=0d7391ffa13dbf6bc2654c953500d311f803610b;p=elidragon_v2.git Improvements and fixes to the rank system --- diff --git a/mods/elidragon_playerdb/init.lua b/mods/elidragon_playerdb/init.lua index 6f53276..66e98eb 100644 --- a/mods/elidragon_playerdb/init.lua +++ b/mods/elidragon_playerdb/init.lua @@ -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() diff --git a/mods/elidragon_ranks/init.lua b/mods/elidragon_ranks/init.lua index ee6a1b1..a5831bd 100644 --- a/mods/elidragon_ranks/init.lua +++ b/mods/elidragon_ranks/init.lua @@ -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) diff --git a/worlds/creative/minetest.conf b/worlds/creative/minetest.conf index 751ad5a..239b9ff 100644 --- a/worlds/creative/minetest.conf +++ b/worlds/creative/minetest.conf @@ -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 diff --git a/worlds/lobby/minetest.conf b/worlds/lobby/minetest.conf index c71a9a0..d0d66e3 100644 --- a/worlds/lobby/minetest.conf +++ b/worlds/lobby/minetest.conf @@ -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 diff --git a/worlds/skyblock/minetest.conf b/worlds/skyblock/minetest.conf index 577a730..37564a5 100644 --- a/worlds/skyblock/minetest.conf +++ b/worlds/skyblock/minetest.conf @@ -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 diff --git a/worlds/survival/minetest.conf b/worlds/survival/minetest.conf index 86eaf90..b6da095 100644 --- a/worlds/survival/minetest.conf +++ b/worlds/survival/minetest.conf @@ -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