]> git.lizzy.rs Git - elidragon_v2.git/blob - mods/elidragon_ranks/init.lua
ee6a1b1776ae925285ee658752823a76afdb2a9e
[elidragon_v2.git] / mods / elidragon_ranks / init.lua
1 local playerdb = elidragon.playerdb
2
3 local ranks = {}
4
5 local players = playerdb.players
6 local admin = minetest.settings:get_string("name")
7 playerdb.initial_data.rank = "player"
8
9 function ranks.get(name)
10         if name == "rpc" then
11                 return "system"
12         end
13         local playerdata = players[name]
14         if not playerdata then
15                 return name == admin and "console" or "offline"
16         end
17         return playerdata.rank
18 end
19
20 function ranks.get_def(name)
21         return ranks.defs[ranks.get(name)]
22 end
23
24 function ranks.get_player_name(name, brackets)
25         local def = ranks.get_def(name)
26         brackets = brackets or {"", ""}
27         return minetest.colorize("#" .. def.color, def.tag) .. brackets[1] .. name .. brackets[2]
28 end
29
30 function ranks.reload(player)
31         local name = player:get_player_name()
32         local def = ranks.get_def(name)
33         player:set_nametag_attributes({text = ranks.get_player_name(name)})
34         minetest.set_player_privs(name, assert(def.privs))
35 end
36
37 function ranks.set(name, rank)
38         if name == "rpc" then
39                 return false, "The rank of the rpc player cannot be changed."
40         end
41         if not ranks.defs[rank] then
42                 return false, "Invalid rank."
43         end
44         local player = minetest.get_player_by_name(name)
45         if not player then
46                 return false, name .. " is not online."
47         end
48         local playerdata = players[name]
49         playerdata.rank = rank
50         playerdata:save()
51         ranks.reload(player)
52 end
53
54 minetest.register_on_joinplayer(function(player)
55         minetest.chat_send_all(ranks.get_player_name(player) .. " has joined the Server.")
56         ranks.reload(player)
57 end)
58
59 minetest.register_on_leaveplayer(function(player)
60         minetest.chat_send_all(ranks.get_player_name(player) .. " has left the Server.")
61 end)
62
63 minetest.register_on_chat_message(function(name, message)
64         if not minetest.check_player_privs(name, {shout = true}) then
65                 return
66         end
67         minetest.chat_send_all(ranks.get_player_name(name, {"<", ">"}) .. " " .. message)
68         return true
69 end)
70
71 minetest.register_chatcommand("rank", {
72         params = "<player> <rank>",
73         description = "Set a player's rank",
74         privs = {privs = true},
75         func = function(name, param)
76                 local target = param:split(" ")[1] or ""
77                 local rank = param:split(" ")[2] or ""
78                 return ranks.set(target, rank)
79         end,
80 })
81
82 local function get_privs_setting(setting, tbl)
83         local privs = minetest.string_to_privs(minetest.settings:get_string(setting))
84         if tbl then
85                 for k, v in pairs(tbl) do
86                         privs[k] = v
87                 end
88         end
89         return privs 
90 end
91
92 minetest.register_on_mods_loaded(function()
93         local all_privs = minetest.registered_privileges
94         local default_privs = get_privs_setting("default_privs")
95         local moderator_privs = get_privs_setting("moderator_privs", default_privs)
96         local vip_privs = get_privs_setting("vip_privs", default_privs)
97         local mvp_privs = get_privs_setting("mvp_privs", vip_privs)
98         
99
100         ranks.defs = {
101                 developer = {
102                         tag = "[Developer]",
103                         color = "900A00",
104                         description = "The Developer rank is for the admins who maintain the server software.",
105                         privs = all_privs,
106                 },
107                 admin = {
108                         tag = "[Admin]",
109                         color = "FF2D8D",
110                         description = "The Admin rank is for people with ssh access to the server, they have all privileges. They are members of the Elidragon group.",
111                         privs = all_privs,
112                 },
113                 moderator = {
114                         tag = "[Moderator]",
115                         color = "006BFF",
116                         description = "People who moderate the server.",
117                         privs = moderator_privs,
118                 },
119                 contributor = {
120                         tag = "[Contributor]",
121                         color = "9D00FF",
122                         description = "The Contributor rank is for people that contribute to the server software. It has the same privs as the MVP rank.",
123                         privs = mvp_privs,
124                 },
125                 builder = {
126                         tag = "[Builder]",
127                         color = "FF9C00",
128                         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.",
129                         privs = mvp_privs,
130                 },
131                 mvp = {
132                         tag = "[MVP]",
133                         color = "0CDCD8",
134                         description = "The MVP rank can be purchased in out store (upcoming). It is purely cosmetic.",
135                         privs = mvp_privs,
136                 },
137                 vip = {
138                         tag = "[VIP]",
139                         color = "2BEC37",
140                         description = "The VIP rank can be purchased in out store (upcoming). It is purely cosmetic.",
141                         privs = vip_privs,
142                 },
143                 player = {
144                         tag = "",
145                         color = "FFFFFF",
146                         description = "This is the rank for normal players.",
147                         privs = default_privs,
148                 },
149                 console = {
150                         tag = "[Console] ",
151                         color = "000000",
152                         description = "This is an offline rank for the console.",
153                 },
154                 offline = {
155                         tag = "[Offline] ",
156                         color = "969696",
157                         description = "This is the default offline rank.",
158                 },
159                 system = {
160                         tag = "[System] ",
161                         color = "505050",
162                         description = "This is the rank for the rpc player, which is a bot.",
163                         privs = {},
164                 },
165         }
166 end)