This commit is contained in:
Crispy 2025-06-22 00:08:46 +02:00
parent f8fd2513c8
commit 491112768c
27 changed files with 1095 additions and 3537 deletions

File diff suppressed because it is too large Load diff

4
computer/11/.settings Normal file
View file

@ -0,0 +1,4 @@
{
[ "motd.enable" ] = false,
[ "motd.path" ] = "/rom/motd.txt:/motd.txt:/rom/cccbridge_motd.txt",
}

1
computer/11/oilrig.txt Normal file
View file

@ -0,0 +1 @@
9

23
computer/11/square.lua Normal file
View file

@ -0,0 +1,23 @@
turtle.forward()
right = true
function turn()
if right then
turtle.turnRight()
else
turtle.turnLeft()
end
end
for row = 1, 5 do
for block = 1, 16 do
turtle.placeDown()
turtle.forward()
end
turn()
turtle.forward()
turn()
turtle.forward()
right = not right
end

View file

@ -1,26 +1,26 @@
return { return {
{ {
name = "water", name = "water",
amount = 25900, amount = 1409400,
}, },
{ {
name = "blood", name = "blood",
amount = 50, amount = 4050,
}, },
{ {
name = "molten_brass", name = "molten_brass",
amount = 42, amount = 2991,
}, },
{ {
name = "lava", name = "lava",
amount = 1450, amount = 162000,
}, },
{ {
name = "molten_silver", name = "molten_silver",
amount = 55.555, amount = 31500,
}, },
{ {
name = "still_milk", name = "molten_copper",
amount = 0, amount = 0,
}, },
{ {
@ -29,7 +29,7 @@ return {
}, },
{ {
name = "molten_rose_gold", name = "molten_rose_gold",
amount = 0, amount = 9000,
}, },
{ {
amount = 0, amount = 0,

View file

@ -2,6 +2,8 @@ require("pathfinding")
pretty = require("cc.pretty") pretty = require("cc.pretty")
pp = pretty.pretty_print pp = pretty.pretty_print
tankCapacity = 2 * 10 * 81000
isFluid = { isFluid = {
water = true, water = true,
lava = true, lava = true,
@ -70,7 +72,7 @@ end
function getFluidAmountInTanks(type, tanks) function getFluidAmountInTanks(type, tanks)
for _, fluid in pairs(tanks) do for _, fluid in pairs(tanks) do
if stripModname(fluid.name) == type then if stripModname(fluid.name) == type then
return fluid.amount return mb2droplet(fluid.amount)
end end
end end
return 0 return 0
@ -91,14 +93,6 @@ end
function resetAllFluidDevices() function resetAllFluidDevices()
pumpToDevices(false) pumpToDevices(false)
pumpToTanks(false) pumpToTanks(false)
-- for name, pos in pairs(fluidDevicePos) do
-- goTo(pos)
-- setRedRouter(false)
-- end
-- for x = 2, -4, -1 do
-- goTo(vector.new(x, 0, -1))
-- setRedRouter(false)
-- end
end end
function selectFluidDevice(name) function selectFluidDevice(name)
@ -159,14 +153,20 @@ function connectTank(name)
end end
function fluidInvAdd(name, amount) function fluidInvAdd(name, amount)
print("added", amount, "to", name) print("added", droplet2string(amount), "to", name)
for index, tank in pairs(_G.fluidTanks) do for index, tank in pairs(_G.fluidTanks) do
if tank.name == name then if tank.name == name then
tank.amount = tank.amount + amount tank.amount = tank.amount + amount
if tank.amount < 1 then if tank.amount < 1 then
tank.amount = 0 tank.amount = 0
end end
-- TODO limit capacity if tank.amount > tankCapacity then
tank.amount = tankCapacity
if name ~= "water" then
error("Warning: tank capacity for " ..
name .. "(tank " .. index .. ") exceeded by " .. droplet2string(tank.amount - tankCapacity))
end
end
end end
end end
saveFluids() saveFluids()

View file

@ -114,3 +114,13 @@ function takeDepot()
turtle.suckDown() turtle.suckDown()
end end
function emptyInventory()
for i = 1, 16 do
if turtle.getItemCount(i) ~= 0 then
turtle.select(i)
chest_items = pFront("items")
turtle.drop()
end
end
end

View file

@ -162,8 +162,8 @@ function alloy(parts, product)
pumpToDevices(true) pumpToDevices(true)
goTo(mixer_pos, "south") goTo(mixer_pos, "south")
-- wait for 1B or tank content is in the mixer -- wait for 1B or tank content is in the mixer
expected_amount = math.min(getFluidAmount(fluid.name), 1000) expected_amount = math.min(getFluidAmount(fluid.name), 81000)
print("waiting for", expected_amount, fluid.name, "in mixer") print("waiting for", droplet2string(expected_amount), fluid.name, "in mixer")
while getFluidAmountInTanks(fluid.name, pFront("tanks")) < expected_amount do while getFluidAmountInTanks(fluid.name, pFront("tanks")) < expected_amount do
sleep(0.1) sleep(0.1)
end end
@ -191,13 +191,13 @@ function alloy(parts, product)
end end
pumpToTanks(false) pumpToTanks(false)
if stripModname(fluid.name) == product then if stripModname(fluid.name) == product then
fluidInvAdd(product, fluid.amount) fluidInvAdd(product, mb2droplet(fluid.amount))
created_amount = fluid.amount created_amount = fluid.amount
end end
end end
end end
for _, fluid in pairs(parts) do for _, fluid in pairs(parts) do
fluidInvAdd(fluid.name, -created_amount) fluidInvAdd(fluid.name, -mb2droplet(created_amount))
end end
end end
@ -226,7 +226,7 @@ function mix(extra_items, product, yield)
end end
end end
if #fluids > 0 then if #fluids > 0 then
print("mixing with fluids", fluids[1]) print("mixing with fluid", fluids[1].name)
selectFluidDevice("mixer") selectFluidDevice("mixer")
connectTank(fluids[1].name) connectTank(fluids[1].name)
pumpToDevices(true) pumpToDevices(true)
@ -335,8 +335,8 @@ function cast_ingot(source, product, yield)
until done_filling until done_filling
pumpToDevices(false) pumpToDevices(false)
local fluid_in_melter = melter_tank.amount local fluid_in_melter = melter_tank.amount
local ingot_count = math.floor(fluid_in_melter / 111) local ingot_count = math.floor(fluid_in_melter / 9000)
local leftover = fluid_in_melter - ingot_count * 111.11 local leftover = fluid_in_melter - ingot_count * 9000
print("expecting", ingot_count, "ingots") print("expecting", ingot_count, "ingots")
goTo(casting_pos, "west") goTo(casting_pos, "west")
for i = 1, ingot_count do for i = 1, ingot_count do
@ -356,7 +356,7 @@ function cast_ingot(source, product, yield)
sleep(5) sleep(5)
pumpToTanks(false) pumpToTanks(false)
end end
fluidInvAdd(fluid.name, -(ingot_count * 111)) fluidInvAdd(fluid.name, -(ingot_count * 9000))
end end
function rolling_mill(extra_items) function rolling_mill(extra_items)

View file

@ -57,6 +57,9 @@ end
function goForward() function goForward()
if turtle.forward() then if turtle.forward() then
_G.pos = _G.pos + vecOf[_G.facing] _G.pos = _G.pos + vecOf[_G.facing]
if math.random(10) > 9 then
meow()
end
else else
printError("failed to go forward") printError("failed to go forward")
printError(pos) printError(pos)

View file

@ -1,7 +1,44 @@
pp = require("cc.pretty").pretty_print pp = require("cc.pretty").pretty_print
require("stringshit") require("stringshit")
require("fluids")
recipes = {} recipes = {}
local knownAmounts = {}
knownAmounts["111"] = 9000
knownAmounts["222"] = 18000
knownAmounts["333"] = 27000
knownAmounts["444"] = 36000
knownAmounts["41.6"] = 3375 -- 500mB / 12
knownAmounts["41"] = 3375 -- 500mB / 12
knownAmounts["12"] = 1000
function mb2droplet(amount)
return math.floor(amount * 81 + 0.5)
end
function droplet2mb(amount)
return amount / 81
end
function droplet2string(droplets)
local mb = droplet2mb(droplets)
local out = tostring(math.floor(mb))
-- local frac = math.fmod(mb, 1)
-- if frac > 0 then
-- out = out .. ""
-- end
out = out .. " mB"
return out
end
function parseFluidAmount(text)
-- local parts = splitString(text, "*")
if knownAmounts[text] then
return knownAmounts[text]
end
return mb2droplet(tonumber(text))
end
function read_recipe(file) function read_recipe(file)
product = file.readLine() product = file.readLine()
if product == nil then return nil end if product == nil then return nil end
@ -20,6 +57,9 @@ function read_recipe(file)
repeats = tonumber(string.sub(line, 8)) repeats = tonumber(string.sub(line, 8))
elseif string.sub(line, 1, 6) == "yield " then elseif string.sub(line, 1, 6) == "yield " then
yield = tonumber(string.sub(line, 7)) yield = tonumber(string.sub(line, 7))
if isFluid[product] then
yield = parseFluidAmount(yield)
end
elseif line == "steps:" then elseif line == "steps:" then
break break
end end
@ -35,9 +75,14 @@ function read_recipe(file)
extra_items = {} extra_items = {}
for i = 2, #words do for i = 2, #words do
itemdata = splitString(words[i], ":") itemdata = splitString(words[i], ":")
if isFluid[itemdata[1]] and itemdata[2] then
amount = parseFluidAmount(itemdata[2])
else
amount = tonumber(itemdata[2]) or 1
end
table.insert(extra_items, { table.insert(extra_items, {
name = itemdata[1], name = itemdata[1],
count = tonumber(itemdata[2] or 1) count = amount
}) })
end end
table.insert(steps, { table.insert(steps, {

View file

@ -17,15 +17,15 @@ furnace kelp:8
polished_rose_quartz polished_rose_quartz
base rose_quartz base rose_quartz
steps: steps:
deploy_tool sand_paper deploy_tool diamond_grit_sandpaper
rose_quartz rose_quartz
steps: steps:
craft quartz redstone redstone redstone redstone redstone redstone redstone redstone craft quartz redstone redstone redstone redstone redstone redstone redstone redstone
sand_paper diamond_grit_sandpaper
steps: steps:
craft sand paper craft diamond_dust paper
paper paper
base sugar_cane base sugar_cane
@ -415,7 +415,7 @@ base electron_tube
intermediate incomplete_redstone_chip intermediate incomplete_redstone_chip
repeat 12 repeat 12
steps: steps:
spout molten_copper:41.6 spout molten_copper:41
deploy iron_wire deploy iron_wire
press press
@ -511,33 +511,18 @@ yield 111
steps: steps:
melt melt
integrated_circuit_deprecated
base lapis_sheet
intermediate transitional_lapis_sheet
repeat 4
steps:
spout molten_silver:41.6
deploy copper_wire
deploy copper_wire
press
lapis_sheet
base lapis_block
steps:
press
copper_wire copper_wire
base copper_sheet base copper_sheet
yield 2 yield 2
steps: steps:
rolling_mill rolling_mill
lapis_block
steps:
craft lapis_lazuli lapis_lazuli lapis_lazuli lapis_lazuli lapis_lazuli lapis_lazuli lapis_lazuli lapis_lazuli lapis_lazuli
water_bucket water_bucket
base bucket base bucket
steps: steps:
spout water:1000 spout water:1000
brass_tunnel
yield 2
steps:
craft electron_tube nil nil brass_ingot brass_ingot nil rubber rubber

View file

@ -13,5 +13,10 @@ return {
speaker.playNote("didgeridoo", volume, 6) speaker.playNote("didgeridoo", volume, 6)
sleep(0.2) sleep(0.2)
speaker.playNote("didgeridoo", volume, 3) speaker.playNote("didgeridoo", volume, 3)
end,
eat = function ()
speaker.playSound("entity.generic.eat")
sleep(0.1)
speaker.playSound("entity.generic.eat")
end end
} }

View file

@ -1,5 +1,8 @@
term.clear() term.clear()
term.setCursorPos(1,1) term.setCursorPos(1,1)
_G.meow = function()
peripheral.call("left","playSound","entity.cat.ambient")
end
parallel.waitForAny( parallel.waitForAny(
function() function()
shell.run("shell") shell.run("shell")
@ -8,7 +11,8 @@ parallel.waitForAny(
while true do while true do
os.pullEvent("turtle_inventory") os.pullEvent("turtle_inventory")
if math.random(100) > 95 then if math.random(100) > 95 then
peripheral.call("left","playSound","entity.cat.ambient") meow()
--peripheral.call("left","playSound","entity.cat.ambient")
end end
end end
end end

View file

@ -1,9 +1,11 @@
-casting -casting
-use droplets for liquid amounts
stock keeping stock keeping
keep spout filled during repeated operations
multi-item crafting multi-item crafting
push items into existing stacks in chest push items into existing stacks in chest
pull items from multiple stacks if necessary pull items from multiple stacks if necessary
refuel self -refuel self
refuel furnace refuel furnace
delivery turtle delivery turtle

View file

@ -73,6 +73,7 @@ function doRecipe(recipe)
if got_items then if got_items then
selectItem("charcoal") selectItem("charcoal")
turtle.refuel() turtle.refuel()
sfx.eat()
else else
sfx.fail() sfx.fail()
print("no charcoal found, please add some") print("no charcoal found, please add some")

4
computer/18/.settings Normal file
View file

@ -0,0 +1,4 @@
{
[ "motd.enable" ] = false,
[ "motd.path" ] = "/rom/motd.txt:/motd.txt:/rom/cccbridge_motd.txt",
}

21
computer/23/startup.lua Normal file
View file

@ -0,0 +1,21 @@
dropoff = peripheral.wrap("top")
while true do
item = dropoff.getItemDetail(1)
if item and item.count > 32 then
repeat
item = dropoff.getItemDetail(1)
until not item or (item.count < 10)
end
bonemeal = turtle.getItemCount(1)
turtle.select(1)
for i = 2,bonemeal do
turtle.place()
end
while turtle.suck() do end
for i = 2,16 do
turtle.select(i)
turtle.dropUp(turtle.getItemCount()-1)
end
end

11
computer/24/remove.lua Normal file
View file

@ -0,0 +1,11 @@
function step()
if turtle.dig()then
turtle.forward()
return true
end
turtle.turnLeft()
turtle.forward()
turtle.turnRight()
return turtle.detect()
end
while step() do end

22
computer/24/startup.lua Normal file
View file

@ -0,0 +1,22 @@
rednet.open("left")
forward = {}
for i,v in pairs(term.native()) do
forward[i] = function(...)
rednet.send(5,{i,{...}})
return v(...)
end
end
term.redirect(forward)
parallel.waitForAny(
function()
shell.run("shell")
end,
function()
while true do
id,message,protocol =
rednet.receive("pocketevent")
os.queueEvent(unpack(message))
end
end
)
shell.exit()

31
computer/24/stupid.lua Normal file
View file

@ -0,0 +1,31 @@
for y = 1, 100 do
for q = 1, 4 do
for i = 1,5 do
turtle.digDown()
turtle.forward()
end
turtle.turnLeft()
turtle.forward()
turtle.digDown()
turtle.turnRight()
turtle.forward()
turtle.digDown()
turtle.forward()
turtle.turnLeft()
turtle.forward()
turtle.digDown()
turtle.forward()
turtle.turnRight()
turtle.forward()
turtle.digDown()
turtle.turnLeft()
turtle.forward()
turtle.digDown()
turtle.turnRight()
turtle.forward()
turtle.turnLeft()
turtle.forward()
end
turtle.down()
turtle.refuel()
end

53
computer/3/felling Normal file
View file

@ -0,0 +1,53 @@
trees = {
vector.new(-12,193,174),
vector.new(-6,191,165),
vector.new(-5,194,172),
vector.new(-11,189,162),
vector.new(-16,187,161),
vector.new(-9,188,156),
vector.new(-17,185,154),
vector.new(-9,186,149),
vector.new(-13,183,146),
vector.new(-7,183,143),
vector.new(0,186,144),
vector.new(-3,189,153),
vector.new(0,191,161),
vector.new(3,193,168),
vector.new(4,190,155),
vector.new(4,189,150)
}
pf = require("pathfinding")
im = require("inventorymanager")
function fell(index)
im.select("techreborn:rubber_sapling")
pf.lookat(trees[index or math.random(#trees)])
has, data = turtle.inspect()
--print(has,data)
if
has and data.name ==
"techreborn:rubber_log"
then
turtle.dig()
turtle.forward()
height = 0
while turtle.digUp() do
turtle.up()
height = height + 1
end
for i = 1,height do
turtle.down()
end
turtle.back()
end
turtle.place()
end
for i = 1,#trees do
fell(i)
end
pf.to(pf.home+vector.new(0,10,0))
pf.returnHome()

9
computer/3/ref.lua Normal file
View file

@ -0,0 +1,9 @@
depot = peripheral.wrap("front")
while true do
turtle.refuel()
turtle.dropUp()
depot.pullItem("top")
sleep(2)
depot.pushItem("top")
turtle.suckUp()
end

56
computer/5/both Normal file
View file

@ -0,0 +1,56 @@
W = window.create(term.native(),5,10,10,13)
W2 = window.create(term.native(),35,10,10,13)
--W.setBackgroundColor(colors.lightGray)
--W.setTextColor(colors.black)
W.clear()
W2.clear()
function scoundrilmirror()
while true do
--local x,y = W.getCursorPos()
--paintutils.drawBox(4,9,46,23,colors.gray)
--W.setBackgroundColor(colors.brown)
--W.setTextColor(colors.pink)
id,mess = rednet.receive()
if id == 4 then
W[mess[1]](unpack(mess[2]))
end
--W.setCursorPos(x,y)
--paintutils.drawBox(4,9,46,23,colors.gray)
end
end
function theifmirror()
while true do
id,mess = rednet.receive()
if id == 3 then
W2[mess[1]](unpack(mess[2]))
end
end
end
function eventmirror()
while true do
event = {os.pullEventRaw()}
if event[1] == "rednet_message" then
elseif event[1] == "modem_message" then
else
rednet.send(
4,
event,
"pocketevent"
)
rednet.send(
3,
event,
"pocketevent"
)
--print(event)
end
end
end
parallel.waitForAll(
scoundrilmirror,
theifmirror,
eventmirror
)

40
computer/5/julias Normal file
View file

@ -0,0 +1,40 @@
W = window.create(term.native(),5,10,39,13)
--W.setBackgroundColor(colors.lightGray)
--W.setTextColor(colors.black)
W.clear()
function juliamirror()
while true do
--local x,y = W.getCursorPos()
--paintutils.drawBox(4,9,46,23,colors.gray)
--W.setBackgroundColor(colors.brown)
--W.setTextColor(colors.pink)
id,mess = rednet.receive()
if id == 24 then
W[mess[1]](unpack(mess[2]))
end
--W.setCursorPos(x,y)
--paintutils.drawBox(4,9,46,23,colors.gray)
end
end
function eventmirror()
while true do
event = {os.pullEventRaw()}
if event[1] == "rednet_message" then
elseif event[1] == "modem_message" then
else
rednet.send(
24,
event,
"pocketevent"
)
--print(event)
end
end
end
parallel.waitForAll(
juliamirror,
eventmirror
)

21
disk/4/mirror Normal file
View file

@ -0,0 +1,21 @@
forward = {}
for i,v in pairs(term.native()) do
forward[i] = function(...)
rednet.send(5,{i,{...}})
return v(...)
end
end
term.redirect(forward)
parallel.waitForAny(
function
shell.run("shell")
end,
function
while true do
id,message,protocol =
rednet.receive("pocketevent")
os.queueEvent(unpack(message))
end
end
)
shell.exit()

2
disk/4/startup.lua Normal file
View file

@ -0,0 +1,2 @@
fs.copy("disk/mirror","startup.lua")

View file

@ -1,6 +1,6 @@
{ {
"computer": 23, "computer": 26,
"disk": 3, "disk": 4,
"peripheral.create:fluid_tank": 2, "peripheral.create:fluid_tank": 2,
"peripheral.create:item_vault": 0, "peripheral.create:item_vault": 0,
"peripheral.create:chute": 0, "peripheral.create:chute": 0,