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

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

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

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

[FS] Vehicle Bonus Return

OKStyle

Адвокат по делам семейным
Administrator
Wiki Team
Регистрация
4 Мар 2011
Сообщения
7,094
Лучшие ответы
226
Репутация
2,455
Награды
11
Как многие могли заметить, в 0.3b убрали бонусы, которые получал игрок, садясь в тачку (такси - деньги, ментовские тачки - дробовик, спецназовские тачки - броня). Кому-то они мешали из-за неверной работы античита, но другим - нравились. Поскольку я отношусь ко второй группе, то решил набросать небольшой код для исправления этого недоразумения. Тем более в 0.3d хотят убрать выдачу и парашюта.

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

PHP:
#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 = GetPlayerPoolSize(); i != -1; i--)
    {
        if(!IsPlayerConnected(i) || IsPlayerNPC(i) || GetPVarInt(i, "BonusVeh") != vehicleid) continue;
        SetPVarInt(i, "BonusVeh", -1); // после каждого респауна тачки бонусы восстанавливаются и их снова можно взять
    }
    return 1;
}
Автор: OKStyle
 
Сверху Снизу