Activate TA5, improve move/fly controller
This commit is contained in:
parent
fd5b33e025
commit
79890c1c1b
@ -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,
|
||||||
|
@ -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", "")
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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 = {
|
|||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 = {
|
|||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
})
|
||||||
|
@ -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",
|
||||||
|
@ -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")
|
||||||
|
|
||||||
|
@ -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)
|
@ -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)
|
@ -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,
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user