• Уважаемые посетители!

    Информируем вас о том, что в настоящий момент регистрация на форуме с использованием адресов электронной почты в домене @gmail.com (включая все корпоративные и персональные аккаунты Google) невозможна.

    Письма, отправленные с нашего сервера (подтверждение регистрации, ссылки для восстановления доступа), не доставляются на почтовые сервисы Google по техническим причинам, не зависящим от администрации форума.

    К сожалению, сроки устранения данной проблемы неизвестны.

    Для регистрации на форуме, пожалуйста, используйте адреса электронной почты других сервисов (Yandex, Mail.ru, Rambler и др.).
Иконка ресурса

Addons GreyPanel API - Интеграция сервера CS 1.6 с сайтом GreyPanel V2 1.0.0

Нет прав для скачивания
Модуль
Автор
BiZaJe
Исходный код
code:
#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#include <greypanel>

new const szPluginName[]   = "GreyPanel_API";
new const szPluginAuthor[] = "BiZaJe";
const iMajorVersion        = 1;
const iMinorVersion        = 0;
const iPatchVersion        = 0;

enum _:eCvars {
    cvDBUserName[MAX_STRING_LEN],
    cvDBPasswd[MAX_STRING_LEN],
    cvDBName[MAX_STRING_LEN],
    cvHostName[MAX_STRING_LEN],
    cvServerAddr[MAX_STRING_LEN],
    cvDbPrefix[32],
    cpUseAdmins,
    cpDebug,
    cpUseGroupFlags,
    cpSiteUrl,
    cpAmxMode
}

enum _:eMForward {
    AdminsLoaded = 1,
    AdminConnected,
    Admin_Disconnect,
    MemberConnected,
    PreAdminCheck,
    PostAdminCheck
}

new aCvarsData[eCvars];
new g_iServerId, g_iRetFwdIgnor;
new g_szAuthIDs[MAX_PLAYERS + 1][MAX_STRING_LEN];
new g_szAuthIDs64[MAX_PLAYERS + 1][MAX_STRING_LEN];
new g_bitAPIstatus;
new g_hMForwards[eMForward];
new Trie:g_trhMemberInfo, Trie:g_trhOnlineAdminsInfo;
new Array:g_arhAllServices, Array:g_arrUserServices;
new Handle:g_hDbTuple;
new bool:bPlayerDataLoaded[MAX_PLAYERS + 1];
new g_szTables[TablePtr][64];

#pragma unused g_szAuthIDs, g_szAuthIDs64, bPlayerDataLoaded

#include "greypanel/greypanel_stocks.inl"
#include "greypanel/greypanel_db.inl"
#include "greypanel/greypanel_users.inl"
#include "greypanel/greypanel_services.inl"

public plugin_init() {
    new szVersion[MAX_INT_LEN];
    formatex(szVersion, charsmax(szVersion), "%d.%d.%d", iMajorVersion, iMinorVersion, iPatchVersion);
    register_plugin(szPluginName, szVersion, szPluginAuthor);
    register_cvar("greypanel_api", szVersion, FCVAR_SERVER|FCVAR_UNLOGGED|FCVAR_SPONLY);

    aCvarsData[cpAmxMode]       = register_cvar("gp_amx_mode", "1");
    aCvarsData[cpUseGroupFlags] = register_cvar("gp_use_group_flags", "1");
    aCvarsData[cpUseAdmins]     = register_cvar("gp_use_admins", "1");
    aCvarsData[cpDebug]         = register_cvar("gp_debug", "0");
    aCvarsData[cpSiteUrl]       = register_cvar("gp_url", "site.url");

    register_cvar("gp_sql_host", "");
    register_cvar("gp_sql_user", "");
    register_cvar("gp_sql_pass", "");
    register_cvar("gp_sql_db", "");
    register_cvar("gp_sql_prefix", "grey_");

    register_concmd("amx_reloadadmins", "CmdReloadAdmins", ADMIN_RCON);
    register_concmd("gp_reloadusers", "CmdReloadUsers", ADMIN_RCON);

    FnReadIniFile();
    FnMForwardsCreate();
}

public plugin_cfg() {
    new Handle:hSQL_Connection;
    CheckDBConnection(hSQL_Connection);
    if(!hSQL_Connection) return;

    log_amx("[GreyPanel API] Успешное подключение к базе данных.");
    g_bitAPIstatus |= UseGreyPanel;

    g_trhMemberInfo = TrieCreate();
  
    formatex(g_szTables[TBL_users], charsmax(g_szTables[]), "%susers", aCvarsData[cvDbPrefix]);
    formatex(g_szTables[TBL_user_groups], charsmax(g_szTables[]), "%suser_groups", aCvarsData[cvDbPrefix]);
    formatex(g_szTables[TBL_services], charsmax(g_szTables[]), "%sservices", aCvarsData[cvDbPrefix]);
    formatex(g_szTables[TBL_service_servers], charsmax(g_szTables[]), "%sservice_servers", aCvarsData[cvDbPrefix]);
    formatex(g_szTables[TBL_user_services], charsmax(g_szTables[]), "%suser_services", aCvarsData[cvDbPrefix]);
    formatex(g_szTables[TBL_monitor_servers], charsmax(g_szTables[]), "%smonitor_servers", aCvarsData[cvDbPrefix]);
    formatex(g_szTables[TBL_forum_threads], charsmax(g_szTables[]), "%sforum_threads", aCvarsData[cvDbPrefix]);
    formatex(g_szTables[TBL_forum_posts], charsmax(g_szTables[]), "%sforum_posts", aCvarsData[cvDbPrefix]);
    formatex(g_szTables[TBL_forum_likes], charsmax(g_szTables[]), "%sforum_likes", aCvarsData[cvDbPrefix]);

    FnGetServerId(hSQL_Connection);

    new szVersion[MAX_INT_LEN];
    formatex(szVersion, charsmax(szVersion), "%d.%d.%d", iMajorVersion, iMinorVersion, iPatchVersion);
    new hPluginLoaded = CreateMultiForward("OnGPAPIPluginLoaded", ET_IGNORE, FP_CELL, FP_STRING, FP_CELL);
    ExecuteForward(hPluginLoaded, g_iRetFwdIgnor, g_hDbTuple, szVersion, g_iServerId);
    DestroyForward(hPluginLoaded);

    if(g_bitAPIstatus & UseGreyPanelAdmins) {
        g_trhOnlineAdminsInfo = TrieCreate();
        g_arhAllServices = ArrayCreate(eAdminInfo);
        g_arrUserServices = ArrayCreate(eAdminInfo);
      
        if(g_iServerId) {
            FnLoadServices(0);
        }
    }
}

enum _:eIniSection { Database = 1, Misc }
new iData;

FnReadIniFile() {
    new szIniFile[MAX_NAME_LENGTH*2];
    get_configsdir(szIniFile, charsmax(szIniFile));
    add(szIniFile, charsmax(szIniFile), "/greypanel.ini");

    if(!file_exists(szIniFile)) {
        log_amx("[GreyPanel API] Конфиг greypanel.ini не найден, будут использоваться только cvar'ы из server.cfg");
        return;
    }

    new SMCParser:hParser = SMC_CreateParser();
    SMC_SetReaders(hParser, "OnParserKeyValue", "OnParserNewSection");
    new line, col;
    new SMCError:result = SMC_ParseFile(hParser, szIniFile, line, col);
    SMC_DestroyParser(hParser);

    if(result != SMCError_Okay) {
        new error[MAX_FMT_LENGTH];
        SMC_GetErrorString(result, error, sizeof(error));
        log_amx("Ошибка парсинга %s на строке %d, кол %d", error, line, col);
    } else {
        log_amx("[GreyPanel API] Конфигурация из greypanel.ini прочитана.");
    }
}

public SMCResult:OnParserNewSection(SMCParser:handle, const name[], data) {
    if(!strcmp(name, "Database")) iData = Database;
    else if(!strcmp(name, "Misc")) iData = Misc;
}

public SMCResult:OnParserKeyValue(SMCParser:handle, const szKey[], const szValue[], data) {
    if(iData == Database) {
        if(!strcmp(szKey, "host")) copy(aCvarsData[cvHostName], charsmax(aCvarsData[cvHostName]), szValue);
        else if(!strcmp(szKey, "user")) copy(aCvarsData[cvDBUserName], charsmax(aCvarsData[cvDBUserName]), szValue);
        else if(!strcmp(szKey, "pass")) copy(aCvarsData[cvDBPasswd], charsmax(aCvarsData[cvDBPasswd]), szValue);
        else if(!strcmp(szKey, "db")) copy(aCvarsData[cvDBName], charsmax(aCvarsData[cvDBName]), szValue);
        else if(!strcmp(szKey, "prefix")) copy(aCvarsData[cvDbPrefix], charsmax(aCvarsData[cvDbPrefix]), szValue);
    } else if(iData == Misc) {
        if(!strcmp(szKey, "server_ip")) copy(aCvarsData[cvServerAddr], charsmax(aCvarsData[cvServerAddr]), szValue);
        else if(!strcmp(szKey, "site_url")) set_pcvar_string(aCvarsData[cpSiteUrl], szValue);
    }
}

FnMForwardsCreate() {
    g_hMForwards[MemberConnected] = CreateMultiForward("OnGPAPIMemberConnected", ET_IGNORE, FP_CELL, FP_CELL, FP_STRING);
    g_hMForwards[AdminsLoaded]    = CreateMultiForward("OnGPAPIAdminsLoaded", ET_IGNORE, FP_CELL, FP_CELL);
    g_hMForwards[AdminConnected]  = CreateMultiForward("OnGPAPIAdminConnected", ET_IGNORE, FP_CELL, FP_STRING, FP_CELL, FP_CELL);
    g_hMForwards[Admin_Disconnect]= CreateMultiForward("OnGPAPIAdminDisconnected", ET_IGNORE, FP_CELL);
  
    if(FindPluginFunction("OnGPAPIPreAdminCheck"))
        g_hMForwards[PreAdminCheck] = CreateMultiForward("OnGPAPIPreAdminCheck", ET_STOP, FP_CELL, FP_VAL_BYREF, FP_VAL_BYREF);
    if(FindPluginFunction("OnGPAPIPostAdminCheck"))
        g_hMForwards[PostAdminCheck] = CreateMultiForward("OnGPAPIPostAdminCheck", ET_IGNORE, FP_CELL, FP_ARRAY);
}

stock bool:FindPluginFunction(const szFunction[]) {
    new Num = get_pluginsnum();
    for(new Index; Index < Num; Index++) {
        if(get_func_id(szFunction, Index) != -1) return true;
    }
    return false;
}

public plugin_end() {
    if(g_hDbTuple != Empty_Handle) SQL_FreeHandle(g_hDbTuple);
    if(g_trhOnlineAdminsInfo) TrieDestroy(g_trhOnlineAdminsInfo);
    if(g_trhMemberInfo) TrieDestroy(g_trhMemberInfo);
    if(g_arhAllServices) ArrayDestroy(g_arhAllServices);
    if(g_arrUserServices) ArrayDestroy(g_arrUserServices);
}

public CmdReloadAdmins(id, level, cid) {
    if(cmd_access(id, level, cid, 1)) {
        FnLoadServices(0);
    }
    return PLUGIN_HANDLED;
}

public CmdReloadUsers(id, level, cid) {
    if(cmd_access(id, level, cid, 1)) {
        new szArg[MAX_INT_LEN];
        read_args(szArg, charsmax(szArg));
        new iTarget = str_to_num(szArg);
        if(is_user_connected(iTarget)) {
            FnLoadMemberData(iTarget);
        }
    }
    return PLUGIN_HANDLED;
}
Требования
AmxModX 1.10
Поддержка русского языка
Да
Совместимость
  1. HLDS
  2. REHLDS
Сверху Снизу