]> git.lizzy.rs Git - skycraft.git/blob - src/main/ranks.lua
New file Structure
[skycraft.git] / src / main / ranks.lua
1 skycraft.ranks = {
2         player = {
3         privs = {"interact", "shout", "skycraft"},
4         color = "#FFFFFF",
5         tag = "",
6     },
7     vip = {
8                 color = "#4FFF00",
9                 tag = "[VIP]",
10         },
11     mvp = {
12                 color = "#00B6B3",
13                 tag = "[MVP]",
14         },
15         creative = {
16                 privs = {"give", "fly", "fast"},
17                 color = "#FF9C00",
18                 tag = "[Creative]",
19         },
20         mod = {
21                 privs = {"kick", "ban", "noclip", "settime", "teleport", "bring", "protection_bypass", "worldedit"},
22                 color = "#006BFF",
23                 tag = "[Mod]",
24         },
25         dev = {
26                 privs = {"server", "privs"},
27                 color = "#9D00FF",
28                 tag = "[Dev]",
29         },
30         admin = {
31                 color = "#FF001C",
32                 tag = "[Admin]",
33         },
34         owner = {
35                 color = "#D90059",
36                 tag = "[Owner]",
37         },
38 }
39
40 skycraft.offline_ranks = {
41         offline = {
42                 color = "#969696",
43                 tag = "[Offline]",
44         },
45         console = {
46                 color = "#000000",
47                 tag = "[Console]",
48         },
49 }
50
51 function skycraft.get_rank(name)
52         local player = minetest.get_player_by_name(name)
53         if not player then
54                 return skycraft.offline_ranks[(minetest.settings:get("name") == name) and "console" or "offline"]
55         end
56         local rank = player:get_meta():get_string("rank")
57         rank = (rank == "") and "player" or rank
58         return skycraft.ranks[rank]
59 end
60
61 function skycraft.get_player_name(name, brackets)
62     local rank = skycraft.get_rank(name)
63     local rank_tag = minetest.colorize(rank.color, rank.tag)
64         if not brackets then 
65                 brackets = {"",""}
66         end
67         return rank_tag .. brackets[1] .. name .. brackets[2]
68 end
69
70 function skycraft.update_nametag(player)
71         player:set_nametag_attributes({color = skycraft.get_rank(player:get_player_name()).color})
72 end
73
74 minetest.register_on_leaveplayer(function(player)
75     minetest.chat_send_all(skycraft.get_player_name(player:get_player_name()) .. " left the Server")
76     skycraft.update_nametag(player)
77 end)
78
79 minetest.register_on_chat_message(function(name, message)
80     minetest.chat_send_all(skycraft.get_player_name(name, {"<", ">"}) .. " " .. message)
81     return true
82 end)
83
84 minetest.register_chatcommand("rank", {
85         params = "<player> <rank>",
86         description = "Set a player's rank (owner|admin|dev|mod|creative|mvp|vip|player)",
87         privs = {privs = true},
88         func = function(name, param)
89                 local target = param:split(" ")[1] or ""
90                 local target_ref = minetest.get_player_by_name(target)
91                 local rank = param:split(" ")[2] or ""
92                 local rank_ref = skycraft.ranks[rank]
93                 if not rank_ref then 
94                         return false, "Invalid Rank '" .. rank .. "'."
95                 elseif not target_ref then
96                         return false, "Player '" .. target .. "' is not online."
97         else
98                         local privs = {}
99                         for k, v in pairs(skycraft.ranks) do
100                                 for _, priv in pairs(v.privs or {}) do
101                                         privs[priv] = true
102                                 end
103                                 if k == rank then
104                                         break
105                                 end
106                         end
107                         target_ref:get_meta():set_string("rank", rank)
108                         minetest.set_player_privs(target, privs)
109                         skycraft.update_nametag(target_ref)
110                         return true, "The rank of '" .. target .. "' has been updated to '" .. rank .. "'." 
111                 end
112         end,
113 })