forward SetVehicleSpeed(vehid,speed);
public SetVehicleSpeed(vehid,speed)
{
new Float:angl,Float:spd[3],Float:curvector,Float:coord[3];
switch(speed)
{
case 35:curvector = 0.589365;
case 40:curvector = 0.631516;
case 45:curvector = 0.67;
case 50:curvector = 0.705142;
}
GetVehicleVelocity(vehid,spd[0],spd[1],spd[2]);
PlanarZAngle(spd[0],spd[1],angl);
new Float:zangle = atan(spd[2]/(spd[0]*spd[0]+spd[1]*spd[1]));
new Float:newRad = curvector*floatcos(zangle,degrees);
coord[0] = newRad*(-1)*floatsin(angl,degrees);
coord[1] = newRad*floatcos(angl,degrees);
SetVehicleVelocity(vehid, coord[0],coord[1],spd[2]);
return 1;
}
|
Никак, пинг + постоянное задание ускорения + нет учёта нажатие клавиши + нет учёта касания колёс поверхности (парения в воздухе).
Функция подходит только для разового(редко) задания скорости но никак для постояной(частого). |
|
Дак я и спрашиваю как её сделать для постоянного использования ?
|
#define FILTERSCRIPT
#include <a_samp>
public OnPlayerUpdate(playerid)
{
if(IsPlayerInAnyVehicle(playerid))
{
new veh = GetPlayerVehicleID(playerid);
new Float:vz[3];
GetVehicleVelocity(veh,vz[0],vz[1],vz[2]);
new Float:rad = floatsqroot(vz[0]*vz[0]+vz[1]*vz[1]);
new Float:speed = rad*100;
if(speed > 80)
{
new Float:org_vect = 0.787197;
new Float:xyangle;
PlanarZAngle(vz[0],vz[1],xyangle);
new Float:zangle = atan2(vz[2],rad);
new Float:newRad = org_vect*floatcos(zangle,degrees);
SetVehicleVelocity(veh,newRad*(-1)*floatsin(xyangle,degrees),newRad*floatcos(xyangle,degrees),floatsin(zangle,degrees)*org_vect);
SendClientMessage(playerid,-1,"> Speed was decreased.");
}
}
return 1;
}
stock PlanarZAngle(Float:x,Float:y,&Float:ang)
{
new Float:angl = atan(floatdiv(y,x));
if(x >= 0.0 && y >= 0.0 || x >= 0.0 && y <= 0.0) ang = angl + 270.0;
else if(x <= 0.0 && y >= 0.0 || x <= 0.0 && y <= 0.0) ang = angl + 90.0;
return 1;
}