Pickup Stop Flood (Анти повторный подбора пикапов)

Описание: Инклуды
Модератор: SJplayer

Leonardo_Gun
Автор темы
Аватара
Leonardo_Gun
Автор темы
Сообщения: 2
Зарегистрирован: 9 июля 2013
С нами: 10 лет 8 месяцев

#1 Leonardo_Gun » 28 февраля 2017, 9:54

Автор vasyok28
Описание: Инклуд предотвращает повторный вызов пикапа. Чтобы пикап повторно сработал нужно отойти от него на определенное расстояние. Инклуд в реализации довольно прост, любой скриптер сможет реализовать такую систему, данное решение скорей всего для новичков. Писал несколько месяцев назад, сегодня вспомнил про него и решил поделится.

Подключение:

Код: Выделить всё

После
#include <a_samp>
#include <streamer> (Не обязательно)

Добавить
#include <pickup_stop_flood>    


Код: Выделить всё

//Pickup Stop Flood by vasyok28 (supported streamer)

static bool:sf__PlayerPickUp[MAX_PLAYERS char];
static Float:sf__x[MAX_PLAYERS], Float:sf__y[MAX_PLAYERS], Float:sf__z[MAX_PLAYERS];
forward PlayerPick();

#if    !defined    LossPickup
    #define        LossPickup    1.0
#endif

#if    !defined    TimeLossPickup
    #define        TimeLossPickup    1000
#endif

public OnGameModeInit()
{
    SetTimer(!"PlayerPick", TimeLossPickup, true);

    #if    defined    sf__OnGameModeInit
        sf__OnGameModeInit();
    #endif

    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    sf__PlayerPickUp{playerid} = false;

    #if    defined    sf__OnPlayerDisconnect
        sf__OnPlayerDisconnect(playerid, reason);
    #endif
    
    return 1
;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    if(sf__PlayerPickUp{playerid} == true) return 1;
    sf__PlayerPickUp{playerid} = true;
    GetPlayerPos(playerid, sf__x[playerid], sf__y[playerid], sf__z[playerid]);
    
    
#if    defined    OnPlayerPickUpPickup
        sf__OnPlayerStateChange(playerid, pickupid);
    #endif
    return 1;
}

#if    !defined    OnPlayerPickUpDynamicPickup
public OnPlayerPickUpDynamicPickup(playerid, pickupid)
{
    if(sf__PlayerPickUp{playerid} == true) return 1;
    sf__PlayerPickUp{playerid} = true;
    GetPlayerPos(playerid, sf__x[playerid], sf__y[playerid], sf__z[playerid]);
    
    
#if    defined    OnPlayerPickUpDynamicPickup
        sf__OnPlayerPickUpDynamicPickup(playerid, pickupid);
    #endif
    return 1;
}
#endif

public PlayerPick()
{
    for(new i, p = GetPlayerPoolSize()+1, Float:sf__p_x, Float:sf__p_y, Float:sf__p_z; i < p; i++)
    {
        if(!IsPlayerConnected(i) || sf__PlayerPickUp{i} == false) continue;
        GetPlayerPos(i, sf__p_x, sf__p_y, sf__p_z);

        if(VectorSize(sf__x[i] - sf__p_x, sf__y[i] - sf__p_y, 0.0) > LossPickup)
        {
            sf__PlayerPickUp{i} = false;
        }
        
    
}
    return 1;
}


#if    defined    S_OnPlayerPickUpDynamicPickup
    #undef    OnPlayerPickUpDynamicPickup
#else
    #define    S_OnPlayerPickUpDynamicPickup
#endif

#define    OnPlayerPickUpDynamicPickup    sf__OnPlayerPickUpDynamicPickup
#if    defined    sf__OnPlayerPickUpDynamicPickup
forward sf__OnPlayerPickUpDynamicPickup();
#endif


#if    defined    _ALS_OnGameModeInit
    #undef    OnGameModeInit
#else
    #define    _ALS_OnGameModeInit
#endif

#define    OnGameModeInit    sf__OnGameModeInit
#if    defined    sf__OnGameModeInit
forward sf__OnGameModeInit();
#endif


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

#define    OnPlayerDisconnect    sf__OnPlayerDisconnect
#if    defined    sf__OnPlayerDisconnect
forward sf__OnPlayerDisconnect(playerid, reason);
#endif


#if    defined    _ALS_OnPlayerPickUpPickup
    #undef    OnPlayerPickUpPickup
#else
    #define    _ALS_OnPlayerPickUpPickup
#endif

#define    OnPlayerPickUpPickup    sf__OnPlayerStateChange
#if    defined    sf__OnPlayerStateChange
forward sf__OnPlayerStateChange(playerid, pickupid);
#endif   


Важно: Этот фикс не вызывает пикап через определенное количество секунд, а срабатывает исключительно на определенное расстояние (расстояние можно менять в самом инклюде).

П.С Писал для себя, возможно где-то есть в интернете похожий принцип
Вложения
Pickup Stop Flood.zip
(827 байт) 373 скачивания


Вернуться в «Include»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 6 гостей