"INSERT INTO `server_vehicles` VALUES (%d, ...) ON DUPLICATE KEY UPDATE `x` = %d"
Try to use your own declared vehicle ids and match them with the actual vehicle ids, for example when somebody delete his vehicle mark that id as empty and when somebody creates a vehicle use that slot and mark it as occupied.
|
stock GetFreeVehicleSlot()
{
for(new i; < MAX_VEHICLES; i++)
if(VehicleInformation[i][SlotUsed])
continue;
else
return i;
}
Right, I forgot to mention that I'm also using the same database to store job & faction vehicles, should I use a completely different database for each vehicle type?
|
stock SaveVehicles() {
new query[1024];
for(new i = 1; i != loadedCars; i++) {
if(VehicleInfo[i][vInGarage] == 0) {
GetVehicleHealth(i, VehicleInfo[i][vHealth]);
GetVehicleDamageStatus(i, VehicleInfo[i][vPanels], VehicleInfo[i][vDoors], VehicleInfo[i][vLights], VehicleInfo[i][vTires]);
format(query, sizeof query, "UPDATE `server_vehicles` SET `ID`=%d,`Model`=%d,`X`=%f,`Y`=%f,`Z`=%f,`A`=%f,`Owner`='%s',`ColorOne`=%d,`ColorTwo`=%d,`FactionID`=%d,`JobID`=%d,`Owned`=%d,`Plate`='%s',`Locked`=%d,\
`Health`=%f,`Doors`=%d,`Tires`=%d,`Lights`=%d,`Panels`=%d,`Fuel`=%d,`Mileage`=%d,`GangID`=%d,`InGarage`=%d WHERE `ID` = %d",
i, VehicleInfo[i][vModel], VehicleInfo[i][vX], VehicleInfo[i][vY], VehicleInfo[i][vZ], VehicleInfo[i][vA], VehicleInfo[i][vOwner],
VehicleInfo[i][vColor1], VehicleInfo[i][vColor2], VehicleInfo[i][vFactionID], VehicleInfo[i][vJobID], VehicleInfo[i][vOwned], VehicleInfo[i][vPlate], VehicleInfo[i][vLocked],
VehicleInfo[i][vHealth], VehicleInfo[i][vDoors], VehicleInfo[i][vTires], VehicleInfo[i][vLights], VehicleInfo[i][vPanels], VehicleInfo[i][vFuel], VehicleInfo[i][vMileage], VehicleInfo[i][vGangID], VehicleInfo[i][vInGarage], VehicleInfo[i][vID]);
mysql_tquery(dbHandle, query);
}
}
return 1;
}
CMD:dumpcar(playerid) {
new query[128];
if(!IsPlayerInVehicle(playerid, PlayerInfo[playerid][pCarKey])) return SendClientMessage(playerid, COLOR_GREY, "You need to be inside your vehicle!");
if(PlayerInfo[playerid][pCarKey] <= 0) return SendClientMessage(playerid, COLOR_GREY, "You don't own a car.");
if(IsPlayerInRangeOfPoint(playerid, 5.5, 2183.6150,-1988.7555,13.8917)) {
format(query, sizeof query, "DELETE FROM `server_vehicles` WHERE `ID` = %d", PlayerInfo[playerid][pCarKey]);
mysql_tquery(dbHandle, query);
DestroyVehicle(PlayerInfo[playerid][pCarKey]);
SetPlayerMoney(playerid, 500+random(2500));
VehicleInfo[PlayerInfo[playerid][pCarKey]][vModel] = 0;
VehicleInfo[PlayerInfo[playerid][pCarKey]][vX] = 0;
VehicleInfo[PlayerInfo[playerid][pCarKey]][vY] = 0;
VehicleInfo[PlayerInfo[playerid][pCarKey]][vZ] = 0;
VehicleInfo[PlayerInfo[playerid][pCarKey]][vA] = 0;
VehicleInfo[PlayerInfo[playerid][pCarKey]][vColor1] = 1;
VehicleInfo[PlayerInfo[playerid][pCarKey]][vColor2] = 1;
PlayerInfo[playerid][pCarKey] = 0;
SendClientMessage(playerid, COLOR_WHITE, "You have scrapped your car and have earned some money by doing so.");
loadedCars--;
}
return 1;
}