SA-MP Forums Archive
Speed Limiter Bugg [+REP] - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Speed Limiter Bugg [+REP] (/showthread.php?tid=376023)



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