Activate TA5, improve move/fly controller

This commit is contained in:
Joachim Stolberg 2021-12-25 16:12:09 +01:00
parent fd5b33e025
commit 79890c1c1b
15 changed files with 339 additions and 32 deletions

View File

@ -17,7 +17,7 @@ local M = minetest.get_meta
local S = techage.S local S = techage.S
local TA4_INV_SIZE = 50 local TA4_INV_SIZE = 50
local EX_PIONTS = 10 local EX_POINTS = 20
local MP = minetest.get_modpath(minetest.get_current_modname()) local MP = minetest.get_modpath(minetest.get_current_modname())
local mConf = dofile(MP.."/basis/conf_inv.lua") local mConf = dofile(MP.."/basis/conf_inv.lua")
@ -366,7 +366,7 @@ minetest.register_node("techage:chest_ta4", {
techage.remove_node(pos, oldnode, oldmetadata) techage.remove_node(pos, oldnode, oldmetadata)
hyperloop.after_dig_node(pos, oldnode, oldmetadata, digger) hyperloop.after_dig_node(pos, oldnode, oldmetadata, digger)
end, end,
ta5_formspec = {menu=hyperloop.WRENCH_MENU, ex_points=EX_PIONTS}, ta5_formspec = {menu=hyperloop.WRENCH_MENU, ex_points=EX_POINTS},
ta_after_formspec = hyperloop.after_formspec, ta_after_formspec = hyperloop.after_formspec,
allow_metadata_inventory_put = ta4_allow_metadata_inventory_put, allow_metadata_inventory_put = ta4_allow_metadata_inventory_put,
allow_metadata_inventory_take = ta4_allow_metadata_inventory_take, allow_metadata_inventory_take = ta4_allow_metadata_inventory_take,

View File

@ -178,6 +178,7 @@ function techage.register_consumer(base_name, inv_name, tiles, tNode, validState
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
meta:set_int("push_dir", techage.side_to_indir("L", node.param2)) meta:set_int("push_dir", techage.side_to_indir("L", node.param2))
meta:set_int("pull_dir", techage.side_to_indir("R", node.param2)) meta:set_int("pull_dir", techage.side_to_indir("R", node.param2))
meta:set_string("owner", placer:get_player_name())
-- Delete existing node number. Needed for Digtron compatibility. -- Delete existing node number. Needed for Digtron compatibility.
if (meta:contains("node_number")) then if (meta:contains("node_number")) then
meta:set_string("node_number", "") meta:set_string("node_number", "")

View File

@ -32,21 +32,19 @@ local RecipeType = {
local function formspec(self, pos, nvm) local function formspec(self, pos, nvm)
local rtype = RecipeType[CRD(pos).stage] local rtype = RecipeType[CRD(pos).stage]
local owner = M(pos):get_string("owner")
return "size[8.4,8.4]".. return "size[8.4,8.4]"..
default.gui_bg.. "list[context;src;0,0;2,4;]"..
default.gui_bg_img.. recipes.formspec(2.2, 0, rtype, nvm, owner)..
default.gui_slots.. "list[context;dst;6.4,0;2,4;]"..
"list[context;src;0,0;2,4;]".. "image_button[3.7,3.3;1,1;".. self:get_state_button_image(nvm) ..";state_button;]"..
recipes.formspec(2.2, 0, rtype, nvm).. "tooltip[3.7,3.3;1,1;"..self:get_state_tooltip(nvm).."]"..
"list[context;dst;6.4,0;2,4;]".. "list[current_player;main;0.2,4.5;8,4;]"..
"image_button[3.7,3.3;1,1;".. self:get_state_button_image(nvm) ..";state_button;]".. "listring[context;dst]"..
"tooltip[3.7,3.3;1,1;"..self:get_state_tooltip(nvm).."]".. "listring[current_player;main]"..
"list[current_player;main;0.2,4.5;8,4;]".. "listring[context;src]"..
"listring[context;dst]".. "listring[current_player;main]"..
"listring[current_player;main]".. default.get_hotbar_bg(0.2, 4.5)
"listring[context;src]"..
"listring[current_player;main]"..
default.get_hotbar_bg(0.2, 4.5)
end end
local function allow_metadata_inventory_put(pos, listname, index, stack, player) local function allow_metadata_inventory_put(pos, listname, index, stack, player)

View File

@ -52,8 +52,8 @@ end
-- yaw in radiant -- yaw in radiant
local function rotate(v, yaw) local function rotate(v, yaw)
local sinyaw = math.sin(2 * math.pi - yaw) local sinyaw = math.sin(yaw)
local cosyaw = math.cos(2 * math.pi - yaw) local cosyaw = math.cos(yaw)
return {x = v.x * cosyaw - v.z * sinyaw, y = v.y, z = v.x * sinyaw + v.z * cosyaw} return {x = v.x * cosyaw - v.z * sinyaw, y = v.y, z = v.x * sinyaw + v.z * cosyaw}
end end
@ -212,11 +212,13 @@ local function attach_single_object(parent, obj, dir)
local offs = table.copy(dir) local offs = table.copy(dir)
-- Calc entity rotation, which is relative to the parent's rotation -- Calc entity rotation, which is relative to the parent's rotation
local rot = parent:get_rotation() local rot = parent:get_rotation()
dir = rotate(dir, rot.y)
if self.param2 >= 20 then if self.param2 >= 20 then
dir = rotate(dir, 2 * math.pi - rot.y)
dir.y = -dir.y dir.y = -dir.y
dir.x = -dir.x
rot.y = rot.y - yaw rot.y = rot.y - yaw
elseif self.param2 < 4 then elseif self.param2 < 4 then
dir = rotate(dir, 2 * math.pi - rot.y)
rot.y = rot.y - yaw rot.y = rot.y - yaw
end end
dir = vector.multiply(dir, 29) dir = vector.multiply(dir, 29)
@ -234,7 +236,7 @@ end
-- Attach all objects around to the parent object -- Attach all objects around to the parent object
-- offs is the search/attach position offset -- offs is the search/attach position offset
local function attach_objects(pos, offs, parent) local function attach_objects(pos, offs, parent, yoffs)
local pos1 = vector.add(pos, offs) local pos1 = vector.add(pos, offs)
for _, obj in pairs(minetest.get_objects_inside_radius(pos1, 0.9)) do for _, obj in pairs(minetest.get_objects_inside_radius(pos1, 0.9)) do
local dir = vector.subtract(obj:get_pos(), pos) local dir = vector.subtract(obj:get_pos(), pos)
@ -243,6 +245,7 @@ local function attach_objects(pos, offs, parent)
if entity.name == "__builtin:item" then -- dropped items if entity.name == "__builtin:item" then -- dropped items
--obj:set_attach(objref, "", {x=0, y=0, z=0}, {x=0, y=0, z=0}, true) -- hier kracht es --obj:set_attach(objref, "", {x=0, y=0, z=0}, {x=0, y=0, z=0}, true) -- hier kracht es
elseif entity.name ~= "techage:move_item" then elseif entity.name ~= "techage:move_item" then
dir.y = dir.y + yoffs
attach_single_object(parent, obj, dir) attach_single_object(parent, obj, dir)
end end
elseif obj:is_player() then elseif obj:is_player() then
@ -260,6 +263,7 @@ local function detach_objects(pos, self)
obj:set_detach() obj:set_detach()
obj:set_properties({visual_size = {x=1, y=1}}) obj:set_properties({visual_size = {x=1, y=1}})
local pos1 = vector.add(pos, item.offs) local pos1 = vector.add(pos, item.offs)
pos1.y = pos1.y - (self.yoffs or 0)
obj:set_pos(pos1) obj:set_pos(pos1)
end end
end end
@ -579,16 +583,19 @@ end
local function move_node(pos, pos1_idx, start_pos, lpath, max_speed, height, move2to1, handover, cpos) local function move_node(pos, pos1_idx, start_pos, lpath, max_speed, height, move2to1, handover, cpos)
local pos2 = next_path_pos(start_pos, lpath, 1) local pos2 = next_path_pos(start_pos, lpath, 1)
--print("move_node", P2S(pos), P2S(start_pos), lpath, max_speed, height, move2to1, P2S(pos2)) --print("move_node", P2S(pos), P2S(start_pos), lpath, max_speed, height, move2to1, P2S(pos2))
-- optional for non-player objects
local yoffs = M(pos):get_float("offset")
if pos2 then if pos2 then
local dir = determine_dir(start_pos, pos2) local dir = determine_dir(start_pos, pos2)
local obj = node_to_entity(start_pos) local obj = node_to_entity(start_pos)
if obj then if obj then
local offs = {x=0, y=height or 1, z=0} local offs = {x=0, y=height or 1, z=0}
attach_objects(start_pos, offs, obj) attach_objects(start_pos, offs, obj, yoffs)
if dir.y == 0 then if dir.y == 0 then
if (dir.x ~= 0 and dir.z == 0) or (dir.x == 0 and dir.z ~= 0) then if (dir.x ~= 0 and dir.z == 0) or (dir.x == 0 and dir.z ~= 0) then
attach_objects(start_pos, dir, obj) attach_objects(start_pos, dir, obj, yoffs)
end end
end end
local self = obj:get_luaentity() local self = obj:get_luaentity()
@ -600,6 +607,7 @@ local function move_node(pos, pos1_idx, start_pos, lpath, max_speed, height, mov
self.base_pos = pos self.base_pos = pos
self.move2to1 = move2to1 self.move2to1 = move2to1
self.handover = handover self.handover = handover
self.yoffs = yoffs
--print("move_node", P2S(start_pos), P2S(pos2), P2S(dir), P2S(pos)) --print("move_node", P2S(start_pos), P2S(pos2), P2S(dir), P2S(pos))
move_entity(obj, pos2, dir) move_entity(obj, pos2, dir)
end end

View File

@ -46,6 +46,22 @@ local RECIPE = {
}, },
} }
local function filter_recipes_based_on_points(recipes, owner)
local ex_points = 0
if owner then
local player = minetest.get_player_by_name(owner)
ex_points = techage.get_expoints(player) or 0
end
local tbl = {}
for _,item in ipairs(recipes) do
if ex_points >= (item.ex_points or 0) then
tbl[#tbl + 1] = item
end
end
return tbl
end
-- Formspec -- Formspec
local function input_string(recipe) local function input_string(recipe)
@ -93,6 +109,7 @@ function techage.recipes.add(rtype, recipe)
name, num = unpack(string.split(recipe.output, " ")) name, num = unpack(string.split(recipe.output, " "))
item.output = {name = name or "", num = tonumber(num) or 0} item.output = {name = name or "", num = tonumber(num) or 0}
item.catalyst = recipe.catalyst item.catalyst = recipe.catalyst
item.ex_points = recipe.ex_points or 0
Recipes[rtype][#Recipes[rtype]+1] = item Recipes[rtype][#Recipes[rtype]+1] = item
output = name output = name
@ -109,8 +126,9 @@ function techage.recipes.add(rtype, recipe)
} }
end end
function techage.recipes.formspec(x, y, rtype, nvm) function techage.recipes.formspec(x, y, rtype, nvm, owner)
local recipes = Recipes[rtype] or {} local recipes = Recipes[rtype] or {}
recipes = filter_recipes_based_on_points(recipes, owner)
nvm.recipe_idx = range(nvm.recipe_idx or 1, 1, #recipes) nvm.recipe_idx = range(nvm.recipe_idx or 1, 1, #recipes)
local idx = nvm.recipe_idx local idx = nvm.recipe_idx
local recipe = recipes[idx] or RECIPE local recipe = recipes[idx] or RECIPE

View File

@ -202,6 +202,9 @@ techage.Items = {
ta4_terminal = "techage:terminal3", ta4_terminal = "techage:terminal3",
ta4_autocrafter = "techage:ta4_autocrafter_pas", ta4_autocrafter = "techage:ta4_autocrafter_pas",
ta4_recipeblock = "techage:ta4_recipeblock", ta4_recipeblock = "techage:ta4_recipeblock",
----------------------------
ta5_flycontroller = "techage:ta5_flycontroller",
ta5_aichip = "techage:ta5_aichip",
} }
function techage.add_manual_items(table_with_items) function techage.add_manual_items(table_with_items)

View File

@ -227,6 +227,22 @@ techage.manual_DE.aTitel = {
"3,TA4 Elektronikfabrik / Electronic Fab", "3,TA4 Elektronikfabrik / Electronic Fab",
"3,TA4 Injektor / Injector", "3,TA4 Injektor / Injector",
"3,TA4 Recycler", "3,TA4 Recycler",
"1,TA5: Zukunft",
"2,Energiequellen",
"3,TA5 Fusionsreaktor (geplant)",
"2,Energiespeicher",
"3,TA5 Hybrid-Speicher (geplant)",
"2,Logik Blöcke",
"2,Transport und Verkehr",
"3,TA5 Flug Controller",
"3,TA5 Hyperloop Transport Kiste",
"3,TA5 Hyperloop Transport Tank",
"3,Hyperloop Teleport Blöcke (geplant)",
"3,TA5 Container (geplant)",
"3,TA5-Teleport-Tubes (geplant)",
"3,TA5-Teleport-Pipes (geplant)",
"2,Weitere TA5 Blöcke/Items",
"3,TA5 KI Chip / TA5 AI Chip",
} }
techage.manual_DE.aText = { techage.manual_DE.aText = {
@ -1669,6 +1685,11 @@ techage.manual_DE.aText = {
" - 'b2a' Bewege Block von B nach A\n".. " - 'b2a' Bewege Block von B nach A\n"..
" - 'move' Bewege Block auf die andere Seite\n".. " - 'move' Bewege Block auf die andere Seite\n"..
"\n".. "\n"..
"*Wichtige Hinweise:*\n"..
"\n"..
" - Sofern mehrere Blöcke bewegt werden sollen\\, muss der Block\\, der die Spieler/Mobs mitnehmen soll\\, beim Antrainieren als erstes angeklickt werden.\n"..
" - Hat der Block\\, der die Spieler/Mobs mitnehmen soll\\, eine reduzierte Höhe\\, so muss die Höhe im Controller über das Schraubenschlüsselmenü eingestellt werden (bspw. Höhe = 0.5). Ansonsten wird der Spieler/Mob nicht \"gefunden\" und damit nicht mitgenommen.\n"..
"\n"..
"\n".. "\n"..
"\n", "\n",
"Der TA4 Drehcontroller ist ähnlich zum Move Controller\"\\, aber die ausgewählten Blöcke werden nicht bewegt\\, sondern um ihr Zentrum nach rechts oder links gedreht.\n".. "Der TA4 Drehcontroller ist ähnlich zum Move Controller\"\\, aber die ausgewählten Blöcke werden nicht bewegt\\, sondern um ihr Zentrum nach rechts oder links gedreht.\n"..
@ -1953,6 +1974,69 @@ techage.manual_DE.aText = {
"\n".. "\n"..
"\n".. "\n"..
"\n", "\n",
"Maschinen zur Überwindung von Raum und Zeit\\, neue Energiequellen und andere Errungenschaften prägen dein Leben. \n"..
"\n"..
"Für die Herstellung und Nutzung von TA5 Maschinen und Blöcken sind Erfahrungspunkte (experience points) notwendig. Diese können nur über den Teilchenbeschleuniger aus TA4 erarbeitet werden.\n"..
"\n"..
"\n"..
"\n",
"",
"",
"",
"",
"",
"",
"Der TA5 Flug Controller ist ähnlich zum TA4 Move Controller. Im Gegensatz zum TA4 Move Controller können hier mehrere Bewegungen zu einer Flugstrecke kombiniert werden. Diese Flugstrecke kann im Eingabefeld über mehrere x\\,y\\,z Angaben definiert werden (eine Bewegung pro Zeile). Über \"Speichern\" wird die Flugstrecke geprüft und gespeichert. Bei einem Fehler wird eine Fehlermeldung ausgegeben.\n"..
"\n"..
"Mit der Taste \"Test\" wird die Flugstrecke mit den absoluten Koordinaten zur Überprüfung im Chat ausgegeben.\n"..
"\n"..
"Die maximale Distanz für die gesammte Flugstrecke beträgt 500 m.\n"..
"\n"..
"Die Nutzung des TA5 Flug Controllers benötigt 40 Erfahrungspunkte.\n"..
"\n"..
"\n"..
"\n",
"Die TA5 Hyperloop Transport Kiste erlaubt den Transport von Gegenständen über ein Hyperloop Netzwerk.\n"..
"\n"..
"Eine normale TA4 Kiste muss man dazu auf eine Hyperloop Junction stellen. Die Kiste bekommt damit ein zusätzliches Schraubenschlüssel-Menü mit dem man das Pairing von zwei Kisten durchführen kann. Dinge\\, die in der Kiste sind\\, werden zur Gegenstelle teleportiert. Die Kiste kann auch mit einem Schieber gefüllt/geleert werden.\n"..
"\n"..
"Die Nutzung der TA5 Hyperloop Transport Kiste benötigt 20 Erfahrungspunkte.\n"..
"\n"..
"\n"..
"\n",
"Der TA5 Hyperloop Transport Tank erlaubt den Transport von Flüssigkeiten über ein Hyperloop Netzwerk.\n"..
"\n"..
"Ein TA4 Tank muss man dazu auf eine Hyperloop Junction stellen. Der Tank bekommt damit ein zusätzliches Schraubenschlüssel-Menü mit dem man das Pairing von zwei Tanks durchführen kann. Flüssigkeiten\\, die in dem Tank sind\\, werden zur Gegenstelle teleportiert. Der Tank kann auch mit einer Pumpe gefüllt/geleert werden.\n"..
"\n"..
"Die Nutzung des TA5 Hyperloop Transport Tanks benötigt 20 Erfahrungspunkte.\n"..
"\n"..
"\n"..
"\n",
"Die Hyperloop Teleport Blöcke erlauben den Aufbau von Hyperloop Netzwerk ohne Hyperloop-Röhren.\n"..
"\n"..
"Die Nutzung der Hyperloop Teleport Blöcke benötigt 120 Erfahrungspunkte.\n"..
"\n",
"Der TA5 Container erlaubt Techage Anlagen ein- und an einer anderen Stelle wieder auszupacken.\n"..
"\n"..
"Für die Nutzung des TA5 Containers werden 80 Erfahrungspunkte benötigt.\n"..
"\n",
"Teleport Tubes erlauben den Item-Transport ohne Tubes bis zu einer Entfernung von 200 Blöcken.\n"..
"\n"..
"Die Teleport-Tubes benötigen jeweils 5 ku Strom.\n"..
"\n"..
"Für die Nutzung der TA5 Teleport Tubes werden 60 Erfahrungspunkte benötigt.\n"..
"\n",
"Teleport Pipes erlauben den Flüssigkeiten-Transport ohne Pipes bis zu einer Entfernung von 200 Blöcken.\n"..
"\n"..
"Die Teleport-Pipes benötigen jeweils 5 ku Strom.\n"..
"\n"..
"Für die Nutzung der TA5 Teleport Pipes werden 60 Erfahrungspunkte benötigt.\n"..
"\n",
"",
"Der TA5 KI Chip wird teilweise zur Herstellung von TA5 Blöcken benötigt. Der TA5 KI Chip kann nur auf der TA4 Elektronik Fab hergestellt werden. Dazu werden 10 Erfahrungspunkte benötigt.\n"..
"\n"..
"\n"..
"\n",
} }
techage.manual_DE.aItemName = { techage.manual_DE.aItemName = {
@ -2182,6 +2266,22 @@ techage.manual_DE.aItemName = {
"ta4_electronicfab", "ta4_electronicfab",
"ta4_injector", "ta4_injector",
"ta4_recycler", "ta4_recycler",
"techage_ta5",
"",
"",
"",
"",
"",
"",
"ta5_flycontroller",
"ta4_chest",
"ta4_tank",
"",
"",
"",
"",
"",
"ta5_aichip",
} }
techage.manual_DE.aPlanTable = { techage.manual_DE.aPlanTable = {
@ -2411,5 +2511,21 @@ techage.manual_DE.aPlanTable = {
"", "",
"", "",
"", "",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
} }

View File

@ -117,7 +117,7 @@ techage.manual_EN.aTitel = {
"3,Door/Gate Blocks", "3,Door/Gate Blocks",
"3,TA3 Door Controller", "3,TA3 Door Controller",
"3,TA3 Door Controller II", "3,TA3 Door Controller II",
"3,TA3 sound block", "3,TA3 Sound Block",
"3,TA3 Mesecons Converter", "3,TA3 Mesecons Converter",
"2,Detectors", "2,Detectors",
"3,TA3 Detector", "3,TA3 Detector",
@ -223,6 +223,22 @@ techage.manual_EN.aTitel = {
"3,TA4 Electronic Fab", "3,TA4 Electronic Fab",
"3,TA4 Injector", "3,TA4 Injector",
"3,TA4 Recycler", "3,TA4 Recycler",
"1,TA5: Future",
"2,Energy Sources",
"3,TA5 Fusion Reactor (planned)",
"2,Energy Storage",
"3,TA5 Hybrid Storage (planned)",
"2,Logic blocks",
"2,Transport and Traffic",
"3,TA5 Flight Controller",
"3,TA5 Hyperloop Transport Chest",
"3,TA5 Hyperloop Transport Tank",
"3,Hyperloop Teleport Blocks (planned)",
"3,TA5 Container (planned)",
"3,TA5 Teleport Tubes (planned)",
"3,TA5 Teleport Pipes (planned)",
"2,More TA5 Blocks / Items",
"3,TA5 AI Chip",
} }
techage.manual_EN.aText = { techage.manual_EN.aText = {
@ -1663,6 +1679,11 @@ techage.manual_EN.aText = {
" - 'b2a' Move block from B to A.\n".. " - 'b2a' Move block from B to A.\n"..
" - 'move' Move block to the other side\n".. " - 'move' Move block to the other side\n"..
"\n".. "\n"..
"*Important instructions:*\n"..
"\n"..
" - If several blocks are to be moved\\, the block that is to take the players/mobs must be clicked first when training.\n"..
" - If the block that is supposed to take the players/mobs has a reduced height\\, the height must be set in the controller using the open-ended wrench menu (e.g. height = 0.5). Otherwise the player/mob will not be \"found\" and will not be taken away.\n"..
"\n"..
"\n".. "\n"..
"\n", "\n",
"The TA4 turn controller is similar to the \"Move Controller\"\\, but the selected blocks are not moved\\, but rotated around their center to the right or left.\n".. "The TA4 turn controller is similar to the \"Move Controller\"\\, but the selected blocks are not moved\\, but rotated around their center to the right or left.\n"..
@ -1879,6 +1900,69 @@ techage.manual_EN.aText = {
"\n".. "\n"..
" \n".. " \n"..
"\n", "\n",
"Machines to overcome space and time\\, new sources of energy and other achievements shape your life.\n"..
"\n"..
"Experience points are required for the manufacture and use of TA5 machines and blocks. These can only be worked out using the collider from TA4.\n"..
"\n"..
"\n"..
"\n",
"",
"",
"",
"",
"",
"",
"The TA5 Flight Controller is similar to the TA4 Move Controller. In contrast to the TA4 Move Controller\\, several movements can be combined into one flight route. This flight route can be defined in the input field using several x\\,y\\,z entries (one movement per line). The flight route is checked and saved via \"Save\". In the event of an error\\, an error message is issued.\n"..
"\n"..
"With the \"Test\" button\\, the flight route with the absolute coordinates is output for checking in the chat.\n"..
"\n"..
"The maximum distance for the entire flight distance is 500 m.\n"..
"\n"..
"The use of the TA5 Flight Controller requires 40 experience points.\n"..
"\n"..
"\n"..
"\n",
"The TA5 Hyperloop Transport Chest allows objects to be transported over a Hyperloop network.\n"..
"\n"..
"A normal TA4 chest has to be placed on a Hyperloop Junction. The chest has an additional wrench menu with which you can pair two chests. Things that are in the chest are teleported to the remote station. The box can also be filled/emptied with a pusher.\n"..
"\n"..
"The use of the TA5 Hyperloop Transport Chest requires 20 experience points.\n"..
"\n"..
"\n"..
"\n",
"The TA5 Hyperloop Transport Tank allows liquids to be transported over a Hyperloop network.\n"..
"\n"..
"A TA4 Tank has to be placed on a Hyperloop Junction. This gives the tank an additional wrench menu that can be used to pair two tanks. Liquids in the tank will be teleported to the remote station. The tank can also be filled/emptied with a pump.\n"..
"\n"..
"The use of the TA5 Hyperloop Transport Tank requires 20 experience points.\n"..
"\n"..
"\n"..
"\n",
"The Hyperloop Teleport Blocks allow the construction of a Hyperloop network without Hyperloop tubes.\n"..
"\n"..
"The use of the Hyperloop Teleport Blocks requires 120 experience points.\n"..
"\n",
"The TA5 container allows Techage systems to be packed and unpacked at another location.\n"..
"\n"..
"80 experience points are required to use the TA5 container.\n"..
"\n",
"Teleport tubes allow items to be transported without tubes up to a distance of 200 blocks.\n"..
"\n"..
"The teleport tubes each require 5 ku of electricity.\n"..
"\n"..
"60 experience points are required to use the TA5 Teleport Tubes.\n"..
"\n",
"Teleport Pipes allow liquids to be transported without pipes up to a distance of 200 blocks.\n"..
"\n"..
"The teleport pipes each require 5 ku of electricity.\n"..
"\n"..
"60 experience points are required to use the TA5 Teleport Pipes.\n"..
"\n",
"",
"The TA5 AI Chip is partly required for the production of TA5 blocks. The TA5 AI Chip can only be manufactured at the TA4 Electronics Fab. This requires 10 experience points.\n"..
"\n"..
"\n"..
"\n",
} }
techage.manual_EN.aItemName = { techage.manual_EN.aItemName = {
@ -2104,6 +2188,22 @@ techage.manual_EN.aItemName = {
"ta4_electronicfab", "ta4_electronicfab",
"ta4_injector", "ta4_injector",
"ta4_recycler", "ta4_recycler",
"techage_ta5",
"",
"",
"",
"",
"",
"",
"ta5_flycontroller",
"ta4_chest",
"ta4_tank",
"",
"",
"",
"",
"",
"ta5_aichip",
} }
techage.manual_EN.aPlanTable = { techage.manual_EN.aPlanTable = {
@ -2329,5 +2429,21 @@ techage.manual_EN.aPlanTable = {
"", "",
"", "",
"", "",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
} }

View File

@ -78,3 +78,9 @@ techage.recipes.add("ta4_electronic_fab", {
output = "techage:ta4_leds 8", output = "techage:ta4_leds 8",
input = {"basic_materials:plastic_sheet 4", "basic_materials:copper_wire 1", "techage:ta4_silicon_wafer 1"} input = {"basic_materials:plastic_sheet 4", "basic_materials:copper_wire 1", "techage:ta4_silicon_wafer 1"}
}) })
techage.recipes.add("ta4_electronic_fab", {
output = "techage:ta5_aichip 2",
input = {"techage:ta4_leds 8", "basic_materials:copper_wire 1", "basic_materials:gold_wire 1", "techage:ta4_silicon_wafer 1"},
ex_points = 10,
})

View File

@ -25,7 +25,7 @@ local hyperloop = techage.hyperloop
local remote_pos = techage.hyperloop.remote_pos local remote_pos = techage.hyperloop.remote_pos
local CAPACITY = 1000 local CAPACITY = 1000
local EX_PIONTS = 20 local EX_POINTS = 20
local function on_rightclick(pos, node, clicker) local function on_rightclick(pos, node, clicker)
local rmt_pos = remote_pos(pos) local rmt_pos = remote_pos(pos)
@ -243,7 +243,7 @@ minetest.register_node("techage:ta4_tank", {
techage.remove_node(pos, oldnode, oldmetadata) techage.remove_node(pos, oldnode, oldmetadata)
end, end,
on_rightclick = on_rightclick, on_rightclick = on_rightclick,
ta5_formspec = {menu=hyperloop.WRENCH_MENU, ex_points=EX_PIONTS}, ta5_formspec = {menu=hyperloop.WRENCH_MENU, ex_points=EX_POINTS},
ta_after_formspec = hyperloop.after_formspec, ta_after_formspec = hyperloop.after_formspec,
can_dig = can_dig, can_dig = can_dig,
paramtype2 = "facedir", paramtype2 = "facedir",

View File

@ -247,6 +247,7 @@ parse_md_file("./manual_ta1_DE.md", mod, manual)
parse_md_file("./manual_ta2_DE.md", mod, manual) parse_md_file("./manual_ta2_DE.md", mod, manual)
parse_md_file("./manual_ta3_DE.md", mod, manual) parse_md_file("./manual_ta3_DE.md", mod, manual)
parse_md_file("./manual_ta4_DE.md", mod, manual) parse_md_file("./manual_ta4_DE.md", mod, manual)
parse_md_file("./manual_ta5_DE.md", mod, manual)
gen_lua_file("../doc/manual_DE.lua") gen_lua_file("../doc/manual_DE.lua")
gen_toc_md_file("./toc_DE.md", "Inhaltsverzeichnis") gen_toc_md_file("./toc_DE.md", "Inhaltsverzeichnis")
@ -259,6 +260,7 @@ parse_md_file("./manual_ta1_EN.md", mod, manual)
parse_md_file("./manual_ta2_EN.md", mod, manual) parse_md_file("./manual_ta2_EN.md", mod, manual)
parse_md_file("./manual_ta3_EN.md", mod, manual) parse_md_file("./manual_ta3_EN.md", mod, manual)
parse_md_file("./manual_ta4_EN.md", mod, manual) parse_md_file("./manual_ta4_EN.md", mod, manual)
parse_md_file("./manual_ta5_EN.md", mod, manual)
gen_lua_file("../doc/manual_EN.lua") gen_lua_file("../doc/manual_EN.lua")
gen_toc_md_file("./toc_EN.md", "Table of Contents") gen_toc_md_file("./toc_EN.md", "Table of Contents")

View File

@ -226,3 +226,19 @@
- [TA4 Elektronikfabrik / Electronic Fab](./manual_ta4_DE.md#ta4-elektronikfabrik--electronic-fab) - [TA4 Elektronikfabrik / Electronic Fab](./manual_ta4_DE.md#ta4-elektronikfabrik--electronic-fab)
- [TA4 Injektor / Injector](./manual_ta4_DE.md#ta4-injektor--injector) - [TA4 Injektor / Injector](./manual_ta4_DE.md#ta4-injektor--injector)
- [TA4 Recycler](./manual_ta4_DE.md#ta4-recycler) - [TA4 Recycler](./manual_ta4_DE.md#ta4-recycler)
- [TA5: Zukunft](./manual_ta5_DE.md#ta5:-zukunft)
- [Energiequellen](./manual_ta5_DE.md#energiequellen)
- [TA5 Fusionsreaktor (geplant)](./manual_ta5_DE.md#ta5-fusionsreaktor-(geplant))
- [Energiespeicher](./manual_ta5_DE.md#energiespeicher)
- [TA5 Hybrid-Speicher (geplant)](./manual_ta5_DE.md#ta5-hybrid-speicher-(geplant))
- [Logik Blöcke](./manual_ta5_DE.md#logik-blöcke)
- [Transport und Verkehr](./manual_ta5_DE.md#transport-und-verkehr)
- [TA5 Flug Controller](./manual_ta5_DE.md#ta5-flug-controller)
- [TA5 Hyperloop Transport Kiste](./manual_ta5_DE.md#ta5-hyperloop-transport-kiste)
- [TA5 Hyperloop Transport Tank](./manual_ta5_DE.md#ta5-hyperloop-transport-tank)
- [Hyperloop Teleport Blöcke (geplant)](./manual_ta5_DE.md#hyperloop-teleport-blöcke-(geplant))
- [TA5 Container (geplant)](./manual_ta5_DE.md#ta5-container-(geplant))
- [TA5-Teleport-Tubes (geplant)](./manual_ta5_DE.md#ta5-teleport-tubes-(geplant))
- [TA5-Teleport-Pipes (geplant)](./manual_ta5_DE.md#ta5-teleport-pipes-(geplant))
- [Weitere TA5 Blöcke/Items](./manual_ta5_DE.md#weitere-ta5-blöckeitems)
- [TA5 KI Chip / TA5 AI Chip](./manual_ta5_DE.md#ta5-ki-chip--ta5-ai-chip)

View File

@ -116,7 +116,7 @@
- [Door/Gate Blocks](./manual_ta3_EN.md#doorgate-blocks) - [Door/Gate Blocks](./manual_ta3_EN.md#doorgate-blocks)
- [TA3 Door Controller](./manual_ta3_EN.md#ta3-door-controller) - [TA3 Door Controller](./manual_ta3_EN.md#ta3-door-controller)
- [TA3 Door Controller II](./manual_ta3_EN.md#ta3-door-controller-ii) - [TA3 Door Controller II](./manual_ta3_EN.md#ta3-door-controller-ii)
- [TA3 sound block](./manual_ta3_EN.md#ta3-sound-block) - [TA3 Sound Block](./manual_ta3_EN.md#ta3-sound-block)
- [TA3 Mesecons Converter](./manual_ta3_EN.md#ta3-mesecons-converter) - [TA3 Mesecons Converter](./manual_ta3_EN.md#ta3-mesecons-converter)
- [Detectors](./manual_ta3_EN.md#detectors) - [Detectors](./manual_ta3_EN.md#detectors)
- [TA3 Detector](./manual_ta3_EN.md#ta3-detector) - [TA3 Detector](./manual_ta3_EN.md#ta3-detector)
@ -222,3 +222,19 @@
- [TA4 Electronic Fab](./manual_ta4_EN.md#ta4-electronic-fab) - [TA4 Electronic Fab](./manual_ta4_EN.md#ta4-electronic-fab)
- [TA4 Injector](./manual_ta4_EN.md#ta4-injector) - [TA4 Injector](./manual_ta4_EN.md#ta4-injector)
- [TA4 Recycler](./manual_ta4_EN.md#ta4-recycler) - [TA4 Recycler](./manual_ta4_EN.md#ta4-recycler)
- [TA5: Future](./manual_ta5_EN.md#ta5:-future)
- [Energy Sources](./manual_ta5_EN.md#energy-sources)
- [TA5 Fusion Reactor (planned)](./manual_ta5_EN.md#ta5-fusion-reactor-(planned))
- [Energy Storage](./manual_ta5_EN.md#energy-storage)
- [TA5 Hybrid Storage (planned)](./manual_ta5_EN.md#ta5-hybrid-storage-(planned))
- [Logic blocks](./manual_ta5_EN.md#logic-blocks)
- [Transport and Traffic](./manual_ta5_EN.md#transport-and-traffic)
- [TA5 Flight Controller](./manual_ta5_EN.md#ta5-flight-controller)
- [TA5 Hyperloop Transport Chest](./manual_ta5_EN.md#ta5-hyperloop-transport-chest)
- [TA5 Hyperloop Transport Tank](./manual_ta5_EN.md#ta5-hyperloop-transport-tank)
- [Hyperloop Teleport Blocks (planned)](./manual_ta5_EN.md#hyperloop-teleport-blocks-(planned))
- [TA5 Container (planned)](./manual_ta5_EN.md#ta5-container-(planned))
- [TA5 Teleport Tubes (planned)](./manual_ta5_EN.md#ta5-teleport-tubes-(planned))
- [TA5 Teleport Pipes (planned)](./manual_ta5_EN.md#ta5-teleport-pipes-(planned))
- [More TA5 Blocks / Items](./manual_ta5_EN.md#more-ta5-blocks--items)
- [TA5 AI Chip](./manual_ta5_EN.md#ta5-ai-chip)

View File

@ -24,7 +24,7 @@ local mark = dofile(MP .. "/basis/mark_lib.lua")
local MAX_DIST = 500 local MAX_DIST = 500
local MAX_BLOCKS = 16 local MAX_BLOCKS = 16
local EX_PIONTS = 40 local EX_POINTS = 40
local WRENCH_MENU = { local WRENCH_MENU = {
{ {
@ -85,7 +85,7 @@ minetest.register_node("techage:ta5_flycontroller", {
if minetest.is_protected(pos, player:get_player_name()) then if minetest.is_protected(pos, player:get_player_name()) then
return return
end end
if techage.get_expoints(player) < EX_PIONTS then if techage.get_expoints(player) < EX_POINTS then
return return
end end
@ -198,7 +198,7 @@ minetest.register_node("techage:ta5_flycontroller", {
techage.remove_node(pos, oldnode, oldmetadata) techage.remove_node(pos, oldnode, oldmetadata)
end, end,
ta5_formspec = {menu=WRENCH_MENU, ex_points=EX_PIONTS}, ta5_formspec = {menu=WRENCH_MENU, ex_points=EX_POINTS},
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {choppy=2, cracky=2, crumbly=2}, groups = {choppy=2, cracky=2, crumbly=2},
is_ground_content = false, is_ground_content = false,

View File

@ -55,6 +55,13 @@ local WRENCH_MENU = {
tooltip = S("Value in the range of 0.0 to 1.0"), tooltip = S("Value in the range of 0.0 to 1.0"),
default = "1.0", default = "1.0",
}, },
{
type = "float",
name = "offset",
label = S("Object offset"),
tooltip = S("Y-offset for non-player objects like vehicles (-0.5 to 0.5)"),
default = "0.0",
},
} }
local function formspec(nvm, meta) local function formspec(nvm, meta)