PDA

Просмотр полной версии : [Вопрос] обновляет отдельно данные поля в таблице!



Vasya_Pupkin
18.04.2016, 22:16
Сама функция:

nowUpdateInfo ( playerid , const type [ ] , db_table [ ] , db_name_field [ ] , field [ ] , {Float, _}:...) {
static const STATIC_ARGS = 0x5 ;
new query [ 255 ] , result [ 128 ] , g_szName [ MAX_PLAYER_NAME ] ;
GetPlayerName ( playerid , g_szName , sizeof ( g_szName ) ) ;
mysql_real_escape_string ( g_szName , g_szName ) ;
for ( new i , x = numargs ( ) - STATIC_ARGS ; i != x ; i++ ) {
switch ( type [ i ] ) {
case 'i','d' : format ( query , sizeof query , "update `%s` set `%s`=%d where BINARY `%s`='%s' limit 1;" , db_table , field , getarg (i + STATIC_ARGS ) , db_name_field , g_szName );
case 'f' : format ( query , sizeof query , "update `%s` set `%s`=%f where BINARY `%s`='%s' limit 1;" , db_table , field , Float:getarg ( i + STATIC_ARGS ) , db_name_field , g_szName );
case 's' : {
for ( new a ; getarg ( i + STATIC_ARGS , a ) != 0x0 ; a++) {
result [ a ] = getarg ( i+STATIC_ARGS , a ) ;
}
format ( query , sizeof query , "update `%s` set `%s`='%s' where BINARY `%s`='%s' limit 1;" , db_table , field , result , db_name_field , g_szName ) ;
}
}
}
return mysql_tquery ( 1, query, "", "" ) ;
}

в 1 секундный таймер
nowUpdateInfo(i, "d" , "accounts" , "Name" , "Job_Timer" , PlayerInfo[i][Job_Timer]);
Время при выходи сохраняется но не обновляется в оффлайне

В логах не чего не пишет варнингов нет
В чем может быть проблема ?
mysql R39-4

ziggi
18.04.2016, 22:28
Уверен, что указал правильный номер MySQL соединения в mysql_tquery?

P.S. Сама функция очень плохая:
- Непонятно зачем написана вся эта ерунда с numargs, если всё-равно обновляется только одно поле;
- Вместо того, чтобы отправить один запрос, она отправляет по запросу на каждый указанный параметр;
- Поиск записи идёт по нику игрока, а не по уникальному ID аккаунта, что заметно замедляет скорость выполнения запроса.

Vasya_Pupkin
18.04.2016, 22:39
Да там все так и должно быть.
А чем данную функцию можно заменить?

Prolific
21.04.2016, 09:18
Уверен, что указал правильный номер MySQL соединения в mysql_tquery?

P.S. Сама функция очень плохая:
- Непонятно зачем написана вся эта ерунда с numargs, если всё-равно обновляется только одно поле;
- Вместо того, чтобы отправить один запрос, она отправляет по запросу на каждый указанный параметр;
- Поиск записи идёт по нику игрока, а не по уникальному ID аккаунта, что заметно замедляет скорость выполнения запроса.

Я заметил, что сейчас модно искать строки по нику игрока, а не по иду. И кстати это в 99% модов.

DeimoS
25.04.2016, 11:17
Я заметил, что сейчас модно искать строки по нику игрока, а не по иду. И кстати это в 99% модов.

То же самое и с проверками "if(IsPlayerConnected(playerid))" в каждой команде. Но смысла или пользы от этого у такой проверки не появилось

Prolific
25.04.2016, 22:45
То же самое и с проверками "if(IsPlayerConnected(playerid))" в каждой команде. Но смысла или пользы от этого у такой проверки не появилось

Может тебе инклудик написать, как говорил DC с хэшированием функций типа: IsPlayerConnected, GetPlayerVehicleID, GetPlayerName, GetPlayerInterior etc.
А то я перехваты как не понимал так и не пойму, а в обществе не поддержат вставку по 2 строки кода в каждый коллбэк.

ziggi
25.04.2016, 23:13
Может тебе инклудик написать, как говорил DC с хэшированием функций типа: IsPlayerConnected, GetPlayerVehicleID, GetPlayerName, GetPlayerInterior etc.
А то я перехваты как не понимал так и не пойму, а в обществе не поддержат вставку по 2 строки кода в каждый коллбэк.

Он говорил про кэширование. А перехваты можно и не понимать, просто возьми нормальный текстовый редактор (Sublime Text, Atom), там есть сниппеты, с помощью которых можно очень просто создавать все эти перехваты.

Вот так это просто (для функций точно также):
http://ihost.pro-pawn.ru/image.php?di=XBAZ

$continue$
25.04.2016, 23:26
Не понимать, что в коде? Какой в этом каеф?