put player in closest empty vehicle
#1

Title says everything.

I tried everything I could imagine and haven't sucess.

Thanks in advance.
Reply
#2

Modify this it should work:

Код:
public GetClosestPlayer(p1)
{
	new
		x,
		Float:dis,
		Float:dis2,
		player;

	player = -1;
	dis = 99999.99;

	for (x=0;x<MAX_PLAYERS;x++)
		if(IsPlayerConnected(x))
			if(x != p1)
			{
				dis2 = GetDistanceBetweenPlayers(x,p1);
				if(dis2 < dis && dis2 != -1.00)
				{
					dis = dis2;
					player = x;
				}
			}
			
	return player;
}
public Float:GetDistanceBetweenPlayers(p1, p2)
{
	new
		Float:x1,
		Float:y1,
		Float:z1,
		Float:x2,
		Float:y2,
		Float:z2;

	if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2))
		return -1.00;
		
	GetPlayerPos(p1,x1,y1,z1);
	GetPlayerPos(p2,x2,y2,z2);
	
	return floatsqroot(
		floatpower(floatabs(floatsub(x2,x1)), 2)
		+ floatpower(floatabs(floatsub(y2,y1)), 2)
		+ floatpower(floatabs(floatsub(z2,z1)), 2));
}
- Tooken from [FS]Ironman
Reply
#3

It's 06:13am and i haven't sleep. I swear to god that i can't do anything better right know than this little crappy shit bad scripted:

pawn Код:
for(new v = 0; v < MAX_VEHICLES; v++)
{
    #define INVALID_ID (0xFFFF) // Windows calculator lol // 65535
    if(v != INVALID_ID)
    {
        for(new i = 0; i < MAX_PLAYERS; i++)
        {
            if(!IsPlayerInVehicle(i, v))
            {
                PutPlayerInVehicle(playerid, v, 0);
            }
        }
    }
}
And don't worry about the closest vehicle. All the server vehicles are in one spot.

Edit: Finally solved. (I think, LOL!)

pawn Код:
stock Float:GetDistanceBetwinPoint(p1, Float:x2, Float:y2, Float:z2)
{
    new Float:XX, Float:YY, Float:ZZ;
    GetPlayerPos(p1, XX, YY, ZZ);
    return floatsqroot(floatpower(floatabs(floatsub(x2,XX)),2)+floatpower(floatabs(floatsub(y2,YY)),2)+floatpower(floatabs(floatsub(z2,ZZ)),2));
}

stock GetClosestVehicle(playerid)
{
    new car, Float:ang;
    car = -1;
    ang = 9999.9999;

    for(new i = 0; i < MAX_PLAYERS; i++)
    for(new v = 0; v < MAX_VEHICLES; v++)
    {
        if(!IsPlayerInVehicle(i, v))
        {
            new Float:X, Float:Y, Float:Z;
            GetVehiclePos(v, X, Y, Z);

            if(ang > GetDistanceBetwinPoint(playerid, X, Y, Z))
            {
                ang = GetDistanceBetwinPoint(playerid, X, Y, Z);
                car = v;
            }
        }
    }
    return car;
}
Thanks Coole.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)