forked from MTSR/techage_modpack
built on 09/05/2023 18:41:56
This commit is contained in:
parent
1a8bcd3e5a
commit
1169e46dbf
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
2023-01-04 V2.03 Techage and Beduino command interface added
|
||||
2023-02-05 V2.04 New API functions added, EOL blanks removed
|
||||
|
@ -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
|
||||
|
@ -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",
|
||||
|
@ -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"},
|
||||
})
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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
|
||||
|
216
techage/api.md
Normal file
216
techage/api.md
Normal file
@ -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 = "<item-name> <units>", -- units = 1..n
|
||||
waste = "<item-name> <units>", -- units = 1..n
|
||||
input = { -- up to 4 items
|
||||
"<item-name> <units>",
|
||||
"<item-name> <units>",
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
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
|
||||
})
|
||||
```
|
||||
|
||||
|
@ -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",
|
||||
|
@ -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
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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)
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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])
|
||||
|
@ -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
|
||||
|
@ -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"..
|
||||
|
@ -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"..
|
||||
|
@ -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"}
|
||||
|
@ -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",
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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()
|
||||
|
@ -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",
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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]"..
|
||||
|
@ -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",
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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:=
|
||||
|
@ -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")
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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 <button-num> <button-text> <command>'
|
||||
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 <button-num> <button-text> <command>'
|
||||
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
|
||||
|
@ -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",
|
||||
|
@ -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]
|
||||
|
@ -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.
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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!
|
||||
|
@ -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"))
|
||||
|
@ -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]" ..
|
||||
|
@ -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 = {
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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
|
||||
|
||||
|
@ -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",
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
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
|
@ -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",
|
||||
|
@ -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'},
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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 = "-",
|
||||
}
|
||||
|
@ -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 = "-",
|
||||
}
|
||||
|
BIN
techage/textures/techage_inv_invisible.png
Normal file
BIN
techage/textures/techage_inv_invisible.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 115 B |
Binary file not shown.
Before Width: | Height: | Size: 126 B After Width: | Height: | Size: 97 B |
@ -341,6 +341,7 @@ minetest.register_node("towercrane:balance", {
|
||||
sunlight_propagates = true,
|
||||
is_ground_content = false,
|
||||
groups = {crumbly=0, not_in_creative_inventory=1},
|
||||
drop = "",
|
||||
})
|
||||
|
||||
minetest.register_node("towercrane:mast", {
|
||||
@ -358,6 +359,7 @@ minetest.register_node("towercrane:mast", {
|
||||
sunlight_propagates = true,
|
||||
is_ground_content = false,
|
||||
groups = {crumbly=0, not_in_creative_inventory=1},
|
||||
drop = "",
|
||||
})
|
||||
|
||||
minetest.register_node("towercrane:arm", {
|
||||
@ -375,6 +377,7 @@ minetest.register_node("towercrane:arm", {
|
||||
sunlight_propagates = true,
|
||||
is_ground_content = false,
|
||||
groups = {crumbly=0, not_in_creative_inventory=1},
|
||||
drop = "",
|
||||
})
|
||||
|
||||
minetest.register_node("towercrane:arm2", {
|
||||
@ -392,6 +395,7 @@ minetest.register_node("towercrane:arm2", {
|
||||
sunlight_propagates = true,
|
||||
is_ground_content = false,
|
||||
groups = {crumbly=0, not_in_creative_inventory=1},
|
||||
drop = "",
|
||||
})
|
||||
|
||||
if towercrane.recipe then
|
||||
|
Loading…
Reference in New Issue
Block a user