Вопросы

tikwqq
Новичок

В общем, сделал авторизацию по известному уроку, отлично работает, проверка пароля имеется, если ввел пароль верно - перекидывает на другой диалог (DLG_CODE).

В моде еще решил реализовать систему кода безопасности, ну думаю это полезно - да. Но возникла проблема с проверкой этого самого кода (Он вообще вводиться при регистрации и успешно сохраняется в базу - в этом проблем нет.)
На моменте когда ввел пароль и он успешный, перекидывает на диалог с кодом, там тоже пару проверок, но , когда вводишь `любой`, то он является не верным, так-же как и точно верный код из базы.

Могу предположить, что неправильно получаю информацию из самой базы данных, ну или налажал с диалогом при вводе кода (Авторизации).

ЗАРАНЕЕ: Для меня намного удобнее писать код в одну строчку, я получаю от этого эстетическое удовольствие :steep:

DIALOG: (При переносе мог потерять } )

                case DLG_CODE:
        {
                if(!response)
                {
                                SPD(playerid, 10000, DIALOG_STYLE_MSGBOX, "{FFFFFF}Авторизация | Отмена авторизации.""{FFFFFF}Дальнейшая игра невозможна, из-за того, что вы отказались от процедуры авторизации.\n\n{FFFFFF}Воспользуйтесь командой {5A78E7}/q{FFFFFF}, чтобы выйти из игры.""Хорошо""");
                                        return Kick(playerid);
                }
                if(!strlen(inputtext))
                {
                                        ShowCode(playerid);
                                        return SCM(playerid, C_WHITE, "[{5A78E7}#{FFFFFF}] Для продолжения игры на сервере, введите пароль в поле ниже и нажмите Далее.");
                                }
                                for(new i = strlen(inputtext)-1; i != -1; i--)
                {
                        switch(inputtext[i])
                        {
                                case '0'..'9'continue;
                                defaultreturn SPD(playerid, DLG_CODE, DIALOG_STYLE_INPUT, "Авторизация | Код безопасности","{FFFFFF}Введите код безопасности, который вы указали при регистрации для входа на аккаунт.\n\nМы следим за безопасностью ваших аккаунтов из-за чего и требуем ввести данный код.\nКод безопасности состоит только из {5A78E7}чисел{FFFFFF} и его максимальный размер {5A78E7}4 символа{FFFFFF}.","Далее","Отмена");
                        }
                }
                if(!strcmp(pInfo[playerid][pCode], inputtext))
                {
                        new query_string[49+MAX_PLAYER_NAME];
                        format(query_string, sizeof(query_string), "SELECT * FROM `accounts` WHERE `pName` = '%s'", pInfo[playerid][pName]);
                        mysql_tquery(tikwqq, query_string, "PlayerLogin","i", playerid);
                }
                else
                {
                        SCM(playerid, C_WHITE, "Введенный вами пароль не верный, повторите свою попытку или воспользуйтесь командой {5A78E7}/q{FFFFFF}, чтобы выйти из игры.");
                                        ShowCode(playerid);
                }

MYSQL_LOG

[20:44:42] [WARNING] mysql_connect: no password specified
[20:44:50] [INFO] changed log level from 'warning, error' to 'debug, info, warning, error'
[20:44:50] [DEBUG] mysql_set_charset("cp1251"1)
[20:44:50] [DEBUG] CHandle::SetCharacterSet(this=0x752c78, charset='cp1251')
[20:44:50] [DEBUG] CConnection::SetCharset(charset='cp1251'this=0x74cf88, connection=0x762130)
[20:44:50] [DEBUG] CConnection::SetCharset(charset='cp1251'this=0x38f9020, connection=0x76e468)
[20:44:50] [DEBUG] CConnectionPool::SetCharset(charset='cp1251'this=0x74c488)
[20:44:50] [DEBUG] CConnection::SetCharset(charset='cp1251'this=0x3a84020, connection=0x7779c0)
[20:44:50] [DEBUG] CConnection::SetCharset(charset='cp1251'this=0x3c5b020, connection=0x781720)
[20:44:50] [DEBUG] mysql_set_charset: return value: '1'
[20:44:54] [DEBUG] mysql_tquery(1"SELECT * FROM `accounts` WHERE `pName` = 'tikwqq'""CheckAccounts""i")
[20:44:54] [DEBUG] CCallback::Create(amx=0x2a387a8, name='CheckAccounts', format='i', params=0x37edc1c, param_offset=5)
[20:44:54] [DEBUG] CCallback::Create - callback index for 'CheckAccounts'0
[20:44:54] [DEBUG] processing specifier 'i' with parameter index 0
[20:44:54] [DEBUG] retrieved and pushed value '0'
[20:44:54] [INFO] Callback 'CheckAccounts' set up for delayed execution.
[20:44:54] [DEBUG] created delayed callback with 1 parameter
[20:44:54] [DEBUG] CHandle::Execute(this=0x752c78, type=1, query=0x75b090)
[20:44:54] [DEBUG] CHandle::Execute - return value: true
[20:44:54] [DEBUG] mysql_tquery: return value: '1'
[20:44:54] [DEBUG] CConnection::Execute(query=0x75b090this=0x38f9020, connection=0x76e468)
[20:44:54] [DEBUG] CQuery::Execute(this=0x75b090, connection=0x76e468)
[20:44:54] [INFO] query "SELECT * FROM `accounts` WHERE `pName` = 'tikwqq'" successfully executed within 0.278 milliseconds
[20:44:54] [DEBUG] CResultSet::Create(connection=0x76e468, query_str='SELECT * FROM `accounts` WHERE `pName` = 'tikwqq'')
[20:44:54] [DEBUG] created new resultset '0x791170'
[20:44:54] [DEBUG] fetched MySQL result '0x75b888'
[20:44:54] [DEBUG] allocated 116 bytes for PAWN result
[20:44:54] [DEBUG] CCallback::Execute(amx=0x2a387a8, index=0, num_params=1)
[20:44:54] [INFO] Executing callback 'CheckAccounts' with 1 parameter...
[20:44:54] [DEBUG] processing internal specifier 'c'
[20:44:54] [DEBUG] pushed value '0' onto AMX stack
[20:44:54] [DEBUG] executing AMX callback with index '0'
[20:44:54] [DEBUG] cache_get_row_count(0x037EDDE8)
[20:44:54] [DEBUG] cache_get_row_count: return value: '1'
[20:44:54] [DEBUG] cache_get_value_name(0"pID"0x037482301)
[20:44:54] [DEBUG] cache_get_value_name: assigned value: '1'
[20:44:54] [DEBUG] cache_get_value_name: return value: '1'
[20:44:54] [DEBUG] cache_get_value_name(0"pPassword"0x0374829432)
[20:44:54] [DEBUG] cache_get_value_name: assigned value: 'qwerty123'
[20:44:54] [DEBUG] cache_get_value_name: return value: '1'
[20:44:54] [DEBUG] cache_get_value_name_int(0"pCode"0x0374841C)
[20:44:54] [DEBUG] cache_get_value_name_int: assigned value'1234'
[20:44:54] [DEBUG] cache_get_value_name_int: return value: '1'
[20:44:54] [DEBUG] AMX callback executed with error '0'
[20:44:54] [INFO] Callback successfully executed.

CODE PlayerLogin:

 
forward PlayerLogin(playerid);
public PlayerLogin(playerid)
{
        new rows;
        cache_get_row_count(rows);
        if(rows)
        {
                cache_get_value_name_int(0"pID", pInfo[playerid][pID]);
                cache_get_value_name(0"pName", pInfo[playerid][pName]);
                cache_get_value_name(0"pPassword", pInfo[playerid][pPassword], 32);
                cache_get_value_name(0"pMail", pInfo[playerid][pMail], 64);
                cache_get_value_name_int(0"pSex", pInfo[playerid][pSex]);
                cache_get_value_name_int(0"pSkin", pInfo[playerid][pSkin]);
                
                cache_get_value_name_int(0"pCode", pInfo[playerid][pCode]);
                
                cache_get_value_name(0"pPassport", pInfo[playerid][pPassport]);
                cache_get_value_name(0"pReg_data", pInfo[playerid][pReg_data], 12);
                cache_get_value_name(0"pReg_ip", pInfo[playerid][pReg_ip], 15);

                TogglePlayerSpectating(playerid, 0);
            SetPVarInt(playerid, "logged"1);
            SetSpawnInfo(playerid, 000000000000);
            SpawnPlayer(playerid);
        }
        return 1;
}

 

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


Ссылка на сообщение

1 ответ на этот вопрос

  • -1
tikwqq
Новичок

Ответ был найден (не мой, никогда не присуждаю не свое).

 

Решение:

  Цитата

У тебя переменная pCode объявлена как Integer(Int), а проверяешь ты ее в DLG_CODE как строку, попробуй строку

 
if(!strcmp(pInfo[playerid][pCode], inputtext))

заменить на

 
if(pInfo[playerid][pCode] == strval(inputtext))

 

Читать далее...  

 

Заметка от keyl , создано

2.8. Если вы нашли ответ на свой вопрос, рекомендуется поощрить автора лучшего ответа поднятием репутации, а также обязательно пометить ответ на вопрос лучшим. Как пометить ответ лучшим?

Устное предупреждение.

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


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Доналдо Фарекелка
      От Доналдо Фарекелка


      Скачать файл Christmas Live » RPG | XS
      Приветствую, сливаю мод, который делал самолично. Мод недоработан, возможно где-то имеются баги, без лаунчера.
      Взят под основу от Phantom RolePlay. Отдельная благодарность за мод WW.INC
      Основная информация про мод:
       
      Информация про сервер:
      Записка:
      ПРИМЕР -  скриншот, сделанный для показа чего-либо и скриншот может является устаревшей информацией(Пояснение: Что-то изменилось, а что-то нет).
      Добавил Доналдо Фарекелка Добавлено 14.03.2025 Категория Моды Автор Donaldo_Farekelka  
    • KAIF HOST
      От KAIF HOST
      Если вы ищете надежный, стабильный и бюджетный хостинг для ваших серверов SAMP или CRMP, то KAIF-HOST.RU - лучший выбор для вас. Мы молодая компания среди игровых хостингов, но мы гарантируем стабильность и безопасность вашего сервера.
       
      Мы предлагаем защиту от TCP SYN и UDP флуда, а также от Spoofing атак. Мы также обеспечиваем защиту на уровнях L3, L4 и L7.
       
      Наши преимущества включают автоподнятие серверов после падения, удобную панель управления сервером и автоматическую установку сервера. Мы также гарантируем быструю техническую поддержку для всех наших клиентов.
       
       
       
      Наши серверы доступны всего от 20 рублей в месяц, что делает нас одним из самых доступных хостингов на рынке.
       
       
       
       
       
       Ссылки:
       
      Сайт kaif-host.ru
      Панель управления lk.kaif-host.ru
      Группа ВКонтакте https://vk.com/kaif_host_official
       
      P.s Промокод #pawnorus даст тебе скидку в размере 20%

    • watson
      От watson
      Привет всем!

      Выкладываю рабочий инструмент, который лично писал под задачи для крупных бонусных проектов. От меня недавно произошла доработка - теперь при записи маршрута сохраняются все сообщения, которые вы пишете в чат.
       
      Как это работает Запуск записи:
      Вводите /route с названием скрипта (или биндите на клавишу) — скрипт начинает фиксировать всё ваше передвижение (onfoot/incar/aim пакеты) и любые ваши сообщения в чат. Завершение:
      Ещё раз /route с названием скрипта или /stop — сохраняется маршрут вместе с чатом в файл формата .rt в папке MoonLoader/rakbotRoutes. Воспроизведение:
      Через команду !play <название> в консоли RakSamp LITE — бот воспроизводит маршрут один в один с вашими действиями, повторяет весь ввод, а так-же отправляет в чат все сохранённые сообщения (имитация через Enter). Поддержка цикла:
      Можно включить повтор маршрута (!loop), пока не надоест. Что важно в коде
      Запись всех синк-пакетов (движения, анимации, aim и т.д.):
      Пакеты по движению (onfoot/incar/aim) записываются подробно — никакой халтуры, каждое значение (позиция, кватернион, скорость, анимации, флаги и т.д.) фиксируется для полной копии.  

       
      Запись сообщений чата по индексам
      Каждое сообщение, которое отправляется в чат во время записи маршрута, сохраняется в отдельную таблицу с текущим индексом (counter). То есть при воспроизведении бот знает, на каком этапе какой текст нужно “цитировать” в чат.  

       
      Воспроизведение маршрута и чата
      На каждом этапе воспроизведения проверяется, было ли сообщение в этот момент — если да, оно “отправляется” как будто в оригинале, без задержек и рассинхрона. Пакеты проигрываются по индексу — как только доходит до конца, скрипт сам решает, останавливать ли выполнение или запускать по кругу (если включен loop).  

       
      Формат сохранения
      Файл маршрута содержит не только действия, но и отдельную секцию [chat], что позволяет воспроизвести всё как было, а не только беготню.  

       
       
      Если кому-то реально нужна автоматизация для бонусных серверов и не только как например фейковые игроки и вам важна последовательность действий и чата — этот инструмент сэкономит часы времени. Всё написано максимально просто для внедрения.

      P.S. Если есть определённые проблемы, вопросы или даже идеи для доработки — пишите.
      Desktop.zip