[TuT] Izrada posla - Kosac Trave (ZCMD/YCMD/STRCMP)

Započeo [BR]Maki187, Mart 10, 2012, 18:49:52 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

U ovom tut-u cu vam pokazati kako da napravite jednostavan posao, u ovom slucaju kosaca trave, ovaj posao je namenjen svim modovima, pocevsi od GF edita, do onih od nule... (zavisi kako ga podesite)
Ujedno ovo mi je prvi tut  :D

Pa da pocnemo:

1.)
na vrh moda stavite varijablu

new KosiTravu[MAX_PLAYERS]; // ovde se svakom igracu cuva njegova varijabla
#define BELA 0xFFFFFFAA // definisemo belu boju
#define SIVA 0xBFC0C2FF // definisemo sivu boju


pod OnPlayerConect stavite ovo:

KosiTravu[playerid] = 0; // kad se igrac konektuje, stavi mu ovu varijablu na 0, sto znaci da trenutno nekosi travu



2.)
Sad prelazimo na ubacivanje vozila za kosaca, to ce te uraditi ovako:

na vrh skripte dodajemo

new kosilica[2]; // broj 2 je broj max vozila, menjate ga po zelji, tj koliko vozila ubacite

zatim kod ostalih stockova ubacite sledecu proveru

stock VoziloKosaca(carid)
{
for(new i = 0; i < sizeof(kosilica); i++) // prolazi kroz sva vozila za kosenje i proverava da li se u njemu nalazite
{
if(carid == kosilica[i]) return 1;
}
return 0;
}


sad pod OnGameModeInit dodajte sledece

kosilica[0] = AddStaticVehicleEx(572,1960.2535,-1228.7362,19.5318,99.1372,0,0,40); //dodali smo vozilo(kosilicu) u mod
kosilica[1] = AddStaticVehicleEx(572,1960.2535,-1228.7362,19.5318,99.1372,0,0,40); //dodali smo vozilo(kosilicu) u mod

samo zapamtite, vozila idu od 0, ne od 1! (treba da ide kosilica[0] ... kosilica[1], a nikako nesme da ide kosilica[1] ... kosilica[2]



3.)
Prelazimo na komandu koja pokrece posao, samo zapamtite, PlayerInfo[playerid][pPosao] promenite onako kako je vama u modu...

ZCMD Komanda:


CMD:kositravu(playerid, params[])
{
        new idv = GetPlayerVehicleID(playerid);
if(PlayerInfo[playerid][pPosao] != 1) // proverava jel igrac ima odgovarajuci posao
{
SendClientMessage(playerid, SIVA, "Nisi Kosac Trave! ");
return 1;
}
if(KosiTravu[playerid] >= 1) // proverava jel igrac vec zapoceo sa kosenjem trave
{
SendClientMessage(playerid, SIVA, "Vec kosis travu!");
return 1;
}
if(!VoziloKosaca(idv)) // proverava jel igrac u vozilu kosaca, ako nije nemoze da kosi travu
{
SendClientMessage(playerid, SIVA, "Nisi u vozilu kosaca trave!");
return 1;
}
if(VoziloKosaca(idv)) // proverava da li je igrac u vozilu kosaca, ako jeste, nastavlja komandu...
{
KosiTravu[playerid] = 1; // postavlja igracu varijablu na 1, sto znaci da je zapoceo posao
SetPlayerCheckpoint(playerid,1905.4629,-1228.2189,16.2359, 5.0); // postavlja igracu CP(marker) na zeljene koordinate
SendClientMessage(playerid, BELA, "Vozite do crvenog markera!");
}
return 1;
    }


YCMD Komanda:


YCMD:kositravu(playerid, params[], help)
{
        #pragma unused help
        new idv = GetPlayerVehicleID(playerid);
if(PlayerInfo[playerid][pPosao] != 1) // proverava jel igrac ima odgovarajuci posao
{
SendClientMessage(playerid, SIVA, "Nisi Kosac Trave! ");
return 1;
}
if(KosiTravu[playerid] >= 1) // proverava jel igrac vec zapoceo sa kosenjem trave
{
SendClientMessage(playerid, SIVA, "Vec kosis travu!");
return 1;
}
if(!VoziloKosaca(idv)) // proverava jel igrac u vozilu kosaca, ako nije nemoze da kosi travu
{
SendClientMessage(playerid, SIVA, "Nisi u vozilu kosaca trave!");
return 1;
}
if(VoziloKosaca(idv)) // proverava da li je igrac u vozilu kosaca, ako jeste, nastavlja komandu...
{
KosiTravu[playerid] = 1; // postavlja igracu varijablu na 1, sto znaci da je zapoceo posao
SetPlayerCheckpoint(playerid,1905.4629,-1228.2189,16.2359, 5.0); // postavlja igracu CP(marker) na zeljene koordinate
SendClientMessage(playerid, BELA, "Vozite do crvenog markera!");
}
return 1;
    }


STRCMP Komanda:


if(strcmp(cmdtext, "/kositravu", true))
{
new idv = GetPlayerVehicleID(playerid);
if(PlayerInfo[playerid][pPosao] != 1) // proverava jel igrac ima odgovarajuci posao
{
SendClientMessage(playerid, SIVA, "Nisi Kosac Trave! ");
return 1;
}
if(KosiTravu[playerid] >= 1) // proverava jel igrac vec zapoceo sa kosenjem trave
{
SendClientMessage(playerid, SIVA, "Vec kosis travu!");
return 1;
}
if(!VoziloKosaca(idv)) // proverava jel igrac u vozilu kosaca, ako nije nemoze da kosi travu
{
SendClientMessage(playerid, SIVA, "Nisi u vozilu kosaca trave!");
return 1;
}
if(VoziloKosaca(idv)) // proverava da li je igrac u vozilu kosaca, ako jeste, nastavlja komandu...
{
KosiTravu[playerid] = 1; // postavlja igracu varijablu na 1, sto znaci da je zapoceo posao
SetPlayerCheckpoint(playerid,1905.4629,-1228.2189,16.2359, 5.0); // postavlja igracu CP(marker) na zeljene koordinate
SendClientMessage(playerid, BELA, "Vozite do crvenog markera!");
}
return 1;
    }



Moja preporuka vam je da koristite ZCMD (mada je YCMD skoro isto), strcmp nikako...



4.)

Posto smo napravili komandu kojom pokrecemo posao, moramo da napravimo i komandu koju obustavljamo posao, ako nezelimo da ga dovrismo do kraja...

ZCMD Komanda:


CMD:stopkosenje(playerid, params[])
{
    new idv = GetPlayerVehicleID(playerid);
if(PlayerInfo[playerid][pPosao] != 1)// proverava jel igrac ima odgovarajuci posao
{
SendClientMessage(playerid, SIVA, "Nisi Kosac trave!");
return 1;
}
if(KosiTravu[playerid] >= 1) // proverava da li igrac kosi travu
{
KosiTravu[playerid] = 0;
DisablePlayerCheckpoint(playerid);
SendClientMessage(playerid, BELA, "Prekinuo si kosenje trave!");
if(VoziloKosaca(idv)) // ako igrac nije izaso iz vozila a zapoceo je kosenje, respawnuje vozilo
    {
SetVehicleToRespawn(idv);
}
}
else // ako igrac nije zapoceo kosenje, salje mu poruku
{
SendClientMessage(playerid, SIVA, "Nisi ni zapoceo kosenje trave!");
return 1;
}
return 1;
    }


YCMD Komanda:


YCMD:stopkosenje(playerid, params[], help)
{
        #pragma unused help
         new idv = GetPlayerVehicleID(playerid);
if(PlayerInfo[playerid][pPosao] != 1) // proverava jel igrac ima odgovarajuci posao
{
SendClientMessage(playerid, SIVA, "Nisi Kosac trave!");
return 1;
}
if(KosiTravu[playerid] >= 1) // proverava da li igrac kosi travu
{
KosiTravu[playerid] = 0;
DisablePlayerCheckpoint(playerid);
SendClientMessage(playerid, BELA, "Prekinuo si kosenje trave!");
if(VoziloKosaca(idv)) // ako igrac nije izaso iz vozila a zapoceo je kosenje, respawnuje vozilo
    {
SetVehicleToRespawn(idv);
}
}
else // ako igrac nije zapoceo kosenje, salje mu poruku
{
SendClientMessage(playerid, SIVA, "Nisi ni zapoceo kosenje trave!");
return 1;
}
return 1;
    }


STRCMP Komanda:


if(strcmp(cmdtext, "/stopkosenje", true))
{
new idv = GetPlayerVehicleID(playerid);
if(PlayerInfo[playerid][pPosao] != 1) // proverava jel igrac ima odgovarajuci posao
{
SendClientMessage(playerid, SIVA, "Nisi Kosac trave!");
return 1;
}
if(KosiTravu[playerid] >= 1)// proverava da li igrac kosi travu
{
KosiTravu[playerid] = 0;
DisablePlayerCheckpoint(playerid);
SendClientMessage(playerid, BELA, "Prekinuo si kosenje trave!");
if(VoziloKosaca(idv)) // ako igrac nije izaso iz vozila a zapoceo je kosenje, respawnuje vozilo
    {
SetVehicleToRespawn(idv);
}
}
else // ako igrac nije zapoceo kosenje, salje mu poruku
{
SendClientMessage(playerid, SIVA, "Nisi ni zapoceo kosenje trave!");
return 1;
}
return 1;
    }




5.)


Sad prelazimo na postavljanje CP-a (markera)

pod OnPlayerEnterCheckpoint(playerid) stavite sledece


if(KosiTravu[playerid] == 1) // proverava da li je igraceva varijablva za kosenje na 1
{
new idv = GetPlayerVehicleID(playerid); // uzima id vozila
    if(VoziloKosaca(idv)) // proverava jel u vozilu kosaca
    {
KosiTravu[playerid] = 2; // stavlja igracu varijablu na 2
            DisablePlayerCheckpoint(playerid); // uklanja stari CP
            SetPlayerCheckpoint(playerid,1908.1815,-1177.1769,22.9238, 5.0); // postavlja igracu novi cp
    }
    return 1;
}

if(KosiTravu[playerid] == 2) // proverava da li je igraceva varijablva za kosenje na 2
{
new idv = GetPlayerVehicleID(playerid); // uzima id vozila
    if(VoziloKosaca(idv)) // proverava jel u vozilu kosaca
    {
KosiTravu[playerid] = 3; // stavlja igracu varijablu na 3
            DisablePlayerCheckpoint(playerid); // uklanja stari CP
            SetPlayerCheckpoint(playerid,2026.7825,-1158.4764,21.7321, 5.0); // postavlja igracu novi cp
    }
    return 1;
}
if(KosiTravu[playerid] == 3) // proverava da li je igraceva varijablva za kosenje na 3
{
new idv = GetPlayerVehicleID(playerid); // uzima id vozila
    if(VoziloKosaca(idv)) // proverava jel u vozilu kosaca
    {
KosiTravu[playerid] = 4; // stavlja igracu varijablu na 4
            DisablePlayerCheckpoint(playerid); // uklanja stari CP
            SetPlayerCheckpoint(playerid,2035.3783,-1230.5975,22.1612, 5.0); // postavlja igracu novi cp
    }
    return 1;
}
if(KosiTravu[playerid] == 4) // proverava da li je igraceva varijablva za kosenje na 4
{
new idv = GetPlayerVehicleID(playerid); // uzima id vozila
    if(VoziloKosaca(idv)) // proverava jel u vozilu kosaca
    {
KosiTravu[playerid] = 5; // stavlja igracu varijablu na 5
            DisablePlayerCheckpoint(playerid); // uklanja stari CP
            SetPlayerCheckpoint(playerid,1905.4629,-1228.2189,16.2359, 5.0); // postavlja igracu novi cp
    }
    return 1;
}
if(KosiTravu[playerid] == 5) // proverava da li je igraceva varijablva za kosenje na 4
{
new idv = GetPlayerVehicleID(playerid); // uzima id vozila
    if(VoziloKosaca(idv)) // proverava jel u vozilu kosaca
    {
KosiTravu[playerid] = 0; // stavlja igracu varijablu na 0
            DisablePlayerCheckpoint(playerid); // uklanja stari CP
            GivePlayerMoney(playerid, 100); // daje igracu 100 dolara
SendClientMessage(playerid, BELA, "Prekinuo si kosenje trave!");
            // ovim poslednjim CP-om smo zavrsili posao :)
    }
    return 1;
}



Ovim je ceo posao gotov, akd dodjete do poslednjeg cp-a, dobiajte 100 dolara...

Posao je testiran, na brzinu, tako da ako nes neradi, javite :)




6.)

Ovo mozete i nemorate da ubacite, a to je zaposljavanje...

pod OnGameModeInit dodajte sledece

AddStaticPickup(1274, 1, 1961.4186,-1232.6809,19.9813);// dodali smo pickup za kosaca

a sad nam treba i komanda za zaposljavanje

ZCMD Komanda:


CMD:takejob(playerid, params[])
{
    if(PlayerInfo[playerid][pPosao] > 0) // proverava jel igracev posao veci od 0
    {
        SendClientMessage(playerid, SIVA, "Vec si zaposlen, kucaj /otkaz da bi dao otkaz.");
        return 1;
    }
if(IsPlayerInRangeOfPoint(playerid, 2, 1961.4186,-1232.6809,19.9813)) // proverava da li se igrac nalazi an tim koordinatama
{
PlayerInfo[playerid][pPosao] = 1; // psotavlja igracu posao na 1
SendClientMessage(playerid, BELA, "Uspesno si se zaposlio kao kosac trave.");
SendClientMessage(playerid, BELA, "Komande: /kositravu | /stopkosenje");
}
else { SendClientMessage(playerid, SIVA, "Nisi kod kosaca!"); return 1; } // ako igrac nije na odredjenim koordinatama, salje mu poruku.
return 1;
    }


YCMD Komanda:


YCMD:takejob(playerid, params[], help)
{
        #pragma unused help
         if(PlayerInfo[playerid][pPosao] > 0) // proverava jel igracev posao veci od 0
    {
        SendClientMessage(playerid, SIVA, "Vec si zaposlen, kucaj /otkaz da bi dao otkaz.");
        return 1;
    }
if(IsPlayerInRangeOfPoint(playerid, 2, 1961.4186,-1232.6809,19.9813)) // proverava da li se igrac nalazi an tim koordinatama
{
PlayerInfo[playerid][pPosao] = 1; // psotavlja igracu posao na 1
SendClientMessage(playerid, BELA, "Uspesno si se zaposlio kao kosac trave.");
SendClientMessage(playerid, BELA, "Komande: /kositravu | /stopkosenje");
}
else { SendClientMessage(playerid, SIVA, "Nisi kod kosaca!"); return 1; } // ako igrac nije na odredjenim koordinatama, salje mu poruku.
return 1;
    }


STRCMP Komanda:


if(strcmp(cmdtext, "/takejob", true))
{
if(PlayerInfo[playerid][pPosao] > 0) // proverava jel igracev posao veci od 0
    {
        SendClientMessage(playerid, SIVA, "Vec si zaposlen, kucaj /otkaz da bi dao otkaz.");
        return 1;
    }
if(IsPlayerInRangeOfPoint(playerid, 2, 1961.4186,-1232.6809,19.9813)) // proverava da li se igrac nalazi an tim koordinatama
{
PlayerInfo[playerid][pPosao] = 1; // psotavlja igracu posao na 1
SendClientMessage(playerid, BELA, "Uspesno si se zaposlio kao kosac trave.");
SendClientMessage(playerid, BELA, "Komande: /kositravu | /stopkosenje");
}
else { SendClientMessage(playerid, SIVA, "Nisi kod kosaca!"); return 1; } // ako igrac nije na odredjenim koordinatama, salje mu poruku.
return 1;
    }




7.)

I potrebna nam je i komanda za otkaz (ovu komandu je uradio ναηιâ,,"â,,"α.ιη¢)

ZCMD Komanda:

CMD:otkaz(playerid, params[])
{
if(PlayerInfo[playerid][pPosao] < 1) return SendClientMessage(playerid,-1,"Niste zaposljeni!"); // proverava da li ej igrac zaposlen
PlayerInfo[playerid][pPosao] = 0; // stavlja mu posao na 0 (nezaposlen)
SendClientMessage(playerid,-1,"Dali ste otkaz");
return true;
}


YCMD Komanda:


YCMD:otkaz(playerid, params[], help)
{
    #pragma unused help
    if(PlayerInfo[playerid][pPosao] < 1) return SendClientMessage(playerid,-1,"Niste zaposljeni!"); // proverava da li ej igrac zaposlen
PlayerInfo[playerid][pPosao] = 0; // stavlja mu posao na 0 (nezaposlen)
SendClientMessage(playerid,-1,"Dali ste otkaz");
return true;
    }


STRCMP Komanda:


if(strcmp(cmdtext, "/otkaz", true))
{
if(PlayerInfo[playerid][pPosao] < 1) return SendClientMessage(playerid,-1,"Niste zaposljeni!"); // proverava da li ej igrac zaposlen
PlayerInfo[playerid][pPosao] = 0; // stavlja mu posao na 0 (nezaposlen)
SendClientMessage(playerid,-1,"Dali ste otkaz");
return true;
}


Naravno nezaboravite da PlayerInfo[playerid][pPosao] promenite u ono kako vama stoji u modu.
Poslednja Izmena: April 17, 2012, 14:26:39 POSLE PODNE od joXy_

STRCMP ti ni netreba
YCMD samo sa puno komandi a ne u FSovima i slicno
ZCMD uvijek i 100 %
nije ti definirano BELA sto ce zbuniti mnoge
inace solidan tut

Hvala, eno definisao sam boju, to sam zab da uradim... hvala

strcmp sam stavio jer obicno pocetnici koji ne znaju da urade posao, koriste strcmp, i tvrdoglavi su pa nece da koriste zcmd, zato sam im stavio, pa nek odluce sta ce koristiti  :)

ricken



Super je, lepo objasnjeno.
Dodaj jos komandu za zaposljavanje i otkaz i bice kompletan  :)

hvala...
a valjda znaju da urade zaposljavanje i otkaz...  :D

@vanila , hvala, to mi je reko i Gagi, al ja sve ovako skriptam, posto mi je lakse da se snadjem, onako se zbunim i nzm sta sam hteo  :D

btw, tek sam sad video sta pise u pravilu, al jbg, tut je vec postavljen :P

Takoder definiraj sve boje Siva i ostale ...
jednostavno kod tavih tutova stavis za boju bijelu tj. -1 ...

[quote author=
Maki187 link=topic=40142.msg301057#msg301057 date=1331403116]
btw, tek sam sad video sta pise u pravilu, al jbg, tut je vec postavljen :P
[/quote]
Neka, koristan je tutorijal, mnogo bolji od onog tako da nije problem. Od sad pa na dalje vise nema potrebe bilo kakav tutorijal vezan za posao.
Zato ti kazem da ga dovrsis i napravis te 2 komande.


Ovako kako si dao tut, kad ukucas bilo koju komandu pise nisi "Kosac Trave".

Mozda zato sto nisi sebi postavio posao na 1 ? -.-

ili ako koristis [cenzura]i STRCMP, onda umesto if(strcmp(cmdtext, "/stopkosenje", true)) stavi

if(!strcmp(cmdtext, "/stopkosenje", true))

isto je i za pocetak posla
Poslednja Izmena: Mart 10, 2012, 20:06:34 POSLE PODNE od [BR]Maki187


Ja mapo neku kuću za dilera droge, i slučajno naletim na ovaj tut i pomogne mi za zcmd :D

Svaka čast, tut je odličan :)
Poslednja Izmena: Mart 11, 2012, 10:49:05 PRE PODNE od ...Frank...