Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: CAPTCHA

  1. #1
    Аватар для denis01
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.05.2014
    Сообщений
    70
    Репутация:
    0 ±

    CAPTCHA

    Здравствуйте пользователи Pro-Pawn возник вопрос, как можно сделать CAPTCHA(для различения компьютеров и людей)

    Создаю диалог при регистрации которое сравнивает Бота и Игрока он выдаёт рандомно цифры/буквы (0..9/A..Z) далее игрок должен вписать в диалоговое окно эти цифры/буквы если правильно то спавним а если нет то снова даём ему ввести.

    Вопрос как мне проверить ввёл он правильно цифры/буквы с вариантом предложенного. Если можно пожалуйста на примере:)

  2. #2
    Аватар для newbie01
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.11.2015
    Сообщений
    116
    Репутация:
    10 ±
    делай переменную в которую вводятся рандомные данные капчи, потом сверяй то что игрок пишет в диалоговое оконо и сравнивай с той переменной если совпадает то спавни.

  3. #3
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Писал через телефон

    PHP код:
    new captcha random(1000); // Генерируем число
    new string[5];
    format(stringsizeof(string), "%d"captcha); // форматируем генерируемое число
    ShowPlayerDialog(playerid1001"Captcha"string"Далее"""); // выводим в диалог само число
    SetPVarInt(playerid"Captcha"captcha); // В ПВар игрока записываем генерируемое число 
    Потом в диалоге 100, например делаем проверки:
    PHP код:
    case 100:
    {
        if(!
    response) return true// если нажали правую кнопку
        
    new code strval(inputtext); // мне так удобнее, в переменную записать введенные символы
        
    if(GetPVarInt(playerid"Captcha") == codeSpawnPlayer(playerid); // допустим спавним, если капча верная
        
    else SendClientMessage(playerid, -1"Код введен не верно"); // fail


  4. Пользователь сказал cпасибо:
    denis01 (28.05.2016)
  5. #4
    Аватар для Sp1ke
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.03.2015
    Сообщений
    245
    Репутация:
    55 ±
    Если каптча состоит только из цифр то можно сделать простую проверку в виде "==", но если есть буквы то: https://wiki.sa-mp.com/wiki/Strcmp_RU
    Последний раз редактировалось Sp1ke; 27.05.2016 в 17:06.

  6. Пользователь сказал cпасибо:
    denis01 (28.05.2016)
  7. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Если под "ботами" вы имеете в виду RakSamp, то в нём есть возможность читать текст в диалогах.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  8. 3 пользователя(ей) сказали cпасибо:
    Alanchick (27.05.2016) Blood (27.05.2016) denis01 (28.05.2016)
  9. #6
    Аватар для denis01
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.05.2014
    Сообщений
    70
    Репутация:
    0 ±
    Сделал так:
    PHP код:
    new captcha[] = "0123456789ABCDEFGHIKLMNOPQRSTVXYZ";
    new 
    string[31 1]; 
    PHP код:
    format(stringsizeof(string), "\t%c%c%c%c\n\nВведите код выше написанный:"captcha[random(sizeof(captcha))],captcha[random(sizeof(captcha))],captcha[random(sizeof(captcha))],captcha[random(sizeof(captcha))]);
    ShowPlayerDialog(playerid,1DIALOG_STYLE_INPUT"Капча"string"Ок""Отмена");
    SetPVarString(playerid,"captchaСode",string); 
    PHP код:
    GetPVarString(playerid"captchaСode"stringsizeof(string));
    if(!
    strcmp(inputtextstringtrue) && strlen(inputtext) )
    {
        
    /*Тут действие(допустим спавним)*/
        
    DeletePVar(playerid"captchaСode");
    }
    else
    {
        
    SendClientMessage(playerid, -1"Код веден не верно");
        
    format(stringsizeof(string), "\t%c%c%c%c\n\nВведите код выше написанный:"captcha[random(sizeof(captcha))],captcha[random(sizeof(captcha))],captcha[random(sizeof(captcha))],captcha[random(sizeof(captcha))]);
        
    ShowPlayerDialog(playerid,1DIALOG_STYLE_INPUT"Капча"string"Ок""Отмена");
        
    SetPVarString(playerid,"captchaСode",string);

    - - - Добавлено - - -

    Но что то в любой введенный код с выше написанным не совподает, и всегда выводит ошибку:
    PHP код:
    SendClientMessage(playerid, -1"Код веден не верно"); 
    И иногда пол текста начинает пропадать:
    PHP код:
    \t%c%c%c%c\n\nВведите 
    PHP код:
    \t%c%c%c%
    PHP код:
    \t%c%c%c%c\n\nВведите код выше написанный
    PHP код:
    \t%c%c%c%c\n\nВведите код выше 
    Последний раз редактировалось denis01; 28.05.2016 в 11:18.

  10. #7
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Возьми вот эту функцию: https://github.com/Open-GTO/gtolib/b....inc#L398-L425
    Используй так:
    PHP код:
    GenerateRandomString(string10, .alphabet "0123456789ABCDEFGHIKLMNOPQRSTVXYZ"); 

  11. Пользователь сказал cпасибо:
    Nurick (28.05.2016)
  12. #8
    Аватар для denis01
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.05.2014
    Сообщений
    70
    Репутация:
    0 ±
    Код HTML:
    #if !defined DEFAULT_ALPHABET
    	#define DEFAULT_ALPHABET "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
    #endif
    
    stock GenerateRandomString(result_str[], length, size = sizeof(result_str), alphabet[] = DEFAULT_ALPHABET, alphabet_size = sizeof(alphabet))
    {
    	result_str[0] = '\0';
    
    	if (length > size) {
    		length = size - 1;
    	}
    
    	if (length < 1) {
    		return 0;
    	}
    
    	for (new i = 0; i < length; i++) {
    		result_str[i] = alphabet[ random(alphabet_size) ];
    	}
    
    	return 1;
    }
    При всём уважении а не могли бы показать на примере как это будет выглядить, Как я его буду использовать в диалоге???

    Если не затруднит могли бы показать на примере выше постом моим

  13. #9
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от denis01 Посмотреть сообщение
    Код HTML:
    #if !defined DEFAULT_ALPHABET
    	#define DEFAULT_ALPHABET "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
    #endif
    
    stock GenerateRandomString(result_str[], length, size = sizeof(result_str), alphabet[] = DEFAULT_ALPHABET, alphabet_size = sizeof(alphabet))
    {
    	result_str[0] = '\0';
    
    	if (length > size) {
    		length = size - 1;
    	}
    
    	if (length < 1) {
    		return 0;
    	}
    
    	for (new i = 0; i < length; i++) {
    		result_str[i] = alphabet[ random(alphabet_size) ];
    	}
    
    	return 1;
    }
    При всём уважении а не могли бы показать на примере как это будет выглядить, Как я его буду использовать в диалоге???

    Если не затруднит могли бы показать на примере выше постом моим
    PHP код:
    #define MAX_CAPTCHA_SIZE 10
    #define CAPTCHA_ALPHABET "0123456789ABCDEFGHIKLMNOPQRSTVXYZ" 
    PHP код:
    stock ShowCaptchaDialog(playerid)
    {
        static const
            
    str[] = "\t%s\n\nВведите код выше написанный:";

        new
            
    string[sizeof(str) + MAX_CAPTCHA_SIZE 1];
        
        
    GenerateRandomString(stringMAX_CAPTCHA_SIZE, .alphabet "0123456789ABCDEFGHIKLMNOPQRSTVXYZ");
        
    SetPVarString(playerid"captchaСode"string);

        
    format(stringsizeof(string), strstring);
        
    ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Капча"string"Ок""Отмена");
    }

    stock IsCaptchaValid(playeridtext[])
    {
        new 
    code[MAX_CAPTCHA_SIZE 1];
        
    GetPVarString(playerid"captchaСode"codesizeof(code));
        return 
    text[0] != && code[0] != && strcmp(codetexttrue) == 0;

    PHP код:
    if (IsCaptchaValid(playeridinputtext))
    {
        
    /*Тут действие(допустим спавним)*/
        
    DeletePVar(playerid"captchaСode");
    }
    else
    {
        
    SendClientMessage(playerid, -1"Код веден не верно");
        
    ShowCaptchaDialog(playerid);


  14. Пользователь сказал cпасибо:
    denis01 (28.05.2016)
  15. #10
    Аватар для denis01
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.05.2014
    Сообщений
    70
    Репутация:
    0 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    PHP код:
    #define MAX_CAPTCHA_SIZE 10
    #define CAPTCHA_ALPHABET "0123456789ABCDEFGHIKLMNOPQRSTVXYZ" 
    PHP код:
    stock ShowCaptchaDialog(playerid)
    {
        static const
            
    str[] = "\t%s\n\nВведите код выше написанный:";

        new
            
    string[sizeof(str) + MAX_CAPTCHA_SIZE 1];
        
        
    GenerateRandomString(stringMAX_CAPTCHA_SIZE, .alphabet "0123456789ABCDEFGHIKLMNOPQRSTVXYZ");
        
    SetPVarString(playerid"captchaСode"string);

        
    format(stringsizeof(string), strstring);
        
    ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Капча"string"Ок""Отмена");
    }

    stock IsCaptchaValid(playeridtext[])
    {
        new 
    code[MAX_CAPTCHA_SIZE 1];
        
    GetPVarString(playerid"captchaСode"codesizeof(code));
        return 
    text[0] != && code[0] != && strcmp(codetexttrue) == 0;

    PHP код:
    if (IsCaptchaValid(playeridinputtext))
    {
        
    /*Тут действие(допустим спавним)*/
        
    DeletePVar(playerid"captchaСode");
    }
    else
    {
        
    SendClientMessage(playerid, -1"Код веден не верно");
        
    ShowCaptchaDialog(playerid);

    Спасибо огромное

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •