Не всегда сохраняются аккаунты игроков.
#1

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

Код сохранения:
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;

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

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

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

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
Спасибо, сейчас проверим..
Reply
#4

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

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

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

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); 
используется при дисконнекте игрока а так же при Автоматическом рестарте сервера.
Reply
#7

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

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

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

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

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

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 
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)