E-mail:
Пароль:
Общайтесь на форуме,задавайте вопросы,что смогу отвечу,зовите друзей.
Рекламный блок Форума
Реклама
Реклама
Реклама
  • Страница 1 из 1
  • 1
Органичение скорости у разбитой машины
Dima_TkachДата: Среда, 09.11.2011, 20:32 | Сообщение # 1
...</div
Сообщений: 215
Награды: 2

[ 3 ]


Идея: Если авто игрока сломано, скрипт не даст разогнаться быстрее 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);  


Автор: OFFREAL
  • Страница 1 из 1
  • 1
Поиск:

Статистика Форума
Лучшие пользователи
Уважаемые пользователи
Популярные темы
Недавно обновленные темы
Dima_Tkach Постов [ 215 ]
Free-Fire Постов [ 14 ]
SeXy Постов [ 11 ]
Tailer Постов [ 8 ]
r@d)_b@ll) Постов [ 5 ]
FriZ Постов [ 4 ]
ZioSHik Постов [ 4 ]
Kolyamba Постов [ 2 ]
Jon_Smit Постов [ 2 ]
Nik_Ull Постов [ 2 ]
Dima_Tkach Репутация [ 3 ]
Free-Fire Репутация [ 2 ]
FriZ Репутация [ 1 ]
Kolyamba Репутация [ 1 ]
Nik_Ull Репутация [ 1 ]
ZioSHik Репутация [ 1 ]
velix Репутация [ 1 ]
DateX Репутация [ 1 ]
smart2009 Репутация [ 1 ]
Marselo_Zm Репутация [ 1 ]
Досчитаем до 500 [ 10 ]
Услуги скриптинга и так же MAP's [ 6 ]
Место где нельзя драться [ 6 ]
Вопрос и Ответ [ 5 ]
Dima_Tkach [ 5 ]
Скриншоты с SAMP'a [ 4 ]
Регистрация [ 4 ]
[GM] V:RP aka Valence Role Play [ 3 ]
Смена ника [ 3 ]
[GM] Virtyal-City Role Play [ 3 ]
Интернет-магазин мебели в Украине [ 0 ]
[GM] MyGame Village [ 1 ]
Прослушка телефона [/track] [ 1 ]
Набор в команду сайта [ 1 ]
Как из .амх получить .pwn [ 1 ]
[GM] The Godfather [GameWorld] [ 2 ]
[GM] V:RP aka Valence Role Play [ 3 ]
Склонение [ 0 ]
Античит на оружие. [ 0 ]
Убираем пинг в SAMP [ 0 ]