diff options
Diffstat (limited to 'advtrains/advtrains_luaautomation/chatcmds.lua')
-rw-r--r-- | advtrains/advtrains_luaautomation/chatcmds.lua | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/advtrains/advtrains_luaautomation/chatcmds.lua b/advtrains/advtrains_luaautomation/chatcmds.lua new file mode 100644 index 0000000..2d0c69d --- /dev/null +++ b/advtrains/advtrains_luaautomation/chatcmds.lua @@ -0,0 +1,84 @@ +--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]button[0,0;2,1;run;Run InitCode]button[2,0;2,1;cls;Clear S]" + .."button[4,0;2,1;save;Save] button[6,0;2,1;del;Delete Env.] field[8.1,0.5;2,1;punchpos;Last punched position;"..pp.."]" + .."textarea[0.2,1;10,10;code;Environment initialization code;"..minetest.formspec_escape(code).."]" + .."label[0,9.8;"..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 atlatc.envs[param] then return false, "Environment already exists!" end + atlatc.envs[param] = atlatc.env_new(param) + return true, "Created environment '"..param.."'. Use '/env_setup "..param.."' to define global initialization code, or start building LuaATC components!" + 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) |