SHOW:
|
|
- or go back to the newest paste.
| 1 | -- BeeAnalyzer 4.0 | |
| 2 | -- Original code by Direwolf20 | |
| 3 | -- Hotfix 1 by Mandydax | |
| 4 | -- Hotfix 2 by Mikeyhun/MaaadMike | |
| 5 | -- Major overhaul by MacLeopold | |
| 6 | -- Breeds bees with best attributes in this order: | |
| 7 | -- fertility, speed, nocturnal, flyer, cave, temperature tolerance, humidity tolerance | |
| 8 | -- other attributes are ignored (lifespawn, flowers, effect and territory) | |
| 9 | -- Can specify multiple target species to help with keeping to the correct line | |
| 10 | ||
| 11 | local targetSpecies = { ... }
| |
| 12 | ||
| 13 | local currslot = 1 | |
| 14 | local princess = 0 | |
| 15 | local bestDrone = 0 | |
| 16 | local data={}
| |
| 17 | local currData = {}
| |
| 18 | local princessData = {}
| |
| 19 | local droneData = {}
| |
| 20 | local countBees = 0 | |
| 21 | local beeTable = {}
| |
| 22 | local currScore = 0 | |
| 23 | local toleranceTable = {}
| |
| 24 | local toleranceString = {}
| |
| 25 | local needsUpdate = "" | |
| 26 | local needPrincess = false | |
| 27 | ||
| 28 | s = peripheral.wrap("right")
| |
| 29 | ||
| 30 | -- Scores for all bees | |
| 31 | ||
| 32 | -- Mundane Bees | |
| 33 | beeTable["Forest"] = 1 | |
| 34 | beeTable["Meadows"] = 1 | |
| 35 | beeTable["Modest"] = 2 | |
| 36 | beeTable["Tropical"] = 2 | |
| 37 | beeTable["Wintry"] = 2 | |
| 38 | beeTable["Marshy"] = 2 | |
| 39 | beeTable["Embittered"] = 2 | |
| 40 | ||
| 41 | -- End Branch | |
| 42 | beeTable["Ender"] = 2 | |
| 43 | ||
| 44 | -- Common Branch | |
| 45 | beeTable["Common"] = 2 | |
| 46 | beeTable["Cultivated"] = 4 | |
| 47 | ||
| 48 | -- Noble Branch | |
| 49 | beeTable["Noble"] = 8 | |
| 50 | beeTable["Majestic"] = 16 | |
| 51 | beeTable["Imperial"] = 32 | |
| 52 | ||
| 53 | -- Industrious Branch | |
| 54 | beeTable["Diligent"] = 8 | |
| 55 | beeTable["Unweary"] = 16 | |
| 56 | beeTable["Industrious"] = 32 | |
| 57 | ||
| 58 | -- Heroic Branch | |
| 59 | beeTable["Steadfast"] = 8 | |
| 60 | beeTable["Valiant"] = 16 | |
| 61 | beeTable["Heroic"] = 32 | |
| 62 | ||
| 63 | -- Infernal Branch | |
| 64 | beeTable["Sinister"] = 8 | |
| 65 | beeTable["Fiendish"] = 16 | |
| 66 | beeTable["Demonic"] = 32 | |
| 67 | ||
| 68 | -- Austere Branch | |
| 69 | beeTable["Frugal"] = 16 | |
| 70 | beeTable["Austere"] = 32 | |
| 71 | ||
| 72 | -- Tropical Branch | |
| 73 | beeTable["Exotic"] = 16 | |
| 74 | beeTable["Edenic"] = 32 | |
| 75 | ||
| 76 | -- Wintry Branch | |
| 77 | beeTable["Icy"] = 16 | |
| 78 | beeTable["Glacial"] = 32 | |
| 79 | beeTable["Frigid"] = 16 | |
| 80 | beeTable["Absolute"] = 32 | |
| 81 | ||
| 82 | -- Festive Branch | |
| 83 | beeTable["Leporine"] = 32 | |
| 84 | beeTable["Merry"] = 32 | |
| 85 | beeTable["Tipsy"] = 32 | |
| 86 | beeTable["Celebratory"] = 64 | |
| 87 | ||
| 88 | -- Agrarian Branch | |
| 89 | beeTable["Rural"] = 8 | |
| 90 | beeTable["Farmed"] = 16 | |
| 91 | ||
| 92 | -- Boggy Branch | |
| 93 | beeTable["Swamp"] = 16 | |
| 94 | beeTable["Boggy"] = 32 | |
| 95 | beeTable["Fungal"] = 64 | |
| 96 | ||
| 97 | -- Extra Bees | |
| 98 | ||
| 99 | -- Agricultural Branch | |
| 100 | beeTable["Fermented"] = 16 | |
| 101 | beeTable["Bovine"] = 16 | |
| 102 | beeTable["Caffeine"] = 16 | |
| 103 | beeTable["Citrus"] = 32 | |
| 104 | beeTable["Minty"] = 32 | |
| 105 | ||
| 106 | -- Barren Branch | |
| 107 | beeTable["Arid"] = 8 | |
| 108 | beeTable["Barren"] = 16 | |
| 109 | beeTable["Desolate"] = 32 | |
| 110 | ||
| 111 | -- Hostile Branch | |
| 112 | beeTable["Decaying"] = 64 | |
| 113 | beeTable["Skeletal"] = 64 | |
| 114 | beeTable["Creepy"] = 64 | |
| 115 | ||
| 116 | -- Rocky Branch | |
| 117 | beeTable["Rocky"] = 2 | |
| 118 | beeTable["Tolerant"] = 8 | |
| 119 | beeTable["Hardy"] = 16 | |
| 120 | beeTable["Resilient"] = 32 | |
| 121 | ||
| 122 | -- Rusty Branch | |
| 123 | beeTable["Rusty"] = 64 | |
| 124 | beeTable["Corroded"] = 64 | |
| 125 | beeTable["Tarnished"] = 64 | |
| 126 | beeTable["Leaden"] = 64 | |
| 127 | ||
| 128 | -- Metallic Branch | |
| 129 | beeTable["Lustered"] = 64 | |
| 130 | beeTable["Galvanized"] = 128 | |
| 131 | beeTable["Invincible"] = 64 | |
| 132 | ||
| 133 | -- Alloyed Branch | |
| 134 | beeTable["Impregnable"] = 64 | |
| 135 | beeTable["Resolute"] = 128 | |
| 136 | beeTable["Brazen"] = 256 | |
| 137 | beeTable["Fortified"] = 128 | |
| 138 | beeTable["Lustrous"] = 64 | |
| 139 | ||
| 140 | -- Precious Branch | |
| 141 | beeTable["Shining"] = 128 | |
| 142 | beeTable["Glittering"] = 256 | |
| 143 | beeTable["Precious"] = 512 | |
| 144 | beeTable["Valuable"] = 512 | |
| 145 | ||
| 146 | -- Mineral Branch | |
| 147 | beeTable["Lapis"] = 64 | |
| 148 | beeTable["Sodalite"] = 128 | |
| 149 | beeTable["Pyrite"] = 128 | |
| 150 | beeTable["Bauxite"] = 64 | |
| 151 | beeTable["Cinnabar"] = 64 | |
| 152 | beeTable["Sphalerite"] = 128 | |
| 153 | ||
| 154 | -- Gemstone Branch | |
| 155 | beeTable["Emerald"] = 128 | |
| 156 | beeTable["Ruby"] = 256 | |
| 157 | beeTable["Sapphire"] = 256 | |
| 158 | beeTable["Olivine"] = 256 | |
| 159 | beeTable["Diamond"] = 512 | |
| 160 | ||
| 161 | -- Nuclear Branch | |
| 162 | beeTable["Unstable"] = 64 | |
| 163 | beeTable["Nuclear"] = 128 | |
| 164 | beeTable["Radioactive"] = 256 | |
| 165 | ||
| 166 | -- Historic Branch | |
| 167 | beeTable["Ancient"] = 16 | |
| 168 | beeTable["Primeval"] = 32 | |
| 169 | beeTable["Prehistoric"] = 64 | |
| 170 | beeTable["Relic"] = 128 | |
| 171 | ||
| 172 | -- Fossilized Branch | |
| 173 | beeTable["Fossiled"] = 64 | |
| 174 | beeTable["Resinous"] = 64 | |
| 175 | beeTable["Oily"] = 64 | |
| 176 | beeTable["Preserved"] = 64 | |
| 177 | ||
| 178 | -- Refined Branch | |
| 179 | beeTable["Distilled"] = 128 | |
| 180 | beeTable["Refined"] = 256 | |
| 181 | beeTable["Tarry"] = 512 | |
| 182 | beeTable["Elastic"] = 512 | |
| 183 | ||
| 184 | -- Aquatic Branch | |
| 185 | beeTable["Water"] = 2 | |
| 186 | beeTable["River"] = 8 | |
| 187 | beeTable["Ocean"] = 8 | |
| 188 | beeTable["Stained"] = 16 | |
| 189 | ||
| 190 | -- Saccharine Branch | |
| 191 | beeTable["Sweetened"] = 16 | |
| 192 | beeTable["Sugary"] = 32 | |
| 193 | beeTable["Fruity"] = 64 | |
| 194 | ||
| 195 | -- Classical Branch | |
| 196 | beeTable["Marbled"] = 2 | |
| 197 | beeTable["Gothic"] = 64 | |
| 198 | beeTable["Renaissance"] = 128 | |
| 199 | beeTable["Classical"] = 256 | |
| 200 | ||
| 201 | -- Volcanic Branch | |
| 202 | beeTable["Angry"] = 16 | |
| 203 | beeTable["Furious"] = 32 | |
| 204 | beeTable["Volcanic"] = 64 | |
| 205 | beeTable["Glowering"] = 64 | |
| 206 | ||
| 207 | -- Viscous Branch | |
| 208 | beeTable["Viscous"] = 32 | |
| 209 | beeTable["Glutinous"] = 64 | |
| 210 | beeTable["Sticky"] = 128 | |
| 211 | ||
| 212 | -- Virulent Branch | |
| 213 | beeTable["Malicious"] = 16 | |
| 214 | beeTable["Infectious"] = 32 | |
| 215 | beeTable["Virulent"] = 64 | |
| 216 | ||
| 217 | -- Caustic Branch | |
| 218 | beeTable["Corrosive"] = 128 | |
| 219 | beeTable["Caustic"] = 256 | |
| 220 | beeTable["Acidic"] = 512 | |
| 221 | ||
| 222 | -- Energetic Branch | |
| 223 | beeTable["Excited"] = 32 | |
| 224 | beeTable["Energetic"] = 64 | |
| 225 | beeTable["Ecstatic"] = 128 | |
| 226 | ||
| 227 | -- Shadow Branch | |
| 228 | beeTable["Shadowed"] = 64 | |
| 229 | beeTable["Darkened"] = 128 | |
| 230 | beeTable["Abyssmal"] = 256 | |
| 231 | ||
| 232 | -- Primary Branch | |
| 233 | beeTable["Maroon"] = 32 | |
| 234 | beeTable["Saffron"] = 32 | |
| 235 | beeTable["Prussian"] = 32 | |
| 236 | beeTable["Natural"] = 32 | |
| 237 | beeTable["Ebony"] = 32 | |
| 238 | beeTable["Bleached"] = 32 | |
| 239 | beeTable["Sepia"] = 32 | |
| 240 | ||
| 241 | -- Secondary Branch | |
| 242 | beeTable["Amber"] = 64 | |
| 243 | beeTable["Turquoise"] = 64 | |
| 244 | beeTable["Indigo"] = 64 | |
| 245 | beeTable["Slate"] = 64 | |
| 246 | beeTable["Azure"] = 64 | |
| 247 | beeTable["Lavender"] = 64 | |
| 248 | beeTable["Lime"] = 64 | |
| 249 | ||
| 250 | -- Tertiary Branch | |
| 251 | beeTable["Fuchsia"] = 128 | |
| 252 | beeTable["Ashen"] = 128 | |
| 253 | ||
| 254 | -- Hungry Branch | |
| 255 | beeTable["Hungry"] = 16 | |
| 256 | beeTable["Starved"] = 32 | |
| 257 | beeTable["Ravenous"] = 64 | |
| 258 | ||
| 259 | -- Confused Branch | |
| 260 | beeTable["Dazed"] = 64 | |
| 261 | beeTable["Irrational"] = 128 | |
| 262 | beeTable["Delirious"] = 256 | |
| 263 | ||
| 264 | -- Forestry Branch | |
| 265 | beeTable["Pulped"] = 32 | |
| 266 | beeTable["Spoiled"] = 64 | |
| 267 | beeTable["Decomposed"] = 128 | |
| 268 | ||
| 269 | -- Wooden Branch | |
| 270 | beeTable["Wooden"] = 16 | |
| 271 | beeTable["Lumbered"] = 32 | |
| 272 | beeTable["Timbered"] = 64 | |
| 273 | ||
| 274 | -- Beastly Branch | |
| 275 | beeTable["Jaded"] = 256 | |
| 276 | ||
| 277 | -- Thaumic Bees | |
| 278 | ||
| 279 | -- Arcane Branch | |
| 280 | beeTable["Esoteric"] = 64 | |
| 281 | beeTable["Mysterious"] = 128 | |
| 282 | beeTable["Arcane"] = 256 | |
| 283 | ||
| 284 | -- Supernatural Branch | |
| 285 | beeTable["Charmed"] = 32 | |
| 286 | beeTable["Enchanted"] = 64 | |
| 287 | beeTable["Supernatural"] = 128 | |
| 288 | ||
| 289 | -- Scholarly Branch | |
| 290 | beeTable["Pupil"] = 512 | |
| 291 | beeTable["Scholarly"] = 1024 | |
| 292 | beeTable["Savant"] = 2048 | |
| 293 | ||
| 294 | -- Thaumic Branch | |
| 295 | beeTable["Stark"] = 512 | |
| 296 | beeTable["Aura"] = 1024 | |
| 297 | beeTable["Ignis"] = 1024 | |
| 298 | beeTable["Aqua"] = 1024 | |
| 299 | beeTable["Solum"] = 1024 | |
| 300 | beeTable["Praecantatio"] = 1024 | |
| 301 | ||
| 302 | -- Skulking Branch | |
| 303 | beeTable["Skulking"] = 256 | |
| 304 | beeTable["Brainy"] = 512 | |
| 305 | beeTable["Gossamer"] = 512 | |
| 306 | beeTable["Wispy"] = 1024 | |
| 307 | beeTable["Batty"] = 512 | |
| 308 | beeTable["Ghastly"] = 512 | |
| 309 | ||
| 310 | -- Aware Branch | |
| 311 | beeTable["Aware"] = 64 | |
| 312 | beeTable["Vis"] = 128 | |
| 313 | beeTable["Pure"] = 256 | |
| 314 | beeTable["Flux"] = 256 | |
| 315 | beeTable["Node"] = 512 | |
| 316 | beeTable["Rejuvenating"] = 256 | |
| 317 | ||
| 318 | -- Time Branch | |
| 319 | beeTable["Timely"] = 128 | |
| 320 | beeTable["Lordly"] = 256 | |
| 321 | beeTable["Doctoral"] = 512 | |
| 322 | ||
| 323 | -- Soulful Branch | |
| 324 | beeTable["Spirit"] = 128 | |
| 325 | beeTable["Soul"] = 256 | |
| 326 | ||
| 327 | -- Alchemical Branch | |
| 328 | beeTable["Minium"] = 256 | |
| 329 | ||
| 330 | -- Metallic Branch | |
| 331 | beeTable["Iron"] = 64 | |
| 332 | beeTable["Copper"] = 64 | |
| 333 | beeTable["Tin"] = 64 | |
| 334 | beeTable["Silver"] = 64 | |
| 335 | beeTable["Lead"] = 64 | |
| 336 | beeTable["Gold"] = 128 | |
| 337 | ||
| 338 | -- Gem Branch | |
| 339 | beeTable["Diamond"] = 512 | |
| 340 | beeTable["Emerald"] = 128 | |
| 341 | ||
| 342 | -- Fleshy Branch | |
| 343 | beeTable["Poultry"] = 512 | |
| 344 | beeTable["Beefy"] = 512 | |
| 345 | beeTable["Porcine"] = 512 | |
| 346 | ||
| 347 | -- Only scores species that you specify on the command line | |
| 348 | local targeting = false | |
| 349 | local targetFound = false | |
| 350 | if #targetSpecies > 0 then | |
| 351 | for key, value in pairs(beeTable) do | |
| 352 | targetFound = false | |
| 353 | for i, target in ipairs(targetSpecies) do | |
| 354 | if key == target then | |
| 355 | print("Targeting "..key.." species.")
| |
| 356 | targeting = true | |
| 357 | targetFound = true | |
| 358 | break | |
| 359 | end | |
| 360 | end | |
| 361 | if not targetFound then | |
| 362 | beeTable[key] = 0 | |
| 363 | end | |
| 364 | end | |
| 365 | if not targeting then | |
| 366 | print("Did not find target species")
| |
| 367 | return | |
| 368 | end | |
| 369 | end | |
| 370 | ||
| 371 | -- Fix for some versions returning bees.species.* | |
| 372 | function fixName(name) | |
| 373 | return name:gsub("bees%.species%.",""):gsub("^.", string.upper)
| |
| 374 | end | |
| 375 | ||
| 376 | toleranceTable["NONE"] = 0 | |
| 377 | toleranceTable["UP_1"] = 1 | |
| 378 | toleranceTable["UP_2"] = 2 | |
| 379 | toleranceTable["DOWN_1"] = 1 | |
| 380 | toleranceTable["DOWN_2"] = 2 | |
| 381 | toleranceTable["BOTH_1"] = 2 | |
| 382 | toleranceTable["BOTH_2"] = 4 | |
| 383 | ||
| 384 | toleranceString["NONE"] = " " | |
| 385 | toleranceString["UP_1"] = " +1 " | |
| 386 | toleranceString["UP_2"] = " +2 " | |
| 387 | toleranceString["DOWN_1"] = " -1 " | |
| 388 | toleranceString["DOWN_2"] = " -2 " | |
| 389 | toleranceString["BOTH_1"] = "+-1 " | |
| 390 | toleranceString["BOTH_2"] = "+-2 " | |
| 391 | ||
| 392 | ||
| 393 | function getBees() | |
| 394 | io.write("waiting for bees.")
| |
| 395 | -- catalog bees in own inventory | |
| 396 | local free = {}
| |
| 397 | for i = 1,16 do | |
| 398 | turtle.select(i) | |
| 399 | if turtle.getItemCount(i) > 0 then | |
| 400 | countBees = countBees + 1 | |
| 401 | if #free > 0 then | |
| 402 | j = table.remove(free, 1) | |
| 403 | turtle.transferTo(j) | |
| 404 | table.insert(free, i) | |
| 405 | end | |
| 406 | else | |
| 407 | table.insert(free, i) | |
| 408 | end | |
| 409 | end | |
| 410 | -- get any bees from apiary | |
| 411 | if countBees < 2 or needPrincess then | |
| 412 | turtle.select(1) | |
| 413 | while not turtle.suck() do | |
| 414 | sleep(10) | |
| 415 | io.write(".")
| |
| 416 | end | |
| 417 | countBees = countBees + 1 | |
| 418 | end | |
| 419 | for i = 1,6 do | |
| 420 | if turtle.suck() then countBees = countBees + 1 end | |
| 421 | end | |
| 422 | print() | |
| 423 | end | |
| 424 | ||
| 425 | function returnBees() | |
| 426 | turtle.select(princess) | |
| 427 | s.dropSneaky(1,1) | |
| 428 | turtle.select(bestDrone) | |
| 429 | s.dropSneaky(0,1) | |
| 430 | end | |
| 431 | ||
| 432 | function ditchCombs() | |
| 433 | turtle.turnLeft() | |
| 434 | m = peripheral.wrap("front")
| |
| 435 | for i = 1,8 do | |
| 436 | turtle.suck() | |
| 437 | while (not m.isBee()) and (turtle.getItemCount(i) > 0) do | |
| 438 | turtle.select(i) | |
| 439 | turtle.drop() | |
| 440 | if not m.isBee() then | |
| 441 | turtle.suck() | |
| 442 | turtle.dropDown() | |
| 443 | turtle.select(countBees) | |
| 444 | turtle.transferTo(i, 1) | |
| 445 | countBees = countBees - 1 | |
| 446 | end | |
| 447 | end | |
| 448 | end | |
| 449 | turtle.turnRight() | |
| 450 | end | |
| 451 | ||
| 452 | function scanBees() | |
| 453 | turtle.turnLeft() | |
| 454 | turtle.turnLeft() | |
| 455 | for i = 1, countBees do | |
| 456 | turtle.select(i) | |
| 457 | turtle.drop() | |
| 458 | end | |
| 459 | end | |
| 460 | ||
| 461 | function determineBest(slot) | |
| 462 | local primScore = beeTable[data["speciesPrimary"]] | |
| 463 | local secScore = beeTable[data["speciesSecondary"]] | |
| 464 | if primScore == nil or secScore == nil then | |
| 465 | needsUpdate = data["speciesPrimary"]..":"..data["speciesSecondary"] | |
| 466 | end | |
| 467 | primScore = (primScore ~= nil and primScore or 0) | |
| 468 | secScore = (secScore ~= nil and secScore or 0) | |
| 469 | local useNew = false | |
| 470 | local score = 0 | |
| 471 | score = primScore + secScore | |
| 472 | if(bestDrone == 0) then | |
| 473 | useNew = true | |
| 474 | else | |
| 475 | if (score > currScore) then | |
| 476 | useNew = true | |
| 477 | elseif (score == currScore) then | |
| 478 | if data["fertility"] > currData["fertility"] then | |
| 479 | useNew = true | |
| 480 | elseif data["fertility"] < currData["fertility"] then | |
| 481 | useNew = false | |
| 482 | ||
| 483 | elseif data["speed"] > currData["speed"] then | |
| 484 | useNew = true | |
| 485 | elseif data["speed"] < currData["speed"] then | |
| 486 | useNew = false | |
| 487 | ||
| 488 | elseif data["nocturnal"] and not currData["nocturnal"] then | |
| 489 | useNew = true | |
| 490 | elseif not data["nocturnal"] and currData["nocturnal"] then | |
| 491 | useNew = false | |
| 492 | ||
| 493 | elseif data["tolerantFlyer"] and not currData["tolerantFlyer"] then | |
| 494 | useNew = true | |
| 495 | elseif not data["tolerantFlyer"] and currData["tolerantFlyer"] then | |
| 496 | useNew = false | |
| 497 | ||
| 498 | elseif data["caveDwelling"] and not currData["caveDwelling"] then | |
| 499 | useNew = true | |
| 500 | elseif not data["caveDwelling"] and currData["caveDwelling"] then | |
| 501 | useNew = false | |
| 502 | ||
| 503 | elseif toleranceTable[data["toleranceTemperature"]] > toleranceTable[currData["toleranceTemperature"]] then | |
| 504 | useNew = true | |
| 505 | elseif toleranceTable[data["toleranceTemperature"]] < toleranceTable[currData["toleranceTemperature"]] then | |
| 506 | useNew = false | |
| 507 | ||
| 508 | elseif toleranceTable[data["toleranceHumidity"]] > toleranceTable[currData["toleranceHumidity"]] then | |
| 509 | useNew = true | |
| 510 | elseif toleranceTable[data["toleranceHumidity"]] < toleranceTable[currData["toleranceHumidity"]] then | |
| 511 | useNew = false | |
| 512 | ||
| 513 | end | |
| 514 | end | |
| 515 | end | |
| 516 | if useNew then | |
| 517 | bestDrone = slot | |
| 518 | currScore = score | |
| 519 | currData = data | |
| 520 | end | |
| 521 | return score, useNew | |
| 522 | end | |
| 523 | ||
| 524 | function log2(num) | |
| 525 | return num == 0 and 0.0 or math.log(num)/math.log(2) | |
| 526 | end | |
| 527 | ||
| 528 | function analyzeBees() | |
| 529 | print("analyzing "..countBees.." bees...")
| |
| 530 | local score = 0 | |
| 531 | local useNew = false | |
| 532 | print() | |
| 533 | print("typ species f spd n f c tmp hmd score")
| |
| 534 | print("-|-|-------|-|---|-|-|-|---|---|-----")
| |
| 535 | for i = 1, countBees do | |
| 536 | turtle.select(i) | |
| 537 | while not s.suckSneaky(0,1) do | |
| 538 | sleep(5) | |
| 539 | end | |
| 540 | turtle.turnRight() | |
| 541 | turtle.drop() | |
| 542 | m = peripheral.wrap("front")
| |
| 543 | data = m.analyze() | |
| 544 | data["speciesPrimary"] = fixName(data["speciesPrimary"]) | |
| 545 | data["speciesSecondary"] = fixName(data["speciesSecondary"]) | |
| 546 | io.write(i.." ") | |
| 547 | if (data["type"] == "princess") then | |
| 548 | princess = i | |
| 549 | princessData = data | |
| 550 | io.write("P ")
| |
| 551 | useNew = false | |
| 552 | score = 0 | |
| 553 | else | |
| 554 | io.write("d ")
| |
| 555 | score, useNew = determineBest(i) | |
| 556 | end | |
| 557 | io.write(data["speciesPrimary"]:gsub("bees%.species%.",""):sub(1,3)..":"..data["speciesSecondary"]:gsub("bees%.species%.",""):sub(1,3).." ")
| |
| 558 | io.write(tostring(data["fertility"]).." ") | |
| 559 | io.write(data["speed"] == 1 and "1.0 " or tostring(data["speed"]).." ") | |
| 560 | if data["nocturnal"] then | |
| 561 | io.write("n ")
| |
| 562 | else | |
| 563 | io.write(" ")
| |
| 564 | end | |
| 565 | if data["tolerantFlyer"] then | |
| 566 | io.write("f ")
| |
| 567 | else | |
| 568 | io.write(" ")
| |
| 569 | end | |
| 570 | if data["caveDwelling"] then | |
| 571 | io.write("c ")
| |
| 572 | else | |
| 573 | io.write(" ")
| |
| 574 | end | |
| 575 | io.write(toleranceString[data["toleranceTemperature"]]) | |
| 576 | io.write(toleranceString[data["toleranceHumidity"]]) | |
| 577 | io.write(string.format("%5.1d", log2(score)).." ")
| |
| 578 | if useNew then | |
| 579 | io.write("*")
| |
| 580 | droneData = data | |
| 581 | end | |
| 582 | print() | |
| 583 | turtle.suck() | |
| 584 | turtle.turnLeft() | |
| 585 | end | |
| 586 | if princess ~= 0 then | |
| 587 | print("breeding princess ("..princess..") with drone ("..bestDrone..")")
| |
| 588 | else | |
| 589 | print("no princess")
| |
| 590 | end | |
| 591 | print() | |
| 592 | end | |
| 593 | ||
| 594 | function dropExcess() | |
| 595 | for i = 1, 16 do | |
| 596 | turtle.select(i) | |
| 597 | turtle.dropDown() | |
| 598 | end | |
| 599 | end | |
| 600 | ||
| 601 | -- Drop same drones so they won't interfere | |
| 602 | function dropDupe() | |
| 603 | for i = 1, countBees do | |
| 604 | turtle.select(i) | |
| 605 | local count = turtle.getItemCount(i) | |
| 606 | if count > 1 then | |
| 607 | print("dropping "..tostring(turtle.getItemCount(i)-1).." excess drones...")
| |
| 608 | turtle.dropDown(count - 1) | |
| 609 | end | |
| 610 | end | |
| 611 | turtle.select(1) | |
| 612 | end | |
| 613 | ||
| 614 | function isPurebred() | |
| 615 | if princessData["speciesPrimary"] ~= princessData["speciesSecondary"] then | |
| 616 | return false | |
| 617 | end | |
| 618 | for key, value in pairs(princessData) do | |
| 619 | if value ~= droneData[key] and key ~= "territory" and key ~= "type" then | |
| 620 | return false | |
| 621 | end | |
| 622 | end | |
| 623 | return true | |
| 624 | end | |
| 625 | ------============================= | |
| 626 | ||
| 627 | -- clear out system | |
| 628 | while turtle.detect() do | |
| 629 | turtle.turnRight() | |
| 630 | end | |
| 631 | local i = 1 | |
| 632 | turtle.select(i) | |
| 633 | while turtle.getItemCount(i) > 0 do | |
| 634 | i = i + 1 | |
| 635 | turtle.select(i) | |
| 636 | end | |
| 637 | turtle.turnRight() | |
| 638 | while s.suckSneaky(0,1) do | |
| 639 | i = i + 1 | |
| 640 | turtle.select(i) | |
| 641 | end | |
| 642 | turtle.turnRight() | |
| 643 | turtle.suck() | |
| 644 | turtle.turnRight() | |
| 645 | while turtle.suck() do | |
| 646 | end | |
| 647 | ||
| 648 | -- start breeding loop | |
| 649 | while true do | |
| 650 | currslot = 1 | |
| 651 | princess = 0 | |
| 652 | bestDrone = 0 | |
| 653 | data = {}
| |
| 654 | currData = {}
| |
| 655 | princessData = {}
| |
| 656 | droneData = {}
| |
| 657 | countBees = 0 | |
| 658 | currScore = 0 | |
| 659 | ||
| 660 | getBees() | |
| 661 | ditchCombs() | |
| 662 | if (turtle.getItemCount(2) > 0) then | |
| 663 | dropDupe() | |
| 664 | scanBees() | |
| 665 | analyzeBees() | |
| 666 | if countBees <= 2 and isPurebred() then | |
| 667 | print("Bees are purebred")
| |
| 668 | turtle.turnLeft() | |
| 669 | return | |
| 670 | end | |
| 671 | if needsUpdate == "" then | |
| 672 | turtle.turnRight() | |
| 673 | turtle.turnRight() | |
| 674 | if princess ~= 0 then | |
| 675 | returnBees() | |
| 676 | dropExcess() | |
| 677 | else | |
| 678 | needPrincess = true | |
| 679 | end | |
| 680 | else | |
| 681 | turtle.turnLeft() | |
| 682 | print("Please add new species to bee table: "..needsUpdate)
| |
| 683 | return | |
| 684 | end | |
| 685 | end | |
| 686 | sleep(5) | |
| 687 | end |