Question

Добрый вечер, прошу подскажите пожалуйста, как мне подключить команду к mysql чтобы действия сохранялись, облазил все - ничего не нашел.

Share this post


Link to post

6 answers to this question

  • 0

@Lehras, какую версию MySQL используете, реализована ли работа с MySQL в вашем игровом моде?

Share this post


Link to post
  • 0

А какие именно действия? Не очень понятно, что вы хотели? На сколько я знаю MySQL работает с переменными сервера. То бишь, если надо сохранить информацию об аккаунте, то MySQL хороша штука для хранения этой информации. 

Share this post


Link to post
  • 0

@Maks_Fabions Так я про это спрашиваю, чтобы команда сохраняла данные

Share this post


Link to post
  • 0

Смотря, какие цели ... 
 

static const fmt_query[] = "INSERT INTO `account` (`Name`, `Key`, `Sex`, `Skin`) VALUES ('%s', '%s', '%d', '%d')";
new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+21)+(-2+1)+(-2+3)];
format(query, sizeof(query), fmt_query, PlayerInfo[playerid][pName], PlayerInfo[playerid][pKey], PlayerInfo[playerid][pSex], PlayerInfo[playerid][pSkin]);
mysql_query(dbHandle, query);

Допустим данный запрос добавит(запишет) в базу данных, полученные значения этих переменных (Для регистрации аккаунта)

PlayerInfo[playerid][pName], 
PlayerInfo[playerid][pKey], 
PlayerInfo[playerid][pSex], 
PlayerInfo[playerid][pSkin]

 

 

Можно создать самописанную функцию сохранения аккаунта, при отключении игрока.

stock SaveAccount(playerid)
{
    new query_string[(20)+(16+11)+(20+MAX_PLAYER_NAME)+(11+30)] = "UPDATE `account` SET"// (20)

    format(query_string, sizeof(query_string), "%s `Name` = '%s',", query_string, PlayerInfo[playerid][pName]); // (20+MAX_PLAYER_NAME)
    format(query_string, sizeof(query_string), "%s `Key` = '%s'", query_string, PlayerInfo[playerid][pKey]); // (11+30)

    format(query_string, sizeof(query_string), "%s WHERE `id` = '%d'", query_string, PlayerInfo[playerid][pID]); // (16+11)
    mysql_function_query(dbHandle, query_string, false"""");
    return 1;
}

Не забудь добавить в public OnPlayerDisconnect(playerid, reason) // Событие, когда игрок отключается от сервера

SaveAccount(playerid);

 

Edited by Maks_Fabions

Share this post


Link to post
  • 0

@Maks_Fabions Понял, спасибо за объяснения!

Share this post


Link to post
  • 0

@Maks_Fabions, если возникнет какой-нибудь сбой и сервер завершит свою работу, функция OnPlayerDisconnect вызвана не будет, а следовательно и не будут сохранены аккаунты игроков. Куда более успешной практикой считается обновление данных по мере необходимости. Идея заключается в том, что вы обновляете не все поля при отключении игрока от сервера, а лишь те поля, что были изменены, и в момент их изменения. В частности, можно реализовать собственные функции изменения имени, уровня и прочие. И, вызывая их, вы будете, во-первых, изменять имя и уровень игроков соответственно, во-вторых, сохранять указанные поля в базе данных.

 

Спойлер

stock setPlayerNameEx(const playerid, const newName[]) {

    // записываем новое имя игрока
    gPlayerInfo[playerid][pName] = EOS; // обнуляем текущее имя
    strcat(gPlayerInfo[playerid][pName], newName); // заносим новое имя

    // обновляем имя в базе данных
    new accountID = gPlayerInfo[playerid][pAccountID];

    new string[55+(-2+MAX_PLAYER_NAME)+(-2+3)];
    format(string, sizeof string, "UPDATE accounts SET name = '%s' WHERE id = '%d' LIMIT 1", newName, accountID);
    mysql_function_query(dbHandle, string, false"""");

    // вызываем функцию изменения имени
    return SetPlayerName(playerid, newName);
}

stock setPlayerLevelEx(const playerid, const level) {

    // если уровень не изменился, ничего не делаем
    if (gPlayerInfo[playerid][pLevel] == level) {
        return false;
    }

    // записываем новый уровень
    gPlayerInfo[playerid][pLevel] = level;

    // обновляем уровень в базе данных
    new accountID = gPlayerInfo[playerid][pAccountID];

    new string[55+(-2+MAX_PLAYER_NAME)+(-2+3)];
    format(string, sizeof string, "UPDATE accounts SET level = '%d' WHERE id = '%d' LIMIT 1", level, accountID);
    mysql_function_query(dbHandle, string, false"""");

    // вызываем уровень изменения очков
    return SetPlayerScore(playerid, level);
}

 

 

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

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • archiq
      By archiq
      Добрый день, В поисках pawn разработчика для разработки медиум РП проекта по четким ТЗ.
      Об оплате в личку. Желательно сразу предоставлять свое портфолио. В идеале человек со своим, не слитым модом.

      Пишите в ЛС на форуме.
    • vadima
      By vadima
      Добрый вечер! Имеется ли у кого-нибудь мод старого доброго сервера CRMPRP НА О.3Е? Года 2016-2018.  Я имею ввиду этот проект, ныне мертвый: https://vk.com/crmprp
    • awrn3ss
      By awrn3ss
      Привествую друзья, залил мод на хост (подключил бд, прописал плагины, бд залить не забыл) смотрю сервер Unkown, окна регистрации нет, вот лог, помогите решить данную проблему