Вопросы

Вступление: Приветствую, я захотел полностью переделать свой скрипт, не знаю как это у меня получится но не суть.

 

Вопрос: Как сделать запрос в базу, и как придать переменной resultat форму пароля? То есть, контекст такой: Игрок вводит пароль, в базу dbHandle отправляется запрос на получение из таблицы users строки password у определенного id - Если resultat = 1 (правильный пароль), тогда игрока запускает. Если же другой, шлет его и выдает ShowLogin() на перепроверку пароля. 

 

Недоделка: 

  открыть спойлер

 

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


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

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

  • 0

@VDOVA Ответ от ии:

Ваш первый шаг - это выполнить запрос к базе данных, чтобы получить пароль от пользователя. Вот пример как можно это сделать на Pawn (язык, используемый в SA-MP):

new id = GetPlayerId(playerid); // получаем id игрока
new password[50]; // переменная для хранения пароля из базы данных
format(query, sizeof(query), "SELECT password FROM users WHERE id = %d", id); // собираем запрос к базе данных для получения пароля
mysql_function_query(dbHandle, query); // отправляем запрос к базе данных

forward OnPlayerGetPassword(playerid, result, password); // ожидаем ответа от базы данных

 

Затем, после выполнения запроса, вам нужно обработать результат и сравнить введенный игроком и полученный из базы данных пароль. Вот пример, как это можно сделать:

  открыть спойлер

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

 

Не забудьте подставить в примеры свои собственные функции и добавить обработку ошибок, чтобы ваш код был полностью функциональным.

Отредактировано пользователем Cawfee

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

3.2. Код необходимо брать в тег "Код", а код более 10 строк – еще и в "Спойлер". Как это сделать рассказано в разделе "FAQ".

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

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


Ссылка на сообщение
  • 0
case DLG_LOG: {
    if(response) {
        static const fmt_query[] = "SELECT `password` FROM `users` WHERE `name` = '%s'";

        new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)], 
            Cache:resultat,
            tmp_password[32];

        format(query, sizeof(query), fmt_query, player_info[playerid][PASSWORD]);
        resultat = mysql_query(dbHandle, query, true);

        cache_get_value_name_int(0"password", tmp_password); //функция под MySQL R40+
        cache_delete(resultat);

        if(!strcmp(inputtext, tmp_password, true)) {
            SCM(playerid, COLOR_WHITE, "Пароль верный!");
            return SpawnPlayer(playerid);
        }
        else {
            SCM(playerid, COLOR_RED, "Не верный!");
            return ShowLogin(playerid);
        }
    }
    else {
        SCM(playerid, COLOR_WHITE, "{ff0000}[SERVER]{FFFFFF}:{FFFFFF} (/q).");
        SPD(playerid, -10" "" "" """);
        return Kick(playerid);
    }
}

 

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


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

@VDOVA Если я не ошибаюсь, то mysql_tquery передаёт результат в указанный callback, а для работы с кэшем сразу после запроса надо использовать mysql_query:

  открыть спойлер

Если же использовать mysql_tquery и callback под него, то код будет так:

  открыть спойлер

 

Отредактировано пользователем Sleash

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


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

@Sleash 

 

388:  new db_password[sizeof(player_info[playerid][PASSWORD]);

 

C:\Users\Åâãåíèÿ\Desktop\Ðåçåðà\gamemodes\project.pwn(388) : error 001: expected token: "]", but found "-identifier-"
C:\Users\Åâãåíèÿ\Desktop\Ðåçåðà\gamemodes\project.pwn(388) : warning 215: expression has no effect
C:\Users\Åâãåíèÿ\Desktop\Ðåçåðà\gamemodes\project.pwn(388) : error 001: expected token: ";", but found "]"
C:\Users\Åâãåíèÿ\Desktop\Ðåçåðà\gamemodes\project.pwn(388) : error 029: invalid expression, assumed zero
C:\Users\Åâãåíèÿ\Desktop\Ðåçåðà\gamemodes\project.pwn(388) : fatal error 107: too many error messages on one line

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


Ссылка на сообщение
  • 0
new db_password[64];

Учитывая мои проблемности с получением размера элемента из Enum, проще задать постоянную длину пароля.

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


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

@Sleash Вообще не помогает, можем как то связатся что бы ты лично просмотрел ошибки и помог? Сейчас я ухожу на тренировку. Так что если сможешь, оставь свои контакты, вк, дс, не важно. Я сижу уже 3-4 день над одной проблемой... Будет очень грустно если я ее не решу.

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


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

@VDOVA 
1) Мы можем поговорить в личных сообщениях через мессенджер форума
2) Если же Вы хотите ВК, то ссылка на мой профиль есть на странице моего форумного аккаунта

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


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

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

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

    • Michov Andr
      От Michov Andr
      Re:samp RP — проект в разработке
      Re:samp RP — это SA-MP в стиле RP-проект, который в данный момент находится в активной разработке. Мы создаём сервер с бонусной системой, где механики будут, и игроки смогут развивать свои персонажи, зарабатывать деньги и взаимодействовать с окружающим миром. Однако, главное — это ролевой процесс. Вы сами выбираете, хотите ли вы заниматься бизнесом и фармом или погружаться в глубокую ролевую игру. Всё зависит от того, какой путь вы хотите пройти.
      Мы стремимся к тому, чтобы на сервере не было скучного фарма и бесконечных рутинных задач. Всё будет сбалансировано так, чтобы каждый игрок мог выбрать свой стиль игры и наслаждаться процессом, будь то отыгрыш роли, развитие персонажа или участие в экономике.
      Что касается доната — на сервере будет доступна возможность покупки привилегий, включая покупку админки. Мы не планируем делать донат обязательным для прогресса, и он не будет влиять на геймплей, но те, кто хотят ускорить процесс или получить дополнительные возможности, смогут воспользоваться такими предложениями. Всё сделано так, чтобы не нарушать баланс и не превращать сервер в платный путь к успеху.
      Re:samp RP — это сервер, где каждый игрок может найти для себя интересное занятие и, главное, где всегда будет место для качественной ролевой игры. Мы не навязываем никаких обязательных механик, и все решения остаются за вами. Стартовый бонус, донат, админки — это всё дополнительные возможности, но не основа игры. 
      Discrod:https://discord.gg/ernRMjyEJy
       
             
      на логотип не смотрим да признаюсь взял с самп рп() но уж больно он норм)
    • djxxx
      От djxxx
      приветствую всех.
       
      Задался таким вопросом при добавлении одной системы на DIALOG_STYLE_TABLIST_HEADERS.
       
      Суть проблемы в том, что диалог не выравнивается под нужные показатели, а просто как будто находиться по середине, в диалоге используется \t, но они особо не помогают в решении, также не ровно.
       
      а если попытаться выравнивать большим количеством \t, оно компилируется но в игре происходят вылеты
       
      Код такой:
      DialogAdmShop ( playerid, DIALOG_EPOINTSHOP, DIALOG_STYLE_TABLIST_HEADERS, fmt_str, ""BR"номер\t"BR"наименование\t"BR"доступное действие\n"\ "{EB4C42}#1\t{FFFFFF}Виртуальная валюта\t{888888}нажмите для взаимодействия\n"\ "{EB4C42}#2\t{FFFFFF}Донат валюта\t{888888}нажмите для взаимодействия\n"\ "{EB4C42}#3\t{FFFFFF}Вип статусы\t{888888}нажмите для взаимодействия\n"\ "{EB4C42}#4\t{FFFFFF}Кейсы\t{888888}нажмите для взаимодействия\n"\ "{EB4C42}#5\t{FFFFFF}Уникальные аксессуары\t{888888}нажмите для взаимодействия", "Выбрать", "Закрыть" ); }  
      сток dialogadmshop:
      stock DialogAdmShop(playerid, dialogid, style, title[], text[], button[], button2[]) {   if(style == 5)   {      ShowPlayerDialog(playerid, 0, DIALOG_STYLE_LIST, "...", "...", "...", "");    }   ShowPlayerDialog(playerid, dialogid, style, title, text, button, button2);   return 1; }