Peršokti į turinį
Eimantas_Death

[PAMOKA] Kaip sukurti darba GRP

Recommended Posts

1 punktas.

Pirmiausia nueinam i DEBUG, ar paprasciausiai i bet koki serveri ir issisaugojam marskiniu vieta.

Tai padaryti galite paspaude [t] ir parase /save darbas

2 punktas.

Nu va turim koordinates dabar einam i data/pickups.txt po enum pdata{ irasome darbas, , tada einam i apacia ir prie visu pickupu irasome

pickups[0][darbas]=CreatePickupA(1275,2,X,Y,Z); // darbas

Kad gautumet X,Y,Z nueikite i GTA direktorija ten rasite savepositions.txt ir ten bus eilute panasi i sita:

AddPlayerClass(123,[u]222.1660,1190.4722,1080.2578[/u],88.9968,0,0,0,0,0,0); // darbas

Ta vieta kur pabraukiau kopijuojate is savo savepositions.txt i pickups.txt ten kur minejau anksciau.

3 punktas.

Sukurem pickupa, dabar reikia padaryti kad tas pickupas ka nors darytu kaj ant jo uzlipame (siuo atveju idarbintu zaideja.

if(pickupid == pickups[0][darbas]) // jusu pickupas
  {
      if(playerDB[playerid][specialybe]==SPECID) // cia irasome ID toki kurio dar nera
      {
          if(playerDB[playerid][uniformd]) // si funkcija tikrina ar darbuotojas norintis iseit is darbo su uniforma ar be
          {
             SendClientMessage(playerid,COLOR,"* Jus esate su uniforma. Pries palikdami musu stoti ja nusivilkite.");
             return 1;
        }
      // isejimas is darbo
         SendClientMessage(playerid,COLOR,"*darbas: Atsisakete darbo!"); // pranesa zaidejui kad isejo is darbo
         playerDB[playerid][specialybe]=0; // nustato zaidejo specialybe i 0
         playerDB[playerid][uniforma]=-1; // atima uniforma
      }else if(playerDB[playerid][specialybe]==0){

         if(GetPlayerScore(playerid)<100) // tikrina ar zaidejas turi ne maziau (siuo atveju 100 xp)
        {
           SendClientMessage(playerid,COLOR_MEDIUMMAGENTA,"* darbas: Atsiprasome, jus dar nepakankamai patyres! (xp > 100)");
           SendClientMessage(playerid,COLOR_MEDIUMMAGENTA,"* darbas: Sugrizkite veliau.");
           return 1;
        }

        if(!playerDB[playerid][teises]) // tikrina ar zaidejas turi teises
        {
               SendClientMessage(playerid,COLOR_MEDIUMMAGENTA,"* darbas: Atsiprasome, bet turite tureti vairavimo teises.");
           return 1;
        }

          SendClientMessage(playerid,COLOR,"* darbas: Sveikinu,  prisidejus prie musu!"); // jei viskas atitinka tuomet idarbinam zmogu.

          playerDB[playerid][drabuziai]=GetPlayerSkin(playerid); // priskiriame uniforma
          if(playerDB[playerid][lytis]==1)  // jei vyras
          {
             SetPlayerSkin(playerid,skin id);
             playerDB[playerid][uniforma]=skin id; // vyro uniforma
             ApplyAnimation(playerid,"PLAYIDLES","stretch",4.1,0,0,0,0,0); // cia animation 
          }else{
              SetPlayerSkin(playerid,skin id); // jei moteris
             playerDB[playerid][uniforma]=skin id;
             ApplyAnimation(playerid,"PLAYIDLES","stretch",4.1,0,0,0,0,0);
          }
          playerDB[playerid][uniformd]=true; // patwirtina kad zmogus turi uniforma
          playerDB[playerid][specialybe]=SPEC ID; // irasykite ta pati kaip pradzioje
      }else{
          SendClientMessage(playerid,COLOR,"*darbas: Negalite dirbti dvieju darbu!");
      }
      return 1;
  }

4 punktas.

Na va iprastas darbas sukurtas, pareikime prie direktoriaus.

Einame i data/playerDB.txt ir virsuje rasome:

#define LEAD_DARBAS ID // ID pasirinkite patys 

Dabar einame i data/functions.txt ir virsui prie kitu stock irasome:

stock SendMessageToDarbas(color,text[])
{
  for(new i=0; i   {
     if(IsPlayerConnected(i))
     {
        if(playerDB[i][specialybe]==SPECID)
        {
           SendClientMessage(i,color,text);
        }
     }
  }
}

tada tame paciame functions.txt susirandame

stock GetJobFromFaction(faction)
{

ir ten tarp visu kitu iterpiame

else if(faction == LEAD_DARBAS) return SPECID;

5 punktas.

Viskas su data failais berods susitwarkem dabar gryztam i GM.

Ten kur raseme kas vyksta uzlipus ant pickupo po situo:

if(!playerDB[playerid][teises]) // tikrina ar zaidejas turi teises
        {
               SendClientMessage(playerid,COLOR_MEDIUMMAGENTA,"* darbas: Atsiprasome, bet turite tureti vairavimo teises.");
           return 1;
        }

irasykime:

if(!playerDB[playerid][leanvited][[b]***[/b]])
        {
         SendClientMessage(playerid,COLOR_MEDIUMMAGENTA,"* dabras: Musu direktorius neinformuotas apie jus, pries istojant, turite pasikalbeti su juo.");
           return 1;
        }

*** paaiskinimas: irasome skaiciu vienu mazesni nei LEAD IDAS tarkim playerDB buvom irase #define LEAD_DARBAS 10 taj sklaiusteliuose rasysim 9.

6 punktas.

na dabar darysim racija, /priimt /ismest komandas.

susirandame /r komanda

ten bus kazkas panasaus i:

if(!strcmp(cmdtext, "/r", true,2))
   {
[u]        if(!(playerDB[playerid][specialybe] == 1 || playerDB[playerid][specialybe] == 2 || playerDB[playerid][specialybe] == 3)[/u]
       {
          SendClientMessage(playerid,COLOR,"* Jus neturite racijos.");
          return 1;

Pabrauktoje eiluteje irasom savo darba taj turetu atoryti taip:

if(!(playerDB[playerid][specialybe] == 1 || playerDB[playerid][specialybe] == 2 || playerDB[playerid][specialybe] == 3 || playerDB[playerid][specialybe] == SPECID)

Dabar siek tiek zemiau turetume rasti eilute panasia i sita:

if(playerDB[playerid][specialybe] == 1) SendMessageToCops(TEXTCOL_WHITE,msg);

po ja rasome:

else if(playerDB[playerid][specialybe] == SPECID) SendMessageToDarbas(TEXTCOL_WHITE,msg);

Viskas! racija padaryta.

Einame prie /priimt /ismest.

Susiraskite /priimt komanda ir kur nors vidury iterpkite sita eilute:(pamatysite ten 5-6 gal ir daugiau gal ir maziau panasiu eiluciu i sia :)

else if(playerDB[playerid][plead] == LEAD_DARBAS) SendClientMessage(id,TEXTCOL_RED,"* Jus kvieciamas i darba!");

ta pati darom su /ismest tik ten irasom stai tokia eilute:

else if(playerDB[playerid][plead] == LEAD_DARBAS) SendClientMessage(id,TEXTCOL_RED,"* Jus ismestas is darbo!");

7 punktas.

Na ka galiausiai priskirkime darbui masina ir padarykime kad eitu pinigai i pelna ;)

taigi kurnors po

public OnPlayerStateChange(playerid, newstate, oldstate)

rasome

if(model == Masinosid)
     {
         if(spec == specid)
         {
            SendClientMessage(playerid,0x00FF00AA,"* uz vazinejima firmai uzdirbsite 40LT/min"); // sia suma nustatysite siek tiek veliau 
               return 1;
        }

        SendClientMessage(playerid,0x00FF00AA,"* Jus ne darbuotojas!");
        Stop(playerid);
        return 1;
     }

Na va o dabar padarykime kad pinigai eitu i pelna :)

na va nelabai moku paaiskinti kur ja reiks irasyt, na meginkim turetu rasti.

Spaudziate CTRL+f ir irasote

((model

jums turejo ismesti panasia eilute i sia:

if((model == 598 || model== 523 || model == 599) && playerDB[playerid][specialybe] == 1) pelnas[0]+=40;

po ja rasome sawo darbo atlyginima, tai turetu atrodyti taip:

else if(model == MasinosID && playerDB[playerid][specialybe] == SPECID) pelnas[[b]***[/b]]+=40;

*** paaiskinimas: i situos sklaistelius irasome skaiciu vienu mazesni uz specialybes ID, taj yra pvz specialybes id pasirinkot 11 taj [pelnas][10] manau supratot :)

8 punktas.

Jei kompiliuojant meta stai tokius errorus:

array index out of bounds (variable "playerDB")

Jei toks erroras kaip paminetas virsui taj jums reikia eiti i data/playerDB

ten rasite eilute leaninvited[*skaicius]

*skaicius - taj gali buti bet koks irasytas skaicius, paimkite ir padidinkite ji. didinkite tol kol nebemes error. (tai yra limitas)

array index out of bounds (variable "pelnas")

Jei erroras toks kaip antrasis jums reikia eiti i data/pelnas.txt ir padidinti pelno limita, su pelnu irgi tas pats didinkite tol kol nebemes sitokio error.

Stai ir Baigem

Pamoka Kurta ne Mano Padejau? +R3P

  • Teigiamai 1
  • Neigiamai 1

Dalintis šį pranešimą


Nuoroda iki šio pranešimo
Dalintis per kitą puslapį


Svečias
Ši tema yra užrakinta.

  • Narių peržiūri šį forumą:   0 nariai

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


  • SuperGames programele
  • SuperGames programele


×