summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVanessa Ezekowitz <vanessaezekowitz@gmail.com>2015-03-15 18:15:43 -0400
committerVanessa Ezekowitz <vanessaezekowitz@gmail.com>2015-03-15 18:21:28 -0400
commitb00e942824cae5e8c8e272d3ba2d04515b6fb389 (patch)
tree01a20b34e7fd4dce4afab9bdf22db7b32fb1c68e
parentcf75916ea7dc8289dd8b4c4e179ebccd7056bbea (diff)
don't run the damage ABM if damage is disabled on the server.
-rw-r--r--technic/machines/HV/nuclear_reactor.lua77
1 files changed, 41 insertions, 36 deletions
diff --git a/technic/machines/HV/nuclear_reactor.lua b/technic/machines/HV/nuclear_reactor.lua
index bec196e..8ba0cb1 100644
--- a/technic/machines/HV/nuclear_reactor.lua
+++ b/technic/machines/HV/nuclear_reactor.lua
@@ -569,47 +569,52 @@ end
local assumed_abdomen_offset = vector.new(0, 1, 0)
local assumed_abdomen_offset_length = vector.length(assumed_abdomen_offset)
local cache_scaled_shielding = {}
-minetest.register_abm({
- nodenames = {"group:radioactive"},
- interval = 1,
- chance = 1,
- action = function (pos, node)
- local strength = minetest.registered_nodes[node.name].groups.radioactive
- for _, o in ipairs(minetest.get_objects_inside_radius(pos, strength*0.001 + assumed_abdomen_offset_length)) do
- if o:is_player() then
- local rel = vector.subtract(vector.add(o:getpos(), assumed_abdomen_offset), pos)
- local dist_sq = vector.length_square(rel)
- local dist = math.sqrt(dist_sq)
- local dirstep = dist == 0 and vector.new(0,0,0) or vector.divide(rel, dist*4)
- local intpos = pos
- local shielding = 0
- for intdist = 0.25, dist, 0.25 do
- intpos = vector.add(intpos, dirstep)
- local intnodepos = vector.round(intpos)
- if not vector.equals(intnodepos, pos) then
- local sname = minetest.get_node(intnodepos).name
- local sval = cache_scaled_shielding[sname]
- if not sval then
- sval = math.sqrt(node_radiation_resistance(sname)) * -0.025
- cache_scaled_shielding[sname] = sval
+
+local damage_enabled = minetest.setting_getbool("enable_damage")
+
+if damage_enabled then
+ minetest.register_abm({
+ nodenames = {"group:radioactive"},
+ interval = 1,
+ chance = 1,
+ action = function (pos, node)
+ local strength = minetest.registered_nodes[node.name].groups.radioactive
+ for _, o in ipairs(minetest.get_objects_inside_radius(pos, strength*0.001 + assumed_abdomen_offset_length)) do
+ if o:is_player() then
+ local rel = vector.subtract(vector.add(o:getpos(), assumed_abdomen_offset), pos)
+ local dist_sq = vector.length_square(rel)
+ local dist = math.sqrt(dist_sq)
+ local dirstep = dist == 0 and vector.new(0,0,0) or vector.divide(rel, dist*4)
+ local intpos = pos
+ local shielding = 0
+ for intdist = 0.25, dist, 0.25 do
+ intpos = vector.add(intpos, dirstep)
+ local intnodepos = vector.round(intpos)
+ if not vector.equals(intnodepos, pos) then
+ local sname = minetest.get_node(intnodepos).name
+ local sval = cache_scaled_shielding[sname]
+ if not sval then
+ sval = math.sqrt(node_radiation_resistance(sname)) * -0.025
+ cache_scaled_shielding[sname] = sval
+ end
+ shielding = shielding + sval
end
- shielding = shielding + sval
- end
- end
- local dmg_rate = 0.25e-6 * strength*strength * math.exp(shielding) / math.max(0.75, dist_sq)
- if dmg_rate >= 0.25 then
- local dmg_int = math.floor(dmg_rate)
- if math.random() < dmg_rate-dmg_int then
- dmg_int = dmg_int + 1
end
- if dmg_int > 0 then
- o:set_hp(math.max(o:get_hp() - dmg_int, 0))
+ local dmg_rate = 0.25e-6 * strength*strength * math.exp(shielding) / math.max(0.75, dist_sq)
+ if dmg_rate >= 0.25 then
+ local dmg_int = math.floor(dmg_rate)
+ if math.random() < dmg_rate-dmg_int then
+ dmg_int = dmg_int + 1
+ end
+ if dmg_int > 0 then
+ o:set_hp(math.max(o:get_hp() - dmg_int, 0))
+ end
end
end
end
- end
- end,
-})
+ end,
+ })
+end
-- radioactive materials that can result from destroying a reactor