From 1fdff7adaa5743d655c256bfd43e37afa35e8101 Mon Sep 17 00:00:00 2001 From: stujones11 Date: Fri, 31 Mar 2017 21:18:29 +0100 Subject: [PATCH] Make water protection optional, default true This can save a `global_step` regisration if neither fire or water protection are enabled. --- 3d_armor/README.txt | 4 +++ 3d_armor/api.lua | 1 + 3d_armor/init.lua | 68 ++++++++++++++++++++++++--------------------- 3 files changed, 41 insertions(+), 32 deletions(-) diff --git a/3d_armor/README.txt b/3d_armor/README.txt index acc8ff4..8ec9af1 100644 --- a/3d_armor/README.txt +++ b/3d_armor/README.txt @@ -63,6 +63,9 @@ armor_heal_multiplier = 1 -- eg: armor_radiation_multiplier = 0 will completely disable radiation protection. armor_radiation_multiplier = 1 +-- Enable water protection (periodically restores breath when activated) +armor_water_protect = true + -- Enable fire protection (defaults true if using ethereal mod) armor_fire_protect = false @@ -97,6 +100,7 @@ See armor.lua, technic_armor and shields mods for more examples. Default groups: Elements: armor_head, armor_torso, armor_legs, armor_feet +attributes: armor_heal, armor_fire, armor_water Physics: physics_jump, physics_speed, physics_gravity Durability: armor_use diff --git a/3d_armor/api.lua b/3d_armor/api.lua index 0a43f10..d7e7bbf 100644 --- a/3d_armor/api.lua +++ b/3d_armor/api.lua @@ -66,6 +66,7 @@ armor.config = { material_gold = true, material_mithril = true, material_crystal = true, + water_protect = true, fire_protect = minetest.get_modpath("ethereal") ~= nil } diff --git a/3d_armor/init.lua b/3d_armor/init.lua index ad8b5a8..4978d11 100644 --- a/3d_armor/init.lua +++ b/3d_armor/init.lua @@ -323,40 +323,44 @@ else print ("[3d_armor] Fire Nodes disabled") end -minetest.register_globalstep(function(dtime) - armor.timer = armor.timer + dtime - if armor.timer < armor.config.update_time then - return - end - for _,player in pairs(minetest.get_connected_players()) do - local name = player:get_player_name() - local pos = player:getpos() - local hp = player:get_hp() - -- water breathing - if name and armor.def[name].water > 0 then - if player:get_breath() < 10 then - player:set_breath(10) - end +if armor.config.water_protect == true or armor.config.fire_protect == true then + minetest.register_globalstep(function(dtime) + armor.timer = armor.timer + dtime + if armor.timer < armor.config.update_time then + return end - -- fire protection - if armor.config.fire_protect == true - and name and pos and hp then - pos.y = pos.y + 1.4 -- head level - local node_head = minetest.get_node(pos).name - pos.y = pos.y - 1.2 -- feet level - local node_feet = minetest.get_node(pos).name - -- is player inside a hot node? - for _, row in pairs(armor.fire_nodes) do - -- check fire protection, if not enough then get hurt - if row[1] == node_head or row[1] == node_feet then - if hp > 0 and armor.def[name].fire < row[2] then - hp = hp - row[3] * armor.config.update_time - player:set_hp(hp) - break + for _,player in pairs(minetest.get_connected_players()) do + local name = player:get_player_name() + local pos = player:getpos() + local hp = player:get_hp() + if not name or not pos or not hp then + return + end + -- water breathing + if armor.config.water_protect == true then + if armor.def[name].water > 0 and player:get_breath() < 10 then + player:set_breath(10) + end + end + -- fire protection + if armor.config.fire_protect == true then + pos.y = pos.y + 1.4 -- head level + local node_head = minetest.get_node(pos).name + pos.y = pos.y - 1.2 -- feet level + local node_feet = minetest.get_node(pos).name + -- is player inside a hot node? + for _, row in pairs(armor.fire_nodes) do + -- check fire protection, if not enough then get hurt + if row[1] == node_head or row[1] == node_feet then + if hp > 0 and armor.def[name].fire < row[2] then + hp = hp - row[3] * armor.config.update_time + player:set_hp(hp) + break + end end end end end - end - armor.timer = 0 -end) + armor.timer = 0 + end) +end