turtles/mine/server.lua
2020-07-08 01:44:15 +02:00

117 lines
3.6 KiB
Lua

rednet.open("back")
state = {}
ores = {}
thelog = {"", "", "", "", "", "", "", ""}
logsize = 6
logpos = 1
curjob = 69
firstjob = nil
totalfuel = 0
function getNextJob()
curjob = curjob + 1
return curjob - 1
end
function getOres(ore)
return ores[ore] or 0
end
function drawState()
-- server has 19x50 terminal
print(" [ Server Control Panel ]")
print()
print(" First Job: "..tostring(firstjob))
print(" Current Job: "..tostring(curjob))
print(" Fuel consumed: "..tostring(totalfuel).." ("..tostring(math.ceil(totalfuel/80))..")")
print()
n1 = tostring(getOres("minecraft:coal_ore"))
n2 = tostring(getOres("minecraft:iron_ore"))
n3 = tostring(getOres("minecraft:gold_ore"))
n4 = tostring(getOres("minecraft:lapis_ore"))
n5 = tostring(getOres("minecraft:redstone_ore"))
n6 = tostring(getOres("minecraft:emerald_ore"))
n7 = tostring(getOres("minecraft:diamond_ore"))
n8 = tostring(getOres("mekanism:tin_ore"))
n9 = tostring(getOres("mekanism:copper_ore"))
n10 = tostring(getOres("mekanism:osmium_ore"))
n11 = tostring(getOres("create:zinc_ore"))
n12 = tostring(getOres("create:copper_ore"))
print(" C I G "..n1.." "..n2.." "..n3)
print(" L R E D "..n4.." "..n5.." "..n6.." "..n7)
print(" T C O "..n8.." "..n9.." "..n10)
print(" Z C "..n11.." "..n12)
print()
print("--------------------------------------------------")
for i = logpos, (logpos + logsize - 1) do
print(thelog[((i-1) % logsize)+1]) -- map from 0..n-1 to 1..n
end
end
function log(s)
thelog[logpos] = s
logpos = logpos + 1
drawState()
end
while true do
log("From what index do you want to resume jobs?")
x = read()
if tonumber(x) then
curjob = tonumber(x)
firstjob = tonumber(x)
break
end
log("That's not a number.")
end
while true do
sender, message, proto = rednet.receive()
if not message then
sleep(0.6)
else
if message == "syn" then
receiver = sender
rednet.send(receiver, "ack")
_, message, _ = rednet.receive()
if message then
if message == "gibjob" then
if rs.getInput("top") then
job = getNextJob()
rednet.send(receiver, tostring(job))
log("Found job request. Offering "..tostring(job))
else
rednet.send(receiver, "nojobs")
end
drawState()
elseif message == "report" then
_, job, _ = rednet.receive()
thejob = tonumber(job)
_, fuel, _ = rednet.receive()
thefuel = tonumber(fuel)
totalfuel = totalfuel + thefuel
while true do
_, ore, _ = rednet.receive()
if ore == "done" then
break
end
_, number, _ = rednet.receive()
--thenumber = tonumber(thenumber)
if ores[ore] then
ores[ore] = ores[ore] + tonumber(number)
else
ores[ore] = tonumber(number)
end
drawState()
end
rednet.send(receiver, "thanks")
end
end
end
end
end