Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[ opencomputers рыболов by serafim pastebin.com/RPLWqKTZ
- для проекта computercraft.ru update 17.02.21
- пример сборки рыболова:
- https://i.imgur.com/95dDISO.png
- датчик над роботом состоит из 2-х крючков и нитки
- требования:
- инвентарь,контроллер инвентаря, плата красного камня,
- солнечная панель желательно.
- робот берёт удочки из сундука, складывает рыбу в сундук,
- выкидывает пойманый мусор.
- получить названия предметов:
- https://pastebin.com/au9etcfF
- ]]--
- --список мусора
- local trash = {
- "potion", --пузырёк воды
- "flesh", --гнилая плоть
- "waterlily", --кувшинка
- "boots", --ботинки
- "stick", --палка
- "tag", --бирка
- "bowl", --миска
- "bone", --кость
- "saddle", --седло
- "hook", --крюк
- "string" --нить
- }
- local com = require('component')
- local computer = require("computer")
- local event = require("event")
- local gpu = com.gpu
- local w,h = gpu.getResolution()
- local drop_count = 0
- local rod_count = 0
- local throw_a_hook = 0
- local trash_count = 0
- local time_start = computer.uptime()
- if not com.isAvailable("robot") then
- print("только роботы могут использовать эту программу")
- os.exit()
- end
- local r = require("robot")
- if not com.isAvailable("redstone") then
- print("нет платы красного камня")
- os.exit()
- end
- local redstone = com.redstone
- if not com.isAvailable("inventory_controller") then
- print("нет контроллера инвентаря")
- os.exit()
- end
- local i_c = com.inventory_controller
- --стоп
- local function stop(message)
- gpu.fill(1,1,w,h," ")
- gpu.set(1,1,"!!! СТОП !!!")
- gpu.set(1,3,message)
- gpu.set(1,5,"для продолжения нажмите любую кнопку")
- while true do
- r.setLightColor(0xFFFFFF)
- computer.beep(1000,1)
- r.setLightColor(0xFF0000)
- if event.pull(10,"key_down") then
- computer.beep(500, 0.1)
- r.setLightColor(0xFFFFFF)
- gpu.fill(1,1,w,h," ")
- gpu.set(1,1,"продолжаю ловить...")
- os.sleep(1)
- break
- end
- end
- end
- --ищим в сундуке удочку
- local function find_rod()
- local inv = i_c.getInventorySize(0)
- if inv then
- for slot = 1,inv do
- local item = i_c.getStackInSlot(0,slot)
- if item and string.find(item.name,"rod") then
- return slot
- end
- end
- else
- stop("нет сундука")
- end
- return false
- end
- --принтим сообщения
- local function print_msg(message)
- gpu.fill(1,1,w,1," ")
- gpu.set(1,1,message)
- gpu.set(1,3,"всего поймал : "..drop_count)
- gpu.set(1,4,"выкинул мусора : "..trash_count)
- gpu.set(1,5,"забросов крючка : "..throw_a_hook)
- gpu.set(1,6,"удочек использовал : "..rod_count)
- gpu.set(1,7,"прошло времени : "..os.date("%H:%M",computer.uptime()-time_start))
- end
- --ловим рыбу или хлам
- local function fishing()
- if r.durability() == nil then
- print_msg("ищу запасную удочку в сундуке")
- os.sleep(1)
- r.dropDown()
- local slot = find_rod()
- if slot then
- i_c.suckFromSlot(0,slot)
- i_c.equip()
- rod_count = rod_count + 1
- print_msg("взял удочку из сундука")
- r.setLightColor(0xFFFFFF)
- os.sleep(1)
- else
- print_msg("в сундуке нет удочки :(")
- r.setLightColor(0xFFFFFF)
- computer.beep(1000,1)
- r.setLightColor(0xFF0000)
- os.sleep(10)
- end
- else
- print_msg("забрасываю крючок...")
- local tru = 0
- while redstone.getInput(1) == 0 do
- r.use(0, 1)
- tru = tru + 1
- throw_a_hook = throw_a_hook + 1
- gpu.set(1,5,"забросов крючка : "..throw_a_hook)
- os.sleep(2)
- if r.durability() == nil then
- return
- elseif tru >= 20 then
- tru = 0
- i_c.equip()
- local item = i_c.getStackInInternalSlot(1)
- i_c.equip()
- if item and string.find(item.name,"rod") then
- stop("нет сигнала от датчика")
- else
- stop("у меня вместо удочки ( "..item.name:gsub('%g+:','').." )")
- end
- return
- end
- end
- r.setLightColor(0xFFFFFF)
- print_msg("ловись рыбка большая и маленькая...")
- event.pull(60,'redstone_changed')
- r.use(0, true, 1)
- r.setLightColor(0x00FF00)
- print_msg("чтото клюнуло :)")
- os.sleep(1)
- r.setLightColor(0xFFFFFF)
- local item = i_c.getStackInInternalSlot(1)
- for j, name in pairs(trash) do
- if item and string.find(item.name,name) then
- trash_count = trash_count + 1
- print_msg("поймал мусор, выкидываю")
- r.drop()
- break
- end
- if j == #trash then
- if r.count(1) > 0 then
- drop_count = drop_count + math.ceil(r.count(1))
- print_msg("поймал ( "..item.name:gsub('%g+:','').." )")
- if not r.dropDown() then
- stop("в сундуке нет места")
- end
- else
- print_msg("ни чего не поймал :(")
- end
- end
- end
- os.sleep(1)
- end
- end
- gpu.fill(1,1,w,h," ")
- r.select(1)
- if r.durability() then
- rod_count = 1
- end
- while true do
- fishing()
- end
Add Comment
Please, Sign In to add comment