Всего тем: 1434
Сообщений: 7448
Новые сообщения Участники Правила форума Поиск RSS
Страница 1 из 11
Форум » Pawno » Pawn WIKI » Ограничение скорости у разбитой машины
Ограничение скорости у разбитой машины
sistemsДата: Воскресенье, 21.10.2012, 01:30 | Сообщение # 1
Сообщений: 135
Репутация: 8
Награды: 2
Клан:
n/a
Fun Team:
Bomj Gang
Группа: Пользователь
Статус:
Идея: Если авто игрока сломано, скрипт не даст разогнаться быстрее 50 км/ч (регулируется)

Реализация: Измеряется скорость по осям X и Y, если замечаем превышение скорости замедляем транспортное средство.

Особенности: Используется оптимизированная версия без тригонометрии чтобы сильно не нагружать процессор. В ней имеется недостаток который заключается в том что предельная скорость в направлениях СВ, ЮВ, ЮЗ, СЗ будет больше максимальной, но не более чем на 30%. Также стоит отметить что нет проверки на тип транспортного средства.

Исходный код:

дефайны
Code
#define BE_MIN_HLS 500.00 // здоровье ниже которого машина считается сломанной
#define BE_MAX_SPD_VAR 50 // максимальная скорость, можно изменять
#define BE_MAX_SPD BE_MAX_SPD_VAR*0.005  


переменные
Code
new const BE_Bad_Vehs[] = {
460, 464, 476, 511, 512, 513, 519, 520, 539, 553, 577, 592, 593, // planes
417, 425, 447, 465, 469, 487, 488, 497, 501, 548, 563 // heli
};
new bool: BE_Play_Check[MAX_PLAYERS];  


функции
Code
forward BadEngine();
public BadEngine()
{
     new veh, Float:spd[3], Float:hls;
     for(new i; i != GetMaxPlayers(); i++)
     {
         if( !BE_Play_Check[i] ) { continue; }
         veh = GetPlayerVehicleID( i );
         if( !veh ) { continue; }
         GetVehicleHealth( veh, hls );
         if( hls > BE_MIN_HLS ) { continue; }
         GetVehicleVelocity( veh, spd[0], spd[1], spd[2] );

         if( floatabs(spd[0]) > floatabs(spd[1]) )
         {
             if( floatabs(spd[ 0 ]) > BE_MAX_SPD )
             {
                 hls = BE_MAX_SPD / floatabs(spd[ 0 ]);
                 SetVehicleVelocity( veh, spd[0]*hls, spd[1]*hls, spd[2] );
             }
         }
         else
         {
             if( floatabs(spd[ 1 ]) > BE_MAX_SPD )
             {
                 hls = BE_MAX_SPD / floatabs(spd[ 1 ]);
                 SetVehicleVelocity( veh, spd[0]*hls, spd[1]*hls, spd[2] );
             }
         }
     }
}


в верх паблика OnPlayerStateChange
Code
if( newstate == PLAYER_STATE_DRIVER )
{
     new temp;
     temp = GetVehicleModel( GetPlayerVehicleID( playerid ) );
     BE_Play_Check[ playerid ] = true;
     for(new i; i != sizeof( BE_Bad_Vehs ); i++ )
     {
         if( temp == BE_Bad_Vehs[ i ] )
         {
             BE_Play_Check[ playerid ] = false;
             break;
         }
     }
}
if( oldstate == PLAYER_STATE_DRIVER )
{
     BE_Play_Check[ playerid ] = false;
}  


не забываем про таймер в OnGameModeInit
Code
SetTimer("BadEngine", 500, true);


Ставим + smile


Лучший бесплатный WebHosting
 
_ENERG1ZzzeR_Дата: Воскресенье, 02.11.2014, 22:35 | Сообщение # 2
Сообщений: 53
Репутация: 0
Награды: 1
Клан:
Freedom Drifters
Fun Team:
n/a
Группа: Проверенные
Статус:
На рп рпг можно поставить

 
Форум » Pawno » Pawn WIKI » Ограничение скорости у разбитой машины
Страница 1 из 11
Поиск:
Всего пользователей: 7647
За сегодня: 0
За вчера: 0
За неделю: 1
За этот месяц: 3

Копирование материалов без указания на наш сайт запрещено!
Дизайн полностью принадлежит сайту MP-Info.ru
Автор дизайна: Silverback
© MP-Info.ru 2011-2017