View difference between Paste ID: vGAD1WMa and aHZufGdm
SHOW: | | - or go back to the newest paste.
1
local maxw, maxh = term.getSize()
2
3
function cartaNonValida()
4
    clearRed()
5
    print("Carta non valida o corrotta.")
6
    print("")
7
    print("Premere un tasto per uscire")
8
    os.pullEvent("key")
9
    os.reboot()
10
end
11
12
function cartaVuota()
13
    clearRed()
14
    print("Carta smagnetizzata o vuota.")
15
    print("")
16
    print("Premere un tasto per uscire")
17
    os.pullEvent("key")
18
    os.reboot()
19
end
20
21
function creditoInsufficiente()
22
    clearRed()
23
    print("Credito insufficiente.")
24
    print("")
25
    print("Premere un tasto per uscire")
26
    os.pullEvent("key")
27
    os.reboot()
28
end
29
30
function materialeNonDisponibile()
31
    clearRed()
32
    print("Materiale esaurito.")
33
    print("")
34
    print("Premere un tasto per uscire")
35
    os.pullEvent("key")
36
    os.reboot()
37
end
38
39
-- IMPLEMENTAZIONE DEL DRAWFILLEDBOX
40
local function drawPixelInternal(xPos, yPos)
41
    term.setCursorPos(xPos, yPos)
42
    term.write(" ")
43
end
44
45
local tColourLookup = {}
46
for n = 1, 16 do
47
    tColourLookup[string.byte("0123456789abcdef", n, n)] = 2 ^ (n - 1)
48
end
49
50
function drawFilledBox(startX, startY, endX, endY, nColour)
51
    if type(startX) ~= "number" or type(startX) ~= "number" or type(endX) ~=
52
        "number" or type(endY) ~= "number" or
53
        (nColour ~= nil and type(nColour) ~= "number") then
54
        error("Expected startX, startY, endX, endY, colour", 2)
55
    end
56
57
    startX = math.floor(startX)
58
    startY = math.floor(startY)
59
    endX = math.floor(endX)
60
    endY = math.floor(endY)
61
62
    if nColour then term.setBackgroundColor(nColour) end
63
    if startX == endX and startY == endY then
64
        drawPixelInternal(startX, startY)
65
        return
66
    end
67
68
    local minX = math.min(startX, endX)
69
    if minX == startX then
70
        minY = startY
71
        maxX = endX
72
        maxY = endY
73
    else
74
        minY = endY
75
        maxX = startX
76
        maxY = startY
77
    end
78
79
    for x = minX, maxX do for y = minY, maxY do drawPixelInternal(x, y) end end
80
end
81
82
function clear()
83
    sfondo(colors.lightBlue)
84
    term.clear()
85
    term.setCursorPos(1, 1)
86
end
87
88
function clearRed()
89
    sfondo(colors.red)
90
    term.clear()
91
    term.setCursorPos(1, 1)
92
end
93
94
95
function colore(sfumatura) term.setTextColour(sfumatura) end
96
97
function sfondo(sfumaturaSfondo) term.setBackgroundColour(sfumaturaSfondo) end
98
99
function titolo(testo)
100
    drawFilledBox(1, 1, maxw, 1, colors.yellow)
101
    term.setCursorPos((maxw - #testo) / 2, 1)
102
    colore(colors.black)
103
    term.write(testo)
104
    sfondo(colors.lightBlue)
105
end
106
107
clear()
108
109-
titolo("KARABASHMED MATERIALI ALL'INGROSSO")
109+
titolo("MINIERA DI TYRIAN - MATERIALI ALL'INGROSSO")
110
-- startx, starty, endx, endy
111-
drawFilledBox(3, 5, 15, 7, colors.black)
111+
drawFilledBox(3, 5, 15, 7, colors.blue)
112-
drawFilledBox(3, 10, 15, 12, colors.lightGray)
112+
drawFilledBox(3, 10, 15, 12, colors.red)
113-
drawFilledBox(3, 15, 15, 17, colors.orange)
113+
drawFilledBox(3, 15, 15, 17, colors.lightGray)
114
term.setCursorPos(4, 6)
115
colore(colors.white)
116-
sfondo(colors.black)
116+
sfondo(colors.blue)
117-
term.write("Carbone")
117+
term.write("Apatite")
118
119
term.setCursorPos(4, 11)
120
colore(colors.white)
121
sfondo(colors.red)
122-
term.write("Ferro")
122+
term.write("Redstone")
123
124
term.setCursorPos(4, 16)
125
colore(colors.black)
126-
sfondo(colors.orange)
126+
127-
term.write("Rame")
127+
term.write("Stagno")
128
129
while true do
130
    drawFilledBox(18, 5, 50, 17, colors.yellow)
131
    term.setCursorPos(19, 6)
132
    colore(colors.black)
133
    sfondo(colors.yellow)
134
    term.write("ISTRUZIONI - LEGGERE:")
135
    term.setCursorPos(19, 8)
136
    term.write("1. Posizionare il vagone sotto")
137
    term.setCursorPos(19, 9)
138
    term.write("   l'erogatore appropriato")
139
    term.setCursorPos(19, 10)
140
    term.write("2. Controllare che la spia")
141
    term.setCursorPos(19, 11)
142
    term.write("   «presenza vagone» sia accesa")
143
    term.setCursorPos(19, 12)
144
    term.write("3. Selezionare su questo PC")
145
    term.setCursorPos(19, 13)
146
    term.write("   il prodotto desiderato")
147
    term.setCursorPos(19, 14)
148
    term.write("4. Attendere l'erogazione")
149
    term.setCursorPos(19, 15)
150
    term.write("5. Non appena l'operazione sarà")
151
    term.setCursorPos(19, 16)
152
    term.write("   terminata liberare l'area")
153
154
    local event, par1, x, y = os.pullEvent("mouse_click")
155
    if event == "mouse_click" and x >= 3 and x <= 15 and y >= 5 and y <= 7 then
156
        cavo1 = colors.white
157
        cavo2 = colors.lightBlue
158
        cavo3 = colors.pink
159-
        prezzo = 25
159+
        prezzo = 100
160-
        materiale = "Carbone"
160+
        materiale = "Apatite"
161
        break
162
    elseif event == "mouse_click" and x >= 3 and x <= 15 and y >= 10 and y <= 12 then
163
        cavo1 = colors.orange
164
        cavo2 = colors.yellow
165
        cavo3 = colors.gray
166-
        prezzo = 512
166+
        prezzo = 850
167-
        materiale = "Ferro"
167+
        materiale = "Redstone"
168
        break
169
    elseif event == "mouse_click" and x >= 3 and x <= 15 and y >= 15 and y <= 17 then
170
        cavo1 = colors.magenta
171
        cavo2 = colors.lime
172
        cavo3 = colors.lightGray
173
        prezzo = 490
174-
        materiale = "Rame"
174+
        materiale = "Stagno"
175
        break
176
    end
177
    sleep(1)
178
end
179
clear()
180
181
if colors.test(redstone.getBundledInput("back"), cavo3) == true then
182
    materialeNonDisponibile()
183
end
184
185
while true do
186
    titolo("Vendita di un vagone di " .. materiale)
187
188
    term.setCursorPos(3, 5)
189
    print("Si sta per acquistare un vagone di " .. materiale)
190
    print("\n  Il prezzo è di " .. prezzo .. " IC")
191
    colore(colors.white)
192
    print("\n\n  Inserire la carta per procedere\n  con l'acquisto")
193
194
    drawFilledBox(15, 14, 36, 16, colors.red)
195
    term.setCursorPos(22, 15)
196
    colore(colors.white)
197
    term.write("Annulla")
198
199
    m = peripheral.wrap("bottom") -- magcard
200
    m.setInsertCardLight(true)
201
202
    event, par1, x, y = os.pullEvent()
203
    if event == "mouse_click" and x >= 15 and x <= 36 and y >= 14 and y <= 16 then
204
        m.setInsertCardLight(false)
205
        os.reboot()
206
    elseif event == "mag_swipe" then
207
        m.setInsertCardLight(false)
208
        break
209
    end
210
end
211
212
if par1 == nil then cartaVuota() end
213
214
tab = textutils.unserialize(par1)
215
216
if type(tab) ~= "table" then cartaNonValida() end
217
218
if tab.t ~= "cc" then cartaNonValida() end
219
220
if tab.e ~= "BN" then cartaNonValida() end
221
222
credito = tonumber(tab.v)
223
224
if prezzo > credito then
225
    creditoInsufficiente()
226
end
227
228
clear()
229
titolo("Conferma pagamento")
230
231
print("\n\nInserire nuovamente la carta per confermare il pagamento")
232
 
233
tabr = {}
234
235
tabr.t = tab.t
236
tabr.e = tab.e
237
tabr.p = tab.p
238
tabr.v = tostring(credito - prezzo)
239
240
ncr = textutils.serialize(tabr)
241
m.setInsertCardLight(true)
242
m.beginWrite(ncr,"BN Credit")
243
os.pullEvent("mag_write_done")
244
m.setInsertCardLight(false)
245
246
clear()
247
titolo("Erogazione in corso")
248
249
print("\n\nErogazione " .. materiale .. " in corso...")
250
251
redstone.setBundledOutput("back", cavo1)
252
sleep(1)
253
redstone.setBundledOutput("back", 0)
254
255
erogazione = false
256
257
while erogazione == false do
258
    erogazione = colors.test(redstone.getBundledInput("back"), cavo2)
259
    sleep(1)
260
end
261
os.reboot()