diff --git a/init.lua b/init.lua index 5116b1c..855fb31 100644 --- a/init.lua +++ b/init.lua @@ -2,23 +2,10 @@ invisibility = {} local effect_time = 180 -- 3 minutes - - --- translation support -local S -if minetest.get_translator then - S = minetest.get_translator("invisibility") -- 5.x translation function -else -- boilerplate function - S = function(str, ...) - local args = {...} - return str:gsub("@%d+", function(match) - return args[tonumber(match:sub(2))] - end) - end -end - +local S = minetest.get_translator("invisibility") -- translation support -- reset player invisibility if they go offline + minetest.register_on_leaveplayer(function(player) local name = player:get_player_name() @@ -28,15 +15,45 @@ minetest.register_on_leaveplayer(function(player) end end) - -- creative check + local creative_mode_cache = minetest.settings:get_bool("creative_mode") local function is_creative(name) return creative_mode_cache or minetest.check_player_privs(name, {creative = true}) end +-- invisibility function + +local function invisible(player, toggle) + + if not player then return false end + + local name = player:get_player_name() + + invisibility[name] = toggle + + local prop + + if toggle == true then -- hide player and name tag + + prop = {visual_size = {x = 0, y = 0}} + + player:set_nametag_attributes({ + color = {a = 0, r = 255, g = 255, b = 255} + }) + else -- show player and tag + prop = {visual_size = {x = 1, y = 1}} + + player:set_nametag_attributes({ + color = {a = 255, r = 255, g = 255, b = 255} + }) + end + + player:set_properties(prop) +end -- invisibility potion + minetest.register_node("invisibility:potion", { description = S("Invisibility Potion"), drawtype = "plantlike", @@ -66,37 +83,34 @@ minetest.register_node("invisibility:potion", { return itemstack end - -- make player invisible invisible(user, true) -- play sound minetest.sound_play("pop", { - pos = pos, gain = 1.0, max_hear_distance = 5}, true) + pos = pos, gain = 1.0, max_hear_distance = 5}, true) -- display 10 second warning minetest.after(effect_time - 10, function() - if invisibility[name] - and user:get_pos() then + if invisibility[name] and user:get_pos() then minetest.chat_send_player(name, - S(">>> You have 10 seconds before invisibility wears off!")) + S(">>> You have 10 seconds before invisibility wears off!")) end end) -- make player visible 5 minutes later minetest.after(effect_time, function() - if invisibility[name] - and user:get_pos() then + if invisibility[name] and user:get_pos() then - -- show aready hidden player + -- show hidden player invisible(user, nil) -- play sound minetest.sound_play("pop", { - pos = pos, gain = 1.0, max_hear_distance = 5}, true) + pos = pos, gain = 1.0, max_hear_distance = 5}, true) end end) @@ -128,58 +142,20 @@ minetest.register_node("invisibility:potion", { end }) - -- craft recipe + minetest.register_craft( { output = "invisibility:potion", type = "shapeless", recipe = { - "default:sapling", "default:junglesapling", - "default:pine_sapling", "default:acacia_sapling", - "default:aspen_sapling", "default:bush_sapling", - "default:acacia_bush_sapling", - "vessels:glass_bottle", "flowers:mushroom_red", + "default:sapling", "default:junglesapling", "default:pine_sapling", + "default:acacia_sapling", "default:aspen_sapling", "default:bush_sapling", + "default:acacia_bush_sapling", "vessels:glass_bottle", "flowers:mushroom_red" } }) - --- invisibility function -invisible = function(player, toggle) - - if not player then return false end - - local name = player:get_player_name() - - invisibility[name] = toggle - - local prop - - if toggle == true then - - -- hide player and name tag - prop = { - visual_size = {x = 0, y = 0} - } - - player:set_nametag_attributes({ - color = {a = 0, r = 255, g = 255, b = 255} - }) - else - -- show player and tag - prop = { - visual_size = {x = 1, y = 1} - } - - player:set_nametag_attributes({ - color = {a = 255, r = 255, g = 255, b = 255} - }) - end - - player:set_properties(prop) -end - - -- vanish command (admin only) + minetest.register_chatcommand("vanish", { params = "", description = "Make player invisible", @@ -188,8 +164,7 @@ minetest.register_chatcommand("vanish", { func = function(name, param) -- player online - if param ~= "" - and minetest.get_player_by_name(param) then + if param ~= "" and minetest.get_player_by_name(param) then name = param diff --git a/mod.conf b/mod.conf index 0f9cd0b..4e44c2b 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ name = invisibility -depends = default, vessels, flowers -optional_depends = description = Craft a potion to make yourself invisible. +depends = default +min_minetest_version = 5.0