Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

QRCode | QR на вашем SAMP - CRMP сервере

Дек
56
5
Пользователь
1769950584925.png
Здраствуйте дорогие форумчане! В моей голове уже давно лежит идея инклуйда который позволит рисовать 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'; // база данных ( по дефолту оставить так )
4. Загрузить папку "qr" из директории php на сервер с поддержкой PHP;

Установка и настройка qrcode.inc
1. Содержжимое папки pawn перенесите в папку с сервером.
2. Подключите qrcode.inc
пуфн:
#include <qrcode.inc>
3. укажите ссылку на файл "q.php" и "g.php"
пуфн:
#define QRCODE_HOST     "site.ru/qrcode/q.php" // site.ru - ваш сайт
#define QRCODE_LINK     "http:site.ru/qrcode/g.php"
// "http:" или "https:" но ставить обяательно в зависимости есть ли у вас SSL сертификат
4. Подключитесь к безе данных MySQL
пуфн:
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


Автор: vawylon
Оригинал темы с blast.hk: https://www.blast.hk/threads/74648/ (там есть реклама)
 
Сверху