Небольшой скрипт статистики

Gokus

Участник
Сообщения
4
Реакции
0
Всем привет,пытаюсь написать небольшой скрипт статистики,который будет при вводе команды !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);

}
всё что смог наковырять(
 

energywav

Участник
Сообщения
25
Реакции
2
На скорую руку писал, я не очень понимаю, что у тебя выводится в запросе, но всё же попробуй хотя бы этот простенький код. может чего не учел..
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]);
	}
}
 
Сверху Снизу