built on 21/06/2020 10:21:23
This commit is contained in:
parent
25b5e3a76c
commit
e7445257b8
@ -39,6 +39,15 @@ Required: Minetest Game
|
|||||||
|
|
||||||
### History
|
### History
|
||||||
|
|
||||||
|
|
||||||
|
#### 2020-06-21
|
||||||
|
|
||||||
|
Updates (see local readme files):
|
||||||
|
- signs_bot v1.03
|
||||||
|
- techage v0.13
|
||||||
|
- hyperloop v2.06
|
||||||
|
|
||||||
|
|
||||||
#### 2020-06-18
|
#### 2020-06-18
|
||||||
|
|
||||||
- techage v0.12
|
- techage v0.12
|
||||||
|
@ -64,9 +64,9 @@ has some risks. Therefore:
|
|||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
The following can be changed in the minetest menu (Settings -> Advanced Settings -> Mods -> hyperloop) or directly in 'minetest.conf'
|
The following can be changed in the minetest menu (Settings -> Advanced Settings -> Mods -> hyperloop) or directly in 'minetest.conf'
|
||||||
* "WiFi block enabled" - To enable the usage of WiFi blocks
|
* "WiFi block enabled" - To enable the usage of WiFi blocks (default: false)
|
||||||
* "WiFi block crafting enabled" - To enable the crafting of WiFi blocks
|
* "WiFi block crafting enabled" - To enable the crafting of WiFi blocks (default: false)
|
||||||
* "free tube placement enabled" - If enabled Hyperloop Tubes and Elevator Shafts can be build in all directions.
|
* "free tube placement enabled" - If enabled Hyperloop Tubes and Elevator Shafts can be build in all directions (default: true)
|
||||||
When this option is disabled, Hyperloop tubes can only be built in the horizontal direction and elevator shafts in the vertical direction.
|
When this option is disabled, Hyperloop tubes can only be built in the horizontal direction and elevator shafts in the vertical direction.
|
||||||
|
|
||||||
Example for 'minetest.conf':
|
Example for 'minetest.conf':
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
Hyperloop Mod
|
Hyperloop Mod
|
||||||
=============
|
=============
|
||||||
|
|
||||||
v2.04 by JoSt
|
v2.06 by JoSt
|
||||||
|
|
||||||
Copyright (C) 2017-2019 Joachim Stolberg
|
Copyright (C) 2017-2019 Joachim Stolberg
|
||||||
|
|
||||||
@ -33,6 +33,7 @@
|
|||||||
2019-03-23 v2.03 Elevator duplication bugfix
|
2019-03-23 v2.03 Elevator duplication bugfix
|
||||||
2020-01-03 v2.04 Elevator door bugfix (MT 5+)
|
2020-01-03 v2.04 Elevator door bugfix (MT 5+)
|
||||||
2020-03-12 v2.05 minetest translator added (thanks to acmgit/Clyde)
|
2020-03-12 v2.05 minetest translator added (thanks to acmgit/Clyde)
|
||||||
|
2020-06-14 v2.06 The default value for `hyperloop_free_tube_placement_enabled` is now true
|
||||||
|
|
||||||
]]--
|
]]--
|
||||||
|
|
||||||
@ -63,7 +64,7 @@ else
|
|||||||
-- Configuration settings
|
-- Configuration settings
|
||||||
hyperloop.wifi_enabled = minetest.settings:get_bool("hyperloop_wifi_enabled")
|
hyperloop.wifi_enabled = minetest.settings:get_bool("hyperloop_wifi_enabled")
|
||||||
hyperloop.wifi_crafting_enabled = minetest.settings:get_bool("hyperloop_wifi_crafting_enabled")
|
hyperloop.wifi_crafting_enabled = minetest.settings:get_bool("hyperloop_wifi_crafting_enabled")
|
||||||
hyperloop.free_tube_placement_enabled = minetest.settings:get_bool("hyperloop_free_tube_placement_enabled")
|
hyperloop.free_tube_placement_enabled = minetest.settings:get_bool("hyperloop_free_tube_placement_enabled", true)
|
||||||
|
|
||||||
dofile(minetest.get_modpath("hyperloop") .. "/network.lua")
|
dofile(minetest.get_modpath("hyperloop") .. "/network.lua")
|
||||||
dofile(minetest.get_modpath("hyperloop") .. "/data_base.lua")
|
dofile(minetest.get_modpath("hyperloop") .. "/data_base.lua")
|
||||||
|
@ -166,4 +166,5 @@ optional: farming redo, node_io, doc, techage, minecart
|
|||||||
- 2020-01-02 v1.00 * bot inventory filter added, documentation enhanced
|
- 2020-01-02 v1.00 * bot inventory filter added, documentation enhanced
|
||||||
- 2020-03-27 v1.01 * flower command and sign added
|
- 2020-03-27 v1.01 * flower command and sign added
|
||||||
- 2020-03-30 v1.02 * Program flow control commands added
|
- 2020-03-30 v1.02 * Program flow control commands added
|
||||||
|
- 2020-06-21 v1.03 * Interpreter bugfixes, node and crop sensors changed
|
||||||
|
|
||||||
|
@ -46,9 +46,8 @@ local function node_timer(pos)
|
|||||||
if swap_node(pos, "signs_bot:crop_sensor_on") then
|
if swap_node(pos, "signs_bot:crop_sensor_on") then
|
||||||
signs_bot.send_signal(pos)
|
signs_bot.send_signal(pos)
|
||||||
signs_bot.lib.activate_extender_nodes(pos, true)
|
signs_bot.lib.activate_extender_nodes(pos, true)
|
||||||
|
minetest.after(1, swap_node, pos, "signs_bot:crop_sensor")
|
||||||
end
|
end
|
||||||
else
|
|
||||||
swap_node(pos, "signs_bot:crop_sensor")
|
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@ -118,8 +117,8 @@ minetest.register_node("signs_bot:crop_sensor_on", {
|
|||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
diggable = false,
|
drop = "signs_bot:crop_sensor",
|
||||||
groups = {sign_bot_sensor = 1, not_in_creative_inventory = 1},
|
groups = {sign_bot_sensor = 1, cracky = 1, not_in_creative_inventory = 1},
|
||||||
sounds = default.node_sound_metal_defaults(),
|
sounds = default.node_sound_metal_defaults(),
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -152,7 +151,7 @@ if minetest.get_modpath("doc") then
|
|||||||
data = {
|
data = {
|
||||||
item = "signs_bot:crop_sensor",
|
item = "signs_bot:crop_sensor",
|
||||||
text = table.concat({
|
text = table.concat({
|
||||||
I("The Crop Sensor sends a signal when, for example wheat is fully grown."),
|
I("The Crop Sensor sends cyclical signals when, for example, wheat is fully grown."),
|
||||||
I("The sensor range is one node/meter."),
|
I("The sensor range is one node/meter."),
|
||||||
I("The sensor has an active side (red) that must point to the crop/field."),
|
I("The sensor has an active side (red) that must point to the crop/field."),
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
signs_bot = {}
|
signs_bot = {}
|
||||||
|
|
||||||
-- Version for compatibility checks, see readme.md/history
|
-- Version for compatibility checks, see readme.md/history
|
||||||
signs_bot.version = 1.01
|
signs_bot.version = 1.03
|
||||||
|
|
||||||
if minetest.global_exists("techage") and techage.version < 0.06 then
|
if minetest.global_exists("techage") and techage.version < 0.06 then
|
||||||
minetest.log("error", "[signs_bot] Signs Bot requires techage version 0.06 or newer!")
|
minetest.log("error", "[signs_bot] Signs Bot requires techage version 0.06 or newer!")
|
||||||
|
@ -49,7 +49,7 @@ local function get_line_tokens(script)
|
|||||||
while idx < #lines do
|
while idx < #lines do
|
||||||
idx = idx + 1
|
idx = idx + 1
|
||||||
-- remove comments
|
-- remove comments
|
||||||
local line = string.split(lines[idx], "--")[1] or ""
|
local line = string.split(lines[idx], "--", true, 1)[1] or ""
|
||||||
-- remove blanks
|
-- remove blanks
|
||||||
line = trim(line)
|
line = trim(line)
|
||||||
if #line > 0 then
|
if #line > 0 then
|
||||||
@ -255,10 +255,6 @@ function api.check_script(script)
|
|||||||
return false, I("'repeat' missing"), 0
|
return false, I("'repeat' missing"), 0
|
||||||
elseif (tbl["end"] or 0) < (tbl["repeat"] or 0) then
|
elseif (tbl["end"] or 0) < (tbl["repeat"] or 0) then
|
||||||
return false, I("'end' missing"), 0
|
return false, I("'end' missing"), 0
|
||||||
elseif (tbl["call"] or 0) > (tbl["return"] or 0) then
|
|
||||||
return false, I("'return' missing"), 0
|
|
||||||
elseif (tbl["call"] or 0) < (tbl["return"] or 0) then
|
|
||||||
return false, I("'call' missing"), 0
|
|
||||||
end
|
end
|
||||||
return true, I("Checked and approved"), 0
|
return true, I("Checked and approved"), 0
|
||||||
end
|
end
|
||||||
|
@ -71,16 +71,12 @@ local function any_node_changed(pos)
|
|||||||
|
|
||||||
if mem.num ~= num then
|
if mem.num ~= num then
|
||||||
if mem.mode == 1 and num < mem.num then
|
if mem.mode == 1 and num < mem.num then
|
||||||
mem.num = num
|
|
||||||
return true
|
return true
|
||||||
elseif mem.mode == 2 and num > mem.num then
|
elseif mem.mode == 2 and num > mem.num then
|
||||||
mem.num = num
|
|
||||||
return true
|
return true
|
||||||
elseif mem.mode == 3 then
|
elseif mem.mode == 3 then
|
||||||
mem.num = num
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
mem.num = num
|
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
@ -93,6 +89,9 @@ local function on_receive_fields(pos, formname, fields, player)
|
|||||||
end
|
end
|
||||||
if fields.accept then
|
if fields.accept then
|
||||||
mem.mode = DropdownValues[fields.mode] or 3
|
mem.mode = DropdownValues[fields.mode] or 3
|
||||||
|
mem.num = nil
|
||||||
|
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||||
|
swap_node(pos, "signs_bot:node_sensor")
|
||||||
end
|
end
|
||||||
meta:set_string("formspec", formspec(mem))
|
meta:set_string("formspec", formspec(mem))
|
||||||
end
|
end
|
||||||
@ -102,9 +101,8 @@ local function node_timer(pos)
|
|||||||
if swap_node(pos, "signs_bot:node_sensor_on") then
|
if swap_node(pos, "signs_bot:node_sensor_on") then
|
||||||
signs_bot.send_signal(pos)
|
signs_bot.send_signal(pos)
|
||||||
signs_bot.lib.activate_extender_nodes(pos, true)
|
signs_bot.lib.activate_extender_nodes(pos, true)
|
||||||
|
minetest.after(1, swap_node, pos, "signs_bot:node_sensor")
|
||||||
end
|
end
|
||||||
else
|
|
||||||
swap_node(pos, "signs_bot:node_sensor")
|
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@ -172,13 +170,14 @@ minetest.register_node("signs_bot:node_sensor_on", {
|
|||||||
|
|
||||||
on_timer = node_timer,
|
on_timer = node_timer,
|
||||||
update_infotext = update_infotext,
|
update_infotext = update_infotext,
|
||||||
|
on_receive_fields = on_receive_fields,
|
||||||
on_rotate = screwdriver.disallow,
|
on_rotate = screwdriver.disallow,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
diggable = false,
|
drop = "signs_bot:node_sensor",
|
||||||
groups = {sign_bot_sensor = 1, not_in_creative_inventory = 1},
|
groups = {sign_bot_sensor = 1, cracky = 1, not_in_creative_inventory = 1},
|
||||||
sounds = default.node_sound_metal_defaults(),
|
sounds = default.node_sound_metal_defaults(),
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -211,7 +210,7 @@ if minetest.get_modpath("doc") then
|
|||||||
data = {
|
data = {
|
||||||
item = "signs_bot:node_sensor",
|
item = "signs_bot:node_sensor",
|
||||||
text = table.concat({
|
text = table.concat({
|
||||||
I("The node sensor can send a signal when it detects that nodes appear or disappear,"),
|
I("The node sensor sends cyclical signals when it detects that nodes have appeared or disappeared,"),
|
||||||
I("but has to be configured accordingly."),
|
I("but has to be configured accordingly."),
|
||||||
I("Valid nodes are all kind of blocks and plants."),
|
I("Valid nodes are all kind of blocks and plants."),
|
||||||
I("The sensor range is 3 nodes/meters in one direction."),
|
I("The sensor range is 3 nodes/meters in one direction."),
|
||||||
|
@ -35,7 +35,7 @@ Textures: CC BY-SA 3.0
|
|||||||
### Dependencies
|
### Dependencies
|
||||||
Required: default, doors, bucket, stairs, screwdriver, basic_materials, tubelib2, minecart, lcdlib, safer_lua
|
Required: default, doors, bucket, stairs, screwdriver, basic_materials, tubelib2, minecart, lcdlib, safer_lua
|
||||||
Recommended: signs_bot, hyperloop, compost, techpack_stairway, autobahn
|
Recommended: signs_bot, hyperloop, compost, techpack_stairway, autobahn
|
||||||
Optional: unified_inventory, wielded_light, unifieddyes, lua-mashal, lsqlite3, moreores
|
Optional: unified_inventory, wielded_light, unifieddyes, lua-mashal, lsqlite3, moreores, ethereal, mesecon
|
||||||
|
|
||||||
|
|
||||||
The mods `default`, `doors`, `bucket`, `stairs`, and `screwdriver` are part of Minetest Game.
|
The mods `default`, `doors`, `bucket`, `stairs`, and `screwdriver` are part of Minetest Game.
|
||||||
@ -90,4 +90,5 @@ to 'lsqlite3' and 'lua-marshal', but there is no way back, so:
|
|||||||
- 2020-06-04 V0.10 * minor changes and bugfixes
|
- 2020-06-04 V0.10 * minor changes and bugfixes
|
||||||
- 2020-06-14 V0.11 * cart commands added for both controllers, support for moreores added
|
- 2020-06-14 V0.11 * cart commands added for both controllers, support for moreores added
|
||||||
- 2020-06-17 V0.12 * Ethereal support added, manual correction, tin ingot recipe bugfix
|
- 2020-06-17 V0.12 * Ethereal support added, manual correction, tin ingot recipe bugfix
|
||||||
|
- 2020-06-19 V0.13 * Mesecons Converter added
|
||||||
|
|
||||||
|
@ -182,13 +182,7 @@ end
|
|||||||
local function empty_on_punch(pos, nvm, full_container, item_count)
|
local function empty_on_punch(pos, nvm, full_container, item_count)
|
||||||
nvm.liquid = nvm.liquid or {}
|
nvm.liquid = nvm.liquid or {}
|
||||||
nvm.liquid.amount = nvm.liquid.amount or 0
|
nvm.liquid.amount = nvm.liquid.amount or 0
|
||||||
local lqd_def
|
local lqd_def = get_liquid_def(full_container)
|
||||||
-- handle legacy items
|
|
||||||
if IsLiquid[full_container] then
|
|
||||||
lqd_def = {inv_item = full_container, size = (item_count or 1), container = ""}
|
|
||||||
else
|
|
||||||
lqd_def = get_liquid_def(full_container)
|
|
||||||
end
|
|
||||||
local ndef_lqd = LQD(pos)
|
local ndef_lqd = LQD(pos)
|
||||||
if lqd_def and ndef_lqd then
|
if lqd_def and ndef_lqd then
|
||||||
local tank_size = ndef_lqd.capa or 0
|
local tank_size = ndef_lqd.capa or 0
|
||||||
|
@ -111,6 +111,7 @@ techage.Items = {
|
|||||||
ta3_drill_pipe_wrench = "techage:ta3_drill_pipe_wrench",
|
ta3_drill_pipe_wrench = "techage:ta3_drill_pipe_wrench",
|
||||||
ta3_pipe = "techage:ta3_pipeS",
|
ta3_pipe = "techage:ta3_pipeS",
|
||||||
ta3_pipe_wall_entry = "techage:ta3_pipe_wall_entry",
|
ta3_pipe_wall_entry = "techage:ta3_pipe_wall_entry",
|
||||||
|
ta3_mesecons_converter = "techage:ta3_mesecons_converter",
|
||||||
----------------------------
|
----------------------------
|
||||||
techage_ta4 = "techage_ta4.png",
|
techage_ta4 = "techage_ta4.png",
|
||||||
ta4_windturbine = "techage:ta4_wind_turbine",
|
ta4_windturbine = "techage:ta4_wind_turbine",
|
||||||
|
@ -99,6 +99,7 @@ techage.manual_DE.aTitel = {
|
|||||||
"3,TechAge Signallampe / Signal Lamp",
|
"3,TechAge Signallampe / Signal Lamp",
|
||||||
"3,Tür/Tor Blöcke / Door/Gate Blocks",
|
"3,Tür/Tor Blöcke / Door/Gate Blocks",
|
||||||
"3,TA3 Tür Controller / Door Controller",
|
"3,TA3 Tür Controller / Door Controller",
|
||||||
|
"3,TA3 Mesecons Umsetzer / TA3 Mesecons Converter",
|
||||||
"2,Detektoren",
|
"2,Detektoren",
|
||||||
"3,TA3 Detektor / Detector",
|
"3,TA3 Detektor / Detector",
|
||||||
"3,TA3 Wagen Detektor / Cart Detector",
|
"3,TA3 Wagen Detektor / Cart Detector",
|
||||||
@ -934,6 +935,13 @@ techage.manual_DE.aText = {
|
|||||||
"\n"..
|
"\n"..
|
||||||
"\n"..
|
"\n"..
|
||||||
"\n",
|
"\n",
|
||||||
|
"Der Mesecons Umsetzer dient zur Umwandlung von Techage on/off Kommandos in Mesecons Signale und umgekehrt.\n"..
|
||||||
|
"Dazu müssen eine oder mehrere Knotennummern eingegeben und der Konverter mit Mesecons Blöcken \n"..
|
||||||
|
"über Mesecons Leitungen verbunden werden. Den Mesecons Umsetzer kann man auch mit dem Programmer konfigurieren.\n"..
|
||||||
|
"Der Mesecons Umsetzer akzeptiert bis zu 5 Kommandos pro Sekunde\\, bei höherer Belastung schaltet er sich ab.\n"..
|
||||||
|
"\n"..
|
||||||
|
"\n"..
|
||||||
|
"\n",
|
||||||
"Detektoren scannen ihre Umgebung ab und senden ein 'on'-Kommando\\, wenn das Gesuchte erkannt wurde.\n"..
|
"Detektoren scannen ihre Umgebung ab und senden ein 'on'-Kommando\\, wenn das Gesuchte erkannt wurde.\n"..
|
||||||
"\n"..
|
"\n"..
|
||||||
"\n"..
|
"\n"..
|
||||||
@ -1566,6 +1574,7 @@ techage.manual_DE.aItemName = {
|
|||||||
"ta3_signallamp",
|
"ta3_signallamp",
|
||||||
"ta3_doorblock",
|
"ta3_doorblock",
|
||||||
"ta3_doorcontroller",
|
"ta3_doorcontroller",
|
||||||
|
"ta3_mesecons_converter",
|
||||||
"ta3_nodedetector",
|
"ta3_nodedetector",
|
||||||
"ta3_detector",
|
"ta3_detector",
|
||||||
"ta3_cartdetector",
|
"ta3_cartdetector",
|
||||||
@ -1771,6 +1780,7 @@ techage.manual_DE.aPlanTable = {
|
|||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
|
"",
|
||||||
"ta4_windturbine",
|
"ta4_windturbine",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
|
@ -99,6 +99,7 @@ techage.manual_EN.aTitel = {
|
|||||||
"3,TechAge Signal Lamp",
|
"3,TechAge Signal Lamp",
|
||||||
"3,Door/Gate Blocks",
|
"3,Door/Gate Blocks",
|
||||||
"3,TA3 Door Controller",
|
"3,TA3 Door Controller",
|
||||||
|
"3,TA3 Mesecons Converter",
|
||||||
"2,Detectors",
|
"2,Detectors",
|
||||||
"3,TA3 Detector",
|
"3,TA3 Detector",
|
||||||
"3,TA3 Cart Detector",
|
"3,TA3 Cart Detector",
|
||||||
@ -932,6 +933,13 @@ techage.manual_EN.aText = {
|
|||||||
"\n"..
|
"\n"..
|
||||||
"\n"..
|
"\n"..
|
||||||
"\n",
|
"\n",
|
||||||
|
"The Mesecons converter is used to convert Techage on/off commands into Mesecons signals and vice versa.\n"..
|
||||||
|
"To do this\\, one or more node numbers must be entered and the converter with Mesecons blocks\n"..
|
||||||
|
"has to be connected via Mesecons cables. The Mesecons converter can also be configured with the programmer.\n"..
|
||||||
|
"The Mesecons converter accepts up to 5 commands per second\\; it switches itself off at higher loads.\n"..
|
||||||
|
"\n"..
|
||||||
|
"\n"..
|
||||||
|
"\n",
|
||||||
"Detectors scan their surroundings and send an 'on' command when the search is recognized.\n"..
|
"Detectors scan their surroundings and send an 'on' command when the search is recognized.\n"..
|
||||||
"\n"..
|
"\n"..
|
||||||
"\n"..
|
"\n"..
|
||||||
@ -1556,6 +1564,7 @@ techage.manual_EN.aItemName = {
|
|||||||
"ta3_signallamp",
|
"ta3_signallamp",
|
||||||
"ta3_doorblock",
|
"ta3_doorblock",
|
||||||
"ta3_doorcontroller",
|
"ta3_doorcontroller",
|
||||||
|
"ta3_mesecons_converter",
|
||||||
"ta3_nodedetector",
|
"ta3_nodedetector",
|
||||||
"ta3_detector",
|
"ta3_detector",
|
||||||
"ta3_cartdetector",
|
"ta3_cartdetector",
|
||||||
@ -1761,6 +1770,7 @@ techage.manual_EN.aPlanTable = {
|
|||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
|
"",
|
||||||
"ta4_windturbine",
|
"ta4_windturbine",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
techage = {}
|
techage = {}
|
||||||
|
|
||||||
-- Version for compatibility checks, see readme.md/history
|
-- Version for compatibility checks, see readme.md/history
|
||||||
techage.version = 0.12
|
techage.version = 0.13
|
||||||
|
|
||||||
if minetest.global_exists("tubelib") then
|
if minetest.global_exists("tubelib") then
|
||||||
minetest.log("error", "[techage] Techage can't be used together with the mod tubelib!")
|
minetest.log("error", "[techage] Techage can't be used together with the mod tubelib!")
|
||||||
@ -223,6 +223,9 @@ dofile(MP.."/logic/gateblock.lua")
|
|||||||
dofile(MP.."/logic/doorblock.lua")
|
dofile(MP.."/logic/doorblock.lua")
|
||||||
dofile(MP.."/logic/doorcontroller.lua")
|
dofile(MP.."/logic/doorcontroller.lua")
|
||||||
dofile(MP.."/logic/collector.lua")
|
dofile(MP.."/logic/collector.lua")
|
||||||
|
if minetest.global_exists("mesecon") then
|
||||||
|
dofile(MP.."/logic/mesecons_converter.lua")
|
||||||
|
end
|
||||||
|
|
||||||
-- Test
|
-- Test
|
||||||
dofile(MP.."/recipe_checker.lua")
|
dofile(MP.."/recipe_checker.lua")
|
||||||
|
@ -43,8 +43,9 @@ minetest.register_ore({
|
|||||||
y_max = -250,
|
y_max = -250,
|
||||||
})
|
})
|
||||||
|
|
||||||
techage.furnace.register_recipe({
|
minetest.register_craft({
|
||||||
|
type = 'cooking',
|
||||||
output = 'techage:baborium_ingot',
|
output = 'techage:baborium_ingot',
|
||||||
recipe = {'techage:baborium_lump'},
|
recipe = 'techage:baborium_lump',
|
||||||
time = 3,
|
cooktime = 5,
|
||||||
})
|
})
|
@ -31,7 +31,6 @@ minetest.register_craftitem("techage:cylinder_large_hydrogen", {
|
|||||||
stack_max = 1,
|
stack_max = 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
techage.register_liquid("techage:hydrogen", "", 1, "techage:hydrogen")
|
|
||||||
techage.register_liquid("techage:cylinder_small_hydrogen", "techage:ta3_cylinder_small", 1, "techage:hydrogen")
|
techage.register_liquid("techage:cylinder_small_hydrogen", "techage:ta3_cylinder_small", 1, "techage:hydrogen")
|
||||||
techage.register_liquid("techage:cylinder_large_hydrogen", "techage:ta3_cylinder_large", 6, "techage:hydrogen")
|
techage.register_liquid("techage:cylinder_large_hydrogen", "techage:ta3_cylinder_large", 6, "techage:hydrogen")
|
||||||
|
|
||||||
|
@ -132,6 +132,5 @@ minetest.register_craftitem("techage:ta3_canister_oil", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
techage.register_liquid("techage:bucket_oil", "bucket:bucket_empty", 1, "techage:oil_source")
|
techage.register_liquid("techage:bucket_oil", "bucket:bucket_empty", 1, "techage:oil_source")
|
||||||
techage.register_liquid("techage:oil_source", "", 1, "techage:oil_source")
|
|
||||||
techage.register_liquid("techage:ta3_barrel_oil", "techage:ta3_barrel_empty", 10, "techage:oil_source")
|
techage.register_liquid("techage:ta3_barrel_oil", "techage:ta3_barrel_empty", 10, "techage:oil_source")
|
||||||
techage.register_liquid("techage:ta3_canister_oil", "techage:ta3_canister_empty", 1, "techage:oil_source")
|
techage.register_liquid("techage:ta3_canister_oil", "techage:ta3_canister_empty", 1, "techage:oil_source")
|
||||||
|
@ -215,6 +215,7 @@ TA1 Melting Pot=TA1 Schmelztiegel
|
|||||||
TA1 Meridium Hammer (smash stone to gravel)=TA1 Meridiumhammer (zerschlage Stein zu Kies)
|
TA1 Meridium Hammer (smash stone to gravel)=TA1 Meridiumhammer (zerschlage Stein zu Kies)
|
||||||
TA1 Mese Hammer (smash stone to gravel)=TA1 Mesehammer (zerschlage Stein zu Kies)
|
TA1 Mese Hammer (smash stone to gravel)=TA1 Mesehammer (zerschlage Stein zu Kies)
|
||||||
TA1 Steel Hammer (smash stone to gravel)=TA1 Stahlhammer (zerschlage Stein zu Kies)
|
TA1 Steel Hammer (smash stone to gravel)=TA1 Stahlhammer (zerschlage Stein zu Kies)
|
||||||
|
TA1 Stone Hammer (smash stone to gravel)=TA1 Steinhammer (zerschlage Stein zu Kies)
|
||||||
TA2 Boiler Base=TA2 Boiler unten
|
TA2 Boiler Base=TA2 Boiler unten
|
||||||
TA2 Boiler Top=TA2 Boiler oben
|
TA2 Boiler Top=TA2 Boiler oben
|
||||||
TA2 Cylinder=TA2 Zylinder
|
TA2 Cylinder=TA2 Zylinder
|
||||||
@ -261,6 +262,7 @@ TA3 Generator=TA3 Generator
|
|||||||
TA3 Gravel Sieve=TA3 Kiessieb
|
TA3 Gravel Sieve=TA3 Kiessieb
|
||||||
TA3 Logic Block=TA3 Logikblock
|
TA3 Logic Block=TA3 Logikblock
|
||||||
TA3 Melting=TA3 Schmelzen
|
TA3 Melting=TA3 Schmelzen
|
||||||
|
TA3 Mesecons Converter=TA3 Mesecons Konverter
|
||||||
TA3 Naphtha=TA3 Naphtha
|
TA3 Naphtha=TA3 Naphtha
|
||||||
TA3 Naphtha Barrel=TA3 Naphtha-Fass
|
TA3 Naphtha Barrel=TA3 Naphtha-Fass
|
||||||
TA3 Naphtha Canister=TA3 Naphtha-Kanister
|
TA3 Naphtha Canister=TA3 Naphtha-Kanister
|
||||||
|
@ -213,6 +213,7 @@ TA1 Melting Pot=
|
|||||||
TA1 Meridium Hammer (smash stone to gravel)=
|
TA1 Meridium Hammer (smash stone to gravel)=
|
||||||
TA1 Mese Hammer (smash stone to gravel)=
|
TA1 Mese Hammer (smash stone to gravel)=
|
||||||
TA1 Steel Hammer (smash stone to gravel)=
|
TA1 Steel Hammer (smash stone to gravel)=
|
||||||
|
TA1 Stone Hammer (smash stone to gravel)=
|
||||||
TA2 Boiler Base=
|
TA2 Boiler Base=
|
||||||
TA2 Boiler Top=
|
TA2 Boiler Top=
|
||||||
TA2 Cylinder=
|
TA2 Cylinder=
|
||||||
@ -259,6 +260,7 @@ TA3 Generator=
|
|||||||
TA3 Gravel Sieve=
|
TA3 Gravel Sieve=
|
||||||
TA3 Logic Block=
|
TA3 Logic Block=
|
||||||
TA3 Melting=
|
TA3 Melting=
|
||||||
|
TA3 Mesecons Converter=
|
||||||
TA3 Naphtha=
|
TA3 Naphtha=
|
||||||
TA3 Naphtha Barrel=
|
TA3 Naphtha Barrel=
|
||||||
TA3 Naphtha Canister=
|
TA3 Naphtha Canister=
|
||||||
|
147
techage/logic/mesecons_converter.lua
Normal file
147
techage/logic/mesecons_converter.lua
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
--[[
|
||||||
|
|
||||||
|
TechAge
|
||||||
|
=======
|
||||||
|
|
||||||
|
Copyright (C) 2017-2020 Joachim Stolberg
|
||||||
|
|
||||||
|
GPL v3
|
||||||
|
See LICENSE.txt for more information
|
||||||
|
|
||||||
|
Mesecons converter
|
||||||
|
|
||||||
|
]]--
|
||||||
|
|
||||||
|
-- for lazy programmers
|
||||||
|
local M = minetest.get_meta
|
||||||
|
local S = techage.S
|
||||||
|
|
||||||
|
local logic = techage.logic
|
||||||
|
local OVER_LOAD_MAX = 10
|
||||||
|
local CYCLE_TIME = 2
|
||||||
|
|
||||||
|
local function formspec(meta)
|
||||||
|
local numbers = meta:get_string("numbers") or ""
|
||||||
|
return "size[7.5,3]"..
|
||||||
|
"field[0.5,1;7,1;numbers;"..S("Insert destination node number(s)")..";"..numbers.."]" ..
|
||||||
|
"button_exit[2,2;3,1;exit;"..S("Save").."]"
|
||||||
|
end
|
||||||
|
|
||||||
|
local function send_message(pos, topic)
|
||||||
|
local meta = M(pos)
|
||||||
|
local mem = techage.get_mem(pos)
|
||||||
|
mem.overload_cnt = (mem.overload_cnt or 0) + 1
|
||||||
|
if mem.overload_cnt > OVER_LOAD_MAX then
|
||||||
|
logic.infotext(M(pos), S("TA3 Mesecons Converter"), "fault (overloaded)")
|
||||||
|
minetest.get_node_timer(pos):stop()
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
local own_num = meta:get_string("node_number")
|
||||||
|
local numbers = meta:get_string("numbers")
|
||||||
|
techage.send_multi(own_num, numbers, topic)
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_node("techage:ta3_mesecons_converter", {
|
||||||
|
description = S("TA3 Mesecons Converter"),
|
||||||
|
tiles = {
|
||||||
|
-- up, down, right, left, back, front
|
||||||
|
"techage_filling_ta3.png^techage_frame_ta3_top.png",
|
||||||
|
"techage_filling_ta3.png^techage_frame_ta3_top.png",
|
||||||
|
"techage_filling_ta3.png^techage_frame_ta3.png^techage_appl_mesecons_converter.png",
|
||||||
|
},
|
||||||
|
|
||||||
|
after_place_node = function(pos, placer)
|
||||||
|
local meta = M(pos)
|
||||||
|
local mem = techage.get_mem(pos)
|
||||||
|
logic.after_place_node(pos, placer, "techage:ta3_mesecons_converter", S("TA3 Mesecons Converter"))
|
||||||
|
logic.infotext(meta, S("TA3 Mesecons Converter"))
|
||||||
|
meta:set_string("formspec", formspec(meta))
|
||||||
|
mem.overload_cnt = 0
|
||||||
|
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||||
|
mesecon.on_placenode(pos, minetest.get_node(pos))
|
||||||
|
end,
|
||||||
|
|
||||||
|
on_receive_fields = function(pos, formname, fields, player)
|
||||||
|
if minetest.is_protected(pos, player:get_player_name()) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local meta = M(pos)
|
||||||
|
if techage.check_numbers(fields.numbers, player:get_player_name()) then
|
||||||
|
meta:set_string("numbers", fields.numbers)
|
||||||
|
logic.infotext(M(pos), S("TA3 Mesecons Converter"))
|
||||||
|
meta:set_string("formspec", formspec(meta))
|
||||||
|
end
|
||||||
|
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||||
|
end,
|
||||||
|
|
||||||
|
on_timer = function(pos,elapsed)
|
||||||
|
local mem = techage.get_mem(pos)
|
||||||
|
mem.overload_cnt = 0
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
|
||||||
|
techage_set_numbers = function(pos, numbers, player_name)
|
||||||
|
local meta = M(pos)
|
||||||
|
local res = logic.set_numbers(pos, numbers, player_name, S("TA3 Mesecons Converter"))
|
||||||
|
meta:set_string("formspec", formspec(meta))
|
||||||
|
return res
|
||||||
|
end,
|
||||||
|
|
||||||
|
mesecons = {
|
||||||
|
receptor = {
|
||||||
|
state = mesecon.state.off,
|
||||||
|
rules = mesecon.rules.default,
|
||||||
|
},
|
||||||
|
effector = {
|
||||||
|
rules = mesecon.rules.default,
|
||||||
|
action_on = function(pos, node)
|
||||||
|
send_message(pos, "on")
|
||||||
|
end,
|
||||||
|
action_off = function(pos, node)
|
||||||
|
send_message(pos, "off")
|
||||||
|
end,
|
||||||
|
action_change = function(pos, node)
|
||||||
|
send_message(pos, "change")
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
after_dig_node = function(pos, oldnode, oldmetadata)
|
||||||
|
techage.remove_node(pos, oldnode, oldmetadata)
|
||||||
|
techage.del_mem(pos)
|
||||||
|
mesecon.on_dignode(pos, oldnode)
|
||||||
|
end,
|
||||||
|
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
groups = {choppy=2, cracky=2, crumbly=2},
|
||||||
|
is_ground_content = false,
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "techage:ta3_mesecons_converter",
|
||||||
|
recipe = {
|
||||||
|
{"techage:ta3_repeater", "mesecons:wire_00000000_off"},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
techage.register_node({"techage:ta3_mesecons_converter"}, {
|
||||||
|
on_recv_message = function(pos, src, topic, payload)
|
||||||
|
local mem = techage.get_mem(pos)
|
||||||
|
mem.overload_cnt = (mem.overload_cnt or 0) + 1
|
||||||
|
if mem.overload_cnt > OVER_LOAD_MAX then
|
||||||
|
logic.infotext(M(pos), S("TA3 Mesecons Converter"), "fault (overloaded)")
|
||||||
|
minetest.get_node_timer(pos):stop()
|
||||||
|
return false
|
||||||
|
elseif topic == "on" then
|
||||||
|
mesecon.receptor_on(pos, mesecon.rules.default)
|
||||||
|
elseif topic == "off" then
|
||||||
|
mesecon.receptor_off(pos, mesecon.rules.default)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
on_node_load = function(pos)
|
||||||
|
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||||
|
end,
|
||||||
|
})
|
@ -592,6 +592,14 @@ Der Tür Controller dient zur Ansteuerung der TA3 Tür/Tor Blöcke. Beim Tür Co
|
|||||||
|
|
||||||
[ta3_doorcontroller|image]
|
[ta3_doorcontroller|image]
|
||||||
|
|
||||||
|
### TA3 Mesecons Umsetzer / TA3 Mesecons Converter
|
||||||
|
|
||||||
|
Der Mesecons Umsetzer dient zur Umwandlung von Techage on/off Kommandos in Mesecons Signale und umgekehrt.
|
||||||
|
Dazu müssen eine oder mehrere Knotennummern eingegeben und der Konverter mit Mesecons Blöcken
|
||||||
|
über Mesecons Leitungen verbunden werden. Den Mesecons Umsetzer kann man auch mit dem Programmer konfigurieren.
|
||||||
|
Der Mesecons Umsetzer akzeptiert bis zu 5 Kommandos pro Sekunde, bei höherer Belastung schaltet er sich ab.
|
||||||
|
|
||||||
|
[ta3_mesecons_converter|image]
|
||||||
|
|
||||||
|
|
||||||
## Detektoren
|
## Detektoren
|
||||||
|
@ -590,6 +590,16 @@ The door controller is used to control the TA3 door/gate blocks. With the door c
|
|||||||
[ta3_doorcontroller|image]
|
[ta3_doorcontroller|image]
|
||||||
|
|
||||||
|
|
||||||
|
### TA3 Mesecons Converter
|
||||||
|
|
||||||
|
The Mesecons converter is used to convert Techage on/off commands into Mesecons signals and vice versa.
|
||||||
|
To do this, one or more node numbers must be entered and the converter with Mesecons blocks
|
||||||
|
has to be connected via Mesecons cables. The Mesecons converter can also be configured with the programmer.
|
||||||
|
The Mesecons converter accepts up to 5 commands per second; it switches itself off at higher loads.
|
||||||
|
|
||||||
|
[ta3_mesecons_converter|image]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Detectors
|
## Detectors
|
||||||
|
|
||||||
|
@ -98,6 +98,7 @@
|
|||||||
- [TechAge Signallampe / Signal Lamp](./manual_ta3_DE.md#techage-signallampe--signal-lamp)
|
- [TechAge Signallampe / Signal Lamp](./manual_ta3_DE.md#techage-signallampe--signal-lamp)
|
||||||
- [Tür/Tor Blöcke / Door/Gate Blocks](./manual_ta3_DE.md#türtor-blöcke--doorgate-blocks)
|
- [Tür/Tor Blöcke / Door/Gate Blocks](./manual_ta3_DE.md#türtor-blöcke--doorgate-blocks)
|
||||||
- [TA3 Tür Controller / Door Controller](./manual_ta3_DE.md#ta3-tür-controller--door-controller)
|
- [TA3 Tür Controller / Door Controller](./manual_ta3_DE.md#ta3-tür-controller--door-controller)
|
||||||
|
- [TA3 Mesecons Umsetzer / TA3 Mesecons Converter](./manual_ta3_DE.md#ta3-mesecons-umsetzer--ta3-mesecons-converter)
|
||||||
- [Detektoren](./manual_ta3_DE.md#detektoren)
|
- [Detektoren](./manual_ta3_DE.md#detektoren)
|
||||||
- [TA3 Detektor / Detector](./manual_ta3_DE.md#ta3-detektor--detector)
|
- [TA3 Detektor / Detector](./manual_ta3_DE.md#ta3-detektor--detector)
|
||||||
- [TA3 Wagen Detektor / Cart Detector](./manual_ta3_DE.md#ta3-wagen-detektor--cart-detector)
|
- [TA3 Wagen Detektor / Cart Detector](./manual_ta3_DE.md#ta3-wagen-detektor--cart-detector)
|
||||||
|
@ -98,6 +98,7 @@
|
|||||||
- [TechAge Signal Lamp](./manual_ta3_EN.md#techage-signal-lamp)
|
- [TechAge Signal Lamp](./manual_ta3_EN.md#techage-signal-lamp)
|
||||||
- [Door/Gate Blocks](./manual_ta3_EN.md#doorgate-blocks)
|
- [Door/Gate Blocks](./manual_ta3_EN.md#doorgate-blocks)
|
||||||
- [TA3 Door Controller](./manual_ta3_EN.md#ta3-door-controller)
|
- [TA3 Door Controller](./manual_ta3_EN.md#ta3-door-controller)
|
||||||
|
- [TA3 Mesecons Converter](./manual_ta3_EN.md#ta3-mesecons-converter)
|
||||||
- [Detectors](./manual_ta3_EN.md#detectors)
|
- [Detectors](./manual_ta3_EN.md#detectors)
|
||||||
- [TA3 Detector](./manual_ta3_EN.md#ta3-detector)
|
- [TA3 Detector](./manual_ta3_EN.md#ta3-detector)
|
||||||
- [TA3 Cart Detector](./manual_ta3_EN.md#ta3-cart-detector)
|
- [TA3 Cart Detector](./manual_ta3_EN.md#ta3-cart-detector)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
name = techage
|
name = techage
|
||||||
depends = default,doors,tubelib2,basic_materials,bucket,stairs,screwdriver,minecart,lcdlib,safer_lua
|
depends = default,doors,tubelib2,basic_materials,bucket,stairs,screwdriver,minecart,lcdlib,safer_lua
|
||||||
optional_depends = unified_inventory,wielded_light,unifieddyes,moreores, ethereal
|
optional_depends = unified_inventory,wielded_light,unifieddyes,moreores,ethereal,mesecon
|
||||||
description = Techage, go through 4 tech ages in search of wealth and power!
|
description = Techage, go through 4 tech ages in search of wealth and power!
|
||||||
|
BIN
techage/textures/techage_appl_mesecons_converter.png
Normal file
BIN
techage/textures/techage_appl_mesecons_converter.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 301 B |
Loading…
Reference in New Issue
Block a user