View difference between Paste ID: br7W6U2q and kTiH5c7c
SHOW: | | - or go back to the newest paste.
1
--[[
2
SeedBreeder
3
This is a AgriCraft seed breeder program for ComputerCraft/OpenComputers. Check Wiki for more information.
4
Wiki: github.com/robokop92/SeedBreeder/wiki
5
note to anyone finding br7W6U2q cloned from he original, as of 7-21-21 the wiki is unavailable.  If I can make this work, I'll update this post at the bottom with a basic write up for usage.
6
MADE BY: robokop92
7
This is the OPENCOMPUTERS Version
8
--]]
9
component = require("component")
10
shell = require("shell")
11
side = require("sides")
12
t = require("term")
13
c = require("computer")
14
r = require("robot")
15
ser = require("serialization")
16
fs = require("filesystem")
17
inv = component.inventory_controller
18
gen = component.generator
19
20
version = "1.0.0"
21
22
----------------------------------------------------
23
------------------SOME VARIABLES--------------------
24
----------------------------------------------------
25
26
numOfSubGenerations = 40
27
sleepAmountBetweenGenerations = 10 
28
sleepAmountWhenWachingSeeds = 5
29
30
31
local args, opt= shell.parse(...)
32
if args[1] ~= nil then
33
  numOfSubGenerations = args[1]*4
34
end
35
if args[2] ~= nil then
36
  sleepAmountBetweenGenerations = args[2]
37
end
38
if args[3] ~= nil then
39
  sleepAmountWhenWachingSeeds = args[3]
40
end
41
42
startpos = {x = 0, y = -1, z = 2}
43
pos = {x = 0, y = -1, z = 2}
44
fl = {pos = {}}
45
fl.pos[0] = {x = 0, y = 0, z = 1}
46
fl.pos[1] = {x = -1, y = 0, z = 0}
47
fl.pos[2] = {x = 0, y = 0, z = -1}
48
fl.pos[3] = {x = 1, y = 0, z = 0}
49
fl.pos[4] = {x = 0, y = 0, z = 0}
50
fl.pos[5] = {x = 0, y = 1, z = 0}
51
52
cpos = {}
53
cpos.anlzer = {x = -1, y = 0, z = 1}
54
cpos.bin = {x = -1, y = 0, z = -1}
55
cpos.chest = {x = 1, y = 0, z = -1}
56
57
slot = {sticks = {}, fuel = 1, rake = 4, seeds = 5, seedsExtra = 6}
58
slot.sticks[1] = 2
59
slot.sticks[2] = 3
60
61
----------------------------------------------------
62
-----------------LANG VARIABLES---------------------
63
----------------------------------------------------
64
lang_noFuel = "Please insert a valid fuel in slot "..slot.fuel.."!"
65
lang_noSticks = "Please insert Crop Sticks in slot "..slot.sticks[1].." or "..slot.sticks[2].."!"
66
lang_noRake = "Please insert a Hand Rake in slot "..slot.rake.."!"
67
lang_noSeed = "Please insert ONLY 1 valid seeds in slot "..slot.seeds.."!"
68
lang_timeBtwGen = "Waiting time between generations: "
69
lang_curGen = "Current generation: "
70
lang_line = "---------------------------------------"
71
----------------------------------------------------
72
----------------ERROR MESSAGES----------------------
73
----------------------------------------------------
74
function noFuel()
75
	while not gen.insert(1) do
76
		t.clear()
77
		t.setCursor(1,1)
78
		t.write(lang_noFuel)
79
		os.sleep(1)
80
	end
81
	t.clear()
82
	return true
83
end
84
function noSticks()
85
	while not tidySticks() do
86
		t.clear()
87
		t.setCursor(1,1)
88
		t.write(lang_noSticks)
89
		os.sleep(1)
90
	end
91
	t.clear()
92
	return true
93
end
94
function noRake()
95
	while not compareItemInSlot("AgriCraft:handRake",slot.rake) do
96
		t.clear()
97
		t.setCursor(1,1)
98
		t.write(lang_noRake)
99
		os.sleep(1)
100
	end
101
	t.clear()
102
	return true
103
end
104
function noSeeds()
105
	while not checkCount(slot.seeds,1) do
106
		t.clear()
107
		t.setCursor(1,1)
108
		t.write(lang_noSeed)
109
		os.sleep(1)
110
	end
111
	if seeds() >= 1 then
112
		t.clear()
113
		return true
114
	else
115
		noSeeds()
116
	end
117
end
118
----------------------------------------------------
119
--------------INVENTORY CONTROLLLER-----------------
120
----------------------------------------------------
121
function compareItemInSlot(item,slot) -- Compares $item with the item in $slot
122
    itemInfo = inv.getStackInInternalSlot(slot)
123
	if itemInfo ~= nil then --If $slot has item
124
		--print("Comparing: "..item.." AND: "..itemInfo.name)
125
		if item == itemInfo.name then -- If $item matches item name in $slot
126
			return true
127
		end
128
	end
129
	return false
130
end
131
function checkCount(slot,count)
132
	itemInfo = inv.getStackInInternalSlot(slot)
133
	if itemInfo ~= nil and itemInfo.size >= count then
134
		return true
135
	end
136
	return false
137
end
138
function count(slot)
139
	itemInfo = inv.getStackInInternalSlot(slot)
140
	if itemInfo ~= nil then 
141
		return itemInfo.size 
142
	end
143
	return 0 
144
end
145
function transferItem(fromSlot,toSlot)
146
	lastSl = r.select(fromSlot)
147
	r.transferTo(toSlot,64)
148
	r.select(lastSl)
149
end
150
151
function isEquipEmpty()
152
  lastSl = r.select(slot.seeds)
153
  inv.equip()
154
  if checkCount(slot.seeds,1) then
155
    return false
156
  end
157
  return true
158
end
159
160
----------------------------------------------------
161
----------------BASIC ROBOT COMMANDS----------------
162
----------------------------------------------------
163
164
function putInAnlzer()
165
	lastSl = r.select(slot.seeds)
166
	succes = r.dropDown()
167
	r.select(lastSl)
168
	return succes
169
end
170
171
function takeFromAnlzer()
172
	lastSl = r.select(slot.seeds)
173
	succes = inv.suckFromSlot(side.bottom,1)
174
	r.select(lastSl)
175
	return succes
176
end
177
function analyze()
178
	move(cpos.anlzer)
179
	print("Analyzing")
180
	if putInAnlzer() then
181
		os.sleep(1.7)
182
		return takeFromAnlzer()
183
	end
184
	return false
185
end