Vehicle Spawning
#1

So after quite a while of me working on this system and asking quite a bit of questions.
I have reached the vehicles command part, now I had the basics of it working, now when I added like vehicle statuses, like the doors, the engine, etc.
It kind of-.. Doesn't work on the first try, I mean if you buy a vehicle and then park it, it'll save everything but when you /v_get it and the server hasn't restarted or anything it'll spawn the vehicle at 0, 0, 0, xyz co-ordinates.

I really don't know why this occurs, and btw I have everything loaded, I checked.
Code:

pawn Код:
YCMD:v_get(playerid, params[], help) {
    if(PR[playerid][VehiclesOwned] == 0) return SendClientMessage(playerid, 0xFF0000FF, "[ ! ] You don't own any vehicle!");
    else if(PR[playerid][PrivateVehSpawned] == true) return SendClientMessage(playerid, 0xFF0000FF, "[ ! ] Your vehicle is already spawned!");
    else {
       
        PR[playerid][PrivateVeh] = CreateVehicle(PR[playerid][Vehicle], PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ], PR[playerid][Angle], PR[playerid][Color1], PR[playerid][Color2], -1);   
        PR[playerid][PrivateVehSpawned] = true;

        SetVehicleNumberPlate(PR[playerid][PrivateVeh], PR[playerid][Registration]);
        UpdateVehicleDamageStatus(PR[playerid][PrivateVeh], PR[playerid][PanelStatus], PR[playerid][DoorStatus], PR[playerid][LightStatus], PR[playerid][TireStatus]);
        SetVehicleHealth(PR[playerid][PrivateVeh], PR[playerid][EngineStatus]);
       
        SendClientMessage(playerid, 0xF0F8FFAA, "[ ! ] Successfully spawned the vehicle. Checkpoint is set to its location.");
        SendClientMessage(playerid, 0xFF0000FF, "[ ! ] Note: If checkpoint is unreach-able please use /rcp to remove it.");
        SetPlayerCheckpoint(playerid, PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ], 10);
    }
    return 1;
}

YCMD:v_park(playerid, params[], help) {
   
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "[ ! ] You are not in any vehicle!");
    else if(PR[playerid][VehiclesOwned] == 0) return SendClientMessage(playerid, 0xFF0000FF, "[ ! ] You don't own any vehicle!");
    else if(PR[playerid][PrivateVehSpawned] == false) return SendClientMessage(playerid, 0xFF0000FF, "[ ! ] Your vehicle isn't spawned!");
    else {
        if(IsPlayerInVehicle(playerid, PR[playerid][PrivateVeh])) {
            new query[356];
           
            GetVehiclePos(PR[playerid][PrivateVeh], PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ]);
            GetVehicleZAngle(PR[playerid][PrivateVeh], PR[playerid][Angle]);
            GetVehicleHealth(PR[playerid][PrivateVeh], PR[playerid][EngineStatus]);
            GetVehicleDamageStatus(PR[playerid][PrivateVeh], PR[playerid][PanelStatus], PR[playerid][DoorStatus], PR[playerid][LightStatus], PR[playerid][TireStatus]);
           
            mysql_format(dbHandle, query, sizeof(query), "UPDATE `playerrelated` SET `parkX` = %f, `parkY` = %f, `parkZ` = %f, `Angle` = %f, `EngineStatus` = %f, `PanelStatus` = %d, `DoorStatus` = %d, `LightStatus` = %d, `TireStatus` = %d WHERE `Name` = '%s'", PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ], PR[playerid][Angle], PR[playerid][EngineStatus], PR[playerid][PanelStatus], PR[playerid][DoorStatus], PR[playerid][LightStatus], PR[playerid][TireStatus], GetName(playerid));
            mysql_tquery(dbHandle, query);
           
            DestroyVehicle(PR[playerid][PrivateVeh]);
           
            PR[playerid][PrivateVehSpawned] = false;
            SendClientMessage(playerid, 0xF0F8FFAA, "[ ! ] Successfully parked(Despawned) the vehicle.");
        } else {
            SendClientMessage(playerid, 0xFF0000FF, "[ ! ] You are not driving your own vehicle. Therefore you can not park it!");
        }
    }
    return 1;
}
Here's my 'purchaseVehicle' stock which is used to purchase a vehicle for the player.
pawn Код:
stock purchaseVEHICLE(playerid) {
    //Creating Float positions and query size.
    new query[356], query2[256];
    GetPlayerPos(playerid, PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ]);//Getting the player's position

    if(PR[playerid][VehiclesOwned] >= 1) return SendClientMessage(playerid, 0xFF0000FF, "[ ! ] You already reach the maximum amount of vehicles you can have!"); //If the player has 1 vehicle then it'd stop him from buying another.
    else {
       
        GetPlayerFacingAngle(playerid, PR[playerid][Angle]); //Gets the angle of which the player is looking at.
        PR[playerid][PrivateVeh] = CreateVehicle(PR[playerid][VehicleChosen], PR[playerid][parkX]+2, PR[playerid][parkY]+2, PR[playerid][parkZ]+2, PR[playerid][Angle], PR[playerid][ColorSelected1], PR[playerid][ColorSelected2], -1);
        GetVehicleHealth(PR[playerid][PrivateVeh], PR[playerid][EngineStatus]);
        GetVehicleDamageStatus(PR[playerid][PrivateVeh], PR[playerid][PanelStatus], PR[playerid][DoorStatus], PR[playerid][LightStatus], PR[playerid][TireStatus]);

        mysql_format(dbHandle, query, sizeof(query), "UPDATE `playerrelated` SET `Vehicle` = %d, `Registration` = %d, `Color1` = %d, `Color2` = %d, `CurrentVehicles` = %d, `parkX` = %f, `parkY` = %f, `parkZ` = %f, `Angle` = %f",PR[playerid][VehicleChosen], PR[playerid][Registration], PR[playerid][ColorSelected1], PR[playerid][ColorSelected2], PR[playerid][VehiclesOwned] + 1, PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ], PR[playerid][Angle], GetName(playerid));
        format(query2, sizeof(query2), ", `EngineStatus` = %d, `PanelStatus` = %d, `DoorStatus` = %d, `LightStatus` = %d, `TireStatus` = %d WHERE Name = '%s'", PR[playerid][EngineStatus], PR[playerid][PanelStatus], PR[playerid][DoorStatus], PR[playerid][LightStatus], PR[playerid][TireStatus], GetName(playerid));
        strcat(query, query2, sizeof(query)); //Concatenates two strings together to achieve one execution, I've done this to avoid a 'long msg after subscripts' error which occured to me once.
        mysql_tquery(dbHandle, query);//Formating and starting executing the query.


        GivePlayerMoney(playerid, -PR[playerid][VehiclePrice]); // Reduces player's money.
        SendClientMessage(playerid, 0xF0F8FFAA, "[ ! ] Successfully purchased a vehicle!"); // Sending a message notifying of the purchase.
        SendClientMessage(playerid, 0xFF0000FF, "[ ! ] NOTE: IT IS SUGGESTED THAT YOU IMMEDIATLY SET A PARKING SPOT FOR YOUR VEHICLE USING /V_PARK!"); //A helpful notification.
       
        PR[playerid][VehiclesOwned] = 1;
        PR[playerid][PrivateVehSpawned] = true;
    }
    return 1;
}
I have also checked the logs for mysql and the queries execute correctly without any errors.
Reply
#2

The only thing I can find is that you're saving the Registration (your numberplate) as an integer, but the numberplate should be a string.

The rest seems ok at first glance.
Try to put printf statements throughout the code to see if your variables hold the correct data.
Like printing the player's position after GetPlayerPos.
And also before you spawn/create the vehicle.
Reply
#3

Will do and respond later today with an answer.
Reply
#4

PHP код:
mysql_format(dbHandlequerysizeof(query), "UPDATE `playerrelated` SET `Vehicle` = %d, `Registration` = %d, `Color1` = %d, `Color2` = %d, `CurrentVehicles` = %d, `parkX` = %f, `parkY` = %f, `parkZ` = %f, `Angle` = %f",PR[playerid][VehicleChosen], PR[playerid][Registration], PR[playerid][ColorSelected1], PR[playerid][ColorSelected2], PR[playerid][VehiclesOwned] + 1PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ], PR[playerid][Angle]/*, GetName(playerid)*/);
format(query2sizeof(query2), ", `EngineStatus` = %d, `PanelStatus` = %d, `DoorStatus` = %d, `LightStatus` = %d, `TireStatus` = %d WHERE Name = '%s'"PR[playerid][EngineStatus], PR[playerid][PanelStatus], PR[playerid][DoorStatus], PR[playerid][LightStatus], PR[playerid][TireStatus], GetName(playerid));
strcat(queryquery2sizeof(query)); //Concatenates two strings together to achieve one execution, I've done this to avoid a 'long msg after subscripts' error which occured to me once.
mysql_tquery(dbHandlequery);//Formating and starting executing the query. 
As - PowerPC603 said, you are storing Registration as %d, I dunno if you mean Registered/UnRegistered by that. If you meant NumberPlate, it should be String @https://sampwiki.blast.hk/wiki/SetVehicleNumberPlate
Reply
#5

I fixed what you guys said, even commented some stuff to just let the vehicle spawn, printed where the vehicle spawns etc.

When I /v_get it says that it spawns at the correct spot but when I go there it doesn't, it spawns at 0,0,0.

Here's the new code:

pawn Код:
stock purchaseVEHICLE(playerid) {
    //Creating Float positions and query size.
    new query[356], query2[256];
    GetPlayerPos(playerid, PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ]);//Getting the player's position

    if(PR[playerid][VehiclesOwned] >= 1) return SendClientMessage(playerid, 0xFF0000FF, "[ ! ] You already reach the maximum amount of vehicles you can have!"); //If the player has 1 vehicle then it'd stop him from buying another.
    else {
       
        GetPlayerFacingAngle(playerid, PR[playerid][Angle]); //Gets the angle of which the player is looking at.
        PR[playerid][PrivateVeh] = CreateVehicle(PR[playerid][VehicleChosen], PR[playerid][parkX]+2, PR[playerid][parkY]+2, PR[playerid][parkZ]+2, PR[playerid][Angle], PR[playerid][ColorSelected1], PR[playerid][ColorSelected2], -1);
        GetVehicleHealth(PR[playerid][PrivateVeh], PR[playerid][EngineStatus]);
        GetVehicleDamageStatus(PR[playerid][PrivateVeh], PR[playerid][PanelStatus], PR[playerid][DoorStatus], PR[playerid][LightStatus], PR[playerid][TireStatus]);

        mysql_format(dbHandle, query, sizeof(query), "UPDATE `playerrelated` SET `Vehicle` = %d, `Registration` = '%s', `Color1` = %d, `Color2` = %d, `CurrentVehicles` = %d, `parkX` = %f, `parkY` = %f, `parkZ` = %f, `Angle` = %f",PR[playerid][VehicleChosen], PR[playerid][Registration], PR[playerid][ColorSelected1], PR[playerid][ColorSelected2], PR[playerid][VehiclesOwned] + 1, PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ], PR[playerid][Angle], GetName(playerid));
        format(query2, sizeof(query2), ", `EngineStatus` = %d, `PanelStatus` = %d, `DoorStatus` = %d, `LightStatus` = %d, `TireStatus` = %d WHERE Name = '%s'", PR[playerid][EngineStatus]+1, PR[playerid][PanelStatus]+1, PR[playerid][DoorStatus]+1, PR[playerid][LightStatus]+1, PR[playerid][TireStatus], GetName(playerid));
        strcat(query, query2, sizeof(query)); //Concatenates two strings together to achieve one execution, I've done this to avoid a 'long msg after subscripts' error which occured to me once.
        mysql_tquery(dbHandle, query);//Formating and starting executing the query.


        GivePlayerMoney(playerid, -PR[playerid][VehiclePrice]); // Reduces player's money.
        SendClientMessage(playerid, 0xF0F8FFAA, "[ ! ] Successfully purchased a vehicle!"); // Sending a message notifying of the purchase.
        SendClientMessage(playerid, 0xFF0000FF, "[ ! ] NOTE: IT IS SUGGESTED THAT YOU IMMEDIATLY SET A PARKING SPOT FOR YOUR VEHICLE USING /V_PARK!"); //A helpful notification.
       
        PR[playerid][VehiclesOwned] = 1;
        PR[playerid][PrivateVehSpawned] = true;


        printf("%f %f %f", PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ]);
    }
    return 1;
}



/*forward vehicleBugged(playerid);
public vehicleBugged(playerid) {
    if(!IsVehicleInRangeOfPoint(PR[playerid][PrivateVeh], 20.0, PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ])) {
        SetVehiclePos(PR[playerid][PrivateVeh], PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ]);
    }
    return 1;
}
*/

YCMD:v_get(playerid, params[], help) {
    if(PR[playerid][VehiclesOwned] == 0) return SendClientMessage(playerid, 0xFF0000FF, "[ ! ] You don't own any vehicle!");
    else if(PR[playerid][PrivateVehSpawned] == true) return SendClientMessage(playerid, 0xFF0000FF, "[ ! ] Your vehicle is already spawned!");
    else {

        PR[playerid][PrivateVeh] = CreateVehicle(PR[playerid][Vehicle], PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ], PR[playerid][Angle], PR[playerid][Color1], PR[playerid][Color2], -1);   
        PR[playerid][PrivateVehSpawned] = true;

        //SetVehicleNumberPlate(PR[playerid][PrivateVeh], PR[playerid][Registration]);
        //UpdateVehicleDamageStatus(PR[playerid][PrivateVeh], PR[playerid][PanelStatus], PR[playerid][DoorStatus], PR[playerid][LightStatus], PR[playerid][TireStatus]);
        //SetVehicleHealth(PR[playerid][PrivateVeh], PR[playerid][EngineStatus]);
       
        SendClientMessage(playerid, 0xF0F8FFAA, "[ ! ] Successfully spawned the vehicle. Checkpoint is set to its location.");
        SendClientMessage(playerid, 0xFF0000FF, "[ ! ] Note: If checkpoint is unreach-able please use /rcp to remove it.");
        //SetPlayerCheckpoint(playerid, PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ], 10);
        //SetTimerEx("vehicleBugged", false, 2000, "d", playerid);

        printf("%f %f %f", PR[playerid][parkX], PR[playerid][parkY], PR[playerid][parkZ]);
    }
    return 1;
}
Reply
#6

I just went to 0,0,0, coordinates and discovered that for some reason the vehicle doesn't even spawn.
I am not sure WTF is this, can someone PLEASE HELP?
Reply
#7

Try using CreateDynamicVehicle to create the vehicle. Might be that your server is exceeding the max limitations for the vehicle, and I guess the 'no spawn' thing is the main thing as far as I see your display the 'current' co-ordinates of your vehicle and as the vehicle is not spawned, the coordinates will be be invalid/random/000.
Reply
#8

Quote:
Originally Posted by LivingLikeYouDo
Посмотреть сообщение
Try using CreateDynamicVehicle to create the vehicle. Might be that your server is exceeding the max limitations for the vehicle, and I guess the 'no spawn' thing is the main thing as far as I see your display the 'current' co-ordinates of your vehicle and as the vehicle is not spawned, the coordinates will be be invalid/random/000.
There's no such thing as CreateDynamicVehicle, I ******d that.
And I don't quite understand what you mean by exceeding the max limitations for the vehicle, you mean like the vehicle's destroyable 'objects' (doors, panels, lights, tires) are set to a too low value therefore it fucks the car up?
Reply
#9

Mhm-.. Someone can try to help me please, I am stuck here.
Reply
#10

Guys I think I figured out the solution, maybe the problem is that the panels, doors, lights, tires are set to a too low value therefore the bugs the vehicle, I am not sure maybe that's it.
And if that may cause the issue could anyone tell me what's the full value meaning what's the highest value for each one?
Like for the engine I know that it's 1000 but what's for the others?

PLEASE RESPOND WITH HELP!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)