Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Anti NOP SpawnPlayer

Eisenhower

Новичок
Мой первый Anti NOP (в виде filterscript'а).
Проверки на АФК и т.д. доделывайте уже сами, я вырезал это, оставив основной код.
Критика приветствуется.

Код:
#if defined __anti_nop_spawnplayer_defined
    #endinput
#endif

#define __anti_nop_spawnplayer_defined

#include <a_samp>

static
    gNopSpawnPlayerTimer                    [ MAX_PLAYERS ],
    gPlayerSpawn                            [ MAX_PLAYERS char ];

stock spawnPlayer( const playerid )
{       
    gPlayerSpawn{ playerid } = 1;
    gNopSpawnPlayerTimer[ playerid ] =  SetTimerEx( !"OnPlayerSpawnEx", GetPlayerPing( playerid ) + 1000, 0, !"i", playerid );

    SpawnPlayer( playerid );

    return 1;
}

#define SpawnPlayer spawnPlayer

forward OnPlayerSpawnEx( const playerid );
public OnPlayerSpawnEx( const playerid )
{
    if( gPlayerSpawn{ playerid } == 1 && gNopSpawnPlayerTimer[ playerid ] != 0 )
    {
        KillTimer( gNopSpawnPlayerTimer[ playerid ] );
        gNopSpawnPlayerTimer[ playerid ] = 0;
        
        // если выявлен NOP...
    }

    return 1;
}

public OnPlayerConnect( playerid )
{
    KillTimer( gNopSpawnPlayerTimer[ playerid ] );
    gNopSpawnPlayerTimer[ playerid ] =

    gPlayerSpawn{ playerid } = 0;

    #if defined ansp__OnPlayerConnect
        ansp__OnPlayerConnect( playerid );
    #endif

    return 1;
}

#if defined _ALS_OnPlayerConnect
    #undef OnPlayerConnect
#else
    #define _ALS_OnPlayerConnect
#endif

#define OnPlayerConnect                     ansp__OnPlayerConnect

#if defined ansp__OnPlayerConnect
    forward ansp__OnPlayerConnect( playerid );
#endif

public OnPlayerDisconnect( playerid, reason )
{
    KillTimer( gNopSpawnPlayerTimer[ playerid ] );
    gNopSpawnPlayerTimer[ playerid ] =
    
    gPlayerSpawn{ playerid } = 0;

    #if defined ansp__OnPlayerDisconnect
        ansp__OnPlayerDisconnect( playerid );
    #endif

    return 1;
}

#if defined _ALS_OnPlayerDisconnect
    #undef OnPlayerDisconnect
#else
    #define _ALS_OnPlayerDisconnect
#endif

#define OnPlayerDisconnect                  ansp__OnPlayerDisconnect

#if defined ansp__OnPlayerDisconnect
    forward ansp__OnPlayerDisconnect( playerid, reason );
#endif

public OnPlayerSpawn( playerid )
{
    KillTimer( gNopSpawnPlayerTimer[ playerid ] );
    gNopSpawnPlayerTimer[ playerid ] = 

    gPlayerSpawn{ playerid } = 0; 

    #if defined ansp__OnPlayerSpawn
        ansp__OnPlayerSpawn( playerid );
    #endif

    return 1;
}

#if defined _ALS_OnPlayerSpawn
    #undef OnPlayerSpawn
#else
    #define _ALS_OnPlayerSpawn
#endif

#define OnPlayerSpawn                     ansp__OnPlayerSpawn

#if defined ansp__OnPlayerSpawn
    forward ansp__OnPlayerSpawn( playerid );
#endif
Что думаете?
 
Сверху Снизу