snippet safe write
will only write if position is on screen
Spoiler
function safeWrite(this) local termX,termY = term.getSize() local curX,curY = term.getCursorPos() if termX-curX-1 < 0 then return else write (string.sub(this,1,termX-curX-1)) return end end
Function Turtle Move (with position tracing)
Spoiler
turX,turY,turZ = 0,0,0 compas = {"n","e","s","w"} moves = {"U","D","L","R","F","B"} face = 1 -- 1 north 2 east 3 south 4 west function move(ins,rep) -- instructions are in moves table rep is the amount of times to repete move ment if not ins and not rep then return false,"error no move specified" elseif not rep then rep = 1 end for i=1,rep do if ins == "U" then -- up move if turtle.up() then turZ = turZ+1 else return false end end if ins == "D" then -- down move if turtle.down() then turZ = turZ-1 else return false end end if ins == "L" then -- left turn if turtle.turnLeft() then face = face - 1 if face < 1 then face = 4 end end end if ins == "R" then -- right turn if turtle.turnRight() then face = face + 1 if face > 4 then face = 1 end end end if ins == "F" then -- forward move if turtle.forward() then if face == 1 then turY = turY+1 end if face == 2 then turX = turX+1 end if face == 3 then turY = turY-1 end if face == 4 then turX = turX-1 end end end if ins == "B" then -- back move if turtle.back() then if face == 1 then turY = turY-1 end if face == 2 then turX = turX-1 end if face == 3 then turY = turY+1 end if face == 4 then turX = turX+1 end end end end end
function simple Menu
Spoiler
--[[ Basic Menu by Big Shiny Toys ]]-- local function menu(...) local sel = 1 local list = {...} local offX,offY = 1,1 -- change this to what ever off set you want local curX,curY = term.getCursorPos() while true do if sel > #list then sel = #list end if sel < 1 then sel = 1 end for i = 1,#list do term.setCursorPos(offX,offY+i-1) if sel == i then print("["..list[i].."]") else print(" "..list[i].." ") end end while true do local e,e1,e2,e3,e4,e5 = os.pullEvent() if e == "key" then if e1 == 200 then -- up key sel = sel-1 break end if e1 == 208 then -- down key sel = sel+1 break end if e1 == 28 then term.setCursorPos(curX,curY) return sel end end end end end term.clear() -- clears all test from screen print(menu("Item one","Item two","item three","there there")) -- add as many items as you want
TurtleCommand.lua
program that tracks turtle movement and allows user to "drive" the turtle with the W A S D Q E keys
Spoiler
--[[ Turtle Command By Big SHiny Toys ]]-- -- start of programs local tProgs = { manCon = function() while true do local e,e1,e2,e3,e4,e5 = coroutine.yield() if e == "char" then if e1 == "w" then move("F") end if e1 == "s" then move("B") end if e1 == "a" then move("L") end if e1 == "d" then move("R") end if e1 == "q" then move("U") end if e1 == "e" then move("D") end end end end, location = function() while true do local x,x1 = coroutine.yield() if not menuStatus then -- term.clear() -- term.setCursorPos(1,1) print("LOC X:"..turX.." Y:"..turY.." Z:"..turZ.." Compas: "..compas[face]) if gpsX then print("GPS X:"..gpsX.." Y:"..gpsY.." Z:"..gpsZ) else print("gps unavalible") end end if x == "redstone" then term.setCursorPos(1,4) print("Redstone signal") end end end, gps = function() local pastX,pastY,pastZ,pastV = turX,turY,turZ,face local w,w1,w2,w3,w4,w5 while true do w,w1,w2,w3,w4,w5 = coroutine.yield() -- if w == "char" and w1 == "t" then break end if pastX == turX and pastY == turY and pastZ == turZ and pastV == face then else gpsX,gpsY,gpsZ = gps.locate(1) pastX,pastY,pastZ,pastV = turX,turY,turZ,face end end end, menu = function() while true do coroutine.yield() if menuStatus then local a = menu("return","GPS Off","Quit") if a == 1 then menuStatus = false end if a == 2 then end if a == 3 then shutdown = true menuStatus = false end end end end } -- end of programs -- globals gpsX,gpsY,gpsZ = nil,nil,nil turX,turY,turZ = 0,0,0 compas = {"n","e","s","w"} moves = {"U","D","L","R","F","B"} face = 1 -- 1 north 2 east 3 south 4 west routines = {} routinNames = {} menuStatus = false shutdown = false -- local vars local i = 1 local e,e1,e2,e3,e4,e5 -- functions function menu(...) local sel = 1 local list = {...} local offX,offY = 1,1 -- change this to what ever off set you want local curX,curY = term.getCursorPos() local tX,tY while true do if sel > #list then sel = #list end if sel < 1 then sel = 1 end for i = 1,#list do term.setCursorPos(offX,offY+i-1) if sel == i then print("["..list[i].."]") else print(" "..list[i].." ") end end while true do tX,tY = term.getCursorPos() local e,e1,e2,e3,e4,e5 = os.pullEvent() term.setCursorPos(tX,tY) if e == "key" then if e1 == 200 then -- up key sel = sel-1 break end if e1 == 208 then -- down key sel = sel+1 break end if e1 == 28 then term.setCursorPos(curX,curY) return sel end end end end end function move(ins,rep) if not ins and not rep then return false,"error no move specified" elseif not rep then rep = 1 end for i=1,rep do if ins == "U" then -- up move if turtle.up() then turZ = turZ+1 else return false end end if ins == "D" then -- down move if turtle.down() then turZ = turZ-1 else return false end end if ins == "L" then -- left turn if turtle.turnLeft() then face = face - 1 if face < 1 then face = 4 end end end if ins == "R" then -- right turn if turtle.turnRight() then face = face + 1 if face > 4 then face = 1 end end end if ins == "F" then -- forward move if turtle.forward() then if face == 1 then turY = turY+1 end if face == 2 then turX = turX+1 end if face == 3 then turY = turY-1 end if face == 4 then turX = turX-1 end end end if ins == "B" then -- back move if turtle.back() then if face == 1 then turY = turY-1 end if face == 2 then turX = turX-1 end if face == 3 then turY = turY+1 end if face == 4 then turX = turX+1 end end end end end function run(fFun) if fFun == nil then return false else if tProgs[fFun] ~= nil then routines[#routines+1] = coroutine.create(tProgs[fFun]) routinNames[#routinNames+1] = fFun return true end end return false end local function fExit() while face ~= 1 do move("R") end error() end -- end of functions -- start up sequence rednet.open("right") gpsX,gpsY,gpsZ = gps.locate(1) if gpsX then turX,turY,turZ = gpsX,gpsY,gpsZ else turX,turY,turZ = 0,0,0 end gpsX,gpsY,gpsZ = nil,nil,nil run("manCon") run("location") run("gps") run("menu") -- main loop while true do e,e1,e2,e3,e4,e5 = os.pullEvent() term.clear() term.setCursorPos(1,1) if shutdown then fExit() end if e == "key" and e1 == 199 then if menuStatus then menuStatus = false else menuStatus = true end end i = 1 while true do if i == #routines+1 then break end if coroutine.status(routines[i]) == "deadened" then table.remove(routines,i) table.remove(routinNames,i) else if menuStatus then if routinNames[i] == "menu" then coroutine.resume(routines[i],e,e1,e2,e3,e4,e5) elseif e == "char" or e == "key" then coroutine.resume(routines[i]) else coroutine.resume(routines[i],e,e1,e2,e3,e4,e5) end else coroutine.resume(routines[i],e,e1,e2,e3,e4,e5) end i = i+1 end end end --[[ print("X"..turX.." Y"..turY.." Z"..turZ..compas[face]) move("U") print("X"..turX.." Y"..turY.." Z"..turZ..compas[face]) move("D") print("X"..turX.." Y"..turY.." Z"..turZ..compas[face]) move("F") print("X"..turX.." Y"..turY.." Z"..turZ..compas[face]) move("L") print("X"..turX.." Y"..turY.." Z"..turZ..compas[face]) move("F") print("X"..turX.." Y"..turY.." Z"..turZ..compas[face]) turX,turY,turZ = gps.locate(2) local c1,c2,c3 local tab = {} for i = 1,500 do local special,speical2 = moves[math.random(1,6)],math.random(1,6) write("Ins:"..special.." For:"..speical2.." Res:") move(special,speical2) print("X"..turX.." Y"..turY.." Z"..turZ..compas[face]) c1,c2,c3 = gps.locate(2) print("X"..c1.." Y:"..c2.." Z:"..c3) table.insert(tab,"Ins: "..special.." For: "..speical2.." Res: tur: X:"..turX.." Y:"..turY.." Z:"..turZ.." Face: "..compas[face].." GPS: X:"..c1.." Y:"..c2.." Z:"..c3) end while face ~= 1 do move("R") end print("X"..turX.." Y"..turY.." Z"..turZ..compas[face]) c1,c2,c3 = gps.locate(2) print("X"..c1.." Y:"..c2.." Z:"..c3) table.insert(tab,"LAST".." Res: tur: X:"..turX.." Y:"..turY.." Z:"..turZ.." Face: "..compas[face].." GPS: X:"..c1.." Y:"..c2.." Z:"..c3) print("adding to file") if fs.exists("log") then file = io.open("log","a") else file = io.open("log","w") end file:write("n".."== start of log ==".."n") for i = 1,#tab do file:write(tab[i].."n") end file:close() print("file add compleet") ]]--
File Manager 50% complete
Spoiler
local function dialogBox(mes,yes,no,ok,cancle,mes2) local indexer ={} local sel2 = 1 local sel3 = 1 local with,higth = 26,6 local x13,y13 = term.getSize() local off1 = (x13/2)-(with/2) local off2 = (y13/2)-(higth/2) local barier = string.rep("-",with-2) local blank = string.rep(" ",with-2) term.setCursorPos(off1,off2) write("+"..barier.."+") term.setCursorPos(off1,off2+1) write("|"..blank.."|") term.setCursorPos(off1,off2+2) write("+"..barier.."+") term.setCursorPos(off1,off2+3) write("|"..blank.."|") term.setCursorPos(off1,off2+4) write("|"..blank.."|") term.setCursorPos(off1,off2+5) write("+"..barier.."+") if mes ~= nil then term.setCursorPos(off1+1,off2+1) write(mes) end if mes2 ~= nil then term.setCursorPos(off1+1,off2+3) write(mes2) end if yes == 1 then table.insert(indexer,1) end if no == 1 then table.insert(indexer,2) end if ok == 1 then table.insert(indexer,3) end if cancle == 1 then table.insert(indexer,4) end sel2 = sel3 if sel3 > table.maxn(indexer) then sel3 = table.maxn(indexer) sel2 = indexer[sel3] end if sel3 < 1 then sel3 = 1 sel2 = indexer[1] end sel2 = indexer[1] while true do if yes == 1 then if sel2 == 1 then term.setCursorPos(off1+1,off2+4) write("[YES]") else term.setCursorPos(off1+1,off2+4) write(" YES ") end end if no == 1 then if sel2 == 2 then term.setCursorPos(off1+7,off2+4) write("[NO]") else term.setCursorPos(off1+7,off2+4) write(" NO ") end end if ok == 1 then if sel2 == 3 then term.setCursorPos(off1+12,off2+4) write("[OK]") else term.setCursorPos(off1+12,off2+4) write(" OK ") end end if cancle == 1 then if sel2 == 4 then term.setCursorPos(off1+17,off2+4) write("[CANCLE]") else term.setCursorPos(off1+17,off2+4) write(" CANCLE ") end end e,e1,e2,e3,e4,e5 = os.pullEvent() if e == "key" then if e1 == 203 then -- left sel3 = sel3-1 end if e1 == 205 then -- right sel3 = sel3+1 end if e1 == 28 then -- enter if indexer[sel3] == 1 then return true end if indexer[sel3] == 2 then return false end return indexer[sel3] end end sel2 = sel3 if sel3 > table.maxn(indexer) then sel3 = table.maxn(indexer) sel2 = indexer[sel3] end if sel3 < 1 then sel3 = 1 sel2 = indexer[1] end end end local listSize = 0 local parth = {} local function fileList(mode) local sParth local list = {} local x12,y12 = term.getSize() local sel = 3 local curent local offset = 0 local flot = 0 local fileName local function pointer() -- yes it points lol XD if sel > y12-2 then sel = y12-2 offset = offset+1 end if sel < 3 then sel = 3 offset = offset-1 end if offset < 0 then offset = 0 end term.setCursorPos(1,sel) write(">") end local function top() sParth = [[]] for i = 1,table.maxn(parth) do sParth = sParth..parth[i]..[[]] end list = fs.list(sParth) term.setCursorPos(1,1) write("Dir: "..sParth) local barier = string.rep("-",x12-2) term.setCursorPos(1,2) write(barier) end local function middle() local counter local specal local folder = {} local file = {} local this = nil for i = 1, table.maxn(list) do if fs.isDir(sParth..list[i]) then table.insert(folder,list[i]) else table.insert(file,list[i]) end end table.sort(folder) table.sort(file) table.insert(folder,1,[[]]) if offset > table.maxn(folder)+table.maxn(file)- (y12-5) then offset = table.maxn(folder)+table.maxn(file)- (y12-5) end if offset < 0 then offset = 0 end for i = 1 , y12-4 do if i+offset < table.maxn(folder)+1 then term.setCursorPos(3,i+2) this = folder[i+offset] write("[] "..folder[i+offset]) counter = i else if counter == nil then counter = 0 flot = offset - table.maxn(folder) end if i-counter+flot < table.maxn(file)+1 then term.setCursorPos(3,i+2) this = file[i-counter+flot] write(" "..file[i-counter+flot]) end end if i+2 == sel then curent = this end this = nil end listSize = table.maxn(folder)+table.maxn(file) end local function bottom() local barier = string.rep("-",x12-2) term.setCursorPos(1,y12-1) write(barier) term.setCursorPos(1,y12) write("File Name: "..tostring(fileName)) term.setCursorPos(x12-string.len(tostring(curent))-1,y12) write(tostring(curent)) end local function scroll() scBar = math.floor(((sel-3+offset)/(listSize+2))*(y12-2)) for i = 0,y12-3 do term.setCursorPos(x12-2,i+2) if scBar == i then write("[]") else write("||") end end end while true do term.clear() top() pointer() middle() bottom() scroll() e,e1,e2,e3,e4,e5 = os.pullEvent() if e == "key" then if e1 == 200 then -- up key sel = sel-1 end if e1 == 208 then -- down key sel = sel+1 end if e1 == 15 then -- tab term.setCursorPos(1,y12) term.clearLine() write("File Name: ") term.setCursorPos(12,y12) fileName = io.read() specal = true end if e1 == 29 then -- Ctrl if dialogBox("Message",1,1,0,0,"Exit file select") then return false end end if e1 == 28 or specal then -- enter key if curent == [[]] then table.remove(parth) else if curent ~= nil then if fs.isDir(sParth..curent) then table.insert(parth,curent) end end if mode == "save" then if fs.isDir(sParth..tostring(curent)) or curent == [[]] then else if fileName == nil and curent == nil then dialogBox("Enter a Name",0,0,1,0,"press Tab to add name") else if fs.exists(sParth..tostring(curent)) then if fs.isReadOnly(sParth..tostring(curent)) then dialogBox("Error",0,0,1,0,"File is read only") else if dialogBox("Confirm OVER WRITE",1,1,0,0,"Save as:"..sParth..curent) then return sParth..curent end end else if dialogBox("Confirm",1,1,0,0,"Save as:"..sParth..fileName) then return sParth..fileName end end end end end if mode == "load" then if curent ~= nil then if fs.isDir(sParth..curent) then else if dialogBox("confirm",1,1,0,0,"load :"..sParth..curent) then return sParth..curent else end end else dialogBox("Error",0,0,1,0,"No file selected") end end if mode == "file" then if fs.isDir(sParth..tostring(curent)) or curent == [[]] then else if curent == nil then else if fs.exists(sParth..tostring(curent)) then return sParth..curent end end end end end specal = false end end end end local temp local failed while true do temp = fileList("file") failed = nil if temp == false then term.clear() term.setCursorPos(1,1) return else failed = shell.run(temp) if failed then term.clear() term.setCursorPos(1,1) dialogBox("Program Crashed",0,0,1,0,"unknown cause") end end end
ALL ABOVE SCRIPTS are released to the general public under no license please redistribute then modify them and do what ever you would like to them. YOU do NOT have to credit me for any part or whole script.
If you have a suggestion for a script please leave me a message and i will consider it.