Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Primityvi pamoka | Inventoriaus sistemos kūrimas


Minion

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3889 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Primityvi pamoka | Inventoriaus sistemos kūrimas

Na ką gi, antroji mano pamoka, joje galėsite išmokti kaip serveryje sukurti inventorių. Ši pamoka nėra labai plati, išdėstomi tik patys pagrindai, kad jūsų fantazijai neliktų ribų.

  1. Pradėkime nuo apmąstymo. Inventorius - daiktai. O daiktai yra skirtingi, reiškiasi kiekvienas turi savo ID, o kas gi mums padės tai sukurti jeigu ne enum? Savo skripte rašome:
    #define DIDZIAUSIAS_SVORIS 20
    #define MAX_DAIKTU 20
    


    
    new pItem[MAX_PLAYERS][128];	
    new pAmount[MAX_PLAYERS][128];
     	enum Daiktas
    {
    dPavadinimas[24],
    dNaudojimas[100],
    Float:dSvoris
    }
    


  2. Toliau kursime array, kuriame ir dėsime daiktų pavadinimus, apibūdinimus bei svorį!
    new Daiktai[][Daiktas] =  { {"Nera", "Sis daiktas neegzistuoja", 0.0}, // id - 0
    {"Pasaku knyga", "Skirta skaityti pasakas", 0.5}, // id - 1
    {"Coca-Cola", "Gaivusis gerimas", 0.3} // id - 2  
    };
    


  3. Dabar susikursime funkcijas 'pridetiDaikta' ir 'isimtiDaikta':
    stock pridetiDaikta(playerid, daiktas, kiekis)
    {
    
    new id[MAX_DAIKTU], am[MAX_DAIKTU], Float:weight = 0;
    format(pItem[playerid], 128, "%i %s", daiktas, pItem[playerid]);
    format(pAmount[playerid], 128, "%i %s", kiekis, pAmount[playerid]);
    sscanf(pItem[playerid], "a<i>[20]", id);
    sscanf(pAmount[playerid], "a<i>[20]", am);
    pAmount[playerid] = "";
    pItem[playerid] = "";
    for(new i; i<MAX_DAIKTU; i++)
    {
      if(id[i] == 0) continue;
      for(new j; j<MAX_DAIKTU; j++)
      {
       if(i == j) continue;
       if(id[i] == id[j])
       {
        am[i] += am[j];
        id[j] = 0;
        am[j] = 0;
       }
      }
      if(am[i]>0)
      {
       format(pAmount[playerid], 128, "%i %s", am[i], pAmount[playerid]);
       format(pItem[playerid], 128, "%i %s", id[i], pItem[playerid]);
       weight += Daiktai[id[i]][dSvoris]*am[i];
      }
    }
    if(weight >= DIDZIAUSIAS_SVORIS)
    {
      //Zaidejo daiktai sveria per daug, kazka darome
    }
    else
    {
      //viskas ok
    } 
    }	
    stock isimtiDaikta(playerid, daiktas, amount)
    {
    new id[MAX_DAIKTU], am[MAX_DAIKTU], Float:weight = 0;
    format(pItem[playerid], 128, "%i %s", daiktas, pItem[playerid]);
    format(pAmount[playerid], 128, "%i %s", amount, pAmount[playerid]);
    sscanf(pItem[playerid], "a<i>[20]", id);
    sscanf(pAmount[playerid], "a<i>[20]", am);
    pAmount[playerid] = "";
    pItem[playerid] = "";
    
    for(new i; i<MAX_DAIKTU; i++)
    {
      if(id[i] == daiktas) am[i] -= amount;
      if(am[i] > 0)
      {
       format(pAmount[playerid], 128, "%i %s", am[i], pAmount[playerid]);
       format(pItem[playerid], 128, "%i %s", id[i], pItem[playerid]);
       weight += Daiktai[id[i]][dSvoris]*am[i];
      }
    }
    if(weight >= DIDZIAUSIAS_SVORIS)
    {
      //perdidelis svoris
    }
    else
    {
      //viskas ok
    }
    }	stock turiDaikta( playerid, daiktas)
    {
    new id[MAX_DAIKTU], am[MAX_DAIKTU];
    sscanf(pItem[playerid], "a<i>[20]", id);
    sscanf(pAmount[playerid], "a<i>[20]", am);
    for(new i; i<MAX_DAIKTU; i++) if(id[i] == daiktas && am[i] > 0) return am[i];
    return 0;
    }
    


  4. Taip pat reikės keletos papildomų funkcijų kurios jums pravers:
    #define GetItemName(%0) (Daiktai[%0][dPavadinimas])
    #define GetItemDescription(%0) (Daiktai[%0][dNaudojimas])
    #define GetItemWeight(%0) (Daiktai[%0][dSvoris])
    


  5. Na ir galiausiai padarome inventoriaus rodymo funkciją:
    	
    stock ShowInventory(playerid)
    {
    new id[MAX_DAIKTU], am[MAX_DAIKTU], msg[1024], Float:weight;
    msg = "Kiekis\t\tSvoris\t\t Pavadinimas";
    sscanf(pItem[playerid], "a<i>[20]", id);
    sscanf(pAmount[playerid], "a<i>[20]", am);
    
    for(new i; i<DIDZIAUSIAS_SVORIS; i++)
    {
      if(am[i] > 0)
      {
       format(msg, sizeof(msg), "%s\n{FF8C00}%i\t\t{FF4500}%.1f%{FFFFFF}kg\t\t {FF6347}%s", msg, am[i], Daiktai[id[i]][dSvoris], Daiktai[id[i]][dPavadinimas]);
       weight += Daiktai[id[i]][dSvoris]*am[i];
      }
    }	ShowPlayerDialog(playerid, 9999, DIALOG_STYLE_LIST, "Inventorius", msg, "", "Uždaryti");
    return 0;
    }
    


Pamoka yra tikrai skurdoka, nes nėra inventoriaus naudojimo, greitu metu kai turėsiu laiko įmesiu ir jį. Dėkui kad skaitėte.

  • Teigiamai 1
  • Neigiamai 1
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3889 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...