Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7
  1. #1
    Аватар для Vasya_Pupkin
    Пользователь

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

    входит с любого пароля

    Код:
    public OnPlayerConnect(playerid)
    {
        GetPlayerName(playerid, pInfo[playerid][pName], MAX_PLAYER_NAME);
        new query_string[49 + MAX_PLAYER_NAME - 4];
        format(query_string, sizeof(query_string), "SELECT * FROM `accounts` WHERE `Name` = '%s'", pInfo[playerid][pName]);
        mysql_tquery(mysql_connect_ID, query_string, "FindPlayerInTable","i", playerid);
    	return 1;
    }
    Диалог логина
    Код:
    case DIALOG_LOGIN:
        {
            if(!response)
            {
                ShowPlayerDialog(playerid, dKickMessage, DIALOG_STYLE_MSGBOX, "Оповещение", "{FFFFFF}Вы были кикнуты с сервера.\n{FF0000}Причина: Отказ от авторизации.\n{FFFFFF}Для выхода с сервера введите \"/q\" в чат", "Выход", "");
                return Kick(playerid);
            }
            if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы не можете продолжить авторизацию не введя пароль!\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
            for(new i = strlen(inputtext)-1; i != -1; i--)
            {
                switch(inputtext[i])
                {
                    case '0'..'9', 'а'..'я', 'a'..'z', 'А'..'Я', 'A'..'Z': continue;
                    default: return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Введённый пароль содержит запрещённые символы!\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
                }
            }
            if(!strcmp(pInfo[playerid][pPassword], inputtext))
            {
                new query_string[49+MAX_PLAYER_NAME];
                format(query_string, sizeof(query_string), "SELECT * FROM `accounts` WHERE `Name` = '%s'", pInfo[playerid][pName]);
                mysql_tquery(mysql_connect_ID, query_string, "UploadPlayerAccount","i", playerid);
            }
            else
            {
                switch(GetPVarInt(playerid, "WrongPassword"))
                {
                    case 0: ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 3 попытки.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
                    case 1: ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 2 попытки.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
                    case 2: ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 1 попытка.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
                    case 3: ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталась последняя попытка, после чего Вас кикнет.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
                    default:
                    {
                        ShowPlayerDialog(playerid, dKickMessage, DIALOG_STYLE_MSGBOX, "Оповещение", "{FFFFFF}Вы были кикнуты с сервера.\n{FF0000}Причина: Превышен лимит попыток на ввод пароля.\n{FFFFFF}Для выхода с сервера введите \"/q\" в чат", "Выход", "");
                        return Kick(playerid);
                    }
                }
                SetPVarInt(playerid, "WrongPassword", GetPVarInt(playerid, "WrongPassword")+1);
            }
            return 1;
        }
    остальное
    Код:
    public UploadPlayerAccount(playerid)
    {
        cache_get_value_name_int(0, "ID", pInfo[playerid][pID]);
        cache_get_value_name_int(0, "Gender", pInfo[playerid][pGender]);
        cache_get_value_name_int(0, "Race", pInfo[playerid][pRace]);
        cache_get_value_name_int(0, "Level", pInfo[playerid][pLevel]);
        cache_get_value_name_int(0, "Skin", pInfo[playerid][pSkin]);
    
        SendClientMessage(playerid, 0xFFFFFF00, "Âû óñïåøíî àâòîðèçèðîâàëèñü!");
        SpawnPlayer(playerid);
        SetPlayerAuthorized(playerid, PLAYER_ONLINE);
        return 1;
    }
    
    forward FindPlayerInTable(playerid);
    public FindPlayerInTable(playerid)
    {
        new rows;
        cache_get_row_count(rows);
     
        if(!rows)
        {
            ShowPlayerDialog(playerid, dRegister, DIALOG_STYLE_INPUT, "Регистрация нового пользователя", "Введите пароль для регистрации нового аккаунта:", "Регистрация", "Выход");
        }
        else
        {
            ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация", "Введите пароль от аккаунта для того, чтоб продолжить игру:", "Вход", "Выход");
            cache_get_value_name(0, "password", pInfo[playerid][pPassword], 31);
        }
        return 1;
    }
    Без разницы какой пароль вводишь он заходит.

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

    Статус
    Оффлайн
    Регистрация
    26.11.2013
    Сообщений
    195
    Репутация:
    21 ±
    Проверь, чтобы в таблице аккаунта в БД было именно "password". MySQL чувствителен к регистру
    Двойной класс

  3. Пользователь сказал cпасибо:
    Vasya_Pupkin (22.12.2017)
  4. #3
    Аватар для narwn
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.10.2017
    Сообщений
    6
    Репутация:
    0 ±
    pInfo[playerid][pPassword] выдай сначала. Перед авторизацией

  5. #4
    Аватар для TimoXa32
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.11.2013
    Сообщений
    195
    Репутация:
    21 ±
    Цитата Сообщение от narwn Посмотреть сообщение
    pInfo[playerid][pPassword] выдай сначала. Перед авторизацией
    PHP код:
    cache_get_value_name(0"password"pInfo[playerid][pPassword], 31); 
    А это что?
    Двойной класс

  6. #5
    Аватар для Batya_Montes
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2017
    Адрес
    0x
    Сообщений
    163
    Репутация:
    13 ±
    Эта функция возвращает 0, если одна из строк является пустой. Проверяйте, пустые ли строки, используя isnull(). В противном случае, например, игроки смогут войти в чужой аккаунт просто введя пустой пароль. (c) wiki => одна из переменных пустая

  7. Пользователь сказал cпасибо:
    Vasya_Pupkin (22.12.2017)
  8. #6
    Аватар для Vasya_Pupkin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2016
    Сообщений
    77
    Репутация:
    0 ±
    Все исправил
    Код:
    cache_get_value_name(0, "password", pInfo[playerid][pPassword], 31);
    "password" - в базе с большой буквы исправил тут на большую и все заработало.

  9. #7
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Vasya_Pupkin Посмотреть сообщение
    Все исправил
    Код:
    cache_get_value_name(0, "password", pInfo[playerid][pPassword], 31);
    "password" - в базе с большой буквы исправил тут на большую и все заработало.
    Чтоб такого не было, нужно все имена столбцов/таблиц/БД писать исключительно в нижнем регистре. Лучше уж переделай всё на то, как должно быть.


    Ну и чтоб такого бага не было, добавь в проверку пароля ещё проверку на пустую строку и для pInfo[playerid][pPassword], и для inputtext
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

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

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

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

Ваши права

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