Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- http://computercraft.ru/topic/2498-ramka-radiatsionnogo-kontrolya/
- -- https://pastebin.com/edit/c2Gd1s8Z
- -- https://www.youtube.com/user/Hikooshi
- local component = require("component")
- local gpu = component.gpu
- local event = require("event")
- local unicode = require("unicode")
- local term = require("term")
- local shift = 1
- local warnings = {{0xFF0000, "Вы заражены"}, {0x00FF00, "Вы не заражены"}}
- local sides = require("sides")
- local rs = component.redstone
- local plr = {}
- local players = {}
- local chkd = nil
- local side_rs = 2 -- Это сторона вывода редстоуна, её можно поменять
- local awaiting = false
- fPix = unicode.char(9608)
- uPix = unicode.char(9600)
- dPix = unicode.char(9604)
- progressBars = {
- progressBar2 = {x=3, y=7, length=32, title="Новый прогрессбар", width=5, active = true, showPercents = true, fill = true, percents = 0, cFore = 0x00FF00, cForePrepare = 0x009900, cForeProgress = 0x0000FF, cForeTitle = 0xFFFFFF, cBackTitle = 0x000000, cForePercents = 0xFFFFFF}}
- function drawProgressBar()
- term.clear()
- gpu.setResolution(36, 18)
- tbl1 = progressBars.progressBar2
- if tbl1.active then
- gpu.setBackground(tbl1.cFore)
- gpu.fill(tbl1.x-2, tbl1.y-1, tbl1.length+6, tbl1.width+2, " ")
- gpu.setForeground(tbl1.cForePrepare)
- if tbl1.width%2 == 1 then
- gpu.fill(tbl1.x, tbl1.y, tbl1.length, tbl1.width, fPix)
- elseif tbl1.width%2 == 0 then
- gpu.setBackground(tbl1.cFore)
- gpu.fill(tbl1.x, tbl1.y, tbl1.length, 1, dPix)
- gpu.fill(tbl1.x, tbl1.y + 1, tbl1.length, tbl1.width - 1, fPix)
- gpu.fill(tbl1.x, tbl1.y + tbl1.width, tbl1.length, 1, uPix)
- end
- if tbl1.showPercents then
- gpu.setForeground(tbl1.cForePercents)
- if tbl1.percents <= 9 then
- percents = tostring(tbl1.percents) .. "%"
- for i = tbl1.x + tbl1.length/2 - 1, tbl1.x + tbl1.length/2 do
- local _, color = gpu.get(i, tbl1.y)
- gpu.setBackground(color)
- gpu.set(i, tbl1.y + math.floor(tbl1.width/2), string.sub(percents, i - tbl1.x - (tbl1.length/2 - 2)))
- end
- elseif tbl1.percents > 9 and tbl1.percents < 100 then
- percents = tostring(tbl1.percents) .. "%"
- for i = tbl1.x + tbl1.length/2 - 1, tbl1.x + tbl1.length/2 + 1 do
- local _, color = gpu.get(i, tbl1.y)
- gpu.setBackground(color)
- gpu.set(i, tbl1.y + math.floor(tbl1.width/2), string.sub(percents, i - tbl1.x - (tbl1.length/2 - 2)))
- end
- else
- percents = tostring(tbl1.percents) .. "%"
- for i = tbl1.x + tbl1.length/2 - 2, tbl1.x + tbl1.length/2 + 1 do
- local _, color = gpu.get(i, tbl1.y)
- gpu.setBackground(color)
- gpu.set(i, tbl1.y + math.floor(tbl1.width/2), string.sub(percents, i - tbl1.x - (tbl1.width/2 - 3)))
- end
- end
- end
- end
- end
- function processingProgressBar(varEff)
- tbl = progressBars.progressBar2
- activator = true
- while activator do
- if tbl.percents < 100 then
- tbl.percents = tbl.percents + 1
- percents = tostring(tbl.percents) .. "%"
- os.sleep(0.05)
- else
- activator = false
- end
- if tbl.width%2 == 1 then
- gpu.setForeground(tbl.cForeProgress)
- gpu.fill(tbl.x, tbl.y, math.floor(tbl.percents/(100/tbl.length)), tbl.width, fPix)
- elseif tbl.width%2 == 0 then
- gpu.setForeground(tbl.cForeProgress)
- gpu.setBackground(tbl.cFore)
- gpu.fill(tbl.x, tbl.y, math.floor(tbl.percents/(100/tbl.length)), 1, dPix)
- gpu.fill(tbl.x, tbl.y + 1, math.floor(tbl.percents/(100/tbl.length)), tbl.width - 1, fPix)
- gpu.fill(tbl.x, tbl.y + tbl.width, math.floor(tbl.percents/(100/tbl.length)), 1, uPix)
- end
- if tbl.showPercents == true then
- gpu.setForeground(tbl.cForePercents)
- if tbl.percents >= 0 and tbl.percents <= 9 then
- for i = tbl.x + tbl.length/2 - 1, tbl.x + tbl.length/2 do
- local _, color = gpu.get(i, tbl.y)
- gpu.setBackground(color)
- gpu.set(i, tbl.y + math.floor(tbl.width/2), string.sub(percents, i - tbl.x - (tbl.length/2 - 2)))
- end
- elseif tbl.percents > 9 and tbl.percents < 100 then
- for i = tbl.x + tbl.length/2 - 1, tbl.x + tbl.length/2 + 1 do
- local _, color = gpu.get(i, tbl.y)
- gpu.setBackground(color)
- gpu.set(i, tbl.y + math.floor(tbl.width/2), string.sub(percents, i - tbl.x - (tbl.length/2 - 2)))
- end
- elseif tbl.percents == 100 then
- for i = tbl.x + tbl.length/2 - 2, tbl.x + tbl.length/2 + 1 do
- local _, color = gpu.get(i, tbl.y)
- gpu.setBackground(color)
- gpu.set(i, tbl.y + math.floor(tbl.width/2), string.sub(percents, i - tbl.x - (tbl.length/2 - 3)))
- end
- end
- end
- end
- drawMessage(varEff)
- gpu.setForeground(0xFFFFFF)
- gpu.setBackground(0x000000)
- end
- function drawMessage(eff)
- gpu.setBackground(0x444444) --цвет фона сообщения о заражении или незаражении +
- term.clear()
- gpu.setResolution(28, 14)
- if eff == true then
- gpu.setForeground(warnings[1][1])
- --gpu.set(2, 3, warnings[1][2])
- --gpu.fill(1, 3, 16, 4, unicode.char(9608))
- gpu.set(1, 7, "Радиоактивный фон выше нормы")
- gpu.set(1, 9, " Оставайтесь на месте ")
- chkd = true
- else
- gpu.setForeground(warnings[2][1])
- --gpu.set(3, 3, warnings[2][2])
- --gpu.fill(1, 3, 16, 4, unicode.char(9608))
- gpu.set(1, 7, " Радиоактивный фон в норме ")
- gpu.set(1, 9, " Проходите ")
- rs.setOutput(side_rs, 15)
- chkd = false
- end
- progressBars.progressBar2.percents = 0
- awaiting = false
- end
- -- рабочее пространство ограничено кубом
- -- ! задать координаты относительно сенсора
- local x1,x2,y1,y2,z1,z2 = -2,2, 0,0, -2,2
- -- ! задать паузу между опросами сенсора (в секундах)
- local pause = 1
- local time = require"computer".uptime
- local sens = component.openperipheral_sensor
- --local rs = component.redstone
- local fRadiation -- флаг наличия зараженного игрока в опасной зоне
- local player_name -- имя неудачника (Родина должна знать своих героев!)
- rs.setOutput(side_rs, 0)
- while true do
- local eff = false
- local playerFound = false
- os.sleep(pause)
- players = sens.getPlayers()
- for _,player in pairs(players) do
- local fOk, player = pcall(sens.getPlayerByUUID,player.uuid)
- if fOk then
- info = player.all()
- local p = info.position
- if x1<=p.x and p.x<=x2 and y1<=p.y and p.y<=y2 and z1<=p.z and p.z<=z2 then
- playerFound = true
- break
- end
- --else
- --chkd = false
- end
- end
- if playerFound then
- for _,effect in pairs(info.living.potionEffects) do
- if effect == "ic2.potion.radiation" then
- eff = true
- break
- end
- end
- else
- chkd = false
- end
- --print(playerFound, eff, chkd)
- if playerFound == true and rs.getOutput(side_rs) == 0 then
- if not chkd then
- gpu.setBackground(0x444444) --цвет фона предупреждения +
- gpu.setForeground(0xFFFFFF) --цвет текста предупреждения +
- term.clear()
- gpu.setResolution(20, 10)
- --gpu.set(1, 3, "Сейчас будет произведена проверка") --X, Y, Само предупрежедние +
- gpu.set(1, 5, " Сейчас будет ")
- gpu.set(1, 6, "произведена проверка")
- os.sleep(2)
- drawProgressBar()
- processingProgressBar(eff)
- end
- elseif playerFound == false and not awaiting then
- gpu.setBackground(0x444444) --цвет фона сообщения об ожидании +
- gpu.setForeground(0x0000FF) --цвет текста сообщения об ожидании +
- term.clear()
- gpu.setResolution(8, 4)
- --gpu.set(74, 25, "Ожидание игрока") --X, Y, сообщение об ожидании +
- gpu.set(1, 2, "Ожидание")
- gpu.set(1, 3, " игрока ")
- rs.setOutput(side_rs, 0)
- awaiting = true
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment