added redstone_toggle
This commit is contained in:
		
							parent
							
								
									f2e2ec92b5
								
							
						
					
					
						commit
						d3e05321c5
					
				
							
								
								
									
										91
									
								
								redstone_toggle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								redstone_toggle
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,91 @@
 | 
				
			|||||||
 | 
					local hostname = "redstone_toggle" .. os.getComputerID()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function dump(o)
 | 
				
			||||||
 | 
					    if o == nil then
 | 
				
			||||||
 | 
					        return ""
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if type(o) == 'table' then
 | 
				
			||||||
 | 
					        local s = '{ '
 | 
				
			||||||
 | 
					        for k,v in pairs(o) do
 | 
				
			||||||
 | 
					            if type(k) ~= 'number' then k = '"'..k..'"' end
 | 
				
			||||||
 | 
					            s = s .. '['..k..'] = ' .. dump(v) .. ','
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					        return s .. '} '
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return tostring(o)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function recv()
 | 
				
			||||||
 | 
					    local master = rednet.lookup("rmm", "master")
 | 
				
			||||||
 | 
					    while true do
 | 
				
			||||||
 | 
					        local event, id, data = os.pullEvent()
 | 
				
			||||||
 | 
					        if event == "rednet_message" then
 | 
				
			||||||
 | 
					            print(id .. " (" .. event .. ")> " .. dump(data))
 | 
				
			||||||
 | 
					            if type(data) == 'table' then
 | 
				
			||||||
 | 
					                if data[1] == 'eval' then
 | 
				
			||||||
 | 
					                    local cmd_fn, err = loadstring(data[2])
 | 
				
			||||||
 | 
					                    if not cmd_fn then
 | 
				
			||||||
 | 
					                        print("Failed to compile '" .. data[2] .. "': " .. err)
 | 
				
			||||||
 | 
					                        rednet.send(master, "Failed to compile '" .. data[2] .. "': " .. err)
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                        local success, output = pcall(cmd_fn)
 | 
				
			||||||
 | 
					                        if success then
 | 
				
			||||||
 | 
					                            if output then
 | 
				
			||||||
 | 
					                                print("Command output from '" .. data[2] .. "': " .. dump(output))
 | 
				
			||||||
 | 
					                                rednet.send(master, "Command output from '" .. data[2] .. "': " .. dump(output))
 | 
				
			||||||
 | 
					                            else
 | 
				
			||||||
 | 
					                                print("There is no command output from '" .. data[2] .. "'")
 | 
				
			||||||
 | 
					                                rednet.send(master, "There is no command output from '" .. data[2] .. "'")
 | 
				
			||||||
 | 
					                            end
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                            print("Runtime error: " .. output)
 | 
				
			||||||
 | 
					                            rednet.send(master, "Runtime error: " .. output)
 | 
				
			||||||
 | 
					                        end
 | 
				
			||||||
 | 
					                    end
 | 
				
			||||||
 | 
					                end
 | 
				
			||||||
 | 
					            elseif type(data) == 'string' then
 | 
				
			||||||
 | 
					                if data == 'ping' then
 | 
				
			||||||
 | 
					                    print("Pong!")
 | 
				
			||||||
 | 
					                    rednet.send(master, "Pong!")
 | 
				
			||||||
 | 
					                elseif data == 'toggle' then
 | 
				
			||||||
 | 
					                    output_state = !output_state
 | 
				
			||||||
 | 
					                    redstone.setOutput("back", output_state)
 | 
				
			||||||
 | 
					                    print("Toggled output to: " .. output_state)
 | 
				
			||||||
 | 
					                    rednet.send(master, "Toggled output to: " .. output_state)
 | 
				
			||||||
 | 
					                end
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function lever_input()
 | 
				
			||||||
 | 
					    while true do
 | 
				
			||||||
 | 
					        local new_lever_state = redstone.getInput("top")
 | 
				
			||||||
 | 
					        if new_lever_state != lever_state then
 | 
				
			||||||
 | 
					            lever_state = new_lever_state
 | 
				
			||||||
 | 
					            output_state = !output_state
 | 
				
			||||||
 | 
					            redstone.setOutput("back", output_state)
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					        sleep(1)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local output_state = redstone.getInput("back")
 | 
				
			||||||
 | 
					local lever_state = redstone.getInput("top")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local sides = peripheral.getNames()
 | 
				
			||||||
 | 
					for i = 1, #sides do
 | 
				
			||||||
 | 
					    if peripheral.getType(sides[i]) == "modem" then
 | 
				
			||||||
 | 
					        modemSide = sides[i]
 | 
				
			||||||
 | 
					        break
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rednet.open(modemSide)
 | 
				
			||||||
 | 
					rednet.host("rmm", hostname)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					parallel.waitForAny(recv, lever_input)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rednet.close(modemSide)
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user