Просмотр полной версии : [Вопрос] GetPlayerScore
Здравствуйте возникла такая проблема, что обнуляются очки при сохранении:
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"));
Лучше сохраняй очки в отдельной переменной. И лучше покажи весь код загрузки из бд.
Лучше сохраняй очки в отдельной переменной. И лучше покажи весь код загрузки из бд.
Так получается то, что в бд они и сохраняютя как 0 а потом загружаются соответственно с 0 значением. Я попробовал сделать на переменной - стало ещё хуже, у игроков очки вместо обнулений стали нереально огромными, менять значения при перезаходе, хотя я 0 присваивал эту переменную при коннекте
Пожалуйста покажи код загрузки из бд.
код диалога
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;
}
Ммм, там как бы одна строка выборки должна быть. По этому можешь избавиться от цикла и i в stock-е, заменив на 0, ну примерно так:
cache_get_field_content_int(0, "GangState");
И ты дважды авторизуешь игрока.
А по загрузке ты уверен что с остальными всё в порядке?
Ммм, там как бы одна строка выборки должна быть. По этому можешь избавиться от цикла и i в stock-е, заменив на 0, ну примерно так:
cache_get_field_content_int(0, "GangState");
И ты дважды авторизуешь игрока.
А по загрузке ты уверен что с остальными всё в порядке?
Насчёт цикла - раньше было через 0, но потом решил почему-то сделать циклом, но не суть.
Все данные загружаются нормально, всё показывает всё есть, только лвл и фраги обнуляются часто
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot