View difference between Paste ID: PWfYVNzU and Y6L0JMHK
SHOW: | | - or go back to the newest paste.
1
prison_file_path='/usr/mobController/tables/prisons.tbl'
2
chest_str = 'copper'
3
4
function readChest(periph)
5
    chest = {}
6
    
7
    for i=1, periph.size() do
8
        if periph.getItemMeta(i)~=nil then
9
            table.insert(chest, {slot=i, meta=periph.getItemMeta(i)})
10
        end
11
    end
12
--    print('readChest:', textutils.serialise(chest))
13
    return true, chest
14
end
15
16
function getPrisons()
17
    if not fs.exists(prison_file_path) then
18
        return false, 'prison_file_path is incorrect:\n'..prison_file_path
19
    end
20
    file = fs.open(prison_file_path, 'r')
21
    if not file then
22
        return false, 'Prisons table not found'
23
    end
24
    data = file.readAll()
25
    file.close()
26
    if not data or #data==0 then
27
        return false, 'Prisons data not found'
28
    end
29
    prisons=textutils.unserialise(data)
30
    return true, prisons
31
end
32
33
function writePrisons(prisons)
34
    file = fs.open(prison_file_path, 'w')
35
    file.write(textutils.serialize(prisons))
36
    file.flush()
37
    file.close()
38
    print('file closed and flushed')
39
end
40
41
function findByMeta(meta)
42-
    for k,v in pairs(getPrisons()) do
42+
    scs, tbl = getPrisons()
43-
        if v.meta = meta then
43+
    for k,v in pairs(tbl) do
44-
            return true, v
44+
        if v.meta.nbtHash == meta.nbtHash then
45
            return true, v 
46
        end
47
    end
48
    return false
49
end
50
51
function addPrison(prison, slot)
52
    if not periph then 
53
        return false, 'peripheral not found'
54
    end
55
    if not slot then
56
        return false, 'slot not provided'
57
    end
58
    if not periph.getItem(slot) then
59
        return false, 'nothing in slot:'..tostring(slot)
60
    end
61
    scs, prisons = getPrisons()
62
    table.insert(prisons, {slot=slot, meta=prison})
63
    return scs, prisons
64
end
65
66
function deletePrison(prisons, chest, del_item)
67
    scs, prison = chest.pushItems('up', del_item.slot, 1)
68
    if not scs then
69
        return false, 'unable to push '..prison.name
70
    end
71
    prisons.pop(del_item)
72
    return scs, prison
73
end
74-
    item_cnt = periph.pullItem('down', 7, 1, periph.size())
74+
75-
    if item_cnt = 0 then
75+
76
	if not periph then
77
		return false, 'no peripheral sent'
78-
    item = periph.getItemMeta(chest.size())
78+
	end 
79
    trade_slot = periph.size()
80-
        return false, 'Unable to read item in ',chest.size())
80+
    scs, check_item = periph.getItemMeta(trade_slot)
81
    if check_item then
82-
    prison = findByMeta(item)
82+
        return false, check_item.name..' is present in the last slot of the chest'
83
    end
84
    
85
    move_cnt = periph.pullItems('down', 7, 1, trade_slot)
86-
    periph.pushItem('down',chest.size(), 1, 7)
86+
    if move_cnt == 0 then
87-
    periph.pullItem('down',7, 1, prison.slot)
87+
88
    end
89
    item = periph.getItemMeta(trade_slot)
90
    if not item then
91-
function putPrison()
91+
        return false, 'Unable to read item in ', trade_slot
92
    end
93
    scs, prison = findByMeta(item)
94
    if not prison then
95
        return false, 'Not a known prison.'
96
    end
97
    periph.pushItems('down',trade_slot, 1, 7)
98
    periph.pullItems('down',7, 1, prison.slot)
99
    return true, slot, prison    
100
end
101
102
function putPrison(periph, prison)
103
    move_cnt=periph.pushItems('down', prison.slot, 1, 7)
104
    if move_cnt==0 then
105
        return false, move_cnt
106
    else
107
        return true, move_cnt, prison
108
    end 
109
end
110
111
function resetPrisons(chest)
112
	    pullPrison(chest)
113
    scs, prisons = readChest(chest)
114
    if scs then 
115
        writePrisons(prisons)
116
    end
117
    return scs, prisons
118
end
119
120
121
-------------------------------------
122
chest = nil
123
124
for k,v in pairs(peripheral.getNames()) do
125
    if string.find(v, chest_str) then
126
    chest = peripheral.wrap(v)
127
    break
128
    end
129
end
130
131
scs, prisons = getPrisons()
132
src = 'getPrisons'
133
if not scs then
134
    scs, prisons = readChest(chest)
135
    src = 'readChest'
136
end