Nukegeneral, нужен аддон Open peripherals, хотя миск перифералс тоже полезная штука. Я поищу программу. Но скажу сразу она не юзер-френдли, т.к делал для себя. Т.е тебе возможно будет очень не просто ее использовать. Upd. вот программа для обогатителя. Но делал я ее летом прошлого года, щас бы уже что-то сделал по-другому. До конца она не закончена, основные строки считывания информации с реактора закомментированы, т.к испытывал ее на эмуляторе компкрафта на работе.Лексор, поставил я миск перифералс, можешь ту свою прогу скинуть?
Скрытый текст
--newlocal data={}data[paste][/paste]ExpHeat=100000 --температура плавления реактораdata[paste][/paste]Heat=89000 --текущая температура реактораdata[paste][/paste]MaxHeat=90000 --предел температуры, после которого автоматика будет выключать реакторdata[paste][/paste]wStatus=false --положение кнопки вкл/выклdata[paste][/paste]cStatus=false --текущее состояние реактора (отключен)data[paste][/paste]cooling=true --состояние охлаждения (включено)data[paste][/paste]wProcent=100data[paste][/paste]tick=0data[paste][/paste]wTick=0term[paste][/paste]setBackgroundColor(colors[paste][/paste]black)term[paste][/paste]setTextColor(colors[paste][/paste]white)term[paste][/paste]clear()function writer(fileName, writingTable) if type(writingTable)=="table" and type(fileName)=="string" then writingTableS=textutils[paste][/paste]serialize(writingTable) else return false end file=io[paste][/paste]open(fileName, "w") file:write(writingTableS[paste][/paste][paste][/paste]"\n") file:close()endfunction reader(fileName) if type(fileName)=="string" then if fs[paste][/paste]exists(fileName) then file=io[paste][/paste]open(fileName, "r") test=file:read() if test~=nil then writingTableS=tostring(test) writingTable=textutils[paste][/paste]unserialize(writingTableS) file:close() return writingTable end file:close() end end return falseendlocal ddata=reader("ngi[paste][/paste]cfg")if type(ddata)=="table" then data=ddataendfunction printVerticalLine(lineX, startingY, endingY) local curX, curY = term[paste][/paste]getCursorPos() term[paste][/paste]setBackgroundColor(colors[paste][/paste]orange) for lineY = startingY, endingY do term[paste][/paste]setCursorPos(lineX, lineY) term[paste][/paste]write(" ") end term[paste][/paste]setCursorPos(curX, curY)endfunction printHorizontalLine(yLine, startingX, endingX) local curX, curY = term[paste][/paste]getCursorPos() term[paste][/paste]setBackgroundColor(colors[paste][/paste]orange) for xLine = startingX, endingX do term[paste][/paste]setCursorPos(xLine, yLine) term[paste][/paste]write(" ") end term[paste][/paste]setCursorPos(curX, curY)endlocal function buttonOnOff() if data[paste][/paste]wStatus then term[paste][/paste]setBackgroundColor(colors[paste][/paste]red) term[paste][/paste]setCursorPos(48, 1) term[paste][/paste]write(" ") term[paste][/paste]setCursorPos(48, 2) term[paste][/paste]write(" ON ") term[paste][/paste]setCursorPos(48, 3) term[paste][/paste]write(" ") else term[paste][/paste]setBackgroundColor(colors[paste][/paste]green) term[paste][/paste]setCursorPos(48, 1) term[paste][/paste]write(" ") term[paste][/paste]setCursorPos(48, 2) term[paste][/paste]write(" OFF") term[paste][/paste]setCursorPos(48, 3) term[paste][/paste]write(" ") endendlocal function buttonCooling() if data[paste][/paste]cooling then term[paste][/paste]setBackgroundColor(colors[paste][/paste]green) term[paste][/paste]setCursorPos(24, 5) term[paste][/paste]write(" Cooling ") term[paste][/paste]setCursorPos(24, 6) term[paste][/paste]write(" Online ") else term[paste][/paste]setBackgroundColor(colors[paste][/paste]red) term[paste][/paste]setCursorPos(24, 5) term[paste][/paste]write(" Cooling ") term[paste][/paste]setCursorPos(24, 6) term[paste][/paste]write(" Offline ") endendlocal function buttonUpHeat(bStat) if bStat==nil then term[paste][/paste]setBackgroundColor(colors[paste][/paste]red) term[paste][/paste]setCursorPos(35, 2) term[paste][/paste]write(" ") term[paste][/paste]setCursorPos(35, 3) term[paste][/paste]write(" > ") else term[paste][/paste]setBackgroundColor(colors[paste][/paste]green) term[paste][/paste]setCursorPos(35, 2) term[paste][/paste]write(" ") term[paste][/paste]setCursorPos(35, 3) term[paste][/paste]write(" > ") endendlocal function buttonDwHeat(bStat) if bStat==nil then term[paste][/paste]setBackgroundColor(colors[paste][/paste]blue) term[paste][/paste]setCursorPos(24, 2) term[paste][/paste]write(" ") term[paste][/paste]setCursorPos(24, 3) term[paste][/paste]write(" < ") else term[paste][/paste]setBackgroundColor(colors[paste][/paste]green) term[paste][/paste]setCursorPos(24, 2) term[paste][/paste]write(" ") term[paste][/paste]setCursorPos(24, 3) term[paste][/paste]write(" < ") endendlocal function buttonTurtInfo(InfStatus) term[paste][/paste]setBackgroundColor(colors[paste][/paste]red) term[paste][/paste]setCursorPos(48, 5) term[paste][/paste]write(" ") term[paste][/paste]setCursorPos(48, 6) term[paste][/paste]write("exit") term[paste][/paste]setCursorPos(48, 7) term[paste][/paste]write(" ")endfunction drawScreen() term[paste][/paste]setBackgroundColor(colors[paste][/paste]black) term[paste][/paste]setCursorPos(3, 2) term[paste][/paste]write("Exp[paste][/paste]Heat") term[paste][/paste]setCursorPos(3, 3) term[paste][/paste]write(data[paste][/paste]ExpHeat) term[paste][/paste]setCursorPos(14, 2) term[paste][/paste]write("Cur[paste][/paste]Heat") term[paste][/paste]setCursorPos(14, 3) term[paste][/paste]write(data[paste][/paste]Heat) term[paste][/paste]setCursorPos(27, 2) term[paste][/paste]write("Max[paste][/paste]Heat") term[paste][/paste]setCursorPos(27, 3) term[paste][/paste]write(data[paste][/paste]MaxHeat) term[paste][/paste]setCursorPos(40, 5) term[paste][/paste]write("Akive%") term[paste][/paste]setCursorPos(41, 6) term[paste][/paste]write(data[paste][/paste]wProcent) if data[paste][/paste]cStatus then term[paste][/paste]setBackgroundColor(colors[paste][/paste]red) term[paste][/paste]setCursorPos(39, 2) term[paste][/paste]write(" Status ") term[paste][/paste]setCursorPos(39, 3) term[paste][/paste]write(" Online ") else term[paste][/paste]setBackgroundColor(colors[paste][/paste]green) term[paste][/paste]setCursorPos(39, 2) term[paste][/paste]write(" Status ") term[paste][/paste]setCursorPos(39, 3) term[paste][/paste]write(" Offline") end printVerticalLine(1, 1, 7) printVerticalLine(12, 1, 7) printVerticalLine(23, 1, 7) printVerticalLine(38, 1, 7) printVerticalLine(47, 1, 7) printHorizontalLine(1, 1, 47) printHorizontalLine(4, 1, 47) printHorizontalLine(7, 1, 47)endlocal function grafInt() buttonCooling() buttonUpHeat() buttonDwHeat() buttonTurtInfo() buttonOnOff() drawScreen() sleep(1)endlocal function click() local e,side,x,y = os[paste][/paste]pullEvent("mouse_click") --51:19 if x>=48 and x<=51 and y>=1 and y <=3 then data[paste][/paste]wStatus=not data[paste][/paste]wStatus elseif x>=48 and x<=51 and y>=5 and y <=7 then exit() elseif x>=35 and x<=37 and y>=2 and y <=3 then if data[paste][/paste]MaxHeat<data[paste][/paste]ExpHeat-2200 then buttonUpHeat(1) data[paste][/paste]MaxHeat=data[paste][/paste]MaxHeat+500 sleep(0[paste][/paste]2) buttonUpHeat() end elseif x>=24 and x<=26 and y>=2 and y <=3 then if data[paste][/paste]MaxHeat>1000 then buttonDwHeat(1) data[paste][/paste]MaxHeat=data[paste][/paste]MaxHeat-500 sleep(0[paste][/paste]2) buttonDwHeat() end elseif x>=24 and x<=37 and y>=5 and y <=6 then data[paste][/paste]cooling=not data[paste][/paste]cooling end writer("ngi[paste][/paste]cfg", data)endwhile true do data[paste][/paste]tick=data[paste][/paste]tick+1 if data[paste][/paste]cStatus then data[paste][/paste]wTick=data[paste][/paste]wTick+1 end if data[paste][/paste]tick>=100 then data[paste][/paste]tick=0 data[paste][/paste]wProcent=data[paste][/paste]wTick data[paste][/paste]wTick=0 end --local nukeInf=mySensor[paste][/paste]getTargetDetails("0,1,2") --data[paste][/paste]ExpHeat=nukeInf[paste][/paste]MaxHeat --if data[paste][/paste]MaxHeat>nukeInf[paste][/paste]MaxHeat-2000 then -- data[paste][/paste]MaxHeat=nukeInf[paste][/paste]MaxHeat-2000 -- writer("ngi[paste][/paste]cfg", data) --end --data[paste][/paste]Heat=nukeInf[paste][/paste]Heat if data[paste][/paste]Heat<data[paste][/paste]MaxHeat and data[paste][/paste]wStatus then data[paste][/paste]cStatus=true else data[paste][/paste]cStatus=false end --if data[paste][/paste]cStatus then -- redstone[paste][/paste]setBundledOutput("back", 1) --end if data[paste][/paste]cStatus then data[paste][/paste]Heat=data[paste][/paste]Heat+100 else data[paste][/paste]Heat=data[paste][/paste]Heat-120 end parallel[paste][/paste]waitForAny(click, grafInt) if cMenu then -- endend