shape1
shape2
shape3
shape4
shape7
shape8

QRcode


Cocolemunto

Чёрный список
11.06.2021
416
3
55
0
14
qrcode.inc - рисование QR кодов в игре с помощью текстдравов

Автор: vawylon

У QR кодов огромный потенциал в сфере SAMP. Данный инклуд разрушает стену межу игроком и окном браузера. Как мы знаем, в MTA есть возможность показать окно браузера, но в samp - нет.
Данный инклуд частично разрушит стену и позволит разработчикам открыть двери в разработки систем. Вот как я оцениваю потенциал:
- Упрощение процедуры заполнения формы сборов средств;
- Редирект на страницу оплаты или полный отказ формы доната на сайте;
- Система безопасности ( вход по типу *тык* );
- Показывать QR код с ссылкой на ресурс;
И многое другое!

Данный инклуд работает с поддержкой PHP. PHP генерирует и сжимает QR код, без PHP никуда.
В PHP присутствует библиотека для генерации QR кода (ссылка на GITHUB: *тык*)

qrcode.inc использует:
* sscanf2 (*тык*)
* 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>

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 кода!");
        }
}

Ориг тема: PAWN-WIKI(не реклама)

Загрузил все на файлообменники т.к файлов очень много
 
  • Like
Реакции: Jaliba_Baron