[FilterScript] Anti-2shot
#1

hey,
This will effectively freeze any player that doesn't shoot the whole sawnoff clip. No silly timers or simple methods.
The player that gets punished will get froze, in milliseconds, whatever FREEZE_TIME is set to; however, the player will still take damage.

Needs y_bit.inc from YSI.

pawn Код:
#include <a_samp>
#include <YSI/y_bit.inc>

#define FREEZE_TIME       (650) // The time a player will get froze after evading reload and switching back.
#define PUNISH_THRESOLD  (2500) // If the player doesn't switch back the weapon in <PUNISH_THRESOLD> ms, ignore it.
#define iPlayer  playerid

#pragma tabsize 0

new
    BitArray:g_abIsSawnoffClipUsed< MAX_PLAYERS >,
    BitArray:g_abThisBitchDidntReload< MAX_PLAYERS >,
             g_iReloadEvadeTime[ MAX_PLAYERS ],
             g_iSawnoffAmmo[ MAX_PLAYERS ],
             g_cFiredShots[ MAX_PLAYERS char ],
             g_cPreviousWeapon[ MAX_PLAYERS char ]
;

public OnPlayerSpawn( iPlayer )
{
    g_iSawnoffAmmo[ iPlayer ] = -1;
    g_cFiredShots{ iPlayer } = 0;
    g_cPreviousWeapon{ iPlayer } = 0;
   
    Bit_Vet( g_abIsSawnoffClipUsed, iPlayer );
    Bit_Vet( g_abThisBitchDidntReload, iPlayer );
}

public OnPlayerUpdate( iPlayer )
{
    static
        s_iState,
        s_iSpecialAction
    ;
   
    s_iState = GetPlayerState( iPlayer );
    s_iSpecialAction = GetPlayerSpecialAction( iPlayer );
   
    if ( s_iState == PLAYER_STATE_ONFOOT && ( s_iSpecialAction == SPECIAL_ACTION_NONE || s_iSpecialAction == SPECIAL_ACTION_DUCK ) )
    {
        static
            s_iWeapon,
            s_iAmmo
        ;
       
        s_iWeapon = GetPlayerWeapon( iPlayer );
        s_iAmmo = GetPlayerAmmo( iPlayer );
       
        if ( g_cPreviousWeapon{ iPlayer } != s_iWeapon )
        {
            if ( g_cPreviousWeapon{ iPlayer } == WEAPON_SAWEDOFF )
            {
                if ( Bit_Get( g_abIsSawnoffClipUsed, iPlayer ) )
                {
                    static
                        s_iWeaponState
                    ;
                   
                    s_iWeaponState = GetPlayerWeaponState( iPlayer );
                   
                    if ( ( s_iWeaponState == WEAPONSTATE_MORE_BULLETS || s_iWeaponState == WEAPONSTATE_LAST_BULLET ) && g_cFiredShots{ iPlayer } != 4 )
                    {
                        Bit_Let( g_abThisBitchDidntReload, iPlayer );
                       
                        g_iReloadEvadeTime[ iPlayer ] = GetTickCount( );
                    }
                }
               
                g_cFiredShots{ iPlayer } = 0;
            }
            else if ( s_iWeapon == WEAPON_SAWEDOFF )
            {
                if ( Bit_Get( g_abThisBitchDidntReload, iPlayer ) )
                {
                    if ( GetTickCount( ) - g_iReloadEvadeTime[ iPlayer ] < PUNISH_THRESOLD )
                    {
                        new
                            Float:fVX,
                            Float:fVY,
                            Float:fVZ
                        ;
                       
                        GetPlayerVelocity( iPlayer, fVX, fVY, fVZ );
                       
                        if ( floatabs( fVZ ) < 0.15 )
                        {
                            ClearAnimations( iPlayer, 1 );
                           
                            ApplyAnimation( playerid, "PED", "XPRESSscratch", 0.0, 1, 0, 0, 0, FREEZE_TIME, 1 );
                        }
                    }
                   
                    Bit_Vet( g_abThisBitchDidntReload, iPlayer );
                }
            }
           
            g_cPreviousWeapon{ iPlayer } = s_iWeapon;
        }
       
        if ( s_iWeapon == WEAPON_SAWEDOFF )
        {
            if ( g_iSawnoffAmmo[ iPlayer ] == -1 )
                g_iSawnoffAmmo[ iPlayer ] = GetPlayerAmmo( iPlayer );
            else
            {
                if ( GetPlayerWeaponState( iPlayer ) == WEAPONSTATE_RELOADING )
                {
                    if ( Bit_Get( g_abIsSawnoffClipUsed, iPlayer ) )
                        Bit_Vet( g_abIsSawnoffClipUsed, iPlayer );
                }
                else
                {
                    if ( g_iSawnoffAmmo[ iPlayer ] != s_iAmmo )
                    {
                        if ( s_iAmmo < g_iSawnoffAmmo[ iPlayer ] )
                        {
                            Bit_Let( g_abIsSawnoffClipUsed, iPlayer );
                           
                            g_cFiredShots{ iPlayer } += g_iSawnoffAmmo[ iPlayer ] - s_iAmmo;
                        }
                        else
                        {
                            g_cFiredShots{ iPlayer } = 0;
                           
                            Bit_Vet( g_abIsSawnoffClipUsed, iPlayer );
                        }
                       
                        g_iSawnoffAmmo[ iPlayer ] = s_iAmmo;
                    }
                }
            }
        }
        else if ( g_iSawnoffAmmo[ iPlayer ] != -1 || Bit_Get( g_abIsSawnoffClipUsed, iPlayer ) )
        {
            g_iSawnoffAmmo[ iPlayer ] = -1;
           
            Bit_Vet( g_abIsSawnoffClipUsed, iPlayer );
           
            g_cFiredShots{ iPlayer } = 0;
        }
    }
    else if ( g_iSawnoffAmmo[ iPlayer ] != -1 || Bit_Get( g_abIsSawnoffClipUsed, iPlayer ) )
    {
        g_iSawnoffAmmo[ iPlayer ] = -1;
       
        Bit_Vet( g_abIsSawnoffClipUsed, iPlayer );
       
        g_cFiredShots{ iPlayer } = 0;
    }
   
    return 1;
}
Reply


Messages In This Thread
Anti-2shot - by Slice - 31.10.2010, 11:44
Re: Anti-2shot - by Hiddos - 31.10.2010, 11:48
Re: Anti-2shot - by Slice - 31.10.2010, 11:51
Re: Anti-2shot - by HyperZ - 31.10.2010, 11:55
Re: Anti-2shot - by MrDeath537 - 31.10.2010, 21:13
Re: Anti-2shot - by Mauzen - 01.11.2010, 00:26
Re: Anti-2shot - by iJets - 01.11.2010, 04:11
Re: Anti-2shot - by MyLife - 01.11.2010, 11:15
Re: Anti-2shot - by Slice - 01.11.2010, 11:26
Re: Anti-2shot - by MyLife - 01.11.2010, 11:29

Forum Jump:


Users browsing this thread: 2 Guest(s)