Létrehozol egy többdimenziós tömböt, aminek első dimenziója MAX_PLAYERS, második pedig a maximum járművek száma amit játékos létre tud hozni, abban az esetben ha tárolni szeretnéd a járművek ID-jét.
#define MAX_VEHICLE_PER_PLAYER 5
stock gPlayerVehicles[MAX_PLAYERS][MAX_VEHICLE_PER_PLAYER];
Ha nem akarod tárolni, csak számlálni akarod a járművek számát, elég ennyi:
stock gPlayerVehicles[MAX_PLAYERS];
(Tök mindegy hogy "stock", vagy "new", vagy esetleg "static". "stock" esetében a fordító nem fog figyelmeztetni, ha a változó nincs használatban, "new" esetében igen, és mind a kettő globális, szóval más szkriptfájlokban is elérhető a változó, míg "static" esetében csak a szktripten belül használható)
Mikor a játékos létrehozza a járművet elso dimenzióba megadod a játékos ID-jét akitől tárolni akarod, másodiknál kikeresed az "üres" elemet, ahol tárolni lehet, ha nincs, akkor itt tudod figyelmeztetni a játékost hogy többet nem tud létrehozni.
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp(cmdtext, "/nrg") == 0)
{
new i = 0;
for(; i < MAX_VEHICLE_PER_PLAYER; i++) {
if (gPlayerVehicles[playerid][i] == 0) // Kikeresi az üres elemet
break; // Leállítja a ciklust
}
if(i == MAX_VEHICLE_PER_PLAYER) {
// Itt tudod jelezni a játékosnak hogy több járművet nem tud spawnolni
return 1; // Hívás vége.
}
gPlayerVehicles[playerid][i] = CreateVehicle(...);
return 1;
}
return 0;
}
Második megoldás esetén:
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp(cmdtext, "/nrg") == 0)
{
if (gPlayerVehicles[playerid] < MAX_VEHICLE_PER_PLAYER) {
CreateVehicle(...);
gPlayerVehicles[playerid]++; // Növeli az elemet 1-el.
}
else
// Itt tudod jelezni a játékosnak hogy több járművet nem tud spawnolni
SendClientMessage(...);
return 1;
}
return 0;
}
Amikor a játékos kiszáll a járműből, eladja, stb... Ugyanúgy megcsinálod mint ahogy fent van, csak lenullázod, vagy csökkented az értékét.
public OnPlayerExitVehicle(playerid, vehicleid)
{
for(new i = 0; i < MAX_VEHICLE_PER_PLAYER; i++) {
if (gPlayerVehicles[playerid][i] == vehicleid) { // Kikeresi azt a vehicleid elemet amit a CreateVehicle funkció tért vissza
gPlayerVehicles[playerid][i] = 0; // Lenullázuk;
break; // Leállítja a ciklust, ne keressen tovább a ciklus
}
}
return 1;
}
Második megoldás esetén:
public OnPlayerExitVehicle(playerid, vehicleid)
{
// Csak hogy tudd, nem teljesen ajánlott így, mert ahányszor kiszáll a járműből, az érték negatív érték alá is eshet
// így megnövelhető a maximum létrehozható járművek számát 5-ről például 30-ra, mert:
// if (gPlayerVehicles[playerid] < MAX_VEHICLE_PER_PLAYER)
// a gPlayerVehicle[playerid] értéke kissebb, mint MAX_VEHICLE_PER_PLAYER
gPlayerVehicles[playerid]--; // Csökkenti az értékét.
return 1;
}
Esetleg van egy harmadik PVar megoldás is, csak az a megoldás lassabb.