Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Переделать иммунитет в плагинах

, Настройка иммунитета
Статус пользователя vertex627
сообщение 4.2.2012, 17:32
Сообщение #1
Стаж: 14 лет

Сообщений: 104
Благодарностей: 4
Полезность: < 0

Всем привет! НА сервере имеется 2 плагина, 1-й плагин для отсеивания игроков с плохим соединением а второй для кика афк игроков.
Так вот хотел бы в оба этих плагина вшить иммунитет для стим игроков.
Дпрото настроен так что STEAM_0:xxxxxxxx.. имеют только стим игроки а все ностим и игроки со всевозможными эмулями имеют valve_id xxxxxxx..
Если кто поможет буду очень благодарен!

Вот первый плагин

Код
#define PLUGIN     "AFK Manager"
#define AUTHOR     "Leon McVeran"
#define VERSION     "v1.4d"
#define PDATE     "19th May 2010"

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>

#define KICK_IMMUNITY         ADMIN_IMMUNITY

#define TASK_AFK_CHECK         142500
#define FREQ_AFK_CHECK         5.0
#define MAX_WARN         3

static const OFFSET_LINUX = 5
new const m_iJoiningState = 125

new bool:g_bSpec[33]
new Float:g_fLastActivity[33]
new g_iAFKCheck
new g_iAFKTime[33]
new g_iDropBomb
new g_iKickTime
new g_iMaxPlayers
new g_iMinPlayers
new g_iTransferTime
new g_iWarn[33]
new g_vOrigin[33][3]

new CVAR_afk_drop_bomb
new CVAR_afk_check
new CVAR_afk_transfer_time
new CVAR_afk_kick_time
new CVAR_afk_kick_players

public plugin_init(){
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_dictionary("afk_manager.txt")

    register_logevent("event_round_end", 2, "0=World triggered", "1=Round_End")
    register_logevent("event_round_start", 2, "0=World triggered", "1=Round_Start")

    // Support der alten Menьs
    register_clcmd("jointeam", "cmd_jointeam") // new menu
    register_menucmd(register_menuid("Team_Select", 1), 511, "cmd_jointeam") // old menu

    register_clcmd("joinclass", "cmd_joinclass") // new menu
    register_menucmd(register_menuid("Terrorist_Select", 1), 511, "cmd_joinclass") // old menu
    register_menucmd(register_menuid("CT_Select", 1), 511, "cmd_joinclass") // old menu

    CVAR_afk_check = register_cvar("afk_check", "1")
    CVAR_afk_drop_bomb = register_cvar("afk_drop_bomb", "2")
    CVAR_afk_transfer_time = register_cvar("afk_transfer_time", "7")
    CVAR_afk_kick_time = register_cvar("afk_kick_time", "2")
    CVAR_afk_kick_players = register_cvar("afk_kick_players", "25")
}

public plugin_cfg(){
    g_iMaxPlayers = get_maxplayers()
}

public client_connect(id){

    // Spieler als Spectator entmarkieren
    g_bSpec[id] = false

    // Positionen zurьcksetzen
    g_vOrigin[id] = {0, 0, 0}

    // Counter zurьcksetzen
    g_iAFKTime[id] = 0
    g_iWarn[id] = 0
}

public event_round_start(){

    // AFK Check eingeschaltet
    g_iAFKCheck = get_pcvar_num(CVAR_afk_check)
    if (g_iAFKCheck){

        // Spawn-Positionen aktualisieren
        new iPlayers[32], pNum
        get_players(iPlayers, pNum, "a")
        for (new p = 0; p < pNum; p++){
            get_user_origin(iPlayers[p], g_vOrigin[iPlayers[p]])
        }

        // Loop anlegen falls nicht vorhanden
        if (!task_exists(TASK_AFK_CHECK)) set_task(FREQ_AFK_CHECK, "func_afk_check", TASK_AFK_CHECK, _, _, "b")

        // Kick und Transferzeiten festlegen
        if (get_pcvar_num(CVAR_afk_transfer_time) < 6) set_pcvar_num(CVAR_afk_transfer_time, 6)
        if (get_pcvar_num(CVAR_afk_kick_time) < 6) set_pcvar_num(CVAR_afk_kick_time, 6)
        g_iDropBomb = get_pcvar_num(CVAR_afk_drop_bomb)
        g_iTransferTime = get_pcvar_num(CVAR_afk_transfer_time)
        g_iKickTime = get_pcvar_num(CVAR_afk_kick_time)
        g_iMinPlayers = get_pcvar_num(CVAR_afk_kick_players)
    }

    // AFK Check ausgeschaltet
    else{

        // Loop lцschen falls vorhanden
        if (task_exists(TASK_AFK_CHECK)) remove_task(TASK_AFK_CHECK)
    }


}

public cmd_jointeam(id){

    // Spieler als Spectator markieren, sonst kann man den Kick umgehen, indem man keiner Klasse joined.
    g_bSpec[id] = true
}

public cmd_joinclass(id){

    // Spieler als Spectator entmarkieren
    g_bSpec[id] = false

    // Positionen zurьcksetzen
    g_vOrigin[id] = {0, 0, 0}

    // Counter zurьcksetzen
    g_iAFKTime[id] = 0
    g_iWarn[id] = 0
}

public event_round_end(){

    // Check darf nicht durchgefьhrt werden
    g_iAFKCheck = 0
}

public func_afk_check(taskid){
    if (g_iAFKCheck){
        new CsTeams:eTeam

        // Alle Spieler ьberprьfen
        for (new id = 1; id <= g_iMaxPlayers; id++){

            // Bots nicht ьberprьfen
            if (is_user_bot(id)) continue

            // AFK Funktionen fьr Specs
            if (is_user_connected(id) && !is_user_hltv(id)){
                eTeam = cs_get_user_team(id)
                if (eTeam == CS_TEAM_SPECTATOR || eTeam == CS_TEAM_UNASSIGNED || g_bSpec[id]){

                    // Counter erhцhen
                    g_iAFKTime[id]++

                    // Spec-Kick
                    if (g_iAFKTime[id] >= g_iKickTime - MAX_WARN){
                        func_kick_player(id)
                    }
                }
            }

            // AFK Funktionen fьr lebende Spieler
            if (is_user_alive(id)){

                // Positionen ьberprьfen
                if (g_iAFKCheck == 1){
                    new vOrigin[3]
                    get_user_origin(id, vOrigin)

                    if (g_vOrigin[id][0] != vOrigin[0] || g_vOrigin[id][1] != vOrigin[1]){
                        g_vOrigin[id][0] = vOrigin[0]
                        g_vOrigin[id][1] = vOrigin[1]
                        g_vOrigin[id][2] = vOrigin[2]
                        g_iAFKTime[id] = 0
                        g_iWarn[id] = 0
                    }
                    else{
                        g_iAFKTime[id]++
                    }
                }

                // Letzte Aktivitдt ermitteln
                else{
                    new Float:fLastActivity
                    fLastActivity = cs_get_user_lastactivity(id)

                    if (fLastActivity != g_fLastActivity[id]){
                        g_fLastActivity[id] = fLastActivity
                        g_iAFKTime[id] = 0
                        g_iWarn[id] = 0
                    }
                    else{
                        g_iAFKTime[id] = floatround((get_gametime() - fLastActivity) / FREQ_AFK_CHECK)
                    }
                }

                // Bombentransfer
                if (g_iDropBomb && g_iAFKTime[id] >= 3){
                    if (g_iDropBomb == 1){
                        if (pev(id, pev_weapons) & (1 << CSW_C4)) engclient_cmd(id, "drop", "weapon_c4")
                    }
                    else{
                        func_transfer_bomb(id)
                    }
                }

                // Spec-Switch
                if (g_iAFKTime[id] >= g_iTransferTime - MAX_WARN){
                    func_transfer_player(id)
                }
            }
        }
    }
}

public func_transfer_bomb(id){

    // Abbrechen wenn der Spieler keine Bombe hat
    if (!(pev(id, pev_weapons) & (1 << CSW_C4))) return

    // Ermittle alle lebenden Terroristen
    new iPlayers[32], pNum
    get_players(iPlayers, pNum, "ae", "TERRORIST")

    // Abbrechen falls weniger als 2 Terroristen leben
    if (pNum < 2) return

    // Finde den nдchsten Terroristen der nicht AFK ist
    new vCarrier[3], vRecipient[3], iRecipient, iDistance, iMinDistance = 999999
    get_user_origin(id, vCarrier)
    for (new p = 0; p < pNum; p++){
        if (g_iAFKTime[iPlayers[p]] < 2){
            get_user_origin(iPlayers[p], vRecipient)
            iDistance = get_distance(vCarrier, vRecipient)
            if (iDistance < iMinDistance){
                iMinDistance = iDistance
                iRecipient = iPlayers[p]
            }
        }
    }

    // Abbrechen wenn alle Terroristen AFK sind
    if (!iRecipient) return

    // Bombe transferieren
    engclient_cmd(id, "drop", "weapon_c4")
    new iC4 = engfunc(EngFunc_FindEntityByString, -1, "classname", "weapon_c4")
    if (pev_valid(iC4)){
        new iBackpack = pev(iC4, pev_owner)
        if (iBackpack > g_iMaxPlayers){
            set_pev(iBackpack, pev_flags, pev(iBackpack, pev_flags) | FL_ONGROUND)
            dllfunc(DLLFunc_Touch, iBackpack, iRecipient)
        }
    }

    // Nachrichten anzeigen
    new szRecipient[32], szMsg[128]
    get_user_name(iRecipient, szRecipient, 31)
    set_hudmessage(255, 255, 0, -1.0, 0.8, 0, 3.0, 6.0, 0.1, 0.2, -1)
    for (new p = 0; p < pNum; p++){
        if (iPlayers[p] != iRecipient){
            format(szMsg, 127, "%L", iPlayers[p], "AFK_TRANSFER_BOMB", szRecipient)
            show_hudmessage(iPlayers[p], "%s", szMsg)
        }
    }
    format(szMsg, 127, "%L", iRecipient, "AFK_GOT_BOMB")
    show_hudmessage(iRecipient, szMsg)
}

public func_transfer_player(id){

    // Warnung anzeigen, wenn nicht schon max-mal verwarnt
    if (g_iWarn[id] < MAX_WARN){
        ChatColor(id, "^4[^1A.F.K^4]^1  %L", LANG_PLAYER, "AFK_TRANSFER_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id]))
        g_iWarn[id]++
        return
    }

    // Eigentlich sollte die Bombe schon transferiert worden sein
    if (pev(id, pev_weapons) & (1 << CSW_C4)){
        engclient_cmd(id, "drop", "weapon_c4")
    }

    // Spieler tranferieren
    if (is_user_alive(id)) user_silentkill(id)

    // Allow players to choose a team more than one time per round (Thanks ConnorMcLeod)
    // I use this method caused of some issue with deathmatch (Player will be respawned as T or CT)
    set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX)
    engclient_cmd(id, "jointeam", "6")
    set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX)
    //cs_set_user_team(id, CS_TEAM_SPECTATOR)
    //cs_reset_user_model(id)

    // Positionen zurьcksetzen
    g_vOrigin[id] = {0, 0, 0}

    // Counter zurьcksetzen
    g_iAFKTime[id] = 0
    g_iWarn[id] = 0

    // Nachrichten anzeigen
    new szName[32]
    get_user_name(id, szName, 31)
    ChatColor(0, "^4[^1A.F.K^4]^1  %L", LANG_PLAYER, "AFK_TRANSFER_PLAYER", szName)
}

public func_kick_player(id){

    // Abbrechen wenn es sich um einen Admin handelt
    if (get_user_flags(id) & KICK_IMMUNITY) return

    // Anzahl der  aktuellen Spieler ermitteln
    new iCurrentPlayers = get_playersnum(1)

    // Sind noch Plдtze frei?
    if (iCurrentPlayers < g_iMinPlayers || !g_iMinPlayers) return

    // Warnung anzeigen, wenn nicht schon max-mal verwarnt
    if (g_iWarn[id] < MAX_WARN){
        ChatColor(id, "^4[^1A.F.K^4]^1  %L", LANG_PLAYER, "AFK_KICK_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id]))
        g_iWarn[id]++
        return
    }

    // Spieler kicken
    new szMsg[192]
    format(szMsg, 191, "%L", id, "AFK_KICK_REASON")
    server_cmd("kick #%d ^"%s^"", get_user_userid(id), szMsg)

    // Nachrichten anzeigen
    new szName[32]
    get_user_name(id, szName, 31)
    ChatColor(0, "^4[^1A.F.K^4]^1  %L", LANG_PLAYER, "AFK_KICK_PLAYER", szName)
}
stock ChatColor(const id, const input[], any:...)
{
    new count = 1, players[32]
    static msg[191]
    vformat(msg, 190, input, 3)
    
    replace_all(msg, 190, "!g", "^4")
    replace_all(msg, 190, "!y", "^1")
    replace_all(msg, 190, "!team", "^3")
    replace_all(msg, 190, "!team2", "^0")
    
    if (id) players[0] = id; else get_players(players, count, "ch")
    {
        for (new i = 0; i < count; i++)
        {
            if (is_user_connected(players[i]))
            {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}


а вот второй плагин

Код
/*
*    Original:    High Ping Kicker
*    Author:        OLO/Shadow
*
*    Original:    Lame Connection Punisher 1.1b
*    Author:        MeRcyLeZZ
*
*    Rebuild by UFPS.Team
*/

#include <amxmodx>
#include <amxmisc>

#define PLUGIN         "High Ping Kicker"
#define VERSION        "1.6"
#define AUTHOR        "UFPS.Team"

#define TASKID        1384

new g_amxbans
new g_maxplayers

new g_hpk_ping
new g_hpk_loss
new g_hpk_flux
new g_hpk_check
new g_hpk_freq
new g_hpk_bantype
new g_hpk_bantime
new g_hpk_amxbans
new g_hpk_immunity
new g_hpk_redirect
new g_hpk_server[127]
new g_hpk_password[32]

new hpk_loss[33]
new hpk_flux[33]
new hpk_last[33]
new hpk_ping[33]

new bool:hpk_user_immune[33]
new bool:hpk_user_connected[33]

enum hpk_cvars
{
    CVAR_PING,
    CVAR_LOSS,
    CVAR_FLUX,
    CVAR_CHECK,
    CVAR_FREQ,
    CVAR_BANTYPE,
    CVAR_BANTIME,
    CVAR_AMXBANS,
    CVAR_REDIRECT,
    CVAR_RSERVER,
    CVAR_RPASSW,
    CVAR_IMMUNITY
}

new hpk_pcvar[_:hpk_cvars]
new const hpk_min[_:hpk_cvars] = {-2000,   0,   0,  5,  3, 0,      0, 0, 0, 0, 0, 0 }
new const hpk_max[_:hpk_cvars] = { 2000, 100, 500, 20, 20, 3, 525600, 1, 1, 0, 0, 0 }

public plugin_init( )
{
    register_plugin( PLUGIN, VERSION, AUTHOR )
    register_dictionary( "hpk.txt" )

    register_event( "HLTV", "hpk_get_pcvars", "a", "1=0", "2=0" )

    hpk_pcvar[CVAR_PING]      = register_cvar( "hpk_ping",   "145" )
    hpk_pcvar[CVAR_FLUX]      = register_cvar( "hpk_flux",   "40" )
    hpk_pcvar[CVAR_LOSS]      = register_cvar( "hpk_loss",    "49" )
    hpk_pcvar[CVAR_CHECK]     = register_cvar( "hpk_check",   "10" )
    hpk_pcvar[CVAR_FREQ]      = register_cvar( "hpk_freq",     "10" )
    hpk_pcvar[CVAR_IMMUNITY]  = register_cvar( "hpk_immunity", "a" )
    hpk_pcvar[CVAR_BANTYPE]   = register_cvar( "hpk_bantype",  "2" )
    hpk_pcvar[CVAR_BANTIME]   = register_cvar( "hpk_bantime",  "30" )
    hpk_pcvar[CVAR_AMXBANS]   = register_cvar( "hpk_amxbans",  "1" )
    hpk_pcvar[CVAR_REDIRECT]  = register_cvar( "hpk_redirect", "0" )
    hpk_pcvar[CVAR_RSERVER]   = register_cvar( "hpk_server",    "" )
    hpk_pcvar[CVAR_RPASSW]    = register_cvar( "hpk_password",  "" )
}

public plugin_cfg( )
{
    hpk_get_pcvars

    g_amxbans     = get_cvar_pointer( "amxbans_version" )
    g_maxplayers  = get_maxplayers( )

    set_task( float( g_hpk_freq ), "task_check_connect", TASKID, _, _, "b" )
}

public hpk_get_pcvars( )
{
    g_hpk_ping     = hpk_get_value(     CVAR_PING )
    g_hpk_loss     = hpk_get_value(     CVAR_LOSS )
    g_hpk_flux     = hpk_get_value(     CVAR_FLUX )
    g_hpk_check    = hpk_get_value(    CVAR_CHECK )
    g_hpk_freq     = hpk_get_value(     CVAR_FREQ )
    g_hpk_bantype  = hpk_get_value(  CVAR_BANTYPE )
    g_hpk_bantime  = hpk_get_value(  CVAR_BANTIME )
    g_hpk_amxbans  = hpk_get_value(  CVAR_AMXBANS )
    g_hpk_redirect = hpk_get_value( CVAR_REDIRECT )
    g_hpk_immunity = hpk_get_flags(              )
}

public client_authorized( id )
    hpk_user_immune[id] = hpk_check_immunity( id )


public client_infochanged( id )
    if( is_user_connected( id ) ) hpk_user_immune[id] = hpk_check_immunity( id )


public client_putinserver( id )
{
    if( !is_user_bot( id ) )
    {
        hpk_user_connected[id] = true
        set_task( 10.0 , "task_join_message" , id )
    }
}

public client_disconnect( id )
{
    if( task_exists( id ) ) remove_task( id )
    
    hpk_ping[id] = 0
    hpk_loss[id] = 0
    hpk_flux[id] = 0
    hpk_last[id] = 0
    hpk_user_immune[id] = false
    hpk_user_connected[id] = false
}

public task_join_message( id )
{
    if( hpk_user_immune[id] )
        client_print( id, print_chat, "%L", id, "HPK_IMMUNE" )
    else
        client_print( id, print_chat, "%L", id, "HPK_JOINMSG" )
}

public task_check_connect( )
{
    static ping, loss, id

    for( id = 1; id <= g_maxplayers; id++ )
    {
        if( !hpk_user_connected[id] || hpk_user_immune[id] ) continue

        get_user_ping( id, ping, loss )

        if( g_hpk_ping > 0 )
        {
            if( ping > g_hpk_ping )
                hpk_ping[id]++
            else if( hpk_ping[id] )
                hpk_ping[id]--
        }

        else
        {
            if( ping < abs( g_hpk_ping ) )
                hpk_ping[id]++
            else if( hpk_ping[id] )
                hpk_ping[id]--
        }


        if( hpk_ping[id] > g_hpk_check )
        {
            cmd_remove_player( id, ( g_hpk_check > 0 ) ? 0:1 )
            continue
        }

        if( loss > g_hpk_loss )
            hpk_loss[id]++
        else if( hpk_loss[id] )
            hpk_loss[id]--

        if( hpk_loss[id] > g_hpk_check )
        {
            cmd_remove_player( id, 2 )
            continue
        }

        if( abs( hpk_last[id] - ping ) > g_hpk_flux )
            hpk_flux[id]++
        else if( hpk_flux[id] )
            hpk_flux[id]--

        if( hpk_flux[id] > g_hpk_check )
        {
            cmd_remove_player( id, 3 )
            continue
        }

        hpk_last[id] = ping
    }
}

stock cmd_remove_player( id, reason_type = 0 )
{
    new name[32], refinement[192]
    get_user_name( id, name, charsmax( name ) )

    switch( reason_type )
    {
        case 1:        copy( refinement, charsmax( refinement ),"LPK_PING" )
        case 2:        copy( refinement, charsmax( refinement ),"HPK_LOSS" )
        case 3:        copy( refinement, charsmax( refinement ),"HPK_FLUX" )
        default:    copy( refinement, charsmax( refinement ),"HPK_PING" )
    }

    switch( g_hpk_bantype )
    {
        case 0:
        {
            client_print( 0, print_chat, "%L", LANG_PLAYER, "HPK_KICKMSG", name, LANG_PLAYER, refinement )

            if( g_hpk_redirect )
            {
                get_pcvar_string( hpk_pcvar[CVAR_RSERVER], g_hpk_server,   charsmax( g_hpk_server ) )
                get_pcvar_string( hpk_pcvar[CVAR_RPASSW],  g_hpk_password, charsmax( g_hpk_password ) )

                if( g_hpk_password[0] )
                    client_cmd ( id, ";Password ^"%s^"", g_hpk_password )

                client_cmd ( id, ";Echo ^"* Redirect to another server.^";Disconnect;Wait;Wait;Wait;Connect %s", g_hpk_server )
            }

            else
            {
                server_cmd( "kick #%d ^"%L^"", get_user_userid( id ), id, "HPK_REASON", id, refinement )
            }
        }

        case 1:
        {
            if( g_amxbans && g_hpk_amxbans )
            {
                new ip[16]
                get_user_ip( id, ip, charsmax( ip ), 1 )

                server_cmd( "amx_banip %i %s ^"%L^"", g_hpk_bantime, ip, id, "HPK_AMXBANS" )
            }

            else
                server_cmd( "amx_banip #%d %d ^"%L^"", get_user_userid( id ), g_hpk_bantime, id, "HPK_REASON", id, refinement )
        }

        case 2:
        {
            if( g_amxbans && g_hpk_amxbans )
            {
                new authid[44]
                get_user_authid( id, authid, charsmax( authid ) )

                server_cmd( "amx_ban %i #%d ^"%L^"", g_hpk_bantime, get_user_userid( id ), id, "HPK_AMXBANS" )
            }

            else
                server_cmd( "amx_ban #%d %d ^"%L^"", get_user_userid( id ), g_hpk_bantime, id, "HPK_REASON", id, refinement )
        }
    }

    log_amx( "%L", LANG_SERVER, "HPK_KICKLOG", name, LANG_SERVER, refinement )
}

stock hpk_get_value( index )
    return  clamp( get_pcvar_num( hpk_pcvar[index] ), hpk_min[index], hpk_max[index] )

stock hpk_get_flags( )
{
    static flags[24]
    get_pcvar_string( hpk_pcvar[CVAR_IMMUNITY], flags, charsmax( flags ) )
    return( read_flags( flags ) )
}

stock bool:hpk_check_immunity( id )
{
    if( get_user_flags( id ) & g_hpk_immunity ) return true
    return false
}

public plugin_end( )
    if( task_exists( TASKID ) ) remove_task( TASKID )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: