--(( Settings ))--
-- wether or not if the turtle should
-- attack mobs if they are in their way
local killMobs = true
--
local destroyBlocks = false
-- apis to load, file path
-- will be loaded in ascending order, top to bottom
-- will ignore file extension when loading
-- ex: 'dig.lua' can be refered as 'dig'
local apis = {
"dig.lua",
"gps.lua",
"farm.lua",
"item.lua",
}
_G.oldAPISyntax = "_old"
--(( Variables ))--
-- the directory of the program running
local programDir = shell.getRunningProgram() -- get the full path
programDir = programDir:match("^.+/") or "" -- get the folder
-- load apis
--(( Functions ))--
-- table input should be indexed by integers
-- example input: {"john","brad","tony","steve"} ", " ", and "
-- example output: "john, brad, tony, and steve"
local function combine( t,seperator,lastSeperator )
local str = ""
for index,value in ipairs(t) do
if index == 1 then
str = str .. value
elseif index > 1 and index < #t then
str = str .. seperator .. value
elseif index == #t then
str = str .. lastSeperator .. value
end
end
return str
end
local function loadAPIs( t )
local failed = {} -- apis that failed to load
-- loop through all apis
for _,path in ipairs(apis) do
local fullPath = programDir .. path
local fileName = fs.getName(fullPath)-- remove directory
local apiName = fileName
apiName = apiName:match("^.+%.") or apiName.."." -- remove the file extension
apiName = apiName:sub(0,-2) -- remove the dot at the end
-- if its already loaded; unload it first
--if _G[apiName] then
-- os.unloadAPI(apiName)
--end
-- load api, move its global position
local oldvar = _G[fileName]
if os.loadAPI(fullPath) then
-- in case theres an api already loaded
if _G[apiName] ~= nil and _G[apiName.._G.oldAPISyntax]==nil then
_G[apiName.._G.oldAPISyntax] = _G[apiName]
end
_G[apiName] = _G[fileName]
else
table.insert(failed,fullPath)
end
-- in case of overriding, reset
_G[fileName] = oldvar
-- give it functions
if type(_G[apiName]) == "table" then
if type(_G[apiName].init) == "function" then
local state,err = pcall(_G[apiName].init,_G)
if not state then print(apiName..": "..err)table.insert(failed,fullPath) end
end
end
end
if #failed == 1 then
error("Unable to load API "..failed[1].."!",0)
elseif #failed > 1 then
error("Unable to load APIs "..combine(failed,", ",", and ").."!",0)
end
end
function _G.mult( num )
if num > 0 then return 1 end
if num < 0 then return -1 end
return 0
end
--(( Error checking ))--
-- load apis
loadAPIs()
--(( Main program ))--
print("main step 1")
farm.setOffset( 3,4,1 )print("main step 2")
farm.setSize( 7,-5,4 )print("main step 3")
if not gps.autoSetPosition() then error("unable to locate position via gps",0) end print("main step 4")
gps.setHome(245,60,-765,gps.east)print("main step 5")
gps.goto(gps.getHome())
item.addStoragePathCheckpoint(246,60,-765)
item.addStoragePathCheckpoint(244,60,-765)
item.setItemAccess(item.types.dirt,244,60,-766,gps.down)
item.setItemAccess(item.types.sapling,244,60,-765,gps.down)
item.setItemAccess(item.types.dropoff,244,60,-764,gps.down)
--(( EOF ))--
Comments