]> git.lizzy.rs Git - elidragon.git/commitdiff
Unequip lava boots in movement protected zones
authorElias Fleckenstein <eliasfleckenstein@web.de>
Thu, 8 Jul 2021 18:53:59 +0000 (20:53 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Thu, 8 Jul 2021 18:53:59 +0000 (20:53 +0200)
tags.lua
warps.lua

index c4cc269dcab90ab9291dbf13a2df2fd8a83a14d8..384fee1ba64bd27da0f05f924354dd940ab05c33 100755 (executable)
--- a/tags.lua
+++ b/tags.lua
@@ -12,11 +12,11 @@ function elidragon.get_area_with_tag(name, tag)
        end
 end
 minetest.register_chatcommand("add_tag", {
-    description = "Add tag to area",
-    param = "<area> <tag> <param>",
-    privs = {server = true},
-    func = function(name, param)
-               if not param then 
+       description = "Add tag to area",
+       param = "<area> <tag> <param>",
+       privs = {server = true},
+       func = function(name, param)
+               if not param then
                        minetest.chat_send_player(name, "Invalid Usage")
                        return
                end
@@ -25,61 +25,86 @@ minetest.register_chatcommand("add_tag", {
                        tag = param:split(" ")[2],
                        param = param:split(" ")[3],
                }
-        if not area.name or not area.tag then
-            minetest.chat_send_player(name, "Invalid Usage")
-            return
-        end
-        if not area.param then
+               if not area.name or not area.tag then
+                       minetest.chat_send_player(name, "Invalid Usage")
+                       return
+               end
+               if not area.param then
                        area.param = ""
                end
-        elidragon.savedata.areas[#elidragon.savedata.areas + 1] = area
-        minetest.chat_send_player(name, "tag added. ")
-    end
+               elidragon.savedata.areas[#elidragon.savedata.areas + 1] = area
+               minetest.chat_send_player(name, "tag added. ")
+       end
 })
 minetest.register_chatcommand("remove_tag", {
-    description = "Remove tag from area",
-    param = "<area> <tag>",
-    privs = {server = true},
-    func = function(name, param)
-        param = param or ""
+       description = "Remove tag from area",
+       param = "<area> <tag>",
+       privs = {server = true},
+       func = function(name, param)
+               param = param or ""
                for i, area in pairs(elidragon.savedata.areas) do
                        if area.name == param:split(" ")[1] and (area.tag == param:split(" ")[2] or not param:split(" ")[2]) then
                                table.remove(elidragon.savedata.areas, i)
                                minetest.chat_send_player(name, "Tag removed.")
                        end
                end
-    end
+       end
 })
 minetest.register_chatcommand("print_tags", {
-    description = "Print area tags",
-    param = "[<area>]",
-    privs = {server = true},
-    func = function(name, param)
+       description = "Print area tags",
+       param = "[<area>]",
+       privs = {server = true},
+       func = function(name, param)
                for _, area in pairs(elidragon.savedata.areas) do
-            if param == "" or param == area.name then
-                minetest.chat_send_player(name, area.name .. " | " .. area.tag .. " | " .. area.param)
-            end
+                       if param == "" or param == area.name then
+                               minetest.chat_send_player(name, area.name .. " | " .. area.tag .. " | " .. area.param)
+                       end
                end
-    end
+       end
 })
 function elidragon.limit_tick()
-    for _, player in pairs(minetest.get_connected_players()) do
+       for _, player in pairs(minetest.get_connected_players()) do
                local name = player:get_player_name()
                local rank = elidragon.get_rank(player).name
                local privs = minetest.get_player_privs(name)
                local has_fly = rank ~= "player"
-        if rank ~= "admin" then
+               if rank ~= "admin" then
                        privs.tp_tpc = nil
                end
-        local teleport_area = elidragon.get_area_with_tag(name, "teleport")
-        if teleport_area then
+               local teleport_area = elidragon.get_area_with_tag(name, "teleport")
+               if teleport_area then
                        elidragon.teleport(name, teleport_area.param)
-        end
+               end
                if elidragon.get_area_with_tag(name, "movement") and rank ~= "admin" and rank ~= "moderator" and rank ~= "dev" and rank ~= "helper" then
                        privs.fly = nil
                        privs.fast = nil
-            privs.home = nil
-            privs.tp = nil
+                       privs.home = nil
+                       privs.tp = nil
+
+                       if rawget(_G, "armor") then
+                               local inv = player:get_inventory()
+                               local _, armor_inv = armor:get_valid_player(player, "[elidragon.limit_tick]")
+                               for i, stack in pairs(armor_inv:get_list("armor")) do
+                                       if stack:get_name() == "lavastuff:boots" then
+                                               local left = inv:add_item("main", stack)
+                                               inv:set_stack("armor", i, left)
+                                               armor_inv:set_stack("armor", i, left)
+                                               armor:set_player_armor(player)
+
+                                               local is_emtpy = left:is_empty()
+                                               minetest.chat_send_player(name, minetest.colorize("#FF002C", is_emtpy
+                                                       and "Uneqipping your lava boots automatically"
+                                                       or "Please take off your lava boots in this zone!"
+                                               ))
+
+                                               if not is_emtpy then
+                                                       elidragon.skyblock.spawn_player(player)
+                                               end
+
+                                               break
+                                       end
+                               end
+                       end
                else
                        privs.home = true
                        privs.tp = true
@@ -87,19 +112,18 @@ function elidragon.limit_tick()
                                privs.fly = true
                                privs.fast = true
                        end
-        end
-        local kill_area = elidragon.get_area_with_tag(name, "kill")
-        if elidragon.get_area_with_tag(name, "kill") then
-            player:set_pos({x = 0, y = -1000, z = 0})
-            player:set_hp(0)
-            if kill_area.param ~= "" then
-                elidragon.message(kill_area.param:gsub("%%", " "):gsub("@player", name))
-                
-            end
-        end
+               end
+               local kill_area = elidragon.get_area_with_tag(name, "kill")
+               if kill_area then
+                       player:set_pos({x = 0, y = -1000, z = 0})
+                       player:set_hp(0)
+                       if kill_area.param ~= "" then
+                               elidragon.message(kill_area.param:gsub("%%", " "):gsub("@player", name))
+                       end
+               end
                minetest.set_player_privs(name, privs)
-    end
-    minetest.after(0.5, elidragon.limit_tick)
+       end
+       minetest.after(0.5, elidragon.limit_tick)
 end
 minetest.after(0, elidragon.limit_tick)
 minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage)
@@ -109,18 +133,18 @@ minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch,
        end
 end)
 minetest.register_on_player_hpchange(function(player, hp_change)
-    local name = player:get_player_name()
+       local name = player:get_player_name()
        if elidragon.get_area_with_tag(name, "no_damage") and hp_change < 0 then
-        return 0
+               return 0
        end
-    return hp_change
+       return hp_change
 end, true)
 minetest.register_on_player_hpchange(function(player, hp_change)
        local name = player:get_player_name()
-    local teleport_area = elidragon.get_area_with_tag(name, "teleport_on_damage")
+       local teleport_area = elidragon.get_area_with_tag(name, "teleport_on_damage")
        if teleport_area and hp_change < 0 then
                elidragon.teleport(name, teleport_area.param)
-        return 0
+               return 0
        end
-    return hp_change
+       return hp_change
 end, true)
index 7ebe8d2c7b9000bffc5390a48edf40b2f213ab9a..6079c626afcae6da1736c1275f30973aa9150502 100755 (executable)
--- a/warps.lua
+++ b/warps.lua
@@ -1,44 +1,43 @@
 elidragon.warps = {
-    {
-        name = "shop",
-        desc = "Shop",
-        pos = {x = 0, y = 1000.5, z = 0}
-    },
-    {
-        name = "hub",
-        desc = "Hub",
-        pos = {x = 10071, y = 10003, z = 9951},
-    },
-    {
-               name = "pvp",
-               desc = "Pvp Area",
+       shop = {
+               desc = "Shop",
+               pos = {x = 0, y = 1000.5, z = 0}
+       },
+       hub = {
+               desc = "Hub",
+               pos = {x = 10071, y = 10003, z = 9951},
+       },
+       pvp = {
+               desc = "PvP Area",
                pos = {x = 20025, y = 1003, z = 1025},
-    },
-    {
-        name = "spawn",
-        desc = "Spawn",
-        pos = {x = -21, y = 10202.5, z = -5},
-        restricted = true
-    },
-    {
-        name = "jump",
-        desc = "Jumping area",
-        pos = {x = 12286, y = 12347, z = 12556},
-    },
-} 
-for _, warp in pairs(elidragon.warps) do
-    local desc = "Warp to " .. warp.desc
-    if warp.restricted then
-        desc = desc .. " [only for staff members]"
-    end
-    minetest.register_chatcommand(warp.name, {
-        description = desc,
-        privs = {teleport = warp.restricted},
-        func = function(name)
-            local player = minetest.get_player_by_name(name)
-            if player then
-                player:set_pos(warp.pos)
-            end
-        end
-    })
+       },
+       spawn = {
+               desc = "Spawn",
+               pos = {x = -21, y = 10202.5, z = -5},
+               restricted = true
+       },
+       jump = {
+               desc = "Jumping area",
+               pos = {x = 12286, y = 12347, z = 12556},
+       },
+}
+
+for warp_name, warp in pairs(elidragon.warps) do
+       local desc = "Warp to " .. warp.desc
+
+       if warp.restricted then
+               desc = desc .. " [only for staff members]"
+       end
+
+       minetest.register_chatcommand(warp_name, {
+               description = desc,
+               privs = {teleport = warp.restricted},
+               func = function(name)
+                       local player = minetest.get_player_by_name(name)
+
+                       if player then
+                               player:set_pos(warp.pos)
+                       end
+               end
+       })
 end