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

Тема в разделе "Программирование / Скриптинг", создана пользователем Gokus, 9 окт 2012.

  1. Gokus

    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_HANDLEbool: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"trueerror256);
         if (
    g_SQL == INVALID_HANDLE)
         {
             
    LogError(error);
             
    SetFailState("Не удалось установить SQL соединение");
             return;
         }

         
    // тип соединения (mysql или sqlite)
         
    new String:driver[15]; SQL_ReadDriver(g_SQLdriver15);
         
    MYSQL StrEqual(driver"mysql"false);
         
    LogMessage("Установлено %s соединение"MYSQL "MYSQL" "SQLite");

         
    // Забираем данные
         
    if (!MYSQL)
         {
             
    SQL_TQuery(g_SQLSQL_DefCallback"SELECT id, week, name, steam_id, place, week_wins FROM wins ORDER BY place LIMIT 0, 10");
         }
     }

     public 
    SQL_DefCallback(Handle:ownerHandle:hndl, const String:error[], any:data)
     {
         if (
    hndl == INVALID_HANDLELogError(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 == || !IsClientInGame(client))
            return;
        new 
    Handle:DatapackCreateDataPack();
        
        
    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);

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

    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"trueerror256);
        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(client0);
            return 
    Plugin_Handled;
        }
        
    decl String:arg1[5];
        
    GetCmdArg(1arg1sizeof(arg1));
        if (
    StringToInt(arg1) != 0)
        {
            
    ShowWeek(clientStringToInt(arg1));
        }
        else
        {
            
    ShowWeek(client0);
        }
        return 
    Plugin_Handled;
    }

    ShowWeek(clientat)
    {
        
    decl String:query[256];
        if (
    at 10 || at 1)
        {
            
    Format(querysizeof(query), "SELECT id, week, name, steam_id, place, week_wins FROM wins ORDER BY place ASC LIMIT 0,10");
        }
        else
        {
            
    Format(querysizeof(query), "SELECT id, week, name, steam_id, place, week_wins FROM wins ORDER BY place ASC LIMIT 0,%i"at);
        }
        
    SQL_TQuery(g_SQLSQL_TopCallbackquery,  GetClientUserId(client));
    }

    public 
    SQL_TopCallback(Handle:ownerHandle: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 
    0localnumi++)
        {
            if (!
    SQL_FetchRow(hQuery))
            {
                continue;
            }
            
    SQL_FetchString(hQuery2name[i], sizeof(name[]));
            
    SQL_FetchString(hQuery3sid[i], sizeof(sid[]));
            
    place[i] = SQL_FetchInt(hQuery4);
        }
        
    PrintMess(clientlocalnum);
    }

    ClearMass()
    {
        for (new 
    010i++)
        {
            
    name[i][0] = '\0';
            
    sid[i][0] = '\0';
            
    place[i] = 0;
        }
    }

    PrintMess(clientnum)
    {
        for (new 
    0numi++)
        {
            if (
    place[i] == 0)
            {
                continue;
            }
            
    PrintToChat(client"%i. %s [%s]"place[i], name[i], sid[i]);
        }
    }