Advertisement
Inksaver

MobSoftenerInstaller

Jun 25th, 2023 (edited)
917
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.78 KB | Source Code | 0 0
  1. version = 20230430.1439
  2. --[[
  3.     https://pastebin.com/n8tSE5Nb
  4.     Last edited: see version YYYYMMDD.HHMM
  5.     use 'pastebin run n8tSE5Nb' in computer terminal
  6.     This will load startup.lua and setup.lua
  7.     for use in Computercraft / ccTweaked computers when
  8.     used under a dungeon mob spawner for skeletons or zombies
  9.     1 computer + 2 sticky pistons OR
  10.     2 computers, 4 regular pistons and 6 network cable
  11.     The 2 computers work together to move blocks (slabs)
  12.     from side to side and dispense lava
  13. ]]
  14. function clear()
  15.     term.clear()
  16.     term.setCursorPos(1, 1)
  17. end
  18.  
  19. function checkLabel()
  20.     if os.getComputerLabel() == nil then
  21.         local noname = true
  22.         while noname do
  23.             clear()
  24.             print("Type a name for this computer (no spaces):_")
  25.             name = read()
  26.             if name == '' then
  27.                 print("Just pressing Enter does no work")
  28.             elseif string.find(name, ' ') ~= nil then
  29.                 print("NO SPACES!")
  30.             else
  31.                 noname = false
  32.             end
  33.             if noname then
  34.                 sleep(2)
  35.             end
  36.         end
  37.        
  38.         os.setComputerLabel(name)
  39.         print("Computer label set to "..os.getComputerLabel())
  40.     end
  41. end
  42.  
  43. function checkLibs(libDir, filename)
  44.     local fileExists = false
  45.     if libDir == '' then
  46.         if fs.exists(filename) or fs.exists(filename..".lua") then
  47.             fileExists = true
  48.         end
  49.     else
  50.         if fs.exists(libDir) then
  51.             if not fs.isDir(libDir) then
  52.                 fs.move(libDir, libDir.."Renamed")
  53.                 fs.makeDir(libDir)
  54.             end
  55.         else
  56.             fs.makeDir(libDir)
  57.         end
  58.         if fs.exists(fs.combine(libDir, filename)) or fs.exists(fs.combine(libDir, filename..".lua")) then
  59.             fileExists = true
  60.         end
  61.     end
  62.     return fileExists
  63. end
  64.  
  65. function checkFileExists(filename, isLib)
  66.     -- check in root or lib/ only (existing files)
  67.     local fileExists = false
  68.     if isLib then
  69.         if fs.exists(fs.combine("lib", filename)) or fs.exists(fs.combine("lib", filename..".lua")) then
  70.             fileExists = true
  71.         end
  72.     else
  73.         if fs.exists(filename) or fs.exists(filename..".lua") then
  74.             fileExists = true
  75.         end
  76.     end
  77.     return fileExists
  78. end
  79.  
  80. function createTempDir(tempDir)
  81.     if fs.exists(tempDir) then
  82.         if not fs.exists(fs.combine(tempDir, "lib")) then
  83.             fs.makeDir(fs.combine(tempDir, "lib"))
  84.         end
  85.     else
  86.         fs.makeDir(tempDir)
  87.         fs.makeDir(fs.combine(tempDir, "lib"))
  88.     end
  89. end
  90.  
  91. function createLibDir(libDir)
  92.     if fs.exists(libDir) then
  93.         if not fs.isDir(libDir) then --file called lib (unlikely...)
  94.             fs.move(libDir, libDir.."Renamed") --lib -> libRenamed
  95.             fs.makeDir(libDir)
  96.         end
  97.     else
  98.         fs.makeDir(libDir)
  99.     end
  100. end
  101.  
  102. function getFile(files, isLib, fileName, saveAs, tmpDir, tmpLibDir)
  103.     -- use pastebin get to download file (to libs folder if isLib)
  104.     if saveAs == "" then
  105.         saveAs = fileName -- use given filename if alternative not supplied
  106.     end
  107.     local saveDir = tmpDir
  108.     if isLib then
  109.         saveDir = tmpLibDir
  110.     end
  111.     success = true
  112.     print("Downloading from Pastebin...")
  113.     if shell.run("pastebin", "get", files[fileName], fs.combine(saveDir, saveAs..".lua")) then
  114.         print(saveAs..".lua copied to "..saveDir)
  115.     else
  116.         print("failed to copy "..saveAs..".lua from Pastebin")
  117.         success = false
  118.     end
  119.    
  120.     return success
  121. end
  122.  
  123. function moveFile(isLib, tmpDir, tmpLibDir, fileName) -- movgee tmp copy to /lib/
  124.     local saveDir = tmpDir
  125.     if isLib then
  126.         saveDir = tmpLibDir
  127.         fs.delete(fs.combine("lib", fileName))
  128.         fs.move(fs.combine(saveDir, fileName), fs.combine("lib", fileName)) -- move to lib/
  129.         print(fileName.." updated")
  130.     else
  131.         fs.delete(fileName)
  132.         fs.move(fs.combine(saveDir, fileName), fs.combine("./", fileName)) --move to root
  133.         print("/lib/"..fileName.." updated")
  134.     end
  135. end
  136.  
  137. function getVersion(line)
  138.     -- version = 20201223.1104
  139.     line = string.gsub(line, " ", "") -- remove spaces
  140.     local start = string.find(line, "=")
  141.     local version = 0
  142.     if start ~= nil then -- found
  143.         local dateString = string.sub(line, start + 1)
  144.         version = tonumber(dateString)
  145.     end
  146.     return version
  147. end
  148.  
  149. function isNewer(isLib, tmpDir, tmpLibDir, fileName)
  150.     -- open files to read file versions
  151.     local old = ""
  152.     local saveDir = tmpDir
  153.     local checkDir = ""
  154.     local move = false
  155.     if isLib then
  156.         if checkFileExists(fileName, true) then
  157.             old = fs.open(fs.combine("lib", fileName), "r")
  158.             saveDir = tmpLibDir
  159.             checkDir = "lib"
  160.         else
  161.             move = true
  162.         end
  163.     else
  164.         if checkFileExists(fileName, false) then
  165.             old = fs.open(fileName, "r")
  166.         else
  167.             move = true
  168.         end
  169.     end
  170.     if not move then -- previous version of file exists
  171.         if fs.exists(fs.combine(saveDir, fileName)) then
  172.             local new = fs.open(fs.combine(saveDir, fileName), "r")
  173.             local oldVer = getVersion(old.readLine())
  174.             local newVer = getVersion(new.readLine())
  175.             if oldVer ~= nil and newVer ~= nil then
  176.                 if newVer > oldVer then
  177.                     move = true
  178.                 end
  179.             elseif oldVer == nil and newVer ~= nil then
  180.                 move = true
  181.             end
  182.             new.close()
  183.             old.close()
  184.         end
  185.     end
  186.    
  187.     return move
  188. end
  189.  
  190. function main()
  191.     local doContinue = true
  192.     local tmpDir = "tmp"
  193.     local tmpLibDir = fs.combine(tmpDir, "lib")
  194.     local libDir = "lib"
  195.     checkLabel() -- make sure turtle label is set
  196.     createTempDir(tmpDir) -- create /tmp/ and /tmp/lib/
  197.     createLibDir(libDir) -- check/create lib dir
  198.     local libFiles = {}
  199.     libFiles['menu'] = "BhjbYsw4"
  200.  
  201.     local files = {}
  202.     files['setup'] = "AbYQMD5H"
  203.     files['startup'] = "jytw4EBv"
  204.  
  205.     -- download into tmp folder
  206.     for k,v in pairs(libFiles) do -- download from pastebin to tmp/lib/
  207.         clear()
  208.         --getFile(files, isLib, filename, saveAs, tmpDir, libDir) files is table of files with text index, isLib = library content, saveAs = filename
  209.         getFile(libFiles, true, k, "", tmpDir, tmpLibDir) -- download file to /tmp/lib
  210.         sleep(2)
  211.     end
  212.     for k,v in pairs(files) do -- download from pastebin to tmp/
  213.         clear()
  214.         getFile(files, false, k, "", tmpDir, tmpLibDir)
  215.         sleep(2)
  216.     end
  217.     -- check if tmp/lib/file exists in root
  218.     local updated = 0
  219.     for k,v in pairs(libFiles) do
  220.         clear()
  221.         local fileName = k..".lua"
  222.         print("Checking: "..fileName)
  223.         if isNewer(true, tmpDir, tmpLibDir, fileName) then
  224.             moveFile(true, tmpDir, tmpLibDir, fileName) -- move tmp copy to /lib/#
  225.             updated = updated  + 1
  226.         else
  227.             print(fileName.." is newer or unchanged")
  228.             fs.delete(fs.combine(tmpLibDir, fileName))
  229.         end
  230.         sleep(2)
  231.     end
  232.     for k,v in pairs(files) do
  233.         clear()
  234.         local fileName = k..".lua"
  235.         print("Checking: "..fileName)
  236.         if isNewer(false, tmpDir, tmpLibDir, fileName) then
  237.             moveFile(false, tmpDir, tmpLibDir, fileName) -- move tmp copy to /lib/
  238.             updated = updated  + 1
  239.         else
  240.             print(fileName.." is newer or unchanged")
  241.             fs.delete(fs.combine(tmpDir, fileName))
  242.         end
  243.     end
  244.     print("Removing temporary files")
  245.     local status, retval = pcall(fs.delete, tmpLibDir)
  246.     if not status then
  247.         print(retval)
  248.     end
  249.     status, retval = pcall(fs.delete, tmpDir)
  250.     if not status then
  251.         print(retval)
  252.     end
  253.     print("\nOperation Complete "..updated.." files updated")
  254.    
  255. end
  256.  
  257. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement