Pofigist 35 Опубликовано: 24 марта, 2016 (изменено) Всем привет. Я, собственно, новичок в сфере программирования и потому выкладываю свою первую программу, коих вариации наверное дофигульки много. Просьба строго оценивать саму работоспособность программы. Поехали! Lock.lua - программа блокирующая ваш компьютер и защищающая от чужих ручонок. Ctrl+Alt+C тут не поможет. И только перезапуск кнопкой в самом системнике спасет ситуацию если вы не знаете пароля. Программа способна реагировать на события, такие как: ввод верного пароля и ввод неверного пароля - при этом она может подавать редстоун-сигнал или беспроводное сетевое сообщение(см. Конфиг) Системные требования: ●Процессор (1 уровень) ●Видеокарта (1 уровень) ●ОЗУ (1 уровень) ●Жесткий диск (1 уровень) ●Интернет карта(для загрузки) Дополнительно: ●Плата на красном камне ●Плата беспроводной сети Функционал: 1)Подает редстоун-сигнал на указанную в конфиге сторону при верно-введенном пароле. 2)Подает редстоун-сигнал на указанную в конфиге сторону при неверном пароле. 3)Вещает сигнал "LockSignal" и последующие: "True_Pass", если был введен правильный пароль. "Bad_Pass", если был введен неправильный пароль. "Error", если вдруг что Конфиг(etc/Lock.cfg): Конфиг настроек достаточно прост. Ниже перечислены описания строк и их возможные значения. password=1234 - основной пароль. Теперь может состоять только из цифр! adminPass=228228 - админский пароль состоящий из цифр. На данный момент нужен лишь на тот случай, когда основной был забыт. sound=true - включает звуковые оповещения, если стоит true. redstone=true - Если стоит true, то в системе должна быть плата на красном камне. RedCorr=3 - работает лишь если redstone=true и подает сигнал на сторону 3, если был введен правильный пароль. RedIncor=2 -работает лишь если redstone=true и подает сигнал на сторону 2, если был введен неправильный пароль. network=false - При true в системе нужна беспроводная сетевая плата для корректной работы. port=512 - номер порта на который будут распространяться сигналы от программы. Стороны и их числовые эквиваленты(для RedCorr и RedIncor): Низ - 0 Верх - 1 Тыл - 2 Перед - 3 Право - 4 Лево - 5 Установка: Простая загрузочка с пастебина. pastebin get -f zitiaarN Lock.lua Сам код: http://pastebin.com/zitiaarN В будущем планируется значительная доработка данной программы, но так как сейчас она уже выполняет свою основную задачу - выкладываю в общий доступ. Версии: 1.0 - основа основ. 1.1 - исправлен ошибка, когда первый запуск заканчивался ошибкой, так как создавался файл конфига. 1.2 - более читабельный конфиг. 1.3 - добавлены звуковые оповещения при вводе верного и неверного пароля. P.S. Не вижу особого смысла в скриншотах, так как пока что используется стандартный консольный вывод(Графодрочеры, пока что вас удовлетворить не смогу. :с ) Изменено 26 марта, 2016 пользователем Pofigist Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 24 марта, 2016 Программа тестировалась на вырубание? pcall точно спасает от Ctrl+Alt+C / Ctrl + D / Ctrl + C? Помню что-то писал, и не спасало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Pofigist Автор темы 35 Опубликовано: 24 марта, 2016 Программа тестировалась на вырубание? pcall точно спасает от Ctrl+Alt+C / Ctrl + D / Ctrl + C? Помню что-то писал, и не спасало. Да, спасает. Во всяком случае в моей программе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 723 Опубликовано: 25 марта, 2016 (изменено) Да, спасает. Во всяком случае в моей программе Это случайно не тот замок что 2-3 месяца назад я взломал и поменял пароли? Там ещё 2 игрока жили в доме. И заприватил тоже я, если речь идёт про тот самый комп. Изменено 25 марта, 2016 пользователем qwertyMAN Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 723 Опубликовано: 25 марта, 2016 (изменено) redstone=1 - либо 0 либо 1. Если стоит 1, то в системе должна быть плата на красном камне. network=1 - либо 0, либо 1. При 1 в системе нужна беспроводная сетевая плата для корректной работы. В таких случаях обычно ставят true и false. Такие переменные занимают всего 1 бит памяти как я понимаю. Так что для работы и чтения кода 0 и 1 писать - плохой вариант. Используй всю мощь разных типов данных lua. Вот прям сейчас зайди в гугл и забей: "типы данных lua", почитай повнимательнее что и для чего используется. P.S. Подумай о людях. Добавь в описание простую и удобную ссылку на код. А то я заметил, что при выкладывании работы многие недооценивают лень пользователей. Всё желание пропадает читать код, когда сам разработчик поленился прямую ссылку выложить. Извини, но это уже 100% быдлокод: local words = {"password=", "adminPass=", "redstone=", "RedCorr=", "RedIncor=", "network=", "port="} Правильно было бы написать вот так: local words = { password = "qwerty", adminPass = "asdfgh", redstone = true, RedCorr = 3, RedIncor = 3, network = false, port = 123 } А то как ты решил это меня совершенно не устраивает. Ты решил всё записать в строку, потом как то разрезать всё на кусочки и взять пароль. Спрашивается зачем? Можно было легко и удобно сразу все переменные задать и не мучится. А когда проверка на редстоун будет писать вот так: if redstone then ... end Пока redstone равна nil или false - условие не выполняется, в других же случаях выполняется. А в остальном код неплохой. Изменено 25 марта, 2016 пользователем qwertyMAN Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Pofigist Автор темы 35 Опубликовано: 25 марта, 2016 Это случайно не тот замок что 2-3 месяца назад я взломал и поменял пароли? Там ещё 2 игрока жили в доме. И заприватил тоже я, если речь идёт про тот самый комп. Нет, это был не мой замок По поводу здравой критики: Я знаю про булевые переменные, но просто было лень. Мой способ чтения конфига был тем хорош, что мог прочитать любое кол-во строк и при этом все равно состоять тупо из трех строчек, но раз уж это быдлокод - новая версия! Кстати интересно было бы узнать, как такой замок можно взломать XD Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 723 Опубликовано: 25 марта, 2016 Нет, это был не мой замок По поводу здравой критики: Я знаю про булевые переменные, но просто было лень. Мой способ чтения конфига был тем хорош, что мог прочитать любое кол-во строк и при этом все равно состоять тупо из трех строчек, но раз уж это быдлокод - новая версия! Кстати интересно было бы узнать, как такой замок можно взломать XD У меня есть основания полагать что это была твоя прога, которая была на компе у игроков, так как там было 3 пароля: Для админа и ещё 2. В целом очень похоже на твою прогу. Тоже открывает двери, причём у игроков было 2 двери. И кажется 2 пароля как раз открывали эти двери по отдельности. Либо я ошибаюсь и третий пароль просто выходил из проги. Уже и не помню. Как взломал не скажу, в какой то степени потому что не помню. Но факт в том что на Ctrl+Alt+C закрыть прогу нельзя было и вызывалось сообщение об этом на компе. Насчёт конфигов, зачем тебе их записывать куда то? Это лишнее. Просто храни в программе всё что нужно как я показал. Так будет и проще и лучше. Я всегда в своих прогах сначала прогружаю библиотеки, потом задаю переменные, и лишь потом пишу функции. И всё что хранится в переменных у меня хранится именно в верхней части кода что очень удобно. Если вдруг кто захочет изменить параметры - сможет легко их изменить, не гуляя по коду в поисках где эта переменная была присвоена (как у тебя происходит с паролем). Так что старайся все важные переменные (которые игроки могут захотеть изменить) прописывать вначале кода. Так будет реально лучше. Ты говоришь про лень, мне кажется это отмазка. Использовать 1 и 0 вместо true и false - это плохая привычка. У всех кто более менее разбирается в lua или другом языке программирования, глаз режет подобный подход. Будешь учиться писать правильно - будешь привыкать. Привыкнешь к использованию всех типов данных по назначению - будет намного проще и удобнее программировать. Я вон за 3 часа 150 строк кода написал - в итоге рабочий кликер в майнкрафте. Для меня это уже достижение в скорости, но и это не предел. Вот тебе совет. Бери чужой код и разбирайся. В оптимизации это сильно помогает. А без оптимизации обучение стоит на месте. Тут один игрок мне подсказал как круто использовать оператор %, теперь я с радостью его использую там где мог бы быть костыль. Чужой код рулит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 723 Опубликовано: 25 марта, 2016 (изменено) P.S. Булева - это удобная для программирования штука. Вот тебе доказательство этому: local quit_cash = false --положение кнопки по умолчанию (выкл) local color = { --цвета используемые в программе quit_cash_1=0x00ff00, --цвет активной кнопки (зелёный) quit_cash_2=0xff0000 --цвет пассивной кнопки (красный) } local function draw_quit_cash() local msg,col --устанавливаем локальные переменные (а локальные они потому, что после окончания функции обнуляться, очистив память) if quit_cash then --установим сообщение на кнопки и её цвет, в зависимости от её положения msg=" on " col=color.quit_cash_1 else msg=" off " col=color.quit_cash_2 end gpu.setBackground(col) --цвет который установили gpu.setForeground(0x000000) gpu.set(14, 24, msg) --сообщение которое написали end local function touch(_,_, x, y) if x>13 and x<21 and y==24 then --ловим клик по нужным координатам quit_cash = not quit_cash --переключаем переключатель на противоположное значение draw_quit_cash() --отрисовываем кнопку end end Ссылка на полный код: http://pastebin.com/bvxyh7fX Теперь о коде. Что удобного? Во первых эти переменные повышают читаемость кода. Во вторых тратят минимум памяти. В третьих - гибкие и удобные. Например сравним if i==1 и if i . В первом случае прога сначала сравнит i и 1, и в случае соответствия выдаст true (тип переменной учитывается, i=="1" выдаст false) А во втором случае сразу переменная передаёт false или true, увеличив скорость работы. Ещё одна фишка показана в коде button = not button. Что очень просто и легко обращает переменную. В ином случае тебе бы пришлось строить сложную схему if button==1 then button=0 else button=1 end что увеличило бы время работы программы и усложнило читаемость кода таким костылём. По всем критериям булева - это крутой тип данных! Впрочем, все типы данных круты, если использовать их по назначению. P.S. Помнишь я тебе говорил о том что нужно все важные локальные переменные выносить вверх? Я ведь этого не сделал с msg. А ведь мог вначале написать msg_1= и msg_2=. Но дело в том что изменять их значения нет смысла никому. Это не важные переменные. Да и памяти будет лучше если они будут удаляться после завершения функции так как это локальные переменные. Изменено 25 марта, 2016 пользователем qwertyMAN 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Pofigist Автор темы 35 Опубликовано: 26 марта, 2016 У меня есть основания полагать что это была твоя прога, которая была на компе у игроков, так как там было 3 пароля: Для админа и ещё 2. В целом очень похоже на твою прогу. Тоже открывает двери, причём у игроков было 2 двери. И кажется 2 пароля как раз открывали эти двери по отдельности. Либо я ошибаюсь и третий пароль просто выходил из проги. Уже и не помню. Как взломал не скажу, в какой то степени потому что не помню. Но факт в том что на Ctrl+Alt+C закрыть прогу нельзя было и вызывалось сообщение об этом на компе. Насчёт конфигов, зачем тебе их записывать куда то? Это лишнее. Просто храни в программе всё что нужно как я показал. Так будет и проще и лучше. Я всегда в своих прогах сначала прогружаю библиотеки, потом задаю переменные, и лишь потом пишу функции. И всё что хранится в переменных у меня хранится именно в верхней части кода что очень удобно. Если вдруг кто захочет изменить параметры - сможет легко их изменить, не гуляя по коду в поисках где эта переменная была присвоена (как у тебя происходит с паролем). Так что старайся все важные переменные (которые игроки могут захотеть изменить) прописывать вначале кода. Так будет реально лучше. Ты говоришь про лень, мне кажется это отмазка. Использовать 1 и 0 вместо true и false - это плохая привычка. У всех кто более менее разбирается в lua или другом языке программирования, глаз режет подобный подход. Будешь учиться писать правильно - будешь привыкать. Привыкнешь к использованию всех типов данных по назначению - будет намного проще и удобнее программировать. Я вон за 3 часа 150 строк кода написал - в итоге рабочий кликер в майнкрафте. Для меня это уже достижение в скорости, но и это не предел. Вот тебе совет. Бери чужой код и разбирайся. В оптимизации это сильно помогает. А без оптимизации обучение стоит на месте. Тут один игрок мне подсказал как круто использовать оператор %, теперь я с радостью его использую там где мог бы быть костыль. Чужой код рулит. По поводу конфига. Мне просто как-то привычнее, чтобы настройки находились отдельно от всего кода. Чтоб не было лишнего повода залезать в саму программу. Так же в будущем, подобно ECS, планирую свою граф. оболочку скрутить, а там уже конфиги понадобятся. Но пока что это все в планах. На деле же изучаю чтение и запись из файла. Кстати, есть ли какая-нибудь информация о 0x000000 формате цвета. Я конечно покопался в твоей библиотеке conv, но хотелось бы и из источника вычитать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 26 марта, 2016 0x000000 — это число в 16-ричной системе счисления. Начинается обязательно с 0x и должен состоять из символов 0123456789abcdefABCDEF. Очень полезное применение — это цвета, так как True-color имеет ровно 16777216 цветов (24 бита), а это есть 166. Символов в 16-ричной системе счисления как раз 16. Потому используется формат RRGGBB, где RR — красный, GG — зелёный, BB — синий. Например, мой любимый цвет 0x20afff. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 723 Опубликовано: 26 марта, 2016 (изменено) стати, есть ли какая-нибудь информация о 0x000000 формате цвета. Не знаю. В гугле по этому поводу не могу составить правильно запрос чтобы тебе дать ссылку, так что придётся так рассказать. Хотя нет, не придётся. Фингер в ту же секунду уже рассказал, так что спасибо ему Мне просто как-то привычнее, чтобы настройки находились отдельно от всего кода. Пока что в обычных прогах это бесполезно и не понятно зачем. Пользователям думаешь будет приятно, если 10 твоих прог будут создавать 10 конфигов и забивать ими комп? Хотя всё прекрасно помещается в программу. Странно, но чем больше я изучаю программирование, тем меньше у меня цели. Надеюсь, до того момента когда затеешь писать граф оболочку, у тебя будет много желания и сил для этого. ... Только что заметил что ты не рассказал про RGBA, записывается как 0xRRGGBBAA. Последняя цифра A - это прозрачность. 32-бит, как и у всех мониторов. И луа видя цифру начинающуюся с 0x, автоматически переводит её в десятичный вид. То есть написав x = 0xF при print(x) получим 15. И ещё, вот такой текст можно перевести в число таким образом tonumber("0x".."ff".."ff".."00"). То есть мы даём три переменные (rgb), складываем их как текст и при помощи tonumber() и переводим в hex число. Изменено 26 марта, 2016 пользователем qwertyMAN Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 26 марта, 2016 Только что заметил что ты не рассказал про RGBA, записывается как 0xRRGGBBAA. Последняя цифра A - это прозрачность. 32-бит, как и у всех мониторов. Смысла в этом нет, будет ещё в OC пытаться пихнуть... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Pofigist Автор темы 35 Опубликовано: 26 марта, 2016 0x000000 — это число в 16-ричной системе счисления. Начинается обязательно с 0x и должен состоять из символов 0123456789abcdefABCDEF. Очень полезное применение — это цвета, так как True-color имеет ровно 16777216 цветов (24 бита), а это есть 166. Символов в 16-ричной системе счисления как раз 16. Потому используется формат RRGGBB, где RR — красный, GG — зелёный, BB — синий. Например, мой любимый цвет 0x20afff. Но в OC же поддерживается глубина цвета 8 байт. То-есть для местных мониторов гораздо меньше цветов? Как тогда определить какие поддерживаются а какие нет? (Понятно, что система будет "округлять" цвет до нужного, но все же хотелось бы узнать какие именно используются и их количество. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 723 Опубликовано: 26 марта, 2016 Но в OC же поддерживается глубина цвета 8 байт. То-есть для местных мониторов гораздо меньше цветов? Как тогда определить какие поддерживаются а какие нет? (Понятно, что система будет "округлять" цвет до нужного, но все же хотелось бы узнать какие именно используются и их количество. Взяв виндосовский пэинт и сделав пару скринов, могу сказать что примерно у монитора 2 уровня шаг составляет 0x33. Например цвета 0x6633cc 0xff0099 и подобные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Pofigist Автор темы 35 Опубликовано: 26 марта, 2016 Взяв виндосовский пэинт и сделав пару скринов, могу сказать что примерно у монитора 2 уровня шаг составляет 0x33. Например цвета 0x6633cc 0xff0099 и подобные. Ммм... Это не так уж и много. Примерно 256 цветов :/ Ну что же... Время составлять визуальную составляющую замка XD Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo 789 Опубликовано: 26 марта, 2016 Как тогда определить какие поддерживаются а какие нет? Тыц Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
newbie 1 971 Опубликовано: 27 марта, 2016 Как тогда определить какие поддерживаются а какие нет? Я использую Веб цвета, все показывало пока что) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах