Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Quantum Link Terminal by Totoro --
- -- Version 2. All right reserved! --
- local serial = require('serialization')
- local fs = require('filesystem')
- local event = require('event')
- local term = require('term')
- local com = require('component')
- local gpu = com.gpu
- local modem = com.modem
- local cb = com.commandblock
- local ae = com.appeng_blocks_controller
- -- Constants --
- TIME_RECHARGE = 30
- secret_port = 27
- -- Colors --
- backcolor = 0x000000
- forecolor = 0xFFFFFF
- infocolor = 0x0066FF
- errorcolor = 0xFF0000
- truecolor = 0x00FF00
- inactivecolor = 0xCCCCCC
- goldcolor = 0xCCCC00
- -- **** --
- -- Codes --
- pingcode = 0x031337
- refreshcode = 0xC0FFEE
- -- **** --
- -- vars
- blocked = false
- cooldown = 0
- current = nil
- selector_page = 0
- max_page = 0
- frame = 0 -- 0: 'go'-frame 1: selector
- refresh = true
- -- money, money, money
- money = 264
- cash = ae.countOfItemType(money)
- -- init graphics
- gosize = {width = 16, height = 3}
- selectorsize = {width = 24, height = 6}
- oldw, oldh = gpu.getResolution()
- gpu.setResolution(gosize.width, gosize.height)
- term.clear()
- gpu.setForeground(forecolor)
- gpu.setBackground(backcolor)
- -- teleports
- teleports = {}
- function loadTeleports()
- if fs.exists("telelist.txt") then
- local file = io.open("telelist.txt", "r")
- local data = file:read("*a")
- teleports = serial.unserialize(data)
- file:close()
- if teleports == nil then teleports = {} end
- end
- end
- function saveTeleports()
- local file = io.open("telelist.txt", "w")
- local data = serial.serialize(teleports)
- file:write(data)
- file:close()
- end
- function addTeleport(name, price, x, y, z)
- table.insert(teleports, {name = name, price = price, x = x, y = y, z = z, blocked = false})
- max_page = math.floor(#teleports/5)
- end
- function blockTeleport(tele, state)
- tele.blocked = state
- end
- function teleport(tele, player)
- cb.setCommand('/tp '..player..' '..tele.x..' '..tele.y..' '..tele.z)
- cb.executeCommand()
- cb.setCommand('')
- cooldown = TIME_RECHARGE
- selector_page = 0
- refresh = true
- end
- -- calculation
- function update()
- if cooldown > 0 then
- cooldown = cooldown-1
- refresh = true
- else
- if current ~= nil then
- if current.price > 0 then
- offer = ae.countOfItemType(money) - cash
- if offer >= current.price then
- cash = cash + offer
- teleport(current, '@p')
- end
- end
- end
- end
- end
- -- screens
- go_half = gosize.width/2
- go_offset = (gosize.width-12)/2+1
- function goframe()
- term.clear()
- if cooldown == 0 then
- if current ~= nil then
- term.setCursor(go_half-#current.name/2+1, 1)
- if current.price > 0 then gpu.setForeground(goldcolor) end
- term.write(current.name)
- if current.blocked then
- gpu.setForeground(errorcolor)
- term.setCursor(1, 2)
- term.write(' on maintenance ')
- gpu.setForeground(forecolor)
- elseif current.price > 0 then
- term.setCursor(go_half-#('$'..current.price)/2+1, 2)
- term.write('$'..current.price)
- gpu.setForeground(forecolor)
- end
- else
- term.setCursor(go_half-5, 1)
- gpu.setForeground(errorcolor)
- term.write("- no links -")
- gpu.setForeground(forecolor)
- end
- term.setCursor(go_offset,3)
- gpu.setBackground(infocolor)
- term.write('[ Teleport ]')
- gpu.setBackground(backcolor)
- else
- term.setCursor(go_half-2,1)
- term.write('[ ]')
- term.setCursor(go_half,1)
- term.write(cooldown)
- term.setCursor(go_offset,3)
- gpu.setBackground(errorcolor)
- term.write('[ Cooldown ]')
- gpu.setBackground(backcolor)
- end
- end
- selector_half = selectorsize.width/2
- function selectorframe()
- term.clear()
- line = selector_page * 5
- for i=line+1, line+5 do
- if i>#teleports then break end
- term.setCursor(selector_half-#teleports[i].name/2+1, i-line)
- if teleports[i].price > 0 then gpu.setForeground(goldcolor) end
- term.write(teleports[i].name)
- if teleports[i].price > 0 then gpu.setForeground(forecolor) end
- end
- gpu.setBackground(infocolor)
- term.setCursor(2, selectorsize.height)
- term.write('[ < Prev]')
- term.setCursor(selectorsize.width-9, selectorsize.height)
- term.write('[ Next >]')
- gpu.setBackground(backcolor)
- if max_page == 0 then
- term.setCursor(11, selectorsize.height)
- term.write(' __ ')
- else
- term.setCursor(11+(selector_page/max_page*3), selectorsize.height)
- term.write('_')
- end
- end
- function changeframe(num)
- frame = num
- refresh = true
- end
- -- == Main == --
- loadTeleports()
- current = teleports[1]
- modem.open(secret_port)
- while true do
- if refresh then
- if frame == 0 then goframe()
- elseif frame == 1 then selectorframe() end
- refresh = false
- end
- -- waiting for events
- name, address, a, b, c, username, data = event.pull(1)
- if name == 'touch' then
- if frame == 0 then
- if cooldown == 0 then
- if b==3 then -- teleport player
- if current ~= nil then
- if current.price == 0 and not current.blocked then
- teleport(current, username)
- current = teleports[math.random(1, #teleports)]
- else
- gpu.setForeground(errorcolor)
- term.setCursor(1,2)
- if current.blocked then term.write(" Blocked! ")
- else term.write(" Please pay! ") end
- gpu.setForeground(forecolor)
- os.sleep(0.5)
- refresh = true
- end
- end
- elseif b == 1 then
- gpu.setResolution(selectorsize.width, selectorsize.height)
- changeframe(1)
- end
- end
- elseif frame == 1 then
- if b == 6 then
- if a <= 10 then
- if selector_page > 0 then
- selector_page = selector_page - 1
- refresh = true
- end
- elseif a > 14 then
- if selector_page < max_page then
- selector_page = selector_page + 1
- refresh = true
- end
- end
- else
- num = b+selector_page*5
- if num <= #teleports then current = teleports[num] end
- gpu.setResolution(gosize.width, gosize.height)
- changeframe(0)
- end
- end
- elseif name == 'key_down' then break
- elseif name == 'modem_message' then
- if username == refreshcode then
- local t = serial.unserialize(data)
- if t ~= nil then
- teleports = t
- current = teleports[math.random(1, #teleports)]
- refresh = true
- end
- elseif username == pingcode then
- modem.send(a, secret_port, pingcode)
- end
- end
- update()
- end
- -- end
- saveTeleports()
- term.clear()
- modem.close(secret_port)
- gpu.setForeground(0xFFFFFF)
- gpu.setBackground(0x000000)
- gpu.setResolution(oldw, oldh)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement