Speed Limiter Bugg [+REP] -
Larry123 - 08.09.2012
Hello, i tried to make a speed limiter, here it is:
UNDER OnplayerUpdate:
Код:
new Float:fSpeed, Float:fPos[3];
GetVehicleVelocity(GetPlayerVehicleID(playerid), fPos[0], fPos[1], fPos[2]);
fSpeed = floatmul(floatsqroot(floatadd(floatadd(floatpower(fPos[0], 2), floatpower(fPos[1], 2)), floatpower(fPos[2], 2))), 150.0);
if(LimiterReload[playerid] == 1)
{
if(fSpeed == VehInfo[GetPlayerVehicleID(playerid)][SpeedLimiter])
{
LimitedSpeed[playerid][0] = fPos[0];
LimitedSpeed[playerid][1] = fPos[1];
LimitedSpeed[playerid][2] = fPos[2];
LimiterReload[playerid] = 0;
return 1;
}
}
if(fSpeed > VehInfo[GetPlayerVehicleID(playerid)][SpeedLimiter])
{
SetVehicleVelocity(GetPlayerVehicleID(playerid), LimitedSpeed[playerid][0], LimitedSpeed[playerid][1], LimitedSpeed[playerid][2]);
return 1;
}
Problem is, that everytime when i get my speed to "SpeedLimiter" value, then my speed go to 0, it doesn`t hold my speed.
So i explain one more time because of my english.
When script has to hold my speed, it go to 0, not "SpeedLimiter" value.
AW: Speed Limiter Bugg [+REP] -
Nero_3D - 08.09.2012
maybe the if statment never matches ? the chance is very low... juse use else
pawn Код:
//
new
vehicleid = GetPlayerVehicleidID(playerid)
;
if(vehicleid) {
new
Float: fPosX,
Float: fPosY,
Float: fPosZ
;
GetVehicleVelocity(vehicleid, fPosX, fPosY, fPosZ);
if((150 * floatsqroot((fPosX * fPosX) + (fPosY * fPosY) + (fPosZ * fPosZ))) > VehInfo[vehicleid][SpeedLimiter]) {
if(LimiterReload[playerid]) {
LimitedSpeed[playerid][0] = fPosX;
LimitedSpeed[playerid][1] = fPosY;
LimitedSpeed[playerid][2] = fPosZ;
LimiterReload[playerid] = 0;
} else {
SetVehicleVelocity(vehicleid, LimitedSpeed[playerid][0], LimitedSpeed[playerid][1], LimitedSpeed[playerid][2]);
}
} else {
LimiterReload[playerid] = 1;
}
}
Also I am not sure how good this will work since it will force the player in only one direction if he goes over the limit
Re: Speed Limiter Bugg [+REP] -
Larry123 - 08.09.2012
Now the speed doesn`t go to 0, but now is new problem.
When speedlimiter is ON, then it`s hard to turn. My vehicle is drifting, when i drive to jump, my vehicle is flying.
So...
Maybe you have your own idea for working speed limiter system, then we donґt have to try to fix this
AW: Speed Limiter Bugg [+REP] -
Nero_3D - 08.09.2012
I used some maths
pawn Код:
//
new
vehicleid = GetPlayerVehicleID(playerid)
;
if(vehicleid) {
new
Float: fDet,
Float: fMul,
Float: fPosX,
Float: fPosY,
Float: fPosZ
;
GetVehicleVelocity(vehicleid, fPosX, fPosY, fPosZ);
fDet = (fPosX * fPosX) + (fPosY * fPosY) + (fPosZ * fPosZ);
fMul = floatpower((VehInfo[vehicleid][SpeedLimiter] / 150.0), 2.0);
if(fMul < fDet) {
fMul /= fDet;
SetVehicleVelocity(vehicleid, (fPosX * fMul), (fPosY * fMul), (fPosZ * fMul));
}
}
It will always set the speed to the limit, you can also put the code in a fast timer (250-500ms) if you want
Re: Speed Limiter Bugg [+REP] -
Larry123 - 09.09.2012
Thanks, now it works. I Give you rep