This is an old revision of the document!
Do anything you want with ATC rails.
This is a draft. Please improve this page by creating relevant pages, adding information and references to internal or external sources.
Note: this page has been written for Advtrains 2.0.1 TSS and Minetest 5.1.0. Examples and practices described in this page don't take advantage of improvements introduced in later releases.
Mod: advtrains_luaautomation
Node name: advtrains_luaautomation:dtrack_placer
Other names:
advtrains_luaautomation:dtrack_st
advtrains_luaautomation:dtrack_st_30
advtrains_luaautomation:dtrack_st_45
advtrains_luaautomation:dtrack_st_60
This node has no craft recipe.
atlatc
privilege.Each active component is assigned to an environment. This is where all data are held. Components in different environments can't interfere with each other.
Note: the Environments and Coding guide sections also apply to the LuaAutomation operation panel.
Main article: /env_create
An environment is created by using /env_create
. We pass to this command the name of the environment to create. While this name may contain whitespaces and symbols, it is highly recommended that you use only uppercase, lowercase letters and underscores.
Main article: /env_setup
You've created your first LuaATC environment! If you execute /env_setup <your_env_name>
in the chat window, you get a formspec like this:
It allows you to edit your environment initialization code.
S
table.
When the init code fails to execute, the F
table is restored to previous state.
More information on how to use that initialization code to do amazing things is given below.
The following global variables are available inside a LuaAutomation ATC rail:
A table shared between all components of an environment. Its contents are persistent over server restarts. Any value is allowed, except functions:
Do not store functions in this table. Calling them from another component may work, but they will be discarded on server shutdown and this may lead to unexpected results.
A table shared between all components of an environment. Its contents are discarded on server shutdown or when the init code gets re-run. Any value is allowed, even functions.
This table is not made to store data, but to provide static value and function definitions. This table should be populated by the initialization code.
The standard Lua globals are available in the LuaATC environment:
string
math
table
os
The standard Lua functions are available in the LuaATC environment:
assert
error
ipairs
pairs
next
select
tonumber
tostring
type
unpack
In the following functions, all parameters named pos
designate a position. You can use either:
{x=34, y=2, z=-18}
)POS(34,2,-18)
shorthand
A shorthand function to designate a Minetest position vector like {x=?, y=?, z=?}
.
Gets the state of a passive component at position pos
. The returned states are component-specific, but it is more likely to be a string.
Sets the state of a passive component at position pos
to the value new_state
. The possible states are component-specific, but it is more likely to be a string.
Checks whether there is a passive component at position pos
. If pos
is a string, checks whether the passive component with the specified name exists.
Causes the LuaAutomation mod to trigger an int
event (the Advtrains equivalent of Mesecons' interrupt
) on this component after the given time
, in seconds, with the specified message
. message
can be of any Lua data type.
This function is not available in init code.
Triggers immediately an ext_int
event on the active component at pos
(can't be a string). message
can be of any Lua data type.
Use with care! This may lead to expotential growth of interrupts.
Sends a digiline message on the specified channel
.
This function is not available in init code.
Interlocking functions are available when the advtrains_interlocking
mod is enabled.
Checks whether it is possible to set the route designated by route_name
from the signal at position pos
.
It emits a warning and halts execution of Lua code in the following cases:
2019-01-01 15:00:00: WARNING[Server]: [advtrains]LuaAutomation ATC interface rail at (0,0,0) : LUA Error: …ds/advtrains/advtrains_luaautomation/environment.lua:168: There's no signal at (0,0,0)
pos
is a string, and the named passive component does not exist:2019-01-01 15:00:00: WARNING[Server]: [advtrains]LuaAutomation ATC interface rail at (0,0,0) : LUA Error: …/mods/advtrains/advtrains_luaautomation/pcnaming.lua:22: Invalid position supplied to ???: “invalid_pcnaming”
2019-01-01 15:00:00: WARNING[Server]: [advtrains]LuaAutomation ATC interface rail at (0,0,0) : LUA Error: …ds/advtrains/advtrains_luaautomation/environment.lua:185: No route called B at (0,0,0)
Requests the route designated by route_name
from the signal at position pos
. Has the same effect as clicking the “Set Route” in the formspec from the designated signal.
Same warnings apply as for can_set_route
.
If the route can't be set, the signal remains red and waits for conflicting problems to be solved. Execution continues immediately.
Cancels the route designated by route_name
that is set from the signal at position pos
. Has the same effect as clicking the “Cancel Route” in the formspec from the designated signal.
Same warnings apply as for can_set_route
.
If the route has already been canceled, nothing happens.
Gets the aspect of the signal at pos
. The aspect format is described in the Signal page.
Same warnings apply as for can_set_route
.
In a LuaAutomation ATC controller, an event has the following format:
event = { type = "<type>", <type> = true, -- additional content }
The LuaAutomation ATC rail has the same texture as the ATC controller rail, but its functions are different.