26.03.2018, 19:50
(
Последний раз редактировалось oSAINTo; 26.03.2018 в 23:35.
)
I'm trying to create a vehicle park/retrieve system. Basically, I am trying to accomplish these few things:
Here's the /vget command:
Here's the /park command:
I also believe that these stocks/functions could be worth noting:
Here's the video showcasing my problem, just incase anyone wants a visual(just click the thumbnail):
![](https://i.imgur.com/iENEEwi.png)
I'm just genuinely lost, I've tried multiple different ways of retrieving the proper variables of the current vehicle that way it'd update the current vehicle instead of being stuck on the old one. I'm out of ideas.
- The player can have only one of their vehicles spawned at a time.
- When you /park the vehicle, it'll update it's position and such in the database and then despawn it.
- The player can only spawn a vehicle that they own(it's saved in the database)
- They spawn the vehicle based on it's ID in the database.
Here's the /vget command:
PHP код:
CMD:vget(playerid, params[])
{
new carid;
if (sscanf(params, "d", carid))
return SendSyntaxMessage(playerid, "/vget [vehicle id]");
if ((carid != -1))
{
for (new i = 0; i < MAX_DYNAMIC_CARS; i ++)
{
if(CarData[i][carID] == carid && CarData[i][carOwner] == PlayerData[playerid][pID] && CarData[i][carExists] == 1)
{
Car_Spawn(i);
currentCarID[playerid] = carid;
SendServerMessage(playerid, "You have successfully spawned your %s.", ReturnVehicleModelName(CarData[i][carModel]));
break;
}
}
}
return 1;
}
PHP код:
CMD:park(playerid, params[])
{
new
carid = GetPlayerVehicleID(playerid);
if (!carid)
return SendErrorMessage(playerid, "You must be inside your vehicle.");
if (IsVehicleImpounded(carid))
return SendErrorMessage(playerid, "This vehicle is impounded and you can't use it.");
if ((carid = Car_GetID(carid)) != -1 && Car_IsOwner(playerid, carid))
{
if (GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
return SendErrorMessage(playerid, "You must be the driver!");
static
g_arrSeatData[10] = {INVALID_PLAYER_ID, ...},
g_arrDamage[4],
Float:health,
seatid;
for (new i = 0; i < 14; i ++) {
CarData[carid][carMods][i] = GetVehicleComponentInSlot(CarData[carid][carVehicle], i);
}
GetVehicleDamageStatus(CarData[carid][carVehicle], g_arrDamage[0], g_arrDamage[1], g_arrDamage[2], g_arrDamage[3]);
GetVehicleHealth(CarData[carid][carVehicle], health);
foreach (new i : Player) if (IsPlayerInVehicle(i, CarData[carid][carVehicle])) {
seatid = GetPlayerVehicleSeat(i);
g_arrSeatData[seatid] = i;
}
GetVehiclePos(CarData[carid][carVehicle], CarData[carid][carPos][0], CarData[carid][carPos][1], CarData[carid][carPos][2]);
GetVehicleZAngle(CarData[carid][carVehicle], CarData[carid][carPos][3]);
for (new i = 0; i < MAX_DYNAMIC_CARS; i ++)
{
if(CarData[i][carID] == currentCarID[playerid] && CarData[i][carOwner] == PlayerData[playerid][pID] && CarData[i][carExists] == 1)
{
Car_Spawn(i);
Car_Save(i);
DestroyVehicle(CarData[i][carVehicle]);
currentCarID[playerid] = 0;
SendServerMessage(playerid, "You have successfully parked your %s.", ReturnVehicleModelName(CarData[i][carModel]));
break;
}
}
}
else SendErrorMessage(playerid, "You are not inside anything you can park.");
return 1;
}
PHP код:
stock Car_Spawn(carid)
{
if (carid != -1 && CarData[carid][carExists])
{
if (IsValidVehicle(CarData[carid][carVehicle]))
DestroyVehicle(CarData[carid][carVehicle]);
if (CarData[carid][carColor1] == -1)
CarData[carid][carColor1] = random(127);
if (CarData[carid][carColor2] == -1)
CarData[carid][carColor2] = random(127);
CarData[carid][carVehicle] = CreateVehicle(CarData[carid][carModel], CarData[carid][carPos][0], CarData[carid][carPos][1], CarData[carid][carPos][2], CarData[carid][carPos][3], CarData[carid][carColor1], CarData[carid][carColor2], (CarData[carid][carOwner] != 0) ? (-1) : (1200000));
if (CarData[carid][carVehicle] != INVALID_VEHICLE_ID)
{
if (CarData[carid][carPaintjob] != -1)
{
ChangeVehiclePaintjob(CarData[carid][carVehicle], CarData[carid][carPaintjob]);
}
if (CarData[carid][carLocked])
{
new
engine, lights, alarm, doors, bonnet, boot, objective;
GetVehicleParamsEx(CarData[carid][carVehicle], engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(CarData[carid][carVehicle], engine, lights, alarm, 1, bonnet, boot, objective);
}
for (new i = 0; i < 14; i ++)
{
if (CarData[carid][carMods][i]) AddVehicleComponent(CarData[carid][carVehicle], CarData[carid][carMods][i]);
}
ResetVehicle(CarData[carid][carVehicle]);
return 1;
}
}
return 0;
}
PHP код:
Car_Save(carid)
{
static
query[900];
if (CarData[carid][carVehicle] != INVALID_VEHICLE_ID)
{
for (new i = 0; i < 14; i ++) {
CarData[carid][carMods][i] = GetVehicleComponentInSlot(CarData[carid][carVehicle], i);
}
}
format(query, sizeof(query), "UPDATE `cars` SET `carModel` = '%d', `carOwner` = '%d', `carPosX` = '%.4f', `carPosY` = '%.4f', `carPosZ` = '%.4f', `carPosR` = '%.4f', `carColor1` = '%d', `carColor2` = '%d', `carPaintjob` = '%d', `carLocked` = '%d'",
CarData[carid][carModel],
CarData[carid][carOwner],
CarData[carid][carPos][0],
CarData[carid][carPos][1],
CarData[carid][carPos][2],
CarData[carid][carPos][3],
CarData[carid][carColor1],
CarData[carid][carColor2],
CarData[carid][carPaintjob],
CarData[carid][carLocked]
);
format(query, sizeof(query), "%s, `carMod1` = '%d', `carMod2` = '%d', `carMod3` = '%d', `carMod4` = '%d', `carMod5` = '%d', `carMod6` = '%d', `carMod7` = '%d', `carMod8` = '%d', `carMod9` = '%d', `carMod10` = '%d', `carMod11` = '%d', `carMod12` = '%d', `carMod13` = '%d', `carMod14` = '%d'",
query,
CarData[carid][carMods][0],
CarData[carid][carMods][1],
CarData[carid][carMods][2],
CarData[carid][carMods][3],
CarData[carid][carMods][4],
CarData[carid][carMods][5],
CarData[carid][carMods][6],
CarData[carid][carMods][7],
CarData[carid][carMods][8],
CarData[carid][carMods][9],
CarData[carid][carMods][10],
CarData[carid][carMods][11],
CarData[carid][carMods][12],
CarData[carid][carMods][13]
);
format(query, sizeof(query), "%s, `carImpounded` = '%d', `carImpoundPrice` = '%d', `carFaction` = '%d', `carWeapon1` = '%d', `carWeapon2` = '%d', `carWeapon3` = '%d', `carWeapon4` = '%d', `carWeapon5` = '%d', `carAmmo1` = '%d', `carAmmo2` = '%d', `carAmmo3` = '%d', `carAmmo4` = '%d', `carAmmo5` = '%d' WHERE `carID` = '%d'",
query,
CarData[carid][carImpounded],
CarData[carid][carImpoundPrice],
CarData[carid][carFaction],
CarData[carid][carWeapons][0],
CarData[carid][carWeapons][1],
CarData[carid][carWeapons][2],
CarData[carid][carWeapons][3],
CarData[carid][carWeapons][4],
CarData[carid][carAmmo][0],
CarData[carid][carAmmo][1],
CarData[carid][carAmmo][2],
CarData[carid][carAmmo][3],
CarData[carid][carAmmo][4],
CarData[carid][carID]
);
return mysql_tquery(g_iHandle, query);
}
PHP код:
stock ResetVehicle(vehicleid)
{
if (1 <= vehicleid <= MAX_VEHICLES)
{
if (CoreVehicles[vehicleid][vehSirenOn] && IsValidDynamicObject(CoreVehicles[vehicleid][vehSirenObject]))
DestroyDynamicObject(CoreVehicles[vehicleid][vehSirenObject]);
CoreVehicles[vehicleid][vehFuel] = 100;
CoreVehicles[vehicleid][vehWindowsDown] = false;
CoreVehicles[vehicleid][vehTemporary] = 0;
CoreVehicles[vehicleid][vehLoads] = 0;
CoreVehicles[vehicleid][vehLoadType] = 0;
CoreVehicles[vehicleid][vehCrate] = INVALID_OBJECT_ID;
CoreVehicles[vehicleid][vehTrash] = 0;
CoreVehicles[vehicleid][vehRepairing] = 0;
CoreVehicles[vehicleid][vehSirenOn] = 0;
CoreVehicles[vehicleid][vehRadio] = 0;
}
return 1;
}
![](https://i.imgur.com/iENEEwi.png)
I'm just genuinely lost, I've tried multiple different ways of retrieving the proper variables of the current vehicle that way it'd update the current vehicle instead of being stuck on the old one. I'm out of ideas.