SA-MP Forums Archive
Get nearest vehicle while in vehicle - 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: Get nearest vehicle while in vehicle (/showthread.php?tid=633767)



Get nearest vehicle while in vehicle - Antenastyle - 06.05.2017

How can I get the closest vehicle while I'm in any vehicle?

Currently, I have this function, but it only works while on foot.

Код:
stock GetClosestVehicle(playerid, Float:range)
{
	new Float: x, Float: y, Float: z;
	new Float: dist, closeveh;
	for(new i = 1; i < MAX_VEHICLES; i++)
	{
		if(GetVehiclePos(i, x, y, z))
		{
			dist = GetPlayerDistanceFromPoint(playerid, x, y, z);
			if(dist < range)
			{
				//closedist = dist;
				closeveh = i;
			}
		}
	}
	return closeveh;
}



Re: Get nearest vehicle while in vehicle - Skimmer - 06.05.2017

I don't understand why you're assigning a vehicle id into a float variable.

PHP код:
stock GetClosestVehicle(playeridFloat:range)
{
    new 
FloatxFloatyFloatz;
    new 
Floatclosedist range;
    new 
closeveh;
    for(new 
1MAX_VEHICLESi++)
    {
        if(
GetVehiclePos(ixyz))
        {
            
dist GetPlayerDistanceFromPoint(playeridxyz);
            if(
dist closedist)
            {
                
closedist dist;
                
closeveh i;
            }
        }
    }
    return 
closeveh;

If you want to not count the vehicle you are currently in. Then use this.

PHP код:
stock GetClosestVehicle(playeridFloat:range)
{
    new 
FloatxFloatyFloatz;
    new 
Floatclosedist range;
    new 
closeveh;
    for(new 
1MAX_VEHICLESi++)
    {
        if(
GetVehiclePos(ixyz))
        {
            if (
IsPlayerInVehicle(playeridi)) continue;
            
dist GetPlayerDistanceFromPoint(playeridxyz);
            if(
dist closedist)
            {
                
closedist dist;
                
closeveh i;
            }
        }
    }
    return 
closeveh;




Re: Get nearest vehicle while in vehicle - Toroi - 06.05.2017

Quote:
Originally Posted by Skimmer
Посмотреть сообщение
I don't understand why you're assigning a vehicle id into a float variable.
Tags are per-definition only, which are separated by a comma.

As an example
PHP код:
new FloatxFloatyFloatz
You have to define the tag every time after the comma.

Here, closeveh is an integer value, not a float value.
PHP код:
new Floatdistcloseveh



Re: Get nearest vehicle while in vehicle - ShihabSoft - 07.05.2017

This could be optimized like this, you don't have to call IsPlayerInVehicle each time in the loop.

PHP код:
stock GetClosestVehicle(playeridFloat:range

    new 
FloatxFloatyFloatz
    new 
Floatclosedist range
    new 
closeveh
    new 
playerveh;
    
playerveh GetPlayerVehicleID(playerid);
    for(new 
1MAX_VEHICLESi++) 
    {
         if(
playerveh == i) continue; 
        if(
GetVehiclePos(ixyz)) 
        {  
            
dist GetPlayerDistanceFromPoint(playeridxyz); 
            if(
dist closedist
            { 
                
closedist dist
                
closeveh i
            } 
        } 
    } 
    return 
closeveh




Re: Get nearest vehicle while in vehicle - Logic_ - 07.05.2017

Optimized this code as much it could be, made checks to avoid invalid vehicle in the loop and so on.

PHP код:
stock GetClosestVehicle(playeridFloatrange)
{
    new 
FloatPosXFloatPosYFloatPosZFloatCloseDist rangeFloatDistFetchVehPlayerVeh;
    
PlayerVeh GetPlayerVehicleID(playerid);
    for(new 
GetVehiclePoolSize(); != 0i--)
    {
        if(!
IsValidVehicle(i)) continue;
        if(
== PlayerVeh) continue;
        
GetVehiclePos(iPosXPosYPosZ);
        
Dist GetPlayerDistanceFromPoint(playeridPosXPosYPosZ);
        
        if(
Dis <= CloseDist)
        {
            
FetchVeh i;
            
CloseDist Dist;
        }
    }
    return 
FetchVeh;




Re: Get nearest vehicle while in vehicle - Antenastyle - 07.05.2017

Thanks everybody for the help! It's so useful.