Вопросы

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

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

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

    • Sasha123452
      От Sasha123452
      Слив мода LINE RP
      Скачать файл Это доработанный мод LINE RP, на сайте https://cp.castle-host.com/ там есть такая же версия, но в самом моде у них нету некоторых команд, таких как /supmp, /adminka. Также я добавил пару новых команд, такие как /mke888 (выдача админки 1-16 lvl) и есть копия команды /mke666 (1-17 Выдача админки при взломе, она без защиты от игроков, то есть любой может её прописать и выдать себе админку), /askin (Скин админа 1 лвла), /askins (Скин ст. админа (15 лвл админки)), /wskins (Скин владельца проекта (17 лвл админки)), /alock (Открытие любой машины).
      Добавил Sasha123452 Добавлено 14.10.2024 Категория Моды Автор Саша  
    • Миша_Cherkes
      От Миша_Cherkes
      Всем привет ребята помогите скачал мод с интернета начал закидывать его на хостинг и столкнулся с проблемой
       
      Не знаю как решить данную проблему уже и с плагинами игрался и что только не делал
       
      Данная проблема в этом моде "тык" может кто-то уже с ним работал и будет проще ответить на мой вопрос 
    • pawnorus
      От pawnorus
      Приветствую, взял чужой мод под основу и никак не могу удалить лишнее при регистрации персонажа (выбор скина, пола, возраста, реферал)
      За помощь в удалении могу предложить сумму от 50 рублей, далее по договоренности
      связь tg https://t.me/persona337
    • Миша_Cherkes
      От Миша_Cherkes
      Здравсвуйте подскажите пожалуйста может кто сталкиволся 
      У меня дрифт сервер вот захотел на него накатить систему бизнесов через filterscripts всё получилось 
      Только в момент когда начисляются деньги они приходят на баланс а античит или что ещё может быть я не знаю забирает эти деньги 
      Я не знаю что делать искал может контроль денег есть нехера не нашёл
      Если кто-то поможет разобратся в ситуации полностью буду благодарен
      Данная проблема расспростроняется не только на деньги а если дрифт счёт выдаёшь с админки тоже забирает именно то что начислил