Перейти к содержимому
Pofigist

byPofigist Кодовый замок

Рекомендуемые сообщения

Всем привет.

Я, собственно, новичок в сфере программирования и потому выкладываю свою первую программу, коих вариации наверное дофигульки много. Просьба строго оценивать саму работоспособность программы. Поехали!

 

Lock.lua - программа блокирующая ваш компьютер и защищающая от чужих ручонок. Ctrl+Alt+C тут не поможет. И только перезапуск кнопкой в самом системнике спасет ситуацию если вы не знаете пароля. Программа способна реагировать на события, такие как: ввод верного пароля и ввод неверного пароля - при этом она может подавать редстоун-сигнал или беспроводное сетевое сообщение(см. Конфиг)

 

Системные требования:

●Процессор (1 уровень)

●Видеокарта (1 уровень)

●ОЗУ (1 уровень)

●Жесткий диск (1 уровень)

Интернет карта(для загрузки)

Дополнительно:

●Плата на красном камне

●Плата беспроводной сети

Функционал:

1)Подает редстоун-сигнал на указанную в конфиге сторону при верно-введенном пароле.

2)Подает редстоун-сигнал на указанную в конфиге сторону при неверном пароле.

3)Вещает сигнал "LockSignal" и последующие:

"True_Pass", если был введен правильный пароль.

"Bad_Pass", если был введен неправильный пароль.

"Error", если вдруг что  :rolleyes: 

Конфиг(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. Не вижу особого смысла в скриншотах, так как пока что используется стандартный консольный вывод(Графодрочеры, пока что вас удовлетворить не смогу. :с )

Изменено пользователем Pofigist

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Программа тестировалась на вырубание?

pcall точно спасает от Ctrl+Alt+C / Ctrl + D / Ctrl + C? Помню что-то писал, и не спасало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Программа тестировалась на вырубание?

pcall точно спасает от Ctrl+Alt+C / Ctrl + D / Ctrl + C? Помню что-то писал, и не спасало.

Да, спасает. Во всяком случае в моей программе :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, спасает. Во всяком случае в моей программе :D

Это случайно не тот замок что 2-3 месяца назад я взломал и поменял пароли? Там ещё 2 игрока жили в доме.

И заприватил тоже я, если речь идёт про тот самый комп.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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 - условие не выполняется, в других же случаях выполняется. А в остальном код неплохой.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это случайно не тот замок что 2-3 месяца назад я взломал и поменял пароли? Там ещё 2 игрока жили в доме.

И заприватил тоже я, если речь идёт про тот самый комп.

Нет, это был не мой замок :D

 

По поводу здравой критики: Я знаю про булевые переменные, но просто было лень. Мой способ чтения конфига был тем хорош, что мог прочитать любое кол-во строк и при этом все равно состоять тупо из трех строчек, но раз уж это быдлокод - новая версия! Кстати интересно было бы узнать, как такой замок можно взломать XD

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нет, это был не мой замок :D

 

По поводу здравой критики: Я знаю про булевые переменные, но просто было лень. Мой способ чтения конфига был тем хорош, что мог прочитать любое кол-во строк и при этом все равно состоять тупо из трех строчек, но раз уж это быдлокод - новая версия! Кстати интересно было бы узнать, как такой замок можно взломать XD

У меня есть основания полагать что это была твоя прога, которая была на компе у игроков, так как там было 3 пароля: Для админа и ещё 2.

В целом очень похоже на твою прогу. Тоже открывает двери, причём у игроков было 2 двери. И кажется 2 пароля как раз открывали эти двери по отдельности. Либо я ошибаюсь и третий пароль просто выходил из проги. Уже и не помню.

 

Как взломал не скажу, в какой то степени потому что не помню. Но факт в том что на Ctrl+Alt+C закрыть прогу нельзя было и вызывалось сообщение об этом на компе.

Насчёт конфигов, зачем тебе их записывать куда то? Это лишнее. Просто храни в программе всё что нужно как я показал. Так будет и проще и лучше. Я всегда в своих прогах сначала прогружаю библиотеки, потом задаю переменные, и лишь потом пишу функции. И всё что хранится в переменных у меня хранится именно в верхней части кода что очень удобно. Если вдруг кто захочет изменить параметры - сможет легко их изменить, не гуляя по коду в поисках где эта переменная была присвоена (как у тебя происходит с паролем). Так что старайся все важные переменные (которые игроки могут захотеть изменить) прописывать вначале кода. Так будет реально лучше.

 

Ты говоришь про лень, мне кажется это отмазка. Использовать 1 и 0 вместо true и false - это плохая привычка. У всех кто более менее разбирается в lua или другом языке программирования, глаз режет подобный подход. Будешь учиться писать правильно - будешь привыкать. Привыкнешь к использованию всех типов данных по назначению - будет намного проще и удобнее программировать. Я вон за 3 часа 150 строк кода написал - в итоге рабочий кликер в майнкрафте. Для меня это уже достижение в скорости, но и это не предел.

 

Вот тебе совет. Бери чужой код и разбирайся. В оптимизации это сильно помогает. А без оптимизации обучение стоит на месте. Тут один игрок мне подсказал как круто использовать оператор %, теперь я с радостью его использую там где мог бы быть костыль. Чужой код рулит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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=. Но дело в том что изменять их значения нет смысла никому. Это не важные переменные. Да и памяти будет лучше если они будут удаляться после завершения функции так как это локальные переменные.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня есть основания полагать что это была твоя прога, которая была на компе у игроков, так как там было 3 пароля: Для админа и ещё 2.

В целом очень похоже на твою прогу. Тоже открывает двери, причём у игроков было 2 двери. И кажется 2 пароля как раз открывали эти двери по отдельности. Либо я ошибаюсь и третий пароль просто выходил из проги. Уже и не помню.

 

Как взломал не скажу, в какой то степени потому что не помню. Но факт в том что на Ctrl+Alt+C закрыть прогу нельзя было и вызывалось сообщение об этом на компе.

Насчёт конфигов, зачем тебе их записывать куда то? Это лишнее. Просто храни в программе всё что нужно как я показал. Так будет и проще и лучше. Я всегда в своих прогах сначала прогружаю библиотеки, потом задаю переменные, и лишь потом пишу функции. И всё что хранится в переменных у меня хранится именно в верхней части кода что очень удобно. Если вдруг кто захочет изменить параметры - сможет легко их изменить, не гуляя по коду в поисках где эта переменная была присвоена (как у тебя происходит с паролем). Так что старайся все важные переменные (которые игроки могут захотеть изменить) прописывать вначале кода. Так будет реально лучше.

 

Ты говоришь про лень, мне кажется это отмазка. Использовать 1 и 0 вместо true и false - это плохая привычка. У всех кто более менее разбирается в lua или другом языке программирования, глаз режет подобный подход. Будешь учиться писать правильно - будешь привыкать. Привыкнешь к использованию всех типов данных по назначению - будет намного проще и удобнее программировать. Я вон за 3 часа 150 строк кода написал - в итоге рабочий кликер в майнкрафте. Для меня это уже достижение в скорости, но и это не предел.

 

Вот тебе совет. Бери чужой код и разбирайся. В оптимизации это сильно помогает. А без оптимизации обучение стоит на месте. Тут один игрок мне подсказал как круто использовать оператор %, теперь я с радостью его использую там где мог бы быть костыль. Чужой код рулит.

По поводу конфига. Мне просто как-то привычнее, чтобы настройки находились отдельно от всего кода. Чтоб не было лишнего повода залезать в саму программу. Так же в будущем, подобно ECS, планирую свою граф. оболочку скрутить, а там уже конфиги понадобятся. Но пока что это все в планах. На деле же изучаю чтение и запись из файла.

Кстати, есть ли какая-нибудь информация о 0x000000 формате цвета. Я конечно покопался в твоей библиотеке conv, но хотелось бы и из источника вычитать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

0x000000 — это число в 16-ричной системе счисления. Начинается обязательно с 0x и должен состоять из символов 0123456789abcdefABCDEF.

Очень полезное применение — это цвета, так как True-color имеет ровно 16777216 цветов (24 бита), а это есть 166. Символов в 16-ричной системе счисления как раз 16. Потому используется формат RRGGBB, где RR — красный, GG — зелёный, BB — синий. Например, мой любимый цвет 0x20afff.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
стати, есть ли какая-нибудь информация о 0x000000 формате цвета.

Не знаю. В гугле по этому поводу не могу составить правильно запрос чтобы тебе дать ссылку, так что придётся так рассказать.

Хотя нет, не придётся. Фингер в ту же секунду уже рассказал, так что спасибо ему  :)

 

 

 

Мне просто как-то привычнее, чтобы настройки находились отдельно от всего кода.

 

Пока что в обычных прогах это бесполезно и не понятно зачем. Пользователям думаешь будет приятно, если 10 твоих прог будут создавать 10 конфигов и забивать ими комп? Хотя всё прекрасно помещается в программу.

 

Странно, но чем больше я изучаю программирование, тем меньше у меня цели. Надеюсь, до того момента когда затеешь писать граф оболочку, у тебя будет много желания и сил для этого.

...

Только что заметил что ты не рассказал про RGBA, записывается как 0xRRGGBBAA. Последняя цифра A - это прозрачность. 32-бит, как и у всех мониторов.

И луа видя цифру начинающуюся с 0x, автоматически переводит её в десятичный вид. То есть написав x = 0xF при print(x) получим 15.

И ещё, вот такой текст можно перевести в число таким образом tonumber("0x".."ff".."ff".."00"). То есть мы даём три переменные (rgb), складываем их как текст и при помощи tonumber() и переводим в hex число.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Только что заметил что ты не рассказал про RGBA, записывается как 0xRRGGBBAA. Последняя цифра A - это прозрачность. 32-бит, как и у всех мониторов.

Смысла в этом нет, будет ещё в OC пытаться пихнуть...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

0x000000 — это число в 16-ричной системе счисления. Начинается обязательно с 0x и должен состоять из символов 0123456789abcdefABCDEF.

Очень полезное применение — это цвета, так как True-color имеет ровно 16777216 цветов (24 бита), а это есть 166. Символов в 16-ричной системе счисления как раз 16. Потому используется формат RRGGBB, где RR — красный, GG — зелёный, BB — синий. Например, мой любимый цвет 0x20afff.

Но в OC же поддерживается глубина цвета 8 байт. То-есть для местных мониторов гораздо меньше цветов? Как тогда определить какие поддерживаются а какие нет? (Понятно, что система будет "округлять" цвет до нужного, но все же хотелось бы узнать какие именно используются и их количество.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Но в OC же поддерживается глубина цвета 8 байт. То-есть для местных мониторов гораздо меньше цветов? Как тогда определить какие поддерживаются а какие нет? (Понятно, что система будет "округлять" цвет до нужного, но все же хотелось бы узнать какие именно используются и их количество.

Взяв виндосовский пэинт и сделав пару скринов, могу сказать что примерно у монитора 2 уровня шаг составляет 0x33. Например цвета 0x6633cc 0xff0099 и подобные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Взяв виндосовский пэинт и сделав пару скринов, могу сказать что примерно у монитора 2 уровня шаг составляет 0x33. Например цвета 0x6633cc 0xff0099 и подобные.

Ммм... Это не так уж и много. Примерно 256 цветов :/ Ну что же... Время составлять визуальную составляющую замка XD

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Как тогда определить какие поддерживаются а какие нет?
Тыц

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Как тогда определить какие поддерживаются а какие нет?
 
Я использую Веб цвета, все показывало пока что)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...