SHOW:
|
|
- or go back to the newest paste.
| 1 | - | local ae = peripheral.find("tileinterface")
|
| 1 | + | --# Program Config |
| 2 | local turtleFromDrawerDirection = "north" | |
| 3 | - | local a = peripheral.find("tt_aspectanlyzer")
|
| 3 | + | local turtleFromChestLocation = "south" |
| 4 | - | local c = peripheral.find("chest") or peripheral.find("iron")
|
| 4 | + | |
| 5 | local programRestartInterval = 1.00 -- Program run interval | |
| 6 | - | for i,v in pairs(d) do |
| 6 | + | local maxEssentiaAmount = 2000 |
| 7 | - | print(i) |
| 7 | + | local maxEssentiaAmountMessages = false |
| 8 | ||
| 9 | --### ONLY MODFIY BELOW IF YOU KNOW WHAT YOU ARE DOING | |
| 10 | - | local items = {}
|
| 10 | + | --------------------------------------------------------------------------------------------------------------- |
| 11 | --### Static list of items containing specific essentia | |
| 12 | - | for i,v in pairs(items) do |
| 12 | + | local itemHashList = {
|
| 13 | - | for z,t in pairs(v) do |
| 13 | + | -- Etheal Essence |
| 14 | - | write(z) |
| 14 | + | ["f36968d453592c101629ff03dbbfee26"] = "machina", |
| 15 | - | write(" : ")
|
| 15 | + | ["d5a708b5e6cf0f421e7dc9355d304dae"] = "ira", |
| 16 | - | print(t) |
| 16 | + | ["9124a2acb4161cb0484ccc06924c8e5c"] = "vinculum", |
| 17 | ["69f0f950fc1af7fe3b5cd76b96fe2a12"] = "tempus", | |
| 18 | - | print("---")
|
| 18 | + | ["951cbfb1ee185cc2a0db21a7ee5c4658"] = "herba", |
| 19 | - | for z,t in pairs(v["fingerprint"]) do |
| 19 | + | ["2e0923f828ce335b6356bf1fde489986"] = "instrumentum", |
| 20 | - | write(z) |
| 20 | + | ["404d0f64c5aeb1fecc174850bf606a0f"] = "arbor", |
| 21 | - | write(" : ")
|
| 21 | + | ["aa7b17df81fa0be6959f653e259d6a49"] = "meto", |
| 22 | - | print(t) |
| 22 | + | ["6a7f52f93c5b4558bdbfe12e52ea0209"] = "fabrico", |
| 23 | ["7168677549d5906cd2fee78349113047"] = "invidia", | |
| 24 | - | return |
| 24 | + | ["74d6ce35611a333020364e921b5864bf"] = "pannus", |
| 25 | - | -- print(v["fingerprint"]["id"]) |
| 25 | + | ["2cf039eb58826a770024b859478bdf13"] = "desidia", |
| 26 | - | end |
| 26 | + | ["50a0d85a9992ecdb9efce7d8a5fc7b15"] = "vitium", |
| 27 | ["1100f8a3629369e4bd219f2b30d978ac"] = "messis", | |
| 28 | ["4b3878326e97bda1f0c8f02d43e1f724"] = "limus", | |
| 29 | ["3306eb2763dcd8bee9f4e77aa3a916bc"] = "perfodio", | |
| 30 | ["4058af44332d4a3c020ba28595eafe09"] = "tempestas", | |
| 31 | ["33992e4570fb0c5a46061cfe0a0f1550"] = "volatus", | |
| 32 | ["1e995bd21733e006a757af6511adeb14"] = "motus", | |
| 33 | ["c1266ba6956c8507b976ed0af0fe921c"] = "tenebrae", | |
| 34 | ["2d46425f72b47ee82e008df41fe44ff0"] = "fames", | |
| 35 | ["62ab1d0d4ce536081358faa06507f2a8"] = "superbia", | |
| 36 | ["d428fcfe78d4f204a1b7d7c88c597f4d"] = "lucrum", | |
| 37 | ["8e8405341043a4dc957058fea34f7fde"] = "gula", | |
| 38 | ["96e68bba97a9197b08e8b218f89f6cd1"] = "praecantatio", | |
| 39 | ["4b753601ce070e02ae12c0744afa8b01"] = "sensus", | |
| 40 | ["cc1b1319bed11adb3fb1133cfce0a9fc"] = "auram", | |
| 41 | ["c22f882f5d3ad66818112f7e109ed065"] = "humanus", | |
| 42 | ["1490e650a531f04fb231561dfb3cbc1c"] = "vacuos", | |
| 43 | ["b30a393ba36c2914da2124e0c15ba6c6"] = "metallum", | |
| 44 | ["651ed7f8722d8528927ffeb78c3b36af"] = "lux", | |
| 45 | ["503677942dd95011d466c40d7b305e4e"] = "mortuus", | |
| 46 | ["ef0a022b50093731e91c1775e9a6b2c4"] = "telum", | |
| 47 | ["552c659fd588d96f66fd2ad07a4948c6"] = "luxuria", | |
| 48 | ["b39c13da67e0f8fc6a1b415281dc1eb7"] = "tutamen", | |
| 49 | ["76fca4fc64045eb94d1e8eb9ef6d5721"] = "infernus", | |
| 50 | ["f37ca1c21238fb6d1a803ff3697bae37"] = "iter", | |
| 51 | ["6e496450ecf5f1366f504787abc1a7ce"] = "exanimis", | |
| 52 | ["ec96883e36124223662ee4b55e00ac43"] = "alienis", | |
| 53 | ["1af1aa4c0de6f05411c2921f8ea49ada"] = "cognitio", | |
| 54 | ["2e3aaf69f3b0eb9dc91d649ebfd7a6d6"] = "ordo", | |
| 55 | ["dfb1cc975c8f94b2743ac3d5271869a1"] = "potentia", | |
| 56 | ["665401c955afa0b1d77a63a9b8421b37"] = "perditio", | |
| 57 | ["69e96cbd20cf95621d1194fe3b700c5b"] = "permutatio", | |
| 58 | ["8bd1142ca027f3f3f2a7ea86420a4be7"] = "spiritus", | |
| 59 | ["fa69d331cb2d38384e02086c506eaa43"] = "bestia", | |
| 60 | ["dccfa897b53c2b437372cbb24c6e09b3"] = "sano", | |
| 61 | ["fc82a45802f77b91a76fa9f951de83bd"] = "corpus", | |
| 62 | ["c633bfdcd33be5dd1a75f6aff84d2ecf"] = "ignis", | |
| 63 | ["46239a9297df5f8f6b074e3735706db6"] = "victus", | |
| 64 | ["1cb399bc43c8bc3b7a6e53ee7c4b2652"] = "aqua", | |
| 65 | ["2ec178e9e6aa8958d7df1af5d3203999"] = "venenum", | |
| 66 | ["964fdc73a1032004ae92c5faaff017f0"] = "aer", | |
| 67 | ["7e83cd135885aa779957eda2a7f0778c"] = "gelum", | |
| 68 | ["f85a995d3cb9a4f606140f2191a5afc6"] = "terra", | |
| 69 | ["b9f3d17344cf347090104b28d49cfce0"] = "vitreus", | |
| 70 | } | |
| 71 | --------------------------------------------------------------------------------------------------------------- | |
| 72 | --### Helper Functions | |
| 73 | ||
| 74 | function firstCharacterUpperCase(str) | |
| 75 | return str:sub(1,1):upper()..str:sub(2) | |
| 76 | end | |
| 77 | ||
| 78 | function itemInfo(item,slot) | |
| 79 | moveFromDrawerToChest(slot,1) | |
| 80 | for i,v in pairs(item) do | |
| 81 | write(i) | |
| 82 | write(":")
| |
| 83 | print(v) | |
| 84 | end | |
| 85 | end | |
| 86 | ||
| 87 | --### Helper Functions | |
| 88 | --------------------------------------------------------------------------------------------------------------- | |
| 89 | --### EssentiaProvider Functions | |
| 90 | local ep = peripheral.find("EssentiaProvider")
| |
| 91 | local essentiaAmount = {}
| |
| 92 | ||
| 93 | if not ep then | |
| 94 | error("\n\nNo EssentiaProvider detected.\nPlace on any side.")
| |
| 95 | end | |
| 96 | ||
| 97 | function checkEssentiaProvider() | |
| 98 | if not ep.isOnline() then | |
| 99 | error("\n\nEssentiaProvider offline.")
| |
| 100 | end | |
| 101 | end | |
| 102 | ||
| 103 | function prepareEssentiaProvider() | |
| 104 | checkEssentiaProvider() | |
| 105 | local success = ep.registerAsWatcher() | |
| 106 | write("registerAsWatcher() ")
| |
| 107 | if success then | |
| 108 | print("done")
| |
| 109 | else | |
| 110 | print("failed")
| |
| 111 | end | |
| 112 | end | |
| 113 | ||
| 114 | function updateEssentiaAmounts() | |
| 115 | checkEssentiaProvider() | |
| 116 | essentiaAmount = {}
| |
| 117 | local tmpLevel = {ep.getAspects()}
| |
| 118 | ||
| 119 | for i=1,#tmpLevel,2 do | |
| 120 | e = tmpLevel[i] | |
| 121 | n = tmpLevel[i+1] | |
| 122 | essentiaAmount[e:lower()] = n | |
| 123 | end | |
| 124 | end | |
| 125 | ||
| 126 | function getEssentiaAmount(essentia) | |
| 127 | updateEssentiaAmounts() | |
| 128 | return essentiaAmount[essentia] or 0 | |
| 129 | end | |
| 130 | ||
| 131 | function testEssentia(essentia) | |
| 132 | if essentia then | |
| 133 | print(firstCharacterUpperCase(essentia)..":"..getEssentiaAmount(essentia)) | |
| 134 | end | |
| 135 | end | |
| 136 | --### EssentiaProvider Functions | |
| 137 | --------------------------------------------------------------------------------------------------------------- | |
| 138 | --### Drawer Functions | |
| 139 | local d = peripheral.find("storagedrawers_container_controller")
| |
| 140 | local items = {} -- knows which slot to use for which essentia type
| |
| 141 | ||
| 142 | if not d then | |
| 143 | error("\n\nNo drawer controller detected.\nPlace on any side.")
| |
| 144 | end | |
| 145 | ||
| 146 | function scanDrawerInventory() | |
| 147 | slots = {}
| |
| 148 | for slot=1, d.getInventorySize() do -- run through every slot in drawer | |
| 149 | local item = d.getStackInSlot(slot) -- get ItemInformation | |
| 150 | if item then -- item in slot ? | |
| 151 | local hash = item["nbt_hash"] -- get its hash | |
| 152 | local a = itemHashList[hash] -- get essence for that hash | |
| 153 | ||
| 154 | if a then -- hash in itemHashList? | |
| 155 | local tmp = {["slot"] = slot}
| |
| 156 | items[a] = tmp | |
| 157 | else | |
| 158 | print(item["id"].." not in itemHashList !!!") -- that item is not in itemHashList | |
| 159 | itemInfo(item,slot) | |
| 160 | end | |
| 161 | end | |
| 162 | end | |
| 163 | end | |
| 164 | ||
| 165 | function getSlotOfAspectItem(aspect) | |
| 166 | return items[aspect]["slot"] or -1 | |
| 167 | end | |
| 168 | ||
| 169 | function getAmountOfAspectItem(aspect) | |
| 170 | return d.getStackInSlot(items[aspect]["slot"])["qty"] or 0 | |
| 171 | end | |
| 172 | ||
| 173 | --### Drawer Functions | |
| 174 | --------------------------------------------------------------------------------------------------------------- | |
| 175 | --### Chest Functions | |
| 176 | local c = peripheral.find("chest") or peripheral.find("iron") or peripheral.find("crystal")
| |
| 177 | ||
| 178 | if not c then | |
| 179 | error("\n\nNo output chest detected.\nPlace on any side.")
| |
| 180 | end | |
| 181 | ||
| 182 | function allFromTurtleToChest() | |
| 183 | for i=1,16 do | |
| 184 | c.pullItem(turtleFromChestLocation,i) | |
| 185 | end | |
| 186 | end | |
| 187 | ||
| 188 | function fromTurtleToChest(slot) | |
| 189 | c.pullItem(turtleFromChestLocation,slot) | |
| 190 | end | |
| 191 | --### Chest Functions | |
| 192 | --------------------------------------------------------------------------------------------------------------- | |
| 193 | --### Program Functions | |
| 194 | function moveFromDrawerToChest(slot, nrOfItems) | |
| 195 | d.pushItem(turtleFromDrawerDirection, slot, nrOfItems) | |
| 196 | --allFromTurtleToChest() | |
| 197 | fromTurtleToChest(1) | |
| 198 | end | |
| 199 | ||
| 200 | function refillEssentia(aspect, amount) | |
| 201 | local essentiaPerItem = 2 -- 2 hardcoded for etheral essence | |
| 202 | local nrOfItems = math.ceil(amount/essentiaPerItem) | |
| 203 | --print("Try refilling "..amount.." "..firstCharacterUpperCase(aspect).." with "..nrOfItems.." items.")
| |
| 204 | print("Try refilling "..amount.." "..firstCharacterUpperCase(aspect))
| |
| 205 | ||
| 206 | local slot = getSlotOfAspectItem(aspect) | |
| 207 | local stored = getAmountOfAspectItem(aspect) | |
| 208 | if slot ~= nil then | |
| 209 | if stored < nrOfItems then | |
| 210 | print("Too less items to restore all "..amount.." essentia. Only "..stored.." available.")
| |
| 211 | nrOfItems = stored | |
| 212 | end | |
| 213 | --print("Refilling "..firstCharacterUpperCase(aspect).." with "..nrOfItems.." items. / "..nrOfItems*essentiaPerItem.." essentia")
| |
| 214 | print("Refilling "..firstCharacterUpperCase(aspect).." with "..nrOfItems.." items.")
| |
| 215 | moveFromDrawerToChest(slot, nrOfItems) | |
| 216 | else | |
| 217 | print("No Item for "..firstCharacterUpperCase(aspect).." found.")
| |
| 218 | end | |
| 219 | end | |
| 220 | ||
| 221 | function checkForEssentiaRefill(aspect,amount) | |
| 222 | local level = getEssentiaAmount(aspect) | |
| 223 | if amount < 0 then | |
| 224 | if level < maxEssentiaAmount then | |
| 225 | refillEssentia(aspect, -1*amount) | |
| 226 | else | |
| 227 | if printMaxEssentiaAmountMessages then | |
| 228 | print("Reached maxEssentiaAmount for "..firstCharacterUpperCase(aspect).." ("..level.."/"..maxEssentiaAmount..")")
| |
| 229 | end | |
| 230 | end | |
| 231 | else | |
| 232 | -- print message if | |
| 233 | if level < maxEssentiaAmount then | |
| 234 | print(amount.." "..firstCharacterUpperCase(aspect).." refilled.") | |
| 235 | end | |
| 236 | end | |
| 237 | end | |
| 238 | ||
| 239 | --### Program Functions | |
| 240 | --------------------------------------------------------------------------------------------------------------- | |
| 241 | --### Default Main Program Functions | |
| 242 | function preRunProgram() | |
| 243 | checkEssentiaProvider() | |
| 244 | end | |
| 245 | ||
| 246 | function runProgram() | |
| 247 | ||
| 248 | end | |
| 249 | ||
| 250 | ||
| 251 | function postRunProgram() | |
| 252 | ||
| 253 | end | |
| 254 | ||
| 255 | local STOP = false | |
| 256 | local PROGRAM_RUN_TIMER = nil | |
| 257 | function handleEvent(event) | |
| 258 | if event[1] == "timer" and event[2] == PROGRAM_RUN_TIMER then | |
| 259 | preRunProgram() | |
| 260 | runProgram() | |
| 261 | postRunProgram() | |
| 262 | PROGRAM_RUN_TIMER = os.startTimer(programRestartInterval) | |
| 263 | return | |
| 264 | end | |
| 265 | if event[1] == "char" and event[2] == "t" then | |
| 266 | STOP = true | |
| 267 | print("Termination Key detected.\n!!! Terminating the program !!!")
| |
| 268 | return | |
| 269 | end | |
| 270 | if event[1] == "essentia" then | |
| 271 | if event[2] == 1 then | |
| 272 | --essentia event | |
| 273 | checkForEssentiaRefill(event[3]:lower(), event[4]) -- essentia and amount | |
| 274 | return | |
| 275 | end | |
| 276 | if event[2] == 2 then | |
| 277 | --power event | |
| 278 | if event[3] then | |
| 279 | print("EssentiaProvider disconnected from the network")
| |
| 280 | STOP = true | |
| 281 | else | |
| 282 | print("EssentiaProvider connected to the network")
| |
| 283 | end | |
| 284 | return | |
| 285 | end | |
| 286 | if event[2] == 3 then | |
| 287 | --detach event | |
| 288 | STOP = true | |
| 289 | print("Lost connection with EssentiaProvider")
| |
| 290 | return | |
| 291 | end | |
| 292 | end | |
| 293 | ||
| 294 | local ignoreList = {"char", "key", "key_up", "mouse_click", "mouse_up", "mouse_drag", "mouse_scroll", "rednet", "turtle_inventory"}
| |
| 295 | for i,v in pairs(ignoreList) do | |
| 296 | if event[1] == v then | |
| 297 | return | |
| 298 | end | |
| 299 | end | |
| 300 | ||
| 301 | print("unhandeled event:")
| |
| 302 | for i,v in pairs(event) do | |
| 303 | write(i) | |
| 304 | write(":")
| |
| 305 | print(v) | |
| 306 | end | |
| 307 | end | |
| 308 | ||
| 309 | function preLoop() | |
| 310 | term.clear() | |
| 311 | term.setCursorPos(1,1) | |
| 312 | prepareEssentiaProvider() | |
| 313 | scanDrawerInventory() | |
| 314 | print("EssentiaRefiller started")
| |
| 315 | PROGRAM_RUN_TIMER = os.startTimer(0) | |
| 316 | end | |
| 317 | ||
| 318 | function loop() | |
| 319 | while not STOP do | |
| 320 | handleEvent({os.pullEvent()})
| |
| 321 | end | |
| 322 | end | |
| 323 | ||
| 324 | function postLoop() | |
| 325 | ||
| 326 | end | |
| 327 | --### Default Main Program Functions | |
| 328 | --------------------------------------------------------------------------------------------------------------- | |
| 329 | preLoop() | |
| 330 | loop() | |
| 331 | postLoop() |