Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require('component')
- local gpu = component.gpu
- local event = require('event')
- local term = require('term')
- -------------
- local Admin = 'Ren' --Ник администратора. То бишь того, кто может заносить в чс нажатием на ползунок
- local side = 3 --сторона, из которой будет излучаться редстоун сигнал
- -------------
- -----------КОНСТАНТЫ-----------
- local all = 2
- local name1='HISTORY '
- local name2='BLACK LIST'
- local inactiveC={bg=0x505050, fg=0xffffff} --цвета действительны для монитора 2 уровня
- local activeC = {bg=0xc0c0c0, fg=0x000000}
- local pimp = 0x5f5eff --цвет пимпочки переключателя
- local w = 32 --разрешение действительно для монитора (2 блока в ширину, 3 в высоту)
- local h = 25 --если вы хотите поменять ширину монитора, то разрешение придётся подыскивать самостоятельно
- local using = 1
- -------------------------------
- visited={}
- lazy={}
- count=0
- function drawIt(all,active,...)
- z={}
- for k,name in ipairs{...} do
- z[k]=name
- end
- size = size or w/all
- gpu.setBackground(activeC.bg)
- gpu.setForeground(activeC.fg)
- term.clear()
- gpu.set((active-1)*size+1+(size-string.len(z[active]))/2,2,z[active])
- gpu.setBackground(inactiveC.bg)
- gpu.setForeground(inactiveC.fg)
- for k=1,all do
- if k~=active then
- gpu.fill((k-1)*size+1,1,size,3,' ')
- gpu.set((k-1)*size+1+(size-string.len(z[k]))/2,2,z[k])
- end
- end
- using = active
- if using == 1 then
- lastVisited()
- else
- tobl()
- end
- end
- function lastVisited(nick)
- gpu.setBackground(activeC.bg)
- gpu.setForeground(activeC.fg)
- if nick and nick~=visited[count<7 and count or 7] then
- count=count+1
- if count>7 then
- table.remove(visited,1)
- end
- table.insert(visited,nick)
- end
- if using == 1 then
- for k=1, #visited do
- gpu.set(2,5+(k-1)*3,visited[k])
- switcher(k,1==bl[visited[k]])
- end
- end
- gpu.set(2,25,'Всего посетило: '..count)
- end
- function switcher(num,pos)
- gpu.setBackground(inactiveC.bg)
- gpu.setForeground(inactiveC.fg)
- gpu.fill(23,5+(num-1)*3,7,1,' ')
- if pos then
- gpu.set(25,5+(num-1)*3,'IN')
- gpu.setBackground(pimp)
- gpu.fill(28,5+(num-1)*3,2,1,' ')
- else
- gpu.set(26,5+(num-1)*3,'OUT')
- gpu.setBackground(pimp)
- gpu.fill(23,5+(num-1)*3,2,1,' ')
- end
- gpu.setBackground(activeC.bg)
- gpu.setForeground(activeC.fg)
- end
- function touched(x,y)
- if y<4 then
- local touse = math.ceil(x/size)
- if touse ~= using then
- drawIt(all,touse,name1,name2)
- end
- elseif x<30 and x>=23 and (y-2)%3==0 and (y-2)/3<=count and nameT == Admin and using == 1 then
- local fl = tobl(visited[(y-2)/3])
- switcher((y-2)/3,fl)
- elseif x<30 and x>=23 and (y-2)%3==0 and (y-2)/3 <= #lazy and nameT == Admin and using == 2 then
- local fl = tobl(lazy[(y-2)/3])
- end
- end
- function tobl(name)
- gpu.setBackground(activeC.bg)
- gpu.setForeground(activeC.fg)
- local r
- if bl==nil then
- bl={}
- f=io.open('bl.txt')
- for name in f:lines() do
- bl[name]=1
- table.insert(lazy,name)
- end
- f:close()
- end
- if name then
- if bl[name]==1 then
- bl[name]=nil
- for k,n in ipairs(lazy) do
- if n==name then table.remove(lazy,k) end
- end
- r = false
- else
- bl[name]=1
- table.insert(lazy,name)
- r = true
- end
- ::label::
- f=io.open('bl.txt','w')
- for name,_ in pairs(bl) do
- if f~=nil then
- f:write(name,'\n')
- else goto label end
- end
- if f~=nil then
- f:flush()
- else goto label end
- end
- if using == 2 then
- gpu.fill(1,4,32,20,' ')
- for k=1,#lazy do
- gpu.set(2,5+(k-1)*3,lazy[k])
- switcher(k,true)
- end
- end
- return r
- end
- ----------main-----------
- print('Коснитесь экрана, который будет использоваться в качестве монитора')
- _,address=event.pull('touch')
- component.setPrimary('screen',address)
- gpu.setResolution(w,h)
- drawIt(all,using,name1,name2)
- tobl()
- while true do
- what,_,x,y,nameW,nameT=event.pull()
- if what == 'walk' then
- lastVisited(nameW)
- if bl[nameW]==nil then
- component.redstone.setOutput(side,15)
- os.sleep(2)
- component.redstone.setOutput(side,0)
- end
- elseif what == 'touch' then touched(x,y) end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement