SHOW:
|
|
- or go back to the newest paste.
1 | local settings={} | |
2 | settings["debug"]=false | |
3 | settings["reserveFuelLevel"]=10 | |
4 | settings["nextStep"]=nil | |
5 | settings["rightNext"]=false | |
6 | settings["leftNext"]=false | |
7 | ||
8 | ||
9 | --CONSTANTS | |
10 | local cNone=0 | |
11 | local cLeft=1 | |
12 | local cYes=2 | |
13 | local cNo=3 | |
14 | local cPowerDown=4 | |
15 | local cPowerUp=5 | |
16 | local cForward=6 | |
17 | local cReadyCharge=7 | |
18 | local cComplete=8 | |
19 | local cGoHome=9 | |
20 | local cRight=10 | |
21 | local cReboot=11 | |
22 | local cShutdown=12 | |
23 | local cClearSettings=13 | |
24 | local cNeedFuel=14 | |
25 | local cPairing=15 | |
26 | ||
27 | function loadSettings() | |
28 | local file = fs.open("SnapBoxSettings","r") | |
29 | local data = file.readAll() | |
30 | file.close() | |
31 | settings=textutils.unserialize(data) | |
32 | end | |
33 | ||
34 | function saveSettings() | |
35 | local file = fs.open("SnapBoxSettings","w") | |
36 | file.write(textutils.serialize(settings)) | |
37 | file.close() | |
38 | end | |
39 | ||
40 | function needFuel() | |
41 | local level=turtle.getFuelLevel() | |
42 | if level=="unlimited" or level>settings["reserveFuelLevel"] then | |
43 | sendMessageToPartner(cNo) | |
44 | else | |
45 | sendMessageToPartner(cYes) | |
46 | end | |
47 | end | |
48 | ||
49 | function checkStatus() | |
50 | if turtle.getItemCount(1)>0 then | |
51 | print("Energy Cell OK") | |
52 | else | |
53 | print("Please insert Locked Energy Tesseract or Redstone Energy Cell into slot 1") | |
54 | while turtle.getItemCount(1)==0 do | |
55 | turtle.select(1) | |
56 | sleep(0.1) | |
57 | end | |
58 | end | |
59 | if turtle.getFuelLevel()~="unlimited" and turtle.getFuelLevel()<settings["reserveFuelLevel"] then | |
60 | if turtle.getItemCount(16)>0 then | |
61 | print("Fuel Level OK") | |
62 | else | |
63 | turtle.select(16) | |
64 | print("Please insert fuel into slot 16") | |
65 | while turtle.getItemCount(16)==0 do | |
66 | sleep(0.1) | |
67 | end | |
68 | end | |
69 | end | |
70 | end | |
71 | ||
72 | function waitForPartner() | |
73 | print("Waiting for Box") | |
74 | sendMessageToPartner(cPairing) | |
75 | local message=nil | |
76 | while message~=cPairing do | |
77 | event = os.pullEvent("redstone") | |
78 | message=redstone.getAnalogInput("front") | |
79 | end | |
80 | sendMessageToPartner(cPairing) | |
81 | print("Off we go") | |
82 | end | |
83 | ||
84 | function sendMessageToPartner(message) | |
85 | if debug==true then | |
86 | print("Sent "..message) | |
87 | end | |
88 | redstone.setAnalogOutput("front",message) | |
89 | sleep(0.1) | |
90 | redstone.setAnalogOutput("front",cNone) | |
91 | end | |
92 | ||
93 | function forward() | |
94 | sendMessageToPartner(cForward) | |
95 | while turtle.forward()==false do | |
96 | sleep(0.1) | |
97 | end | |
98 | if settings["rightNext"]==true then | |
99 | turtle.turnRight() | |
100 | settings["rightNext"]=false | |
101 | end | |
102 | if settings["leftNext"]==true then | |
103 | turtle.turnLeft() | |
104 | settings["leftNext"]=false | |
105 | end | |
106 | saveSettings() | |
107 | end | |
108 | ||
109 | function readyCharge() | |
110 | sendMessageToPartner(cReadyCharge) | |
111 | while turtle.back()==false do | |
112 | sleep(0.1) | |
113 | end | |
114 | settings["nextStep"]="wait-forward" | |
115 | saveSettings() | |
116 | waitForward() | |
117 | end | |
118 | ||
119 | function waitForward() | |
120 | sleep(2) | |
121 | while turtle.detect()==true do | |
122 | sleep(0.1) | |
123 | end | |
124 | sleep(2) | |
125 | while turtle.forward()==false do | |
126 | sleep(0.1) | |
127 | end | |
128 | settings["nextStep"]=nil | |
129 | saveSettings() | |
130 | sendMessageToPartner(cComplete) | |
131 | end | |
132 | ||
133 | function powerUp() | |
134 | turtle.select(1) | |
135 | turtle.digDown() | |
136 | sendMessageToPartner(cPowerUp) | |
137 | end | |
138 | ||
139 | function powerDown() | |
140 | turtle.select(1) | |
141 | while turtle.placeDown()==false and turtle.getItemCount(1)>0 do | |
142 | sleep(0.1) | |
143 | end | |
144 | sendMessageToPartner(cPowerDown) | |
145 | end | |
146 | ||
147 | function waitForMessageFromPartner() | |
148 | if settings["debug"]==true then | |
149 | print("Waiting for message") | |
150 | end | |
151 | os.pullEvent("redstone") | |
152 | ||
153 | --check to see if Box has turned and moved - only works on left turns :( | |
154 | local msg=redstone.getAnalogInput("front") | |
155 | ||
156 | if msg==cPowerDown then | |
157 | powerDown() | |
158 | elseif msg==cPowerUp then | |
159 | powerUp() | |
160 | elseif msg==cRight then | |
161 | settings["rightNext"]=true | |
162 | saveSettings() | |
163 | sendMessageToPartner(cRight) | |
164 | elseif msg==cLeft then | |
165 | settings["leftNext"]=true | |
166 | saveSettings() | |
167 | sendMessageToPartner(cLeft) | |
168 | elseif msg==cForward then | |
169 | forward() | |
170 | elseif msg==cClearSettings then | |
171 | shell.run("clearsettings") | |
172 | elseif msg==cShutdown then | |
173 | os.shutdown() | |
174 | elseif msg==cReboot then | |
175 | os.reboot() | |
176 | elseif msg==cNeedFuel then | |
177 | needFuel() | |
178 | elseif msg==cReadyCharge then | |
179 | readyCharge() | |
180 | end | |
181 | end | |
182 | ||
183 | function checkResume() | |
184 | local file=fs.open("SnapBoxSettings","r") | |
185 | if file==nil then | |
186 | return false | |
187 | else | |
188 | file.close() | |
189 | return true | |
190 | end | |
191 | end | |
192 | ||
193 | ||
194 | -----MAIN PROGRAM | |
195 | --Hack to fix situations where Snap gets left behind | |
196 | turtle.forward() | |
197 | ||
198 | term.clear() | |
199 | term.setCursorPos(1,1) | |
200 | ||
201 | --Check for a resume | |
202 | if checkResume()==false then | |
203 | --Check to make sure it has all the items it needs | |
204 | checkStatus() | |
205 | ||
206 | --initial refuel | |
207 | turtle.select(16) | |
208 | turtle.refuel() | |
209 | turtle.select(1) | |
210 | ||
211 | --wait to find partner | |
212 | waitForPartner() | |
213 | saveSettings() | |
214 | else | |
215 | print("Resuming") | |
216 | loadSettings() | |
217 | end | |
218 | ||
219 | while true do | |
220 | if settings["nextStep"]=="wait-forward" then | |
221 | waitForward() | |
222 | end | |
223 | waitForMessageFromPartner() | |
224 | end |