elidragon.savedata.ranks = elidragon.savedata.ranks or elidragon.load_legacy_ranks() or {}
function elidragon.get_rank(player)
- local rank = player:get_meta():get("elidragon:rank") or "player"
+ local rank = elidragon.savedata.ranks[player:get_player_name()]
+ if not rank or rank == "" then rank = "player" end
return elidragon.get_rank_by_name(rank)
end
end
function elidragon.update_nametag(player)
- player:set_nametag_attributes({color = elidragon.get_rank(player).color})
+ if player then
+ player:set_nametag_attributes({color = elidragon.get_rank(player).color})
+ end
end
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
local rank = elidragon.savedata.ranks[name]
- if rank then
- player:get_meta():set_string("elidragon:rank", rank)
- elidragon.savedata.ranks[name] = nil
- end
minetest.chat_send_all(elidragon.get_player_name(player, true) .. "has joined the Server.")
if irc and irc.connected and irc.config.send_join_part then
irc.say(elidragon.get_player_name(player) .. "has joined the Server.")
minetest.register_on_chat_message(function(name, message)
local player = minetest.get_player_by_name(name)
- if not player then return end
+ if not player or not minetest.check_player_privs(name, {shout = true}) then return end
minetest.chat_send_all(elidragon.get_player_name(player, true, {"<", ">"}) .. message)
if irc and irc.connected and irc.joined_players[name] then
irc.say(elidragon.get_player_name(player, false, {"<", ">"}) .. message)
local rank_ref = elidragon.get_rank_by_name(rank)
if not rank_ref then
return false, "Invalid Rank: " .. rank
- elseif not target_ref then
- return false, "Player not online"
else
- target_ref:get_meta():set_string("elidragon:rank", rank)
+ elidragon.savedata.ranks[target] = rank
local privs = {}
for _, r in pairs(elidragon.ranks) do
for k, v in pairs(r.privs) do
end
minetest.set_player_privs(target, privs)
minetest.chat_send_all(target .. " is now a " .. minetest.colorize(rank_ref.color, rank_ref.name))
- elidragon.update_nametag(target_ref)
+ if target_ref then
+ elidragon.update_nametag(target_ref)
+ end
end
end,
})
+
+-- Migrate old ranks
+minetest.register_on_joinplayer(function(player)
+ local name = player:get_player_name()
+ local rank = player:get_meta():get_string("elidragon:rank")
+ if rank and rank ~= "" then
+ elidragon.savedata.ranks[name] = rank
+ player:get_meta():set_string("elidragon:rank", "")
+ end
+end)