- 8
- 93
qrcode.inc
Здраствуйте дорогие форумчане! В моей голове уже давно лежит идея инклуйда который позволит рисовать QR код в игре с помощью текстдравов, но была одна проблема.Проблема заключалась в том, что в qrcode даже в самом малом содержится около 300 пикселей, что никак не входит в лимиты сампа и так просто не получится по пиксельно его нарисовать.
Мне пришлось сжать QRcode путём парсинга пикселей с лево на право и записать их как строку, ещё хитрость в том, что я посчитывал сколько пикселей в одной линии, а когда рисовал qr код я растягивал тексдрав на ширину пикселей. В общем я сложил всё в голове и принял решение всё выйдет.
У QR кодов огромный потенциал в сфере SAMP. Данный иклуйд разрушает стену межу игроком и окном браузера. Как мы знаем в MTA есть возможность показать окно браузера, но в samp - нет.Я считаю данный инклуйд частично разрушит стену и позволит разработчикам открыть двери в разработки систем. Вот как я оцениваю потенциал:
Упрощение процедуры заполнения формы сборов средств;
Редирект на страницу оплаты или полный отказ формы доната на сайте;
Система безопасности ( вход по типу http://web.wathsapp.com/ );
Показывать QR код с ссылкой на ресурс;
И многое другое!
Данный инклуйд работает с поддержкой PHP. PHP генерирует и сжжимает QR код без PHP никуда.В PHP присутствует библиотека для генерации QR кода ссылка на GITHUB
qrcode.inc использует
sscanf2 - github.com
mysql - github.com
Загружаем структуру базы данных:
в папке MySQL содержится структура базы данных. Установите её.
Установка и настройка php:
1. Распакуйте содержимое архива.
2. Откройте файл из "../php/qr/settings.php";
3. Настроить mysql.
Код:
$MYSQL_SERVER = ''; // ip сервера MySQL
$MYSQL_USER = ''; // пользователь MySQL
$MYSQL_PASS =''; // пароль MySQL
$MYSQL_BD = 'qrcode'; // база данных ( по дефолту оставить так )
Установка и настройка qrcode.inc
1. Содержжимое папки pawn перенесите в папку с сервером.
2. Подключите qrcode.inc
Код:
#include <qrcode.inc>
Код:
#define QRCODE_HOST "site.ru/qrcode/q.php" // site.ru - ваш сайт
#define QRCODE_LINK "http:site.ru/qrcode/g.php"
// "http:" или "https:" но ставить обяательно в зависимости есть ли у вас SSL сертификат
Код:
public OnGameModeInit()
{
if(QRCodeInit("host", "user", "password", "bd (по дефолту (qrcode)"))
{
printf("{QRCODE} = Ошибка подключения");
}
return 1;
}
Функции
Код:
stock QRCodeInit(SQL_HOST[], SQL_USER[], SQL_PASS[], SQL_DB[]):
/*
SQL_HOST[] - ip сервера MySQL;
SQL_USER[] - пользователь MySQL;
SQL_PASS[] - пароль MySQL;
SQL_DB[] - база данных (по стандарту "qrcode").
Подключается к базе данных
возвращает 1 при успешном подключении, 0 при неудачном.
*/
stock QrCodeIsSet(qrhandle[]):
/*
qrhandle[] - Идентификатор QR кода.
Проверяет - Существует ли QR код.
Возвращает true - если найден QR код
Возвращает false - база данных не подключена или QR кода не найден.
*/
stock QRCodeSet(type, qrhandle[], textqr[]):
/*
type - тип QR кода;
QR_CODE_TYPE_TEXT - текст;
QR_CODE_TYPE_URL - ссылка.
Создаёт QR код.
Суммарное количество символов в строке QRCODE_LINK и в строке qrhandle должно быть меньше 50 символов (MAX_TEXT_QRCODE).
Вернёт true - при успешном выполнении;
Вернёт false - при неудачном.
Если есть в "q.php" ошибки выведет в консоль:
{QRCODE} ERROR: 'Q'; [ не указан текст QR кода ]
{QRCODE} ERROR 'T'; [ не указан тип QR кода ]
{QRCODE} ERROR 'H'; [ не указан идентификатор ]
{QRCODE} ERROR 'U'; [ не указан QRCODE_LINK ]
{QRCODE} has not created QRCODE. long QRCODE; [сгенерирован слишком большой QR код ]
{QRCODE} bad query request MySQL; [ ошибка запроса ]
{QRCODE} has not mysql connected. [ файл не подключился к базе данных ]
*/
LoadQRCode(qrhandle[], qrcode[], sizeqrcode = sizeof(qrcode)):
/*
Загрузит QR код в массив.
qrhandle[] - идентификатор;
qrcode[] - сюда запишет данные.
Вернёт 1 - при удачном выполнении;
Вернёт 0 - при неудачном. ;
Вернёт 2 (PARSE_ERROR_MAX_SIZE) - если пикселей будет больше 256 ( не получится отобразить ограничение по лимитом sa-mp );
Вернёт 3 (PARSE_ERROR_BAD_ARRAY) - не валидная строка данных QR кода.
*/
stock GetTypeForHandle(qrhandle[]):
/*
qrhandle[] индентификатор к которому присвоен QR код
Вернёт 0 если не найден QR код
Вернёт тип QR кода если найден
*/
stock ParseString(stringqr[], qrcode[]):
/*
Конвертирует строку "7|0|0|3|5|2|1|" в массив QR код
Вернёт 1 при удачном выполнении;
Вернёт 0 при неудачном. ;
Вернёт 2 (PARSE_ERROR_MAX_SIZE) если пикселей будет больше 256 ( не получится отобразить ограничение по лимитом sa-mp );
Вернёт 3 (PARSE_ERROR_BAD_ARRAY) не валидная строка данных QR кода.
*/
stock CreatePlayerTextDrawsQrCode(playerid, qrcode[], sizeqr, Float:x, Float: y, Float: size):
/*
Создаёт и показывает игроку QR код.
qrcode[] - массив QR код;
Float:x - позиция (0.0) верх;
Float: y - позиция (0.0 лево;
Float: size - размер текстдрава 0.0 - 1.0 если больше 1.0 некорректно отобразится.
*/
stock DestroyPlayerTextDrawsQrCode(playerid):
/*
уничтожает QR код.
playerid - id игрока;
Вернёт true в любом случаи;
*/
Простой пример использования:
Код:
new qrcodes[1248]; // массив в котором будем хранить qr код
CMD:show(playerid, p[])
{
new handle[64], text[128], type;
if(sscanf(p, "p<,>s[64]s[128]d", handle, text, type))
{
return SendClientMessage(playerid, 0xFF4444FF, "/show [handle], [text], [type]");
}
if(QrCodeIsSet(handle) == 0) // если QR код не существует
{
if(QRCodeSet(type, handle, text) == 0) // создаём QR код
{
SendClientMessage(playerid, 0xFF4444FF, "Текст слишком большой!"); // если текст огромный, то выводим
return 1;
}
format(text, sizeof(text), "QRCode {FF0000}%s{44FF44} создан, введите повторно команду", handle);
SendClientMessage(playerid, 0x44FF44FF, text);
return 1;
}
else // если QR код существует
{
if(LoadQRCode(handle, qrcodes)) // загружаем QR код в массив qrcodes
{
CreatePlayerTextDrawsQrCode(playerid, qrcodes, 120.0, 120.0, 0.0); // показываем QR код
SendClientMessage(playerid, 0xFFCC00FF, "Наведите камеру смартфона на QR код!");
return 1;
}
return SendClientMessage(playerid, 0xFF4444FF, "Ошибка загрузки QR кода!");
}
}
Пример FS будет в директории.
Данный инклуйд пока находится в сыром варианте! Ещё много чего я хочу в нём оптимизировать.
Я надеюсь вы по полной оцените мою работу поскольку я считаю данный инклуйд действительно имеет огромный потенциал и жду ваших комментарий и самое главное советы по оптимизации.
Обязательно сообщите мне если вы нашли какие либо опечатки или ошибки в тексте!
Скачать: ЯндексДискhttps://yadi.sk/d/xGXebNB0TSc0IA
Я предлагаю услуги скриптинга:
Исправлении багов;
Написании каких либо скриптов;
Рисовании тексдравов;
всё что связано в pawn!
По всем вопросам писать в телеграмм @vawylon
Автор я: pawlo/vawylon