Speed Limiter Bugg [+REP]
#1

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.
Reply
#2

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
Reply
#3

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
Reply
#4

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
Reply
#5

Thanks, now it works. I Give you rep
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)