User Connect

User Connect 0.0.15

Нет прав для скачивания
Код:
#pragma semicolon 1

#include <amxmodx>
#tryinclude <authemu>
#tryinclude <reapi>

new const g_szFileName[] = "user_connect.ini";

enum _:FLAG_LANG{
    a_Flag,
    a_Lang[32]
};

enum _:TrieTypes{
    Trie:AUTHID,
    Trie:NAME,
    Trie:IP,
    Trie:OTHER
}

new Trie: g_tData[TrieTypes];
new Array: g_aFlagLang, g_iArraySize;

public plugin_init() {
    register_plugin("User Connect", "0.1.5", "Jumper");
    register_dictionary("user_connect.txt");

    read_cfg();
}

read_cfg() {
    new szPath[PLATFORM_MAX_PATH];
    get_localinfo("amxx_configsdir", szPath, charsmax(szPath));
    format(szPath, charsmax(szPath), "%s/%s", szPath, g_szFileName);

    new iFile = fopen(szPath, "rt");

    if(!iFile) {
        set_fail_state("File ^"%s^" is not found", szPath);
    }

    for(new i; i < TrieTypes; i++) {
        g_tData[i] = TrieCreate();
    }

    g_aFlagLang = ArrayCreate(FLAG_LANG);

    new szBuffer[128], szAuthType[6], szAccess[MAX_AUTHID_LENGTH], szLang[32], szFlagLang[FLAG_LANG];

    while(!feof(iFile)) {
        fgets(iFile, szBuffer, charsmax(szBuffer));
        parse(szBuffer, szAuthType, charsmax(szAuthType), szAccess, charsmax(szAccess), szLang, charsmax(szLang));

        if(!szBuffer[0] || szBuffer[0] == ';' || !szAuthType[0] || !szAccess[0] || !szLang[0]) {
            continue;
        }

        if(!strcmp(szAuthType, "steam")) {
            TrieSetString(g_tData[AUTHID], szAccess, szLang);
        }
        else if(!strcmp(szAuthType, "name")) {
            TrieSetString(g_tData[NAME], szAccess, szLang);
        }
        else if(!strcmp(szAuthType, "ip")) {
            TrieSetString(g_tData[IP], szAccess, szLang);
        }
        else if(!strcmp(szAuthType, "flags")) {
            szFlagLang[a_Flag] = read_flags(szAccess);
            copy(szFlagLang[a_Lang], charsmax(szFlagLang[a_Lang]), szLang);
            ArrayPushArray(g_aFlagLang, szFlagLang);
            g_iArraySize++;
        }
        else if(!strcmp(szAuthType, "*")) {
            TrieSetString(g_tData[OTHER], szAccess, szLang);
        }
    }

    fclose(iFile);
}

public client_putinserver(id) {
    if(is_user_bot(id) || is_user_hltv(id)) {
        return PLUGIN_HANDLED;
    }

    new szNick[MAX_NAME_LENGTH], szIP[MAX_IP_LENGTH],  szAuthID[MAX_AUTHID_LENGTH], szLang[32];
    get_user_name(id, szNick, charsmax(szNick));
    get_user_authid(id,  szAuthID, charsmax( szAuthID));
    get_user_ip(id, szIP, charsmax(szIP), 1);
    new iFlags = get_user_flags(id);

    if(TrieKeyExists(g_tData[NAME], szNick)) {
        TrieGetString(g_tData[NAME], szNick, szLang, charsmax(szLang));
    }
    else if(TrieKeyExists(g_tData[AUTHID], szAuthID)) {
        TrieGetString(g_tData[AUTHID], szAuthID, szLang, charsmax(szLang));
    }
    else if(TrieKeyExists(g_tData[IP], szIP)) {
        TrieGetString(g_tData[IP], szIP, szLang, charsmax(szLang));
    }
    else if(g_iArraySize) {
        for(new i, szFlagLang[FLAG_LANG]; i < g_iArraySize; i++) {
            ArrayGetArray(g_aFlagLang, i, szFlagLang);

            if(iFlags & szFlagLang[a_Flag]) {
                copy(szLang, charsmax(szLang), szFlagLang[a_Lang]);
                break;
            }
        }
    }
    #if defined _authemu_included
    else if(is_user_authemu(id) && TrieKeyExists(g_tData[OTHER], "GSClient")) {
        TrieGetString(g_tData[OTHER], "GSClient", szLang, charsmax(szLang));
    }
    #endif
    else if(is_user_steam(id) && TrieKeyExists(g_tData[OTHER], "STEAM")) {
        TrieGetString(g_tData[OTHER], "STEAM", szLang, charsmax(szLang));
    }
    else if(TrieKeyExists(g_tData[OTHER], "ALL")) {
        TrieGetString(g_tData[OTHER], "ALL", szLang, charsmax(szLang));
    }
    if(szLang[0]) {
        client_print_color(0, print_team_default, "%L", LANG_PLAYER, szLang, id);
    }
}
#if !defined _reapi_included
stock bool:is_user_steam(id) {
// Author Sh0oter
        static dp_pointer;
        if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider"))) {
            server_cmd("dp_clientinfo %d", id);
            server_exec();
            return (get_pcvar_num(dp_pointer) == 2) ? true : false;
        }

        return false;
}
#endif
Назад
Верх