From 78c11ee4f9bca4d2ae54400702d00ce602bde70b Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Thu, 8 Jul 2021 20:53:59 +0200 Subject: [PATCH] Unequip lava boots in movement protected zones --- tags.lua | 128 ++++++++++++++++++++++++++++++++---------------------- warps.lua | 81 +++++++++++++++++----------------- 2 files changed, 116 insertions(+), 93 deletions(-) diff --git a/tags.lua b/tags.lua index c4cc269..384fee1 100755 --- 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 = " ", - privs = {server = true}, - func = function(name, param) - if not param then + description = "Add tag to area", + 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 = " ", - privs = {server = true}, - func = function(name, param) - param = param or "" + description = "Remove tag from area", + param = " ", + 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 = "[]", - privs = {server = true}, - func = function(name, param) + description = "Print area tags", + param = "[]", + 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) diff --git a/warps.lua b/warps.lua index 7ebe8d2..6079c62 100755 --- 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 -- 2.44.0