View difference between Paste ID: iBD7eYVe and 9RQCKzkc
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