1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
--chatcmds.lua
--Registers commands to modify the init and step code for LuaAutomation
--position helper.
--punching a node will result in that position being saved and inserted into a text field on the top of init form.
local punchpos={}
minetest.register_on_punchnode(function(pos, node, player, pointed_thing)
local pname=player:get_player_name()
punchpos[pname]=pos
end)
local function get_init_form(env, pname)
local err = env.init_err or ""
local code = env.init_code or ""
local ppos=punchpos[pname]
local pp=""
if ppos then
pp="POS"..minetest.pos_to_string(ppos)
end
local form = "size[10,10]"
.."style[code;font=mono]"
.."button[0.0,0.2;2,1;run;Run InitCode]"
.."button[2.0,0.2;2,1;cls;Clear S]"
.."button[4.0,0.2;2,1;save;Save]"
.."button[6.0,0.2;2,1;del;Delete Env.]"
.."field[8.3,0.5;2,1;punchpos;Last punched position;"..pp.."]"
.."textarea[0.3,1.5;10,9.5;code;Environment initialization code;"..minetest.formspec_escape(code).."]"
.."label[0.0,9.7;"..err.."]"
return form
end
core.register_chatcommand("env_setup", {
params = "<environment name>",
description = "Set up and modify AdvTrains LuaAutomation environment",
privs = {atlatc=true},
func = function(name, param)
local env=atlatc.envs[param]
if not env then return false,"Invalid environment name!" end
minetest.show_formspec(name, "atlatc_envsetup_"..param, get_init_form(env, name))
return true
end,
})
core.register_chatcommand("env_create", {
params = "<environment name>",
description = "Create an AdvTrains LuaAutomation environment",
privs = {atlatc=true},
func = function(name, param)
if not param or param=="" then return false, "Name required!" end
if string.find(param, "[^a-zA-Z0-9-_]") then return false, "Invalid name (only common characters)" end
if atlatc.envs[param] then return false, "Environment already exists!" end
atlatc.envs[param] = atlatc.env_new(param)
atlatc.envs[param].subscribers = {name}
return true, "Created environment '"..param.."'. Use '/env_setup "..param.."' to define global initialization code, or start building LuaATC components!"
end,
})
core.register_chatcommand("env_subscribe", {
params = "<environment name>",
description = "Subscribe to the log of an Advtrains LuaATC environment",
privs = {atlatc=true},
func = function(name, param)
local env=atlatc.envs[param]
if not env then return false,"Invalid environment name!" end
for _,pname in ipairs(env.subscribers) do
if pname==name then
return false, "Already subscribed!"
end
end
table.insert(env.subscribers, name)
return true, "Subscribed to environment '"..param.."'."
end,
})
core.register_chatcommand("env_unsubscribe", {
params = "<environment name>",
description = "Unubscribe to the log of an Advtrains LuaATC environment",
privs = {atlatc=true},
func = function(name, param)
local env=atlatc.envs[param]
if not env then return false,"Invalid environment name!" end
for index,pname in ipairs(env.subscribers) do
if pname==name then
table.remove(env.subscribers, index)
return true, "Successfully unsubscribed!"
end
end
return false, "Not subscribed to environment '"..param.."'."
end,
})
core.register_chatcommand("env_subscriptions", {
params = "[environment name]",
description = "List Advtrains LuaATC environments you are subscribed to (no parameters) or subscribers of an environment (giving an env name).",
privs = {atlatc=true},
func = function(name, param)
if not param or param=="" then
local none=true
for envname, env in pairs(atlatc.envs) do
for _,pname in ipairs(env.subscribers) do
if pname==name then
none=false
minetest.chat_send_player(name, envname)
end
end
end
if none then
return false, "Not subscribed to any!"
end
return true
end
local env=atlatc.envs[param]
if not env then return false,"Invalid environment name!" end
local none=true
for index,pname in ipairs(env.subscribers) do
none=false
minetest.chat_send_player(name, pname)
end
if none then
return false, "No subscribers!"
end
return true
end,
})
minetest.register_on_player_receive_fields(function(player, formname, fields)
local pname=player:get_player_name()
if not minetest.check_player_privs(pname, {atlatc=true}) then return end
local envname=string.match(formname, "^atlatc_delconfirm_(.+)$")
if envname and fields.sure=="YES" then
atlatc.envs[envname]=nil
minetest.chat_send_player(pname, "Environment deleted!")
return
end
envname=string.match(formname, "^atlatc_envsetup_(.+)$")
if not envname then return end
local env=atlatc.envs[envname]
if not env then return end
if fields.del then
minetest.show_formspec(pname, "atlatc_delconfirm_"..envname, "field[sure;"..minetest.formspec_escape("SURE TO DELETE ENVIRONMENT "..envname.."? Type YES (all uppercase) to continue or just quit form to cancel.")..";]")
return
end
env.init_err=nil
if fields.code then
env.init_code=fields.code
end
if fields.run then
env:run_initcode()
minetest.show_formspec(pname, formname, get_init_form(env, pname))
end
end)
|