Я лично сделал так:
1) Создал таймер вот-такой таймер для каждого т/с на сервере
new CarSpeedTimer[MAX_VEHICLES];
Создал функцию:
forward CarSpeed(playerid);
public CarSpeed(playerid)
{
new State = GetPlayerState(playerid); //узнаем место игрока
if (State != PLAYER_STATE_DRIVER) return 1;// если игрок не на месте водителя
new Float:D[4],vid, Float:nowspeed, maxspeed; // Переменные D[4] - вектор перемещения, nowspeed текущяя скорость, maxspeed максимальная скорость
maxspeed = CarInfo[vid][cSpeed];
vid = GetPlayerVehicleID(playerid);
GetVehicleVelocity(vid, D[0], D[1], D[2]);
nowspeed = floatsqroot(floatpower(floatabs(D[0]), 2.0) + floatpower(floatabs(D[1]), 2.0) + floatpower(floatabs(D[2]), 2.0)) * 100.3;
//dis- это коефициент ускорения, лично я сделал по формуле dis увеличивается каждую секунду на (1/время разгона до 100 км/ч)
if(dis <= 0.2)
{
if(nowspeed <=10)
{
dis = 0;
}else if(nowspeed >= maxspeed){
dis = 0;
}else{
dis = dis+(1/CarInfo[vid][cSecToHu]);
}
}
GetVehicleZAngle(vid, D[3]);
SetVehicleVelocity(vid,floatadd(D[0],floatmul(dis,floatsin(-D[3],degrees))), floatadd(D[1],floatmul(dis,floatcos(-D[3],degrees))), D[2]);
return 1;
}
и в OnPlayerKeyStateChange добавляем проверку на зажатую клавишу W
if (PRESSED(KEY_SPRINT))
{
CarSpeedTimer[GetPlayerVehicleID(playerid)]=SetTimer("CarSpeed", 1000, 1);
}
else if (RELEASED(KEY_SPRINT))
{
KillTimer(CarSpeedTimer[GetPlayerVehicleID(playerid)]);
dis = 0.0;
//SendClientMessage(playerid, COLOR_RED, "Вы ее отпустили");
}
return true;