SHOW:
|
|
- or go back to the newest paste.
1 | local storage | |
2 | local sideredcable | |
3 | local sidemodem | |
4 | ||
5 | ||
6 | function createsettings() | |
7 | local settings={} | |
8 | print("Number of Storage:") | |
9 | settings[1]="s"..read() | |
10 | print("Side of Modem:") | |
11 | settings[2]=read() | |
12 | print("Side of RedCable:") | |
13 | settings[3]=read() | |
14 | save(settings,"settings.txt") | |
15 | end | |
16 | ||
17 | function loadsettings() | |
18 | local settings=load("settings.txt") | |
19 | storage=settings[1] | |
20 | sidemodem=settings[2] | |
21 | sideredcable=settings[3] | |
22 | end | |
23 | ||
24 | function save(table,name) | |
25 | local file = fs.open(name,"w") | |
26 | file.write(textutils.serialize(table)) | |
27 | file.close() | |
28 | end | |
29 | ||
30 | function load(name) | |
31 | local file = fs.open(name,"r") | |
32 | local data = file.readAll() | |
33 | file.close() | |
34 | return textutils.unserialize(data) | |
35 | - | redstone.setOutput("bottom",false) |
35 | + | |
36 | ||
37 | function exist(name) | |
38 | file=io.open(name) | |
39 | if file~=nil then io.close(file) return true else return false end | |
40 | end | |
41 | - | rednet.open("back") |
41 | + | |
42 | function loadwork() | |
43 | - | if exist("changes") then redstone.setOutput("bottom",true) end |
43 | + | local work=load("work") |
44 | local w=peripheral.wrap(sideredcable) | |
45 | local names = w.getNamesRemote() | |
46 | - | local id, mens, protocol =rednet.receive() |
46 | + | table.sort(names) |
47 | - | if protocol =="changesAntena"..storage then |
47 | + | local z=0 |
48 | - | local changes={" "} |
48 | + | while z~=#work do |
49 | - | if exist("changes") then |
49 | + | local craftable=false |
50 | - | changes=load("changes") |
50 | + | local recipe=load(work[z+1]) |
51 | repeat | |
52 | - | local newchanges=textutils.unserialize(mens) |
52 | + | for x=1,9 do |
53 | - | for i=1,#newchanges do |
53 | + | craftable=false |
54 | - | changes[#changes+1]=newchanges[i] |
54 | + | local cur=0 |
55 | for c=1,#names do | |
56 | - | save(changes,"changes") |
56 | + | local f=peripheral.wrap(names[c]) |
57 | - | redstone.setOutput("bottom",true) |
57 | + | for b=1, f.getInventorySize() do |
58 | - | rednet.send(id,"ok","changesAntenaReceived"..storage) |
58 | + | if f.getStackInSlot(b)~= nil then |
59 | if f.getStackInSlot(b).display_name==recipe[x*2] then | |
60 | - | if protocol=="AskChangesAntena"..storage then |
60 | + | cur=cur+f.getStackInSlot(b).qty |
61 | - | local changes={" "} |
61 | + | end |
62 | - | if exist("changes") then |
62 | + | end |
63 | - | changes=load("changes") |
63 | + | end |
64 | - | end |
64 | + | end |
65 | - | rednet.send(id,textutils.serialize(changes),"changes"..storage) |
65 | + | if cur>=recipe[x*2+1] then |
66 | - | fs.delete("changes") |
66 | + | craftable=true |
67 | - | redstone.setOutput("bottom",false) |
67 | + | end |
68 | if recipe[x*2]==" " then | |
69 | craftable=true | |
70 | end | |
71 | if not craftable then break end | |
72 | end | |
73 | if craftable then | |
74 | for x=1,9 do | |
75 | local done=false | |
76 | local togo=recipe[x*2+1] | |
77 | for c=1,#names do | |
78 | sleep(0) | |
79 | local f=peripheral.wrap(names[c]) | |
80 | for b=1, f.getInventorySize() do | |
81 | if f.getStackInSlot(b)~= nil then | |
82 | if f.getStackInSlot(b).display_name==recipe[x*2] then | |
83 | local num=f.getStackInSlot(b).qty | |
84 | if num>=togo then | |
85 | local n=x | |
86 | if n>=4 then | |
87 | n=n+1 | |
88 | end | |
89 | if n>=8 then | |
90 | n=n+1 | |
91 | end | |
92 | if c==1 then | |
93 | f.pushItem("north",b,togo,n) | |
94 | end | |
95 | if c==2 then | |
96 | f.pushItem("east",b,togo,n) | |
97 | end | |
98 | if c==3 then | |
99 | f.pushItem("south",b,togo,n) | |
100 | end | |
101 | if c==4 then | |
102 | f.pushItem("west",b,togo,n) | |
103 | end | |
104 | done=true | |
105 | ||
106 | else | |
107 | ||
108 | local n=x | |
109 | if n>=4 then | |
110 | n=n+1 | |
111 | end | |
112 | if n>=8 then | |
113 | n=n+1 | |
114 | end | |
115 | if c==1 then | |
116 | f.pushItem("north",b,num,n) | |
117 | end | |
118 | if c==2 then | |
119 | f.pushItem("east",b,num,n) | |
120 | end | |
121 | if c==3 then | |
122 | f.pushItem("south",b,num,n) | |
123 | end | |
124 | if c==4 then | |
125 | f.pushItem("west",b,num,n) | |
126 | end | |
127 | togo=togo-num | |
128 | end | |
129 | end | |
130 | end | |
131 | if done then break end | |
132 | end | |
133 | if done then break end | |
134 | end | |
135 | end | |
136 | redstone.setOutput("bottom",true) | |
137 | work[z+2]=work[z+2]-recipe[1] | |
138 | if work[z+2]<=0 then | |
139 | local newwork={} | |
140 | for v=1,#work do | |
141 | if v~=z+1 and v~=z+2 then | |
142 | newwork[#nework+1]=work[v] | |
143 | end | |
144 | end | |
145 | work=newwork | |
146 | end | |
147 | redstone.setOutput("bottom",false) | |
148 | save(work,"work") | |
149 | work=load("work") | |
150 | end | |
151 | until craftable==false | |
152 | end | |
153 | end | |
154 | ||
155 | ||
156 | ||
157 | ||
158 | ----------------------------- | |
159 | if not exist("settings.txt") then | |
160 | createsettings() | |
161 | end | |
162 | ||
163 | if not exist("work") then | |
164 | local work={} | |
165 | save(work,"work") | |
166 | end | |
167 | ||
168 | loadsettings() | |
169 | rednet.open(sidemodem) | |
170 | ||
171 | ||
172 | while true do | |
173 | local id, mens, protocol =rednet.receive(5) | |
174 | if protocol =="Crafter"..storage then | |
175 | local work={} | |
176 | if exist("work") then | |
177 | changes=load("work") | |
178 | end | |
179 | local newwork=textutils.unserialize(mens) | |
180 | if work[1]==nil then | |
181 | work[1]=newwork[1] | |
182 | else | |
183 | work[#work+1]=newwork[1] | |
184 | end | |
185 | work[#work+1]=newwork[2] | |
186 | save(work,"work") | |
187 | rednet.send(id,"ok","confirmCrafter"..storage) | |
188 | end | |
189 | if protocol~=nil then | |
190 | if (string.sub(protocol,1,9)..storage)==("newRecCra"..storage) then | |
191 | local file = fs.open( (string.sub(protocol,1+string.len((string.sub(protocol,1,9)..storage)),string.len(protocol))),"w") | |
192 | file.write(mens) | |
193 | file.close() | |
194 | rednet.send(id,"ok","confirmNewRecipe"..storage) | |
195 | end | |
196 | if protocol==("DelRecCra"..storage) then | |
197 | if exist(mens) then | |
198 | fs.delete(mens) | |
199 | end | |
200 | rednet.broadcast("ok","confirmDeleteRecipe"..storage) | |
201 | end | |
202 | end | |
203 | loadwork() | |
204 | end |