Вопросы

В общем, сделал авторизацию по известному уроку, отлично работает, проверка пароля имеется, если ввел пароль верно - перекидывает на другой диалог (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

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

 

Решение:

Цитата

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

 

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

заменить на

 

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

 

 

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

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

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

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


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

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

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

    • Sten Developer
      От Sten Developer
      Объясню всю ситуацию, пишу систему смерти игрока но она не работает. Решил по приколу написать туда обычный вывод текста SCM(playerid, COLOR_RED, "Вы умерли");
      Но однако после смерти текст не выводиться. Не работает абсолютно все. Кто знает как решить эту проблему?