AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Suggestions / Requests (https://forums.alliedmods.net/forumdisplay.php?f=12)
-   -   Afk semiclip (https://forums.alliedmods.net/showthread.php?t=280245)

Saint Sinner 03-11-2016 22:14

Afk semiclip
 
I want to get semiclip to afk ... I want to enable semiclip and disable after player move

set_user_godmode( id );
set_pev( id , pev_solid, SOLID_NOT)

and

set_user_godmode( id , 1 );
set_pev( id , pev_solid, SOLID_SLIDEBOX);

Code:

#include <amxmodx>
#include <fun>

#define VERSION "1.1"

#define MIN_AFK_TIME    30 /* I use this incase stupid admins accidentally set mp_afktime to something silly. */
#define WARNING_TIME    15 /* Start warning the user this many seconds before they are about to be kicked. */
#define CHECK_FREQ  5 /* This is also the warning message frequency. */

new g_afktime[33];
new g_was_afk[33];

new g_oldangles[33][3];
new bool:g_spawned[33] = { true, ... };

new g_spirte_id;

public plugin_init()
{
    register_plugin( "AFK Kicker", VERSION, "Cheesy Peteza" );
    register_cvar( "afk_version", VERSION, FCVAR_SERVER | FCVAR_EXTDLL | FCVAR_SPONLY );

    register_cvar( "mp_afktime", "90" ); /* Kick people AFK longer than this time */
    register_cvar( "mp_afkminplayers", "8" ); /* Only kick AFKs when there is atleast this many players on the server */
    set_task( float( CHECK_FREQ ), "checkPlayers", _, _, _, "b" );
    register_event( "ResetHUD", "playerSpawned", "be" );
}

public checkPlayers()
{
    for ( new id = 1; id <= get_maxplayers(); id++ )
    {
        if ( is_user_alive( id ) && is_user_connected( id ) && !is_user_bot( id ) && !is_user_hltv( id ) && g_spawned[id] )
        {
            new newangle[3];
            get_user_origin( id, newangle );

            if ( newangle[0] == g_oldangles[id][0] && newangle[1] == g_oldangles[id][1] && newangle[2] == g_oldangles[id][2] )
            {
                g_afktime[id] += CHECK_FREQ;
                check_afktime( id );
            }
            else
            {
                g_oldangles[id][0]  = newangle[0];
                g_oldangles[id][1]  = newangle[1];
                g_oldangles[id][2]  = newangle[2];
                g_afktime[id]      = 0;

                if ( g_was_afk[id] )
                {
                    new name[32];
                    get_user_name( id, name, 31 );

                    set_user_godmode( id );
                    remove_sprite( id );
                    g_was_afk[id] = 0;
                    client_print( 0, print_chat, "[AFK Kicker] %s is NOT in godmode state for STOP being AFK.", name );
                }
            }
        }
    }
    return(PLUGIN_HANDLED);
}

check_afktime( id )
{
    new numplayers  = get_playersnum();
    new minplayers  = get_cvar_num( "mp_afkminplayers" );

    if ( numplayers >= minplayers )
    {
        new maxafktime = get_cvar_num( "mp_afktime" );

        if ( maxafktime < MIN_AFK_TIME )
        {
            log_amx( "cvar mp_afktime %i is too low. Minimum value is %i.", maxafktime, MIN_AFK_TIME );
            maxafktime = MIN_AFK_TIME;
            set_cvar_num( "mp_afktime", MIN_AFK_TIME );
        }

        if ( maxafktime - WARNING_TIME <= g_afktime[id] < maxafktime )
        {
            new timeleft = maxafktime - g_afktime[id];
            client_print( id, print_chat, "[AFK Kicker] You have %i seconds to move or you get godmode for being AFK", timeleft );
        }
        else if ( g_afktime[id] > maxafktime )
        {
            if ( !g_was_afk[id] )
            {
                new name[32];
                get_user_name( id, name, 31 );
                client_print( 0, print_chat, "[AFK Kicker] %s is in godmode state for being AFK longer than %i seconds", name, maxafktime );
                set_user_godmode( id, 1 );
                attach_sprite( id );
                g_was_afk[id] = 1;
            }
        }
    }
}

public plugin_precache()
{
    g_spirte_id = precache_model( "sprites/afk_sprite.spr" );
}

stock remove_sprite( user_id )
{
    if ( !is_user_connected( user_id ) )
    {
        return;
    }

    message_begin( MSG_ALL, SVC_TEMPENTITY );
    write_byte( TE_KILLPLAYERATTACHMENTS );
    write_byte( user_id );
    message_end();
}

stock attach_sprite( user_id )
{
    if ( !is_user_connected( user_id ) )
    {
        return;
    }

    message_begin( MSG_ALL, SVC_TEMPENTITY );
    write_byte( TE_PLAYERATTACHMENT );
    write_byte( user_id );
    write_coord( 60 );
    write_short( g_spirte_id );
    write_short( 9000 );
    message_end();
}

public client_connect( id )
{
    g_afktime[id] = 0;
    return(PLUGIN_HANDLED);
}

public client_putinserver( id )
{
    g_afktime[id] = 0;
    return(PLUGIN_HANDLED);
}

public playerSpawned( id )
{
    g_spawned[id] = false;
    new sid[1];
    sid[0] = id;
    set_task( 0.75, "delayedSpawn", _, sid, 1 ); /* Give the player time to drop to the floor when spawning */
    return(PLUGIN_HANDLED);
}

public delayedSpawn( sid[] )
{
    get_user_origin( sid[0], g_oldangles[sid[0]] );
    g_spawned[sid[0]] = true;
    return(PLUGIN_HANDLED);
}


raizo11 03-12-2016 08:41

Re: Afk semiclip
 
Code:

#include <fakemeta>
Code:

new plr_solid[33];
Code:

set_user_godmode( id );
plr_solid[id] = SOLID_SLIDEBOX;
set_pev(id, pev_solid, SOLID_SLIDEBOX);

Code:

plr_solid[id] = SOLID_NOT;
set_pev(id, pev_solid, SOLID_NOT);
set_user_godmode( id, 1 );



All times are GMT -4. The time now is 21:21.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.