• Descriere: Pluginul este facut pentru cei care folosesc SQL si incarca totul intr-o singura baza de date, diferand doar tabelele. Ideea de baza fiind ca pluginul sa nu creeze decat o singura conexiune catre server, iar acesta sa o transmita catre pluginuri, evitand astfel 10 conexiuni catre exact acelasi server pentru 10 pluginuri, transformandu-le intr-o singura conexiune pentru toate 10.

  • Nume: SQL Smart Connection API

  • Versiune: 2.0

  • Autor: Luxor

  • Link de download: 

  • 
    #include <amxmisc>
    #include <sqlx>
    
    enum _:Data
    {
        Host[64],
        User[32],
        Pass[32],
        Db[128]
    }
    
    new Handle:SqlTuple;
    new SqlData[Data];
    new reconnectionTentatives;
    new const MaxReconnectionTentatives = 20;
    new const RestartReconnectionId = 10000;
    
    public plugin_init()
    {
        register_plugin
        (
            .plugin_name = "SQL Smart Connection API",
            .version = "1.0",
            .author = "VrînceanAlex.lüxor"
        );
        
        readData();
    }
    
    public plugin_natives()
    {
        register_library("SqlSmart");
    
        register_native("reconnectToSqlDataBase", "_reconnectToSqlDataBase");
    }
    
    readData()
    {
        new Path[] = "addons/amxmodx/configs/SQL-connection.ini";
        
        if (!file_exists(Path))
        {
            new FilePointer = fopen(Path, "wt");
            
            if ( !FilePointer )
            {
                return;
            }
            
            fputs(FilePointer, "; Aici va fi inregistrata conexiunea SQL. (Doar una)^n");
            fputs(FilePointer, "; Exemplu de adaugare conexiune : ^"Host^" ^"User^" ^"Pass^" ^"Db^"^n^n^n");
            fclose(FilePointer);
            
            return;
        }
        new FilePointer = fopen(Path, "r+");
        
        if (!FilePointer)
        {
            return;
        }
    
        new Text[121], bool:Found;
    
        while (!feof(FilePointer))
        {
            fgets(FilePointer, Text, charsmax(Text));
            
            trim(Text);
            
            if ((Text[0] == ';') || ((Text[0] == '/') && (Text[1] == '/')))
            {
                continue;
            }
            
            if (parse(Text, SqlData[Host], charsmax(SqlData[Host]), SqlData[User], charsmax(SqlData[User]),
                            SqlData[Pass], charsmax(SqlData[Pass]), SqlData[Db], charsmax(SqlData[Db])) != 4)
            {
                continue;
            }
            
            Found = true;
            break;
        }
        
        fclose(FilePointer);
        
        if (!Found)
        {
            log_error(1, "Nu s-au gasit datele de conectare la serverul SQL");
        }
        
        _connectToSqlDataBase();
    }
    
    _connectToSqlDataBase()
    {
        SqlTuple = SQL_MakeDbTuple(SqlData[Host], SqlData[User], SqlData[Pass], SqlData[Db]);
        
        if (SqlTuple == Empty_Handle)
        {
            return;
        }
        
        new Forward = CreateMultiForward("onSqlConnection", ET_IGNORE, FP_CELL), ReturnValue;
        
        if (Forward == -1)
        {
            log_error(1, "Forward-ul nu a putut fi creat.");
        }
        
        if (!ExecuteForward(Forward, ReturnValue, SqlTuple))
        {
            log_error(1, "Forward-ul nu s-a putut executa.");
        }
        
        DestroyForward(Forward);
    }
    
    public restartReconnection()
    {
        reconnectionTentatives = 0;
    }
    
    public _reconnectToSqlDataBase(PluginId, Parameters)
    {
        if (Parameters != 0)
        {
            log_error(4, "Functia ^"connectToSqlDataBase^" nu are parametrii");
        }
        
        if(++reconnectionTentatives > MaxReconnectionTentatives)
        {
            if(!task_exists(RestartReconnectionId))
            {
                set_task(300.0, "restartReconnection", RestartReconnectionId);
            }
    
            return;
        }
    
        SqlTuple = SQL_MakeDbTuple(SqlData[Host], SqlData[User], SqlData[Pass], SqlData[Db]);
        
        if (SqlTuple == Empty_Handle)
        {
            return;
        }
        
        new Forward = CreateOneForward(PluginId, "onSqlConnection", FP_CELL), ReturnValue;
        
        if (Forward == -1)
        {
            log_error(1, "Forward-ul nu a putut fi creat.");
        }
        
        if (!ExecuteForward(Forward, ReturnValue, SqlTuple))
        {
            log_error(1, "Forward-ul nu s-a putut executa.");
        }
        
        DestroyForward(Forward);
    }
    
    public plugin_end()
    {
        SQL_FreeHandle(SqlTuple);
    }
  • Comenzi: -

  • Cvar-uri: -

  • Module necesare: fun

  • Instalare: 

  • 1. Fisierul nume_plugin.sma il puneti in addons/amxmodx/scripting

    2. Fisierul nume_plugin.amxx il puneti in addons/amxmodx/plugins

    3. Intrati in fisierul addons/amxmodx/configs/plugins.ini si adaugati la urma:

  • 
    nume_plugin.amxx