]> git.lizzy.rs Git - skycraft.git/blob - src/main/ranks.lua
011fe507fdd0f59cb1917285b1952daa41ba4751
[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_joinplayer(function(player)
75         skycraft.update_nametag(player)
76 end)
77
78 minetest.register_on_leaveplayer(function(player)
79     minetest.chat_send_all(skycraft.get_player_name(player:get_player_name()) .. " left the Server")
80     skycraft.update_nametag(player)
81 end)
82
83 minetest.register_on_chat_message(function(name, message)
84     minetest.chat_send_all(skycraft.get_player_name(name, {"<", ">"}) .. " " .. message)
85     return true
86 end)
87
88 minetest.register_chatcommand("rank", {
89         params = "<player> <rank>",
90         description = "Set a player's rank (owner|admin|dev|mod|creative|mvp|vip|player)",
91         privs = {privs = true},
92         func = function(name, param)
93                 local target = param:split(" ")[1] or ""
94                 local target_ref = minetest.get_player_by_name(target)
95                 local rank = param:split(" ")[2] or ""
96                 local rank_ref = skycraft.ranks[rank]
97                 if not rank_ref then 
98                         return false, "Invalid Rank '" .. rank .. "'."
99                 elseif not target_ref then
100                         return false, "Player '" .. target .. "' is not online."
101         else
102                         local privs = {}
103                         for k, v in pairs(skycraft.ranks) do
104                                 for _, priv in pairs(v.privs or {}) do
105                                         privs[priv] = true
106                                 end
107                                 if k == rank then
108                                         break
109                                 end
110                         end
111                         target_ref:get_meta():set_string("rank", rank)
112                         minetest.set_player_privs(target, privs)
113                         skycraft.update_nametag(target_ref)
114                         return true, "The rank of '" .. target .. "' has been updated to '" .. rank .. "'." 
115                 end
116         end,
117 })