Ändere die for-Schleifen jeweils zu:
for(new i = 0; i < MAX_VEHICLES; i++)
Das hier zu:
public LadeFahrzeug(idx)
{
new str[25];
format(str, sizeof(str), "/Vehicles/%d.car", idx);
if(idx < 0)
{
return 1;
}
if(fexist(str))
{
CarInfo[idx][cX] = dini_Float(str, "cX");
CarInfo[idx][cY] = dini_Float(str, "cY");
CarInfo[idx][cZ] = dini_Float(str, "cZ");
CarInfo[idx][cR] = dini_Float(str, "cR");
CarInfo[idx][cModel] = dini_Int(str, "cModel");
//tuning
CarInfo[idx][tuning_0] = dini_Int(str, "tuning_0");
CarInfo[idx][tuning_1] = dini_Int(str, "tuning_1");
CarInfo[idx][tuning_2] = dini_Int(str, "tuning_2");
CarInfo[idx][tuning_3] = dini_Int(str, "tuning_3");
CarInfo[idx][tuning_4] = dini_Int(str, "tuning_4");
CarInfo[idx][tuning_5] = dini_Int(str, "tuning_5");
CarInfo[idx][tuning_6] = dini_Int(str, "tuning_6");
CarInfo[idx][tuning_7] = dini_Int(str, "tuning_7");
CarInfo[idx][tuning_8] = dini_Int(str, "tuning_8");
CarInfo[idx][tuning_9] = dini_Int(str, "tuning_9");
CarInfo[idx][tuning_10] = dini_Int(str, "tuning_10");
CarInfo[idx][tuning_11] = dini_Int(str, "tuning_11");
CarInfo[idx][tuning_12] = dini_Int(str, "tuning_12");
CarInfo[idx][tuning_13] = dini_Int(str, "tuning_13");
CarInfo[idx][color_1] = dini_Int(str, "color_1");
CarInfo[idx][color_2] = dini_Int(str, "color_2");
CarInfo[idx][paintjob] = dini_Int(str, "paintjob");
}
return 1;
}
Hier müssen wir einen freien Slot (Index) finden, daher die Funktion GetFreeVehSlot:
public sellCarInShop(playerid, carPrice, carName[], model)
{
//Hier wird ein Fahrzeug erstellt und eingetragen wenn es im Shop gekauft wird (also wenn der Shop ein Auto an den Spieler verkauft)
if(GetPlayerMoney(playerid) >= carPrice)
{
if(PlayerInfo[playerid][pCar1] == 0 || PlayerInfo[playerid][pCar2] == 0 || PlayerInfo[playerid][pCar3] == 0 || PlayerInfo[playerid][pCar4] == 0)
{
new vehID = CreateVehicle(model, -1917.0745, 296.8005, 41.0469, 178.7229, 0, 0, 0);
PutPlayerInVehicle(playerid, vehID, 0);
new idx = GetFreeVehSlot();
if(idx == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Limit erreicht.");
CarInfo[idx][cID] = vehID;
CarInfo[idx][cModel] = 411;
CarInfo[idx][cX] = 0;
CarInfo[idx][cY] = 0;
CarInfo[idx][cZ] = 10;
CarInfo[idx][cR] = 0;
if(PlayerInfo[playerid][pCar1] == 0){
PlayerInfo[playerid][pCar1] = CarInfo[idx][cID];
} else if(PlayerInfo[playerid][pCar2] == 0){
PlayerInfo[playerid][pCar2] = CarInfo[idx][cID];
} else if(PlayerInfo[playerid][pCar3] == 0){
PlayerInfo[playerid][pCar3] = CarInfo[idx][cID];
} else if(PlayerInfo[playerid][pCar4] == 0){
PlayerInfo[playerid][pCar4] = CarInfo[idx][cID];
}
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, PlayerInfo[playerid][pGeld] - carPrice);
PlayerInfo[playerid][pGeld] = GetPlayerMoney(playerid);
new string[128];
format(string, sizeof(string), "Du hast dir erfolgreich einen %s gekauft.", carName);
SendClientMessage(playerid, COLOR_GREEN, string);
}
else
{
SendClientMessage(playerid, COLOR_RED, "[SHOP] Du hast keinen Fahrzeug Slot mehr frei!");
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "[SHOP] Du hast nicht genug Geld dabei!");
}
return 1;
}
Das hier so:
public SpeicherFahrzeug(idx)
{
if(idx < 0)
{
return 1;
}
CarInfo[idx][cModel] = GetVehicleModel(CarInfo[idx][cID]);
if(CarInfo[idx][cModel] == 0) return 1;
new str[25];
format(str, sizeof(str), "/Vehicles/%d.car", idx);
dini_Create(str);
dini_FloatSet(str,"cX", CarInfo[idx][cX]);
dini_FloatSet(str,"cY", CarInfo[idx][cY]);
dini_FloatSet(str,"cZ", CarInfo[idx][cZ]);
dini_FloatSet(str,"cR", CarInfo[idx][cR]);
dini_IntSet(str,"cModel",CarInfo[idx][cModel]);
//tuning
dini_IntSet(str, "tuning_0", CarInfo[idx][tuning_0]);
dini_IntSet(str, "tuning_1", CarInfo[idx][tuning_1]);
dini_IntSet(str, "tuning_2", CarInfo[idx][tuning_2]);
dini_IntSet(str, "tuning_3", CarInfo[idx][tuning_3]);
dini_IntSet(str, "tuning_4", CarInfo[idx][tuning_4]);
dini_IntSet(str, "tuning_5", CarInfo[idx][tuning_5]);
dini_IntSet(str, "tuning_6", CarInfo[idx][tuning_6]);
dini_IntSet(str, "tuning_7", CarInfo[idx][tuning_7]);
dini_IntSet(str, "tuning_8", CarInfo[idx][tuning_8]);
dini_IntSet(str, "tuning_9", CarInfo[idx][tuning_9]);
dini_IntSet(str, "tuning_10", CarInfo[idx][tuning_10]);
dini_IntSet(str, "tuning_11", CarInfo[idx][tuning_11]);
dini_IntSet(str, "tuning_12", CarInfo[idx][tuning_12]);
dini_IntSet(str, "tuning_13", CarInfo[idx][tuning_13]);
dini_IntSet(str, "color_1", CarInfo[idx][color_1]);
dini_IntSet(str, "color_2", CarInfo[idx][color_2]);
dini_IntSet(str, "paintjob", CarInfo[idx][paintjob]);
return 1;
}
Und den Motor Befehl so, wobei ich davon ausgehe, dass du Motor und Tank nicht speicherst:
dcmd_motor(playerid, params[])
{
//motor befehl
#pragma unused params
if(GetPlayerVehicleSeat(playerid) == 0)
{
new vehID = GetPlayerVehicleID(playerid);
if(PlayerInfo[playerid][pCar1] == vehID || PlayerInfo[playerid][pCar2] == vehID || PlayerInfo[playerid][pCar3] == vehID || PlayerInfo[playerid][pCar4] == vehID)
{
if(GetVehicleModel(vehID) == 509 || GetVehicleModel(vehID) == 481 || GetVehicleModel(vehID) == 510)
{
SendClientMessage(playerid, COLOR_RED, "Du sitzt auf einem Fahrrad. Das hat keinen Motor!");
}
else if (Tank[vehID] < 1)
{
SendClientMessage(playerid, COLOR_RED, "Der Tank ist leer. Du musst erst /tanken.");
}
else if (Motor[vehID] == false )
{
GetVehicleParamsEx(vehID,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(vehID,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
Motor[vehID] = true; // Setzt den Bool Motor auf true
}
else
{
GetVehicleParamsEx(vehID,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(vehID,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
Motor[vehID] = false; // Setzt den Bool wieder auf falsch zurück.
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Dein Schlüssel passt hier nicht!");
}
}
return 1;
}
Diese beiden Funktionen brauchst du noch. Letztere haben wir bis hier hin zwar noch nicht verwendet, aber die wirst du sicher mal brauchen, wenn du von der vehicleid (das was GetPlayerVehicleID zurück gibt) auf den Index (Slot) zugreifen willst.
stock GetFreeVehSlot()
{
for(new i=0; i<sizeof(CarInfo); i++)
{
if(CarInfo[i][cID] == 0) return i;
}
return -1;
}
stock GetVehSlot(vehID)
{
for(new i=0; i<sizeof(CarInfo); i++)
{
if(CarInfo[i][cID] == vehID) return i;
}
return -1;
}
Das Prinzip dahinter ist eben, dass du es über den Slot (Index) speicherst und nicht den Index gleich der Vehicle ID setzt.