Иконка ресурса

Access for forum users (IPS 4.x) 1.2

Нет прав для скачивания
Сообщения
316
Реакции
131
Помог
4 раз(а)
Пользователь alabamaster1337 разместил новый ресурс:

Флаги доступа в кс для юеров форума IPS 4.1x - Флаги доступа на сервере для юзеров форума IPS 4.1x

Плагин выдает указанные Вами флаги доступа на сервере, юзерам форума IPS 4.1x
Для IPS 4.2 вроде тоже подойдет, точно не знаю, не проверял
Узнать больше об этом ресурсе...
 
Сообщения
2,491
Реакции
2,791
Помог
61 раз(а)
1. Изменить название темы на более информативное
2. register_plugin("PLUGIN", "VERSION", "AUTHOR") кавычки не нужны
3. соединение с базой зачем держать открытым все время. Вообще не нужно вручную делать коннект для теста даже.
4. таск в plugin_init можно полностью убрать
5. Запрос не наилучший. Используйте JOIN (или равно подзапрос) а не оператор IN который может вернуть n строчек в результате
6. в CheckUserHandle нету проверки на ошибку (соединение, синтаксис и другие)
7. настройка очень сложная. используйте read_flags()
 
Сообщения
432
Реакции
409
Помог
14 раз(а)
3. соединение с базой зачем держать открытым все время. Вообще не нужно вручную делать коннект для теста даже.
SQL_Connect вообще не нужно, если юзать асинхронные запросы. Оно не используется
 
Сообщения
104
Реакции
38
Помог
1 раз(а)
А для xenforo будет ?
 
Сообщения
316
Реакции
131
Помог
4 раз(а)
ImbaSS,
Код:
#include <amxmodx>
#include <amxmisc>
//#include <engine>
//#include <cstrike>
#include <sqlx>

#define HOST  ""        //адрес БД форума
#define USER  ""         //логин к БД форума
#define PASS  ""         //пароль от БД форума
#define DBASE ""         //имя БД

#define USE_CMS     2 // 1 - ips v4.x // 2 - xenforo v2.x

#define GROUP_ID     2     // ID группы форума

new Handle:SQL_Tuple
new Handle:SQL_Connection
new MemberGroupID[33]
new fwdSetPrefix

public plugin_init()
{
    register_plugin("Access for forum users", "1.2", "filip / alabamaster1337")
    fwdSetPrefix = CreateMultiForward("PutPrefix", ET_IGNORE, FP_CELL)
    set_task(1.0, "mysql_connection")
}

public client_putinserver(id)
{
    if(is_user_admin(id) || is_user_bot(id) || is_user_hltv(id))
    {
        //log_amx("Player already has access")
        return
    }
    else
    {
        set_task(0.3, "CheckUser", id)
    }
}

public mysql_connection(id)
{
    new err, error[256]

    SQL_Tuple = SQL_MakeDbTuple (HOST, USER, PASS, DBASE)
    SQL_Connection = SQL_Connect(SQL_Tuple, err, error, charsmax(error))

    if(SQL_Connection != Empty_Handle)
    {
        log_amx("Connect ok")
    }
    else
    {
        log_amx("SQLX connect sql error %s ",error)
    }
}

public CheckUser(id)
{
    new SteamId[35], szTemp[2048]
    new Data[1]
    Data[0] = id
    get_user_authid(id, SteamId, charsmax(SteamId))

    // для ips 'field_2' - номер поля steamid // для xenforo 'steamid1337' - ид поля
    #if defined USE_CMS
        #if USE_CMS == 1
            format(szTemp, charsmax(szTemp), "SELECT `member_group_id` FROM `core_members` WHERE `member_id` IN (SELECT `member_id` from `core_pfields_content` WHERE `field_2` = '%s')", SteamId)
        #endif
        #if USE_CMS == 2
            format(szTemp, charsmax(szTemp), "SELECT `user_group_id` FROM `xf_user` WHERE `user_id` IN (SELECT `user_id` from `xf_user_field_value` WHERE `steamid1337` = '%s')", SteamId)
        #endif
    #endif

    SQL_ThreadQuery (SQL_Tuple, "CheckUserHandle", szTemp, Data, 1)
}

public CheckUserHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    switch(FailState)
    {
        case TQUERY_CONNECT_FAILED, TQUERY_QUERY_FAILED:
        {
            log_amx("[SQL ERROR #%d] %s", Errcode, Error);
            return;
        }
    }

    if(SQL_NumResults(Query) > 0)
    {
        #if defined USE_CMS
            #if USE_CMS == 1
                new field = SQL_FieldNameToNum(Query, "member_group_id")
            #endif
            #if USE_CMS == 2
                new field = SQL_FieldNameToNum(Query, "user_group_id")
            #endif
        #endif

        MemberGroupID[Data[0]] = SQL_ReadResult(Query, field)

        if(MemberGroupID[Data[0]] == GROUP_ID)
        {
            set_user_flags(Data[0], read_flags("z")) // флаги доступа
        }

        new retPr; ExecuteForward(fwdSetPrefix, retPr, Data[0])
    }
    else
    {
        MemberGroupID[Data[0]] = 0
    }

    SQL_FreeHandle(SQL_Tuple)
    SQL_FreeHandle(SQL_Connection)
}
В админке форума Пользователи > Дополнительные поля пользователя > Добавить поле > ID поля steamid1337
Должно работать
 
Сообщения
316
Реакции
131
Помог
4 раз(а)
fantom, сегодня вспомнил об этом плагине, пока разбирался в запросах типа join, чуть не сдох :crazy:
Может как нибудь доделаю
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
alabamaster1337, для ксенфоро2 что то типа этого
SQL:
SELECT * FROM xf_user user
JOIN xf_user_field_value steam
ON
steam.user_id = user.user_id
WHERE
(user.user_group_id = %d OR FIND_IN_SET(%d, user.secondary_group_ids))
AND
steam.field_value = '%s'
AND
steam.field_id = 'steamid'
 
Сообщения
316
Реакции
131
Помог
4 раз(а)
Sonyx, :dntknw:
Код:
L 10/12/2018 - 09:26:38: String formatted incorrectly - parameter 5 (total 4)
L 10/12/2018 - 09:26:38: [AMXX] Displaying debug trace (plugin "forum_access_v1.amxx", version "1.2")
L 10/12/2018 - 09:26:38: [AMXX] Run time error 25: parameter error
L 10/12/2018 - 09:26:38: [AMXX]    [0] forum_access_v1.sma::CheckUser (line 78)
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
alabamaster1337, ну так смотрите какие параметры и где используются и под них переделывайте плагин свой. Я вроде не говорил что дал готовое решение. Еще как вариант - научиться читать ошибки и понимать что они говорят)
 
Сообщения
316
Реакции
131
Помог
4 раз(а)
Sonyx, как это читается?
Код:
SELECT * FROM xf_user user
JOIN xf_user_field_value steam
ON
steam.user_id = user.user_id
WHERE
(user.user_group_id = %d OR FIND_IN_SET(%d, user.secondary_group_ids))
AND
steam.field_value = '%s'
AND
steam.field_id = 'steamid'
Выбрать все из таблицы xf_user, что такое user?
JOIN xf_user_field_value steam, что такое steam?

Почему на сайтах про это ничего не пишут, откуда это берется, как и что, почему нету инфы, соединить то с тем с чем с этим с кем с чем ..
Сложна!!11! все, не хочу
 
Сообщения
82
Реакции
83
Помог
5 раз(а)
alabamaster1337, 'user' и 'steam' это синонимы к таблице. Когда у тебя куча джоинов, могут быть одноименные столбцы в разных таблицах, что может привести к тому, что SQL не поймет что с чем джоинить.
Перевод запроса на русский:
Выбрать все столбцы из xf_user, назначить синоним user
Присоеденить к запросу таблицу xf_user_field_value, назначить синоним steam
Присоеденить по параметрам: поле user_id в таблице xf_user_field_value должно быть равно полю user_id из таблицы xf_user(steam.user_id = user.user_id).

Условия WHERE переводить, думаю, нет смысла.
 
Сообщения
316
Реакции
131
Помог
4 раз(а)
oxoTHuk, вот, вот, почему такое не пишут на сайтах по sql, спасибо
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу