serafim7

робот рыболов [OpenComputers]

Aug 17th, 2016 (edited)
1,762
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.77 KB | None
  1. --[[ opencomputers рыболов by serafim  pastebin.com/RPLWqKTZ
  2.      для проекта   computercraft.ru          update 17.02.21
  3.  
  4. пример сборки рыболова:
  5. https://i.imgur.com/95dDISO.png
  6. датчик над роботом состоит из 2-х крючков и нитки
  7.  
  8. требования:
  9. инвентарь,контроллер инвентаря, плата красного камня,
  10. солнечная панель желательно.
  11.  
  12. робот берёт удочки из сундука, складывает рыбу в сундук,
  13. выкидывает пойманый мусор.
  14.  
  15. получить названия предметов:
  16. https://pastebin.com/au9etcfF
  17. ]]--
  18.  
  19. --список мусора
  20. local trash = {
  21.   "potion",    --пузырёк воды
  22.   "flesh",     --гнилая плоть
  23.   "waterlily", --кувшинка
  24.   "boots",     --ботинки
  25.   "stick",     --палка
  26.   "tag",       --бирка
  27.   "bowl",      --миска
  28.   "bone",      --кость
  29.   "saddle",    --седло
  30.   "hook",      --крюк
  31.   "string"     --нить
  32. }
  33.  
  34. local com = require('component')
  35. local computer = require("computer")
  36. local event = require("event")
  37. local gpu = com.gpu
  38. local w,h = gpu.getResolution()
  39.  
  40. local drop_count = 0
  41. local rod_count = 0
  42. local throw_a_hook = 0
  43. local trash_count = 0
  44. local time_start = computer.uptime()
  45.  
  46. if not com.isAvailable("robot") then
  47.   print("только роботы могут использовать эту программу")
  48.   os.exit()
  49. end
  50. local r = require("robot")
  51.  
  52. if not com.isAvailable("redstone") then
  53.   print("нет платы красного камня")
  54.   os.exit()
  55. end
  56. local redstone = com.redstone
  57.  
  58. if not com.isAvailable("inventory_controller") then
  59.   print("нет контроллера инвентаря")
  60.   os.exit()
  61. end
  62. local i_c = com.inventory_controller
  63.  
  64. --стоп
  65. local function stop(message)
  66.   gpu.fill(1,1,w,h," ")
  67.   gpu.set(1,1,"!!! СТОП !!!")
  68.   gpu.set(1,3,message)
  69.   gpu.set(1,5,"для продолжения нажмите любую кнопку")
  70.   while true do
  71.     r.setLightColor(0xFFFFFF)
  72.     computer.beep(1000,1)
  73.     r.setLightColor(0xFF0000)
  74.     if event.pull(10,"key_down") then
  75.       computer.beep(500, 0.1)
  76.       r.setLightColor(0xFFFFFF)
  77.       gpu.fill(1,1,w,h," ")
  78.       gpu.set(1,1,"продолжаю ловить...")
  79.       os.sleep(1)
  80.       break
  81.     end
  82.   end
  83. end
  84.  
  85. --ищим в сундуке удочку
  86. local function find_rod()
  87.   local inv = i_c.getInventorySize(0)
  88.   if inv then
  89.     for slot = 1,inv do
  90.       local item = i_c.getStackInSlot(0,slot)
  91.       if item and string.find(item.name,"rod") then
  92.         return slot
  93.       end
  94.     end
  95.   else
  96.     stop("нет сундука")
  97.   end
  98.   return false
  99. end
  100.  
  101. --принтим сообщения
  102. local function print_msg(message)
  103.   gpu.fill(1,1,w,1," ")
  104.   gpu.set(1,1,message)
  105.   gpu.set(1,3,"всего поймал       : "..drop_count)
  106.   gpu.set(1,4,"выкинул мусора     : "..trash_count)
  107.   gpu.set(1,5,"забросов крючка    : "..throw_a_hook)
  108.   gpu.set(1,6,"удочек использовал : "..rod_count)
  109.   gpu.set(1,7,"прошло времени     : "..os.date("%H:%M",computer.uptime()-time_start))
  110. end
  111.  
  112. --ловим рыбу или хлам
  113. local function fishing()
  114.   if r.durability() == nil then
  115.     print_msg("ищу запасную удочку в сундуке")
  116.     os.sleep(1)
  117.     r.dropDown()
  118.     local slot = find_rod()
  119.     if slot then
  120.       i_c.suckFromSlot(0,slot)
  121.       i_c.equip()
  122.       rod_count = rod_count + 1
  123.       print_msg("взял удочку из сундука")
  124.       r.setLightColor(0xFFFFFF)
  125.       os.sleep(1)
  126.     else
  127.       print_msg("в сундуке нет удочки :(")
  128.       r.setLightColor(0xFFFFFF)
  129.       computer.beep(1000,1)
  130.       r.setLightColor(0xFF0000)
  131.       os.sleep(10)
  132.     end
  133.   else
  134.     print_msg("забрасываю крючок...")
  135.     local tru = 0
  136.     while redstone.getInput(1) == 0 do
  137.       r.use(0, 1)
  138.       tru = tru + 1
  139.       throw_a_hook = throw_a_hook + 1
  140.       gpu.set(1,5,"забросов крючка    : "..throw_a_hook)
  141.       os.sleep(2)
  142.       if r.durability() == nil then
  143.         return
  144.       elseif tru >= 20 then
  145.         tru = 0
  146.         i_c.equip()
  147.         local item = i_c.getStackInInternalSlot(1)
  148.         i_c.equip()
  149.         if item and string.find(item.name,"rod") then
  150.           stop("нет сигнала от датчика")
  151.         else
  152.           stop("у меня вместо удочки ( "..item.name:gsub('%g+:','').." )")
  153.         end
  154.         return
  155.       end
  156.     end
  157.     r.setLightColor(0xFFFFFF)
  158.     print_msg("ловись рыбка большая и маленькая...")
  159.     event.pull(60,'redstone_changed')
  160.     r.use(0, true, 1)
  161.     r.setLightColor(0x00FF00)
  162.     print_msg("чтото клюнуло :)")
  163.     os.sleep(1)
  164.     r.setLightColor(0xFFFFFF)
  165.     local item = i_c.getStackInInternalSlot(1)
  166.     for j, name in pairs(trash) do
  167.       if item and string.find(item.name,name) then
  168.         trash_count = trash_count + 1
  169.         print_msg("поймал мусор, выкидываю")
  170.         r.drop()
  171.         break
  172.       end
  173.       if j == #trash then
  174.         if r.count(1) > 0 then
  175.           drop_count = drop_count + math.ceil(r.count(1))
  176.           print_msg("поймал ( "..item.name:gsub('%g+:','').." )")
  177.           if not r.dropDown() then
  178.             stop("в сундуке нет места")
  179.           end
  180.         else
  181.           print_msg("ни чего не поймал :(")
  182.         end
  183.       end
  184.     end
  185.     os.sleep(1)
  186.   end
  187. end
  188.  
  189. gpu.fill(1,1,w,h," ")
  190. r.select(1)
  191. if r.durability() then
  192.   rod_count = 1
  193. end
  194. while true do
  195.   fishing()
  196. end
RAW Paste Data Copied