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