Вопросы

Добрый вечер, прошу подскажите пожалуйста, как мне подключить команду к 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 пользователей онлайн

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

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

    • Mister Odin
      От Mister Odin
       
      new
       g_teleport_list[39][E_TELEPORT_LIST] = {  {"Спавн пгт.Батырево", 1802.3612, 2508.4824, 15.8887},  {"Спавн г.Арзамас", -113.5887, 977.7222, 12.0346},     {"Спавн г.Южный", 2744.2770, -2446.7246, 21.8988},     {"Центральный банк", 1852.020385,2040.791381,15.892713},  {"Рублёвка", -837.7783, 888.6161, 12.7232},  {"Казино", 1332.4252, 2358.7014, 17.6641},  {"Битва за контейнеры", 614.5167, 1722.3566, 12.0709},  {"Автосалон низкого класса", 2493.9616, -722.9544, 12.3315},  {"Автосалон среднего класса", 1407.7449, 455.4801, 13.1630},  {"Автосалон высокого класса", -14.0637, 2614.5664, 10.9892},   {"Мотосалон Harley Davidson", 785.720153, 750.465087, 12.000024},  {"Автошкола", 1909.174438,2227.679687,15.708162},  {"Военкомат", 1916.778564,2302.411376,15.574637},  {"Правительство области", -139.140975,593.789611,12.145712},  {"Отдел полиции №1 (ГИБДД)", 1906.805786,-2234.382812,11.257631},  {"Отдел полиции №2 (УМВД)", 2581.309326,-2416.139892,21.960090},  {"Отдел ФСБ", 1823.904663,2095.636718,15.848405},  {"Городская больница г.Арзамас", -285.797210,581.851562,12.120290},   {"СМИ", -317.708038,821.221679,13.051450},  {"Воинская часть", 1703.197265,1678.025878,15.279437},  {"Арзамасская ОПГ", 438.705322,1046.505126,12.002637},  {"Батыревская ОПГ", 1941.203857,2161.006591,15.705187},  {"Лыткаринская ОПГ", -2346.002441,75.257041,21.002962},  {"Шахта", 2381.5727, 1726.4451, -2.1506},  {"Завод", -1062.6697, 2204.1894, 38.0964},  {"Инкосация", 1864.1374, 2011.7136, 15.8546},  {"Транспортная Компания", 2362.1115, 1972.5627, 15.5530},  {"База механиков", 1840.918090,-118.025146,15.695312},  {"Курьерская служба доставки", 2764.509765,-2396.882568,21.890625},  {"Аренда автобуса(Южный)", 2771.041992,-2454.780761,21.845964},  {"Аренда автобуса(Арзамас)", -127.487670,943.652648,12.142824},   {"Аренда автобуса(Батырево)", 1798.986328,2529.591552,15.664262},  {"Гоночная трасса", -1568.7784, 1611.8305, 36.3971},  {"Дом на горе", -789.5397, -456.7479, 741.1422},  {"СТО и тюнинг-ателье", 1856.1375, -122.3266, 15.6888},  {"Аренда транспорта пгт.Батырево", 1763.641723,2255.673339,15.865348},  {"Аренда транспорта г.Арзамас", -36.923530,1360.673583,12.002090},  {"Аренда транспорта г.Южный", 1966.599975,-2603.943603,10.820312},  {"Тайный интерьер в Лыткарино", -2424.5818, 2846.3291, 40.7908} };