• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

После ввода пароля окно закрывается и ничего не происходит

Статус
В этой теме нельзя размещать новые ответы.

GilRiker

Дебютант
Суть проблемы: По уроку задумано после авторизации спавн персонажа. В моем случае, после ввода пароля окно закрывается и ничего не происходит, но проверка на правильность пароля проходит(за не правильные попытки кикает)
При всём этом аккаунты записует в базу
Не смог найти ошибку, даже когда переписывал все с самого начала буква в букву, видимо я действительно что то упускаю( в первый раз была примерно такая же ошибка).

Если ещё какой-то кусок кода нужен - прикреплю, вроде указал все в которых задействованы msql и salt

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
(на скрине сократил длину пароля, там верно 64 символа)

Код:
enum player
{
    ID,
    NAME[MAX_PLAYER_NAME],
    PASSWORD[65],
    SALT[11],//соль пробовал менять на 12, так и не разобрался с нульсимволом(учитывать его или нет)
    EMAIL[65],
    REF,
    SEX,
    NAC,
    AGE,
    SKIN,
    REGDATA[13],
    REGIP[16],
}
Код:
public OnPlayerConnect(playerid)
{
    GetPlayerName(playerid, player_info[playerid][NAME], MAX_PLAYER_NAME);
    TogglePlayerSpectating(playerid, 1);
 
    InterpolateCameraPos(playerid, 1962.0604, 2041.7426, 31.5849, 1768.7788, 2226.7825, 20.6472, 20000);

     static const fmt_query[] = "SELECT `password`, `salt` FROM `users` WHERE `name` = '%s'"; //проверка наличия акка
     new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)];
     format(query, sizeof(query), fmt_query, player_info[playerid][NAME]);
     mysql_tquery(dbHandle, query, "CheckRegistration", "i", playerid);

     SetPVarInt(playerid, "WrongPassword", 3);
    return 1;
}
forward CheckRegistration(playerid);
public CheckRegistration(playerid)
{
    new rows;
    cache_get_row_count(rows);
    if(rows)
    {
        cache_get_value_name(0, "password", player_info[playerid][PASSWORD], 65);
        cache_get_value_name(0, "salt", player_info[playerid][SALT], 11);
        ShowLogin(playerid);
    }
    else ShowRegistration(playerid);
}
}
Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
//==============================================================================
        case DLG_REG:
        {
            if(response)
            {
                if(!strlen(inputtext))
           
                {
                    ShowRegistration(playerid);
                    return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите пароль в поле ниже и нажмите \"Далее\"");
                }
                if(!(8 <= strlen(inputtext) <= 32))
                {
                    ShowRegistration(playerid);
                    return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Длина пароля должна быть от 8-ми до 32-х символов ");
                }
                new regex:rg_passwordcheck = regex_new("^[a-zA-Z0-9]{1,}$");
                if(regex_check(inputtext, rg_passwordcheck))
                 {
                    new salt[11];
                    for(new i; i < 10; i++)
                    {
                        salt[i] = random(79) + (47);
                    }
                    salt[10] = 0;
                    SHA256_PassHash(inputtext, salt, player_info[playerid][PASSWORD], 65);
                    strmid(player_info[playerid][SALT], salt, 0, 11, 11);
                     //----------------------------------------------------------
                     SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, "{0e78d7}Регистрация{FFFFFF} * Ввод Emaill"
                     ......  ,

Код:
//------------------------------------------------------------------
            static const fmt_query[] = "INSERT INTO `users` (`name`, `password`, `salt`, `email`, `ref`, `sex`, `nac`, `age`, `skin`, `regdata`, `regip`) VALUES ('%s', '%s', '%s', '%s', '%d', '%d', '%d', '%d', '%d', '%s', '%s')";
               new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+64)+(-2+10)+(-2+64)+(-2+8)+(-2+1)+(-2+1)+(-2+2)+(-2+3)+(-2+12)+(-2+15)];
            format(query, sizeof(query), fmt_query, player_info[playerid][NAME], player_info[playerid][PASSWORD], player_info[playerid][SALT], player_info[playerid][EMAIL], player_info[playerid][REF], player_info[playerid][SEX], player_info[playerid][NAC], player_info[playerid][AGE], player_info[playerid][SKIN], date, ip);
            mysql_query(dbHandle, query);
            //------------------------------------------------------------------
            static const fmt_query2[] = "SELECT * FROM `users` WHERE `name` = `%s` AND `password` = `%s`";
            format(query, sizeof(query), fmt_query2, player_info[playerid][NAME], player_info[playerid][PASSWORD]);
            mysql_tquery(dbHandle, query, "PlayerLogin", "i", playerid);

Код:
case DLG_LOG:
        {
            if(response)
            {
                new checkpass[65];
                SHA256_PassHash(inputtext,  player_info[playerid][SALT], checkpass, 65);
                if(strcmp(player_info[playerid][PASSWORD], checkpass, false, 64) == 0)
                {
                    static const fmt_query[] = "SELECT * FROM `users` WHERE `name` = `%s` AND `password` = `%s`";
                    new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+64)];
                    format(query, sizeof(query), fmt_query, player_info[playerid][NAME], player_info[playerid][PASSWORD]);
                    mysql_tquery(dbHandle, query, "PlayerLogin", "i", playerid);
                }
                else
                {
                    new string[80];
                    SetPVarInt(playerid, "WrongPassword", GetPVarInt(playerid, "WrongPassword")-1);
                    if(GetPVarInt(playerid, "WrongPassword") > 0)
                    {
                        format(string, sizeof(string), "[Ошибка] {FFFFFF}Вы ввели неверный пароль от аккаунта,у вас осталось %d попыток.", GetPVarInt(playerid, "WrongPassword"));
                         SCM(playerid, COLOR_RED, string);
                    }
                    if(GetPVarInt(playerid, "WrongPassword") == 0)
                    {
                        SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Вы исчерпали лимит попыток и были отключены от сервера.");
                        SPD(playerid, -1, 0, " ", " ", " ", "");
                        return Kick(playerid);
                    }
                    ShowLogin(playerid);
                }
            }
            else
            {
                SCM(playerid, COLOR_RED, "Используйте \"/q\" что что бы покинуть сервер.");
                SPD(playerid, -1, 0, " ", " ", " ", "");
                return Kick(playerid);
            }

Код:
//PlayerLogin-------------------------------------------------------------------
forward PlayerLogin(playerid);
public PlayerLogin(playerid)
{
    new rows;
    cache_get_row_count(rows);
    if(rows)
    {
        cache_get_value_name_int(0, "id", player_info[playerid][ID]);
        cache_get_value_name(0, "email", player_info[playerid][EMAIL], 64);
        cache_get_value_name_int(0, "ref", player_info[playerid][REF]);
        cache_get_value_name_int(0, "sex", player_info[playerid][SEX]);
        cache_get_value_name_int(0, "nac", player_info[playerid][NAC]);
        cache_get_value_name_int(0, "age", player_info[playerid][AGE]);
        cache_get_value_name_int(0, "skin", player_info[playerid][SKIN]);
        cache_get_value_name(0, "regdata", player_info[playerid][REGDATA],1211);
        cache_get_value_name(0, "regip", player_info[playerid][REGIP],15);
        //----------------------------------------------------------------------
        TogglePlayerSpectating(playerid, 0);
        SetPVarInt(playerid, "logged", 1);
        SetSpawnInfo(playerid, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
        SpawnPlayer(playerid);
    }
    return 1;
}
//PlayerLogin-------------------------------------------------------------------
Ошибки MySQL
[11/30/21 01:13:13] [ERROR] error #1054 while executing query "SELECT * FROM `users` WHERE `name` = `Test_Test3` AND `password` = `4B6422647BC4567DCCF975A168B6302755EC3935B1F4DB97EF2265A267627F1F`": Unknown column 'Test_Test3' in 'where clause'
Ошибка из логов при регистрации аккаунта
[11/30/21 01:14:34] [ERROR] error #1054 while executing query "SELECT * FROM `users` WHERE `name` = `Test_Test3` AND `password` = `4B6422647BC4567DCCF975A168B6302755EC3935B1F4DB97EF2265A267627F1F`": Unknown column 'Test_Test3' in 'where clause'
Ошибка из логов при попытки авторизации аккаунта
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу