From 1169e46dbf6217aa32de4b4f081a00f825ce5484 Mon Sep 17 00:00:00 2001 From: Joachim Stolberg Date: Tue, 9 May 2023 18:41:56 +0200 Subject: [PATCH] built on 09/05/2023 18:41:56 --- hyperloop/init.lua | 11 +- hyperloop/mod.conf | 2 +- minecart/README.md | 4 +- signs_bot/basis.lua | 1 + signs_bot/compost.lua | 2 +- signs_bot/doc.lua | 27 ++- signs_bot/mod.conf | 2 +- ta4_jetpack/markdown2lua.py | 2 +- techage/README.md | 43 +++- techage/api.md | 216 ++++++++++++++++++++ techage/basic_machines/autocrafter.lua | 6 +- techage/basic_machines/consumer.lua | 2 +- techage/basic_machines/distributor.lua | 2 +- techage/basic_machines/electronic_fab.lua | 6 +- techage/basic_machines/forceload.lua | 6 +- techage/basic_machines/gravelrinser.lua | 2 +- techage/basic_machines/gravelsieve.lua | 2 +- techage/basic_machines/grinder.lua | 2 +- techage/basic_machines/liquidsampler.lua | 2 +- techage/basic_machines/pusher.lua | 7 +- techage/basic_machines/quarry.lua | 4 +- techage/basic_machines/recycler.lua | 2 +- techage/basic_machines/ta4_injector.lua | 4 +- techage/basic_machines/ta5_chest.lua | 24 ++- techage/basis/boiler_lib.lua | 20 +- techage/basis/fly_lib.lua | 124 ++++++++--- techage/basis/gravel_lib.lua | 10 +- techage/basis/liquid_lib.lua | 3 + techage/basis/windturbine_lib.lua | 10 +- techage/chemistry/ta4_doser.lua | 2 +- techage/coal_power_station/cooler.lua | 8 +- techage/coal_power_station/firebox.lua | 2 +- techage/coal_power_station/generator.lua | 4 +- techage/coal_power_station/turbine.lua | 4 +- techage/collider/cooler.lua | 4 +- techage/collider/detector.lua | 2 +- techage/collider/magnet.lua | 2 +- techage/doc/manual_DE.lua | 24 ++- techage/doc/manual_EN.lua | 23 ++- techage/doc/plans.lua | 2 +- techage/energy_storage/generator.lua | 4 +- techage/energy_storage/heatexchanger2.lua | 8 +- techage/energy_storage/inlet.lua | 22 ++ techage/energy_storage/turbine.lua | 6 +- techage/furnace/booster.lua | 4 +- techage/furnace/firebox.lua | 2 +- techage/fusion_reactor/controller.lua | 4 +- techage/fusion_reactor/generator.lua | 4 +- techage/fusion_reactor/ta5_pump.lua | 4 +- techage/fusion_reactor/turbine.lua | 6 +- techage/hydrogen/electrolyzer.lua | 4 +- techage/hydrogen/fuelcell.lua | 4 +- techage/init.lua | 3 +- techage/iron_age/meltingpot.lua | 2 +- techage/items/moreblocks.lua | 15 +- techage/lamps/growlight.lua | 8 +- techage/liquids/filler.lua | 4 +- techage/liquids/pump.lua | 9 +- techage/liquids/ta5_tank.lua | 6 + techage/locale/techage.de.tr | 37 +++- techage/locale/template.txt | 32 ++- techage/logic/collector.lua | 9 +- techage/logic/detector.lua | 4 +- techage/logic/mesecons_converter.lua | 126 ++++++++---- techage/logic/node_detector.lua | 10 +- techage/logic/terminal.lua | 5 + techage/lua_controller/server.lua | 4 +- techage/manuals/manual_DE.md | 2 +- techage/manuals/manual_EN.md | 3 +- techage/manuals/manual_ta1_DE.md | 2 +- techage/manuals/manual_ta1_EN.md | 2 +- techage/manuals/manual_ta3_DE.md | 2 +- techage/manuals/manual_ta3_EN.md | 2 +- techage/manuals/manual_ta4_DE.md | 16 +- techage/manuals/manual_ta4_EN.md | 12 +- techage/manuals/manual_ta5_DE.md | 4 + techage/manuals/manual_ta5_EN.md | 4 + techage/mod.conf | 2 +- techage/move_controller/doorcontroller2.lua | 11 +- techage/move_controller/flycontroller.lua | 12 +- techage/move_controller/movecontroller.lua | 25 ++- techage/oil/explore.lua | 2 +- techage/oil/pumpjack.lua | 4 +- techage/oil/reboiler.lua | 4 +- techage/power/drive_axle.lua | 12 +- techage/power/formspecs.lua | 4 +- techage/power/gearbox.lua | 2 +- techage/power/power_terminal2.lua | 2 +- techage/settingtypes.txt | 5 +- techage/steam_engine/cylinder.lua | 4 +- techage/steam_engine/firebox.lua | 6 +- techage/steam_engine/flywheel.lua | 6 +- techage/ta3_power/axle2power.lua | 6 +- techage/ta3_power/power2axle.lua | 6 +- techage/ta3_power/tiny_generator.lua | 4 +- techage/ta4_power/electricmeter.lua | 69 +++++-- techage/ta4_power/transformer.lua | 40 +++- techage/textures/techage_inv_invisible.png | Bin 0 -> 115 bytes techage/textures/techage_invisible.png | Bin 126 -> 97 bytes towercrane/init.lua | 4 + 100 files changed, 958 insertions(+), 292 deletions(-) create mode 100644 techage/api.md create mode 100644 techage/textures/techage_inv_invisible.png diff --git a/hyperloop/init.lua b/hyperloop/init.lua index 6caafdd..80aefd9 100644 --- a/hyperloop/init.lua +++ b/hyperloop/init.lua @@ -49,16 +49,7 @@ if minetest.global_exists("techage") and techage.version < 0.06 then return end - -if minetest.get_translator ~= nil then - hyperloop.S = minetest.get_translator(minetest.get_current_modname()) - -else - -- Load support for intllib. - local MP = minetest.get_modpath("hyperloop") - hyperloop.S, hyperloop.NS = dofile(MP.."/intllib.lua") - -end +hyperloop.S = minetest.get_translator(minetest.get_current_modname()) -- MT 5.4 new string mode hyperloop.CLIP = minetest.features.use_texture_alpha_string_modes and "clip" or false diff --git a/hyperloop/mod.conf b/hyperloop/mod.conf index e950f74..8407212 100644 --- a/hyperloop/mod.conf +++ b/hyperloop/mod.conf @@ -1,4 +1,4 @@ name = hyperloop depends = default, tubelib2 -optional_depends = techage, worldedit, intllib +optional_depends = techage, worldedit description = Hyperloop Mod, the fast and modern way of traveling. diff --git a/minecart/README.md b/minecart/README.md index feb08af..6d86656 100644 --- a/minecart/README.md +++ b/minecart/README.md @@ -155,5 +155,5 @@ History Speed limit signs and cart terminal added 2021-09-02 V2.01 Chat command /stopcart added 2021-10-18 V2.02 Cart reproduction bug fixed -2023-01-04 V2.03 Techage and Beduino command interface added -2023-02-05 V2.04 New API functions added, EOL blanks removed \ No newline at end of file +2023-01-04 V2.03 Techage and Beduino command interface added +2023-02-05 V2.04 New API functions added, EOL blanks removed diff --git a/signs_bot/basis.lua b/signs_bot/basis.lua index 67cddea..d3923b0 100644 --- a/signs_bot/basis.lua +++ b/signs_bot/basis.lua @@ -420,6 +420,7 @@ minetest.register_node("signs_bot:box", { if not placer or not placer:is_player() then minetest.remove_node(pos) minetest.add_item(pos, itemstack) + return end local mem = tubelib2.init_mem(pos) mem.running = false diff --git a/signs_bot/compost.lua b/signs_bot/compost.lua index 5cd198d..8141506 100644 --- a/signs_bot/compost.lua +++ b/signs_bot/compost.lua @@ -53,7 +53,7 @@ local function takeitem(mem) end -if minetest.global_exists("signs_bot") then +if minetest.global_exists("compost") then signs_bot.register_botcommand("add_compost", { mod = "compost", diff --git a/signs_bot/doc.lua b/signs_bot/doc.lua index 342a6c5..f114d41 100644 --- a/signs_bot/doc.lua +++ b/signs_bot/doc.lua @@ -140,18 +140,31 @@ local inventory_doc = table.concat({ }, "\n") +local sorting_data = {"start", "control", "sensor_doc", "tool", "invent", + "box", "bot_flap", "duplicator", + "bot_sensor", "node_sensor", "crop_sensor", "chest", "timer", + "changer", "sensor_extender", "and", "delayer", + "farming", "pattern", "copy3x3x3", "flowers", "aspen", + "sign_cmnd", "sign_right", "sign_left", "sign_take", "sign_add", "sign_stop", "sign_blank"} + +if minetest.global_exists("minecart") then + table.insert(sorting_data, "cart_sensor") + table.insert(sorting_data, "sign_add_cart") + table.insert(sorting_data, "sign_take_cart") +end + +if minetest.global_exists("xdecor") then + table.insert(sorting_data, "water") + table.insert(sorting_data, "soup") +end + doc.add_category("signs_bot", { name = S("Signs Bot"), description = S("A robot controlled by signs, used for automated work"), sorting = "custom", - sorting_data = {"start", "control", "sensor_doc", "tool", - "box", "bot_flap", "duplicator", - "bot_sensor", "cart_sensor", "node_sensor", "crop_sensor", "chest", "timer", - "changer", "sensor_extender", - "farming", "pattern", "copy3x3x3", - "sign_cmnd", "sign_right", "sign_left", "sign_take", "sign_add", "sign_stop", "sign_blank"}, build_formspec = formspec, + sorting_data = sorting_data, }) doc.add_entry("signs_bot", "start", { @@ -174,7 +187,7 @@ doc.add_entry("signs_bot", "tool", { data = {text = tool_doc, image = "signs_bot_doc_image.png"}, }) -doc.add_entry("signs_bot", "tool", { +doc.add_entry("signs_bot", "invent", { name = S("Bot inventory behavior"), data = {text = inventory_doc, image = "signs_bot_doc_image.png"}, }) diff --git a/signs_bot/mod.conf b/signs_bot/mod.conf index d649484..2036465 100644 --- a/signs_bot/mod.conf +++ b/signs_bot/mod.conf @@ -1,4 +1,4 @@ name=signs_bot depends = default,farming,basic_materials,tubelib2 -optional_depends = node_io,techage,doc,minecart,bucket,fire,xdecor,ethereal +optional_depends = node_io,techage,doc,minecart,bucket,fire,xdecor,ethereal,compost description = A robot controlled by signs diff --git a/ta4_jetpack/markdown2lua.py b/ta4_jetpack/markdown2lua.py index 316b480..ff68e56 100644 --- a/ta4_jetpack/markdown2lua.py +++ b/ta4_jetpack/markdown2lua.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- import re -import mistune # install v0.8.4 with: pip install mistune +import mistune # install v0.8.4 with: pip install mistune==0.8.4 __version__ = "1.0" diff --git a/techage/README.md b/techage/README.md index 7c8ebfd..9a3ecae 100644 --- a/techage/README.md +++ b/techage/README.md @@ -34,7 +34,7 @@ Textures: CC BY-SA 3.0 The TA1 mill sound is from https://freesound.org/people/JustinBW/sounds/70200/ The TA1 watermill sound is from https://freesound.org/people/bmoreno/sounds/164182/ -Many thanks to Thomas-S and others for their contributions +Many thanks to Thomas-S, niklp09, and others for their contributions ### Dependencies @@ -61,7 +61,7 @@ It is highly recommended that you install the following mods, too: * [compost](https://github.com/joe7575/compost): The garden soil is needed for the TA4 LED Grow Light based flower bed * [techpack_stairway](https://github.com/joe7575/techpack_stairway): Ladders, stairways, and bridges for your machines * [autobahn](https://github.com/joe7575/autobahn): Street blocks and slopes with stripes for faster traveling -* [[ta4_jetpack](https://github.com/joe7575/ta4_jetpack): A Jetpack with hydrogen as fuel and TA4 recipe +* [ta4_jetpack](https://github.com/joe7575/ta4_jetpack): A Jetpack with hydrogen as fuel and TA4 recipe For large servers with many players, the following packages are recommended: @@ -86,10 +86,47 @@ Available worlds will be converted to 'lsqlite3', but there is no way back, so: **Never disable 'lsqlite3' for a world that has already been used!** - ### History +**2023-05-05 V1.15** + +- Allow energy storage with up to 13x13x13 concrete blocks +- Allow registration of other buckets +- Add hyperloop chest only if the hyperloop mod is available +- Add missing 'minetest.formspec_escape' #131 +- Fix bug "Trouble with flycontroller #130" +- Add optional dependency on farming mod (orwell96) +- Fix forceload formspec receiver (Niklp09) + +**2023-04-16 V1.14** + +- Add file "api.md" +- Add API function `register_ore_for_gravelsieve` +- Add support for the game Asuna +- Merge pull request #124 from Niklp09/drops +- Fix keep node number issue +- Fix manual issue #123 + +**2023-04-10 V1.13** + +- Add "Teleport mode" to the ta5 fly controller + +**2023-04-01 V1.12** + +- Improve Transformer: + - add wrench menu for 'max. power passed through' + - Increase max. power passed through from 100 to 300 ku +- Improve Electricmeter: + - add wrench menu for 'max. power passed through' and 'power countdown' + - add commands to read the countdown value (Lua and Beduino controller) +- Improve TA3 Mesecons Converter: + - fix overload bug + - fix missing dominant 'on' issue +- Add version command to TA3/TA4 Terminal +- TA5 Hyperloop Chest: Disable inventory access on client side due to minetest core issues + **2023-03-05 V1.11** + - Reduce the number of necessary exp points for TA5 Hyperloop Chest, TA5 Hyperloop Tank, and TA5 AI Chip II - Fix possible kernel crashes with TA5 Hyperloop Chest and autocrafter diff --git a/techage/api.md b/techage/api.md new file mode 100644 index 0000000..798788e --- /dev/null +++ b/techage/api.md @@ -0,0 +1,216 @@ +# Techage API Functions + +Techage API function to adapt/prepare techage for other mods/games. + + + +## Move/Fly Controller + +Register node names for nodes allowed to be moved by fly/move controllers. + +This is only necessary for undiggable/intelligent nodes with one of the following attributes: + +- ```drop = ""``` +- ```diggable = false``` +- ```after_dig_node ~= nil``` + +```lua +techage.register_simple_nodes(node_names, is_valid) +``` + +- `is_valid = true` - Add node to the list of simple nodes +- `is_valid = false` - Remove node from the list of simple nodes + +Example: + +```lua +techage.register_simple_nodes({"techage:power_lineS"}, true) +``` + +For door nodes used as sliding doors by means of the move controller, call in addition: + +```lua +techage.flylib.protect_door_from_being_opened(node_name) +``` + + + +## TA1 Hammer + +Register stone/gravel name pair for the hammer blow: + +```lua +techage.register_stone_gravel_pair(stone_name, gravel_name) +``` + +Example: + +```lua +techage.register_stone_gravel_pair("default:stone", "default:gravel") +``` + + + +## TA1 Melting Pot + +Register a pot recipe: + +```lua +techage.ironage_register_recipe(recipe) +``` + +Examples: + +```lua +techage.ironage_register_recipe({ + output = "default:obsidian", + recipe = {"default:cobble"}, + heat = 10, -- Corresponds to the tower height + time = 8, -- Cooking time in seconds +}) +techage.ironage_register_recipe({ + output = "default:bronze_ingot 4", + recipe = {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot", "default:tin_ingot"}, + heat = 4, -- Corresponds to the tower height + time = 8, -- Cooking time in seconds +}) +``` + + + +## TA2/TA3/TA4 Autocrafter + +Register any nodes/items that should not be crafted via the autocrafter. + +```lua +techage.register_uncraftable_items(item_name) +``` + + + +## TA2/TA3/TA4 Gravel Sieve + +Change the probability of ores or register new ores for sieving. + +```lua +techage.register_ore_for_gravelsieve(ore_name, probability) +``` + +Example: + +```lua +techage.register_ore_for_gravelsieve("default:iron_lump", 30) +``` + +Default values for MTG are: + +```lua +-- higher value means less frequent occurrence +techage:baborium_lump 100000 -- hardly ever +default:mese_crystal 548 -- every 548th time +default:gold_lump 439 +default:tin_lump 60 +default:diamond 843 +default:copper_lump 145 +default:coal_lump 11 +default:iron_lump 15 +``` + + + +## TA2/TA3/TA4 Gravel Rinser + +Add a rinser recipe. + +```lua +techage.add_rinser_recipe(recipe) +``` + +Example: + +```lua +techage.add_rinser_recipe({input = "techage:sieved_gravel", output = "techage:usmium_nuggets", probability = 30}) +``` + + + +## TA2/TA3/TA4 Grinder + +Add a grinder recipe. + +```lua +techage.add_grinder_recipe(recipe, ta1_permitted) +``` + +Examples: + +```lua +echage.add_grinder_recipe({input = "default:cobble", output = "default:gravel"}) +techage.add_grinder_recipe({input = "default:sandstone", output = "default:sand 4"}) +``` + + + +## TA3/TA4 Electronic Fab, TA4 Doser + +Add recipes to an electronic fab or doser (chemical reactor): + + +```lua +techage.recipes.add(rtype, recipe) +``` + +`rtype` is one of: `ta2_electronic_fab` , `ta4_doser` + +A recipe look like: + +``` +{ + output = " ", -- units = 1..n + waste = " ", -- units = 1..n + input = { -- up to 4 items + " ", + " ", + }, +} +``` + +Examples: + +```lua +techage.recipes.add("ta2_electronic_fab", { + output = "techage:vacuum_tube 2", + waste = "basic_materials:empty_spool 1", + input = {"default:glass 1", "basic_materials:copper_wire 1", "basic_materials:plastic_sheet 1", "techage:usmium_nuggets 1"} +}) + +techage.recipes.add("ta4_doser", { + output = "techage:naphtha 1", + input = { + "techage:fueloil 1", + }, + catalyst = "techage:gibbsite_powder", +}) +``` + + + +## TA3 Furnace + +Register recipe: + +```lua +techage.furnace.register_recipe(recipe) +``` + +Example: + +```lua +techage.furnace.register_recipe({ + output = "default:bronze_ingot 4", + recipe = {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot", "default:tin_ingot"}, + time = 2, -- in seconds +}) +``` + + diff --git a/techage/basic_machines/autocrafter.lua b/techage/basic_machines/autocrafter.lua index 8402c4e..8fd225b 100644 --- a/techage/basic_machines/autocrafter.lua +++ b/techage/basic_machines/autocrafter.lua @@ -373,7 +373,7 @@ tiles.pas = { tiles.act = { -- up, down, right, left, back, front { - image = "techage_filling4_ta#.png^techage_appl_autocrafter4.png^techage_frame4_ta#_top.png", + name = "techage_filling4_ta#.png^techage_appl_autocrafter4.png^techage_frame4_ta#_top.png", backface_culling = false, animation = { type = "vertical_frames", @@ -386,7 +386,7 @@ tiles.act = { "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png", "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png", { - image = "techage_filling4_ta#.png^techage_appl_autocrafter4.png^techage_frame4_ta#.png", + name = "techage_filling4_ta#.png^techage_appl_autocrafter4.png^techage_frame4_ta#.png", backface_culling = false, animation = { type = "vertical_frames", @@ -396,7 +396,7 @@ tiles.act = { }, }, { - image = "techage_filling4_ta#.png^techage_appl_autocrafter4.png^techage_frame4_ta#.png", + name = "techage_filling4_ta#.png^techage_appl_autocrafter4.png^techage_frame4_ta#.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/basic_machines/consumer.lua b/techage/basic_machines/consumer.lua index 1268d6e..ecfea15 100644 --- a/techage/basic_machines/consumer.lua +++ b/techage/basic_machines/consumer.lua @@ -104,7 +104,7 @@ local function prepare_tiles(tiles, stage, power_png) tbl[#tbl+1] = item:gsub("#", stage):gsub("{power}", power_png):gsub("@@", '#') else local temp = table.copy(item) - temp.image = temp.image:gsub("#", stage):gsub("{power}", power_png):gsub("@@", '#') + temp.name = temp.name:gsub("#", stage):gsub("{power}", power_png):gsub("@@", '#') tbl[#tbl+1] = temp end end diff --git a/techage/basic_machines/distributor.lua b/techage/basic_machines/distributor.lua index 44785e9..fc644a1 100644 --- a/techage/basic_machines/distributor.lua +++ b/techage/basic_machines/distributor.lua @@ -475,7 +475,7 @@ local get_tiles = function(is_hp) tiles.act = { -- up, down, right, left, back, front { - image = "techage_filling4_ta#.png^techage_appl_distri4.png^techage_frame4_ta#_top"..variant..".png^techage_appl_color_top4.png", + name = "techage_filling4_ta#.png^techage_appl_distri4.png^techage_frame4_ta#_top"..variant..".png^techage_appl_color_top4.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/basic_machines/electronic_fab.lua b/techage/basic_machines/electronic_fab.lua index 1ef1934..dfeb7f4 100644 --- a/techage/basic_machines/electronic_fab.lua +++ b/techage/basic_machines/electronic_fab.lua @@ -26,7 +26,7 @@ local recipes = techage.recipes local RecipeType = { [2] = "ta2_electronic_fab", - [3] = "ta3_electronic_fab", + [3] = "ta3_electronic_fab", [4] = "ta4_electronic_fab", } @@ -152,7 +152,7 @@ tiles.act = { "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png", "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png", { - image = "techage_filling4_ta#.png^techage_appl_electronic_fab4.png^techage_frame4_ta#.png", + name = "techage_filling4_ta#.png^techage_appl_electronic_fab4.png^techage_frame4_ta#.png", backface_culling = false, animation = { type = "vertical_frames", @@ -162,7 +162,7 @@ tiles.act = { }, }, { - image = "techage_filling4_ta#.png^techage_appl_electronic_fab4.png^techage_frame4_ta#.png", + name = "techage_filling4_ta#.png^techage_appl_electronic_fab4.png^techage_frame4_ta#.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/basic_machines/forceload.lua b/techage/basic_machines/forceload.lua index 3d7d039..8056269 100644 --- a/techage/basic_machines/forceload.lua +++ b/techage/basic_machines/forceload.lua @@ -169,7 +169,7 @@ local function on_rightclick(pos, node, clicker, itemstack, pointed_thing) if name == owner or minetest.check_player_privs(name, "server") then local s = formspec(owner) if s then - minetest.show_formspec(owner, "techage:forceload", s) + minetest.show_formspec(name, "techage:forceload", s) end end end @@ -186,7 +186,7 @@ minetest.register_node("techage:forceload", { 'techage_filling_ta2.png^techage_frame_ta2_top.png', 'techage_filling_ta2.png^techage_frame_ta2_top.png', { - image = "techage_filling_ta2.png^techage_frame_ta2_top.png^techage_appl_forceload.png", + name = "techage_filling_ta2.png^techage_frame_ta2_top.png^techage_appl_forceload.png", backface_culling = false, animation = { type = "vertical_frames", @@ -217,7 +217,7 @@ minetest.register_node("techage:forceloadtile", { tiles = { -- up, down, right, left, back, front { - image = "techage_filling_ta2.png^techage_frame_ta2_top.png^techage_appl_forceload.png", + name = "techage_filling_ta2.png^techage_frame_ta2_top.png^techage_appl_forceload.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/basic_machines/gravelrinser.lua b/techage/basic_machines/gravelrinser.lua index 43ef7b9..4b9d3e4 100644 --- a/techage/basic_machines/gravelrinser.lua +++ b/techage/basic_machines/gravelrinser.lua @@ -207,7 +207,7 @@ tiles.pas = { tiles.act = { -- up, down, right, left, back, front { - image = "techage_appl_rinser4_top.png^techage_frame4_ta#_top.png", + name = "techage_appl_rinser4_top.png^techage_frame4_ta#_top.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/basic_machines/gravelsieve.lua b/techage/basic_machines/gravelsieve.lua index f12c581..4bbe0ac 100644 --- a/techage/basic_machines/gravelsieve.lua +++ b/techage/basic_machines/gravelsieve.lua @@ -133,7 +133,7 @@ tiles.pas = { tiles.act = { -- up, down, right, left, back, front { - image = "techage_appl_sieve4_top.png^techage_frame4_ta#_top.png", + name = "techage_appl_sieve4_top.png^techage_frame4_ta#_top.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/basic_machines/grinder.lua b/techage/basic_machines/grinder.lua index 77bbe8d..4d390f4 100644 --- a/techage/basic_machines/grinder.lua +++ b/techage/basic_machines/grinder.lua @@ -167,7 +167,7 @@ tiles.pas = { tiles.act = { -- up, down, right, left, back, front { - image = "techage_appl_grinder4.png^techage_frame4_ta#_top.png", + name = "techage_appl_grinder4.png^techage_frame4_ta#_top.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/basic_machines/liquidsampler.lua b/techage/basic_machines/liquidsampler.lua index 4467a18..1218822 100644 --- a/techage/basic_machines/liquidsampler.lua +++ b/techage/basic_machines/liquidsampler.lua @@ -136,7 +136,7 @@ tiles.act = { "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png", "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png", { - image = "techage_filling4_ta#.png^techage_liquidsampler4.png^techage_frame4_ta#.png", + name = "techage_filling4_ta#.png^techage_liquidsampler4.png^techage_frame4_ta#.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/basic_machines/pusher.lua b/techage/basic_machines/pusher.lua index b706d80..4f2c3fb 100644 --- a/techage/basic_machines/pusher.lua +++ b/techage/basic_machines/pusher.lua @@ -124,9 +124,10 @@ local function push(pos, crd, meta, nvm, pull_dir, push_dir, num) return 0 elseif leftover ~= true then -- place item back + taken = taken - leftover:get_count() techage.unpull_items(pos, pull_dir, leftover) crd.State:blocked(pos, nvm) - return taken - leftover:get_count() + return taken end return taken end @@ -282,7 +283,7 @@ tiles.act = { "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png", "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png", { - image = "techage_appl_pusher14.png^[transformR180]^techage_frame14_ta#.png", + name = "techage_appl_pusher14.png^[transformR180]^techage_frame14_ta#.png", backface_culling = false, animation = { type = "vertical_frames", @@ -292,7 +293,7 @@ tiles.act = { }, }, { - image = "techage_appl_pusher14.png^techage_frame14_ta#.png", + name = "techage_appl_pusher14.png^techage_frame14_ta#.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/basic_machines/quarry.lua b/techage/basic_machines/quarry.lua index b244222..446de64 100644 --- a/techage/basic_machines/quarry.lua +++ b/techage/basic_machines/quarry.lua @@ -197,7 +197,7 @@ local function quarry_task(pos, crd, nvm) pos2.y = y_curr -- Restarting the server can detach the coroutine data. - -- Therefore, read nvm again. + -- Therefore, read nvm again. nvm = techage.get_nvm(pos) nvm.level = y_first - y_curr @@ -328,7 +328,7 @@ tiles.act = { "techage_filling_ta#.png^techage_frame_ta#.png", "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png", { - image = "techage_frame14_ta#.png^techage_quarry_left14.png", + name = "techage_frame14_ta#.png^techage_quarry_left14.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/basic_machines/recycler.lua b/techage/basic_machines/recycler.lua index 5e82e49..0bdfbf4 100644 --- a/techage/basic_machines/recycler.lua +++ b/techage/basic_machines/recycler.lua @@ -193,7 +193,7 @@ tiles.pas = { tiles.act = { -- up, down, right, left, back, front { - image = "techage_appl_grinder4.png^[colorize:@@000000:100^techage_frame4_ta#_top.png", + name = "techage_appl_grinder4.png^[colorize:@@000000:100^techage_frame4_ta#_top.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/basic_machines/ta4_injector.lua b/techage/basic_machines/ta4_injector.lua index e08bfd0..f334d34 100644 --- a/techage/basic_machines/ta4_injector.lua +++ b/techage/basic_machines/ta4_injector.lua @@ -211,7 +211,7 @@ tiles.act = { "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_outp.png", "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_inp.png", { - image = "techage_appl_pusher14.png^[transformR180]^techage_frame14_ta#.png^techage_appl_injector14.png", + name = "techage_appl_pusher14.png^[transformR180]^techage_frame14_ta#.png^techage_appl_injector14.png", backface_culling = false, animation = { type = "vertical_frames", @@ -221,7 +221,7 @@ tiles.act = { }, }, { - image = "techage_appl_pusher14.png^techage_frame14_ta#.png^techage_appl_injector14.png", + name = "techage_appl_pusher14.png^techage_frame14_ta#.png^techage_appl_injector14.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/basic_machines/ta5_chest.lua b/techage/basic_machines/ta5_chest.lua index 03a3e45..7165a07 100644 --- a/techage/basic_machines/ta5_chest.lua +++ b/techage/basic_machines/ta5_chest.lua @@ -29,7 +29,7 @@ local menu = techage.menu local function formspec(pos) local ndef = minetest.registered_nodes["techage:ta5_hl_chest"] local status = M(pos):get_string("conn_status") - if hyperloop.is_client(pos) or hyperloop.is_server(pos) then + if hyperloop.is_server(pos) then local title = ndef.description .. " " .. status return "size[8,9]".. "box[0,-0.1;7.8,0.5;#c6e8ff]" .. @@ -38,6 +38,13 @@ local function formspec(pos) "list[current_player;main;0,5.3;8,4;]".. "listring[context;main]".. "listring[current_player;main]" + elseif hyperloop.is_client(pos) then + local title = ndef.description .. " " .. status + return "size[8,9]".. + "box[0,-0.1;7.8,0.5;#c6e8ff]" .. + "label[0.2,-0.1;" .. minetest.colorize( "#000000", title) .. "]" .. + "label[0.2,2;Inventory access on client side disabled\ndue to minetest core issues!]" .. + "list[current_player;main;0,5.3;8,4;]" else return menu.generate_formspec(pos, ndef, hyperloop.SUBMENU) end @@ -47,6 +54,9 @@ local function allow_metadata_inventory_put(pos, listname, index, stack, player) if minetest.is_protected(pos, player:get_player_name()) then return 0 end + if techage.hyperloop.is_client(pos) then + return 0 + end shared_inv.before_inv_access(pos, listname) local inv = minetest.get_inventory({type="node", pos=pos}) if inv and inv:room_for_item(listname, stack) then @@ -59,6 +69,9 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player if minetest.is_protected(pos, player:get_player_name()) then return 0 end + if techage.hyperloop.is_client(pos) then + return 0 + end shared_inv.before_inv_access(pos, listname) local inv = minetest.get_inventory({type="node", pos=pos}) if inv and inv:contains_item(listname, stack) then @@ -71,6 +84,9 @@ local function allow_metadata_inventory_move(pos, from_list, from_index, to_list if shared_inv.before_inv_access(pos, "main") then return 0 end + if techage.hyperloop.is_client(pos) then + return 0 + end return count end @@ -224,3 +240,9 @@ minetest.register_craft({ output = "techage:ta5_hl_chest", recipe = {"techage:chest_ta4", "techage:ta5_aichip"} }) + +minetest.register_on_mods_loaded(function() + if not minetest.global_exists("hyperloop") then + minetest.clear_craft({output = "techage:ta5_hl_chest"}) + end +end) \ No newline at end of file diff --git a/techage/basis/boiler_lib.lua b/techage/basis/boiler_lib.lua index bd7c566..e1202fe 100644 --- a/techage/basis/boiler_lib.lua +++ b/techage/basis/boiler_lib.lua @@ -3,7 +3,7 @@ TechAge ======= - Copyright (C) 2019-2020 Joachim Stolberg + Copyright (C) 2019-2023 Joachim Stolberg AGPL v3 See LICENSE.txt for more information @@ -24,13 +24,10 @@ local BLOCKING_TIME = 0.3 -- 300ms techage.boiler = {} local IsWater = { - ["bucket:bucket_river_water"] = true, - ["bucket:bucket_water"] = true, + ["bucket:bucket_river_water"] = "bucket:bucket_empty", } -local IsBucket = { - ["bucket:bucket_empty"] = true, -} +local IsBucket = {} local function node_description(name) name = string.split(name, " ")[1] @@ -126,12 +123,12 @@ function techage.boiler.on_punch(pos, node, puncher, pointed_thing) if IsWater[wielded_item] and nvm.num_water < MAX_WATER then mem.blocking_time = techage.SystemTime + BLOCKING_TIME nvm.num_water = nvm.num_water + 1 - puncher:set_wielded_item(ItemStack("bucket:bucket_empty")) + puncher:set_wielded_item(ItemStack(IsWater[wielded_item])) M(pos):set_string("formspec", techage.boiler.formspec(pos, nvm)) elseif IsBucket[wielded_item] and nvm.num_water > 0 then if item_count > 1 then local inv = puncher:get_inventory() - local item = ItemStack("bucket:bucket_water") + local item = ItemStack(IsBucket[wielded_item]) if inv:room_for_item("main", item) then inv:add_item("main", item) puncher:set_wielded_item({name=wielded_item, count = item_count - 1}) @@ -141,8 +138,13 @@ function techage.boiler.on_punch(pos, node, puncher, pointed_thing) else mem.blocking_time = techage.SystemTime + BLOCKING_TIME nvm.num_water = nvm.num_water - 1 - puncher:set_wielded_item(ItemStack("bucket:bucket_water")) + puncher:set_wielded_item(ItemStack(IsBucket[wielded_item])) end M(pos):set_string("formspec", techage.boiler.formspec(pos, nvm)) end end + +function techage.register_water_bucket(empty_bucket, full_bucket) + IsWater[full_bucket] = empty_bucket + IsBucket[empty_bucket] = full_bucket +end diff --git a/techage/basis/fly_lib.lua b/techage/basis/fly_lib.lua index 39ac390..6560b7f 100644 --- a/techage/basis/fly_lib.lua +++ b/techage/basis/fly_lib.lua @@ -169,7 +169,7 @@ function flylib.to_path(s, max_dist) local tPath local dist = 0 - for _, line in ipairs(strsplit(s)) do + for _, line in ipairs(strsplit(s or "")) do line = trim(line) line = string.split(line, "--", true, 1)[1] or "" if line ~= "" then @@ -564,10 +564,6 @@ end local function is_simple_node(pos) local node = techage.get_node_lvm(pos) if not minecart.is_rail(pos, node.name) then - if node.name == "air" then - minetest.swap_node(pos, {name = "techage:moveblock", param2 = 0}) - return true - end local ndef = minetest.registered_nodes[node.name] return not techage.is_air_like(node.name) and techage.can_dig_node(node.name, ndef) or minecart.is_cart(node.name) end @@ -614,6 +610,10 @@ local function move_node(pos, meta, pos1, lmove, max_speed, height) end end +-- +-- Default Move Mode +-- + -- Move the nodes from nvm.lpos1 to nvm.lpos2 -- * nvm.lpos1 is a list of nodes -- * lmove is the movement as a list of `moves` @@ -660,7 +660,7 @@ local function multi_move_nodes(pos, meta, nvm, lmove, max_speed, height, move2t return true end --- Move the nodes from lpos1 to lpos2. +-- Move the nodes from lpos1 to lpos2. -- * lpos1 is a list of nodes -- * lpos2 = lpos1 + move -- * pos and meta are controller block related @@ -703,6 +703,86 @@ local function move_nodes(pos, meta, lpos1, move, max_speed, height) return true, lpos2 end +-- +-- Teleport Mode +-- +local function is_player_available(lpos1) + if #lpos1 == 1 then + for _, obj in pairs(minetest.get_objects_inside_radius(lpos1[1], 0.9)) do + if obj:is_player() then + return true + end + end + end +end + +local function teleport(base_pos, pos1, pos2, meta, owner, lmove, max_speed) + if not minetest.is_protected(pos1, owner) and not minetest.is_protected(pos2, owner) then + local node1 = techage.get_node_lvm(pos1) + local node2 = techage.get_node_lvm(pos2) + if techage.is_air_like(node1.name) and techage.is_air_like(node2.name) then + minetest.swap_node(pos1, {name = "techage:moveblock", param2 = 0}) + if move_node(base_pos, meta, pos1, lmove, max_speed, 0) == false then + meta:set_string("status", S("No valid start position")) + return false + end + else + if not techage.is_air_like(node1.name) then + meta:set_string("status", S("No valid start position")) + else + meta:set_string("status", S("No valid destination position")) + end + return false + end + else + if minetest.is_protected(pos1, owner) then + meta:set_string("status", S("Start position is protected")) + else + meta:set_string("status", S("Destination position is protected")) + end + return false + end + meta:set_string("status", S("Running")) + return true +end + +-- Move the player from nvm.lpos1 to nvm.lpos2 +-- * nvm.lpos1 is a list of length one(!) with the not to be moved block below the player +-- * lmove is the movement as a list of `moves` +-- * pos, meta, and nvm are controller block related +local function multi_teleport_player(base_pos, meta, nvm, lmove, max_speed, move2to1) + local owner = meta:get_string("owner") + techage.counting_add(owner, #lmove, #nvm.lpos1 * #lmove) + + local pos1 = vector.add(nvm.lpos1[1], {x=0, y=1, z=0}) + local pos2 = vector.add(nvm.lpos2[1], {x=0, y=1, z=0}) + + if move2to1 then + pos1, pos2 = pos2, pos1 + end + + return teleport(base_pos, pos1, pos2, meta, owner, lmove, max_speed) +end + +-- Move the player from lpos1 to lpos2. +-- * lpos1 is a list of length one(!) with the not to be moved block below the player +-- * lpos2 = lpos1 + move +-- * pos and meta are controller block related +local function teleport_player(base_pos, meta, lpos1, move, max_speed) + local owner = meta:get_string("owner") + lpos1 = lpos1 or {} + techage.counting_add(owner, #lpos1) + + local pos1 = vector.add(lpos1[1], {x=0, y=1, z=0}) + local pos2 = vector.add(pos1, move) + + return teleport(base_pos, pos1, pos2, meta, owner, {move}, max_speed), nil +end + +-------------------------------------------------------------------------------------- +-- API +-------------------------------------------------------------------------------------- + -- move2to1 is the direction and is true for 'from pos2 to pos1' -- Move path and other data is stored as meta data of pos function flylib.move_to_other_pos(pos, move2to1) @@ -711,6 +791,7 @@ function flylib.move_to_other_pos(pos, move2to1) local lmove, err = flylib.to_path(meta:get_string("path")) or {} local max_speed = meta:contains("max_speed") and meta:get_int("max_speed") or MAX_SPEED local height = meta:contains("height") and meta:get_float("height") or 1 + local teleport_mode = meta:get_string("teleport_mode") == "enable" if err or nvm.running then return false end @@ -724,8 +805,13 @@ function flylib.move_to_other_pos(pos, move2to1) end -- calc destination positions nvm.lpos2 = lvect_add_vec(nvm.lpos1, offs) + local lpos = move2to1 and nvm.lpos2 or nvm.lpos1 - nvm.running = multi_move_nodes(pos, meta, nvm, lmove, max_speed, height, move2to1) + if teleport_mode and is_player_available(lpos) then + nvm.running = multi_teleport_player(pos, meta, nvm, lmove, max_speed, move2to1) + elseif not teleport_mode then + nvm.running = multi_move_nodes(pos, meta, nvm, lmove, max_speed, height, move2to1) + end nvm.moveBA = nvm.running and not move2to1 return nvm.running end @@ -736,10 +822,16 @@ function flylib.move_to(pos, move) local nvm = techage.get_nvm(pos) local height = techage.in_range(meta:contains("height") and meta:get_float("height") or 1, 0, 1) local max_speed = meta:contains("max_speed") and meta:get_int("max_speed") or MAX_SPEED + local teleport_mode = meta:get_string("teleport_mode") == "enable" if nvm.running then return false end - nvm.running, nvm.lastpos = move_nodes(pos, meta, nvm.lastpos or nvm.lpos1, move, max_speed, height) + -- TODO: Not working so far. There is no known 'nvm.lastpos' as start pos. + --if teleport_mode and is_player_available(nvm.lpos1) then + -- nvm.running, nvm.lastpos = teleport_player(pos, meta, nvm.lastpos or nvm.lpos1, move, max_speed) + --elseif not teleport_mode then + nvm.running, nvm.lastpos = move_nodes(pos, meta, nvm.lastpos or nvm.lpos1, move, max_speed, height) + --end return nvm.running end @@ -750,6 +842,7 @@ function flylib.reset_move(pos) local max_speed = meta:contains("max_speed") and meta:get_int("max_speed") or MAX_SPEED if nvm.running then return false end + if meta:get_string("teleport_mode") == "enable" then return false end if nvm.lpos1 and nvm.lpos1[1] then local move = vector.subtract(nvm.lpos1[1], (nvm.lastpos or nvm.lpos1)[1]) @@ -830,21 +923,6 @@ function flylib.remove_node(pos) end end -minetest.register_node("techage:moveblock", { - description = "Techage Move Block", - drawtype = "normal", - tiles = {"techage_invisible.png"}, - sunlight_propagates = true, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - floodable = true, - is_ground_content = false, - groups = {not_in_creative_inventory=1}, - drop = "", -}) - minetest.register_on_joinplayer(function(player) unlock_player(player) end) diff --git a/techage/basis/gravel_lib.lua b/techage/basis/gravel_lib.lua index f3ced55..5afb383 100644 --- a/techage/basis/gravel_lib.lua +++ b/techage/basis/gravel_lib.lua @@ -29,7 +29,7 @@ local ProbabilityCorrections = { -- collect all registered ores and calculate the probability local function add_ores() for _,item in pairs(minetest.registered_ores) do - if minetest.registered_nodes[item.ore] then + if not ore_probability[item.ore] and minetest.registered_nodes[item.ore] then local drop = minetest.registered_nodes[item.ore].drop if type(drop) == "string" and drop ~= item.ore @@ -66,8 +66,14 @@ local function add_ores() minetest.log("info", string.format("[techage] Overall probability %g", overall_probability)) end -minetest.after(1, add_ores) +minetest.register_on_mods_loaded(add_ores) +-- +-- Change the probability of ores or register new ores for sieving +-- +function techage.register_ore_for_gravelsieve(ore_name, probability) + ore_probability[ore_name] = probability +end -- determine ore based on the calculated probability function techage.gravelsieve_get_random_gravel_ore() diff --git a/techage/basis/liquid_lib.lua b/techage/basis/liquid_lib.lua index 1075e1a..9df0975 100644 --- a/techage/basis/liquid_lib.lua +++ b/techage/basis/liquid_lib.lua @@ -101,6 +101,9 @@ function techage.register_liquid(full_container, empty_container, container_size ContainerDef[empty_container] = ContainerDef[empty_container] or {} ContainerDef[empty_container][inv_item] = full_container IsLiquid[inv_item] = true + if inv_item == "techage:water" and container_size == 1 then + techage.register_water_bucket(empty_container, full_container) + end end local function get_liquid_def(full_container) diff --git a/techage/basis/windturbine_lib.lua b/techage/basis/windturbine_lib.lua index 2aa9355..bbd4397 100644 --- a/techage/basis/windturbine_lib.lua +++ b/techage/basis/windturbine_lib.lua @@ -3,7 +3,7 @@ TechAge ======= - Copyright (C) 2019-2020 Joachim Stolberg + Copyright (C) 2019-2023 Joachim Stolberg AGPL v3 See LICENSE.txt for more information @@ -16,6 +16,12 @@ local S = techage.S local P = minetest.string_to_pos local M = minetest.get_meta +local OCEAN = "ocean" + +if minetest.global_exists("asuna") then + OCEAN = "below" +end + local function chat_message(player_name, msg) if player_name then minetest.chat_send_player(player_name, S("[TA4 Wind Turbine]").." "..msg) @@ -39,7 +45,7 @@ function techage.valid_place_for_windturbine(pos, player_name, num_turbines) local data = minetest.get_biome_data({x=pos.x, y=-2, z=pos.z}) if data then local name = minetest.get_biome_name(data.biome) - if not string.find(name, "ocean") then + if not string.find(name, OCEAN) then return chat_message(player_name, S("This is a").." "..name.." "..S("biome and no ocean!")) end end diff --git a/techage/chemistry/ta4_doser.lua b/techage/chemistry/ta4_doser.lua index 8cb9009..d2c05db 100644 --- a/techage/chemistry/ta4_doser.lua +++ b/techage/chemistry/ta4_doser.lua @@ -331,7 +331,7 @@ minetest.register_node("techage:ta4_doser_on", { "techage_filling_ta4.png^techage_frame_ta4_top.png^techage_appl_hole_pipe.png", "techage_filling_ta4.png^techage_frame_ta4.png", { - image = "techage_filling8_ta4.png^techage_frame8_ta4.png^techage_appl_pump_up8.png", + name = "techage_filling8_ta4.png^techage_frame8_ta4.png^techage_appl_pump_up8.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/coal_power_station/cooler.lua b/techage/coal_power_station/cooler.lua index 3cb2aae..31e9585 100644 --- a/techage/coal_power_station/cooler.lua +++ b/techage/coal_power_station/cooler.lua @@ -37,7 +37,7 @@ minetest.register_node("techage:cooler", { tiles = { -- up, down, right, left, back, front { - image = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png", + name = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", @@ -47,7 +47,7 @@ minetest.register_node("techage:cooler", { }, }, { - image = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png", + name = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", @@ -78,7 +78,7 @@ minetest.register_node("techage:cooler_on", { tiles = { -- up, down, right, left, back, front { - image = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png", + name = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", @@ -88,7 +88,7 @@ minetest.register_node("techage:cooler_on", { }, }, { - image = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png", + name = "techage_filling4_ta3.png^techage_appl_cooler4.png^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/coal_power_station/firebox.lua b/techage/coal_power_station/firebox.lua index ebf716f..e556883 100644 --- a/techage/coal_power_station/firebox.lua +++ b/techage/coal_power_station/firebox.lua @@ -149,7 +149,7 @@ minetest.register_node("techage:coalfirehole_on", { "techage_coal_boiler.png^[colorize:black:80", "techage_coal_boiler.png^[colorize:black:80", { - image = "techage_coal_boiler4.png^[colorize:black:80^techage_appl_firehole4.png", + name = "techage_coal_boiler4.png^[colorize:black:80^techage_appl_firehole4.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/coal_power_station/generator.lua b/techage/coal_power_station/generator.lua index fae05de..34a7e28 100644 --- a/techage/coal_power_station/generator.lua +++ b/techage/coal_power_station/generator.lua @@ -170,7 +170,7 @@ minetest.register_node("techage:generator_on", { "techage_filling_ta3.png^techage_appl_hole_electric.png^techage_frame_ta3.png", "techage_filling_ta3.png^techage_appl_open.png^techage_frame_ta3.png", { - image = "techage_filling4_ta3.png^techage_appl_generator4.png^techage_frame4_ta3.png", + name = "techage_filling4_ta3.png^techage_appl_generator4.png^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", @@ -180,7 +180,7 @@ minetest.register_node("techage:generator_on", { }, }, { - image = "techage_filling4_ta3.png^techage_appl_generator4.png^[transformFX]^techage_frame4_ta3.png", + name = "techage_filling4_ta3.png^techage_appl_generator4.png^[transformFX]^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/coal_power_station/turbine.lua b/techage/coal_power_station/turbine.lua index a516a95..9f697d2 100644 --- a/techage/coal_power_station/turbine.lua +++ b/techage/coal_power_station/turbine.lua @@ -105,7 +105,7 @@ minetest.register_node("techage:turbine_on", { "techage_filling_ta3.png^techage_appl_open.png^techage_frame_ta3.png", "techage_filling_ta3.png^techage_frame_ta3.png^techage_steam_hole.png", { - image = "techage_filling4_ta3.png^techage_appl_turbine4.png^techage_frame4_ta3.png^[transformFX", + name = "techage_filling4_ta3.png^techage_appl_turbine4.png^techage_frame4_ta3.png^[transformFX", backface_culling = false, animation = { type = "vertical_frames", @@ -115,7 +115,7 @@ minetest.register_node("techage:turbine_on", { }, }, { - image = "techage_filling4_ta3.png^techage_appl_turbine4.png^techage_frame4_ta3.png", + name = "techage_filling4_ta3.png^techage_appl_turbine4.png^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/collider/cooler.lua b/techage/collider/cooler.lua index e5f1871..7d4a37f 100644 --- a/techage/collider/cooler.lua +++ b/techage/collider/cooler.lua @@ -23,7 +23,7 @@ minetest.register_node("techage:ta4_collider_cooler", { tiles = { -- up, down, right, left, back, front { - image = "techage_appl_cooler4.png^techage_frame4_ta4_top.png", + name = "techage_appl_cooler4.png^techage_frame4_ta4_top.png", backface_culling = false, animation = { type = "vertical_frames", @@ -33,7 +33,7 @@ minetest.register_node("techage:ta4_collider_cooler", { }, }, { - image = "techage_appl_cooler4.png^techage_frame4_ta4_top.png", + name = "techage_appl_cooler4.png^techage_frame4_ta4_top.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/collider/detector.lua b/techage/collider/detector.lua index c5dee94..a9a8b1c 100644 --- a/techage/collider/detector.lua +++ b/techage/collider/detector.lua @@ -190,7 +190,7 @@ local function cable_inlets_turn_on_off(pos, on) techage.power_inlet_turn_on_off(pos2, nvm, on) end end - + local param2 = minetest.get_node(pos).param2 turn_on_off(pos, param2, Schedule[2]) turn_on_off(pos, param2, Schedule[3]) diff --git a/techage/collider/magnet.lua b/techage/collider/magnet.lua index 73dc365..0309421 100644 --- a/techage/collider/magnet.lua +++ b/techage/collider/magnet.lua @@ -132,7 +132,7 @@ minetest.register_node("techage:ta4_magnet", { nvm.running = nil return -2 end, - + on_turn_off = function(pos) local nvm = techage.get_nvm(pos) nvm.running = nil diff --git a/techage/doc/manual_DE.lua b/techage/doc/manual_DE.lua index 9e910d8..f612db8 100644 --- a/techage/doc/manual_DE.lua +++ b/techage/doc/manual_DE.lua @@ -325,7 +325,7 @@ techage.manual_DE.aText = { "\n".. "\n".. "\n", - "Baborium wird nur im Untertagebau gewonnen. Baborium findet man nur in Stein in einer Höhe zwischen -250 und -340 Meter.\n".. + "Barborium kann nur im Untertagebau gewonnen werden. Diesen Stoff findet man nur in einer Tiefe von -250 bis -340 Metern.\n".. "Baborium kann nur im TA3 Industrieofen geschmolzen werden.\n".. "\n".. "\n".. @@ -389,7 +389,7 @@ techage.manual_DE.aText = { " - Baue einen Turm aus Stein (cobble) mit einer 3x3 Grundfläche (7-11 Blöcke hoch)\n".. " - Lasse unten ein Loch an einer Seite offen\n".. " - Lege einen Anzünder (lighter) hinein\n".. - " - Fülle den Turm von oben bis zum Rand mit Holzkohle\n".. + " - Fülle den Turm bis zum Rand mit Holzkohle\\, in dem du die Holzkohle von oben in das Loch fallen lässt\n".. " - Zünde den Anzünder durch das Loch an\n".. " - Platziere den Schmelztiegel in die Flamme über dem Turm\neinen Block über der Flamme)\n".. " - Um den Brenner anzuhalten\\, schließe das Loch vorübergehend bspw. mit einem Erdblock.\n".. @@ -833,7 +833,7 @@ techage.manual_DE.aText = { "Der TA3 Industrieofen dient als Ergänzung zu normalen Ofen (furnace). Damit können alle Waren mit \"Koch\" Rezepten\\, auch im Industrieofen hergestellt werden. Es gibt aber auch spezielle Rezepte\\, die nur im Industrieofen hergestellt werden können.\n".. "Der Industrieofen hat sein eigenes Menü zur Rezeptauswahl. Abhängig von den Waren im Industrieofen Inventar links kann rechts das Ausgangsprodukt gewählt werden.\n".. "\n".. - "Der Industrieofen benötigt Strom (für das Gebläse) sowie Schweröl/Benzin für den Brenner. Der Industrieofens und muss wie im Plan rechts abgebildet\\, zusammen gebaut werden.\n".. + "Der Industrieofen benötigt Strom (für das Gebläse) sowie Schweröl/Benzin für den Brenner. Der Industrieofen muss wie im Plan rechts abgebildet\\, zusammen gebaut werden.\n".. "\n".. "Siehe auch TA4 Ofenheizung.\n".. "\n".. @@ -1396,11 +1396,13 @@ techage.manual_DE.aText = { "\n", "Der TA4 Energiespeicher ersetzt den Batterie Block aus TA3.\n".. "\n".. - "Der Energiespeicher besteht aus einer Betonhülle (Concrete Block) gefüllt mit Gravel. Es gibt 3 Größen vom Speicher:\n".. + "Der Energiespeicher besteht aus einer Betonhülle (Concrete Block) gefüllt mit Gravel. Es gibt 5 Größen vom Speicher:\n".. "\n".. " - Hülle mit 5x5x5 Concrete Blocks\\, gefüllt mit 27 Gravel\\, Speicherkapazität: 22.5 kud\n".. - " - dHülle mit 7x7x7 Concrete Blocks\\, gefüllt mit 125 Gravel\\, Speicherkapazität: 104 kud\n".. + " - Hülle mit 7x7x7 Concrete Blocks\\, gefüllt mit 125 Gravel\\, Speicherkapazität: 104 kud\n".. " - Hülle mit 9x9x9 Concrete Blocks\\, gefüllt mit 343 Gravel\\, Speicherkapazität: 286 kud\n".. + " - Hülle mit 11x11x11 Concrete Blocks\\, gefüllt mit 729 Gravel\\, Speicherkapazität: 610 kud\n".. + " - Hülle mit 13x13x13 Concrete Blocks\\, gefüllt mit 1331 Gravel\\, Speicherkapazität: 1112 kud\n".. "\n".. "In der Betonhülle darf ein Fenster aus einem Obsidian Glas Block sein. Dieses muss ziemlich in der Mitte der Wand platziert werden. Durch dieses Fenster sieht man\\, ob der Speicher mehr als 80 % geladen ist. Im Plan rechts sieht man den Aufbau aus TA4 Wärmetauscher bestehend aus 3 Blöcken\\, der TA4 Turbine und dem TA4 Generator. Beim Wärmetauscher ist auf die Ausrichtung zu achten (der Pfeil bei Block 1 muss zur Turbine zeigen).\n".. "\n".. @@ -1447,13 +1449,15 @@ techage.manual_DE.aText = { "\n", "Mit Hilfe eines Trenntransformators können zwei Stromnetze zu einem größeren Netzwerk verbunden werden. Der Trenntransformator kann Strom in beide Richtungen übertragen.\n".. "\n".. - "Der Trenntransformator kann bis zu 100 ku übertragen.\n".. + "Der Trenntransformator kann bis zu 300 ku übertragen. Der Maximalwert ist über das Schraubenschlüsselmenü einstellbar.\n".. "\n".. "\n".. "\n", "Mit Hilfe eines Stromzählers können zwei Stromnetze zu einem größeren Netzwerk verbunden werden. Der Stromzähler leitet den Strom nur in eine Richtungen weiter (Pfeil beachten). Die Menge an Strom (in kud) wird gemessen und angezeigt. Die Strommenge kann auch über das Kommando 'consumption' durch einen Lua Controller abgefragt werden.\n".. "\n".. - "Der Stromzähler kann bis zu 200 ku durchleiten.\n".. + "Der Stromzähler kann bis zu 200 ku durchleiten. Der Maximalwert ist über das Schraubenschlüsselmenü einstellbar.\n".. + "\n".. + "Über das Schraubenschlüsselmenü kann auch ein Countdown für die Leistungsabgabe eingegeben werden. Läuft dieser Countdown auf Null\\, schaltet sich der Stromzähler ab. Der Countdown kann über das Kommando 'countdown' abgefragt werden.\n".. "\n".. "\n".. "\n", @@ -1719,7 +1723,7 @@ techage.manual_DE.aText = { "\n".. "Anleitung:\n".. "\n".. - " - Controller setzen und die Blöcke\\, die bewegt werden sollen\\, über das Menü an-trainieren (Es können bis zu 16 Blöcke an-trainiert werden)\n".. + " - Controller setzen und die Blöcke\\, die bewegt werden sollen\\, über das Menü (Taste \"Aufzeichnen\") an-trainieren (Es können bis zu 16 Blöcke an-trainiert werden)\n".. " - die \"Flugstrecke\" muss über eine x\\,y\\,z Angabe (relativ) eingegeben werden (die maximale Distanz (x+y+z) beträgt 200 m)\n".. " - mit den Menü-Tasten \"Bewege A-B\" sowie \"Bewege B-A\" kann die Bewegung getestet werden\n".. " - man kann auch durch Wände oder andere Blöcke fliegen\n".. @@ -2101,6 +2105,10 @@ techage.manual_DE.aText = { "\n".. "Die Nutzung des TA5 Flug Controllers benötigt 40 Erfahrungspunkte.\n".. "\n".. + "*Teleport Mode*\n".. + "\n".. + "Wird der 'Teleport Mode' aktiviert (auf 'enable' gesetzt)\\, kann ein Spieler auch ohne Blöcke bewegt werden. Dazu muss die Startposition über die Taste \"Aufzeichnen\" konfiguriert werden. Es kann hier nur eine Position konfiguriert werden. Das Spieler\\, der bewegt werden soll\\, muss dazu auf dieser Position stehen. \n".. + "\n".. "\n".. "\n", "Die TA5 Hyperloop Kiste erlaubt den Transport von Gegenständen über ein Hyperloop Netzwerk.\n".. diff --git a/techage/doc/manual_EN.lua b/techage/doc/manual_EN.lua index 0e8365f..7ac1e38 100644 --- a/techage/doc/manual_EN.lua +++ b/techage/doc/manual_EN.lua @@ -326,7 +326,8 @@ techage.manual_EN.aText = { "\n".. "\n".. "\n", - "Baborium is only extracted in underground mining. Baborium can only be found in stone at an altitude between -250 and -340 meters.\n".. + "Barborium can only be obtained from underground mining. This substance can only be found at a depth of -250 to -340 meters.\n".. + "\n".. "Baborium can only be melted in the TA3 Industrial Furnace.\n".. "\n".. "\n".. @@ -397,7 +398,7 @@ techage.manual_EN.aText = { " - Build a stone tower (cobble) with a 3x3 base (7-11 blocks high)\n".. " - Leave a hole open on one side at the bottom\n".. " - Put a lighter in it\n".. - " - Fill the tower with charcoal from the top to the top\n".. + " - Fill the tower to the brim with charcoal by dropping the charcoal into the hole from above\n".. " - Light the lighter through the hole\n".. " - Place the melting pot in the flame over the tower\n(one block above the flame)\n".. " - To stop the burner\\, temporarily close the hole with an dirt block\\, for example.\n".. @@ -839,7 +840,7 @@ techage.manual_EN.aText = { "The TA3 industrial furnace serves as a supplement to normal furnaces. This means that all goods can be produced with \"cooking\" recipes\\, even in an industrial furnace. But there are also special recipes that can only be made in an industrial furnace.\n".. "The industrial furnace has its own menu for recipe selection. Depending on the goods in the industrial furnace inventory on the left\\, the output product can be selected on the right.\n".. "\n".. - "The industrial furnace requires electricity (for the fan) and fuel oil / gasoline for the burner. The industrial furnace and must be assembled as shown in the plan on the right.\n".. + "The industrial furnace requires electricity (for the booster) and fuel oil / gasoline for the burner. The industrial furnace must be assembled as shown in the plan on the right.\n".. "\n".. "See also TA4 heater.\n".. "\n".. @@ -1405,11 +1406,13 @@ techage.manual_EN.aText = { "\n", "The thermal energy storage replaces the battery block from TA3.\n".. "\n".. - "The thermal energy store consists of a concrete shell (concrete blocks) filled with gravel. Three sizes of the storage are possible:\n".. + "The thermal energy store consists of a concrete shell (concrete blocks) filled with gravel. Five sizes of the storage are possible:\n".. "\n".. " - Cover with 5x5x5 concrete blocks\\, filled with 27 gravel\\, storage capacity: 22.5 kud\n".. " - Cover with 7x7x7 concrete blocks\\, filled with 125 gravel\\, storage capacity: 104 kud\n".. " - Cover with 9x9x9 concrete blocks\\, filled with 343 gravel\\, storage capacity: 286 kud\n".. + " - Cover with 11x11x11 concrete blocks\\, filled with 729 gravel\\, storage capacity: 610 kud\n".. + " - Cover with 13x13x13 concrete blocks\\, filled with 1331 gravel\\, storage capacity: 1112 kud\n".. "\n".. "A window made of an obsidian glass block may be in the concrete shell. This must be placed fairly in the middle of the wall. Through this window you can see whether the storage is loaded more than 80%. In the plan on the right you can see the structure of TA4 heat exchanger consisting of 3 blocks\\, the TA4 turbine and the TA4 generator. Pay attention to the alignment of the heat exchanger (the arrow at block 1 must point to the turbine).\n".. "\n".. @@ -1457,13 +1460,15 @@ techage.manual_EN.aText = { "\n", "With the help of an isolating transformer\\, two power grids can be connected to form a larger network. The isolation transformer can transmit electricity in both directions.\n".. "\n".. - "The isolation transformer can transmit up to 100 ku. \n".. + "The isolation transformer can transmit up to 300 ku. The maximum value is adjustable via the wrench menu.\n".. "\n".. "\n".. "\n", "With the help of an electricity meter\\, two electricity networks can be connected to form a larger network. The electricity meter only transmits electricity in one direction (note arrow). The amount of electricity (in kud) is measured and displayed. The amount of electricity can also be queried by a Lua controller using the 'consumption' command.\n".. "\n".. - "The electricity meter can pass up to 200 ku. \n".. + "The electricity meter can pass up to 200 ku. The maximum value is adjustable via the wrench menu.\n".. + "\n".. + "A power output countdown can also be entered via the wrench menu. When this countdown reaches zero\\, the electricity meter switches off. The countdown can be queried using the 'countdown' command.\n".. "\n".. "\n".. "\n", @@ -1620,7 +1625,7 @@ techage.manual_EN.aText = { "\n".. "\n".. "\n", - "As the name suggests\\, the Lua controller must be programmed in the Lua programming language. You should also be able to speak some English. The manual in English is here available:\n".. + "As the name suggests\\, the Lua controller must be programmed in the Lua programming language. The manual in English is here available:\n".. "\n".. "https://github.com/joe7575/techage/blob/master/manuals/ta4_lua_controller_EN.md\n".. "\n".. @@ -2109,6 +2114,10 @@ techage.manual_EN.aText = { "\n".. "The use of the TA5 Flight Controller requires 40 experience points.\n".. "\n".. + "*Teleport mode*\n".. + "\n".. + "If the 'Teleport Mode' is enabled\\, a player can also be moved without blocks. To do this\\, the start position must be configured using the \"Record\" button. Only one position can be configured here. The player to be moved must be in that position.\n".. + "\n".. "\n".. "\n", "The TA5 Hyperloop Chest allows objects to be transported over a Hyperloop network.\n".. diff --git a/techage/doc/plans.lua b/techage/doc/plans.lua index ad24c67..a109736 100644 --- a/techage/doc/plans.lua +++ b/techage/doc/plans.lua @@ -341,7 +341,7 @@ techage.ConstructionPlans["ta3_distiller"] = { -- -- Chemical Reactor -- -local RBASE = {"techage_concrete.png", "techage:ta4_reactor_stand"} +local RBASE = {"techage_concrete.png", "techage:ta4_reactor_base"} local STAND = {"techage_reactor_stand_side.png", "techage:ta4_reactor_stand"} local REACT = {"techage_reactor_plan.png", "techage:ta4_reactor"} local FILLR = {"techage_reactor_filler_plan.png", "techage:ta4_reactor_fillerpipe"} diff --git a/techage/energy_storage/generator.lua b/techage/energy_storage/generator.lua index 4621661..10ab0a7 100644 --- a/techage/energy_storage/generator.lua +++ b/techage/energy_storage/generator.lua @@ -66,7 +66,7 @@ minetest.register_node("techage:ta4_generator_on", { "techage_filling_ta4.png^techage_appl_hole_electric.png^techage_frame_ta4.png", "techage_filling_ta4.png^techage_appl_open.png^techage_frame_ta4.png", { - image = "techage_filling4_ta4.png^techage_appl_generator4.png^techage_frame4_ta4.png", + name = "techage_filling4_ta4.png^techage_appl_generator4.png^techage_frame4_ta4.png", backface_culling = false, animation = { type = "vertical_frames", @@ -76,7 +76,7 @@ minetest.register_node("techage:ta4_generator_on", { }, }, { - image = "techage_filling4_ta4.png^techage_appl_generator4.png^[transformFX]^techage_frame4_ta4.png", + name = "techage_filling4_ta4.png^techage_appl_generator4.png^[transformFX]^techage_frame4_ta4.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/energy_storage/heatexchanger2.lua b/techage/energy_storage/heatexchanger2.lua index 938f9f2..4aee1a9 100644 --- a/techage/energy_storage/heatexchanger2.lua +++ b/techage/energy_storage/heatexchanger2.lua @@ -27,9 +27,11 @@ local control = networks.control local CYCLE_TIME = 2 local GRVL_CAPA = 500 local PWR_CAPA = { - [5] = GRVL_CAPA * 3 * 3 * 3, -- 13500 Cyc = 450 min = 22.5 kud - [7] = GRVL_CAPA * 5 * 5 * 5, -- 104 kud - [9] = GRVL_CAPA * 7 * 7 * 7, -- 286 kuh + [5] = GRVL_CAPA * 3 * 3 * 3, -- 13500 Cyc = 450 min = 22.5 kud + [7] = GRVL_CAPA * 5 * 5 * 5, -- 104 kud + [9] = GRVL_CAPA * 7 * 7 * 7, -- 286 kuh + [11] = GRVL_CAPA * 9 * 9 * 9, -- 610 kuh + [13] = GRVL_CAPA * 11 * 11 * 11, -- 1112 kuh } local DOWN = 5 local PWR_NEEDED = 5 diff --git a/techage/energy_storage/inlet.lua b/techage/energy_storage/inlet.lua index 8cb59d9..e5dc23d 100644 --- a/techage/energy_storage/inlet.lua +++ b/techage/energy_storage/inlet.lua @@ -61,11 +61,15 @@ local Numbers = { [2] = 96, -- 5x5x2 + 3x5x2 + 3x3x2 - 2 [3] = 216, -- 7x7x2 + 5x7x2 + 5x5x2 - 2 [4] = 384, -- 9x9x2 + 7x9x2 + 7x7x2 - 2 + [5] = 600, -- 11x11x2 + 9x11x2 + 9x9x2 - 2 + [6] = 864, -- 13x13x2 + 11x13x2 + 11x11x2 - 2 }, filling = { [2] = 27, -- 3x3x3 [3] = 125, -- 5x5x5 [4] = 343, -- 7x7x7 + [5] = 729, -- 9x9x9 + [6] = 1331, -- 11x11x11 } } @@ -101,6 +105,24 @@ local function get_diameter(pos, in_dir) end pos2 = vector.add(pos, vector.multiply(dir, 10)) + node = minetest.get_node(pos2) + if node.name == "techage:ta3_pipe_wall_entry" then + return + end + if node.name == "techage:ta4_pipe_inlet" then + return 11 + end + + pos2 = vector.add(pos, vector.multiply(dir, 12)) + node = minetest.get_node(pos2) + if node.name == "techage:ta3_pipe_wall_entry" then + return + end + if node.name == "techage:ta4_pipe_inlet" then + return 13 + end + + pos2 = vector.add(pos, vector.multiply(dir, 14)) local poses = minetest.find_nodes_in_area(pos, pos2, {"techage:ta4_pipe_inlet"}) if #poses > 1 then return vector.distance(pos, poses[2]) + 1 diff --git a/techage/energy_storage/turbine.lua b/techage/energy_storage/turbine.lua index 3231639..3de46e7 100644 --- a/techage/energy_storage/turbine.lua +++ b/techage/energy_storage/turbine.lua @@ -62,7 +62,7 @@ minetest.register_node("techage:ta4_turbine", { "techage_filling_ta4.png^techage_frame_ta4.png", "techage_filling_ta4.png^techage_appl_open.png^techage_frame_ta4.png", "techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_pipe.png", - "techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta4.png", + "techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta4.png^[transformFX", "techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta4.png", }, @@ -92,7 +92,7 @@ minetest.register_node("techage:ta4_turbine_on", { "techage_filling_ta4.png^techage_appl_open.png^techage_frame_ta4.png", "techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_pipe.png", { - image = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta4.png", + name = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta4.png^[transformFX", backface_culling = false, animation = { type = "vertical_frames", @@ -102,7 +102,7 @@ minetest.register_node("techage:ta4_turbine_on", { }, }, { - image = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta4.png", + name = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta4.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/furnace/booster.lua b/techage/furnace/booster.lua index 123a442..87b1736 100644 --- a/techage/furnace/booster.lua +++ b/techage/furnace/booster.lua @@ -110,7 +110,7 @@ minetest.register_node("techage:ta3_booster_on", { "techage_filling_ta3.png^techage_appl_hole_pipe.png^techage_frame_ta3.png", "techage_filling_ta3.png^techage_appl_hole_electric.png^techage_frame_ta3.png", { - image = "techage_filling4_ta3.png^techage_appl_compressor4.png^techage_frame4_ta3.png", + name = "techage_filling4_ta3.png^techage_appl_compressor4.png^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", @@ -120,7 +120,7 @@ minetest.register_node("techage:ta3_booster_on", { }, }, { - image = "techage_filling4_ta3.png^techage_appl_compressor4.png^[transformFX]^techage_frame4_ta3.png", + name = "techage_filling4_ta3.png^techage_appl_compressor4.png^[transformFX]^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/furnace/firebox.lua b/techage/furnace/firebox.lua index 03483bb..f4d54b6 100644 --- a/techage/furnace/firebox.lua +++ b/techage/furnace/firebox.lua @@ -127,7 +127,7 @@ minetest.register_node("techage:furnace_firebox_on", { "techage_concrete.png^techage_frame_ta3.png", "techage_concrete.png^techage_frame_ta3.png", { - image = "techage_concrete4.png^techage_appl_firehole4.png^techage_frame4_ta3.png", + name = "techage_concrete4.png^techage_appl_firehole4.png^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/fusion_reactor/controller.lua b/techage/fusion_reactor/controller.lua index cc6f9e5..31e9068 100644 --- a/techage/fusion_reactor/controller.lua +++ b/techage/fusion_reactor/controller.lua @@ -232,7 +232,7 @@ minetest.register_node("techage:ta5_fr_controller_act", { "techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_hole_electric.png", "techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_hole_electric.png", { - image = "techage_filling4_ta4.png^techage_appl_plasma4.png^techage_frame4_ta5.png", + name = "techage_filling4_ta4.png^techage_appl_plasma4.png^techage_frame4_ta5.png", backface_culling = false, animation = { type = "vertical_frames", @@ -242,7 +242,7 @@ minetest.register_node("techage:ta5_fr_controller_act", { }, }, { - image = "techage_filling4_ta4.png^techage_appl_plasma4.png^techage_frame4_ta5.png", + name = "techage_filling4_ta4.png^techage_appl_plasma4.png^techage_frame4_ta5.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/fusion_reactor/generator.lua b/techage/fusion_reactor/generator.lua index cd78b5c..28b03b3 100644 --- a/techage/fusion_reactor/generator.lua +++ b/techage/fusion_reactor/generator.lua @@ -117,7 +117,7 @@ minetest.register_node("techage:ta5_generator_on", { "techage_filling_ta4.png^techage_appl_hole_electric.png^techage_frame_ta5.png", "techage_filling_ta4.png^techage_appl_open.png^techage_frame_ta5.png", { - image = "techage_filling4_ta4.png^techage_appl_generator4.png^techage_frame4_ta5.png", + name = "techage_filling4_ta4.png^techage_appl_generator4.png^techage_frame4_ta5.png", backface_culling = false, animation = { type = "vertical_frames", @@ -127,7 +127,7 @@ minetest.register_node("techage:ta5_generator_on", { }, }, { - image = "techage_filling4_ta4.png^techage_appl_generator4.png^[transformFX]^techage_frame4_ta5.png", + name = "techage_filling4_ta4.png^techage_appl_generator4.png^[transformFX]^techage_frame4_ta5.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/fusion_reactor/ta5_pump.lua b/techage/fusion_reactor/ta5_pump.lua index a522bc3..f054f5c 100644 --- a/techage/fusion_reactor/ta5_pump.lua +++ b/techage/fusion_reactor/ta5_pump.lua @@ -113,7 +113,7 @@ local tiles_act = { "techage_filling_ta4.png^techage_appl_hole_ta5_pipe2.png^techage_frame_ta5.png", "techage_filling_ta4.png^techage_appl_hole_pipe.png^techage_frame_ta5.png", { - image = "techage_filling8_ta4.png^techage_appl_pump8.png^techage_frame8_ta5.png^[transformFX", + name = "techage_filling8_ta4.png^techage_appl_pump8.png^techage_frame8_ta5.png^[transformFX", backface_culling = false, animation = { type = "vertical_frames", @@ -123,7 +123,7 @@ local tiles_act = { }, }, { - image = "techage_filling8_ta4.png^techage_appl_pump8.png^techage_frame8_ta5.png", + name = "techage_filling8_ta4.png^techage_appl_pump8.png^techage_frame8_ta5.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/fusion_reactor/turbine.lua b/techage/fusion_reactor/turbine.lua index 4703304..1f5a6fa 100644 --- a/techage/fusion_reactor/turbine.lua +++ b/techage/fusion_reactor/turbine.lua @@ -62,7 +62,7 @@ minetest.register_node("techage:ta5_turbine", { "techage_filling_ta4.png^techage_frame_ta4_bottom.png", "techage_filling_ta4.png^techage_appl_open.png^techage_frame_ta5.png", "techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_hole_pipe.png", - "techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta5.png", + "techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta5.png^[transformFX", "techage_filling_ta4.png^techage_appl_turbine.png^techage_frame_ta5.png", }, @@ -92,7 +92,7 @@ minetest.register_node("techage:ta5_turbine_on", { "techage_filling_ta4.png^techage_appl_open.png^techage_frame_ta5.png", "techage_filling_ta4.png^techage_frame_ta5.png^techage_appl_hole_pipe.png", { - image = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta5.png", + name = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta5.png^[transformFX", backface_culling = false, animation = { type = "vertical_frames", @@ -102,7 +102,7 @@ minetest.register_node("techage:ta5_turbine_on", { }, }, { - image = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta5.png", + name = "techage_filling4_ta4.png^techage_appl_turbine4.png^techage_frame4_ta5.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/hydrogen/electrolyzer.lua b/techage/hydrogen/electrolyzer.lua index 9cab71f..b9f256b 100644 --- a/techage/hydrogen/electrolyzer.lua +++ b/techage/hydrogen/electrolyzer.lua @@ -253,7 +253,7 @@ minetest.register_node("techage:ta4_electrolyzer_on", { "techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_pipe.png", "techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_electric.png", { - image = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_electrolyzer4.png^techage_appl_ctrl_unit4.png^[transformFX", + name = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_electrolyzer4.png^techage_appl_ctrl_unit4.png^[transformFX", backface_culling = false, animation = { type = "vertical_frames", @@ -263,7 +263,7 @@ minetest.register_node("techage:ta4_electrolyzer_on", { }, }, { - image = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_electrolyzer4.png^techage_appl_ctrl_unit4.png", + name = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_electrolyzer4.png^techage_appl_ctrl_unit4.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/hydrogen/fuelcell.lua b/techage/hydrogen/fuelcell.lua index 791558c..1a583dd 100644 --- a/techage/hydrogen/fuelcell.lua +++ b/techage/hydrogen/fuelcell.lua @@ -215,7 +215,7 @@ minetest.register_node("techage:ta4_fuelcell_on", { "techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_electric.png", "techage_filling_ta4.png^techage_frame_ta4.png^techage_appl_hole_pipe.png", { - image = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_fuelcell4.png^techage_appl_ctrl_unit4.png^[transformFX", + name = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_fuelcell4.png^techage_appl_ctrl_unit4.png^[transformFX", backface_culling = false, animation = { type = "vertical_frames", @@ -225,7 +225,7 @@ minetest.register_node("techage:ta4_fuelcell_on", { }, }, { - image = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_fuelcell4.png^techage_appl_ctrl_unit4.png", + name = "techage_filling4_ta4.png^techage_frame4_ta4.png^techage_appl_fuelcell4.png^techage_appl_ctrl_unit4.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/init.lua b/techage/init.lua index fb9cae4..5fc377a 100644 --- a/techage/init.lua +++ b/techage/init.lua @@ -13,7 +13,7 @@ techage = {} -- Version for compatibility checks, see readme.md/history -techage.version = 1.11 +techage.version = 1.15 if minetest.global_exists("tubelib") then minetest.log("error", "[techage] Techage can't be used together with the mod tubelib!") @@ -57,6 +57,7 @@ techage.ore_rarity = tonumber(minetest.settings:get("techage_ore_rarity")) or 1 techage.modified_recipes_enabled = minetest.settings:get_bool("techage_modified_recipes_enabled") ~= false techage.collider_min_depth = tonumber(minetest.settings:get("techage_collider_min_depth")) or -28 techage.recipe_checker_enabled = minetest.settings:get_bool("techage_recipe_checker_enabled") ~= false +techage.stair_aliases_enabled = minetest.settings:get_bool("techage_stair_aliases_enabled") ~= false -- allow to load marshal and sqlite3 techage.IE = minetest.request_insecure_environment() diff --git a/techage/iron_age/meltingpot.lua b/techage/iron_age/meltingpot.lua index ba0bb4d..3cc55be 100644 --- a/techage/iron_age/meltingpot.lua +++ b/techage/iron_age/meltingpot.lua @@ -335,7 +335,7 @@ minetest.register_node("techage:meltingpot_active", { description = S("TA1 Melting Pot"), tiles = { { - image = "techage_meltingpot_top_active.png", + name = "techage_meltingpot_top_active.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/items/moreblocks.lua b/techage/items/moreblocks.lua index f0ebddd..0204e67 100644 --- a/techage/items/moreblocks.lua +++ b/techage/items/moreblocks.lua @@ -53,8 +53,8 @@ local NodeNames = { "techage:basalt_glass", "techage:basalt_glass2", - "techage:bauxite_stone", "techage:bauxite_cobble", + "techage:bauxite_stone", "techage:cement_block", } @@ -64,13 +64,18 @@ if(minetest.get_modpath("moreblocks")) then local ndef = minetest.registered_nodes[name] if ndef then ndef = table.copy(ndef) + if ndef.drop then -- this fixes https://github.com/fluxionary/minetest-moreblocks/issues/19 + ndef.drop = nil + end local subname = string.split(name, ":")[2] ndef.sunlight_propagates = true ndef.groups.not_in_creative_inventory = 1 stairsplus:register_all("techage", subname, name, ndef) - register_alias(subname) + if techage.stair_aliases_enabled then + register_alias(subname) + end end - end + end else for _,name in ipairs(NodeNames) do local ndef = minetest.registered_nodes[name] @@ -86,7 +91,9 @@ else ndef.sound, false ) - register_alias(subname) + if techage.stair_aliases_enabled then + register_alias(subname) + end end end end diff --git a/techage/lamps/growlight.lua b/techage/lamps/growlight.lua index 119bcb0..10ce91d 100644 --- a/techage/lamps/growlight.lua +++ b/techage/lamps/growlight.lua @@ -181,15 +181,15 @@ local function contains(table, element) end function techage.register_flower(name) - if contains(Flowers, name) then - return + if contains(Flowers, name) then + return end Flowers[#Flowers+1] = name end function techage.register_plant(name) - if contains(Plants, name) then - return + if contains(Plants, name) then + return end Plants[name] = true end diff --git a/techage/liquids/filler.lua b/techage/liquids/filler.lua index b547185..38b8a3d 100644 --- a/techage/liquids/filler.lua +++ b/techage/liquids/filler.lua @@ -20,7 +20,7 @@ local liquid = techage.liquid local CYCLE_TIME = 2 local function formspec(pos) - return "size[8,7]".. + return "size[8,8]".. default.gui_bg.. default.gui_bg_img.. default.gui_slots.. @@ -29,7 +29,7 @@ local function formspec(pos) "list[context;src;0,0.8;3,3;]".. "image[3.5,1.8;1,1;techage_form_arrow_bg.png^[transformR270]".. "list[context;dst;5,0.8;3,3;]".. - "list[current_player;main;0,4.2;8,3;]".. + "list[current_player;main;0,4.2;8,4;]".. "listring[current_player;main]".. "listring[context;src]" .. "listring[current_player;main]".. diff --git a/techage/liquids/pump.lua b/techage/liquids/pump.lua index f62d336..d9a842a 100644 --- a/techage/liquids/pump.lua +++ b/techage/liquids/pump.lua @@ -168,6 +168,7 @@ end local function after_dig_node(pos, oldnode, oldmetadata, digger) Pipe:after_dig_node(pos) + techage.remove_node(pos, oldnode, oldmetadata) techage.del_mem(pos) end @@ -198,7 +199,7 @@ local ta3_tiles_act = { "techage_filling_ta3.png^techage_appl_hole_pipe.png^techage_frame_ta3.png", "techage_filling_ta3.png^techage_appl_hole_pipe.png^techage_frame_ta3.png", { - image = "techage_filling8_ta3.png^techage_appl_pump8.png^techage_frame8_ta3.png^[transformFX", + name = "techage_filling8_ta3.png^techage_appl_pump8.png^techage_frame8_ta3.png^[transformFX", backface_culling = false, animation = { type = "vertical_frames", @@ -208,7 +209,7 @@ local ta3_tiles_act = { }, }, { - image = "techage_filling8_ta3.png^techage_appl_pump8.png^techage_frame8_ta3.png", + name = "techage_filling8_ta3.png^techage_appl_pump8.png^techage_frame8_ta3.png", backface_culling = false, animation = { type = "vertical_frames", @@ -226,7 +227,7 @@ local ta4_tiles_act = { "techage_filling_ta4.png^techage_appl_hole_pipe.png^techage_frame_ta4.png", "techage_filling_ta4.png^techage_appl_hole_pipe.png^techage_frame_ta4.png", { - image = "techage_filling8_ta4.png^techage_appl_pump8.png^techage_frame8_ta4.png^[transformFX", + name = "techage_filling8_ta4.png^techage_appl_pump8.png^techage_frame8_ta4.png^[transformFX", backface_culling = false, animation = { type = "vertical_frames", @@ -236,7 +237,7 @@ local ta4_tiles_act = { }, }, { - image = "techage_filling8_ta4.png^techage_appl_pump8.png^techage_frame8_ta4.png", + name = "techage_filling8_ta4.png^techage_appl_pump8.png^techage_frame8_ta4.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/liquids/ta5_tank.lua b/techage/liquids/ta5_tank.lua index 3c30610..e41b3be 100644 --- a/techage/liquids/ta5_tank.lua +++ b/techage/liquids/ta5_tank.lua @@ -103,3 +103,9 @@ minetest.register_craft({ {"", "", ""}, }, }) + +minetest.register_on_mods_loaded(function() + if not minetest.global_exists("hyperloop") then + minetest.clear_craft({output = "techage:ta5_hl_tank"}) + end +end) diff --git a/techage/locale/techage.de.tr b/techage/locale/techage.de.tr index ce57498..597dc14 100644 --- a/techage/locale/techage.de.tr +++ b/techage/locale/techage.de.tr @@ -291,7 +291,6 @@ TA2 Cylinder=TA2 Zylinder ### detector.lua ### -Countdown=Countdown Counts down the number of items passed through@nand only triggers an 'on' command when it reaches zero.=Zählt die Anzahl der durchlaufenen Elemente herunter@nund löst nur dann einen 'ON'-Befehl aus, wenn er Null erreicht. Current countdown=Aktueller Zähler Current countdown value.=Aktueller Zählerwert. @@ -299,6 +298,11 @@ TA4 Collider Detector=TA4 Collider Detektor TA4 Collider Detector Core=TA4 Collider Detektorkern TA4 Detector=TA4 Detektor +### detector.lua ### +### electricmeter.lua ### + +Countdown=Countdown + ### detector.lua ### ### logic_block.lua ### ### tele.lua ### @@ -348,12 +352,11 @@ TA3 Door Controller=TA3 Tür Controller ### doorcontroller2.lua ### -Blocks are back=Blöcke sind wieder da -Blocks are disappeared=Blöcke sind verschwunden +Blocks exchanged=Blöcke ausgetauscht +Blocks reset=Blöcke rückgesetzt Click on all the blocks that are part of the door/gate=Klicke auf alle Blöcke, die Teil des Tores sind Ctrl,Inv=Ctrl,Inv -Remove=Entfernen -Set=Setzen +Exchange=Austauschen TA3 Door Controller II=TA3 Tür Controller II with door sound=mit Türgeräusch @@ -367,6 +370,11 @@ Record=Aufzeichnen Recording...=Aufzeichnung... block positions are stored.=Block Positionen gespeichert. +### doorcontroller2.lua ### +### movecontroller.lua ### + +Reset=Rücksetzen + ### drillbox.lua ### Build derrick=Errichte Ölturm @@ -388,7 +396,9 @@ TA Electric Cable=TA Stromkabel ### electricmeter.lua ### +Amount of power to be provided before the device turns off=Strommenge, die bereitgestellt werden soll, bis sich das Gerät ausschaltet Consumption=Verbrauch +Power countdown=Leistungs-Countdown TA4 Electric Meter=TA4 Stromzähler ### electricmeter.lua ### @@ -397,6 +407,12 @@ TA4 Electric Meter=TA4 Stromzähler Power=Strom +### electricmeter.lua ### +### transformer.lua ### + +Max. power=Max. Leistung +Maximum power passed through=Max. Leistung, die durchgeleitet werden soll + ### electrolyzer.lua ### Configurable value@nfor the current limit=Konfigurierbarer Wert@nfür die Strombegrenzung @@ -468,6 +484,7 @@ Destination position is protected=Zielposition ist geschützt Error: Max. length of the flight route exceeded by @1 blocks !!=Fehler: max. Länge der Flugstrecke um @1 Blöcke überschritten !! No valid destination position=Keine gültige Zielposition No valid node at the start position=Kein gültiger Block an der Startposition +No valid start position=Keine gültige Startposition Running=In Betrieb Start position is protected=Startposition ist geschützt Stopped=Gestoppt @@ -503,9 +520,11 @@ Maximum speed for moving blocks=Maximale Geschwindigkeit für bewegliche Blöcke Move=Bewege Move A-B=Bewege A-B Move B-A=Bewege B-A +Move a player without moving blocks=Bewege einen Spieler ohne Blöcke Move block height=Move Block Höhe Object offset=Objekt Offset Stored=Gespeichert +Teleport mode=Teleport Mode Value in the range of 0.0 to 1.0=Wert im Bereich von 0.0 bis 1.0 Y-offset for non-player objects like vehicles (-0.5 to 0.5)=Y-Offset für Nicht-Spieler Objekte wie Fahrzeuge (-0.5 bis 0.5) @@ -904,7 +923,6 @@ Error: Invalid distance !!=Fehler: Ungültige Entfernung !! Move distance=Entfernung Move distance (A to B)=Entfernung (A nach B) Operational mode=Betriebsmodus -Reset=Rücksetzen Switch to the remote controlled 'move xyz' mode=Wechseln in den ferngesteuerten 'move xyz'-Modus TA Rack and Pinion=TA Zahnstange TA4 Move Controller=TA4 Move Controller @@ -1000,7 +1018,7 @@ TA Power Pole Top 2 (for landlines)=TA Strommastkopf 2 (für Überlandleitungen) ### power_terminal2.lua ### -Commands@nhelp . . . print this text@ncls . . . . . clear screen@ngen . . . . print all generators@nsto . . . . . print all storage systems@ncon . . . . . print main consumers@n=Kommandos@nhelp . . . diesen Text ausgeben@ncls . . . . . Bildschirm löschen@ngen . . . . Alle Generatoren ausgeben@nsto . . . . . Alle Speichersysteme ausgeben@ncon . . . . . Hauptverbraucher ausgeben@n +Commands@nhelp . . . print this text@ncls . . . . clear screen@ngen . . print generators@nsto . . print storage systems@ncon1 . . print consumers with power consumption between 1 and 10 ku@ncon2 . . print consumers with power consumption with 10 ku or above@n=Commands@nhelp . . . diesen Text ausgeben@ncls . . . . lösche Bildschirm@ngen . . Generatoren ausgeben@nsto . . Speichersysteme ausgeben@ncon1 . . Verbraucher mit einem Verbrauch zw. 1 und 10 ku ausgeben@ncon2 . . Verbraucher ab 10 ku Verbrauch ausgeben@n Consumer=Verbraucher Network Data=Netzwerkdaten Number of consumers:=Anzahl der Verbraucher @@ -1511,6 +1529,11 @@ TA4 Collider Detector Worker=TA4 Collider Detektor Worker ##### not used anymore ##### +Blocks are back=Blöcke sind wieder da +Blocks are disappeared=Blöcke sind verschwunden +Remove=Entfernen +Set=Setzen +Commands@nhelp . . . print this text@ncls . . . . . clear screen@ngen . . . . print all generators@nsto . . . . . print all storage systems@ncon . . . . . print main consumers@n=Kommandos@nhelp . . . diesen Text ausgeben@ncls . . . . . Bildschirm löschen@ngen . . . . Alle Generatoren ausgeben@nsto . . . . . Alle Speichersysteme ausgeben@ncon . . . . . Hauptverbraucher ausgeben@n Handover to A=Übergabe an A Handover to B=Übergabe an B Number of the next movecontroller=Nummer des nächsten Move Controllers diff --git a/techage/locale/template.txt b/techage/locale/template.txt index c75c27a..9f4bee3 100644 --- a/techage/locale/template.txt +++ b/techage/locale/template.txt @@ -291,7 +291,6 @@ TA2 Cylinder= ### detector.lua ### -Countdown= Counts down the number of items passed through@nand only triggers an 'on' command when it reaches zero.= Current countdown= Current countdown value.= @@ -299,6 +298,11 @@ TA4 Collider Detector= TA4 Collider Detector Core= TA4 Detector= +### detector.lua ### +### electricmeter.lua ### + +Countdown= + ### detector.lua ### ### logic_block.lua ### ### tele.lua ### @@ -348,12 +352,11 @@ TA3 Door Controller= ### doorcontroller2.lua ### -Blocks are back= -Blocks are disappeared= +Blocks exchanged= +Blocks reset= Click on all the blocks that are part of the door/gate= Ctrl,Inv= -Remove= -Set= +Exchange= TA3 Door Controller II= with door sound= @@ -367,6 +370,11 @@ Record= Recording...= block positions are stored.= +### doorcontroller2.lua ### +### movecontroller.lua ### + +Reset= + ### drillbox.lua ### Build derrick= @@ -388,7 +396,9 @@ TA Electric Cable= ### electricmeter.lua ### +Amount of power to be provided before the device turns off= Consumption= +Power countdown= TA4 Electric Meter= ### electricmeter.lua ### @@ -397,6 +407,12 @@ TA4 Electric Meter= Power= +### electricmeter.lua ### +### transformer.lua ### + +Max. power= +Maximum power passed through= + ### electrolyzer.lua ### Configurable value@nfor the current limit= @@ -468,6 +484,7 @@ Destination position is protected= Error: Max. length of the flight route exceeded by @1 blocks !!= No valid destination position= No valid node at the start position= +No valid start position= Running= Start position is protected= Stopped= @@ -503,9 +520,11 @@ Maximum speed for moving blocks= Move= Move A-B= Move B-A= +Move a player without moving blocks= Move block height= Object offset= Stored= +Teleport mode= Value in the range of 0.0 to 1.0= Y-offset for non-player objects like vehicles (-0.5 to 0.5)= @@ -904,7 +923,6 @@ Error: Invalid distance !!= Move distance= Move distance (A to B)= Operational mode= -Reset= Switch to the remote controlled 'move xyz' mode= TA Rack and Pinion= TA4 Move Controller= @@ -1000,7 +1018,7 @@ TA Power Pole Top 2 (for landlines)= ### power_terminal2.lua ### -Commands@nhelp . . . print this text@ncls . . . . . clear screen@ngen . . . . print all generators@nsto . . . . . print all storage systems@ncon . . . . . print main consumers@n= +Commands@nhelp . . . print this text@ncls . . . . clear screen@ngen . . print generators@nsto . . print storage systems@ncon1 . . print consumers with power consumption between 1 and 10 ku@ncon2 . . print consumers with power consumption with 10 ku or above@n= Consumer= Network Data= Number of consumers:= diff --git a/techage/logic/collector.lua b/techage/logic/collector.lua index 6083952..f5568d5 100644 --- a/techage/logic/collector.lua +++ b/techage/logic/collector.lua @@ -21,9 +21,12 @@ local logic = techage.logic local CYCLE_TIME = 1 -local tStates = {stopped = 0, running = 0, standby = 1, blocked = 2, nopower = 3, fault = 4} +-- The numbering seems strange here, but I had to add the "running" state +-- afterwards without changing the behavior of the block. +local tStates = {stopped = 0, running = 1, standby = 2, blocked = 3, fault = 4, defect = 5} +local tDropdownPos = {["1 standby"] = 1, ["2 blocked"] = 2, ["3 fault"] = 3, ["4 defect"] = 4} +local lStates = {[0] = "stopped", "running", "standby", "blocked", "fault", "defect"} local tDropdownPos = {["1 standby"] = 1, ["2 blocked"] = 2, ["3 nopower"] = 3, ["4 fault"] = 4} -local lStates = {[0] = "stopped", "standby", "blocked", "nopower", "fault"} local TaStates = {running = 1, blocked = 2, standby = 3, nopower = 4, fault = 5, stopped = 6} local function formspec(nvm, meta) @@ -50,7 +53,7 @@ local function send_event(nvm, meta) if event_number ~= "" then local severity = meta:get_int("dropdown_pos") local own_number = meta:get_string("own_number") - if nvm.common_state >= severity then + if nvm.common_state > severity then techage.send_multi(own_number, event_number, "on") else techage.send_multi(own_number, event_number, "off") diff --git a/techage/logic/detector.lua b/techage/logic/detector.lua index daf790c..d7985ba 100644 --- a/techage/logic/detector.lua +++ b/techage/logic/detector.lua @@ -167,7 +167,7 @@ local function ta_after_formspec(pos, fields, playername) local nvm = techage.get_nvm(pos) local val = M(pos):get_int("countdown") or 0 if val > 0 then - nvm.countdown = val + nvm.countdown = val else nvm.countdown = nil end @@ -326,7 +326,7 @@ techage.register_node({"techage:ta4_detector_off", "techage:ta4_detector_on"}, { if leftover ~= true then num_moved = num_moved - leftover:get_count() end - + if nvm.countdown and nvm.countdown > 0 then nvm.countdown = nvm.countdown - num_moved if nvm.countdown <= 0 then diff --git a/techage/logic/mesecons_converter.lua b/techage/logic/mesecons_converter.lua index 9ab28e9..1bda3f8 100644 --- a/techage/logic/mesecons_converter.lua +++ b/techage/logic/mesecons_converter.lua @@ -3,7 +3,7 @@ TechAge ======= - Copyright (C) 2017-2020 Joachim Stolberg + Copyright (C) 2017-2023 Joachim Stolberg AGPL v3 See LICENSE.txt for more information @@ -33,6 +33,7 @@ local function send_message(pos, topic) 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)") + techage.logic.swap_node(pos, "techage:ta3_mesecons_converter") minetest.get_node_timer(pos):stop() return false end @@ -41,6 +42,40 @@ local function send_message(pos, topic) techage.send_multi(own_num, numbers, topic) end +local function on_receive_fields(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 + +local function on_timer(pos,elapsed) + local mem = techage.get_mem(pos) + mem.overload_cnt = 0 + return true +end + +local function techage_set_numbers(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 + +local function after_dig_node(pos, oldnode, oldmetadata) + techage.remove_node(pos, oldnode, oldmetadata) + techage.del_mem(pos) + mesecon.on_dignode(pos, oldnode) +end + + minetest.register_node("techage:ta3_mesecons_converter", { description = S("TA3 Mesecons Converter"), tiles = { @@ -56,37 +91,15 @@ minetest.register_node("techage:ta3_mesecons_converter", { 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 + mem.overload_cnt = -OVER_LOAD_MAX -- to prevent overload after placing 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, + on_receive_fields = on_receive_fields, + on_timer = on_timer, + techage_set_numbers = techage_set_numbers, + after_dig_node = after_dig_node, mesecons = { receptor = { @@ -96,29 +109,66 @@ minetest.register_node("techage:ta3_mesecons_converter", { effector = { rules = mesecon.rules.default, action_on = function(pos, node) + techage.logic.swap_node(pos, "techage:ta3_mesecons_converter_on") send_message(pos, "on") end, action_off = function(pos, node) - send_message(pos, "off") end, action_change = function(pos, node) - send_message(pos, "change") + techage.logic.swap_node(pos, "techage:ta3_mesecons_converter_on") + send_message(pos, "on") 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_node("techage:ta3_mesecons_converter_on", { + 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", + }, + + on_receive_fields = on_receive_fields, + on_timer = on_timer, + techage_set_numbers = techage_set_numbers, + after_dig_node = after_dig_node, + + mesecons = { + receptor = { + state = mesecon.state.on, + rules = mesecon.rules.default, + }, + effector = { + rules = mesecon.rules.default, + action_on = function(pos, node) + end, + action_off = function(pos, node) + techage.logic.swap_node(pos, "techage:ta3_mesecons_converter") + send_message(pos, "off") + end, + action_change = function(pos, node) + techage.logic.swap_node(pos, "techage:ta3_mesecons_converter") + send_message(pos, "off") + end, + } + }, + + paramtype = "light", + light_source = 5, + paramtype2 = "facedir", + groups = {choppy=2, cracky=2, crumbly=2}, + is_ground_content = false, + sounds = default.node_sound_wood_defaults(), + drop = "techage:ta3_mesecons_converter", +}) minetest.register_craft({ output = "techage:ta3_mesecons_converter", @@ -127,7 +177,7 @@ minetest.register_craft({ }, }) -techage.register_node({"techage:ta3_mesecons_converter"}, { +techage.register_node({"techage:ta3_mesecons_converter", "techage:ta3_mesecons_converter_on"}, { on_recv_message = function(pos, src, topic, payload) local mem = techage.get_mem(pos) mem.overload_cnt = (mem.overload_cnt or 0) + 1 @@ -136,8 +186,10 @@ techage.register_node({"techage:ta3_mesecons_converter"}, { minetest.get_node_timer(pos):stop() return false elseif topic == "on" then + techage.logic.swap_node(pos, "techage:ta3_mesecons_converter_on") mesecon.receptor_on(pos, mesecon.rules.default) elseif topic == "off" then + techage.logic.swap_node(pos, "techage:ta3_mesecons_converter") mesecon.receptor_off(pos, mesecon.rules.default) end end, diff --git a/techage/logic/node_detector.lua b/techage/logic/node_detector.lua index 25f0db0..d516ba5 100644 --- a/techage/logic/node_detector.lua +++ b/techage/logic/node_detector.lua @@ -37,6 +37,12 @@ local DropdownValues = { [S("added or removed")] = 3, } +local AirLikeBlocks = {"air"} +for i = 1,14 do + -- Add light blocks from the mod "wielded_light" to the air-like blocks + AirLikeBlocks[#AirLikeBlocks + 1] = "wielded_light:" .. i +end + local function formspec(meta, nvm) local numbers = meta:get_string("numbers") or "" local label = S("added")..","..S("removed")..","..S("added or removed") @@ -57,10 +63,10 @@ local function any_node_changed(pos) local param2 = (node.param2 + 2) % 4 nvm.pos1 = logic.dest_pos(pos, param2, {0}) nvm.pos2 = logic.dest_pos(pos, param2, {0,0,0}) - nvm.num = #minetest.find_nodes_in_area(nvm.pos1, nvm.pos2, {"air"}) + nvm.num = #minetest.find_nodes_in_area(nvm.pos1, nvm.pos2, AirLikeBlocks) return false end - local num1 = #minetest.find_nodes_in_area(nvm.pos1, nvm.pos2, {"air"}) + local num1 = #minetest.find_nodes_in_area(nvm.pos1, nvm.pos2, AirLikeBlocks) local num2 = #minetest.find_nodes_in_area(nvm.pos1, nvm.pos2, {"ignore"}) if num2 == 0 and nvm.num ~= num1 then diff --git a/techage/logic/terminal.lua b/techage/logic/terminal.lua index 53a82e3..c8776f6 100644 --- a/techage/logic/terminal.lua +++ b/techage/logic/terminal.lua @@ -22,6 +22,7 @@ Local commands: - Output this message with 'help' - Switch to public use of buttons with 'pub' - Switch to private use of buttons with 'priv' +- Output techage version with 'vers' - Program a user button with 'set ' Example: 'set 1 ON cmd 1234 on' @@ -35,6 +36,7 @@ Local commands: - Output this message with 'help' - Switch to public use of buttons with 'pub' - Switch to private use of buttons with 'priv' +- Output techage version with 'vers' - Program a user button with 'set ' Example: 'set 1 ON cmd 1234 on' @@ -182,6 +184,9 @@ local function command(pos, command, player, is_ta4) meta:set_int("public", 0) output(pos, "$ "..command) output(pos, "Switched to private buttons!") + elseif cmnd == "vers" then + output(pos, "$ "..command) + output(pos, "Techage version = " .. techage.version) elseif cmnd == "connect" and data then output(pos, "$ "..command) if techage.not_protected(data, owner, owner) then diff --git a/techage/lua_controller/server.lua b/techage/lua_controller/server.lua index 1c076a2..43838cd 100644 --- a/techage/lua_controller/server.lua +++ b/techage/lua_controller/server.lua @@ -38,7 +38,7 @@ minetest.register_node("techage:ta4_server", { "techage_server_side.png^[transformFX", "techage_server_back.png", { - image = "techage_server_front.png", + name = "techage_server_front.png", backface_culling = false, animation = { type = "vertical_frames", @@ -130,7 +130,7 @@ minetest.register_node("techage:ta4_server2", { "techage_server2_side.png^[transformFX", "techage_server2_back.png", { - image = "techage_server2_front.png", + name = "techage_server2_front.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/manuals/manual_DE.md b/techage/manuals/manual_DE.md index 97cf0e0..866c80d 100644 --- a/techage/manuals/manual_DE.md +++ b/techage/manuals/manual_DE.md @@ -92,7 +92,7 @@ Usmium kommt nur als Nuggets vor und kann nur beim Waschen von Kies mit der TA2/ ### Baborium -Baborium wird nur im Untertagebau gewonnen. Baborium findet man nur in Stein in einer Höhe zwischen -250 und -340 Meter. +Barborium kann nur im Untertagebau gewonnen werden. Diesen Stoff findet man nur in einer Tiefe von -250 bis -340 Metern. Baborium kann nur im TA3 Industrieofen geschmolzen werden. [baborium|image] diff --git a/techage/manuals/manual_EN.md b/techage/manuals/manual_EN.md index 3dd5743..b68952e 100644 --- a/techage/manuals/manual_EN.md +++ b/techage/manuals/manual_EN.md @@ -93,7 +93,8 @@ Usmium only occurs as nuggets and can only be obtained by washing gravel with th ### Baborium -Baborium is only extracted in underground mining. Baborium can only be found in stone at an altitude between -250 and -340 meters. +Barborium can only be obtained from underground mining. This substance can only be found at a depth of -250 to -340 meters. + Baborium can only be melted in the TA3 Industrial Furnace. diff --git a/techage/manuals/manual_ta1_DE.md b/techage/manuals/manual_ta1_DE.md index b0de021..53de1bf 100644 --- a/techage/manuals/manual_ta1_DE.md +++ b/techage/manuals/manual_ta1_DE.md @@ -51,7 +51,7 @@ Bauanleitung (siehe auch Plan): * Baue einen Turm aus Stein (cobble) mit einer 3x3 Grundfläche (7-11 Blöcke hoch) * Lasse unten ein Loch an einer Seite offen * Lege einen Anzünder (lighter) hinein -* Fülle den Turm von oben bis zum Rand mit Holzkohle +* Fülle den Turm bis zum Rand mit Holzkohle, in dem du die Holzkohle von oben in das Loch fallen lässt * Zünde den Anzünder durch das Loch an * Platziere den Schmelztiegel in die Flamme über dem Turm einen Block über der Flamme) diff --git a/techage/manuals/manual_ta1_EN.md b/techage/manuals/manual_ta1_EN.md index 41dada3..4b356eb 100644 --- a/techage/manuals/manual_ta1_EN.md +++ b/techage/manuals/manual_ta1_EN.md @@ -50,7 +50,7 @@ Building instructions (see also plan): * Build a stone tower (cobble) with a 3x3 base (7-11 blocks high) * Leave a hole open on one side at the bottom * Put a lighter in it -* Fill the tower with charcoal from the top to the top +* Fill the tower to the brim with charcoal by dropping the charcoal into the hole from above * Light the lighter through the hole * Place the melting pot in the flame over the tower (one block above the flame) diff --git a/techage/manuals/manual_ta3_DE.md b/techage/manuals/manual_ta3_DE.md index cbe56b0..89d0a4f 100644 --- a/techage/manuals/manual_ta3_DE.md +++ b/techage/manuals/manual_ta3_DE.md @@ -240,7 +240,7 @@ Das Elektromotor nimmt primär max. 40 ku an Strom auf und gibt sekundär max. 3 Der TA3 Industrieofen dient als Ergänzung zu normalen Ofen (furnace). Damit können alle Waren mit "Koch" Rezepten, auch im Industrieofen hergestellt werden. Es gibt aber auch spezielle Rezepte, die nur im Industrieofen hergestellt werden können. Der Industrieofen hat sein eigenes Menü zur Rezeptauswahl. Abhängig von den Waren im Industrieofen Inventar links kann rechts das Ausgangsprodukt gewählt werden. -Der Industrieofen benötigt Strom (für das Gebläse) sowie Schweröl/Benzin für den Brenner. Der Industrieofens und muss wie im Plan rechts abgebildet, zusammen gebaut werden. +Der Industrieofen benötigt Strom (für das Gebläse) sowie Schweröl/Benzin für den Brenner. Der Industrieofen muss wie im Plan rechts abgebildet, zusammen gebaut werden. Siehe auch TA4 Ofenheizung. diff --git a/techage/manuals/manual_ta3_EN.md b/techage/manuals/manual_ta3_EN.md index 3037dff..ab628d8 100644 --- a/techage/manuals/manual_ta3_EN.md +++ b/techage/manuals/manual_ta3_EN.md @@ -243,7 +243,7 @@ The electric motor takes max. 40 ku of electricity and provides on the other sid The TA3 industrial furnace serves as a supplement to normal furnaces. This means that all goods can be produced with "cooking" recipes, even in an industrial furnace. But there are also special recipes that can only be made in an industrial furnace. The industrial furnace has its own menu for recipe selection. Depending on the goods in the industrial furnace inventory on the left, the output product can be selected on the right. -The industrial furnace requires electricity (for the fan) and fuel oil / gasoline for the burner. The industrial furnace and must be assembled as shown in the plan on the right. +The industrial furnace requires electricity (for the booster) and fuel oil / gasoline for the burner. The industrial furnace must be assembled as shown in the plan on the right. See also TA4 heater. diff --git a/techage/manuals/manual_ta4_DE.md b/techage/manuals/manual_ta4_DE.md index 4ca0835..d7d6643 100644 --- a/techage/manuals/manual_ta4_DE.md +++ b/techage/manuals/manual_ta4_DE.md @@ -131,11 +131,13 @@ Diese Solarzelle kann nicht mit den anderen Solarmodulen kombiniert werden. Der TA4 Energiespeicher ersetzt den Batterie Block aus TA3. -Der Energiespeicher besteht aus einer Betonhülle (Concrete Block) gefüllt mit Gravel. Es gibt 3 Größen vom Speicher: +Der Energiespeicher besteht aus einer Betonhülle (Concrete Block) gefüllt mit Gravel. Es gibt 5 Größen vom Speicher: - Hülle mit 5x5x5 Concrete Blocks, gefüllt mit 27 Gravel, Speicherkapazität: 22.5 kud -- dHülle mit 7x7x7 Concrete Blocks, gefüllt mit 125 Gravel, Speicherkapazität: 104 kud +- Hülle mit 7x7x7 Concrete Blocks, gefüllt mit 125 Gravel, Speicherkapazität: 104 kud - Hülle mit 9x9x9 Concrete Blocks, gefüllt mit 343 Gravel, Speicherkapazität: 286 kud +- Hülle mit 11x11x11 Concrete Blocks, gefüllt mit 729 Gravel, Speicherkapazität: 610 kud +- Hülle mit 13x13x13 Concrete Blocks, gefüllt mit 1331 Gravel, Speicherkapazität: 1112 kud In der Betonhülle darf ein Fenster aus einem Obsidian Glas Block sein. Dieses muss ziemlich in der Mitte der Wand platziert werden. Durch dieses Fenster sieht man, ob der Speicher mehr als 80 % geladen ist. Im Plan rechts sieht man den Aufbau aus TA4 Wärmetauscher bestehend aus 3 Blöcken, der TA4 Turbine und dem TA4 Generator. Beim Wärmetauscher ist auf die Ausrichtung zu achten (der Pfeil bei Block 1 muss zur Turbine zeigen). @@ -205,7 +207,7 @@ Mit Hilfe von Trenntransformator und Stromzähler können Netzwerke zu noch grö Mit Hilfe eines Trenntransformators können zwei Stromnetze zu einem größeren Netzwerk verbunden werden. Der Trenntransformator kann Strom in beide Richtungen übertragen. -Der Trenntransformator kann bis zu 100 ku übertragen. +Der Trenntransformator kann bis zu 300 ku übertragen. Der Maximalwert ist über das Schraubenschlüsselmenü einstellbar. [ta4_transformer|image] @@ -215,7 +217,11 @@ Der Trenntransformator kann bis zu 100 ku übertragen. Mit Hilfe eines Stromzählers können zwei Stromnetze zu einem größeren Netzwerk verbunden werden. Der Stromzähler leitet den Strom nur in eine Richtungen weiter (Pfeil beachten). Die Menge an Strom (in kud) wird gemessen und angezeigt. Die Strommenge kann auch über das Kommando `consumption` durch einen Lua Controller abgefragt werden. -Der Stromzähler kann bis zu 200 ku durchleiten. +Der Stromzähler kann bis zu 200 ku durchleiten. Der Maximalwert ist über das Schraubenschlüsselmenü einstellbar. + +Über das Schraubenschlüsselmenü kann auch ein Countdown für die Leistungsabgabe eingegeben werden. Läuft dieser Countdown auf Null, schaltet sich der Stromzähler ab. Der Countdown kann über das Kommando `countdown` abgefragt werden. + + [ta4_electricmeter|image] @@ -574,7 +580,7 @@ Da die bewegten Blöcke Spieler und Mobs mitnehmen können, die auf dem Block st Anleitung: -- Controller setzen und die Blöcke, die bewegt werden sollen, über das Menü an-trainieren (Es können bis zu 16 Blöcke an-trainiert werden) +- Controller setzen und die Blöcke, die bewegt werden sollen, über das Menü (Taste "Aufzeichnen") an-trainieren (Es können bis zu 16 Blöcke an-trainiert werden) - die "Flugstrecke" muss über eine x,y,z Angabe (relativ) eingegeben werden (die maximale Distanz (x+y+z) beträgt 200 m) - mit den Menü-Tasten "Bewege A-B" sowie "Bewege B-A" kann die Bewegung getestet werden - man kann auch durch Wände oder andere Blöcke fliegen diff --git a/techage/manuals/manual_ta4_EN.md b/techage/manuals/manual_ta4_EN.md index d034e18..6ba5651 100644 --- a/techage/manuals/manual_ta4_EN.md +++ b/techage/manuals/manual_ta4_EN.md @@ -131,11 +131,13 @@ This solar cell cannot be combined with the other solar modules. The thermal energy storage replaces the battery block from TA3. -The thermal energy store consists of a concrete shell (concrete blocks) filled with gravel. Three sizes of the storage are possible: +The thermal energy store consists of a concrete shell (concrete blocks) filled with gravel. Five sizes of the storage are possible: - Cover with 5x5x5 concrete blocks, filled with 27 gravel, storage capacity: 22.5 kud - Cover with 7x7x7 concrete blocks, filled with 125 gravel, storage capacity: 104 kud - Cover with 9x9x9 concrete blocks, filled with 343 gravel, storage capacity: 286 kud +- Cover with 11x11x11 concrete blocks, filled with 729 gravel, storage capacity: 610 kud +- Cover with 13x13x13 concrete blocks, filled with 1331 gravel, storage capacity: 1112 kud A window made of an obsidian glass block may be in the concrete shell. This must be placed fairly in the middle of the wall. Through this window you can see whether the storage is loaded more than 80%. In the plan on the right you can see the structure of TA4 heat exchanger consisting of 3 blocks, the TA4 turbine and the TA4 generator. Pay attention to the alignment of the heat exchanger (the arrow at block 1 must point to the turbine). @@ -204,7 +206,7 @@ With the help of an isolating transformer and electricity meter, networks can be With the help of an isolating transformer, two power grids can be connected to form a larger network. The isolation transformer can transmit electricity in both directions. -The isolation transformer can transmit up to 100 ku. +The isolation transformer can transmit up to 300 ku. The maximum value is adjustable via the wrench menu. [ta4_transformer|image] @@ -212,7 +214,9 @@ The isolation transformer can transmit up to 100 ku. With the help of an electricity meter, two electricity networks can be connected to form a larger network. The electricity meter only transmits electricity in one direction (note arrow). The amount of electricity (in kud) is measured and displayed. The amount of electricity can also be queried by a Lua controller using the `consumption` command. -The electricity meter can pass up to 200 ku. +The electricity meter can pass up to 200 ku. The maximum value is adjustable via the wrench menu. + +A power output countdown can also be entered via the wrench menu. When this countdown reaches zero, the electricity meter switches off. The countdown can be queried using the `countdown` command. [ta4_electricmeter|image] @@ -422,7 +426,7 @@ The signal tower can display red, green and orange. A combination of the 3 color ## TA4 Lua Controller -As the name suggests, the Lua controller must be programmed in the Lua programming language. You should also be able to speak some English. The manual in English is here available: +As the name suggests, the Lua controller must be programmed in the Lua programming language. The manual in English is here available: https://github.com/joe7575/techage/blob/master/manuals/ta4_lua_controller_EN.md diff --git a/techage/manuals/manual_ta5_DE.md b/techage/manuals/manual_ta5_DE.md index 4a08af1..e281fa8 100644 --- a/techage/manuals/manual_ta5_DE.md +++ b/techage/manuals/manual_ta5_DE.md @@ -82,6 +82,10 @@ Die maximale Distanz für die gesammte Flugstrecke beträgt 500 m. Die Nutzung des TA5 Flug Controllers benötigt 40 Erfahrungspunkte. +**Teleport Mode** + +Wird der `Teleport Mode` aktiviert (auf `enable` gesetzt), kann ein Spieler auch ohne Blöcke bewegt werden. Dazu muss die Startposition über die Taste "Aufzeichnen" konfiguriert werden. Es kann hier nur eine Position konfiguriert werden. Das Spieler, der bewegt werden soll, muss dazu auf dieser Position stehen. + [ta5_flycontroller|image] ### TA5 Hyperloop Kiste / TA5 Hyperloop Chest diff --git a/techage/manuals/manual_ta5_EN.md b/techage/manuals/manual_ta5_EN.md index 8b01aa2..e1fdfe9 100644 --- a/techage/manuals/manual_ta5_EN.md +++ b/techage/manuals/manual_ta5_EN.md @@ -82,6 +82,10 @@ The maximum distance for the entire flight distance is 500 m. The use of the TA5 Flight Controller requires 40 experience points. +**Teleport mode** + +If the 'Teleport Mode' is enabled, a player can also be moved without blocks. To do this, the start position must be configured using the "Record" button. Only one position can be configured here. The player to be moved must be in that position. + [ta5_flycontroller|image] ### TA5 Hyperloop Chest diff --git a/techage/mod.conf b/techage/mod.conf index 0fa5481..fe34946 100644 --- a/techage/mod.conf +++ b/techage/mod.conf @@ -1,4 +1,4 @@ name = techage depends = default,doors,flowers,tubelib2,networks,basic_materials,bucket,stairs,screwdriver,minecart,lcdlib,safer_lua -optional_depends = unified_inventory,wielded_light,unifieddyes,moreores,ethereal,mesecons,mesecons_materials,mesecons_mvps,digtron,bakedclay,moreblocks,i3,creative,craftguide +optional_depends = unified_inventory,wielded_light,unifieddyes,moreores,ethereal,mesecons,mesecons_materials,mesecons_mvps,digtron,bakedclay,moreblocks,i3,creative,craftguide,farming description = Techage, go through 5 tech ages in search of wealth and power! diff --git a/techage/move_controller/doorcontroller2.lua b/techage/move_controller/doorcontroller2.lua index 175cb0e..855108b 100644 --- a/techage/move_controller/doorcontroller2.lua +++ b/techage/move_controller/doorcontroller2.lua @@ -60,13 +60,14 @@ end local function get_new_nodename(item) local name = item:get_name() - if name == "" then - return "air" + if name == "" then + return "air" end return name end local function get_node_name(nvm, slot) + nvm.pos_list = nvm.pos_list or {} local pos = nvm.pos_list[slot] if pos then return techage.get_node_lvm(pos).name @@ -228,7 +229,8 @@ end -- Generate a table of currently available inventory and placed nodes local function available_nodes(pos, nvm, item_list) local nodes = {} - + nvm.pos_list = nvm.pos_list or {} + for idx = 1, NUMSLOTS do local item = item_list[idx] if item and item:get_count() > 0 then @@ -252,6 +254,7 @@ local function restore_config(pos, nvm) local item_list = inv:get_list("main") local stock = available_nodes(pos, nvm, item_list) local nodes = minetest.deserialize(meta:get_string("stored_config")) or {} + nvm.pos_list = nvm.pos_list or {} inv:set_list("main", {}) item_list = inv:get_list("main") @@ -421,7 +424,7 @@ minetest.register_node("techage:ta3_doorcontroller2", { return elseif fields.record then local inv = meta:get_inventory() - nvm.pos_list = nil + nvm.pos_list = {} meta:set_string("status", S("Recording...")) local name = player:get_player_name() minetest.chat_send_player(name, S("Click on all the blocks that are part of the door/gate")) diff --git a/techage/move_controller/flycontroller.lua b/techage/move_controller/flycontroller.lua index 9f1c7cc..c23812f 100644 --- a/techage/move_controller/flycontroller.lua +++ b/techage/move_controller/flycontroller.lua @@ -49,12 +49,20 @@ local WRENCH_MENU = { tooltip = S("Y-offset for non-player objects like vehicles (-0.5 to 0.5)"), default = "0.0", }, + { + type = "dropdown", + choices = "disable,enable", + name = "teleport_mode", + label = S("Teleport mode"), + tooltip = S("Move a player without moving blocks"), + default = "disable", + }, } local function formspec(nvm, meta) local status = meta:get_string("status") - local path = meta:contains("fs_path") and meta:get_string("fs_path") or - meta:contains("path") and meta:get_string("path") or "0,3,0" + local path = minetest.formspec_escape(meta:contains("fs_path") and meta:get_string("fs_path") or + meta:contains("path") and meta:get_string("path") or "0,3,0") return "size[8,6.7]" .. "style_type[textarea;font=mono;textcolor=#FFFFFF;border=true]" .. "box[0,-0.1;7.2,0.5;#c6e8ff]" .. diff --git a/techage/move_controller/movecontroller.lua b/techage/move_controller/movecontroller.lua index 0eeb639..a9a4baa 100644 --- a/techage/move_controller/movecontroller.lua +++ b/techage/move_controller/movecontroller.lua @@ -60,7 +60,7 @@ local WRENCH_MENU = { local function formspec(nvm, meta) local status = meta:get_string("status") - local path = meta:contains("path") and meta:get_string("path") or "0,3,0" + local path = minetest.formspec_escape(meta:contains("path") and meta:get_string("path") or "0,3,0") local buttons if meta:get_string("opmode") == "move xyz" then buttons = "field[0.4,2.5;3.8,1;path;" .. S("Move distance") .. ";" .. path .. "]" .. @@ -261,6 +261,7 @@ techage.register_node({"techage:ta4_movecontroller"}, { end, on_node_load = function(pos, node) local nvm = techage.get_nvm(pos) + M(pos):set_string("teleport_mode", "") -- delete not working op mode nvm.running = false end, }) @@ -293,6 +294,28 @@ minetest.register_node("techage:rack_and_pinion", { sounds = default.node_sound_metal_defaults(), }) +minetest.register_node("techage:moveblock", { + description = "Techage Invisible Move Block", + drawtype = "glasslike_framed_optional", + inventory_image = 'techage_inv_invisible.png', + tiles = {"techage_invisible.png"}, + selection_box = { + type = "fixed", + fixed = { + {-16/32, -16/32, -16/32, 16/32, -14/32, 16/32}, + }, + }, + paramtype = "light", + light_source = 0, + sunlight_propagates = true, + walkable = false, + pointable = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3, not_in_creative_inventory = 1}, + sounds = default.node_sound_glass_defaults(), +}) + + minetest.register_craft({ output = "techage:ta4_movecontroller", recipe = { diff --git a/techage/oil/explore.lua b/techage/oil/explore.lua index a628915..0047225 100644 --- a/techage/oil/explore.lua +++ b/techage/oil/explore.lua @@ -269,7 +269,7 @@ minetest.register_node("techage:oilexplorer_on", { description = S("TA3 Oil Explorer"), tiles = { { - image = "techage_filling4_ta3.png^techage_appl_oilexplorer_top4.png^techage_frame4_ta3_top.png", + name = "techage_filling4_ta3.png^techage_appl_oilexplorer_top4.png^techage_frame4_ta3_top.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/oil/pumpjack.lua b/techage/oil/pumpjack.lua index ff66028..2756e54 100644 --- a/techage/oil/pumpjack.lua +++ b/techage/oil/pumpjack.lua @@ -149,7 +149,7 @@ tiles.act = { "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_hole_pipe.png", "techage_filling_ta#.png^techage_frame_ta#.png^techage_appl_hole_pipe.png", { - image = "techage_appl_pumpjack14.png^techage_frame14_ta#.png", + name = "techage_appl_pumpjack14.png^techage_frame14_ta#.png", backface_culling = false, animation = { type = "vertical_frames", @@ -159,7 +159,7 @@ tiles.act = { }, }, { - image = "techage_appl_pumpjack14.png^techage_frame14_ta#.png", + name = "techage_appl_pumpjack14.png^techage_frame14_ta#.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/oil/reboiler.lua b/techage/oil/reboiler.lua index a78d7fd..17c6250 100644 --- a/techage/oil/reboiler.lua +++ b/techage/oil/reboiler.lua @@ -190,7 +190,7 @@ minetest.register_node("techage:ta3_reboiler_on", { "techage_filling_ta3.png^techage_appl_hole_pipe.png^techage_frame_ta3.png", "techage_filling_ta3.png^techage_appl_hole_pipe.png^techage_frame_ta3.png", { - image = "techage_filling4_ta3.png^techage_appl_reboiler4.png^techage_frame4_ta3.png^[transformFX", + name = "techage_filling4_ta3.png^techage_appl_reboiler4.png^techage_frame4_ta3.png^[transformFX", backface_culling = false, animation = { type = "vertical_frames", @@ -200,7 +200,7 @@ minetest.register_node("techage:ta3_reboiler_on", { }, }, { - image = "techage_filling4_ta3.png^techage_appl_reboiler4.png^techage_frame4_ta3.png", + name = "techage_filling4_ta3.png^techage_appl_reboiler4.png^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/power/drive_axle.lua b/techage/power/drive_axle.lua index 1ea3ede..4f710e3 100644 --- a/techage/power/drive_axle.lua +++ b/techage/power/drive_axle.lua @@ -84,7 +84,7 @@ minetest.register_node("techage:axle_on", { description = S("TA2 Drive Axle"), tiles = { { - image = "techage_axle4R.png", + name = "techage_axle4R.png", backface_culling = false, animation = { type = "vertical_frames", @@ -94,7 +94,7 @@ minetest.register_node("techage:axle_on", { }, }, { - image = "techage_axle4R.png", + name = "techage_axle4R.png", backface_culling = false, animation = { type = "vertical_frames", @@ -104,7 +104,7 @@ minetest.register_node("techage:axle_on", { }, }, { - image = "techage_axle4.png", + name = "techage_axle4.png", backface_culling = false, animation = { type = "vertical_frames", @@ -114,7 +114,7 @@ minetest.register_node("techage:axle_on", { }, }, { - image = "techage_axle4.png", + name = "techage_axle4.png", backface_culling = false, animation = { type = "vertical_frames", @@ -124,7 +124,7 @@ minetest.register_node("techage:axle_on", { }, }, { - image = "techage_axle_clutch4.png", + name = "techage_axle_clutch4.png", backface_culling = false, animation = { type = "vertical_frames", @@ -134,7 +134,7 @@ minetest.register_node("techage:axle_on", { }, }, { - image = "techage_axle_clutch4.png", + name = "techage_axle_clutch4.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/power/formspecs.lua b/techage/power/formspecs.lua index a982637..071b0ef 100644 --- a/techage/power/formspecs.lua +++ b/techage/power/formspecs.lua @@ -157,9 +157,9 @@ end function techage.formspec_meter(pos, x, y, label, value, unit) return "container[" .. x .. "," .. y .. "]" .. - "box[0,0;2.3,1.2;#395c74]" .. + "box[0,0;2.3,0.9;#395c74]" .. "label[0.2,0.0;" .. label .. ":]" .. - "label[0.2,0.5;" .. round(value) .. " " .. unit .. "]" .. + "label[0.2,0.4;" .. round(value) .. " " .. unit .. "]" .. "container_end[]" end diff --git a/techage/power/gearbox.lua b/techage/power/gearbox.lua index ea03db7..d4406dc 100644 --- a/techage/power/gearbox.lua +++ b/techage/power/gearbox.lua @@ -103,7 +103,7 @@ minetest.register_node("techage:gearbox_on", { tiles = { -- up, down, right, left, back, front { - image = "techage_filling4_ta2.png^techage_axle_gearbox4.png^techage_frame4_ta2.png", + name = "techage_filling4_ta2.png^techage_axle_gearbox4.png^techage_frame4_ta2.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/power/power_terminal2.lua b/techage/power/power_terminal2.lua index b8bcd58..cc13626 100644 --- a/techage/power/power_terminal2.lua +++ b/techage/power/power_terminal2.lua @@ -140,7 +140,7 @@ local function storages(pos) local resp = control.request(pos, Cable, outdir, "sto", "info") for _, item in ipairs(resp) do -- TA4/TA5 heatexchangers are no storage systems - if item.capa and item.capa > 1 then + if item.capa and item.capa > 1 then if item.running then local s = string.format("%s (%s): %s/%s kud", item.type, item.number, diff --git a/techage/settingtypes.txt b/techage/settingtypes.txt index 088d48e..2223416 100644 --- a/techage/settingtypes.txt +++ b/techage/settingtypes.txt @@ -40,4 +40,7 @@ techage_collider_min_depth (Min. depth to build a TA4 Collider) int -30 techage_expoint_rate_in_min (average waiting time for one expoint) int 60 # For testing purpuses only -techage_recipe_checker_enabled (test techage recipes) bool false \ No newline at end of file +techage_recipe_checker_enabled (test techage recipes) bool false + +# Enables stair aliases (to prevent unknown nodes) +techage_stair_aliases_enabled (Enable stair aliases) bool false \ No newline at end of file diff --git a/techage/steam_engine/cylinder.lua b/techage/steam_engine/cylinder.lua index 3ec4c87..ecdcef2 100644 --- a/techage/steam_engine/cylinder.lua +++ b/techage/steam_engine/cylinder.lua @@ -101,7 +101,7 @@ minetest.register_node("techage:cylinder_on", { "techage_filling_ta2.png^techage_appl_open.png^techage_frame_ta2.png", "techage_filling_ta2.png^techage_frame_ta2.png^techage_steam_hole.png", { - image = "techage_filling4_ta2.png^techage_cylinder4.png^techage_frame4_ta2.png", + name = "techage_filling4_ta2.png^techage_cylinder4.png^techage_frame4_ta2.png", backface_culling = false, animation = { type = "vertical_frames", @@ -111,7 +111,7 @@ minetest.register_node("techage:cylinder_on", { }, }, { - image = "techage_filling4_ta2.png^techage_cylinder4.png^techage_frame4_ta2.png", + name = "techage_filling4_ta2.png^techage_cylinder4.png^techage_frame4_ta2.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/steam_engine/firebox.lua b/techage/steam_engine/firebox.lua index 3d55acf..cca8ece 100644 --- a/techage/steam_engine/firebox.lua +++ b/techage/steam_engine/firebox.lua @@ -109,7 +109,7 @@ minetest.register_node("techage:firebox_on", { "techage_firebox.png^techage_frame_ta2.png", "techage_firebox.png^techage_frame_ta2.png", { - image = "techage_firebox4.png^techage_appl_firehole4.png^techage_frame4_ta2.png", + name = "techage_firebox4.png^techage_appl_firehole4.png^techage_frame4_ta2.png", backface_culling = false, animation = { type = "vertical_frames", @@ -138,9 +138,9 @@ minetest.register_node("techage:firebox_on", { minetest.register_craft({ output = "techage:firebox", recipe = { - {'group:stone', 'group:stone', 'group:stone'}, + {'default:stone', 'default:stone', 'default:stone'}, {'techage:iron_ingot', '', 'techage:iron_ingot'}, - {'group:stone', 'group:stone', 'group:stone'}, + {'default:stone', 'default:stone', 'default:stone'}, }, }) diff --git a/techage/steam_engine/flywheel.lua b/techage/steam_engine/flywheel.lua index a4ce7b5..c68cedd 100644 --- a/techage/steam_engine/flywheel.lua +++ b/techage/steam_engine/flywheel.lua @@ -161,7 +161,7 @@ minetest.register_node("techage:flywheel_on", { "techage_filling_ta2.png^techage_frame_ta2.png", "techage_filling_ta2.png^techage_frame_ta2.png", { - image = "techage_filling4_ta2.png^techage_axle_clutch4.png^techage_frame4_ta2.png", + name = "techage_filling4_ta2.png^techage_axle_clutch4.png^techage_frame4_ta2.png", backface_culling = false, animation = { type = "vertical_frames", @@ -172,7 +172,7 @@ minetest.register_node("techage:flywheel_on", { }, "techage_filling_ta2.png^techage_appl_open.png^techage_frame_ta2.png", { - image = "techage_filling8_ta2.png^techage_frame8_ta2.png^techage_flywheel8.png", + name = "techage_filling8_ta2.png^techage_frame8_ta2.png^techage_flywheel8.png", backface_culling = false, animation = { type = "vertical_frames", @@ -182,7 +182,7 @@ minetest.register_node("techage:flywheel_on", { }, }, { - image = "techage_filling8_ta2.png^techage_frame8_ta2.png^techage_flywheel8.png^[transformFX]", + name = "techage_filling8_ta2.png^techage_frame8_ta2.png^techage_flywheel8.png^[transformFX]", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/ta3_power/axle2power.lua b/techage/ta3_power/axle2power.lua index f6a0b3a..1f6ff63 100644 --- a/techage/ta3_power/axle2power.lua +++ b/techage/ta3_power/axle2power.lua @@ -121,7 +121,7 @@ minetest.register_node("techage:ta2_generator_on", { "techage_filling_ta2.png^techage_frame_ta2.png", "techage_filling_ta2.png^techage_frame_ta2.png^techage_appl_hole_electric.png", { - image = "techage_filling4_ta2.png^techage_axle_clutch4.png^techage_frame4_ta2.png", + name = "techage_filling4_ta2.png^techage_axle_clutch4.png^techage_frame4_ta2.png", backface_culling = false, animation = { type = "vertical_frames", @@ -131,7 +131,7 @@ minetest.register_node("techage:ta2_generator_on", { }, }, { - image = "techage_filling4_ta2.png^techage_appl_generator_red4.png^techage_frame4_ta2.png", + name = "techage_filling4_ta2.png^techage_appl_generator_red4.png^techage_frame4_ta2.png", backface_culling = false, animation = { type = "vertical_frames", @@ -141,7 +141,7 @@ minetest.register_node("techage:ta2_generator_on", { }, }, { - image = "techage_filling4_ta2.png^techage_appl_generator_red4.png^[transformFX]^techage_frame4_ta2.png", + name = "techage_filling4_ta2.png^techage_appl_generator_red4.png^[transformFX]^techage_frame4_ta2.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/ta3_power/power2axle.lua b/techage/ta3_power/power2axle.lua index 76bad03..82f2e6e 100644 --- a/techage/ta3_power/power2axle.lua +++ b/techage/ta3_power/power2axle.lua @@ -125,7 +125,7 @@ minetest.register_node("techage:ta3_motor_on", { "techage_filling_ta3.png^techage_frame_ta3_top.png^techage_appl_arrow.png", "techage_filling_ta3.png^techage_frame_ta3.png", { - image = "techage_filling4_ta3.png^techage_axle_clutch4.png^techage_frame4_ta3.png", + name = "techage_filling4_ta3.png^techage_axle_clutch4.png^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", @@ -136,7 +136,7 @@ minetest.register_node("techage:ta3_motor_on", { }, "techage_filling_ta3.png^techage_frame_ta3.png^techage_appl_hole_electric.png", { - image = "techage_filling4_ta3.png^techage_appl_generator_red4.png^[transformFX]^techage_frame4_ta3.png", + name = "techage_filling4_ta3.png^techage_appl_generator_red4.png^[transformFX]^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", @@ -146,7 +146,7 @@ minetest.register_node("techage:ta3_motor_on", { }, }, { - image = "techage_filling4_ta3.png^techage_appl_generator_red4.png^techage_frame4_ta3.png", + name = "techage_filling4_ta3.png^techage_appl_generator_red4.png^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/ta3_power/tiny_generator.lua b/techage/ta3_power/tiny_generator.lua index 4f4847c..2a8ea35 100644 --- a/techage/ta3_power/tiny_generator.lua +++ b/techage/ta3_power/tiny_generator.lua @@ -248,7 +248,7 @@ minetest.register_node("techage:tiny_generator_on", { "techage_appl_electric_gen_side.png^techage_appl_hole_electric.png^techage_frame_ta3.png", "techage_appl_electric_gen_side.png^techage_frame_ta3.png", { - image = "techage_appl_electric_gen_front4.png^[transformFX]^techage_frame4_ta3.png", + name = "techage_appl_electric_gen_front4.png^[transformFX]^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", @@ -258,7 +258,7 @@ minetest.register_node("techage:tiny_generator_on", { }, }, { - image = "techage_appl_electric_gen_front4.png^techage_frame4_ta3.png", + name = "techage_appl_electric_gen_front4.png^techage_frame4_ta3.png", backface_culling = false, animation = { type = "vertical_frames", diff --git a/techage/ta4_power/electricmeter.lua b/techage/ta4_power/electricmeter.lua index ca10ad9..f55c216 100644 --- a/techage/ta4_power/electricmeter.lua +++ b/techage/ta4_power/electricmeter.lua @@ -3,7 +3,7 @@ TechAge ======= - Copyright (C) 2019-2022 Joachim Stolberg + Copyright (C) 2019-2023 Joachim Stolberg AGPL v3 See LICENSE.txt for more information @@ -24,25 +24,54 @@ local Cable = techage.ElectricCable local power = networks.power local control = networks.control +local WRENCH_MENU = { + { + type = "dropdown", + choices = "200 ku,150 ku,100 ku,50 ku,20 ku", + name = "current", + label = S("Max. power"), + tooltip = S("Maximum power passed through"), + default = "100 ku", + values = {200, 150, 100, 50, 20} + }, + { + type = "number", + name = "countdown", + label = S("Power countdown"), + tooltip = S("Amount of power to be provided before the device turns off"), + default = "0", + }, +} + +local function max_current(pos) + local meta = M(pos) + if meta:contains("current") then + local current = meta:get_int("current") + return current > 0 and current or PWR_PERF + end + return PWR_PERF +end local function formspec(self, pos, nvm, power) local units = (nvm.units or 0) / techage.CYCLES_PER_DAY + nvm.countdown = nvm.countdown or M(pos):get_int("countdown") power = power or 0 return "size[5,4]" .. - default.gui_bg .. - default.gui_bg_img .. - default.gui_slots .. "box[0,-0.1;4.8,0.5;#c6e8ff]" .. + techage.wrench_image(4.4, -0.08) .. "label[0.2,-0.1;" .. minetest.colorize( "#000000", S("TA4 Electric Meter")).."]" .. - techage.formspec_power_bar(pos, 0.0, 0.7, S("Power"), power, PWR_PERF) .. + techage.formspec_power_bar(pos, 0.0, 0.7, S("Power"), power, max_current(pos)) .. techage.formspec_meter(pos, 2.5, 0.7, S("Consumption"), units, "kud") .. - "image_button[3.2,2.2;1,1;" .. self:get_state_button_image(nvm) .. ";state_button;]" .. + techage.formspec_meter(pos, 2.5, 1.7, S("Countdown"), nvm.countdown, "kud") .. + "image_button[3.2,3.0;1,1;" .. self:get_state_button_image(nvm) .. ";state_button;]" .. "tooltip[3.2,2.2;1,1;" .. self:get_state_tooltip(nvm) .. "]" end local function start_node(pos, nvm, state) local outdir = M(pos):get_int("outdir") + nvm.load = 0 + nvm.countdown = M(pos):get_int("countdown") power.start_storage_calc(pos, Cable, outdir) outdir = networks.Flip[outdir] power.start_storage_calc(pos, Cable, outdir) @@ -71,11 +100,19 @@ local function node_timer(pos, elapsed) if techage.is_running(nvm) then local outdir2 = M(pos):get_int("outdir") local outdir1 = networks.Flip[outdir2] - data = power.transfer_simplex(pos, Cable, outdir1, Cable, outdir2, PWR_PERF) + local current = max_current(pos) + data = power.transfer_simplex(pos, Cable, outdir1, Cable, outdir2, current) if data then - nvm.load = (data.curr_load1 / data.max_capa1 + data.curr_load2 / data.max_capa2) / 2 * PWR_PERF + nvm.countdown = nvm.countdown or M(pos):get_int("countdown") + nvm.load = (data.curr_load1 / data.max_capa1 + data.curr_load2 / data.max_capa2) / 2 * current nvm.moved = data.moved nvm.units = (nvm.units or 0) + data.moved + if nvm.countdown > 0 then + nvm.countdown = nvm.countdown - (data.moved / techage.CYCLES_PER_DAY) + if nvm.countdown <= 0 then + State:stop(pos, nvm) + end + end end end if techage.is_activeformspec(pos) then @@ -118,7 +155,8 @@ local function get_generator_data(pos, outdir, tlib2) -- check for secondary/generator side if outdir == M(pos):get_int("outdir") then if techage.is_running(nvm) then - return {level = (nvm.load or 0) / PWR_PERF, perf = PWR_PERF, capa = PWR_PERF * 2} + local current = max_current(pos) + return {level = (nvm.load or 0) / current, perf = current, capa = current * 2} end end end @@ -140,6 +178,7 @@ minetest.register_node("techage:ta4_electricmeter", { on_receive_fields = on_receive_fields, after_place_node = after_place_node, after_dig_node = after_dig_node, + ta4_formspec = WRENCH_MENU, get_generator_data = get_generator_data, paramtype2 = "facedir", groups = {cracky=2, crumbly=2, choppy=2}, @@ -156,6 +195,8 @@ techage.register_node({"techage:ta4_electricmeter"}, { local nvm = techage.get_nvm(pos) if topic == "consumption" then return math.floor((nvm.units or 0) / techage.CYCLES_PER_DAY) + elseif topic == "countdown" then + return math.floor((nvm.countdown or 0) + 0.5) else return State:on_receive_message(pos, topic, payload) end @@ -165,8 +206,12 @@ techage.register_node({"techage:ta4_electricmeter"}, { end, on_beduino_request_data = function(pos, src, topic, payload) local nvm = techage.get_nvm(pos) - if topic == 146 then -- Consumption - return 0, {math.floor((nvm.units or 0) / techage.CYCLES_PER_DAY)} + if topic == 146 then + if payload[1] == 0 then -- Consumption + return 0, {math.floor((nvm.units or 0) / techage.CYCLES_PER_DAY)} + else -- countdown + return 0, {math.floor((nvm.countdown or 0) + 0.5)} + end else return State:on_beduino_request_data(pos, topic, payload) end @@ -184,7 +229,7 @@ control.register_nodes({"techage:ta4_electricmeter"}, { type = S("TA4 Electric Meter"), number = meta:get_string("node_number") or "", running = techage.is_running(nvm) or false, - available = PWR_PERF, + available = max_current(pos), provided = nvm.moved or 0, termpoint = "-", } diff --git a/techage/ta4_power/transformer.lua b/techage/ta4_power/transformer.lua index d1ff216..82d86bc 100644 --- a/techage/ta4_power/transformer.lua +++ b/techage/ta4_power/transformer.lua @@ -3,7 +3,7 @@ TechAge ======= - Copyright (C) 2019-2022 Joachim Stolberg + Copyright (C) 2019-2023 Joachim Stolberg AGPL v3 See LICENSE.txt for more information @@ -24,17 +24,35 @@ local Cable = techage.ElectricCable local power = networks.power local control = networks.control +local WRENCH_MENU = { + { + type = "dropdown", + choices = "300 ku,200 ku,150 ku,100 ku,50 ku,20 ku", + name = "current", + label = S("Max. power"), + tooltip = S("Maximum power passed through"), + default = "100 ku", + values = {300, 200, 150, 100, 50, 20} + }, +} + +local function max_current(pos) + local meta = M(pos) + if meta:contains("current") then + local current = meta:get_int("current") + return current > 0 and current or PWR_PERF + end + return PWR_PERF +end local function formspec(self, pos, nvm, data) data = data or {curr_load1 = 0, curr_load2 = 0, max_capa1 = 0, max_capa2 = 0, moved = 0} return "size[7.5,5.2]".. - default.gui_bg.. - default.gui_bg_img.. - default.gui_slots.. "box[0,-0.1;7.3,0.5;#c6e8ff]".. + techage.wrench_image(6.9, -0.08) .. "label[0.2,-0.1;"..minetest.colorize( "#000000", S("TA4 Isolation Transformer")).."]".. techage.formspec_storage_bar(pos, 0.0, 0.7, S("Storage"), data.curr_load1, data.max_capa1).. - techage.formspec_power_bar(pos, 2.5, 0.7, S("Power"), data.moved, PWR_PERF).. + techage.formspec_power_bar(pos, 2.5, 0.7, S("Power"), data.moved, max_current(pos)).. techage.formspec_storage_bar(pos, 5.0, 0.7, S("Storage"), data.curr_load2, data.max_capa2).. "image_button[3.3,4.3;1,1;" .. self:get_state_button_image(nvm) .. ";state_button;]" .. "tooltip[3.3,4.3;1,1;" .. self:get_state_tooltip(nvm) .. "]" @@ -42,6 +60,7 @@ end local function start_node(pos, nvm, state) local outdir = M(pos):get_int("outdir") + nvm.load = 0 power.start_storage_calc(pos, Cable, outdir) outdir = networks.Flip[outdir] power.start_storage_calc(pos, Cable, outdir) @@ -70,9 +89,10 @@ local function node_timer(pos, elapsed) if techage.is_running(nvm) then local outdir2 = M(pos):get_int("outdir") local outdir1 = networks.Flip[outdir2] - data = power.transfer_duplex(pos, Cable, outdir1, Cable, outdir2, PWR_PERF) + local current = max_current(pos) + data = power.transfer_duplex(pos, Cable, outdir1, Cable, outdir2, current) if data then - nvm.load = (data.curr_load1 / data.max_capa1 + data.curr_load2 / data.max_capa2) / 2 * PWR_PERF + nvm.load = (data.curr_load1 / data.max_capa1 + data.curr_load2 / data.max_capa2) / 2 * current nvm.moved = data.moved end end @@ -114,7 +134,8 @@ end local function get_generator_data(pos, outdir, tlib2) local nvm = techage.get_nvm(pos) if techage.is_running(nvm) then - return {level = (nvm.load or 0) / PWR_PERF, perf = PWR_PERF, capa = PWR_PERF * 2} + local current = max_current(pos) + return {level = (nvm.load or 0) / current, perf = current, capa = current * 2} end end @@ -136,6 +157,7 @@ minetest.register_node("techage:ta4_transformer", { after_place_node = after_place_node, after_dig_node = after_dig_node, get_generator_data = get_generator_data, + ta4_formspec = WRENCH_MENU, paramtype2 = "facedir", groups = {cracky=2, crumbly=2, choppy=2}, on_rotate = screwdriver.disallow, @@ -169,7 +191,7 @@ control.register_nodes({"techage:ta4_transformer"}, { type = S("TA4 Isolation Transformer"), number = meta:get_string("node_number") or "", running = techage.is_running(nvm) or false, - available = PWR_PERF, + available = max_current(pos), provided = nvm.moved or 0, termpoint = "-", } diff --git a/techage/textures/techage_inv_invisible.png b/techage/textures/techage_inv_invisible.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e65ad852d0b6c1a8f710aac43761387c33e7f6 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)T-^(N{{R0!f65|fpa^40 zkY6x^!?PP{K#sJhi(?4K_2eCMcfU1rW@ctqW|nA(Y;NH$l4AH9%6~jGZBYhL8H1;* KpUXO@geCxplpt>a literal 0 HcmV?d00001 diff --git a/techage/textures/techage_invisible.png b/techage/textures/techage_invisible.png index b5501901058238bb6b4593e78ed5846e55493522..d06b83f19ae4b763bf9d7490ff496526345eb0e4 100644 GIT binary patch delta 7 Ocmb