Вопросы

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

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


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

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

  • 0

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

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


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

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

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


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

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

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


Ссылка на сообщение
  • 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);

 

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

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


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

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

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


Ссылка на сообщение
  • 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);
}

 

 

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

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


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

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

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

    • Redmondd
      От Redmondd
      При запуске сервера в консоли пишет: Started server on port: 7777, with maxplayers: 500 lanmode is OFF.
      И когда захожу на сервер пишет server didnt respond
       
      ---------- Loaded log file: "server_log.txt". ---------- SA-MP Dedicated Server ---------------------- v0.3.7-R2, (C)2005-2015 SA-MP Team filterscripts = ""  (string) Server Plugins --------------  Loading plugin: mysql   > MySQL plugin R7-2 successfully loaded.   Loaded.  Loading plugin: sscanf  ===============================       sscanf plugin loaded.          Version:  2.8.1    (c) 2012 Alex "Y_Less" Cole  ===============================   Loaded.  Loading plugin: dc_cmd   Daniel's CMD plugin v2.8     (c) 2014 Daniel_Cortez         www.pro-pawn.ru   Loaded.  Loading plugin: streamer *** Streamer Plugin v2.7.9 by Incognito loaded ***   Loaded.  Loaded 4 plugins. Started server on port: 7777, with maxplayers: 500 lanmode is OFF. Filterscripts ---------------   Loaded 0 filterscripts. Подключение к базе данных MYSQL успешно ---------------------------------- --------Redmond RP 01-------- ---------------------------------- Number of vehicle models: 5 Склады загружены успешно Дома (15 шт) загружены успешно