public selectQueryHandler(failstate, Handle:query, err[], errNum, data[], datalen) { switch(failstate) { case TQUERY_CONNECT_FAILED: // ошибка соединения с mysql сервером { new szText[128]; formatex(szText, charsmax(szText), "[Проблемы с БД. Код ошибки: #%d]", errNum); log_to_file("mysqlt.log", "%s", szText) log_to_file("mysqlt.log", "%s",err) return PLUGIN_HANDLED } case TQUERY_QUERY_FAILED: // ошибка SQL запроса { new lastQue[QUERY_LENGTH] SQL_GetQueryString(query, lastQue, charsmax(lastQue)) // узнаем последний SQL запрос new szText[128]; formatex(szText, charsmax(szText), "[Проблемы с БД. Код ошибки: #%d]", errNum); log_to_file("mysqlt.log", "%s", szText) log_to_file("mysqlt.log", "%s",err) log_to_file("mysqlt.log", "[ SQL ] %s",lastQue) return PLUGIN_HANDLED } } g_iSql = true; switch(data[EXT_DATA__SQL]) { case SQL_MAINCONNECT: { if(SQL_NumResults(query)) { new aData[ GangInfo ]; new iCurGang; while( SQL_MoreResults( query ) ) { SQL_ReadResult( query, SQL_FieldNameToNum(query,"GangName"), aData[ GangName ], charsmax( aData[ GangName ] ) ); aData[ GangHP ] = SQL_ReadResult( query, SQL_FieldNameToNum(query,"HP") ); aData[ GangStealing ] = SQL_ReadResult( query, SQL_FieldNameToNum(query,"Stealing") ); aData[ GangGravity ] = SQL_ReadResult( query, SQL_FieldNameToNum(query,"Gravity") ); aData[ GangStamina ] = SQL_ReadResult( query, SQL_FieldNameToNum(query,"Stamina") ); aData[ GangWeaponDrop ] = SQL_ReadResult( query, SQL_FieldNameToNum(query,"WeaponDrop") ); aData[ GangDamage ] = SQL_ReadResult( query, SQL_FieldNameToNum(query,"Damage") ); aData[ GangKills ] = SQL_ReadResult( query, SQL_FieldNameToNum(query,"Kills") ); //aData[ NumMembers ]++; aData[ GangMembers ] = _:TrieCreate(); ArrayPushArray( g_aGangs, aData ); #if defined DEBUG_LOG server_print("%s", aData[ GangName ]); #endif TrieSetCell( g_tGangNames, aData[ GangName ], iCurGang ); iCurGang++; SQL_NextRow( query ); } new szquery[QUERY_LENGTH] formatex(szquery, charsmax(szquery), "SELECT * FROM `%s`;", g_eCacheCvars[iDBPrefix_Gang_Ex]); new sData[EXT_DATA_STRUCT]; sData[EXT_DATA__SQL] = SQL_LOADGANG; SQL_ThreadQuery(g_hDBSaveOther, "selectQueryHandler", szquery, sData, sizeof sData); } } case SQL_LOADGANG: { #if defined DEBUG_LOG server_print("TrieSetCell: PRE"); #endif if(SQL_NumResults(query)) { #if defined DEBUG_LOG server_print("TrieSetCell: POST"); #endif new eVaultData[SQLVaultEntryEx]; new aData[ GangInfo ]; new iGang; while(SQL_MoreResults(query)) { SQL_ReadResult(query, SQL_FieldNameToNum(query,"key1"), eVaultData[SQLVEx_Key1], charsmax(eVaultData[SQLVEx_Key1])); SQL_ReadResult(query, SQL_FieldNameToNum(query,"key2"), eVaultData[SQLVEx_Key2], charsmax(eVaultData[SQLVEx_Key2])); SQL_ReadResult(query, SQL_FieldNameToNum(query,"data"), eVaultData[SQLVEx_Data], charsmax(eVaultData[SQLVEx_Data])); eVaultData[SQLVEx_TimeStamp] = SQL_ReadResult(query, SQL_FieldNameToNum(query,"timestamp")); #if defined DEBUG_LOG server_print("TrieSetCell:%s, %s, %s", eVaultData[SQLVEx_Key1], eVaultData[SQLVEx_Key2], eVaultData[SQLVEx_Data]); #endif if( TrieGetCell( g_tGangNames, eVaultData[ SQLVEx_Key2 ], iGang ) ) { ArrayGetArray( g_aGangs, iGang, aData ); TrieSetCell( aData[ GangMembers ], eVaultData[ SQLVEx_Key1 ], str_to_num(eVaultData[ SQLVEx_Data ]) ); aData[ NumMembers ]++; #if defined DEBUG_LOG server_print("TrieSetCell:%s, %s", eVaultData[SQLVEx_Key1], eVaultData[ SQLVEx_Data ]); #endif ArraySetArray( g_aGangs, iGang, aData ); } SQL_NextRow(query); } } } case SQL_LOAD: { new iPlayer = data[EXT_DATA__INDEX]; if(!is_user_connected(iPlayer)) return PLUGIN_CONTINUE if(get_user_userid(iPlayer) == data[EXT_DATA__USERID]) { if(SQL_NumResults(query)) { #if defined DEBUG_LOG server_print("%d" , g_iGang[ iPlayer ]); #endif g_iPoints[ iPlayer ] = SQL_ReadResult(query, SQL_FieldNameToNum(query, "data")); g_iGang[ iPlayer ] = get_user_gang( iPlayer ); #if defined DEBUG_LOG server_print("%d" , g_iGang[ iPlayer ]); #endif if(g_iGang[ iPlayer ] != -1) if(get_pcvar_num( g_pPrefixGang )) set_task(3.0, "jb_prefix_load", iPlayer + TASK_PREFIX_LOAD); } else { new szAuthID[ 35 ]; get_user_authid( iPlayer, szAuthID, charsmax( szAuthID ) ); new szquery[QUERY_LENGTH]; formatex(szquery,charsmax(szquery), "INSERT INTO `%s` (`key`, `data`, `timestamp`, `permanent`) VALUES ('%s', '0', %d, 0);", g_eCacheCvars[iDBPrefix_Gang_Points], szAuthID, get_systime()); SQL_ThreadQuery(g_hDBSaveOther, "IgnoreHandle", szquery); } } } case SQL_IGNORE: {} } return PLUGIN_HANDLED } public IgnoreHandle(failstate, Handle:query, const err[], errNum, const data[], datalen, Float:queuetime) { switch(failstate) { case TQUERY_CONNECT_FAILED, TQUERY_QUERY_FAILED: // ошибка соединения с mysql сервером { new lastQue[QUERY_LENGTH] SQL_GetQueryString(query, lastQue, charsmax(lastQue)) // узнаем последний SQL запрос new szText[128]; formatex(szText, charsmax(szText), "[Проблемы с БД. Код ошибки: #%d]", errNum); if(datalen) log_to_file("mysqlt.log", "Query state: %d", data[0]); log_to_file("mysqlt.log","%s", szText) log_to_file("mysqlt.log","%s",err) log_to_file("mysqlt.log","[MYSQL] %s",lastQue) return PLUGIN_CONTINUE; } } SQL_FreeHandle(query); return PLUGIN_CONTINUE; } public jb_prefix_load(pId) { pId -= TASK_PREFIX_LOAD; new aData[ GangInfo ]; ArrayGetArray( g_aGangs, g_iGang[ pId ], aData ); new iRet; ExecuteForward(g_iFwdPrefix , iRet , pId, aData[GangName]); } public ConnectDBDate() { new query[QUERY_LENGTH]; formatex(query,charsmax(query), "SELECT * FROM %s", g_eCacheCvars[iDBPrefix_Gang_Main]); new sData[EXT_DATA_STRUCT]; sData[EXT_DATA__SQL] = SQL_MAINCONNECT; SQL_ThreadQuery(g_hDBSaveOther, "selectQueryHandler", query, sData, sizeof sData); } stock sqlv_set_num_ex(szKey1[]="", szKey2[]="", szData ) { new query[QUERY_LENGTH]; re_mysql_escape_string(szKey1, 34); re_mysql_escape_string(szKey2, 31); if(equal(szKey1, "*")) { if(equal(szKey2, "*")) { formatex(query,charsmax(query), "UPDATE `%s` \ SET `data` = '%d' \ AND `timestamp` = %d \ AND `permanent` = 0;", g_eCacheCvars[iDBPrefix_Gang_Ex], szData, get_systime()); } else { formatex(query,charsmax(query), "UPDATE `%s` \ SET `data` = '%d' \ AND `timestamp` = %d \ AND `permanent` = 0 \ WHERE `key2` = '%s';", g_eCacheCvars[iDBPrefix_Gang_Ex], szData, get_systime(), szKey2); } } else { if(equal(szKey2, "*")) { formatex(query,charsmax(query), "UPDATE `%s` \ SET `data` = '%d' \ AND `timestamp` = %d \ AND `permanent` = 0 \ WHERE `key1` = '%s';", g_eCacheCvars[iDBPrefix_Gang_Ex], szData, get_systime(), szKey1); } else { formatex(query,charsmax(query), "INSERT INTO `%s` \ (`key1`, `key2`, `data`, `timestamp`, `permanent`) \ VALUES \ ('%s', '%s', '%d', %d, 0);", g_eCacheCvars[iDBPrefix_Gang_Ex], szKey1, szKey2, szData, get_systime()); } } //UnQuoteString(szData); SQL_ThreadQuery(g_hDBSaveOther, "IgnoreHandle", query); } stock sqlv_remove_ex(szAuthID[]="", iGangName[]="") { new query[QUERY_LENGTH]; if(equal(szAuthID, "*")) { if(equal(iGangName, "*")) { formatex(query,charsmax(query), "DELETE FROM `%s`;", g_eCacheCvars[iDBPrefix_Gang_Ex]); } else { formatex(query,charsmax(query), "DELETE FROM `%s` WHERE `key2` = '%s';", g_eCacheCvars[iDBPrefix_Gang_Ex], iGangName); } } else { if(equal(iGangName, "*")) { formatex(query,charsmax(query), "DELETE FROM `%s` WHERE `key1` = '%s';", g_eCacheCvars[iDBPrefix_Gang_Ex], szAuthID); } else { formatex(query,charsmax(query), "DELETE FROM `%s` WHERE `key1` = '%s' AND `key2` = '%s';",g_eCacheCvars[iDBPrefix_Gang_Ex], szAuthID, iGangName); } } SQL_ThreadQuery(g_hDBSaveOther, "IgnoreHandle", query); } stock re_mysql_escape_string(output[], len) { //while(replace(szBuffer, charsmax(szBuffer), "#", "")) {} while(replace(output, len, "\", "")) {} while(replace(output, len, "'", "")) {} while(replace(output, len, "^"", "")) {} }