SHOW:
|
|
- or go back to the newest paste.
| 1 | - | local targetChannel = 666 |
| 1 | + | local targetChannel = 1 |
| 2 | ||
| 3 | ||
| 4 | - | if fs.exists("event")==false then shell.run("pastebin get UKPy4iiE event") end
|
| 4 | + | if fs.exists("event")==false then shell.run("pastebin get CGn8AsPe event") end
|
| 5 | if os.loadAPI("event") == false then error("Failed to load event API") end
| |
| 6 | ||
| 7 | - | if fs.exists("utils") == false then shell.run("pastebin get dyvydHtK utils") end
|
| 7 | + | if fs.exists("utils") == false then shell.run("pastebin get a5HpUVYL utils") end
|
| 8 | if os.loadAPI("utils") == false then error("Failed to load utils API") end
| |
| 9 | ||
| 10 | - | if fs.exists("data") == false then shell.run("pastebin get LnvzL7ur data") end
|
| 10 | + | if fs.exists("data") == false then shell.run("pastebin get zn5jECxd data") end
|
| 11 | if os.loadAPI("data") == false then error("Failed to load data API") end
| |
| 12 | ||
| 13 | - | if fs.exists("button") == false then shell.run("pastebin get UmerzDUF button") end
|
| 13 | + | if fs.exists("button") == false then shell.run("pastebin get 72Q728Jt button") end
|
| 14 | if os.loadAPI("button") == false then error("Failed to load button API") end
| |
| 15 | ||
| 16 | ||
| 17 | button.setMonitor(term) | |
| 18 | --button.setTextColor(colors.green) | |
| 19 | ||
| 20 | if data.get("channel","channel") == nil then
| |
| 21 | io.write("Channel number: ")
| |
| 22 | data.set("channel",read(),"channel")
| |
| 23 | end | |
| 24 | local localChannel = tonumber(data.get("channel","channel"))
| |
| 25 | ||
| 26 | local previous = os.clock() | |
| 27 | local modem = peripheral.wrap("back")
| |
| 28 | local ping | |
| 29 | local itemlist = {}
| |
| 30 | local recipes = {}
| |
| 31 | local cachedItems = {}
| |
| 32 | local cachedRecipes = {}
| |
| 33 | local searchScroll = 0 | |
| 34 | local searchQuery = "" | |
| 35 | local requestCount = "" | |
| 36 | local requestItemString = "" | |
| 37 | local requestCountString = "" | |
| 38 | local craftRecipeString = "" | |
| 39 | local recipeSearchString = "" | |
| 40 | local itemCount | |
| 41 | local turtles = {}
| |
| 42 | local que = {}
| |
| 43 | local currentRecipe = {}
| |
| 44 | modem.open(localChannel) | |
| 45 | ||
| 46 | local screens = {
| |
| 47 | home = {},
| |
| 48 | search = {},
| |
| 49 | getCount = {},
| |
| 50 | request = {},
| |
| 51 | turtles = {},
| |
| 52 | que = {},
| |
| 53 | requestItem = {},
| |
| 54 | craft = {},
| |
| 55 | recipes = {},
| |
| 56 | } | |
| 57 | ||
| 58 | screens.update = button.addButton(1,20,26,1,"Update",false,false) | |
| 59 | screens.homeButton = button.addButton(1,2,26,1,"Home",false,false) | |
| 60 | ||
| 61 | screens.home.search = button.addButton(2,5,11,1,"Search",false,false) | |
| 62 | screens.home.getCount = button.addButton(15,5,11,1,"Get Count",false,false) | |
| 63 | screens.home.request = button.addButton(2,7,11,1,"Request",false,false) | |
| 64 | screens.home.turtles = button.addButton(15,7,11,1,"Turtles",false,false) | |
| 65 | screens.home.que = button.addButton(2,9,11,1,"View Que",false,false) | |
| 66 | screens.home.ping = button.addButton(15,9,11,1,"Ping",false,false) | |
| 67 | screens.home.craft = button.addButton(2,11,11,1,"Craft",false,false) | |
| 68 | screens.home.addRecipe = button.addButton(15,11,11,1,"New recipes",false,false) | |
| 69 | ||
| 70 | screens.recipes.newRecipe = button.addButton(4,18,21,1,"Add recipe",false,false) | |
| 71 | ||
| 72 | screens.request.request = button.addButton(2,10,24,1,"request",false,false) | |
| 73 | ||
| 74 | screens.requestItem.request = button.addButton(2,10,24,1,"request",false,false) | |
| 75 | ||
| 76 | screens.getCount.request = button.addButton(2,10,24,1,"request",false,false) | |
| 77 | ||
| 78 | local currentScreen = screens.home | |
| 79 | ||
| 80 | term.setCursorPos(2,10) | |
| 81 | term.setBackgroundColor(colors.black) | |
| 82 | ||
| 83 | function drawReadBox(title) | |
| 84 | term.setBackgroundColor(colors.green) | |
| 85 | term.setCursorPos(1,11) | |
| 86 | term.write(title.." ") | |
| 87 | term.setCursorPos(1,12) | |
| 88 | term.write(" ")
| |
| 89 | term.setBackgroundColor(colors.white) | |
| 90 | term.write(" ")
| |
| 91 | term.setBackgroundColor(colors.green) | |
| 92 | term.write(" ")
| |
| 93 | term.setBackgroundColor(colors.green) | |
| 94 | term.setCursorPos(1,13) | |
| 95 | term.write(" ")
| |
| 96 | term.setTextColor(colors.black) | |
| 97 | term.setBackgroundColor(colors.white) | |
| 98 | term.setCursorPos(2,12) | |
| 99 | end | |
| 100 | ||
| 101 | ||
| 102 | local buttonFunctions = {
| |
| 103 | [screens.homeButton] = function() | |
| 104 | currentScreen = screens.home | |
| 105 | end, | |
| 106 | ||
| 107 | [screens.update] = function() | |
| 108 | error(shell.run("update"))
| |
| 109 | end, | |
| 110 | ||
| 111 | [screens.home.ping] = function() | |
| 112 | previous = os.clock() | |
| 113 | modem.transmit(targetChannel,localChannel,"ping") | |
| 114 | end, | |
| 115 | ||
| 116 | [screens.home.search] = function() | |
| 117 | currentScreen = screens.search | |
| 118 | modem.transmit(targetChannel,localChannel,"requestItemList") | |
| 119 | searchQuery = "" | |
| 120 | end, | |
| 121 | ||
| 122 | [screens.home.request] = function() | |
| 123 | requestItemString = "" | |
| 124 | currentScreen = screens.request | |
| 125 | end, | |
| 126 | ||
| 127 | [screens.home.getCount] = function() | |
| 128 | requestCountString = "" | |
| 129 | currentScreen = screens.getCount | |
| 130 | end, | |
| 131 | ||
| 132 | [screens.home.turtles] = function() | |
| 133 | currentScreen = screens.turtles | |
| 134 | modem.transmit(targetChannel,localChannel,"requestTurtles") | |
| 135 | local tEvent,side,channel,replyChannel,message = os.pullEvent("modem_message")
| |
| 136 | event.trigger(tEvent,side,channel,replyChannel,message) | |
| 137 | end, | |
| 138 | ||
| 139 | [screens.home.que] = function() | |
| 140 | currentScreen = screens.que | |
| 141 | modem.transmit(targetChannel,localChannel,"requestQue") | |
| 142 | local tEvent,side,channel,replyChannel,message = os.pullEvent("modem_message")
| |
| 143 | event.trigger(tEvent,side,channel,replyChannel,message) | |
| 144 | end, | |
| 145 | ||
| 146 | [screens.home.craft] = function() | |
| 147 | currentScreen = screens.craft | |
| 148 | craftRecipeString="" | |
| 149 | searchScroll = 10000 | |
| 150 | modem.transmit(targetChannel,localChannel,"requestRecipes") | |
| 151 | local tEvent,side,channel,replyChannel,message = os.pullEvent("modem_message")
| |
| 152 | event.trigger(tEvent,side,channel,replyChannel,message) | |
| 153 | end, | |
| 154 | ||
| 155 | [screens.home.addRecipe] = function() | |
| 156 | currentScreen = screens.recipes | |
| 157 | currentRecipe = { }
| |
| 158 | end, | |
| 159 | ||
| 160 | [screens.request.request] = function() | |
| 161 | requestCount = "" | |
| 162 | currentScreen = screens.requestItem | |
| 163 | end, | |
| 164 | ||
| 165 | [screens.requestItem.request] = function() | |
| 166 | local count = tonumber(requestCount) | |
| 167 | if type(count)~= "number" or count == 0 then | |
| 168 | return | |
| 169 | end | |
| 170 | local message = "requestItem|"..tostring(requestItemString).."|"..tostring(count) | |
| 171 | currentScreen = screens.home | |
| 172 | modem.transmit(targetChannel,localChannel,message) | |
| 173 | end, | |
| 174 | ||
| 175 | [screens.getCount.request] = function() | |
| 176 | local message = "getItemCount|"..tostring(requestCountString) | |
| 177 | modem.transmit(targetChannel,localChannel,message) | |
| 178 | local tEvent,side,channel,replyChannel,message = os.pullEvent("modem_message")
| |
| 179 | event.trigger(tEvent,side,channel,replyChannel,message) | |
| 180 | requestCountString = "" | |
| 181 | onChar("")
| |
| 182 | end, | |
| 183 | ||
| 184 | [screens.recipes.newRecipe] = function() | |
| 185 | drawReadBox("Recipe name:")
| |
| 186 | local recipeString = read() .. "|" | |
| 187 | for i=1,9 do | |
| 188 | recipeString = recipeString .. ( currentRecipe[i] or "" ).. ";" | |
| 189 | end | |
| 190 | -- currentRecipe | |
| 191 | currentScreen = screens.home | |
| 192 | modem.transmit(targetChannel,localChannel,"addRecipe|"..recipeString) | |
| 193 | end, | |
| 194 | ||
| 195 | } | |
| 196 | ||
| 197 | function handleClicks(buttonID) | |
| 198 | if buttonFunctions[buttonID] == nil then return end | |
| 199 | buttonFunctions[buttonID]() | |
| 200 | end | |
| 201 | event.addHandler("onButtonClick",handleClicks)
| |
| 202 | ||
| 203 | function onChar(letter) | |
| 204 | if string.len(letter)>0 then | |
| 205 | local letter = string.lower(letter) | |
| 206 | end | |
| 207 | if currentScreen == screens.search then | |
| 208 | searchQuery = searchQuery..letter | |
| 209 | term.setCursorPos(2,6) | |
| 210 | term.setBackgroundColor(colors.white) | |
| 211 | term.setTextColor(colors.black) | |
| 212 | if string.len(searchQuery)>= 23 then | |
| 213 | term.write(string.sub(searchQuery,string.len(searchQuery)-22,string.len(searchQuery))) | |
| 214 | else | |
| 215 | term.write(searchQuery) | |
| 216 | for i = string.len(searchQuery),23 do | |
| 217 | term.write(" ")
| |
| 218 | end | |
| 219 | end | |
| 220 | cachedItems = {}
| |
| 221 | for name,count in pairs(itemlist) do | |
| 222 | if string.len(searchQuery) == 0 or string.match(name,searchQuery)~= nil then | |
| 223 | cachedItems[#cachedItems+1] = {name = name,count = count}
| |
| 224 | end | |
| 225 | end | |
| 226 | searchScroll = 0 | |
| 227 | drawSearch(true) | |
| 228 | elseif currentScreen == screens.requestItem then | |
| 229 | requestCount = requestCount..letter | |
| 230 | term.setCursorPos(2,6) | |
| 231 | term.setTextColor(colors.black) | |
| 232 | if string.len(requestCount)>= 4 then | |
| 233 | term.write(string.sub(requestCount,string.len(requestCount)-4,string.len(requestCount))) | |
| 234 | else | |
| 235 | term.write(requestCount) | |
| 236 | for i = string.len(requestCount),4 do | |
| 237 | term.write(" ")
| |
| 238 | end | |
| 239 | end | |
| 240 | elseif currentScreen == screens.request then | |
| 241 | requestItemString = requestItemString..letter | |
| 242 | term.setCursorPos(2,6) | |
| 243 | term.setTextColor(colors.black) | |
| 244 | if string.len(requestItemString)>= 23 then | |
| 245 | term.write(string.sub(requestItemString,string.len(requestItemString)-22,string.len(requestItemString))) | |
| 246 | else | |
| 247 | term.write(requestItemString) | |
| 248 | for i = string.len(requestItemString),23 do | |
| 249 | term.write(" ")
| |
| 250 | end | |
| 251 | end | |
| 252 | elseif currentScreen == screens.getCount then | |
| 253 | requestCountString = requestCountString..letter | |
| 254 | term.setCursorPos(2,6) | |
| 255 | term.setTextColor(colors.black) | |
| 256 | if string.len(requestCountString)>= 23 then | |
| 257 | term.write(string.sub(requestCountString,string.len(requestCountString)-22,string.len(requestCountString))) | |
| 258 | else | |
| 259 | term.write(requestCountString) | |
| 260 | for i = string.len(requestCountString),23 do | |
| 261 | term.write(" ")
| |
| 262 | end | |
| 263 | end | |
| 264 | elseif currentScreen == screens.craft then | |
| 265 | searchScroll = 0 | |
| 266 | recipeSearchString = recipeSearchString..letter | |
| 267 | term.setCursorPos(2,6) | |
| 268 | term.setTextColor(colors.black) | |
| 269 | term.setBackgroundColor(colors.white) | |
| 270 | if string.len(recipeSearchString)>= 23 then | |
| 271 | term.write(string.sub(recipeSearchString,string.len(recipeSearchString)-22,string.len(recipeSearchString))) | |
| 272 | else | |
| 273 | term.write(recipeSearchString) | |
| 274 | for i = string.len(recipeSearchString),23 do | |
| 275 | term.write(" ")
| |
| 276 | end | |
| 277 | end | |
| 278 | cachedRecipes = {}
| |
| 279 | for _,name in pairs(recipes) do | |
| 280 | if string.len(recipeSearchString) == 0 or string.match(name,recipeSearchString)~= nil then | |
| 281 | cachedRecipes[#cachedRecipes+1] = name | |
| 282 | end | |
| 283 | end | |
| 284 | drawCraft(true) | |
| 285 | end | |
| 286 | end | |
| 287 | event.addHandler("char",onChar)
| |
| 288 | ||
| 289 | function onKey(key) | |
| 290 | if currentScreen == screens.search then | |
| 291 | if key == 14 then -- backspace | |
| 292 | searchQuery = string.sub(searchQuery,1,string.len(searchQuery)-1) | |
| 293 | onChar("")
| |
| 294 | elseif key == 28 then | |
| 295 | cachedItems = {}
| |
| 296 | for name,count in pairs(itemlist) do | |
| 297 | if string.len(searchQuery) == 0 or string.match(name,searchQuery)~= nil then | |
| 298 | cachedItems[#cachedItems+1] = {name = name,count = count}
| |
| 299 | end | |
| 300 | end | |
| 301 | searchScroll = 0 | |
| 302 | drawSearch(true) | |
| 303 | end | |
| 304 | elseif currentScreen == screens.requestItem then | |
| 305 | if key == 14 then -- backspace | |
| 306 | requestCount = string.sub(requestCount,1,string.len(requestCount)-1) | |
| 307 | onChar("")
| |
| 308 | elseif key == 28 then | |
| 309 | buttonFunctions[screens.requestItem.request]() | |
| 310 | button.drawAllButtons() | |
| 311 | end | |
| 312 | elseif currentScreen == screens.request then | |
| 313 | if key == 14 then -- backspace | |
| 314 | requestItemString = string.sub(requestItemString,1,string.len(requestItemString)-1) | |
| 315 | onChar("")
| |
| 316 | elseif key == 28 then | |
| 317 | buttonFunctions[screens.request.request]() | |
| 318 | button.drawAllButtons() | |
| 319 | end | |
| 320 | elseif currentScreen == screens.getCount then | |
| 321 | if key == 14 then -- backspace | |
| 322 | requestCountString = string.sub(requestCountString,1,string.len(requestCountString)-1) | |
| 323 | onChar("")
| |
| 324 | elseif key == 28 then | |
| 325 | buttonFunctions[screens.getCount.request]() | |
| 326 | button.drawAllButtons() | |
| 327 | end | |
| 328 | elseif currentScreen == screens.craft then | |
| 329 | if key == 14 then -- backspace | |
| 330 | recipeSearchString = string.sub(recipeSearchString,1,string.len(recipeSearchString)-1) | |
| 331 | onChar("")
| |
| 332 | elseif key == 28 then | |
| 333 | buttonFunctions[screens.craft.craft]() | |
| 334 | button.drawAllButtons() | |
| 335 | end | |
| 336 | end | |
| 337 | end | |
| 338 | event.addHandler("key",onKey)
| |
| 339 | ||
| 340 | local drawFunctions = {
| |
| 341 | [screens.search] = function (fromChar) | |
| 342 | term.setCursorPos(2,5) | |
| 343 | term.setBackgroundColor(colors.black) | |
| 344 | term.write("Search:")
| |
| 345 | term.setCursorPos(2,6) | |
| 346 | term.setBackgroundColor(colors.white) | |
| 347 | term.write(searchQuery) | |
| 348 | for i=1,24 - string.len(searchQuery) do | |
| 349 | term.write(" ")
| |
| 350 | end | |
| 351 | --term.setBackgroundColor(colors.white) | |
| 352 | --term.write(" ")
| |
| 353 | term.setCursorPos(2,6) | |
| 354 | if fromChar == nil then | |
| 355 | --onChar("")
| |
| 356 | end | |
| 357 | term.setTextColor(colors.yellow) | |
| 358 | for i = 1,10 do | |
| 359 | local id = i+searchScroll | |
| 360 | local item = cachedItems[id] | |
| 361 | if item == nil then | |
| 362 | term.setBackgroundColor(colors.black) | |
| 363 | term.setCursorPos(1,8+i) | |
| 364 | term.write(" ")
| |
| 365 | else | |
| 366 | term.setCursorPos(1,8+i) | |
| 367 | if math.floor(i/2) == math.ceil(i/2) then | |
| 368 | term.setBackgroundColor(colors.gray) | |
| 369 | else | |
| 370 | term.setBackgroundColor(colors.lightGray) | |
| 371 | end | |
| 372 | local itemString = tostring(item.name).." x "..tostring(item.count) | |
| 373 | term.write(itemString) | |
| 374 | for i = string.len(itemString),25 do | |
| 375 | term.write(" ")
| |
| 376 | end | |
| 377 | end | |
| 378 | end | |
| 379 | end, | |
| 380 | [screens.requestItem] = function() | |
| 381 | term.setCursorPos(2,5) | |
| 382 | term.setBackgroundColor(colors.black) | |
| 383 | term.write("Count:")
| |
| 384 | term.setCursorPos(2,6) | |
| 385 | term.setBackgroundColor(colors.white) | |
| 386 | term.write(" ")
| |
| 387 | term.setCursorPos(2,6) | |
| 388 | onChar("")
| |
| 389 | end, | |
| 390 | [screens.request] = function() | |
| 391 | term.setCursorPos(2,5) | |
| 392 | term.setBackgroundColor(colors.black) | |
| 393 | term.write("Name:")
| |
| 394 | term.setCursorPos(2,6) | |
| 395 | term.setBackgroundColor(colors.white) | |
| 396 | term.write(" ")
| |
| 397 | term.setCursorPos(2,6) | |
| 398 | onChar("")
| |
| 399 | end, | |
| 400 | [screens.turtles] = function() | |
| 401 | term.setBackgroundColor(colors.black) | |
| 402 | term.setCursorPos(1,4) | |
| 403 | term.write("Turtles:")
| |
| 404 | for id,turtle in pairs(turtles) do | |
| 405 | term.setCursorPos(1,5+id*2) | |
| 406 | if math.floor(id/2) == math.ceil(id/2) then | |
| 407 | term.setBackgroundColor(colors.gray) | |
| 408 | else | |
| 409 | term.setBackgroundColor(colors.lightGray) | |
| 410 | end | |
| 411 | term.setTextColor(colors.yellow) | |
| 412 | term.write("id: "..turtle.id.." Status: "..turtle.status)
| |
| 413 | if turtle.task~= "nil" then | |
| 414 | term.setCursorPos(1,5+id*2+1) | |
| 415 | term.write(turtle.task) | |
| 416 | end | |
| 417 | end | |
| 418 | end, | |
| 419 | [screens.que] = function() | |
| 420 | term.setBackgroundColor(colors.black) | |
| 421 | term.setCursorPos(1,4) | |
| 422 | term.write("Que:")
| |
| 423 | for id,command in pairs(que) do | |
| 424 | term.setCursorPos(1,5+id) | |
| 425 | if math.floor(id/2) == math.ceil(id/2) then | |
| 426 | term.setBackgroundColor(colors.gray) | |
| 427 | else | |
| 428 | term.setBackgroundColor(colors.lightGray) | |
| 429 | end | |
| 430 | term.setTextColor(colors.yellow) | |
| 431 | if command~= nil then | |
| 432 | term.write(command) | |
| 433 | end | |
| 434 | end | |
| 435 | end, | |
| 436 | [screens.getCount] = function() | |
| 437 | term.setCursorPos(2,5) | |
| 438 | term.setBackgroundColor(colors.black) | |
| 439 | term.write("Name:")
| |
| 440 | term.setCursorPos(2,8) | |
| 441 | term.write("Result: "..tostring(itemCount))
| |
| 442 | term.setCursorPos(2,6) | |
| 443 | term.setBackgroundColor(colors.white) | |
| 444 | term.write(" ")
| |
| 445 | term.setCursorPos(2,6) | |
| 446 | onChar("")
| |
| 447 | end, | |
| 448 | [screens.craft] = function() | |
| 449 | term.setCursorPos(2,5) | |
| 450 | term.setBackgroundColor(colors.black) | |
| 451 | term.write("Search recipes:")
| |
| 452 | term.setCursorPos(2,6) | |
| 453 | term.setBackgroundColor(colors.white) | |
| 454 | term.write(recipeSearchString) | |
| 455 | for i=1,24 - string.len(recipeSearchString) do | |
| 456 | term.write(" ")
| |
| 457 | end | |
| 458 | term.setCursorPos(2,6) | |
| 459 | term.setTextColor(colors.yellow) | |
| 460 | for i = 1,10 do | |
| 461 | local id = i+searchScroll | |
| 462 | local item = cachedRecipes[id] | |
| 463 | if item == nil then | |
| 464 | term.setBackgroundColor(colors.black) | |
| 465 | term.setCursorPos(1,8+i) | |
| 466 | term.write(" ")
| |
| 467 | else | |
| 468 | term.setCursorPos(1,8+i) | |
| 469 | if i%2==1 then | |
| 470 | term.setBackgroundColor(colors.gray) | |
| 471 | else | |
| 472 | term.setBackgroundColor(colors.lightGray) | |
| 473 | end | |
| 474 | local itemString = tostring(item) | |
| 475 | term.write(itemString) | |
| 476 | for i = string.len(itemString),25 do | |
| 477 | term.write(" ")
| |
| 478 | end | |
| 479 | end | |
| 480 | end | |
| 481 | end, | |
| 482 | [screens.recipes] = function() | |
| 483 | term.setCursorPos(2,4) | |
| 484 | term.setBackgroundColor(colors.black) | |
| 485 | term.setTextColor(colors.white) | |
| 486 | term.write("Create recipe:")
| |
| 487 | for i = 0,8 do | |
| 488 | if i%2==1 then | |
| 489 | term.setBackgroundColor(colors.lightGray) | |
| 490 | else | |
| 491 | term.setBackgroundColor(colors.gray) | |
| 492 | end | |
| 493 | local left = 5 + (i * 6) - ( ( math.floor(i/3) * 3 ) * 6) | |
| 494 | local top = 7 + ( math.floor(i/3) * 3) | |
| 495 | term.setCursorPos(left,top) | |
| 496 | term.write(" ")
| |
| 497 | term.setCursorPos(left,top+1) | |
| 498 | term.write(" ")
| |
| 499 | term.setCursorPos(left,top+1) | |
| 500 | if currentRecipe[i+1]~=nil then | |
| 501 | term.write(string.sub(currentRecipe[i+1],0,6)) | |
| 502 | end | |
| 503 | term.setCursorPos(left,top+2) | |
| 504 | term.write(" ")
| |
| 505 | end | |
| 506 | end, | |
| 507 | } | |
| 508 | ||
| 509 | function recipeClicked(button,x,y) | |
| 510 | if currentScreen == screens.recipes and button == 1 then | |
| 511 | local column = math.floor((x - 5) / 6 + 1 ) | |
| 512 | if column < 1 or column > 3 then return end | |
| 513 | local row = math.floor((y - 7) / 3 + 1) | |
| 514 | if row < 1 or row > 3 then return end | |
| 515 | local position = math.floor(column + ( row - 1 ) * 3) | |
| 516 | ||
| 517 | drawReadBox("Item name (slot "..position..") ")
| |
| 518 | local name = read() | |
| 519 | currentRecipe[position] = name | |
| 520 | term.setBackgroundColor(colors.green) | |
| 521 | term.clear() | |
| 522 | drawFunctions[currentScreen]() | |
| 523 | drawOthers() | |
| 524 | end | |
| 525 | end | |
| 526 | event.addHandler("mouse_click",recipeClicked)
| |
| 527 | ||
| 528 | function onClick(mouseButton,x,y) | |
| 529 | if currentScreen == screens.search then | |
| 530 | if y>8 and y<20 then | |
| 531 | local item = cachedItems[y-8+searchScroll] | |
| 532 | if item == nil then return end | |
| 533 | requestItemString = item.name | |
| 534 | requestCount = "" | |
| 535 | currentScreen = screens.requestItem | |
| 536 | button.drawAllButtons() | |
| 537 | end | |
| 538 | elseif currentScreen == screens.craft then | |
| 539 | if y>8 and y<20 then | |
| 540 | local item = cachedRecipes[y-8+searchScroll] | |
| 541 | if item == nil then return end | |
| 542 | drawReadBox("Procedure count: ")
| |
| 543 | local count = tonumber(read()) | |
| 544 | if count==nil then return end | |
| 545 | local message = "requestCraft|"..item.."|"..count | |
| 546 | currentScreen = screens.home | |
| 547 | button.drawAllButtons() | |
| 548 | modem.transmit(targetChannel,localChannel,message) | |
| 549 | end | |
| 550 | end | |
| 551 | end | |
| 552 | event.addHandler("mouse_click",onClick)
| |
| 553 | ||
| 554 | local messageHandles = {
| |
| 555 | ["ping"] = function(replyChannel,message) | |
| 556 | return "pong" | |
| 557 | end, | |
| 558 | ["pong"] = drawPing, | |
| 559 | ["returnItemList"] = function(replyChannel,message) | |
| 560 | itemlist = {}
| |
| 561 | local items = utils.split(message,"|",2) | |
| 562 | local i = 1 | |
| 563 | while true do | |
| 564 | local item = utils.split(items,";",i) | |
| 565 | if string.len(item) == 0 then | |
| 566 | break | |
| 567 | end | |
| 568 | local name = utils.split(item,",",1) | |
| 569 | local count = tonumber(utils.split(item,",",2)) | |
| 570 | if name == nil or count == nil then | |
| 571 | break | |
| 572 | end | |
| 573 | itemlist[name] = count | |
| 574 | i = i+1 | |
| 575 | end | |
| 576 | end, | |
| 577 | ["returnRecipes"] = function(replyChannel,message) | |
| 578 | recipes = {}
| |
| 579 | local recipesString = utils.split(message,"|",2) | |
| 580 | local i = 1 | |
| 581 | while true do | |
| 582 | local recipe = utils.split(recipesString,";",i) | |
| 583 | print(recipe) | |
| 584 | if string.len(recipe) == 0 then | |
| 585 | break | |
| 586 | end | |
| 587 | recipes[#recipes+1] = recipe | |
| 588 | i = i+1 | |
| 589 | end | |
| 590 | end, | |
| 591 | ["returnQue"] = function(_,message) | |
| 592 | que = {}
| |
| 593 | local i = 1 | |
| 594 | while true do | |
| 595 | local command = utils.split(message,"|",i+1) | |
| 596 | if command == nil then | |
| 597 | break | |
| 598 | end | |
| 599 | que[#que+1] = command | |
| 600 | i = i+1 | |
| 601 | end | |
| 602 | drawFunctions[currentScreen](false) | |
| 603 | end, | |
| 604 | ["returnTurtles"] = function(_,message) | |
| 605 | turtles = {}
| |
| 606 | local turtlesString = utils.split(message,"|",2) | |
| 607 | local i = 1 | |
| 608 | while true do | |
| 609 | local turtle = utils.split(turtlesString,";",i) | |
| 610 | if turtle == nil or string.len(turtle) == 0 then | |
| 611 | break | |
| 612 | end | |
| 613 | local id = tostring(utils.split(turtle,",",1)) | |
| 614 | local status = tostring(utils.split(turtle,",",2)) | |
| 615 | local task = tostring(utils.split(turtle,",",3)) | |
| 616 | if id == nil or status == nil then | |
| 617 | break | |
| 618 | end | |
| 619 | turtles[#turtles+1] = {id = id,status = status,task = task}
| |
| 620 | i = i+1 | |
| 621 | end | |
| 622 | drawFunctions[currentScreen](false) | |
| 623 | end, | |
| 624 | ["returnItemCount"] = function(_,message) | |
| 625 | itemCount = utils.split(message,"|",2) | |
| 626 | drawFunctions[currentScreen](false) | |
| 627 | end, | |
| 628 | ||
| 629 | } | |
| 630 | ||
| 631 | function handleMessages(side,channel,replyChannel,message) | |
| 632 | if replyChannel == nil then return end | |
| 633 | local messageType = utils.split(message,"|",1) | |
| 634 | if messageHandles[messageType] == nil then return end | |
| 635 | local returnMessage = messageHandles[messageType](replyChannel,message) | |
| 636 | if returnMessage == nil then return end | |
| 637 | wireless.transmit(replyChannel,localChannel,returnMessage) | |
| 638 | end | |
| 639 | event.addHandler("modem_message",handleMessages)
| |
| 640 | ||
| 641 | function drawSearch(...) | |
| 642 | drawFunctions[screens.search](...) | |
| 643 | end | |
| 644 | ||
| 645 | function drawCraft(...) | |
| 646 | drawFunctions[screens.craft](...) | |
| 647 | end | |
| 648 | ||
| 649 | function drawPing() | |
| 650 | if previous~= nil then | |
| 651 | ping = os.clock()-previous | |
| 652 | previous = nil | |
| 653 | end | |
| 654 | term.setCursorPos(1,1) | |
| 655 | term.setBackgroundColor(256) | |
| 656 | --term.setTextColor(colors.green) | |
| 657 | term.write(ping.." ") | |
| 658 | end | |
| 659 | ||
| 660 | function drawOthers() | |
| 661 | for screenName,buttons in pairs(screens) do | |
| 662 | if type(buttons)~= "number" then | |
| 663 | for name,buttonID in pairs(buttons) do | |
| 664 | if buttons == currentScreen then | |
| 665 | button.setVisible(buttonID,true) | |
| 666 | else | |
| 667 | button.setVisible(buttonID,false) | |
| 668 | end | |
| 669 | end | |
| 670 | end | |
| 671 | end | |
| 672 | button.drawAllButtons(true) | |
| 673 | drawPing() | |
| 674 | if drawFunctions[currentScreen] == nil then return end | |
| 675 | drawFunctions[currentScreen]() | |
| 676 | end | |
| 677 | event.addHandler("onButtonsDrawn",drawOthers)
| |
| 678 | drawOthers() | |
| 679 | ||
| 680 | function scrolled(direction) | |
| 681 | if currentScreen == screens.search then | |
| 682 | searchScroll = searchScroll+direction | |
| 683 | drawSearch() | |
| 684 | elseif currentScreen == screens.craft then | |
| 685 | searchScroll = searchScroll+direction | |
| 686 | drawFunctions[screens.craft]() | |
| 687 | end | |
| 688 | end | |
| 689 | event.addHandler("mouse_scroll",scrolled)
| |
| 690 | ||
| 691 | while true do | |
| 692 | event.handleCCEvents() | |
| 693 | end |