From fff64967cab95a350db0fc7d3d0d84552d6a4f71 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Tue, 7 Nov 2017 00:32:35 +0000 Subject: [PATCH] Add respawn immunity --- mods/respawn_immunity/init.lua | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 mods/respawn_immunity/init.lua diff --git a/mods/respawn_immunity/init.lua b/mods/respawn_immunity/init.lua new file mode 100644 index 0000000..99f32c7 --- /dev/null +++ b/mods/respawn_immunity/init.lua @@ -0,0 +1,47 @@ +respawn_immunity = {} + +local IMMUNE_TIME = 10 +local immune_serial = 0 +local immune_players = {} + +function respawn_immunity.is_immune(player) + return immune_players[player:get_player_name()] +end + +function respawn_immunity.update_effects(player) + -- TODO: transparent player when immune + -- + -- if immune_players[player:get_player_name()] then + -- player:set_texture_mod("[multiply:#1f1") + -- else + -- player:set_texture_mod(nil) + -- end +end + +function respawn_immunity.set_immune(player) + immune_serial = immune_serial + 1 + immune_players[player:get_player_name()] = immune_serial + minetest.after(1, function() + respawn_immunity.update_effects(player) + end) + + -- Set time out + minetest.after(IMMUNE_TIME, function(id) + if immune_players[player:get_player_name()] == id then + immune_players[player:get_player_name()] = nil + respawn_immunity.update_effects(player) + end + end, immune_serial) +end + +table.insert(minetest.registered_on_punchplayers, 1, function(player, hitter, + time_from_last_punch, tool_capabilities, dir, damage) + if player and respawn_immunity.is_immune(player) then + minetest.chat_send_player(hitter:get_player_name(), + player:get_player_name() .. " just respawned or joined, and is immune to attacks!") + return true + end +end) + +minetest.register_on_joinplayer(respawn_immunity.set_immune) +minetest.register_on_dieplayer(respawn_immunity.set_immune)