измерение дозы радиации
This commit is contained in:
parent
2ba4c9ade7
commit
fb681818af
97
function.lua
97
function.lua
@ -123,7 +123,6 @@ surface_effect.technic_forcefield_radiation_protection = function(pos, player)
|
|||||||
math.round(pos1.y) < range and math.round(pos1.y) > 0 - range and
|
math.round(pos1.y) < range and math.round(pos1.y) > 0 - range and
|
||||||
math.round(pos1.z) < range and math.round(pos1.z) > 0 - range
|
math.round(pos1.z) < range and math.round(pos1.z) > 0 - range
|
||||||
then
|
then
|
||||||
--minetest.chat_send_all(dump((0 - range)))
|
|
||||||
surface_effect.radiaton_off(player)
|
surface_effect.radiaton_off(player)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@ -193,10 +192,12 @@ su.rediationDomage = function (player, pos)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.sound_play("surface_effect_radiaciya",{
|
if surface_effect.detectNuclides(player) == true then
|
||||||
gain = 1.0,
|
minetest.sound_play("surface_effect_radiaciya",{
|
||||||
to_player = name,
|
gain = 1.0,
|
||||||
})
|
to_player = name,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
persistent_api.add_persistent_effect({
|
persistent_api.add_persistent_effect({
|
||||||
name = "damage_player", -- identifier
|
name = "damage_player", -- identifier
|
||||||
@ -242,16 +243,88 @@ end
|
|||||||
|
|
||||||
surface_effect.detectNuclides = function (player)
|
surface_effect.detectNuclides = function (player)
|
||||||
local inv = player:get_inventory()
|
local inv = player:get_inventory()
|
||||||
if inv:contains_item("main", "surface_effect:dosimeter") then
|
if not inv:contains_item("main", "surface_effect:dosimeter") then
|
||||||
return true
|
return false
|
||||||
end
|
end
|
||||||
return false
|
|
||||||
|
|
||||||
--[[for i=1, inv:get_size("main") do
|
for i=1, inv:get_size("main") do
|
||||||
local stack = inv:get_stack("main", i)
|
local stack = inv:get_stack("main", i)
|
||||||
if stack:get_name() == "surface_effect:dosimeter" then
|
if stack:get_name() == "surface_effect:dosimeter" then
|
||||||
use_battery(stack)
|
local meta = stack:get_meta()
|
||||||
|
local charge = meta:get_int("technic:charge")
|
||||||
|
|
||||||
|
minetest.log("action", "Detect nuclides, power: " .. charge)
|
||||||
|
if charge > 0 then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local function battery_dosimeter(stack)
|
||||||
|
local meta = stack:get_meta()
|
||||||
|
local charge = meta:get_int("technic:charge")
|
||||||
|
|
||||||
|
minetest.log("action", "Dosimeter power: " .. charge)
|
||||||
|
|
||||||
|
if charge == -1 then return end
|
||||||
|
charge = charge - 1
|
||||||
|
|
||||||
|
if charge < 0 then
|
||||||
|
technic.set_RE_wear(stack, 0, 65535)
|
||||||
|
meta:set_int("technic:charge", -1)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if charge > 0 then
|
||||||
|
technic.set_RE_wear(stack, charge, 65535)
|
||||||
|
meta:set_int("technic:charge", charge)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
surface_effect.update_inventory = function (player)
|
||||||
|
local inv = player:get_inventory()
|
||||||
|
if not inv:contains_item("main", "surface_effect:dosimeter") then
|
||||||
|
return -- Skip checking every stack
|
||||||
|
end
|
||||||
|
|
||||||
|
for i=1, inv:get_size("main") do
|
||||||
|
local stack = inv:get_stack("main", i)
|
||||||
|
if stack:get_name() == "surface_effect:dosimeter" then
|
||||||
|
battery_dosimeter(stack)
|
||||||
|
|
||||||
inv:set_stack("main", i, stack)
|
inv:set_stack("main", i, stack)
|
||||||
end
|
end
|
||||||
end]]
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
surface_effect.technicDetectUranium = function(player)
|
||||||
|
local pos = player:get_pos()
|
||||||
|
local radius = 20
|
||||||
|
local protectors = minetest.find_nodes_in_area(
|
||||||
|
{x = pos.x - radius , y = pos.y - radius , z = pos.z - radius},
|
||||||
|
{x = pos.x + radius , y = pos.y + radius , z = pos.z + radius},
|
||||||
|
{"technic:uranium35_block"})
|
||||||
|
|
||||||
|
if #protectors > 0 then
|
||||||
|
local npos = protectors[1]
|
||||||
|
local meta = minetest.get_meta(npos)
|
||||||
|
local pos1 = vector.subtract(pos, npos)
|
||||||
|
|
||||||
|
if surface_effect.detectNuclides(player) then
|
||||||
|
minetest.log("action", "Radiation detect technic " .. surface_effect.dump(protectors[1]))
|
||||||
|
|
||||||
|
minetest.sound_play({name = "radiant_damage_geiger",
|
||||||
|
--gain = math.min(1, damage/10)
|
||||||
|
gain = 1.0
|
||||||
|
}, {
|
||||||
|
to_player=player:get_player_name()
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
19
init.lua
19
init.lua
@ -13,16 +13,18 @@ minetest.register_globalstep(function(dtime)
|
|||||||
if timer > os.time() then
|
if timer > os.time() then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
timer = os.time() + 10
|
timer = os.time() + 5
|
||||||
|
|
||||||
for k, player in ipairs(minetest.get_connected_players()) do
|
for k, player in ipairs(minetest.get_connected_players()) do
|
||||||
surface_effect.mask(player)
|
|
||||||
|
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
local object = minetest.env:get_player_by_name(name)
|
local object = minetest.env:get_player_by_name(name)
|
||||||
surface_effect.setHud(player)
|
|
||||||
|
|
||||||
if object then
|
if object then
|
||||||
|
surface_effect.setHud(player)
|
||||||
|
surface_effect.mask(player)
|
||||||
|
surface_effect.update_inventory(player)
|
||||||
|
surface_effect.technicDetectUranium(player)
|
||||||
|
|
||||||
local pos = object:get_pos()
|
local pos = object:get_pos()
|
||||||
su.rediationDomage(player, pos)
|
su.rediationDomage(player, pos)
|
||||||
--minetest.chat_send_all(dump(areas:getAreasAtPos(pos)))
|
--minetest.chat_send_all(dump(areas:getAreasAtPos(pos)))
|
||||||
@ -33,7 +35,6 @@ end)
|
|||||||
--Новый игрок
|
--Новый игрок
|
||||||
minetest.register_on_newplayer(function(player)
|
minetest.register_on_newplayer(function(player)
|
||||||
surface_effect.setHud(player)
|
surface_effect.setHud(player)
|
||||||
|
|
||||||
surface_effect.showLogo(player)
|
surface_effect.showLogo(player)
|
||||||
|
|
||||||
if minetest.get_modpath("hazmat_suit") then
|
if minetest.get_modpath("hazmat_suit") then
|
||||||
@ -128,7 +129,7 @@ end
|
|||||||
|
|
||||||
radiant_damage.register_radiant_damage("radioactive_earth", {
|
radiant_damage.register_radiant_damage("radioactive_earth", {
|
||||||
interval = 1,
|
interval = 1,
|
||||||
range = 3,
|
range = 4,
|
||||||
--inverse_square_falloff = true,
|
--inverse_square_falloff = true,
|
||||||
emitted_by = {["surface_effect:radioactive_earth"] = 0.5},
|
emitted_by = {["surface_effect:radioactive_earth"] = 0.5},
|
||||||
attenuated_by = {['air'] = 0.4, ['default:grass_1'] = 0.5},
|
attenuated_by = {['air'] = 0.4, ['default:grass_1'] = 0.5},
|
||||||
@ -136,6 +137,10 @@ radiant_damage.register_radiant_damage("radioactive_earth", {
|
|||||||
on_damage = on_radiation_damage,
|
on_damage = on_radiation_damage,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
--[[minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
|
surface_effect.mask(player)
|
||||||
|
end)]]
|
||||||
|
|
||||||
|
minetest.register_on_player_inventory_action(function(player, action, inventory, inventory_info)
|
||||||
surface_effect.mask(player)
|
surface_effect.mask(player)
|
||||||
end)
|
end)
|
17
nodes.lua
17
nodes.lua
@ -18,5 +18,20 @@ minetest.register_node("surface_effect:radioactive_earth", {
|
|||||||
|
|
||||||
minetest.register_tool("surface_effect:dosimeter", {
|
minetest.register_tool("surface_effect:dosimeter", {
|
||||||
description = S("Dosimeter"),
|
description = S("Dosimeter"),
|
||||||
inventory_image = "surface_effect_dosimeter.png"
|
inventory_image = "surface_effect_dosimeter.png",
|
||||||
|
wear_represents = "technic_RE_charge",
|
||||||
|
groups = {not_in_creative_inventory = 0},
|
||||||
|
})
|
||||||
|
|
||||||
|
if minetest.get_modpath("technic") then
|
||||||
|
technic.register_power_tool("surface_effect:dosimeter", 65535)
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'surface_effect:dosimeter',
|
||||||
|
recipe = {
|
||||||
|
{'basic_materials:plastic_sheet', 'technic:chromium_ingot', ''},
|
||||||
|
{'technic:control_logic_unit', 'basic_materials:ic', ''},
|
||||||
|
{'technic:battery', 'technic:battery', ''},
|
||||||
|
}
|
||||||
})
|
})
|
Loading…
Reference in New Issue
Block a user