mirror of
https://github.com/Kiritow/OpenComputerScripts.git
synced 2024-03-22 13:10:46 +08:00
kiritow
2c5bc2f649
Stop buying while destroy factory is busy. Will block until internal buffer is free
118 lines
3.2 KiB
Lua
118 lines
3.2 KiB
Lua
require("libevent")
|
|
require("util")
|
|
local component = require("component")
|
|
local sides = require("sides")
|
|
|
|
-- System buy from player
|
|
|
|
-- Auto configure
|
|
local modem = proxy("modem")
|
|
local trans = proxy("transposer")
|
|
local redgate = proxy("redstone")
|
|
|
|
-- Variables
|
|
local gate_allow = true
|
|
|
|
-- Functions
|
|
|
|
local function init()
|
|
if(modem==nil or trans==nil or redgate==nil) then
|
|
error("Failed on checking devices.")
|
|
end
|
|
|
|
modem.open(10011)
|
|
|
|
redgate.setOutput(sides.east,0) -- open gate
|
|
end
|
|
|
|
local function uninit()
|
|
redgate.setOutput(sides.east,15) -- close gate on stop
|
|
end
|
|
|
|
local function main()
|
|
init()
|
|
|
|
local bus=CreateEventBus()
|
|
bus:listen("bioReader")
|
|
bus:listen("modem_message")
|
|
bus:listen("interrupted")
|
|
|
|
while true do
|
|
print("Item Price:")
|
|
print("Log (yuan mu) : $0.5")
|
|
print("Other : $0.1")
|
|
|
|
local e=bus:next()
|
|
if(e.event=="bioReader") then
|
|
if(not gate_allow) then
|
|
print("Gate is closed. Cannot sell items at present.")
|
|
else
|
|
redgate.setOutput(sides.east,15) -- close gate
|
|
local sum=0
|
|
local x=trans.getAllStacks(sides.south) -- check item
|
|
while true do
|
|
local y=x()
|
|
if(y==nil) then
|
|
break
|
|
end
|
|
if(y.size~=nil) then
|
|
if(y.name=="minecraft:log") then
|
|
sum=sum+y.size*0.5
|
|
else
|
|
sum=sum+y.size*0.1
|
|
end
|
|
end
|
|
end
|
|
|
|
print("Total Price: " .. sum)
|
|
|
|
while true do
|
|
-- Transfer item
|
|
print("Transfering items ... ")
|
|
while (trans.transferItem(sides.south,sides.down)) do
|
|
end
|
|
|
|
-- check if left.
|
|
x=trans.getAllStacks(sides.south)
|
|
local left=false
|
|
while true do
|
|
local y=x()
|
|
if(y==nil) then
|
|
break
|
|
end
|
|
if(y.size~=nil) then
|
|
left=true
|
|
break
|
|
end
|
|
end
|
|
if(left) then
|
|
print("Transfer busy. Waiting...")
|
|
os.sleep(5)
|
|
else
|
|
break
|
|
end
|
|
end
|
|
print("Done")
|
|
|
|
redgate.setOutput(sides.east,0) -- open gate
|
|
end
|
|
elseif(e.event=="modem_message") then
|
|
local tb=unserialize(e.data[1])
|
|
local rate=tb.unit/tb.maxunit*100
|
|
if(rate>60) then
|
|
print("DestroyFactory Busy. Gate is closed for security.")
|
|
gate_allow=false
|
|
else
|
|
gate_allow=true
|
|
end
|
|
else
|
|
print("Received ctrl+c signal.")
|
|
break
|
|
end
|
|
end
|
|
uninit()
|
|
end
|
|
|
|
print("SystemShop Start")
|
|
main()
|
|
print("SystemShop Stopped") |