Fix issue #190 (Chemical reactor deleting resources when blocked)

This commit is contained in:
Joachim Stolberg 2025-01-10 21:53:36 +01:00
parent fcb583c062
commit 90bfe85403
6 changed files with 87 additions and 18 deletions

View File

@ -109,10 +109,13 @@ local function can_start(pos, nvm, state)
return true
end
local test_setup = nil
local function start_node(pos, nvm, state)
reactor_cmnd(pos, "start")
del_liquids(pos)
nvm.running = true
test_setup(pos, nvm)
end
local function stop_node(pos, nvm, state)
@ -138,7 +141,43 @@ local function untake(pos, taken)
end
end
test_setup = function(pos, nvm)
local recipe = recipes.get(nvm, "ta4_doser")
local ndef = minetest.registered_craftitems[recipe.output.name]
local container = ndef.groups and ndef.groups.powder == 1 and "silo" or "tank"
nvm.fault = nil
if reactor_cmnd(pos, "get_output_container") ~= container then
if container == "silo" then
nvm.fault = S("output: silo expected")
else
nvm.fault = S("output: tank expected")
end
return
end
if recipe.waste.name == "" then
return
end
ndef = minetest.registered_craftitems[recipe.waste.name]
container = ndef.groups and ndef.groups.powder == 1 and "silo" or "tank"
if reactor_cmnd(pos, "get_waste_container") ~= container then
if container == "silo" then
nvm.fault = S("waste: silo expected")
else
nvm.fault = S("waste: tank expected")
end
return
end
end
local function dosing(pos, nvm, elapsed)
if nvm.fault then
reactor_cmnd(pos, "stop")
State:fault(pos, nvm, nvm.fault)
return
end
-- trigger reactor (power)
if not reactor_cmnd(pos, "power") then
if not nvm.techage_countdown or nvm.techage_countdown < 3 then

View File

@ -78,6 +78,17 @@ local function base_waste(pos, payload)
return liquid.put(pos2, Pipe, outdir, payload.name, payload.amount, payload.player_name)
end
local function connection_test(pos)
local outdir = M(pos):get_int("outdir")
local pos2, _ = Pipe:get_connected_node_pos(pos, outdir)
local name = techage.get_node_lvm(pos2).name
if name:find("silo") then
return "silo"
elseif name:find("tank") then
return "tank"
end
end
-- controlled by the doser
techage.register_node({"techage:ta4_reactor_fillerpipe"}, {
on_transfer = function(pos, in_dir, topic, payload)
@ -91,6 +102,10 @@ techage.register_node({"techage:ta4_reactor_fillerpipe"}, {
return false
end
return true
elseif topic == "get_output_container" then
return connection_test({x = pos.x, y = pos.y-2, z = pos.z})
elseif topic == "get_waste_container" then
return connection_test({x = pos.x, y = pos.y-3, z = pos.z})
elseif topic == "waste" then
return base_waste(pos, payload or {})
elseif topic == "catalyst" then

View File

@ -1411,9 +1411,13 @@ right to left=von rechts nach links
Doser=Dosierer
TA4 Doser=TA4 Dosierer
catalyst missing=Katalysator fehlt
output: silo expected=Ausgabe benötigt ein Silo
output: tank expected=Ausgabe benötigt einen Tank
reactor defect=Reaktor defekt
reactor defect or no power=Reaktor defekt oder kein Strom
reactor has no power=Reaktor hat keinen Strom
waste: silo expected=Abfall benötigt ein Silo
waste: tank expected=Abfall benötigt einen Tank
wrong catalyst=falscher Katalysator
### ta4_doser.lua ###

View File

@ -1411,9 +1411,13 @@ right to left=de droite à gauche
Doser=Doseur
TA4 Doser=TA4 Doseur
catalyst missing=catalyseur manquant
output: silo expected=
output: tank expected=
reactor defect=défaut du réacteur
reactor defect or no power=défaut du réacteur ou absence de courant
reactor has no power=Le réacteur n'a pas de courant
waste: silo expected=
waste: tank expected=
wrong catalyst=mauvais catalyseur
### ta4_doser.lua ###

View File

@ -307,7 +307,6 @@ Shell shape error@n(@1% found / 100% expected)=Ошибка формы обол
TA5 Fusion Reactor Controller=TA5 Контроллер ядерного реактора
### controller.lua ###
### heatexchanger2.lua ###
No power=Нет энергии
@ -333,24 +332,30 @@ per minute=в минуту
TA2 Cylinder=TA2 Цилиндр
### electricmeter.lua ###
Countdown=Кол-во электроэнергии которое должно передаться
### logic_block.lua ###
### tele.lua ###
Blocking Time=Время блокировки
### detector.lua ###
Counts down the number of items passed through@nand only triggers an 'on' command when it reaches zero.=Считает количество проходящих предметов@nи включается когда количество достигает нуля.
Current countdown=Кол-во предметов которое должно пройти
Current countdown value.=Кол-во прошедших предметов
TA3 Item Detector=TA3 Детектор предметов
TA4 Collider Detector=TA4 Детектор коллайдера
TA4 Collider Detector Core=TA4 Ядро детектора коллайдера
TA4 Item Detector=TA3 Детектор предметов
TA3 Detector=TA3 Детектор
### detector.lua ###
### electricmeter.lua ###
Countdown=Кол-во электроэнергии которое должно передаться
### detector.lua ###
### logic_block.lua ###
### tele.lua ###
Blocking Time=Время блокировки
### detector.lua ###
### tele.lua ###
Configured Items=Настроенные предметы
Items which generate an 'on' command.@nIf empty, all passed items generate an 'on' command.=Предметы, которые генерируют команду 'on' (включить).@nЕсли пусто, все прошедшие предметы генерируют команду 'on'.
On Time=Вовремя
@ -1406,9 +1411,13 @@ right to left=справа налево
Doser=Дозатор
TA4 Doser=TA4 Дозатор
catalyst missing=отсутствует катализатор
output: silo expected=
output: tank expected=
reactor defect=дефект реактора
reactor defect or no power=дефект реактора или нет энергии
reactor has no power=у реактора нет энергии
waste: silo expected=
waste: tank expected=
wrong catalyst=неправильный катализатор
### ta4_doser.lua ###
@ -1496,7 +1505,6 @@ TA5 Teleport Block Items=TA5 Блок для телепортирования п
### terminal.lua ###
Syntax error, try help=Синтаксическая ошибка, попробуйте написать help
TA3 Terminal=TA3 Терминал
TA4 Terminal=TA4 Терминал
commands like: help=команды как: help
@ -1620,8 +1628,3 @@ Remove detector=Убрать детектор
TA4 Collider Detector Worker=TA4 Построитель детектора коллайдера
[TA4] Detector is being built!=[TA4] Детектор был построен!
[TA4] Detector is being removed!=[TA4] Детектор был удален!
### detector.lua ###
TA4 Collider Detector=TA4 Детектор коллайдера
TA4 Collider Detector Core=TA4 Ядро детектора коллайдера

View File

@ -1411,9 +1411,13 @@ right to left=
Doser=
TA4 Doser=
catalyst missing=
output: silo expected=
output: tank expected=
reactor defect=
reactor defect or no power=
reactor has no power=
waste: silo expected=
waste: tank expected=
wrong catalyst=
### ta4_doser.lua ###