[FilterScript] Vehicle Bonus Return
#1

Как многие могли заметить, в 0.3b убрали бонусы, которые получал игрок, садясь в тачку (такси - деньги, ментовские тачки - дробовик, спецназовские тачки - броня). Кому-то они мешали из-за неверной работы античита, но другим - нравились. Поскольку я отношусь ко второй группе, то решил набросать небольшой код для исправления этого недоразумения. Тем более в 0.3d хотят убрать выдачу и парашюта.

Версия 1.1

* Исправлена логика работы скрипта;
* Профиксена выдача парашюта;
* Исправлен запрет повторных выдачей бонусов.

pawn Code:
#include <a_samp>
// Vehicle Bonus Return 1.1 by O.K.Style™
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
    {
        if(IsPlayerNPC(playerid)) return 1;
        new vehicleid = GetPlayerVehicleID(playerid);
        if(GetPVarInt(playerid, "BonusVeh") == vehicleid) return 1;
        new vehiclemodel = GetVehicleModel(vehicleid);
        switch(vehiclemodel)
        {
            case 416:
            {
                new Float:hp;
                GetPlayerHealth(playerid, hp);
                if(hp + 20.0 > 100.0) SetPlayerHealth(playerid, 100.0);
                else if(hp + 20.0 <= 100.0) SetPlayerHealth(playerid, 20.0 + hp);
            }
            case 420, 438: GivePlayerMoney(playerid, 12);
            case 427, 601: SetPlayerArmour(playerid, 100.0);
            case 457: GivePlayerWeapon(playerid, 2, 1);
            case 596..599: GivePlayerWeapon(playerid, 25, 5);
            default: return 1;
        }
        SetPVarInt(playerid, "BonusVeh", vehicleid); // чтобы нельзя было несколько раз подряд получать один и тот же бонус
    }
    return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
    if(IsPlayerNPC(playerid)) return 1;
    new vehiclemodel = GetVehicleModel(vehicleid);
    switch(vehiclemodel)
    {
        case 417, 425, 447, 460, 469, 476, 487, 488, 497, 511..513, 519, 520, 553, 548, 563, 577, 592, 593:
        {
            new Float:x, Float:y, Float:z;
            GetVehiclePos(vehicleid, x, y, z);
            #pragma unused x
            #pragma unused y
            if(z > 50.0)
            {
                new AnimLib[30], AnimName[30];
                GetAnimationName(GetPlayerAnimationIndex(playerid), AnimLib, sizeof(AnimLib), AnimName, sizeof(AnimName));
                if(strcmp(AnimLib, "PED", true) == 0 && (strcmp(AnimName, "FALL_FALL", true) == 0 || strcmp(AnimName, "JUMP_GLIDE", true) == 0 || strcmp(AnimName, "IDLE_STANCE", true) == 0))
                {
                    GivePlayerWeapon(playerid, 46, 1);
                }
            }
            else if(z < 50.0)
            {
                #pragma unused z
            }
        }
    }
    return 1;
}
public OnVehicleSpawn(vehicleid)
{
    for(new i, j = GetMaxPlayers(); i != j; i++)
    {
        if(!IsPlayerConnected(i)) continue;
        if(IsPlayerNPC(i)) continue;
        if(GetPVarInt(i, "BonusVeh") != vehicleid) continue;
        SetPVarInt(i, "BonusVeh", -1); // после каждого респауна тачки бонусы восстанавливаются и их снова можно взять
    }
    return 1;
}
Reply
#2

Как бэ парашют давали, только если ты будешь из него[самолёта] выпрыгивать с высоты больше определённой(например 100м)
Reply
#3

В следующем обновлении добавлю. Одна проверка всего, но в другом колбэке.
Reply
#4

Обновил. Думаю вот, не лишняя ли проверка на анимацию... Смысл её был в том, чтобы повторно давать парашют, т.к. просто так он не давался при достижении нужной высоты.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)