forked from minetest-mods/technic
Remove file that doesn't seem to have any use.
Fix typing error in register... file Fix two issues with nuclear reactor and set the burn time to 24h.
This commit is contained in:
parent
d497429abc
commit
fa846989ac
|
@ -5,119 +5,120 @@
|
||||||
--
|
--
|
||||||
-- The nuclear reactor core needs water and a protective shield to work.
|
-- The nuclear reactor core needs water and a protective shield to work.
|
||||||
-- This is checked now and then and if the machine is tampered with... BOOM!
|
-- This is checked now and then and if the machine is tampered with... BOOM!
|
||||||
local burn_ticks = 1 -- [minutes]. How many minutes does the power plant burn per serving?
|
local burn_ticks = 24*60 -- [minutes]. How many minutes does the power plant burn per serving?
|
||||||
local power_supply = 10000 -- [HV] EUs
|
local power_supply = 10000 -- [HV] EUs
|
||||||
local fuel_type = "technic:enriched_uranium" -- This reactor burns this stuff
|
local fuel_type = "technic:enriched_uranium" -- This reactor burns this stuff
|
||||||
|
|
||||||
-- FIXME: recipe must make more sense like a rod recepticle, steam chamber, HV generator?
|
-- FIXME: recipe must make more sense like a rod recepticle, steam chamber, HV generator?
|
||||||
minetest.register_craft({
|
minetest.register_craft(
|
||||||
output = 'technic:hv_nuclear_reactor_core',
|
{output = 'technic:hv_nuclear_reactor_core',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'},
|
||||||
{'technic:stainless_steel_ingot', '', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', '', 'technic:stainless_steel_ingot'},
|
||||||
{'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'},
|
{'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craftitem("technic:hv_nuclear_reactor_core", {
|
minetest.register_craftitem(
|
||||||
description = "Uranium Rod Driven HV Reactor",
|
"technic:hv_nuclear_reactor_core",
|
||||||
stack_max = 1,
|
{description = "Uranium Rod Driven HV Reactor",
|
||||||
})
|
stack_max = 1,
|
||||||
|
})
|
||||||
|
|
||||||
local generator_formspec =
|
local generator_formspec =
|
||||||
"invsize[8,9;]"..
|
"invsize[8,9;]"..
|
||||||
-- "image[0,0;5,5;technic_generator_menu.png]"..
|
-- "image[0,0;5,5;technic_generator_menu.png]"..
|
||||||
"label[0,0;Nuclear Reactor Rod Compartment]"..
|
"label[0,0;Nuclear Reactor Rod Compartment]"..
|
||||||
"list[current_name;src;2,1;3,2;]"..
|
"list[current_name;src;2,1;3,2;]"..
|
||||||
"list[current_player;main;0,5;8,4;]"
|
"list[current_player;main;0,5;8,4;]"
|
||||||
|
|
||||||
-- "Boxy sphere"
|
-- "Boxy sphere"
|
||||||
local nodebox = {{ -0.353, -0.353, -0.353, 0.353, 0.353, 0.353 }, -- Box
|
local nodebox = {
|
||||||
{ -0.495, -0.064, -0.064, 0.495, 0.064, 0.064 }, -- Circle +-x
|
{ -0.353, -0.353, -0.353, 0.353, 0.353, 0.353 }, -- Box
|
||||||
{ -0.483, -0.128, -0.128, 0.483, 0.128, 0.128 },
|
{ -0.495, -0.064, -0.064, 0.495, 0.064, 0.064 }, -- Circle +-x
|
||||||
{ -0.462, -0.191, -0.191, 0.462, 0.191, 0.191 },
|
{ -0.483, -0.128, -0.128, 0.483, 0.128, 0.128 },
|
||||||
{ -0.433, -0.249, -0.249, 0.433, 0.249, 0.249 },
|
{ -0.462, -0.191, -0.191, 0.462, 0.191, 0.191 },
|
||||||
{ -0.397, -0.303, -0.303, 0.397, 0.303, 0.303 },
|
{ -0.433, -0.249, -0.249, 0.433, 0.249, 0.249 },
|
||||||
{ -0.305, -0.396, -0.305, 0.305, 0.396, 0.305 }, -- Circle +-y
|
{ -0.397, -0.303, -0.303, 0.397, 0.303, 0.303 },
|
||||||
{ -0.250, -0.432, -0.250, 0.250, 0.432, 0.250 },
|
{ -0.305, -0.396, -0.305, 0.305, 0.396, 0.305 }, -- Circle +-y
|
||||||
{ -0.191, -0.461, -0.191, 0.191, 0.461, 0.191 },
|
{ -0.250, -0.432, -0.250, 0.250, 0.432, 0.250 },
|
||||||
{ -0.130, -0.482, -0.130, 0.130, 0.482, 0.130 },
|
{ -0.191, -0.461, -0.191, 0.191, 0.461, 0.191 },
|
||||||
{ -0.066, -0.495, -0.066, 0.066, 0.495, 0.066 },
|
{ -0.130, -0.482, -0.130, 0.130, 0.482, 0.130 },
|
||||||
{ -0.064, -0.064, -0.495, 0.064, 0.064, 0.495 }, -- Circle +-z
|
{ -0.066, -0.495, -0.066, 0.066, 0.495, 0.066 },
|
||||||
{ -0.128, -0.128, -0.483, 0.128, 0.128, 0.483 },
|
{ -0.064, -0.064, -0.495, 0.064, 0.064, 0.495 }, -- Circle +-z
|
||||||
{ -0.191, -0.191, -0.462, 0.191, 0.191, 0.462 },
|
{ -0.128, -0.128, -0.483, 0.128, 0.128, 0.483 },
|
||||||
{ -0.249, -0.249, -0.433, 0.249, 0.249, 0.433 },
|
{ -0.191, -0.191, -0.462, 0.191, 0.191, 0.462 },
|
||||||
{ -0.303, -0.303, -0.397, 0.303, 0.303, 0.397 },
|
{ -0.249, -0.249, -0.433, 0.249, 0.249, 0.433 },
|
||||||
}
|
{ -0.303, -0.303, -0.397, 0.303, 0.303, 0.397 },
|
||||||
|
}
|
||||||
|
|
||||||
minetest.register_node(
|
minetest.register_node(
|
||||||
"technic:hv_nuclear_reactor_core",
|
"technic:hv_nuclear_reactor_core",
|
||||||
{
|
{description = "Nuclear Reactor",
|
||||||
description = "Nuclear Reactor",
|
tiles = {"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png",
|
||||||
tiles = {"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png",
|
"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png",
|
||||||
"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png"},
|
"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png"},
|
||||||
-- paramtype2 = "facedir",
|
-- paramtype2 = "facedir",
|
||||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
|
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
|
||||||
legacy_facedir_simple = true,
|
legacy_facedir_simple = true,
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
drawtype="nodebox",
|
drawtype="nodebox",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = nodebox
|
fixed = nodebox
|
||||||
},
|
},
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local meta = minetest.env:get_meta(pos)
|
local meta = minetest.env:get_meta(pos)
|
||||||
meta:set_string("infotext", "Nuclear Reactor Core")
|
meta:set_string("infotext", "Nuclear Reactor Core")
|
||||||
meta:set_float("technic_hv_power_machine", 1)
|
meta:set_float("technic_hv_power_machine", 1)
|
||||||
meta:set_int("HV_EU_supply", 0)
|
meta:set_int("HV_EU_supply", 0)
|
||||||
meta:set_int("HV_EU_from_fuel", 1) -- Signal to the switching station that this device burns some sort of fuel and needs special handling
|
meta:set_int("HV_EU_from_fuel", 1) -- Signal to the switching station that this device burns some sort of fuel and needs special handling
|
||||||
meta:set_int("burn_time", 0)
|
meta:set_int("burn_time", 0)
|
||||||
meta:set_string("formspec", generator_formspec)
|
meta:set_string("formspec", generator_formspec)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
inv:set_size("src", 6)
|
inv:set_size("src", 6)
|
||||||
end,
|
end,
|
||||||
can_dig = function(pos,player)
|
can_dig = function(pos,player)
|
||||||
local meta = minetest.env:get_meta(pos);
|
local meta = minetest.env:get_meta(pos);
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
if not inv:is_empty("src") then
|
if not inv:is_empty("src") then
|
||||||
minetest.chat_send_player(player:get_player_name(), "Machine cannot be removed because it is not empty");
|
minetest.chat_send_player(player:get_player_name(), "Machine cannot be removed because it is not empty");
|
||||||
return false
|
return false
|
||||||
else
|
else
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node(
|
minetest.register_node(
|
||||||
"technic:hv_nuclear_reactor_core_active",
|
"technic:hv_nuclear_reactor_core_active",
|
||||||
{
|
{description = "Uranium Rod Driven HV Reactor",
|
||||||
description = "Coal Driven Generator",
|
tiles = {"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png",
|
||||||
tiles = {"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png",
|
"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png"},
|
||||||
"technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png", "technic_hv_nuclear_reactor_core.png"},
|
-- paramtype2 = "facedir",
|
||||||
-- paramtype2 = "facedir",
|
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
|
||||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
|
legacy_facedir_simple = true,
|
||||||
legacy_facedir_simple = true,
|
sounds = default.node_sound_wood_defaults(),
|
||||||
sounds = default.node_sound_wood_defaults(),
|
drop="technic:hv_nuclear_reactor_core",
|
||||||
drop="technic:generator",
|
drawtype="nodebox",
|
||||||
drawtype="nodebox",
|
light_source = 15,
|
||||||
light_source = 15,
|
paramtype = "light",
|
||||||
paramtype = "light",
|
node_box = {
|
||||||
node_box = {
|
type = "fixed",
|
||||||
type = "fixed",
|
fixed = nodebox
|
||||||
fixed = nodebox
|
},
|
||||||
},
|
can_dig = function(pos,player)
|
||||||
can_dig = function(pos,player)
|
local meta = minetest.env:get_meta(pos);
|
||||||
local meta = minetest.env:get_meta(pos);
|
local inv = meta:get_inventory()
|
||||||
local inv = meta:get_inventory()
|
if not inv:is_empty("src") then
|
||||||
if not inv:is_empty("src") then
|
minetest.chat_send_player(player:get_player_name(), "Machine cannot be removed because it is not empty");
|
||||||
minetest.chat_send_player(player:get_player_name(), "Machine cannot be removed because it is not empty");
|
return false
|
||||||
return false
|
else
|
||||||
else
|
return true
|
||||||
return true
|
end
|
||||||
end
|
end,
|
||||||
end,
|
})
|
||||||
})
|
|
||||||
|
|
||||||
local check_reactor_structure = function(pos)
|
local check_reactor_structure = function(pos)
|
||||||
-- The reactor consists of an 11x11x11 cube structure
|
-- The reactor consists of an 11x11x11 cube structure
|
||||||
|
@ -135,14 +136,16 @@ local check_reactor_structure = function(pos)
|
||||||
-- C = Concrete, S = Stainless Steel, W = water node (not floating), #=reactor core, |=HV cable
|
-- C = Concrete, S = Stainless Steel, W = water node (not floating), #=reactor core, |=HV cable
|
||||||
-- The man-hole and the HV cable is only in the middle.
|
-- The man-hole and the HV cable is only in the middle.
|
||||||
local water_nodes = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1},
|
local water_nodes = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1},
|
||||||
{x=pos.x+1, y=pos.y+1, z=pos.z+1}, "default:water_source")
|
{x=pos.x+1, y=pos.y+1, z=pos.z+1},
|
||||||
|
"default:water_source")
|
||||||
--print("Water ( 25):"..#water_nodes)
|
--print("Water ( 25):"..#water_nodes)
|
||||||
if #water_nodes ~= 25 then
|
if #water_nodes ~= 25 then
|
||||||
--print("Water supply defect")
|
--print("Water supply defect")
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
local inner_shield_nodes = minetest.find_nodes_in_area({x=pos.x-2, y=pos.y-2, z=pos.z-2},
|
local inner_shield_nodes = minetest.find_nodes_in_area({x=pos.x-2, y=pos.y-2, z=pos.z-2},
|
||||||
{x=pos.x+2, y=pos.y+2, z=pos.z+2}, "technic:concrete")
|
{x=pos.x+2, y=pos.y+2, z=pos.z+2},
|
||||||
|
"technic:concrete")
|
||||||
|
|
||||||
--print("Concrete 1 ( 96):"..#inner_shield_nodes)
|
--print("Concrete 1 ( 96):"..#inner_shield_nodes)
|
||||||
if #inner_shield_nodes ~= 96 then
|
if #inner_shield_nodes ~= 96 then
|
||||||
|
@ -150,7 +153,8 @@ local check_reactor_structure = function(pos)
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
local steel_shield_nodes = minetest.find_nodes_in_area({x=pos.x-3, y=pos.y-3, z=pos.z-3},
|
local steel_shield_nodes = minetest.find_nodes_in_area({x=pos.x-3, y=pos.y-3, z=pos.z-3},
|
||||||
{x=pos.x+3, y=pos.y+3, z=pos.z+3}, "default:steelblock")
|
{x=pos.x+3, y=pos.y+3, z=pos.z+3},
|
||||||
|
"default:steelblock")
|
||||||
|
|
||||||
--print("Steel ( 216):"..#steel_shield_nodes)
|
--print("Steel ( 216):"..#steel_shield_nodes)
|
||||||
if #steel_shield_nodes ~= 216 then
|
if #steel_shield_nodes ~= 216 then
|
||||||
|
@ -158,7 +162,8 @@ local check_reactor_structure = function(pos)
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
local outer_shield_nodes = minetest.find_nodes_in_area({x=pos.x-5, y=pos.y-5, z=pos.z-5},
|
local outer_shield_nodes = minetest.find_nodes_in_area({x=pos.x-5, y=pos.y-5, z=pos.z-5},
|
||||||
{x=pos.x+5, y=pos.y+5, z=pos.z+5}, "technic:concrete")
|
{x=pos.x+5, y=pos.y+5, z=pos.z+5},
|
||||||
|
"technic:concrete")
|
||||||
--print("Concrete 2 (1080):"..#outer_shield_nodes)
|
--print("Concrete 2 (1080):"..#outer_shield_nodes)
|
||||||
if #outer_shield_nodes ~= (984+#inner_shield_nodes) then
|
if #outer_shield_nodes ~= (984+#inner_shield_nodes) then
|
||||||
--print("Outer shield defect")
|
--print("Outer shield defect")
|
||||||
|
@ -172,68 +177,67 @@ local explode_reactor = function(pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_abm(
|
minetest.register_abm(
|
||||||
{
|
{nodenames = {"technic:hv_nuclear_reactor_core","technic:hv_nuclear_reactor_core_active"},
|
||||||
nodenames = {"technic:hv_nuclear_reactor_core","technic:hv_nuclear_reactor_core_active"},
|
interval = 1,
|
||||||
interval = 1,
|
chance = 1,
|
||||||
chance = 1,
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
local meta = minetest.env:get_meta(pos)
|
||||||
local meta = minetest.env:get_meta(pos)
|
local burn_time= meta:get_int("burn_time")
|
||||||
local burn_time= meta:get_int("burn_time")
|
|
||||||
|
|
||||||
-- If more to burn and the energy produced was used: produce some more
|
-- If more to burn and the energy produced was used: produce some more
|
||||||
if burn_time>0 then
|
if burn_time>0 then
|
||||||
if meta:get_int("HV_EU_supply") == 0 then
|
if meta:get_int("HV_EU_supply") == 0 then
|
||||||
-- We did not use the power
|
-- We did not use the power
|
||||||
meta:set_int("HV_EU_supply", power_sypply)
|
meta:set_int("HV_EU_supply", power_sypply)
|
||||||
else
|
else
|
||||||
burn_time = burn_time - 1
|
burn_time = burn_time - 1
|
||||||
meta:set_int("burn_time",burn_time)
|
meta:set_int("burn_time",burn_time)
|
||||||
meta:set_string("infotext", "Nuclear Reactor Core ("..math.floor(burn_time/(burn_ticks*60)*100).."%)")
|
meta:set_string("infotext", "Nuclear Reactor Core ("..math.floor(burn_time/(burn_ticks*60)*100).."%)")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Burn another piece of coal
|
-- Burn another piece of coal
|
||||||
if burn_time==0 then
|
if burn_time==0 then
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
local correct_fuel_count = 0
|
local correct_fuel_count = 0
|
||||||
if inv:is_empty("src") == false then
|
if inv:is_empty("src") == false then
|
||||||
local srclist= inv:get_list("src")
|
local srclist= inv:get_list("src")
|
||||||
for _, srcstack in pairs(srclist) do
|
for _, srcstack in pairs(srclist) do
|
||||||
if srcstack then
|
if srcstack then
|
||||||
local src_item=srcstack:to_table()
|
local src_item=srcstack:to_table()
|
||||||
if src_item and src_item["name"] == fuel_type then
|
if src_item and src_item["name"] == fuel_type then
|
||||||
correct_fuel_count = correct_fuel_count + 1
|
correct_fuel_count = correct_fuel_count + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- Check that the reactor is complete as well as the correct number of correct fuel
|
-- Check that the reactor is complete as well as the correct number of correct fuel
|
||||||
if correct_fuel_count == 6 then
|
if correct_fuel_count == 6 then
|
||||||
if check_reactor_structure(pos) == 1 then
|
if check_reactor_structure(pos) == 1 then
|
||||||
burn_time=burn_ticks*60
|
burn_time=burn_ticks*60
|
||||||
meta:set_int("burn_time",burn_time)
|
meta:set_int("burn_time",burn_time)
|
||||||
hacky_swap_node (pos,"technic:hv_nuclear_reactor_core_active")
|
hacky_swap_node (pos,"technic:hv_nuclear_reactor_core_active")
|
||||||
meta:set_int("HV_EU_supply", power_supply)
|
meta:set_int("HV_EU_supply", power_supply)
|
||||||
for idx, srcstack in pairs(srclist) do
|
for idx, srcstack in pairs(srclist) do
|
||||||
srcstack:take_item()
|
srcstack:take_item()
|
||||||
inv:set_stack("src", idx, srcstack)
|
inv:set_stack("src", idx, srcstack)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- BOOM!!! (the reactor was compromised and it should explode after some time) TNT mod inspired??
|
-- BOOM!!! (the reactor was compromised and it should explode after some time) TNT mod inspired??
|
||||||
explode_reactor(pos)
|
explode_reactor(pos)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
meta:set_int("HV_EU_supply", 0)
|
meta:set_int("HV_EU_supply", 0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Nothing left to burn
|
-- Nothing left to burn
|
||||||
if burn_time==0 then
|
if burn_time==0 then
|
||||||
meta:set_string("infotext", "Nuclear Reactor Core (idle)")
|
meta:set_string("infotext", "Nuclear Reactor Core (idle)")
|
||||||
hacky_swap_node (pos,"technic:hv_nuclear_reactor_core")
|
hacky_swap_node (pos,"technic:hv_nuclear_reactor_core")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_HV_machine ("technic:hv_nuclear_reactor_core","PR")
|
technic.register_HV_machine ("technic:hv_nuclear_reactor_core","PR")
|
||||||
technic.register_HV_machine ("technic:hv_nuclear_reactor_core_active","PR")
|
technic.register_HV_machine ("technic:hv_nuclear_reactor_core_active","PR")
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
-- This file includes the functions and data structures for registering machines and tools for LV, MV, HV types.
|
-- This file includes the functions and data structures for registering machines and tools for LV, MV, HV types.
|
||||||
-- We use the technioc namespace for these functions and data to avoid eventual conflict.
|
-- We use the technic namespace for these functions and data to avoid eventual conflict.
|
||||||
|
|
||||||
-- register LV machines here
|
-- register LV machines here
|
||||||
technic.LV_machines = {}
|
technic.LV_machines = {}
|
||||||
|
|
|
@ -1,176 +0,0 @@
|
||||||
-- original code comes from walkin_light mod by Echo http://minetest.net/forum/viewtopic.php?id=2621
|
|
||||||
|
|
||||||
flashlight_max_charge=30000
|
|
||||||
|
|
||||||
minetest.register_tool("technic:flashlight", {
|
|
||||||
description = "Flashlight",
|
|
||||||
inventory_image = "technic_flashlight.png",
|
|
||||||
stack_max = 1,
|
|
||||||
on_use = function(itemstack, user, pointed_thing)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "technic:flashlight",
|
|
||||||
recipe = {
|
|
||||||
{"glass","glass","glass"},
|
|
||||||
{"technic:stainless_steel_ingot","technic:battery","technic:stainless_steel_ingot"},
|
|
||||||
{"","technic:battery",""}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
local players = {}
|
|
||||||
local player_positions = {}
|
|
||||||
local last_wielded = {}
|
|
||||||
|
|
||||||
function round(num)
|
|
||||||
return math.floor(num + 0.5)
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
|
||||||
local player_name = player:get_player_name()
|
|
||||||
table.insert(players, player_name)
|
|
||||||
last_wielded[player_name] = flashlight_weared(player)
|
|
||||||
local pos = player:getpos()
|
|
||||||
local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
|
|
||||||
local wielded_item = player:get_wielded_item():get_name()
|
|
||||||
if flashlight_weared(player)==true then
|
|
||||||
-- Neuberechnung des Lichts erzwingen
|
|
||||||
minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"})
|
|
||||||
minetest.env:add_node(rounded_pos,{type="node",name="air"})
|
|
||||||
end
|
|
||||||
player_positions[player_name] = {}
|
|
||||||
player_positions[player_name]["x"] = rounded_pos.x;
|
|
||||||
player_positions[player_name]["y"] = rounded_pos.y;
|
|
||||||
player_positions[player_name]["z"] = rounded_pos.z;
|
|
||||||
end)
|
|
||||||
|
|
||||||
minetest.register_on_leaveplayer(function(player)
|
|
||||||
local player_name = player:get_player_name()
|
|
||||||
for i,v in ipairs(players) do
|
|
||||||
if v == player_name then
|
|
||||||
table.remove(players, i)
|
|
||||||
last_wielded[player_name] = nil
|
|
||||||
-- Neuberechnung des Lichts erzwingen
|
|
||||||
local pos = player:getpos()
|
|
||||||
local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
|
|
||||||
minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"})
|
|
||||||
minetest.env:add_node(rounded_pos,{type="node",name="air"})
|
|
||||||
player_positions[player_name]["x"] = nil
|
|
||||||
player_positions[player_name]["y"] = nil
|
|
||||||
player_positions[player_name]["z"] = nil
|
|
||||||
player_positions[player_name]["m"] = nil
|
|
||||||
player_positions[player_name] = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
minetest.register_globalstep(function(dtime)
|
|
||||||
for i,player_name in ipairs(players) do
|
|
||||||
local player = minetest.env:get_player_by_name(player_name)
|
|
||||||
if flashlight_weared(player)==true then
|
|
||||||
-- Fackel ist in der Hand
|
|
||||||
local pos = player:getpos()
|
|
||||||
local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
|
|
||||||
if (last_wielded[player_name] ~= true) or (player_positions[player_name]["x"] ~= rounded_pos.x or player_positions[player_name]["y"] ~= rounded_pos.y or player_positions[player_name]["z"] ~= rounded_pos.z) then
|
|
||||||
-- Fackel gerade in die Hand genommen oder zu neuem Node bewegt
|
|
||||||
local is_air = minetest.env:get_node_or_nil(rounded_pos)
|
|
||||||
if is_air == nil or (is_air ~= nil and (is_air.name == "air" or is_air.name == "technic:light")) then
|
|
||||||
-- wenn an aktueller Position "air" ist, Fackellicht setzen
|
|
||||||
minetest.env:add_node(rounded_pos,{type="node",name="technic:light"})
|
|
||||||
end
|
|
||||||
if (player_positions[player_name]["x"] ~= rounded_pos.x or player_positions[player_name]["y"] ~= rounded_pos.y or player_positions[player_name]["z"] ~= rounded_pos.z) then
|
|
||||||
-- wenn Position geänder, dann altes Licht löschen
|
|
||||||
local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]}
|
|
||||||
-- Neuberechnung des Lichts erzwingen
|
|
||||||
local is_light = minetest.env:get_node_or_nil(old_pos)
|
|
||||||
if is_light ~= nil and is_light.name == "technic:light" then
|
|
||||||
minetest.env:add_node(old_pos,{type="node",name="technic:light_off"})
|
|
||||||
minetest.env:add_node(old_pos,{type="node",name="air"})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- gemerkte Position ist nun die gerundete neue Position
|
|
||||||
player_positions[player_name]["x"] = rounded_pos.x
|
|
||||||
player_positions[player_name]["y"] = rounded_pos.y
|
|
||||||
player_positions[player_name]["z"] = rounded_pos.z
|
|
||||||
end
|
|
||||||
|
|
||||||
last_wielded[player_name] = true;
|
|
||||||
elseif last_wielded[player_name] == true then
|
|
||||||
-- Fackel nicht in der Hand, aber beim letzten Durchgang war die Fackel noch in der Hand
|
|
||||||
local pos = player:getpos()
|
|
||||||
local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
|
|
||||||
repeat
|
|
||||||
local is_light = minetest.env:get_node_or_nil(rounded_pos)
|
|
||||||
if is_light ~= nil and is_light.name == "technic:light" then
|
|
||||||
-- minetest.env:remove_node(rounded_pos)
|
|
||||||
-- Erzwinge Neuberechnung des Lichts
|
|
||||||
minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"})
|
|
||||||
minetest.env:add_node(rounded_pos,{type="node",name="air"})
|
|
||||||
end
|
|
||||||
until minetest.env:get_node_or_nil(rounded_pos) ~= "technic:light"
|
|
||||||
local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]}
|
|
||||||
repeat
|
|
||||||
is_light = minetest.env:get_node_or_nil(old_pos)
|
|
||||||
if is_light ~= nil and is_light.name == "technic:light" then
|
|
||||||
-- minetest.env:remove_node(old_pos)
|
|
||||||
-- Erzwinge Neuberechnung des Lichts
|
|
||||||
minetest.env:add_node(old_pos,{type="node",name="technic:light_off"})
|
|
||||||
minetest.env:add_node(old_pos,{type="node",name="air"})
|
|
||||||
end
|
|
||||||
until minetest.env:get_node_or_nil(old_pos) ~= "technic:light"
|
|
||||||
last_wielded[player_name] = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
minetest.register_node("technic:light", {
|
|
||||||
drawtype = "glasslike",
|
|
||||||
tile_images = {"technic_light.png"},
|
|
||||||
paramtype = "light",
|
|
||||||
walkable = false,
|
|
||||||
is_ground_content = true,
|
|
||||||
light_propagates = true,
|
|
||||||
sunlight_propagates = true,
|
|
||||||
light_source = 15,
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {0, 0, 0, 0, 0, 0},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
minetest.register_node("technic:light_off", {
|
|
||||||
drawtype = "glasslike",
|
|
||||||
tile_images = {"technic_light.png"},
|
|
||||||
paramtype = "light",
|
|
||||||
walkable = false,
|
|
||||||
is_ground_content = true,
|
|
||||||
light_propagates = true,
|
|
||||||
sunlight_propagates = true,
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {0, 0, 0, 0, 0, 0},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
function flashlight_weared (player)
|
|
||||||
flashlight_on=false
|
|
||||||
local inv = player:get_inventory()
|
|
||||||
local hotbar=inv:get_list("main")
|
|
||||||
for i=1,8,1 do
|
|
||||||
|
|
||||||
if hotbar[i]:get_name() == "technic:flashlight" then
|
|
||||||
item=hotbar[i]:to_table()
|
|
||||||
if item["metadata"]=="" or item["metadata"]=="0" then return flashlight_on end --flashlight not charghed
|
|
||||||
charge=tonumber(item["metadata"])
|
|
||||||
if charge-2>0 then
|
|
||||||
flashlight_on=true
|
|
||||||
charge =charge-2;
|
|
||||||
set_RE_wear(item,charge,flashlight_max_charge)
|
|
||||||
item["metadata"]=tostring(charge)
|
|
||||||
hotbar[i]:replace(item)
|
|
||||||
inv:set_stack("main",i,hotbar[i])
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return flashlight_on
|
|
||||||
end
|
|
Loading…
Reference in New Issue
Block a user