[SQL] Core

amxx [SQL] Core 1.2 BETA

Нет прав для скачивания
Для CS 1.6
Автор
Mittu
Исходный код
C++:
#include <amxmodx>
#include <sqlx>

#include <IQ>

new const g_szRegister_plugin[][] = {"[SQL] Core", "1.2 BETA", "Mittu"};

// Данные пользователя c БД
enum _:DATA_USERS { ID, LOGIN[40], PASSWORD[64]/*250>>64*/, EMAIL[64]/*255>>64*/, ROUTE[32], REGDATE[32], /* AVATAR[255], */ RIGHTS[10], NAME[15], NICK[32+1], SKYPE[32], VK[30], /* BIRTH[255], */
        /* SIGNATURE[255], */ ANSWERS, SHILINGS[30], STICKERS, THANKS, LAST_ACTIVITY[20], DELL, LAST_TOPIC, REIT, PROC, STEAM_ID[35], STEAM_API[100], VK_API[25],
        /*FB[20],  FB_API[20], */ ACTIVE, IM, TELEGRAM[50], PREFIX[30], GAME_TIME, PROTECT, INVITED, EMAIL_NOTICE, IP[64], BROWSER[32],
        MULTI_ACCOUNT[32], GAG, MEMBER_ONLINE, GAME_MONEY, /* PLUGINS_SETTINGS[512], */ DISCORD[32] }
new g_BDUserInfo[MAX_PLAYERS + 1][DATA_USERS];

enum _:SERVICE_DATA { SERVICE_ID, SERVICE_NAME[255], SERVICE_FLAGS[32], TRIM, IMMUNITY, SALE, USERS_GROUP, SHOW_ADM, SERVER_SERVICE, SERVER_PRICE, PRICE_RENEWAL, TIME, DISCOUNT}
new g_BDServiceInfo[32][SERVICE_DATA];

enum _:SETTINGS_DB { HOST, USER, PASSWORD, DATABASE, TABLE_USERS[64], TABLE_ADMINS, TABLE_ADMINS_LIST };
new g_szDataBase[SETTINGS_DB][64];

enum _:DATA_ADMIN { ID_ADM, NAME_ADMIN[15], PASS[32], PASS_MD5[64], TYPE[2], SERVER, USER_ID, ACTIVE_ADMIN, LINK[255], CAUSE[255], PRICE[10], PAUSE,/*  COMMENT[1000], */ SERVICE, BUY_DATE[24], END_DATE[24], FLAG[33]}
new g_BDUserAdminInfo[8][MAX_PLAYERS + 1][DATA_ADMIN];

new g_iBDUserPrivilegis[MAX_PLAYERS + 1];
new g_szBDUserPrivilegis[MAX_PLAYERS + 1][32];

new Handle:g_SqlTuple/* , Handle:g_SqlConnection */;
new g_szQuery[1024];

new g_iResultService;

new g_szPlayerSteam[MAX_PLAYERS + 1][34],
    g_szPlayerIp[MAX_PLAYERS + 1][23];

new g_iServerPid

/*
Запрос занял 0.0001 сек.
Запрос занял 0.26 сек.
 */
new g_iMakeDbTupleTimeOut = 3;

public plugin_cfg()
{
    g_SqlTuple         = SQL_MakeDbTuple(g_szDataBase[HOST], g_szDataBase[USER], g_szDataBase[PASSWORD], g_szDataBase[DATABASE], g_iMakeDbTupleTimeOut);

    SQL_SetCharset(g_SqlTuple, "utf8");

    Pre_QueryConnection_Service();
}

Pre_QueryConnection_Service()
{
    format(g_szQuery, charsmax(g_szQuery), "\
    SELECT\
    `services`.*,\
    `services__tarifs`.`service`,\
    `services__tarifs`.`price`,\
    `services__tarifs`.`price_renewal`,\
    `services__tarifs`.`time`,\
    `services__tarifs`.`discount`\
    FROM\
        `services`\
    JOIN `services__tarifs` ON `services`.`id` = `services__tarifs`.`service` AND `services`.`server` = '%d' AND `services`.`sale` = '1'\
    ORDER BY\
        `services__tarifs`.`service`\
    DESC\
    ", g_iServerPid);
    SQL_ThreadQuery(g_SqlTuple, "SQL_QueryConnection_Service", g_szQuery);
}

public SQL_QueryConnection_Service(iState, Handle:hQuery, const szError[], iErrorCode, const szData[], iDataSize) // Получает список всех привилегий
{
    if(iState == TQUERY_CONNECT_FAILED || iState == TQUERY_QUERY_FAILED) return MySQL_connection_failed(iState, szError, iErrorCode, szData, iDataSize);

    if(SQL_NumResults(hQuery))
    {
        new iResults = SQL_NumResults(hQuery), Coll, iStrSize[] = {"255", "32"};
        g_iResultService = iResults
        while(iResults)
        {
            g_BDServiceInfo[Coll][SERVICE_ID] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "id"));
            SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "name"), g_BDServiceInfo[Coll][SERVICE_NAME], iStrSize[0] - 1);  // size = 255
            SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "rights"), g_BDServiceInfo[Coll][SERVICE_FLAGS], iStrSize[1] - 1);  // size = 32
            g_BDServiceInfo[Coll][TRIM] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "trim"));
            g_BDServiceInfo[Coll][IMMUNITY] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "immunity"));
            g_BDServiceInfo[Coll][SALE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "sale"));
            g_BDServiceInfo[Coll][USERS_GROUP] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "users_group"));
            g_BDServiceInfo[Coll][SHOW_ADM] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "show_adm"));
            g_BDServiceInfo[Coll][SERVER_SERVICE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "service"));
            g_BDServiceInfo[Coll][SERVER_PRICE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "price"));
            g_BDServiceInfo[Coll][PRICE_RENEWAL] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "price_renewal"));
            g_BDServiceInfo[Coll][TIME] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "time"));
            g_BDServiceInfo[Coll][DISCOUNT] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "discount"));

            SQL_NextRow(hQuery);
            Coll++;
            iResults--;
        }
    }
    return PLUGIN_HANDLED;
}

public plugin_precache()
{
    new szCfgDir[64], szCfgFile[128], szBuffer[256], szKey[64], szValue[960], iFile;
    get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
    formatex(szCfgFile, charsmax(szCfgFile), "%s/unmq_engine/SQL.ini", szCfgDir);
    if(!file_exists(szCfgFile))
    {
        new szError[100];
        formatex(szError, charsmax(szError), "Отсутствует файл: %s", szCfgFile);
        set_fail_state(szError);
        return;
    }
    new iCaseSelect;
    iFile = fopen(szCfgFile, "rt");
    while(iFile && !feof(iFile))
    {
        fgets(iFile, szBuffer, charsmax(szBuffer));
        replace(szBuffer, charsmax(szBuffer), "^n", "");
        if(!szBuffer[0] || szBuffer[0] == ';' || szBuffer[0] == '{' || szBuffer[0] == '}' || szBuffer[0] == '#') continue;
        if(szBuffer[0] == '[')
        {
            iCaseSelect++;
            continue;
        }
        parse(szBuffer, szKey, charsmax(szKey), szValue, charsmax(szValue));
        trim(szKey);
        trim(szValue);
        switch(iCaseSelect)
        {
            case 1:
            {
                if(equal(szKey, "DB_ID_SERVER"))                    g_iServerPid     = str_to_num(szValue);
                else if(equal(szKey, "DB_HOST"))                    copy(g_szDataBase[HOST],           charsmax(g_szDataBase[]),  szValue);
                else if(equal(szKey, "DB_USER"))                    copy(g_szDataBase[USER],           charsmax(g_szDataBase[]),  szValue);
                else if(equal(szKey, "DB_PASSWORD"))                copy(g_szDataBase[PASSWORD],       charsmax(g_szDataBase[]),  szValue);
                else if(equal(szKey, "DB_DATABASE"))                copy(g_szDataBase[DATABASE],       charsmax(g_szDataBase[]),  szValue);
                else if(equal(szKey, "DB_TABLE_USERS"))             copy(g_szDataBase[TABLE_USERS], charsmax(g_szDataBase[]),  szValue);
                else if(equal(szKey, "DB_TABLE_ADMINS"))            copy(g_szDataBase[TABLE_ADMINS], charsmax(g_szDataBase[]),  szValue);
                else if(equal(szKey, "DB_TABLE_ADMINS_LIST"))        copy(g_szDataBase[TABLE_ADMINS_LIST], charsmax(g_szDataBase[]),  szValue);
            }
        }
    }
    fclose(iFile);
}

public plugin_init()
{
    register_plugin(g_szRegister_plugin[0], g_szRegister_plugin[1], g_szRegister_plugin[2]);
}

#define user_valid(%0) (%0 && %0 <= MaxClients)

public client_putinserver(id)
{
    if(!is_user_hltv(id) && !is_user_bot(id) && user_valid(id))
    {
        new iParams[1];
        iParams[0] = get_user_userid(id);
        get_user_authid(id, g_szPlayerSteam[id], charsmax(g_szPlayerSteam[]));
        get_user_ip(id, g_szPlayerIp[id], charsmax(g_szPlayerIp[]), 1);

        format(g_szQuery, charsmax(g_szQuery), "\
        SELECT `%s`.*\
        FROM `%s`\
        WHERE `%s`.`ip` = '%s' OR `%s`.`steam_id` = '%s'\
        ",
        g_szDataBase[TABLE_USERS],
        g_szDataBase[TABLE_USERS],
        g_szDataBase[TABLE_USERS],
        g_szPlayerIp[id],
        g_szDataBase[TABLE_USERS],
        g_szPlayerSteam[id]);

        SQL_ThreadQuery(g_SqlTuple, "SQL_QueryConnection_Users", g_szQuery, iParams, sizeof iParams);
    }
}

public client_disconnected(id)
{
    remove_user_flags(id,  read_flags("abcdefghijklmnopqrstu"));
    g_szBDUserPrivilegis[id] = ""
}


public SQL_QueryConnection_Users(iState, Handle:hQuery, const szError[], iErrorCode, const szData[], iDataSize)
{
    if(iState == TQUERY_CONNECT_FAILED || iState == TQUERY_QUERY_FAILED) return MySQL_connection_failed(iState, szError, iErrorCode, szData, iDataSize);

    new UserId = szData[0];
    new id = find_player_ex(FindPlayer_MatchUserId, UserId);
    if(!id) return PLUGIN_HANDLED;

    if(SQL_NumResults(hQuery))
    {
        new iStrSize[] = {"40","250","255","32","10","15","128","30","20","35","100","25","50","64","512"};
        g_BDUserInfo[id][ID] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "id"));
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "login"), g_BDUserInfo[id][LOGIN], iStrSize[0] - 1);  // size = 40
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "password"), g_BDUserInfo[id][PASSWORD], iStrSize[1] - 1);    // size = 250
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "email"), g_BDUserInfo[id][EMAIL], iStrSize[2] - 1);      // size = 255
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "route"), g_BDUserInfo[id][ROUTE], iStrSize[3] - 1);      // size = 32
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "regdate"), g_BDUserInfo[id][REGDATE], iStrSize[3] - 1);   // size = 32
        // SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "avatar"), g_BDUserInfo[id][AVATAR], iStrSize[2] - 1);   // size = 255
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "rights"), g_BDUserInfo[id][RIGHTS], iStrSize[4] - 1);   // size = 10
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "name"), g_BDUserInfo[id][NAME], iStrSize[5] - 1);   // size = 15
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "nick"), g_BDUserInfo[id][NICK], iStrSize[6] - 1);   // size = 128
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "skype"), g_BDUserInfo[id][SKYPE], iStrSize[3] - 1);   // size = 32
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "vk"), g_BDUserInfo[id][VK], iStrSize[7] - 1);   // size = 30
        // SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "birth"), g_BDUserInfo[id][BIRTH], iStrSize[2] - 1);   // size = 255
        // SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "signature"), g_BDUserInfo[id][SIGNATURE], iStrSize[2] - 1);   // size = 255
        g_BDUserInfo[id][ANSWERS] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "answers"));
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "shilings"), g_BDUserInfo[id][SHILINGS], iStrSize[3] - 1);   // size = 32
        g_BDUserInfo[id][STICKERS] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "stickers"));
        g_BDUserInfo[id][THANKS] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "thanks"));
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "last_activity"), g_BDUserInfo[id][LAST_ACTIVITY], iStrSize[8] - 1);   // size = 20
        g_BDUserInfo[id][DELL] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "dell"));
        g_BDUserInfo[id][LAST_TOPIC] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "last_topic"));
        g_BDUserInfo[id][REIT] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "reit"));
        g_BDUserInfo[id][PROC] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "proc"));
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "steam_id"), g_BDUserInfo[id][STEAM_ID], iStrSize[9] - 1);   // size = 35
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "steam_api"), g_BDUserInfo[id][STEAM_API], iStrSize[10] - 1);   // size = 100
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "vk_api"), g_BDUserInfo[id][VK_API], iStrSize[11] - 1);   // size = 25
        // SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "fb"), g_BDUserInfo[id][FB], iStrSize[8] - 1);   // size = 20
        // SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "fb_api"), g_BDUserInfo[id][FB_API], iStrSize[8] - 1);   // size = 20
        g_BDUserInfo[id][ACTIVE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "active"));
        g_BDUserInfo[id][IM] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "im"));
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "telegram"), g_BDUserInfo[id][TELEGRAM], iStrSize[12] - 1);   // size = 50
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "prefix"), g_BDUserInfo[id][PREFIX], iStrSize[7] - 1);   // size = 30
        g_BDUserInfo[id][GAME_TIME] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "game_time"));
        g_BDUserInfo[id][PROTECT] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "protect"));
        g_BDUserInfo[id][INVITED] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "invited"));
        g_BDUserInfo[id][EMAIL_NOTICE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "email_notice"));
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "ip"), g_BDUserInfo[id][IP], iStrSize[13] - 1);   // size = 64
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "browser"), g_BDUserInfo[id][BROWSER], iStrSize[3] - 1);   // size = 32
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "multi_account"), g_BDUserInfo[id][MULTI_ACCOUNT], iStrSize[3] - 1);   // size = 32
        g_BDUserInfo[id][GAG] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "gag"));
        g_BDUserInfo[id][MEMBER_ONLINE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "member_online"));
        g_BDUserInfo[id][GAME_MONEY] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "game_money"));
        // SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "plugins_settings"), g_BDUserInfo[id][PLUGINS_SETTINGS], iStrSize[14] - 1);   // size = 512
        SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "discord"), g_BDUserInfo[id][DISCORD], iStrSize[3] - 1);   // size = 32
        Task_while_is_privilegis(UserId);

        new szName[250];
        get_user_name(id, szName, charsmax(szName));

        while(replace(g_BDUserInfo[id][NAME], charsmax(szName), "&#039;", "'")) {}

        if(!equali(g_BDUserInfo[id][NAME], szName) && g_BDUserInfo[id][ID] && UserId)
        {
            while(replace(szName, charsmax(szName), "'", "&#039;")) {}
            new iParams[1];
            iParams[0] = UserId;

           
           
            format(g_szQuery, charsmax(g_szQuery), "UPDATE `%s` SET `nick` = '%s' WHERE `id` = %d", g_szDataBase[TABLE_USERS],
            szName, g_BDUserInfo[id][ID]);
           
            SQL_ThreadQuery(g_SqlTuple, "SQL_QueryConnection_Users_AutoNick", g_szQuery, iParams, sizeof iParams);
        }
    }
    return PLUGIN_HANDLED;
}

public Task_while_is_privilegis(UserId)
{
    new id = find_player_ex(FindPlayer_MatchUserId, UserId);
    if(g_BDUserInfo[id][ID] && id)
    {
        new iParams[1]; iParams[0] = UserId;

        format(g_szQuery, charsmax(g_szQuery), " \
        SELECT  \
        `%s`.*, \
        `%s`.`service`, \
        `%s`.`admin_id`, \
        `%s`.`bought_date`, \
        UNIX_TIMESTAMP(`%s`.`ending_date`), \
            `%s`.`rights_und` \
        FROM \
            `%s`, \
            `%s` \
        WHERE \
        `%s`.`id` = `%s`.`admin_id` AND `%s`.`server` = %d AND `%s`.`user_id` = %d",
        g_szDataBase[TABLE_ADMINS],
        g_szDataBase[TABLE_ADMINS_LIST],
        g_szDataBase[TABLE_ADMINS_LIST],
        g_szDataBase[TABLE_ADMINS_LIST],
                    g_szDataBase[TABLE_ADMINS_LIST],    // @return UNIX_TIMESTAMP(`%s`.`ending_date`) ? unix code
            g_szDataBase[TABLE_ADMINS_LIST],
        // FROM
            g_szDataBase[TABLE_ADMINS],
            g_szDataBase[TABLE_ADMINS_LIST],
        // WHERE
        g_szDataBase[TABLE_ADMINS], g_szDataBase[TABLE_ADMINS_LIST], /* AND */ g_szDataBase[TABLE_ADMINS], g_iServerPid, g_szDataBase[TABLE_ADMINS], g_BDUserInfo[id][ID]);
        SQL_ThreadQuery(g_SqlTuple, "SQL_QueryConnection_Users_Admins", g_szQuery, iParams, sizeof iParams);
    }
}

public SQL_QueryConnection_Users_AutoNick(iState, Handle:hQuery, const szError[], iErrorCode, const szData[], iDataSize)
{
    if(iState == TQUERY_CONNECT_FAILED || iState == TQUERY_QUERY_FAILED) return MySQL_connection_failed(iState, szError, iErrorCode, szData, iDataSize);

    new UserId = szData[0];
    new id = find_player_ex(FindPlayer_MatchUserId, UserId);
    // if(!id) return PLUGIN_HANDLED;

    // ? debug
    new iResult = SQL_NumResults(hQuery);
    if(iResult)
    {
        server_print("Sql result [%d] data[%d] id[%d]", iResult, szData[0], id);
    }
    new szBuffer[512];
    SQL_GetQueryString(hQuery, szBuffer, charsmax(szBuffer));
    server_print("[%s]", szBuffer);
    return PLUGIN_HANDLED;
}

public SQL_QueryConnection_Users_Admins(iState, Handle:hQuery, const szError[], iErrorCode, const szData[], iDataSize)
{
    if(iState == TQUERY_CONNECT_FAILED || iState == TQUERY_QUERY_FAILED) return MySQL_connection_failed(iState, szError, iErrorCode, szData, iDataSize);

    new UserId = szData[0];
    new id = find_player_ex(FindPlayer_MatchUserId, UserId);
    if(!id) return PLUGIN_HANDLED;

    if(SQL_NumResults(hQuery))
    {
        new results = SQL_NumResults(hQuery), Coll, iStrSize[] = {"15","32","64","2","255","10","1000", "20", "25"};
        g_iBDUserPrivilegis[id] = SQL_NumResults(hQuery);
        while(results)
        {
            // g_BDUserAdminInfo[Coll][id][ID_ADM] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "id"));
            SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "name"), g_BDUserAdminInfo[Coll][id][NAME_ADMIN], iStrSize[0] - 1);  // size = 15
            SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "pass"), g_BDUserAdminInfo[Coll][id][PASS], iStrSize[1] - 1);  // size = 32
            SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "pass_md5"), g_BDUserAdminInfo[Coll][id][PASS_MD5], iStrSize[2] - 1);  // size = 64
            SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "type"), g_BDUserAdminInfo[Coll][id][TYPE], iStrSize[3] - 1);  // size = 2
            g_BDUserAdminInfo[Coll][id][SERVER] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "server"));
            g_BDUserAdminInfo[Coll][id][USER_ID] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "user_id"));
            g_BDUserAdminInfo[Coll][id][ACTIVE_ADMIN] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "active"));
            SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "link"), g_BDUserAdminInfo[Coll][id][LINK], iStrSize[4] - 1);  // size = 255
            SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "cause"), g_BDUserAdminInfo[Coll][id][CAUSE], iStrSize[4] - 1);  // size = 255
            SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "price"), g_BDUserAdminInfo[Coll][id][PRICE], iStrSize[5] - 1);  // size = 10
            g_BDUserAdminInfo[Coll][id][PAUSE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "pause"));
            // SQL_IsNull(hQuery, SQL_FieldNameToNum(hQuery, "comment")) ? g_BDUserAdminInfo[Coll][id][COMMENT] = 0 : SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "comment"), g_BDUserAdminInfo[Coll][id][COMMENT], iStrSize[6] - 1);  // size = 1000
            g_BDUserAdminInfo[Coll][id][SERVICE] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "service"));
            SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "bought_date"), g_BDUserAdminInfo[Coll][id][BUY_DATE], iStrSize[7] - 1);  // size = 20
            SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "UNIX_TIMESTAMP(`admins__services`.`ending_date`)"), g_BDUserAdminInfo[Coll][id][END_DATE], iStrSize[7] - 1);  // size = 20
            SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "rights_und"), g_BDUserAdminInfo[Coll][id][FLAG], iStrSize[8] - 1);  // size = 25

            if(g_BDUserAdminInfo[Coll][id][SERVICE]) fl_set_flages(id, g_BDUserAdminInfo[Coll][id][SERVICE]);
           
            SQL_NextRow(hQuery);
            Coll++;
            results--; // декремент
        }
    }
    return PLUGIN_HANDLED;
}

/** Функция установки флагов игрогроку преоброзуюя из таблици `services`
 * @param id index игрока (требует предворительной проверки на валидность).
 * @param service Номерация для поиска.
 * @return 0 | 1
 */
public fl_set_flages(id, service)
{
    for(new i; i <= g_iResultService; i++)       // Цикл по кол-во приивилегиям у пользователя
    {
        if(g_BDServiceInfo[i][SERVICE_ID] == service)
        {
            if(!equal(g_szBDUserPrivilegis[id], g_BDServiceInfo[i][SERVICE_FLAGS])) strcat(g_szBDUserPrivilegis[id], g_BDServiceInfo[i][SERVICE_FLAGS], 32);
            set_user_flags(id, read_flags(g_szBDUserPrivilegis[id]))
        }
    }
    return 1;
}

public MySQL_connection_failed(iState, const szError[], iErrorCode, const szData[], iDataSize)
{
    log_amx("[Error] MySQL connection failed");
    log_amx("[Error] ERROR %d | %s", iErrorCode, szError);
    if(iDataSize) log_amx("Query state: %d", szData[iState == TQUERY_CONNECT_FAILED ? 0 : 1]);
    set_fail_state(szError);
    return PLUGIN_HANDLED;
}

//! Нативы
public plugin_natives()
{
    register_native("unmq_get_users_id", "_sql_get_users_id", 1);
    register_native("unmq_get_users_login", "_sql_get_users_login");
    register_native("unmq_get_users_balans", "_sql_get_users_balans");

    register_native("unmq_while_users", "_sql_while_users");
}

public _sql_get_users_id(iPlayer)
{
    // new iPlayer = get_param(1);
    if(g_BDUserInfo[iPlayer][ID] == 0) return 0;
    return g_BDUserInfo[iPlayer][ID];
}

public _sql_get_users_login(iPlayer, Login[])
{
    new iPlayer = get_param(1);
    new szBuffer[40 + 1];
    new szBufferNul[7 + 1];

    if(g_BDUserInfo[iPlayer][ID])
    {
        formatex(szBuffer, 40, "%s", g_BDUserInfo[iPlayer][LOGIN]);
        set_string(2, szBuffer, 40);
    }
    else
    {
        formatex(szBufferNul, 7, "unnamed");
        set_string(2, szBufferNul, 7);
    }
}

public _sql_get_users_balans(iPlayer, Balanse[])
{
    new iPlayer = get_param(1), szBuffer[10 + 1];

    formatex(szBuffer, 10, "%s", g_BDUserInfo[iPlayer][SHILINGS]);

    set_string(2, szBuffer, 10);
}

public _sql_while_users(iPlayer)
{
    new iPlayer = get_param(1);

    if(is_user_hltv(iPlayer) || is_user_bot(iPlayer) || !user_valid(iPlayer)) return 0;

    new iParams[1];
    iParams[0] = get_user_userid(iPlayer);
    get_user_authid(iPlayer, g_szPlayerSteam[iPlayer], charsmax(g_szPlayerSteam[]));
    get_user_ip(iPlayer, g_szPlayerIp[iPlayer], charsmax(g_szPlayerIp[]), 1);

    format(g_szQuery, charsmax(g_szQuery), "\
    SELECT `%s`.*\
    FROM `%s`\
    WHERE `%s`.`ip` = '%s' OR `%s`.`steam_id` = '%s'\
    ",
    g_szDataBase[TABLE_USERS],
    g_szDataBase[TABLE_USERS],
    g_szDataBase[TABLE_USERS],
    g_szPlayerIp[iPlayer],
    g_szDataBase[TABLE_USERS],
    g_szPlayerSteam[iPlayer]);

    SQL_ThreadQuery(g_SqlTuple, "SQL_QueryConnection_Users", g_szQuery, iParams, sizeof iParams);
   
    return 1;
}
Требования
Сайт на официальной системе GameCMS
Удаленное подключение сервера к базе MySQL
Требование ReAPI
Нет
Поддержка русского языка
Да
Совместимость
  1. HLDS
  2. REHLDS
Сверху Снизу