PutPlayerInVehicle
#1

Sometimes players are not put into cars! And they are free.
Код HTML:
if(!IsVehicleOccupied(DMVCar[0]) || DMVCar[1] || DMVCar[2] || DMVCar[3] || DMVCar[4] || DMVCar[5])
{
    if(!IsPlayerInAnyVehicle(playerid))
    {
        if(IsPlayerInRangeOfPoint(playerid,4.0,1109.2424,-1795.3951,16.5938))
        {
            switch(random(6))
            {
                case 0:
                {
                    if(!IsVehicleOccupied(DMVCar[0]))
                    {
                        PutPlayerInVehicle(playerid, DMVCar[0], 0);
                    }
                }
                case 1:
                {
                    if(!IsVehicleOccupied(DMVCar[1]))
                    {
                        PutPlayerInVehicle(playerid, DMVCar[1], 0);
                    }
                }
                case 2:
                {
                    if(!IsVehicleOccupied(DMVCar[2]))
                    {
                        PutPlayerInVehicle(playerid, DMVCar[2], 0);
                    }
                }
                case 3:
                {
                    if(!IsVehicleOccupied(DMVCar[3]))
                    {
                        PutPlayerInVehicle(playerid, DMVCar[3], 0);
                    }
                }
                case 4:
                {
                    if(!IsVehicleOccupied(DMVCar[4]))
                    {
                        PutPlayerInVehicle(playerid, DMVCar[4], 0);
                    }
                }
                case 5:
                {
                    if(!IsVehicleOccupied(DMVCar[5]))
                    {
                        PutPlayerInVehicle(playerid, DMVCar[5], 0);
                    }
                }
            }
        }
    }
}
Код HTML:
stock IsVehicleOccupied(vehicleid)
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerInVehicle(i,vehicleid))
        {
            return 1;
        }
    }
    return 0;
}
Reply
#2

Let's first restructure your code. You may have noticed that all your cases do the same thing: case 0 puts the player in vehicle 0, case 1 puts the player in vehicle 1, case 2 puts the player in vehicle 2 and so on. See a pattern here? Imagine you had 100 vehicle. What a bother. Let's cut out the middleman. This snippet of 9 lines does the exact same thing, only it is much shorter and much more concise. Less code isn't always better, but in this case it is.

PHP код:
if(!IsPlayerInAnyVehicle(playerid) && IsPlayerInRangeOfPoint(playerid,4.0,1109.2424,-1795.3951,16.5938))
{
    new 
idx random(sizeof(DMVCar));
    
    if(!
IsVehicleOccupied(DMVCar[idx]))
    {
        
PutPlayerInVehicle(playeridDMVCar[idx], 0);
    }

However, that still doesn't solve the problem at hand: if the randomly chosen vehicle is already occupied a new one isn't chosen. So I believe it is best to check each vehicle sequentially and to put the player in the first available vehicle.

PHP код:
if(!IsPlayerInAnyVehicle(playerid) && IsPlayerInRangeOfPoint(playerid,4.0,1109.2424,-1795.3951,16.5938))
{
    new 
bool:isVehicleAvailable false;

    for(new 
isizeof(DMVCar); i++)
    {
        if(!
IsVehicleOccupied(DMVCar[i]))
        {
            
PutPlayerInVehicle(playeridDMVCar[i], 0);
            
isVehicleAvailable true;
            break;
        }
    }
    
    if(!
isVehicleAvailable)
    {
        
// no vehicles available, send message or whatever
    
}

Reply
#3

Thank you, +1.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)