проблема с сохранением данных в mysql (значение обнуляется при перезапуске + заходе на сервер)

w99zzl1

Участник
Автор темы
146
16
Товарищи бластхакеры, снова прошу помощи тут! Последняя надежда) Как же я рад, что могу написать сюда с просьбой о помощи, и мне с большей вероятностью ответят. Я ценю это!

- Есть квест. Есть последняя функция скрипта, завершающая. В неё я добавил сохранение состояния квеста, чтобы его нельзя было проходить снова и снова. При прохождении, значение корректно обновляется и записывается в phpmyadmin, всё работает как надо, вроде бы. Но стоит мне перезапустить сервер, (после перезапуска, значение по прежнему сохранилось, но -) при авторизации, значение почему то сбрасывается, и квест можно снова проходить.
сохранение:
f_public PlayerRegister(playerid)
{
    new rows, fields;
    cache_get_data (rows, fields, connect_mysql);
    if(rows)
    {
        Player[playerid][pQuests] = cache_get_field_content_int(0, "quests");
    // ... code

    // ... функция квеста
    new query[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    mysql_format(connect_mysql, query, sizeof(query), "UPDATE `accounts` SET `quests` = '1' WHERE `IDacc` = '%d'", Player[playerid][pIDacc]);
    mysql_query(connect_mysql, query, true);

получаю значение я с помощью: if (Player[playerid][pQuests] == 1)

в stock OnPlayerSave(playerid) quests определил
Что тут не так? Почему значение обнуляется при рестарте и перезаходе?
 
Последнее редактирование:
Решение
РЕШЕНИЕ
Оказывается, я определил pQuests в onPlayerRegister, но моя тупая бошка не додумалась, что Register - это ПЕРВАЯ регистрация (аккаунта), а не авторизация (заход на сервер), поэтому, я нашел функцию, аналогично выше, но onPlayer[B]Login[/B], добавил туда pQuests и всё работает. Знаю, что очень глупо, но не судите строго пожалуйста)) Надеюсь, всё таки не зря тема создан, и кому то да поможет! Спасибо всем, кто пытался помочь!

w99zzl1

Участник
Автор темы
146
16
UPD: Проблема АКТУАЛЬНА(

Для начало бы увидеть логи ошибок mysql, всего скорее сам запрос составлен неверно из-за чего запрос не выполняется.
В логах пусто, пытался проверить
добавил в f_public PlayerRegister(playerid) следующее: Player[playerid][pQuests] = cache_get_field_content_int(0, "quests");, теперь оно выглядит так:

PHP:
f_public PlayerRegister(playerid)
{
    new rows, fields;
    cache_get_data (rows, fields, connect_mysql);
    if(rows)
    {
        // остальные аналогичные строки   
        Player[playerid][pAdmin] = cache_get_field_content_int(0, "Admin");
        Player[playerid][pQuests] = cache_get_field_content_int(0, "quests");
        CheckAccount(playerid);
        SaveAll(playerid);
    }
    return 1;
}
т.к. админ работает, пытался делать аналогичные действия с quests, вбив в поиск pAdmin, вроде ничего не пропустил и везде инициализировал quests по аналогии с Admin, но не работает(
 

extaup

Известный
158
56
Товарищи бластхакеры, снова прошу помощи тут! Последняя надежда) Как же я рад, что могу написать сюда с просьбой о помощи, и мне с большей вероятностью ответят. Я ценю это!

- Есть квест. Есть последняя функция скрипта, завершающая. В неё я добавил сохранение состояния квеста, чтобы его нельзя было проходить снова и снова
Есть обычное сохранение (но оно действует до рестарта сервера)
Player[playerid][pQuests] = 1;

А есть вот такое, с mysql (не работает вообще)
C++:
    new query[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    mysql_format(connect_mysql, query, sizeof(query), "UPDATE accounts SET quests = '1' WHERE Name = '%s'", name);
    mysql_query(connect_mysql, query, true);
я пробовал сохранять разными способами, но остановился на этом. Ни один из них не работает. В самой Базе Данных есть таблица quest, как физически (в phpmyadmin) так и в коде:
Код:
CREATE TABLE IF NOT EXISTS `accounts` (
// .. other
  `quests` int(1) NOT NULL DEFAULT '0',
 // .. other
И значение в самой таблице (в myadmin) не изменяется, что свидетельствует некорректному сохранению. Я хочу добавить проверку, аналогичной уровню администратора (if(Player[playerid][pAdmin] >= 1) // то делаем "что то", допустим - scm вы уже прошли квест, чтобы каждый квест имел свой "номер", и этот номер сохранялся и проверялся. Помогите пожалуйста, что я делаю не так?
1:
new query[128], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
mysql_format(connect_mysql, query, sizeof(query), "UPDATE `accounts` SET `quests` = '1' WHERE `Name` = '%s'", name);
mysql_query(connect_mysql, query, true);
 

w99zzl1

Участник
Автор темы
146
16
1:
new query[128], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
mysql_format(connect_mysql, query, sizeof(query), "UPDATE `accounts` SET `quests` = '1' WHERE `Name` = '%s'", name);
mysql_query(connect_mysql, query, true);
Это было исправлено, просто код не обновил в этой теме. Благодарю за уделенное время, обновлю тему. Проблема пока наблюдается такова:
Значение сохраняется после прохождения квеста, и, как оказалось, сохраняется даже после рестарта сервера, но как только я захожу на сервер, оно обнуляется
 

syhanovsdd

Известный
13
6
Это было исправлено, просто код не обновил в этой теме. Благодарю за уделенное время, обновлю тему. Проблема пока наблюдается такова:
Значение сохраняется после прохождения квеста, и, как оказалось, сохраняется даже после рестарта сервера, но как только я захожу на сервер, оно обнуляется
Ну ты по Player[playerid][pQuests] ищи где ты его сбрасываешь, видимо после авторизации пользовался, раз при заходе сброс идет.
 
  • Нравится
Реакции: w99zzl1

w99zzl1

Участник
Автор темы
146
16
РЕШЕНИЕ
Оказывается, я определил pQuests в onPlayerRegister, но моя тупая бошка не додумалась, что Register - это ПЕРВАЯ регистрация (аккаунта), а не авторизация (заход на сервер), поэтому, я нашел функцию, аналогично выше, но onPlayer[B]Login[/B], добавил туда pQuests и всё работает. Знаю, что очень глупо, но не судите строго пожалуйста)) Надеюсь, всё таки не зря тема создан, и кому то да поможет! Спасибо всем, кто пытался помочь!
 
  • Нравится
Реакции: syhanovsdd