@@ -522,6 +522,23 @@ local digiline = {
522
522
end
523
523
}
524
524
}
525
+
526
+ local function get_program (pos )
527
+ local meta = minetest .get_meta (pos )
528
+ return meta :get_string (" code" )
529
+ end
530
+
531
+ local function set_program (pos , code )
532
+ reset (pos )
533
+ reset_meta (pos , code )
534
+ local err = run (pos , {type = " program" })
535
+ if err then
536
+ reset_meta (pos , code , err )
537
+ return false , err
538
+ end
539
+ return true
540
+ end
541
+
525
542
local function on_receive_fields (pos , form_name , fields , sender )
526
543
if not fields .program then
527
544
return
@@ -531,12 +548,10 @@ local function on_receive_fields(pos, form_name, fields, sender)
531
548
minetest .record_protection_violation (pos , name )
532
549
return
533
550
end
534
- reset (pos )
535
- reset_meta (pos , fields .code )
536
- local err = run (pos , {type = " program" })
537
- if err then
538
- print (err )
539
- reset_meta (pos , fields .code , err )
551
+ local ok , err = set_program (pos , fields .code )
552
+ if not ok then
553
+ -- it's not an error from the server perspective
554
+ minetest .log (" action" , " Lua controller programming error: " .. err )
540
555
end
541
556
end
542
557
@@ -590,7 +605,11 @@ for d = 0, 1 do
590
605
receptor = {
591
606
state = mesecon .state .on ,
592
607
rules = output_rules [cid ]
593
- }
608
+ },
609
+ luacontroller = {
610
+ get_program = get_program ,
611
+ set_program = set_program ,
612
+ },
594
613
}
595
614
596
615
minetest .register_node (node_name , {
0 commit comments