View difference between Paste ID: WTAEzYez and 9N9M4EUY
SHOW: | | - or go back to the newest paste.
1
local component = require("component")
2
local computer=require("computer")
3
local event = require("event")
4
local term = require("term")
5
local shell = require("shell")
6
local fs = require("filesystem")
7
local unicode=require("unicode")
8
local serial = require("serialization")
9
	
10
11
if not fs.exists("/lib/sky.lua") then
12
	shell.execute("wget https://www.dropbox.com/s/m2n66dfo67909op/sky.lua?dl=1 /lib/sky.lua")
13
end
14
local sky = require("sky")
15
local g = component.gpu
16
event.shouldInterrupt = function () return false end
17
--------------------Настройки--------------------
18
local WIDTH, HEIGHT = 146, 42 --Разрешение моника 146/112 x 42
19
local PASS = "1311" --Пасс
20
local COLOR1 = 0x00ffff --Рамка
21
local COLOR2 = 0x0000ff --Цвет кнопок
22
local COLOR3 = 0x333333 --Таблица
23
local COLOR_SHELL = 0xff00ff --Цвет шелла
24
-------------------------------------------------
25
if not (fs.exists(shell.getWorkingDirectory() .. "/Programms.lua")) then
26
	shell.execute("wget https://www.dropbox.com/s/goctvwc0p3tpf6t/Programms.lua?dl=1")
27
end
28
if not (fs.exists("/autorun.lua")) then
29
	print("\nНастройка автозапуска...")
30
	file = io.open("/autorun.lua", "w")
31
	file:write("local shell = require('shell')\nlocal term = require('term')\nos.sleep(0.5)\nterm.clear()\nlocal dir = '" .. shell.getWorkingDirectory() .. "'\nif dir ~= '/' then shell.setWorkingDirectory(dir) end\nshell.execute('SkyPad')")
32
	file:close()
33
	os.sleep(1)
34
end
35
print("\nИнициализация...")
36
os.sleep(2)
37
print("Запуск программы...")
38
os.sleep(2)
39
40
local mid = (WIDTH-32)/2+32
41
local login, prog, tech = false, false, false
42
local sel = 0
43
44
g.setResolution(WIDTH, HEIGHT)
45
sky.logo("Sostav", COLOR1, COLOR2, WIDTH, HEIGHT)
46
g.setForeground(COLOR2)
47
for i = 1, HEIGHT do
48
	g.set(29, i, "||")
49
end
50
51
file = io.open(shell.getWorkingDirectory() .. "/Programms.lua", "r")
52
local progs = serial.unserialize("{" .. file:read(9999999) .. "}")
53
file:close()
54
55
function Login()
56
	login = false
57
	prog = false
58
	tech = false
59
	sky.clearL(HEIGHT)
60
	sky.clearR(WIDTH,HEIGHT)
61
	Rules()
62
	g.setForeground(COLOR1)
63
	sky.word(mid - 28,7, "mcskill", 0x222222)
64
	--users={computer.users()}
65
    --for i=1, #users do
66
    --    computer.removeUser(users[i])
67
    --end
68
	sky.midR(WIDTH,32,"Введите пароль:")
69
	term.setCursor(mid-2,33)
70
	local p, nick = sky.read({mask = "*", max = 8, accept = "0-9a-f", blink = true, center = true, nick = true})
71
	if p == PASS then
72
		if (sky.checkOP(nick)) then
73
			login = true
74
			sky.midR(WIDTH,33,"Приветствую, " .. nick)
75
			computer.addUser(nick)
76
			os.sleep(2)
77
			sky.clearL(HEIGHT)
78
			sky.clearR(WIDTH,HEIGHT)
79
			Rules(nick)
80
			Table()
81
		else
82
			sky.midR(WIDTH,34,"Даже, зная пароль, просто так")
83
			sky.midR(WIDTH,35,"ты сюда не войдёшь")
84
			os.sleep(2)
85
			sky.midR(WIDTH,37,"Петушинная морда")
86
			os.sleep(3)
87
			Login()
88
		end
89
	else
90
		sky.midR(WIDTH,33,"Неверный пароль")
91
	
92
		os.sleep(2)	
93
		Login()
94
	end
95
end
96
97
function Rules(nick)
98
	if (login) then
99
		g.setForeground(COLOR2)
100
		sky.midL(WIDTH,5,"==========================")
101
		sky.midL(WIDTH,11,"==========================")
102
		sky.midL(WIDTH,15,"==========================")
103
		sky.midL(WIDTH,31,"Добро пожаловать")
104
		g.setForeground(COLOR1)
105
		sky.midL(WIDTH,3, "Общая инфа:")
106
		sky.midL(WIDTH,6, "Монитор в идеале 5х3")
107
		sky.midL(WIDTH,7, "блока, чтоб не париться.")
108
		sky.midL(WIDTH,8, "Но если над другой, то")
109
		sky.midL(WIDTH,9, "в настройках каждой проги")
110
		sky.midL(WIDTH,10, "меняйте параметр WIDTH")
111
		sky.midL(WIDTH,12, "Autorun ставится свой,")
112
		sky.midL(WIDTH,13, "но его можно")
113
		sky.midL(WIDTH,14, "редачить под себя")
114
		sky.midL(WIDTH,32,nick)
115
		sky.button(7,34,18,3,COLOR1,COLOR2,"Обновить")
116
		sky.button(7,37,18,3,COLOR1,COLOR2,"Выйти")
117
	end
118
end
119
120
function TechPanel()
121
	prog = false
122
	g.fill(mid - 43, 13, 83, 23, " ")
123
	sky.midR(WIDTH, 20, "&bВаще хз, чё тут запилить,")
124
	sky.midR(WIDTH, 21, "&bесли есть идеи, напишите :)")
125
	tech = true
126
end
127
128
function ProgrammPanel()
129
	g.fill(mid - 43, 13, 83, 23, " ")
130
	tech = false
131
	sky.midR(WIDTH,13,"&bСписок программ для OpenComputers&r")
132
	g.setForeground(COLOR3)
133
	sky.midR(WIDTH,14, "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓")
134
	sky.midR(WIDTH,15, "┃                       &bНазвание&r                      ┃     &bСтатус&r     ┃  &bРазмер&r  ┃")
135
	sky.midR(WIDTH,16, "┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━╋━━━━━━━━━━┫")
136
	for i = 1, 9 do 
137
		sky.midR(WIDTH,i+16, "┃                                                     ┃                ┃          ┃")
138
	end
139
	sky.midR(WIDTH,26, "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━┻━━━━━━━━━━┛")
140
	DrawProgs(0)
141
	prog = true
142
end
143
144
function DrawProgs(s)
145
	sel = s
146
	for i = 1, #progs do
147
		g.setForeground(COLOR1)
148
		g.set(mid-42, i+16, "                                                     ")
149
		g.set(mid+29, i+16, "          ")
150
		local name_progs = tostring(progs[i][1][1]) .. tostring(progs[i][1][2])
151
		if sel ~= i then
152
			g.set(mid-15-unicode.len(name_progs)/2, i+16, name_progs)		
153
		else
154
			g.set(mid-19-unicode.len(name_progs)/2, i+16, ">>> " .. name_progs .. " <<<")		
155
		end
156
		if (fs.exists(shell.getWorkingDirectory() .. "/" .. progs[i][1][1] .. ".lua")) then
157
			sky.text(mid + 12, i+16, "&2 Установлено  &r")
158
			local size = fs.size(shell.getWorkingDirectory() .. "/" .. progs[i][1][1] .. ".lua")
159
			sky.text(mid + 33 - unicode.len(size)/2, i+16, size .. "B")
160
		else
161
			sky.text(mid + 12, i+16, "&8Не установлено&r")
162
		end
163
	end
164
	g.fill(mid - 42, 27, 84, 10, " ")
165
	if sel ~= 0 then
166
		if (fs.exists(shell.getWorkingDirectory() .. "/" .. progs[sel][1][1] .. ".lua")) then
167
			sky.button(mid-21,33,20,3,COLOR1,COLOR2,"Запустить")
168
			sky.button(mid+1,33,20,3,COLOR1,COLOR2," Обновить ")
169
		else
170
			sky.button(mid-10,33,20,3,COLOR1,COLOR2,"Установить")
171
		end
172
		g.setForeground(COLOR1)
173
		sky.midR(WIDTH,28,"Требуемые компоненты:")
174
		local comp = ""
175
		for i = 1, #progs[sel][3] do
176
			comp = comp .. progs[sel][3][i] .. " &0|&r "
177
		end
178
		sky.midR(WIDTH,29, "&0|&r " .. comp)
179
	end
180
end
181
182
function Click(w,h)
183
	g.setForeground(COLOR1)
184
	if sel ~= 0 then
185
		if (fs.exists(shell.getWorkingDirectory() .. "/" .. progs[sel][1][1] .. ".lua")) then
186
			if w>=mid-21 and w<=mid-2 and h>=33 and h<=35 then
187
				for i = 1, #progs[sel][3] do
188
					if not (component.isAvailable(progs[sel][3][i])) then
189
						sky.midR(WIDTH,31,"&6Отсутствует компонент: &4" .. progs[sel][3][i])
190
						os.sleep(3)
191
						DrawProgs(sel)
192
						return
193
					end
194
				end
195
				term.clear()
196
				shell.execute(progs[sel][1][1])
197
				g.setForeground(COLOR1)
198
				print("\nКликни на монитор для перезагрузки")
199
				local e = event.pull("touch")
200
				print("\nРестарт...")
201
				os.sleep(2)
202
				shell.execute("reboot")
203
			elseif w>=mid+1 and w<=mid+20 and h>=33 and h<=35 then
204
				fs.remove(shell.getWorkingDirectory() .. "/" .. progs[sel][1][1] .. ".lua")
205
				sky.get(progs[sel][2],progs[sel][1][1] .. ".lua",mid-19,31)
206
				sky.midR(WIDTH,31,"                                        ")
207
				DrawProgs(sel)
208
				return
209
			end
210
		else
211
			if w>=mid-10 and w<=mid+9 and h>=33 and h<=35 then
212
				sky.get(progs[sel][2],progs[sel][1][1] .. ".lua",mid-19,31)
213
				sky.midR(WIDTH,31,"                                        ")
214
				DrawProgs(sel)
215
				return
216
			end
217
		end
218
	end
219
	for i = 1, #progs do
220
		if w>=mid-42 and w<=mid+38 and h == i + 16 then
221
			DrawProgs(i)
222
			return
223
		end
224
	end
225
	DrawProgs(0)
226
end
227
228
function Table()
229
	sky.drawImage(mid - 28,7, shell.getWorkingDirectory() .. "/LogoSkill.lua")
230
	sky.button(mid - 32,37,20,3,COLOR1,COLOR2,"Проги")
231
	sky.button(mid - 10,37,20,3,COLOR1,COLOR2,"Войти в шелл")
232
	sky.button(mid + 12,37,20,3,COLOR1,COLOR2,"Тех.панель")
233
	sky.button(WIDTH-11,3,7,4,COLOR1,COLOR2,"")
234
	sky.text(WIDTH-10,4,"&b┌│┐&r")
235
	sky.text(WIDTH-10,5,"&b└─┘&r")
236
end
237
238
function getButtons(w,h)
239
	if w>=7 and w<= 25 and h>=34 and h<=36 then --Кнопка обновить
240
		term.clear()
241
		fs.remove(shell.getWorkingDirectory() .. "/SkyPad.lua")	
242
		fs.remove(shell.getWorkingDirectory() .. "/Programms.lua")
243
		fs.remove("/lib/sky.lua")
244
		g.setForeground(COLOR1)
245
		shell.execute("wget https://www.dropbox.com/s/3bdr406pk8admf1/SkyPad.lua?dl=1 SkyPad.lua")
246
		shell.execute("wget https://www.dropbox.com/s/vumy87kf8zs6td6/Programms.lua?dl=1")
247
		shell.execute("wget https://www.dropbox.com/s/8ak2iakw4r4y7td/sky.lua?dl=1 /lib/sky.lua")
248
		print("\nРестарт...")
249
		os.sleep(2)
250
		shell.execute("reboot")
251
	elseif w>=7 and w<= 25 and h>=37 and h<=39 then --Кнопка Логин
252
		Login()
253
	elseif w>=mid-32 and w<= mid-13 and h>=37 and h<=39 then --Кнопка Проги
254
		ProgrammPanel()
255
	elseif w>=mid-10 and w<= mid+9 and h>=37 and h<=39 then --Кнопка Войти в шелл
256
		term.clear()
257
		g.setForeground(COLOR_SHELL)
258
		shell.execute("sh")
259
	elseif w>=mid+12 and w<= mid+31 and h>=37 and h<=39 then --Кнопка Тех.Панель
260
		TechPanel()
261
	elseif w>=WIDTH-11 and w<= WIDTH-6 and h>=3 and h<=6 then --Кнопка Офф
262
		computer.shutdown()
263
	end
264
end
265
266
Login()
267
268
if fs.exists("/bin/pastebin.lua") then
269
	shell.execute("rm /bin/pastebin.lua")
270
end
271
272
while true do
273
	local e,_,w,h,_,nick = event.pull("touch")
274
	if (login) then
275
		getButtons(w,h)
276
		if (prog) then
277
			Click(w,h)
278
		end
279
	end
280
end