Szerző Téma: Autó limitálás.  (Megtekintve 2354 alkalommal)

Nem elérhető Xenon98

  • 0
  • Segítőkész.
  • Discord: Kristóf#4180
    • Profil megtekintése
Autó limitálás.
« Dátum: 2020. November 10. - 16:47:16 »
0
Sziasztok! Az lenne a kérdésem hogy tudnám megoldani hogy a járművek spawnolási lehetőségét limitáljam? Aki tudja,ossza meg velem kérem szépen,fontos lenne!  8) :D

Nem elérhető divkn

  • 3259
    • Profil megtekintése
Re:Autó limitálás.
« Válasz #1 Dátum: 2020. November 10. - 22:29:18 »
0
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.

Nem elérhető Xenon98

  • 0
  • Segítőkész.
  • Discord: Kristóf#4180
    • Profil megtekintése
Re:Autó limitálás.
« Válasz #2 Dátum: 2020. November 11. - 15:53:37 »
0
Ezer hála! Részletes is volt,és még meg is magyaráztad,köszönöm mester!  :D

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal