Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Event = require('event')
- local UI = require('ui')
- local Config = require('config')
- multishell.setTitle(multishell.getCurrent(), 'PIM')
- local inventory = { }
- local mode = 'sync'
- if not device.pim then
- error('PIM not attached')
- end
- local page = UI.Page({
- menu = UI.Menu({
- centered = true,
- y = 2,
- menuItems = {
- { prompt = 'Learn', event = 'learn', help = '' },
- },
- }),
- statusBar = UI.StatusBar({
- columns = {
- { 'Status', 'status', UI.term.width - 7 },
- { 'Mode', 'mode', 7 }
- }
- }),
- accelerators = {
- q = 'quit',
- },
- })
- local function learn()
- if device.pim.getInventorySize() > 0 then
- local stacks = device.pim.getAllStacks(false)
- Config.update('pim', stacks)
- mode = 'sync'
- page.statusBar:setValue('status', 'Learned inventory')
- end
- page.statusBar:setValue('mode', mode)
- page.statusBar:draw()
- end
- function page:eventHandler(event)
- if event.type == 'learn' then
- mode = 'learn'
- learn()
- elseif event.type == 'quit' then
- Event.exitPullEvents()
- end
- return UI.Page.eventHandler(self, event)
- end
- local function inInventory(s)
- for _,i in pairs(inventory) do
- if i.id == s.id then
- return true
- end
- end
- end
- local function pimWatcher()
- local playerOn = false
- while true do
- if device.pim.getInventorySize() > 0 and not playerOn then
- playerOn = true
- if mode == 'learn' then
- learn()
- else
- local stacks = device.pim.getAllStacks(false)
- for k,stack in pairs(stacks) do
- if not inInventory(stack) then
- device.pim.pushItem('down', k, stack.qty)
- end
- end
- page.statusBar:setValue('status', 'Synchronized')
- page.statusBar:draw()
- end
- elseif device.pim.getInventorySize() == 0 and playerOn then
- page.statusBar:setValue('status', 'No player')
- page.statusBar:draw()
- playerOn = false
- end
- os.sleep(1)
- end
- end
- Config.load('pim', inventory)
- if Util.empty(inventory) then
- mode = 'learn'
- end
- page.statusBar:setValue('mode', mode)
- UI.pager:setPage(page)
- Event.pullEvents(pimWatcher)
- UI.term:reset()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement