PDA

Просмотр полной версии : [Вопрос] GetPlayerScore



Эдуард
16.02.2017, 17:49
Здравствуйте возникла такая проблема, что обнуляются очки при сохранении:


SavePlayerStats(playerid)
{
if(LoggedIn[playerid] == 1)
{
static const fmt_str[] = "UPDATE `Accounts` SET `Money` = '%d', `Score` = '%d', `Mute` = '%d', `Gang` = '%d', `GangState` = '%d', `Deaths` = '%d', `Kills` = '%d', `BizFlood` = '%d', `DriftLevel` = '%d' WHERE `Nickname` = '%s'";
new string[sizeof(fmt_str) + (-2 + 11) + (-2 + 11) + (-2 + 11) + (-2 + 5) + (-2 + 3) + (-2 + 10) + (-2 + 10) + (-2 + 11) + (-2 + 5) + (-2 + MAX_PLAYER_NAME)];
format(string, sizeof(string),fmt_str, GetPlayerMoney(playerid), GetPlayerScore(playerid), GetPVarInt(playerid,"Mute"), PlayerInfo[playerid][uGang], PlayerInfo[playerid][uGangState], Deaths[playerid], Kills[playerid], BizFlood[playerid], Kills_Lvl[playerid], PlayerInfo[playerid][pName]);
mysql_tquery(MYSQL_ARG, string, "", "");
}
}

Вызываю его в OnPlayerDisconnect - всё сохраняется, кроме GetPlayerScore и Kills_Lvl[playerid] - часто слетают и равняются 0.
В чём может быть проблема?

Вот так загружаю данные с бд

Kills_Lvl[playerid] = cache_get_field_content_int(i, "Level");
SetPlayerScore(playerid,cache_get_field_content_int(i, "Score"));

Seviel
16.02.2017, 17:58
Лучше сохраняй очки в отдельной переменной. И лучше покажи весь код загрузки из бд.

Эдуард
16.02.2017, 18:01
Лучше сохраняй очки в отдельной переменной. И лучше покажи весь код загрузки из бд.

Так получается то, что в бд они и сохраняютя как 0 а потом загружаются соответственно с 0 значением. Я попробовал сделать на переменной - стало ещё хуже, у игроков очки вместо обнулений стали нереально огромными, менять значения при перезаходе, хотя я 0 присваивал эту переменную при коннекте

Seviel
16.02.2017, 18:47
Пожалуйста покажи код загрузки из бд.

Эдуард
16.02.2017, 19:07
код диалога


static const s_t[] = "SELECT * FROM `Accounts` WHERE `Nickname` = '%s' AND `Password` = '%s'";
new s_up[sizeof(s_t) + (-2 + MAX_PLAYER_NAME) + (-2 + 30)];
format(s_up, sizeof(s_up),s_t, PlayerInfo[playerid][pName], inputtext);
mysql_tquery(MYSQL_ARG, s_up, "Avtoriz", "ds", playerid, inputtext);


public Avtoriz(playerid, password[])
{
new rows, fields;
cache_get_data(rows, fields);
if(!rows)
{
SetPVarInt(playerid,"FailLogin",GetPVarInt(playerid,"FailLogin") + 1);
if(GetPVarInt(playerid,"FailLogin") == 3)
{
SendLanguageMessage(playerid,orange, "INFORMATION: {FFFFFF}You was kicked for entering the wrong password 3/3","ИНФОРМАЦИЯ: {FFFFFF}Вы были кикнуты за ввод неверного пароля 3/3");
return Kick(playerid);
}
ShowPlayerDialog(playerid, 200, DIALOG_STYLE_PASSWORD, "{FF4500}Ошибка","{FF7F00}Вы указали неверный пароль!\n {FFA500}Введите пароль заново!", "Войти", "");
return true;
}
LoggedIn[playerid] = 1;

DeletePVar(playerid, "player_kick_time");

SetPVarInt(playerid, "count_time", 0);

PlayerTextDrawDestroy(playerid, CheckTimeLog[0]);
PlayerTextDrawDestroy(playerid, CheckTimeLog[1]);

for(new i = 0; i < rows;i++)
{
Avt(i,playerid);
}

format(PlayerInfo[playerid][pPassword], 30,"%s", password);//Записываем пароль в переменную
return true;
}


stock Avt(i,playerid)
{
Kills_Lvl[playerid] = cache_get_field_content_int(i, "Level");

SetPlayerScore(playerid,cache_get_field_content_int(i, "Score"));

ALevel[playerid] = cache_get_field_content_int(i, "Admin");

GivePlayerMoney(playerid,cache_get_field_content_int(i, "Money"));

NBAN[playerid] = cache_get_field_content_int(i,"Banned");

SetPVarInt( playerid, "Mute", cache_get_field_content_int( 0, "Mute" ) );

pDuelAll[playerid] = cache_get_field_content_int(i, "DuelAll");

pDuelWin[playerid] = cache_get_field_content_int(i, "DuelWin");

pDuelLoose[playerid] = cache_get_field_content_int(i, "DuelLoose");

pDragAll[playerid] = cache_get_field_content_int(i, "DragAll");

pDragLoose[playerid] = cache_get_field_content_int(i, "DragLoose");

pDragWin[playerid] = cache_get_field_content_int(i, "DragWin");

pVIP[playerid] = cache_get_field_content_int(i, "AccountType");

pKiss[playerid] = cache_get_field_content_int(i, "Kiss");

SKin[playerid] = cache_get_field_content_int(i, "Skin");

Deaths[playerid] = cache_get_field_content_int(i, "Deaths");

Kills[playerid] = cache_get_field_content_int(i, "Kills");

BizFlood[playerid] = cache_get_field_content_int(i, "BizFlood");

ZapretPlayeridPM[playerid] = cache_get_field_content_int(i, "ZapretPM");

ZapretPlayeridDrag[playerid] = cache_get_field_content_int(i, "ZapretDRAG");

ZapretPlayeridDuel[playerid] = cache_get_field_content_int(i, "ZapretDUEL");

ZapretVhod[playerid] = cache_get_field_content_int(i, "ZapretCONNECT");

Language[playerid] = cache_get_field_content_int(i, "Language");

PlayerInfo[playerid][AllPick] = cache_get_field_content_int(i, "AllPick");

SetPVarInt(playerid,"DateUnAdm",cache_get_field_content_int(i, "TimeUnAdm"));

SI[playerid][Time] = cache_get_field_content_int(i, "AutoTime");

PlayerInfo[playerid][uGang] = cache_get_field_content_int(i, "Gang");

PlayerInfo[playerid][uGangState] = cache_get_field_content_int(i, "GangState");

SI[playerid][WeatherID] = cache_get_field_content_int(i, "WeatherID");

SColor[playerid] = cache_get_field_content_int(i, "SColor");

LoggedIn[playerid] = 1;
}

Seviel
16.02.2017, 20:34
Ммм, там как бы одна строка выборки должна быть. По этому можешь избавиться от цикла и i в stock-е, заменив на 0, ну примерно так:

cache_get_field_content_int(0, "GangState");
И ты дважды авторизуешь игрока.
А по загрузке ты уверен что с остальными всё в порядке?

Эдуард
16.02.2017, 21:00
Ммм, там как бы одна строка выборки должна быть. По этому можешь избавиться от цикла и i в stock-е, заменив на 0, ну примерно так:

cache_get_field_content_int(0, "GangState");
И ты дважды авторизуешь игрока.
А по загрузке ты уверен что с остальными всё в порядке?

Насчёт цикла - раньше было через 0, но потом решил почему-то сделать циклом, но не суть.
Все данные загружаются нормально, всё показывает всё есть, только лвл и фраги обнуляются часто