SA-MP Forums Archive
Не всегда сохраняются аккаунты игроков. - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Не всегда сохраняются аккаунты игроков. (/showthread.php?tid=607094)



Не всегда сохраняются аккаунты игроков. - Surprice - 14.05.2016

Всем привет. По названию темы думаю всё понятно.

Код сохранения:
PHP код:
stock OnPlayerUpdateRL(playerid)
{
    if(
PlayerLogged[playerid] == true && IsPlayerConnected(playerid))
    {
        new 
query[590], string[128];
        
PlayerInfo[playerid][pLostOnline] = gettime() - 3600;
        
query "UPDATE `Accounts` SET ";
        
format(PlayerInfo[playerid][pAdminRobs],30,"%d,%d,%d,%d",PlayerInfo[playerid][pAdminRob][0],PlayerInfo[playerid][pAdminRob][1],PlayerInfo[playerid][pAdminRob][2],PlayerInfo[playerid][pAdminRob][3]);
        
acc_float_strcat(querysizeof(query), "pFuelcar",PlayerInfo[playerid][pFuelcar]);
        
acc_int_strcat(querysizeof(query), "pCash",PlayerInfo[playerid][pCash]);
        
acc_int_strcat(querysizeof(query), "pJailTime",PlayerInfo[playerid][pJailTime]);
        
acc_int_strcat(querysizeof(query), "pMarried",PlayerInfo[playerid][pMarried]);
        
acc_int_strcat(querysizeof(query), "pMuteTime",PlayerInfo[playerid][pMuteTime]);
        
acc_int_strcat(querysizeof(query), "pMember",PlayerInfo[playerid][pMember]);
        
acc_int_strcat(querysizeof(query), "pLeader",PlayerInfo[playerid][pLeader]);
        
acc_int_strcat(querysizeof(query), "pExp",PlayerInfo[playerid][pExp]);
        
acc_int_strcat(querysizeof(query), "pMobile",PlayerInfo[playerid][pMobile]);
        
acc_int_strcat(querysizeof(query), "pBank",PlayerInfo[playerid][pBank]);
        
acc_int_strcat(querysizeof(query), "pZakonp",PlayerInfo[playerid][pZakonp]);
        
acc_int_strcat(querysizeof(query), "pProz",PlayerInfo[playerid][pProz]);
        
acc_int_strcat(querysizeof(query), "NZ",PlayerInfo[playerid][pNarcoZavisimost]);
        
acc_int_strcat(querysizeof(query), "pWanted",PlayerInfo[playerid][pWanted]);
        
acc_int_strcat(querysizeof(query), "pChas",PlayerInfo[playerid][pChas]);
        
acc_int_strcat(querysizeof(query), "pMin",PlayerInfo[playerid][pMin]);
        
acc_int_strcat(querysizeof(query), "pSec",PlayerInfo[playerid][pSec]);
        
acc_int_strcat(querysizeof(query), "pRealDonate",PlayerInfo[playerid][pRealDonate]);
        
acc_str_strcat(querysizeof(query), "pAdminRob",PlayerInfo[playerid][pAdminRobs]);
        
acc_int_strcat(querysizeof(query), "pLostOnline",PlayerInfo[playerid][pLostOnline]);
        
strdel(querystrlen(query)-1strlen(query));//Удаляем запятую
        
format(string,sizeof(string)," WHERE `ID` = '%d' LIMIT 1",PlayerInfo[playerid][MysqlpID]);
        
strcat(querystring);
        
mysql_function_query(dbHandlequerytrue"""d"playerid);
        
printf("ID: %d - String: %d",PlayerInfo[playerid][MysqlpID],strlen(query));
        if(
strlen(query) > 600printf("[ВНИМАНИЕ]: Аккаунт %s - %d [НЕ БЫЛ СОХРАНЁН]",Name(playerid),strlen(query));
    }
    return 
true;

PHP код:
acc_int_strcat(query[], lenname[], number)
{
    new 
stringer[64];
    
format(stringersizeof(stringer), "`%s` = '%d',",namenumber);
    
strcat(querystringerlen);
    return 
true;
}
acc_float_strcat(query[], lenname[], Float:number)
{
    new 
stringer[64];
    
format(stringersizeof(stringer), "`%s` = '%f',"namenumber);
    
strcat(querystringerlen);
    return 
true;
}
acc_str_strcat(query[], lenname[], str[])
{
    new 
stringer[64];
    
format(stringersizeof(stringer), "`%s` = '%s',",namestr);
    
strcat(querystringerlen);
    return 
true;

В логах ничего нет.


Re: Не всегда сохраняются аккаунты игроков. - Bombo - 14.05.2016

Скорее всего, длины массива
PHP код:
query[590
недостаточно. Советую убрать пробелы слева и справа от знака "=" во всех функциях, т.е. вместо:
PHP код:
"`%s` = '%d'," 
сделать:
PHP код:
"`%s`='%d'," 
и т.д.
Ну, и увеличить query до
PHP код:
query[1024
хотя бы.

UPD: Да, и вместо
PHP код:
if(strlen(query) > 600
поставить
PHP код:
if(strlen(query) > 1024



Re: Не всегда сохраняются аккаунты игроков. - Surprice - 14.05.2016

Quote:
Originally Posted by Bombo
Посмотреть сообщение
Скорее всего, длины массива
PHP код:
query[590
недостаточно. Советую убрать пробелы слева и справа от знака "=" во всех функциях, т.е. вместо:
PHP код:
"`%s` = '%d'," 
сделать:
PHP код:
"`%s`='%d'," 
и т.д.
Ну, и увеличить query до
PHP код:
query[1024
хотя бы.

UPD: Да, и вместо
PHP код:
if(strlen(query) > 600
поставить
PHP код:
if(strlen(query) > 1024
Спасибо, сейчас проверим..


Re: Не всегда сохраняются аккаунты игроков. - Surprice - 14.05.2016

Не помогло, всё так же слетает, но не всегда..


Re: Не всегда сохраняются аккаунты игроков. - Bombo - 14.05.2016

При этом в логе появляется сообщение "[ВНИМАНИЕ]: Аккаунт %s - %d [НЕ БЫЛ СОХРАНЁН]" ?
Если да, то что выдаёт эта строчка:
PHP код:
printf("ID: %d - String: %d",PlayerInfo[playerid][MysqlpID],strlen(query)); 
перед сообщением?
И есть ли при этом апостроф или кавычки в имени аккаунта?

Где и как часто вызывается функция
PHP код:
stock OnPlayerUpdateRL(playerid



Re: Не всегда сохраняются аккаунты игроков. - Surprice - 14.05.2016

Quote:
Originally Posted by Bombo
Посмотреть сообщение
При этом в логе появляется сообщение "[ВНИМАНИЕ]: Аккаунт %s - %d [НЕ БЫЛ СОХРАНЁН]" ?
Если да, то что выдаёт эта строчка:
PHP код:
printf("ID: %d - String: %d",PlayerInfo[playerid][MysqlpID],strlen(query)); 
перед сообщением?
И есть ли при этом апостроф или кавычки в имени аккаунта?

Где и как часто вызывается функция
PHP код:
stock OnPlayerUpdateRL(playerid
Не появляется.

PHP код:
OnPlayerUpdateRL(playerid); 
используется при дисконнекте игрока а так же при Автоматическом рестарте сервера.


Re: Не всегда сохраняются аккаунты игроков. - stabker - 14.05.2016

Само собой она не будет появляться: как длина строки, хранящейся в массиве, может быть больше количества ячеек в нем?

Может есть что-то в mysql_log? И как настроен mysql_debug?


Re: Не всегда сохраняются аккаунты игроков. - Surprice - 14.05.2016

Quote:
Originally Posted by stabker
Посмотреть сообщение
Само собой она не будет появляться: как длина строки, хранящейся в массиве, может быть больше количества ячеек в нем?

Может есть что-то в mysql_log? И как настроен mysql_debug?
mysql_log(LOG_WARNING | LOG_ERROR);


Re: Не всегда сохраняются аккаунты игроков. - stabker - 14.05.2016

Quote:
Originally Posted by Surprice
Посмотреть сообщение
mysql_log(LOG_WARNING | LOG_ERROR);
А по поводу первого?


Re: Не всегда сохраняются аккаунты игроков. - Surprice - 14.05.2016

Quote:
Originally Posted by stabker
Посмотреть сообщение
А по поводу первого?
PHP код:
stock OnPlayerUpdateRL(playerid)
{
    if(
PlayerLogged[playerid] == true && IsPlayerConnected(playerid))
    {
        new 
query[1524], string[256];
        
PlayerInfo[playerid][pLostOnline] = gettime() - 3600;
        
query "UPDATE "TABLE_ACCOUNTS" SET ";
        
format(PlayerInfo[playerid][pAdminRobs],30,"%d,%d,%d,%d",PlayerInfo[playerid][pAdminRob][0],PlayerInfo[playerid][pAdminRob][1],PlayerInfo[playerid][pAdminRob][2],PlayerInfo[playerid][pAdminRob][3]);
        
acc_float_strcat(querysizeof(query), "pFuelcar",PlayerInfo[playerid][pFuelcar]);
        
acc_int_strcat(querysizeof(query), "pCash",PlayerInfo[playerid][pCash]);
        
acc_int_strcat(querysizeof(query), "pJailTime",PlayerInfo[playerid][pJailTime]);
        
acc_int_strcat(querysizeof(query), "pMarried",PlayerInfo[playerid][pMarried]);
        
acc_int_strcat(querysizeof(query), "pMuteTime",PlayerInfo[playerid][pMuteTime]);
        
acc_int_strcat(querysizeof(query), "pMember",PlayerInfo[playerid][pMember]);
        
acc_int_strcat(querysizeof(query), "pLeader",PlayerInfo[playerid][pLeader]);
        
acc_int_strcat(querysizeof(query), "pExp",PlayerInfo[playerid][pExp]);
        
acc_int_strcat(querysizeof(query), "pMobile",PlayerInfo[playerid][pMobile]);
        
acc_int_strcat(querysizeof(query), "pBank",PlayerInfo[playerid][pBank]);
        
acc_int_strcat(querysizeof(query), "pZakonp",PlayerInfo[playerid][pZakonp]);
        
acc_int_strcat(querysizeof(query), "pProz",PlayerInfo[playerid][pProz]);
        
acc_int_strcat(querysizeof(query), "NZ",PlayerInfo[playerid][pNarcoZavisimost]);
        
acc_int_strcat(querysizeof(query), "pWanted",PlayerInfo[playerid][pWanted]);
        
acc_int_strcat(querysizeof(query), "pChas",PlayerInfo[playerid][pChas]);
        
acc_int_strcat(querysizeof(query), "pMin",PlayerInfo[playerid][pMin]);
        
acc_int_strcat(querysizeof(query), "pSec",PlayerInfo[playerid][pSec]);
        
acc_int_strcat(querysizeof(query), "pRealDonate",PlayerInfo[playerid][pRealDonate]);
        
acc_str_strcat(querysizeof(query), "pAdminRob",PlayerInfo[playerid][pAdminRobs]);
        
acc_int_strcat(querysizeof(query), "pLostOnline",PlayerInfo[playerid][pLostOnline]);
        
strdel(querystrlen(query)-1strlen(query));
        
format(string,sizeof(string)," WHERE `ID` = '%d' LIMIT 1",PlayerInfo[playerid][MysqlpID]);
        
strcat(querystring);
        
mysql_tquery(dbHandlequery"""");
        
printf("ID: %d - String: %d",PlayerInfo[playerid][MysqlpID],strlen(query));
        if(
strlen(query) > 1524printf("[ВНИМАНИЕ]: Аккаунт %s - %d [НЕ БЫЛ СОХРАНЁН]",Name(playerid),strlen(query));
    }
    return 
true;

Значение увеличил..

UPD.
Единственно что есть:
PHP код:
ID699 String358