ctf_respawn_immunity = {} local IMMUNE_TIME = 5 local immune_serial = 0 local immune_players = {} function ctf_respawn_immunity.is_immune(player) return immune_players[player:get_player_name()] end function ctf_respawn_immunity.set_immune(player) immune_serial = immune_serial + 1 immune_players[player:get_player_name()] = immune_serial minetest.after(1, function() ctf_respawn_immunity.update_effects(player) end) -- Set time out minetest.after(IMMUNE_TIME, function(name, id) if immune_players[name] == id then immune_players[name] = nil ctf_respawn_immunity.update_effects(minetest.get_player_by_name(name)) end end, player:get_player_name(), immune_serial) end function ctf_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 minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage) if not player or not hitter then return false end local pname = player:get_player_name() local hname = hitter:get_player_name() local pteam = ctf.player(pname).team local hteam = ctf.player(hname).team if player and ctf_respawn_immunity.is_immune(player) and pteam ~= hteam then minetest.chat_send_player(hname, minetest.colorize("#EE8822", pname .. " just respawned or joined," .. " and is immune to attacks!")) return true end if hitter and ctf_respawn_immunity.is_immune(hitter) then minetest.chat_send_player(hname, minetest.colorize("#FF8C00", "Your immunity has ended because you attacked a player")) immune_players[hname] = nil ctf_respawn_immunity.update_effects(hitter) end end) minetest.register_on_joinplayer(ctf_respawn_immunity.set_immune) minetest.register_on_respawnplayer(ctf_respawn_immunity.set_immune)