View difference between Paste ID: 8CyNUBs5 and 5mX9EDsr
SHOW: | | - or go back to the newest paste.
1
local com = require("component")
2
local term = require("term")
3
4
5
local itm = {
6
["draconium"] = {["tp"] = 4,["tpc"] = 0,["tpi"] = 1},
7
["tnt"] = {["tp"] = 1,["tpc"] = 0,["tpi"] = 2},
8
["dragonHeart"] = {["tp"] = 1,["tpc"] = 0,["tpi"] = 3},
9
["draconicCore"] = {["tp"] = 16,["tpc"] = 0,["tpi"] = 4},
10
11
}
12
13
local side
14
15
local sides = {}
16
sides[1] = {["name"] = "NORTH", ["ru"] = "СЕВЕР"}
17
sides[2] = {["name"] = "SOUTH", ["ru"] = "ЮГ"}
18
sides[3] = {["name"] = "WEST", ["ru"] = "ЗАПАД"}
19
sides[4] = {["name"] = "EAST", ["ru"] = "ВОСТОК"}
20
21
local chests = {}
22
chests[1] = "chest"
23
chests[2] = "diamond"
24
chests[3] = "crystal"
25
chests[4] = "gold"
26
chests[5] = "iron"
27
chests[6] = "obsidian"
28
29
local function getChest()
30
local ch = 0
31
for i=1,#chests do
32
if pcall(com.getPrimary,chests[i]) then
33
ch = chests[i]
34
return ch
35
end
36
end
37
if ch == 0 then
38
print("Ошибка: Сундук не подключен адаптером, либо выбранный сундук не поддерживается программой :(")
39
end
40
end
41
42
local chest = com.getPrimary(getChest())
43
local maxslot = chest.getInventorySize()
44
45
local w8 = false
46
local function sidesCheck()
47
local incount = 0
48
local ilast
49
if not w8 then print("Идет автоматическая настройка") end
50
for i=1,#sides do
51
b,n,_ = pcall(chest.pullItem,sides[i].name,1,1,1)
52
if b == true and n ~= nil then
53
incount = incount + 1
54
ilast = i
55
56
end
57
end
58
if incount == 1 then
59
w8 = false
60
side = sides[ilast].name
61
print("Автонастройка успешно завершена, предметы будут отправляться на "..sides[ilast].ru)
62
return sides[ilast]
63
elseif incount > 1 then
64
if not w8 then print("Автоастройка не выполнена (вплотную к сундуку стоят посторонние механизмы)") end
65
w8 = true
66
else
67
if not w8 then print('Автонастройка не выполнена (подключите "принимающий" мэ интерфейс к одной из сторон сундука)') end
68
w8 = true
69
end
70
end
71
72
local function check()
73
for k,v in pairs(itm) do
74
itm[k].tpc = 0
75
end
76
local can = false
77
for i=1,maxslot do
78
local s = chest.getStackInSlot(i)
79
if s ~= nil then
80
if itm[s.name].tpc < itm[s.name].tp then
81
itm[s.name].i = i 
82
itm[s.name].tpc = itm[s.name].tp
83
end
84
end
85
86
end
87
if itm.draconium.tpc == 4 and itm.tnt.tpc == 1 and itm.dragonHeart.tpc == 1 and itm.draconicCore.tpc == 16 then
88
can = true
89
end
90
return can
91
end
92
93
local function push(it)
94
while it.tpc > 0 do
95
it.tpc = it.tpc - chest.pushItem(side, it.i, it.tpc, it.tpi)
96
os.sleep(0)
97
end
98
end
99
100
local function extract()
101
local exd = 0
102
repeat
103
for i=1,maxslot do
104
local s = chest.getStackInSlot(i)
105
if s ~= nil then
106
if s.name == "draconicBlock" and s.qty >= 4 then
107
exd = exd + chest.pushItem("UP",i,4,1)
108
break
109
end
110
end
111
end
112
until exd == 4
113
end
114
115
local function craft()
116
if check() then
117
print("крафт запущен")
118
push(itm.draconium)
119
push(itm.tnt)
120
push(itm.dragonHeart)
121
os.sleep(8)
122
push(itm.draconicCore)
123
print("ожидаю появления пробужденных блоков в сундуке")
124
extract()
125
print("блоки успешно экспортированы")
126
end
127
end
128
129
while sidesCheck() == nil do
130
os.sleep(0)
131
end
132
print("Программа готова к использованию")
133
while true do
134
os.sleep(0)
135
craft()
136
end