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

Paprasta darbo rangų kūrimo pamoka.


Stuneris

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3530 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

Sveiki, šioje pamokoje išmokysiu susikurti nesudėtingą rangų sistemėlę darbams. Nieko nelaukę pradėkime.

 

Ko mums prireiks?

 

Mums prireiks dviejų include (ZCMD ir SSCANF), jas galite atsisiųsti iš čia: ZCMD, SSCANF.

Taip pat mums reikės šios funkcijos:

PlayerName(playerid)
{
     new name[MAX_PLAYER_NAME];
     GetPlayerName(playerid, name, MAX_PLAYER_NAME);
     return name;
}

Ją galite įklijuoti bet kur ne callback'ų ribose, žinoma, patogiausia kodo pabaigoje arba pradžioje.

 

Kintamieji ir bind'ai

 

Šiai sistemai prireiks vieno kintamojo ir dėl patogumo susikursime kelis bind'us (#define).

new pareigos[MAX_PLAYERS];

Bind'ų pavadinimas neturi reikšmės, vadinkite taip, kad būtų nesunku prisiminti. Skaičiai taip pat reikšmės nesudaro, bet žinoma patogiausia iš eilės, nes serveryje rašysime tą skaičių.

#define POLICIJA 0
#define MOTO_POLICIJA 1
#define SWAT 2
#define FBI 3
#define DIREKTORIUS 4

Kaip pavyzdžiui naudoju tokius pavadinimus ir ID.

 

Komanda

 

Manau, norėsite žaidėjui galėti pakelti darbo rangą iš pačio serverio, tam mums prireiks komandos:

CMD:rangas(playerid, params[])
{
     if(user[playerid][direktorius] > 0)
     {
          new zID, lygis;
          if(sscanf(params,"ud", zID, lygis)) return SendClientMessage(playerid, 0xFF0000FF, "Paaukstinti/pazeminti zaideja pareigose: /rangas [dalis vardo][pareigu lygis]");
          if(zID == INVALID_PLAYER_ID || IsPlayerNPC(zID)) return SendClientMessage(playerid, 0xFF0000FF, "Zaidejas nerastas.");
          if(user[playerid][direktorius] != user[zID][specialybe]) return SendClientMessage(playerid, 0xFF0000FF, "Zaidejas nedirba jums.");
          if(pareigos[zID] == lygis) return SendClientMessage(playerid, 0xFF0000FF, "Zaidejas dabar ir atlieka tokias pareigas.");
          new String[91];
          if(pareigos[zID] < lygis) format(String, 128, "Paaukstinote %s iki %s pareigu", PlayerName(zID), Pareigos(lygis));
          else format(String, 128, "Nuzeminote %s iki %s pareigu", PlayerName(zID), Pareigos(lygis));
          SendClientMessage(playerid, 0x00FF00FF, String);
          if(pareigos[zID] < lygis) format(String, 128, "%s paaukstino jus iki %s pareigu", PlayerName(playerid), Pareigos(lygis));
          else format(String, 128, "%s nuzemino jus iki %s pareigu", PlayerName(playerid), Pareigos(lygis));
          SendClientMessage(zID, 0x00FF00FF, String);
          pareigos[zID] = lygis;
          switch(pareigos[playerid])
          {
               case DIREKTORIUS: SetPlayerSkin(playerid, 228);
               case MOTO_POLICIJA: SetPlayerSkin(playerid, 284);
               case POLICIJA:
               {
                    new pd_skins[5][1] = { 265, 266, 267, 280, 281 };
                    SetPlayerSkin(playerid, pd_skins[random(sizeof(pd_skins))][0]);
               }
               case FBI: SetPlayerSkin(playerid, 286);
               case SWAT: SetPlayerSkin(playerid, 285);
               default: SetPlayerSkin(playerid, 20);
          }
     }
     return 1;
}

if(user[playerid][direktorius] > 0) - Čia naudokite kintamąjį, kuriame saugomas jūsų direktoriaus specialybės ID.

if(user[playerid][direktorius] != user[zID][specialybe]) - Čia naudokite tą patį kintamąjį, kuriame saugomas jūsų direktoriaus specialybės ID, sekantį kintamąjį naudokite, kuriame saugoma žaidėjo specialybės ID.

default: SetPlayerSkin(playerid, 20); - Čia įrašykite koks bus skin ID jei žaidėjas nedirba.

 

Funkcija pareigų pavadinimui

 

Mūsų pareigos turės pavadinimus, kad juos atvaizduotumėm komandoje, reikia sukurti funkciją, kad pagal pareigos ID gautų pavadinimą, ji atrodytų taip:

Pareigos(pareigu_id)
{
     new pareigu_pav[36];
     switch(pareigu_id)
     {
          case DIREKTORIUS: pareigu_pav = "direktoriaus";
          case MOTO_POLICIJA: pareigu_pav = "moto policijos";
          case POLICIJA: pareigu_pav = "pareiguno";
          case FBI: pareigu_pav = "federaliniu tyrimu biuro darbuotojo";
          case SWAT: pareigu_pav = "specialiojo burio";
     }
     return pareigu_pav;
}

Tarp kabučių rašykite taip pavadinimą, kad jis atsakytų į klausimą iki kokių pareigų?

 

Skin'as prisijungus

 

Kiekvienas prisijungęs darbuotojas turi būti su savo skin'u. Po OnPlayerSpawn naudokite tokį kodą:

switch(pareigos[playerid])
{
     case DIREKTORIUS: SetPlayerSkin(playerid, 228);
     case MOTO_POLICIJA: SetPlayerSkin(playerid, 284);
     case POLICIJA:
     {
          new pd_skins[5][1] = { 265, 266, 267, 280, 281 };
          SetPlayerSkin(playerid, pd_skins[random(sizeof(pd_skins))][0]);
     }
     case FBI: SetPlayerSkin(playerid, 286);
     case SWAT: SetPlayerSkin(playerid, 285);
     default: SetPlayerSkin(playerid, 20);
}

default: SetPlayerSkin(playerid, 20); - Čia įrašykite koks bus skin ID jei žaidėjas nedirba.

 

Komandos rangams

 

Norėdami sukurti komandas kokiems nors rangams komandos pradžioje naudokite tokį kodą:

if(pareigos[playerid] == DIREKTORIUS) continue;

Jei norite sukurti komandą būtent tam rangui.

if(pareigos[playerid] > POLICININKAS) continue;

Jei norite sukurti komandą didesniam rangui nei tas.

if(pareigos[playerid] >= SWAT) continue;

Jei norite sukurti komandą tam ir aukštesniems rangams.

 

Pastebėjimas: tas pats galioja ir pickup'ams, transportui ar kitiems dalykams.

Nuoroda į komentarą
Dalintis per kitą puslapį

Ją galite įklijuoti bet kur ne callback'ų ribose, žinoma, patogiausia kodo pabaigoje arba pradžioje.

 

 

 

Po OnPlayerSpawn naudokite tokį kodą:

Na, komandas žino visi kur dėti, kintamuosius taip pat, tai ką man dar galima aiškinti kaip idiotams?

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 3 savaičių...
  • Parašė po 2 savaičių...
  • Parašė po 2 savaičių...

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3530 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!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

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

Skelbimai


×
×
  • Sukurti naują...