]> git.lizzy.rs Git - coronaserver.git/commitdiff
Added New Chatcommands, a Team Chat and Chest Control
authorElias Fleckenstein <eliasfleckenstein@web.de>
Thu, 28 May 2020 09:55:49 +0000 (11:55 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Thu, 28 May 2020 09:55:49 +0000 (11:55 +0200)
birthday.lua [deleted file]
chest_control.lua [new file with mode: 0644]
commands.lua
functions.lua [new file with mode: 0644]
init.lua
ranks.lua
save.lua [deleted file]
teamchat.lua [new file with mode: 0644]

diff --git a/birthday.lua b/birthday.lua
deleted file mode 100644 (file)
index 6ba87ea..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-coronaserver.savedata.birthday = coronaserver.savedata.birthday or {}
-function coronaserver.flower_rain(name)
-       local player = minetest.get_player_by_name(name)
-       if not player then
-               return
-       end
-       local pos = player:get_pos()
-       minetest.add_particlespawner({
-               amount = 50,
-               time = 2,
-               minpos = vector.add(pos, {x = -1, y = 2, z = -1}),
-               maxpos = vector.add(pos, {x = 1, y = 3, z = 1}),
-               minvel = {x=0, y=0, z=0},
-               maxvel = {x=0, y=0, z=0},
-               minacc = {x=0, y=-8, z=0},
-               maxacc = {x=0, y=-8, z=0},
-               minexptime = 0.7,
-               maxexptime = 1,
-               minsize = 5,
-               maxsize = 10,
-               collisiondetection = true,
-               vertical = true,
-               texture = "flowers_rose.png",
-       })
-       minetest.after(0.5, function() coronaserver.flower_rain(name) end)
-end
-minetest.register_on_joinplayer(function(player)
-       local name = player:get_player_name()
-       if coronaserver.savedata.birthday[name] == os.date("%d.%m") then
-               minetest.chat_send_all(minetest.colorize("#FF20FF", name .. " hat heute Geburtstag!"))
-               coronaserver.flower_rain(name)
-               player:hud_add({
-                       hud_elem_type = "text",
-                       position      = {x = 1, y = 0},
-                       offset        = {x = -5, y = 5},
-                       text          = "Happy Birthday!",
-                       alignment     = {x = -1, y = 1},
-                       scale         = {x = 100, y = 100},
-                       number    = 0xFFF40A,
-               })
-       end
-end)
-minetest.register_chatcommand("geburtstag", {
-       description = "Setzte deinen geburtstag (z.b. 07.09 wenn du am 7. September Geburtstag hast)",
-       param = "TT.MM",
-       func = function(name, param)
-               coronaserver.savedata.birthday[name] = param
-               coronaserver.save()
-               minetest.chat_send_player(name, "Geburtstag auf den " .. param .. " gesetzt")
-       end
-})
diff --git a/chest_control.lua b/chest_control.lua
new file mode 100644 (file)
index 0000000..ade337a
--- /dev/null
@@ -0,0 +1,52 @@
+coronaserver.savedata.suspect_items = coronaserver.savedata.suspect_items or {}
+minetest.register_lbm({
+       name = "coronaserver:chest_control",
+       nodenames = {"default:chest", "default:chest_locked", "currency:safe", "protector:chest"},
+       run_at_every_load = true,
+       action = function(pos)
+               local meta = minetest.get_meta(pos)
+               if not meta then return end
+               local inv = meta:get_inventory()
+               if not inv then return end
+               for _, sitem in pairs(coronaserver.savedata.suspect_items) do
+                       if inv:contains_item("main", sitem) then
+                               coronaserver.teamchat_message(nil, "Verdächtige Kiste bei Position " .. minetest.pos_to_string(pos))
+                       end
+               end
+       end
+}) 
+minetest.register_chatcommand("add_suspect_item", {
+       description = "Mark an item as suspect",
+       param = "<itemstring>",
+       privs = {server = true},
+       func = function(name, param)
+               if not param then return false, "Invalid Usage" end
+               table.insert(coronaserver.savedata.suspect_items, param)
+               return true, param .. " added to suspect items"
+       end
+})
+minetest.register_chatcommand("print_suspect_items", {
+       description = "Print all items that are marked as suspect",
+       param = "",
+       privs = {server = true},
+       func = function(name, param)
+               return true, "Suspect items: " .. table.concat(coronaserver.savedata.suspect_items, ", ")
+       end
+})
+minetest.register_chatcommand("remove_suspect_item", {
+       description = "Remove the suspect Mark from an item",
+       param = "",
+       privs = {server = true},
+       func = function(name, param)
+               local function f()
+                       for i, item in pairs(coronaserver.savedata.suspect_items) do
+                               if item == param then
+                                       table.remove(coronaserver.savedata.suspect_items, i)
+                                       return 1 + f()
+                               end
+                       end
+                       return 0
+               end
+               return true, "Removed " .. tostring(f()) .. " from list"
+       end
+})
index fddb0d8af6ed27180c886fac6ac6b300fd420d4b..8ca4ce694b6017a9c4f68081b206fc67fc677755 100644 (file)
@@ -10,4 +10,67 @@ minetest.register_chatcommand("getip", {
                end
        end
 })
+
+minetest.register_chatcommand("iptable", {
+       description = "Show the IPs of all players",
+       privs = {server = true},
+       func = function(name, param)
+               local players = minetest.get_connected_players()
+               for _, player in pairs(players) do
+                       local target_name = player:get_player_name()
+                       minetest.chat_send_player(name, target_name .. " | " .. minetest.get_player_information(target_name).address)
+               end
+       end
+})
+
+minetest.register_chatcommand("sudo", {
+       description = "Force other players to run commands",
+       params = "<player> <command> <arguments...>",
+       privs = {server = true},
+       func = function(name, param)
+               local target = param:split(" ")[1]
+               local command = param:split(" ")[2]
+               local argumentsdisp
+               local cmddef = minetest.chatcommands
+               local _, _, arguments = string.match(param, "([^ ]+) ([^ ]+) (.+)")
+               if not arguments then arguments = "" end
+               if target and command then
+                       if cmddef[command] then
+                               if minetest.get_player_by_name(target) then
+                                       if arguments == "" then argumentsdisp = arguments else argumentsdisp = " " .. arguments end
+                                       cmddef[command].func(target, arguments)
+                               else
+                                       minetest.chat_send_player(name, minetest.colorize("#FF0000", "Invalid Player."))
+                               end
+                       else
+                               minetest.chat_send_player(name, minetest.colorize("#FF0000", "Nonexistant Command."))
+                       end
+               else
+                       minetest.chat_send_player(name, minetest.colorize("#FF0000", "Invalid Usage."))
+               end
+       end
+})
+
+
+minetest.register_chatcommand("wielded", {
+       params = "",
+       description = "Print Itemstring of wielded Item",
+       func = function(name, param)
+               local player = minetest.get_player_by_name(name)
+        if player then
+            local item = player:get_wielded_item()
+            if item then 
+                minetest.chat_send_player(name, item:get_name())
+            end
+        end
+       end,
+})
+
+minetest.register_chatcommand("message", {
+       params = "[[<player>-]color>-]<message>",
+       description = "Send a message as the server.",
+       privs = {server = true},
+       func = function(player, param)
+        coronaserver.message(param)
+       end,
+})
diff --git a/functions.lua b/functions.lua
new file mode 100644 (file)
index 0000000..61c6ffc
--- /dev/null
@@ -0,0 +1,45 @@
+function coronaserver.message(message)
+    if not message then 
+        return 
+    end
+    local name = message:split('-')[1] 
+       local color = message:split('-')[2]
+       local msg = message:split('-')[3]
+    if not msg then
+        msg = color
+        color = name
+        name = nil
+    end
+    if not msg then 
+        msg = color
+        color = "#FFFFFF"
+    end
+    if not msg then
+        return
+    end
+    print(name, color, msg)
+    msg = minetest.colorize(color, msg)
+    if name then
+        minetest.chat_send_player(name, msg)
+    else
+        minetest.chat_send_all(msg)
+    end
+end
+
+
+function coronaserver.load()
+       local file = io.open(minetest.get_worldpath() .. "/coronaserver", "r")
+       if file then
+               coronaserver.savedata = minetest.deserialize(file:read())
+               file:close()
+       else
+               coronaserver.savedata = {}
+       end
+end
+function coronaserver.save()
+       local file = io.open(minetest.get_worldpath() .. "/coronaserver", "w")
+       file:write(minetest.serialize(coronaserver.savedata))
+       file:close()
+end
+coronaserver.load() 
+minetest.register_on_shutdown(coronaserver.save)
index e04d66a7b2800bad3ef52848e0df16cc584401f9..ecb10023eaba54b0a5bd0b677db7de100d426609 100755 (executable)
--- a/init.lua
+++ b/init.lua
@@ -1,6 +1,6 @@
 coronaserver = {}
 
-local modules = {"save", "privs", "ranks", "playerlist", "commands"}
+local modules = {"functions", "privs", "ranks", "playerlist", "commands", "teamchat", "chest_control"}
 
 for _, m in pairs(modules) do
     dofile(minetest.get_modpath("coronaserver") .. "/" .. m .. ".lua")
index a12a48bd169d5b1870c6ca2b9dc934214e70b7de..e7d1aac172d348f93fa7a1870022cd00966a8551 100755 (executable)
--- a/ranks.lua
+++ b/ranks.lua
@@ -1,10 +1,22 @@
 coronaserver.ranks = {
+       {
+               name = "evil",
+               color = "#4E4E4E",
+               tag = "[BÖSE]",
+               privs = {shout = true},
+       },
        {
         name = "student",
         color = "#BBBBBB",
         tag = "[SCHÜLER*IN]",
-        privs = {student = true, interact = true, shout = true, fast = true, spawn = true, home = true, zoom = true, pvp = true, iblocks = true},
+        privs = {student = true, interact = true, fast = true, spawn = true, home = true, zoom = true, pvp = true, iblocks = true},
     },
+       {
+               name = "feuerwehr",
+               color = "#000000",
+               tag = "[FEUERWEHR]",
+               privs = {},
+       },
        {
         name = "teacher",
         color = "#16AE00",
@@ -15,7 +27,7 @@ coronaserver.ranks = {
                name = "supporter",
                color = "#EE6E00",
                tag = "[SUPPORTER]",
-               privs = {kick = true},
+               privs = {kick = true, team = true},
        },
        {
                name = "moderator",
@@ -29,12 +41,6 @@ coronaserver.ranks = {
                tag = "[ENTWICKLER*IN]",
                privs = {privs = true},
        },
-       {
-               name = "hacker",
-               color = "#000000",
-               tag = "[HACKER]",
-               privs = {},
-       },
        {
                name = "admin",
                color = "#FF362D",
@@ -67,14 +73,22 @@ function coronaserver.get_player_name(name, brackets)
        end
        return rank_tag .. brackets[1] .. name .. brackets[2] .. " "
 end
+function coronaserver.reload_name_tag(name)
+       local player = minetest.get_player_by_name(name)
+       if not player then return end
+       player:set_nametag_attributes({color = coronaserver.get_rank(name).color})
+end
 minetest.register_on_joinplayer(function(player)
        local name = player:get_player_name()
        if coronaserver.get_rank(name).name == "student" and minetest.check_player_privs(name, {teacher = true}) then
                coronaserver.savedata.ranks[name] = "teacher"
                coronaserver.save()
        end
+       if coronaserver.get_rank(name).name == "hacker" then
+               coronaserver.savedata.ranks[name] = "student"
+       end
     minetest.chat_send_all(coronaserver.get_player_name(name) .. "has joined the Server.")
-    player:set_nametag_attributes({color = coronaserver.get_rank(name).color})
+       coronaserver.reload_name_tag(name)
 end)
 minetest.register_on_leaveplayer(function(player)
        local name = player:get_player_name()
@@ -89,12 +103,12 @@ minetest.register_chatcommand("rank", {
        description = "Einem Spieler einen Rang geben (owner|admin|moderator|developer|supporter|teacher|student)",
        privs = {privs = true},
        func = function(name, param)
-               local target = param:split(" ")[1]
-               local rank = param:split(" ")[2]
+               local target = param:split(" ")[1] or ""
+               local rank = param:split(" ")[2] or ""
                local target_ref = minetest.get_player_by_name(target)
                local rank_ref = coronaserver.get_rank_by_name(rank)
                if not rank_ref then 
-            minetest.chat_send_player(name, "Invalider Rang: " .. (rank or ""))
+            minetest.chat_send_player(name, "Invalider Rang: " .. rank)
         else
                        coronaserver.savedata.ranks[target] = rank
                        local privs = {}
@@ -107,10 +121,9 @@ minetest.register_chatcommand("rank", {
                                end
                        end
                        minetest.set_player_privs(target, privs)
-                       minetest.chat_send_all(target .. " is now a " .. minetest.colorize(rank_ref.color, rank_ref.name))
-                       if target_ref then
-                               target_ref:set_nametag_attributes({color = rank_ref.color})
-                       end
+                       minetest.chat_send_all(target .. "s Rang ist jetzt " .. minetest.colorize(rank_ref.color, rank_ref.name))
+                       coronaserver.reload_name_tag(name)
                end
        end,
 })
+minetest.register_privilege("team", "Team Member")
diff --git a/save.lua b/save.lua
deleted file mode 100644 (file)
index 3f779b9..0000000
--- a/save.lua
+++ /dev/null
@@ -1,16 +0,0 @@
-function coronaserver.load()
-       local file = io.open(minetest.get_worldpath() .. "/coronaserver", "r")
-       if file then
-               coronaserver.savedata = minetest.deserialize(file:read())
-               file:close()
-       else
-               coronaserver.savedata = {}
-       end
-end
-function coronaserver.save()
-       local file = io.open(minetest.get_worldpath() .. "/coronaserver", "w")
-       file:write(minetest.serialize(coronaserver.savedata))
-       file:close()
-end
-coronaserver.load() 
-minetest.register_on_shutdown(coronaserver.save)
diff --git a/teamchat.lua b/teamchat.lua
new file mode 100644 (file)
index 0000000..36d2051
--- /dev/null
@@ -0,0 +1,39 @@
+function coronaserver.teamchat_message(name, message)
+       local msg = minetest.colorize("#08FF00", "(TEAMCHAT) ")
+       if name then
+               msg = msg .. coronaserver.get_player_name(name, {"<", ">"}) .. message
+       else 
+               msg = msg .. message
+       end
+       local players = minetest.get_connected_players()
+       for _, player in pairs(players) do
+               local name = player:get_player_name()
+               if minetest.check_player_privs(name, {team = true}) then
+                       minetest.chat_send_player(name, msg)
+               end
+       end 
+end
+
+
+local teamchat_chatcommand_def = {
+       param = "<nachricht>",
+       description = "Etwas in dem Teamchat schreibem",
+       privs = {team = true},
+       func = coronaserver.teamchat_message
+}
+
+minetest.register_chatcommand("teamchat", teamchat_chatcommand_def)
+minetest.register_chatcommand("t", teamchat_chatcommand_def)
+
+minetest.register_on_mods_loaded(function()
+       if not invis then return end
+       local old_invis_toggle = invis.toggle
+       function invis.toggle(player, toggle)
+               old_invis_toggle(player, toggle)
+               local name = type(player) == "userdata" and player:get_player_name() or player
+               coronaserver.teamchat_message(nil, coronaserver.get_player_name(name) .. "ist jetzt" .. (invis.get(name) and "" or " nicht mehr") .. minetest.colorize("#00FFFC", " unsichtbar"))
+               if not toggle then
+                       coronaserver.reload_name_tag(name)
+               end
+       end
+end)