Всем привет,пытаюсь написать небольшой скрипт статистики,который будет при вводе команды !week выводить топ 10 игроков из бд(топ игроков уже отсортирован в бд) но знанинй мало,поэтому прошу помощи у вас) PHP: #include <sourcemod> public Plugin:myinfo = { name = "Wins Stat", author = "User", description = "", version = "1" , url = "" }; new Handle:g_SQL = INVALID_HANDLE, bool:MYSQL; public OnPluginStart() { RegConsoleCmd("week", week); if (!SQL_CheckConfig("wins_stats")) { SetFailState("Секция \"wins_stats\" не найдена в databases.cfg"); return; } decl String:error[256]; g_SQL = SQL_Connect("wins_stats", true, error, 256); if (g_SQL == INVALID_HANDLE) { LogError(error); SetFailState("Не удалось установить SQL соединение"); return; } // тип соединения (mysql или sqlite) new String:driver[15]; SQL_ReadDriver(g_SQL, driver, 15); MYSQL = StrEqual(driver, "mysql", false); LogMessage("Установлено %s соединение", MYSQL ? "MYSQL" : "SQLite"); // Забираем данные if (!MYSQL) { SQL_TQuery(g_SQL, SQL_DefCallback, "SELECT id, week, name, steam_id, place, week_wins FROM wins ORDER BY place LIMIT 0, 10"); } } public SQL_DefCallback(Handle:owner, Handle:hndl, const String:error[], any:data) { if (hndl == INVALID_HANDLE) LogError(error); } public Action:week(client,args){ new String:arg1[5]; GetCmdArg(1,arg1,sizeof(arg1)); if(!StrEqual(arg1,"") && StringToInt(arg1) != 0){ ShowWeek(client,StringToInt(arg1)); } else { ShowWeek(client,0); } return Plugin_Handled; } ShowWeek(client,at){ if(client == 0 || !IsClientInGame(client)) return; new Handle:Datapack= CreateDataPack(); WritePackCell(Datapack,client); if(at>0){ WritePackCell(Datapack,at-1); } else { WritePackCell(Datapack,0); at = 1; // For not needing to build twice the query. (for at > 0 and at <= 0) } new String:query[300]; MakeSelectQuery(query,sizeof(query)); if(!MYSQL) Format(query,sizeof(query),"SELECT id, week, name, steam_id, place, week_wins FROM wins ORDER BY place LIMIT 0, 10); } SQL_TQuery(g_hStatsDb,SQL_TopCallback,query,Datapack); } всё что смог наковырять(
На скорую руку писал, я не очень понимаю, что у тебя выводится в запросе, но всё же попробуй хотя бы этот простенький код. может чего не учел.. PHP: #pragma semicolon 1#include <sourcemod>new Handle:g_SQL = INVALID_HANDLE;new String:name[10][128];new String:sid[10][64];new place[10];public OnPluginStart(){ RegConsoleCmd("sm_week", weekstat); if (!SQL_CheckConfig("wins_stats")) { SetFailState("Have not wins_stats"); return; } decl String:error[256]; g_SQL = SQL_Connect("wins_stats", true, error, 256); if (g_SQL == INVALID_HANDLE) { LogError(error); SetFailState("Cant connect to SQL"); return; }}public Action:weekstat(client,args){ if (IsFakeClient(client) || client == 0) { return Plugin_Handled; } if(args < 1) { ShowWeek(client, 0); return Plugin_Handled; } decl String:arg1[5]; GetCmdArg(1, arg1, sizeof(arg1)); if (StringToInt(arg1) != 0) { ShowWeek(client, StringToInt(arg1)); } else { ShowWeek(client, 0); } return Plugin_Handled;}ShowWeek(client, at){ decl String:query[256]; if (at > 10 || at < 1) { Format(query, sizeof(query), "SELECT id, week, name, steam_id, place, week_wins FROM wins ORDER BY place ASC LIMIT 0,10"); } else { Format(query, sizeof(query), "SELECT id, week, name, steam_id, place, week_wins FROM wins ORDER BY place ASC LIMIT 0,%i", at); } SQL_TQuery(g_SQL, SQL_TopCallback, query, GetClientUserId(client));}public SQL_TopCallback(Handle:owner, Handle:hQuery, const String:error[], any:userid){ if (hQuery == INVALID_HANDLE) { LogError(error); return; } new client = GetClientOfUserId(userid); if (client < 1) { return; } ClearMass(); new localnum = SQL_GetRowCount(hQuery); if (localnum < 1) { PrintToChat(client, "No Records!"); return; } for (new i = 0; i < localnum; i++) { if (!SQL_FetchRow(hQuery)) { continue; } SQL_FetchString(hQuery, 2, name[i], sizeof(name[])); SQL_FetchString(hQuery, 3, sid[i], sizeof(sid[])); place[i] = SQL_FetchInt(hQuery, 4); } PrintMess(client, localnum);}ClearMass(){ for (new i = 0; i < 10; i++) { name[i][0] = '\0'; sid[i][0] = '\0'; place[i] = 0; }}PrintMess(client, num){ for (new i = 0; i < num; i++) { if (place[i] == 0) { continue; } PrintToChat(client, "%i. %s [%s]", place[i], name[i], sid[i]); }}