]> git.lizzy.rs Git - elidragon.git/blobdiff - tags.lua
Merge pull request #4 from HimbeerserverDE/master
[elidragon.git] / tags.lua
index 726e92e99881d9c5195d51715315b6171a13acbe..384fee1ba64bd27da0f05f924354dd940ab05c33 100755 (executable)
--- a/tags.lua
+++ b/tags.lua
@@ -5,18 +5,18 @@ function elidragon.get_area_with_tag(name, tag)
        local player = minetest.get_player_by_name(name)
        for _, player_area in pairs(areas:getAreasAtPos(player:get_pos())) do
                for _, marked_area in pairs(elidragon.savedata.areas) do
-                       if player_area.name == marked_area.name and marked_area.tag == tag and elidragon.get_rank(player_area.owner).name == "admin" then
+                       if player_area.name == marked_area.name and marked_area.tag == tag and minetest.check_player_privs(player_area.owner, {server = true}) then
                                return marked_area
                        end
                end
        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,81 +25,105 @@ 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(name).name
+               local rank = elidragon.get_rank(player).name
                local privs = minetest.get_player_privs(name)
-               local vip = (elidragon.get_rank(name) == "vip")
-        if rank ~= "admin" then
+               local has_fly = rank ~= "player"
+               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
-               if elidragon.get_area_with_tag(name, "movement") and rank ~= "admin" and rank ~= "moderator" and rank ~= "helper" then
+               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
-                       if vip then
+                       if has_fly then
                                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)
@@ -108,26 +132,19 @@ minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch,
                return true
        end
 end)
-minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage)
-       if elidragon.get_area_with_tag(player:get_player_name(), "pvp") then
-               if player:get_hp() - damage < 0 and player:get_hp() <= 0 then
-            minetest.chat_send_all(minetest.colorize("#D3FF2A", hitter:get_player_name() .. " has killed " .. player:get_player_name() .. " in the PvP area!"))
-        end
-       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)