Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local c = require('component')
- local ser = require('serialization')
- local fs = require('filesystem')
- local comp = require('computer')
- local ev = require('event')
- local term = require('term')
- local u = require('unicode')
- local keyb = require('keyboard')
- local g = c.gpu
- local wOld, hOld = g.getResolution()
- local w, h = 80, 25
- local factionsCount = 0
- local totalY = 65
- local work = true
- local folder = '/factionsFinder'
- local scriptInfo = { label = 'Dreamfinity Factions Finder', version = '1.0', copyright = '(c) N1nt3nd0' }
- local paths = { factionsList = folder..'/factions.list', config = folder..'/config.cfg', backup = folder..'/factions_backup.list' }
- local urls = { dynmap = 'http://mc.dreamfinity.org:8122/up/world/tcracy/' }
- local colors = { general = 0x6699FF, gray = 0x333333, green = 0x00ff45, text = 0xCCCCCC, white = 0xFFFFFF, red = 0xFF0000, black = 0x000000 }
- local factionsListPoses = { x = 2, y = 7, w = 41, h = 18, startId = 1, selectedId = 1, pointer = '┴', pointerColor = colors.gray }
- local glassesListPoses = { x = 47, y = 7, w = 32, max = 8, pointer = '├─', pointerColor = colors.general }
- local rgbs = { {0,1,0}, {0,0,1}, {1,0,1}, {1,0,0}, {1,1,0}, {0,1,1}, {1,1,1}, {0,0,0} }
- local status = { x = 2, y = 2, label = 'Статус:', on = 'Online. ', off = 'Offline.' }
- local config = { x = 0, y = 0, z = 0, sortId = 1, sortDir = true, lastWarp = false }
- local scrollFactionsListTable = { }
- local glassesList = { }
- local factionsList = { }
- local buttons = { ['Выход'] = { x = w-7, y = 2, color = colors.general, action = 'stopkran()' },
- ['Обновления приватов'] = { x = 46, y = 17, color = colors.general, action = 'checkAreaupdates()' },
- ['Поиск по базе данных'] = { x = 46, y = 18, color = colors.general, action = 'databaseSearch()' },
- ['Бэкапы базы данных'] = { x = 46, y = 19, color = colors.general, action = 'createBackupDialog()' },
- ['Ввести X'] = { x = 48, y = 22, color = colors.general, action = 'enterX()' },
- ['Ввести Y'] = { x = 48, y = 23, color = colors.general, action = 'enterY()' },
- ['Ввести Z'] = { x = 48, y = 24, color = colors.general, action = 'enterZ()' },
- ['алфв'] = { x = 2, y = 5, color = colors.general, action = 'sortScrollTable(1) drawFactionsList()' },
- ['дист'] = { x = 8, y = 5, color = colors.general, action = 'sortScrollTable(4) drawFactionsList()' },
- ['дата'] = { x = 14, y = 5, color = colors.general, action = 'sortScrollTable(5) drawFactionsList()' },
- ['▴'] = { x = 20, y = 5, color = colors.general, action = 'switchSortDir(true)' },
- ['▾'] = { x = 23, y = 5, color = colors.general, action = 'switchSortDir(false)' },
- ['COMP'] = { x = 73, y = 16, color = colors.general, coords = {}, action = 'setWarpCoords("COMP")' },
- ['1'] = { x = 73, y = 17, color = colors.general, coords = {-9000, 240, -6000}, action = 'setWarpCoords("1")' },
- ['2'] = { x = 73, y = 18, color = colors.general, coords = {1000, 240, -6000}, action = 'setWarpCoords("2")' },
- ['3'] = { x = 73, y = 19, color = colors.general, coords = {9000, 240, -6000}, action = 'setWarpCoords("3")' },
- ['4'] = { x = 73, y = 20, color = colors.general, coords = {-9000, 240, 0}, action = 'setWarpCoords("4")' },
- ['5'] = { x = 73, y = 21, color = colors.general, coords = {0, 240, 0}, action = 'setWarpCoords("5")' },
- ['6'] = { x = 73, y = 22, color = colors.general, coords = {9000, 240, 0}, action = 'setWarpCoords("6")' },
- ['7'] = { x = 73, y = 23, color = colors.general, coords = {-9000, 240, 6000}, action = 'setWarpCoords("7")' },
- ['8'] = { x = 73, y = 24, color = colors.general, coords = {0, 240, 6000}, action = 'setWarpCoords("8")' },
- ['9'] = { x = 73, y = 25, color = colors.general, coords = {9000, 240, 6000}, action = 'setWarpCoords("9")' } }
- function drawGui()
- g.setForeground(colors.black)
- term.clear()
- g.setResolution(w,h)
- drawGuiElement(1,1,w,3,scriptInfo.label..' '..scriptInfo.version,colors.general)
- drawGuiElement(46,4,35,12,'Выводимые на очки координаты',colors.general)
- drawGuiElement(1,4,44,22,'Фракции:',colors.general,9)
- -- drawBox(46,18,26,8,colors.gray)
- setText(status.x,status.y,status.label,colors.general)
- setText(79,5,'x',colors.general)
- setText(61,2,scriptInfo.copyright,colors.red)
- drawBox(46,21,21,5,colors.gray)
- drawGlassesList()
- toGlassesFromList()
- convertFactionsTable()
- sortScrollTable(config.sortId)
- drawFactionsList()
- for label in pairs(buttons) do
- drawButton(label)
- end
- if config.lastWarp then
- setWarpCoords(config.lastWarp)
- else
- drawCoordArea()
- end
- end
- function drawGuiElement(x,y,width,height,label,col,xCor)
- local labelPosX = x + width/2 - u.len(label)/2
- if xCor then
- labelPosX = labelPosX + xCor
- end
- drawLine(x,y+2,width,colors.gray)
- drawBox(x,y,width,height,colors.general)
- setText(labelPosX,y+1,label,col)
- end
- function drawButton(label)
- local but = buttons[label]
- setText(but.x, but.y, '['..string.rep(' ',u.len(label))..']',colors.gray)
- setText(but.x + 1, but.y, label, but.color)
- end
- function drawBox(x,y,width,height,col)
- g.setForeground(col)
- g.fill(x,y,1,height,'│')
- g.fill(x+width-1,y,1,height,'│')
- g.set(x,y,'┌'..string.rep('─',width-2)..'┐')
- g.set(x,y+height-1,'└'..string.rep('─',width-2)..'┘')
- end
- function drawLine(x,y,lenght,col,isVert)
- g.setForeground(col)
- if isVert then
- g.fill(x,y,1,lenght,'│')
- else
- g.fill(x,y,lenght,1,'─')
- end
- end
- function setText(x,y,text,col)
- g.setForeground(col)
- g.set(x,y,text)
- end
- function clearArea(x,y,width,height)
- g.fill(x,y,width,height,' ')
- end
- function setStatus(boolean)
- if boolean then
- setText(status.x+u.len(status.label)+1,status.y,status.on,colors.green)
- else
- setText(status.x+u.len(status.label)+1,status.y,status.off,colors.red)
- end
- end
- function press(act)
- if act == 'lock' then
- ev.ignore('touch',clicker)
- ev.ignore('scroll',clicker)
- ev.ignore('key_down',clicker)
- else
- ev.listen('touch',clicker)
- ev.listen('scroll',clicker)
- ev.listen('key_down',clicker)
- end
- end
- function link(label)
- comp.beep(1500)
- setText(buttons[label].x+1,buttons[label].y,label,colors.red)
- os.sleep(0.2)
- drawButton(label)
- end
- function conf_S()
- io.open(paths.factionsList,'w'):write(ser.serialize(factionsList,false)):flush():close()
- io.open(paths.config,'w'):write(ser.serialize(config,false)):flush():close()
- end
- function conf_R()
- local cFile = io.open(paths.config,'r')
- config = ser.unserialize(cFile:read(fs.size(paths.config))) cFile:close()
- end
- function factionsList_R()
- local fFile = io.open(paths.factionsList,'r')
- factionsList = ser.unserialize(fFile:read(fs.size(paths.factionsList))) fFile:close()
- end
- function getAreaUpdates()
- local out = { }
- local json = ""
- local result, response = pcall(internet.request,urls.dynmap)
- setStatus(result)
- if not result then
- return out
- end
- for chunk in response do
- json = json .. chunk
- end
- while json:find('areaupdated') do
- json = json:sub(json:find('areaupdated')+12)
- local x = ser.unserialize('{'..json:sub(json:find('"x": %[')+6,json:find('%]')-1)..'}')[1]
- json = json:sub(json:find('%]')+1)
- local z = ser.unserialize('{'..json:sub(json:find('"z": %[')+6,json:find('%]')-1)..'}')[1]
- local _,labelStartCut = json:find('"label": ".')
- local label = json:sub(labelStartCut,labelStartCut+json:sub(labelStartCut):find('"')-2)
- out[label] = {x,z}
- end
- return out
- end
- function checkMap()
- local updated = false
- local upd = getAreaUpdates()
- for label,poses in pairs(upd) do
- if factionsList[label] == nil or factionsList[label][1] + factionsList[label][2] ~= poses[1] + poses[2] then
- factionsCount = factionsCount + 1
- factionsList[label] = {poses[1],poses[2],factionsCount}
- updated = true
- end
- end
- if updated then
- convertFactionsTable()
- sortScrollTable(config.sortId)
- drawFactionsList()
- end
- end
- function checkScroll(scrollDir)
- factionsListPoses.startId = factionsListPoses.startId + -scrollDir
- if factionsListPoses.startId > #scrollFactionsListTable - factionsListPoses.h + 1 then
- factionsListPoses.startId = #scrollFactionsListTable - factionsListPoses.h + 1
- end
- if factionsListPoses.startId <= 0 then
- factionsListPoses.startId = 1
- end
- drawFactionsList()
- end
- function subber(label,coords,width)
- return label:sub(1,width-u.len(coords))..string.rep(' ',width-u.len(label)-u.len(coords))..coords
- end
- function drawFactionsList()
- local counter = 0
- drawLine(2,6,25,colors.gray)
- if config.sortId == 1 then
- setText(4,6,factionsListPoses.pointer,factionsListPoses.pointerColor)
- elseif config.sortId == 4 then
- setText(10,6,factionsListPoses.pointer,factionsListPoses.pointerColor)
- elseif config.sortId == 5 then
- setText(16,6,factionsListPoses.pointer,factionsListPoses.pointerColor)
- end
- if config.sortDir then
- setText(21,6,factionsListPoses.pointer,factionsListPoses.pointerColor)
- else
- setText(24,6,factionsListPoses.pointer,factionsListPoses.pointerColor)
- end
- for i = factionsListPoses.startId, #scrollFactionsListTable do
- local outString = subber(i..'. '..scrollFactionsListTable[i][1],' ['..scrollFactionsListTable[i][2]..','..scrollFactionsListTable[i][3]..']['..scrollFactionsListTable[i][4]..']', factionsListPoses.w+1)
- if i == factionsListPoses.selectedId then
- selectColor = colors.general
- else
- selectColor = colors.gray
- end
- setText(factionsListPoses.x,counter+factionsListPoses.y,outString,selectColor)
- counter = counter + 1
- if counter >= factionsListPoses.h then
- break
- end
- end
- setText(37,5,'-'..#scrollFactionsListTable..'-',colors.green)
- end
- function debug(text)
- setText(47,h,text..' ',colors.gray)
- end
- function removeFromGlassesList(id)
- local i = 1
- for label in pairs(glassesList) do
- if i == id then
- glassesList[label] = nil
- break
- end
- i = i + 1
- end
- end
- function drawGlassesList()
- local i = 0
- clearArea(glassesListPoses.x,glassesListPoses.y,glassesListPoses.w+1,glassesListPoses.max)
- for label, poses in pairs(glassesList) do
- local outString = subber(label,' ['..poses[3]..']['..poses[4]..']',glassesListPoses.w)
- local y = glassesListPoses.y+i
- setText(glassesListPoses.x,y,outString,colors.gray)
- setText(glassesListPoses.x+glassesListPoses.w,y,'x',colors.general)
- i = i + 1
- end
- end
- function checkAreaupdates()
- glassesList = { }
- glassesListMessage('Сканирую...')
- local upd = getAreaUpdates()
- for label, poses in pairs(upd) do
- addToGlassesList(label,poses[1],poses[2])
- end
- drawGlassesList()
- toGlassesFromList()
- end
- function clearGlassesList()
- glassesList = { }
- drawGlassesList()
- toGlassesFromList()
- end
- function glassesListMessage(txt)
- local messagePosX = glassesListPoses.x + glassesListPoses.w/2 - u.len(txt)/2
- clearArea(glassesListPoses.x,glassesListPoses.y,glassesListPoses.w+1,glassesListPoses.max)
- setText(messagePosX+1,8,txt,colors.gray)
- os.sleep(1.5)
- end
- function input(x,y,width,button)
- press('lock')
- local str, S = '', ''
- local wCorr = width - 4
- clearArea(x,y,width-1,1)
- setText(x,y,'[]',colors.gray)
- while true do
- evName,_,un,code = ev.pull(0.1)
- if evName == 'key_down' then
- if un ~= nil and un > 0 and code ~= keyb.keys.tab then
- if code == keyb.keys.enter then
- clearArea(x,y,width-1,1)
- press()
- if button then
- drawButton(button)
- else
- clearArea(x,y,width-1,1)
- end
- return str
- elseif code == keyb.keys.back then
- str = u.sub(str,1,-2)
- elseif un == 38 then
- str = str..u.char(167)
- else
- str = str..u.char(un)
- end
- if u.len(str) >= wCorr then
- S = u.sub(str,-wCorr)
- else
- S = str
- end
- setText(x+1,y,S,colors.general)
- setText(x+u.len(S)+1,y,'] ',colors.gray)
- end
- elseif evName == 'touch' then
- press()
- if button then
- drawButton(button)
- else
- clearArea(x,y,width-1,1)
- end
- sad()
- return false
- end
- end
- end
- function sad()
- comp.beep(300)
- end
- function databaseSearch()
- local bLabel = 'Поиск по базе данных'
- local toFind = input(buttons[bLabel].x,buttons[bLabel].y,24,bLabel)
- if toFind and tofind ~= "" then
- for label, poses in pairs(factionsList) do
- if label:upper():match(toFind:upper()) then
- addToGlassesList(label,poses[1],poses[2])
- end
- end
- drawGlassesList()
- toGlassesFromList()
- end
- end
- function enterX()
- local bLabel = 'Ввести X'
- local newX = input(buttons[bLabel].x,buttons[bLabel].y,12,bLabel)
- if newX then
- local num = checkNum(newX)
- if num then
- config.lastWarp = false
- config.x = num
- drawCoordArea()
- end
- end
- convertFactionsTable()
- sortScrollTable(config.sortId)
- drawFactionsList()
- end
- function enterY()
- local bLabel = 'Ввести Y'
- local newY = input(buttons[bLabel].x,buttons[bLabel].y,12,bLabel)
- if newY then
- local num = checkNum(newY)
- if num then
- config.lastWarp = false
- config.y = num
- drawCoordArea()
- end
- end
- end
- function enterZ()
- local bLabel = 'Ввести Z'
- local newZ = input(buttons[bLabel].x,buttons[bLabel].y,12,bLabel)
- if newZ then
- local num = checkNum(newZ)
- if num then
- config.lastWarp = false
- config.z = num
- drawCoordArea()
- end
- end
- convertFactionsTable()
- sortScrollTable(config.sortId)
- drawFactionsList()
- end
- function drawCoordArea(isWarp)
- local x = config.x..' '
- local y = config.y..' '
- local z = config.z..' '
- clearArea(68,16,5,10)
- drawLine(71,16,10,colors.gray,true)
- drawLine(66,23,5,colors.gray)
- setText(66,23,glassesListPoses.pointer,colors.gray)
- setText(71,23,'┤',colors.gray)
- setText(59,22,x:sub(1,6),colors.text)
- setText(59,23,y:sub(1,6),colors.text)
- setText(59,24,z:sub(1,6),colors.text)
- if isWarp then
- setText(71,buttons[isWarp].y,glassesListPoses.pointer,glassesListPoses.pointerColor)
- end
- end
- function checkNum(int)
- local try = tonumber(int)
- if try then
- if not (try < -30000) and not (try > 30000) then
- return try
- end
- end
- sad()
- return false
- end
- function getDistanse(x,z,x2,z2)
- return math.floor(math.sqrt((x - x2)^2+(z - z2)^2))
- end
- function switchSortDir(dir)
- config.sortDir = dir
- sortScrollTable(config.sortId)
- drawFactionsList()
- end
- function sorter(a,b)
- if config.sortDir then
- if config.sortId == 5 then
- return b[config.sortId] < a[config.sortId]
- else
- return a[config.sortId] < b[config.sortId]
- end
- else
- if config.sortId == 5 then
- return b[config.sortId] > a[config.sortId]
- else
- return a[config.sortId] > b[config.sortId]
- end
- end
- end
- function sortScrollTable(id)
- config.sortId = id
- table.sort(scrollFactionsListTable,sorter)
- end
- function convertFactionsTable()
- scrollFactionsListTable = { }
- local i = 1
- for label, poses in pairs(factionsList) do
- scrollFactionsListTable[i] = {label,poses[1],poses[2],getDistanse(poses[1],poses[2],config.x,config.z),poses[3]}
- i = i + 1
- end
- end
- function getFactionsCount()
- for _ in pairs(factionsList) do
- factionsCount = factionsCount + 1
- end
- end
- function setWarpCoords(label)
- local coords = buttons[label].coords
- config.lastWarp = label
- config.x = coords[1]
- config.y = coords[2]
- config.z = coords[3]
- convertFactionsTable()
- sortScrollTable(config.sortId)
- drawFactionsList()
- drawCoordArea(label)
- end
- function addToGlassesList(label,x,z)
- local sortTable = { }
- local i = 1
- for _ in pairs(glassesList) do
- if i >= glassesListPoses.max then
- return
- end
- i = i + 1
- end
- for warp, data in pairs(buttons) do
- local warpCoords = data.coords
- if warpCoords then
- local dist = getDistanse(x,z,warpCoords[1],warpCoords[3])
- table.insert(sortTable,{dist,warp,warpCoords[1],warpCoords[2],warpCoords[3]})
- end
- end
- table.sort(sortTable,function(a,b) if a[1] < b[1] then return true end return false end)
- glassesList[label] = {x,z,sortTable[1][1],sortTable[1][2],sortTable[1][3],sortTable[1][4],sortTable[1][5]}
- end
- function toGlassesFromList()
- local i = 1
- glasses.removeAll()
- for label, poses in pairs(glassesList) do
- local outString = i..'. '..label..' ['..poses[1]..', '..poses[2]..'] ['..poses[3]..'] ['..poses[4]..']'
- local vertexes = getVertexes(poses[1],poses[2],poses[5],poses[6],poses[7])
- local cube = glasses.addCube3D()
- local r,g,b = rgbs[i][1],rgbs[i][2],rgbs[i][3]
- cube.setColor(r,g,b)
- cube.setAlpha(1)
- cube.setViewDistance(30000)
- cube.setVisibleThroughObjects(true)
- cube.set3DPos(vertexes[4],vertexes[5],vertexes[6])
- local line = glasses.addLine3D()
- line.setScale(3)
- line.setAlpha(1)
- line.setColor(r,g,b)
- line.setVertex(1,vertexes[1]+0.5,vertexes[2]+0.5,vertexes[3]+0.5)
- line.setVertex(2,vertexes[4]+0.5,vertexes[5]+0.5,vertexes[6]+0.5)
- local text = glasses.addTextLabel()
- text.setScale(1)
- text.setAlpha(0.8)
- text.setColor(r,g,b)
- text.setPosition(2,i*9-5)
- text.setText(outString)
- i = i + 1
- end
- end
- function getVertexes(factX,factZ,warpX,warpY,warpZ)
- local compPos = buttons['COMP'].coords
- local xStart = warpX - compPos[1]
- local yStart = warpY - compPos[2]
- local zStart = warpZ - compPos[3]
- local xEnd = factX - compPos[1]
- local yEnd = totalY - compPos[2]
- local zEnd = factZ - compPos[3]
- return { xStart, yStart, zStart, xEnd, yEnd, zEnd }
- end
- function createBackup()
- if fs.size(paths.factionsList) > fs.size(paths.backup) then
- fs.copy(paths.factionsList,paths.backup)
- end
- end
- function createBackupDialog()
- press('lock')
- term.clear()
- g.setForeground(colors.general)
- print('Расположение бэкапа базы данных: '..paths.backup..'.\n')
- print('Нажать "1" - сохранить базу данных в бэкап (также сохраняется при выходе)')
- print('Нажать "2" - загрузить базу данных из бэкапа.')
- print('Нажать "3" - загрузить базу данных на pastebin.\n')
- print('Или любую кнопку для отмены...\n')
- local _,_,_,key = ev.pull('key_down')
- if key == 2 then
- createBackup()
- elseif key == 3 then
- fs.copy(paths.backup,paths.factionsList)
- factionsList_R()
- elseif key == 4 then
- g.setForeground(colors.white)
- os.execute('pastebin put '..paths.factionsList)
- print('\n')
- g.setForeground(colors.general)
- print('Для продолжения нажмите любую кнопку...')
- ev.pull('key_down')
- end
- press()
- drawGui()
- end
- function install()
- fs.makeDirectory(folder)
- io.open(paths.backup,'w'):write('{}'):flush():close()
- conf_S()
- end
- function clicker(evName,_,curX,curY,scrollDir,touchNick)
- if evName == 'touch' then
- -- debug('x:'..curX..', y:'..curY) -- для теста позиции курсора
- if curX >= factionsListPoses.x and curX <= factionsListPoses.x + factionsListPoses.w + 1 and curY >= factionsListPoses.y and curY < factionsListPoses.y + factionsListPoses.h then
- factionsListPoses.selectedId = curY + factionsListPoses.startId - factionsListPoses.y
- drawFactionsList()
- if ev.pull(0.15,'touch') then
- local toAdd = scrollFactionsListTable[factionsListPoses.selectedId]
- addToGlassesList(toAdd[1],toAdd[2],toAdd[3])
- drawGlassesList()
- toGlassesFromList()
- end
- return
- elseif curX == glassesListPoses.x + glassesListPoses.w and curY >= glassesListPoses.y and curY <= glassesListPoses.y + glassesListPoses.max - 1 then
- local id = (curY - glassesListPoses.y) + 1
- removeFromGlassesList(id)
- drawGlassesList()
- toGlassesFromList()
- return
- elseif curX == 79 and curY == 5 then
- clearGlassesList()
- return
- end
- for label,button in pairs(buttons) do
- if curX >= button.x and curX <= button.x + u.len(label) + 1 and curY == button.y then
- link(label)
- load(button.action)()
- break
- end
- end
- elseif evName == 'scroll' then
- if curX >= factionsListPoses.x and curX <= factionsListPoses.x + factionsListPoses.w and curY >= factionsListPoses.y and curY < factionsListPoses.y + factionsListPoses.h then
- checkScroll(scrollDir)
- end
- elseif evName == 'key_down' then
- if curY == 199 then
- factionsListPoses.startId = 1
- factionsListPoses.selectedId = 1
- drawFactionsList()
- elseif curY == 207 then
- if #scrollFactionsListTable > factionsListPoses.h then
- factionsListPoses.startId = #scrollFactionsListTable - factionsListPoses.h + 1
- factionsListPoses.selectedId = #scrollFactionsListTable
- drawFactionsList()
- else
- factionsListPoses.selectedId = #scrollFactionsListTable
- drawFactionsList()
- end
- elseif curY == 63 then
- checkAreaupdates()
- end
- end
- end
- function start()
- if not c.isAvailable('internet') then
- print(scriptInfo.label..': Интернет карта не подключена!')
- elseif g.getDepth() == 1 then
- print(scriptInfo.label..': Монитор и видеокарта 1 уровня не поддерживаются!')
- elseif not c.isAvailable('glasses') then
- print(scriptInfo.label..': Glasses Terminal не подключен!')
- elseif not c.isAvailable('os_entdetector') then
- print(scriptInfo.label..': Entity Detector не подключен!')
- else
- if fs.exists(folder) then
- conf_R()
- factionsList_R()
- else
- install()
- end
- internet = require('internet')
- glasses = c.glasses
- glasses.removeAll()
- buttons['COMP'].coords = {c.os_entdetector.getLoc()}
- autosaveTimer = ev.timer(30,conf_S,math.huge)
- press()
- drawGui()
- getFactionsCount()
- while work do
- checkMap()
- os.sleep(2)
- end
- exit()
- end
- end
- function stopkran()
- press('lock')
- glassesListMessage('-Завершение работы-')
- work = false
- end
- function exit()
- conf_S()
- createBackup()
- term.clear()
- glasses.removeAll()
- ev.cancel(autosaveTimer)
- g.setForeground(colors.white)
- g.setResolution(wOld,hOld)
- os.sleep(0.1)
- end
- function ev.shouldInterrupt()
- return false
- end
- start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement