[TuT]Posao

Započeo Mr.Konj, April 16, 2016, 03:00:52 PRE PODNE

prethodna tema - sledeća tema

0 članova i 2 gostiju pregledaju ovu temu.


Posao Dostavljac
Uvod
Znaci evo odlucio sam i ja neki tutorial napravit, pokusat cu objasnit najbolje sto mogu

Dostavljac posao, imat cemo utovar i istovar i potom ponovno vracanje u bazu po platu
Naravno napravit cemo i uzimanje opreme za posao

Definiranje i spremanje

Pocinjemo, znaci za pocetak cemo definirati pod enum posao,opremu,i pDostava


Ovako to mora izgledati
enum pInfo
{
   pPosao,
   pDostava,
   pOprema
};
new PlayerInfo[MAX_PLAYERS][pInfo];


No ukoliko vec imate enum, samo dodajte
posao,
pDostava,
oprema


Definirat cemo i SCM kako nebi gubili vrijeme i pisali SendClientMessage
#define SCM SendClientMessage

Tamo gdje su vam new dodajte, to ce nam pomoci za ID-ove od checkpointa i lakse snalazenje
new CP[MAX_PLAYERS];

Nakon toga definirat cemo broj vozila dostavljaca, koliko ce ih biti
stavite ovo na ispod vasih
#define

new Dostavljac[7]; //7 vozila znaci, ali mi cemo ih imati 6, uvijek se stavlja +1 vise zato sto se racunaju id-ovi 0,1,2,3,4 itd..

Nakon toga tamo gdje vam Y_INI sprema racune stavite
Neznam dali imate funkciju da vam spremi statse

INI_WriteInt(File,"Posao",PlayerInfo[playerid][pPosao]);//zapisuje pPosao u scriptfiles od igraca

Znaci to vam treba izgledati ovako u Y_INI funkciji za spremanje
function SaveAccountStats(playerid)
{
    INI_SetTag(File,"data"); //otvara podatke od igraca
   
    INI_WriteInt(File,"Posao",PlayerInfo[playerid][pPosao]); //zapisuje posao od igraca znaci ako se promjenilo sa nezaposlen na 1 znaci zaposlen
    INI_Close(File); //zatvara podatke od igraca
    }
    return 1;
}


Sada cemo srediti da vam ucitava podatke nakon to igrac udje u server
tamo gdje vam je

function LoadUser_data(playerid,name[],value[])

Dodajte
INI_Int("Posao",PlayerInfo[playerid][pPosao]);

To ovako treba izgledati
function LoadUser_data(playerid,name[],value[]) //znaci ova funkcija se koristi kad se igrac loguje u svoj account, ucitava mu sve
{
    INI_Int("Posao",PlayerInfo[playerid][pPosao]); //Ucitava igracev posao
    return 1;
}


Sada pod
public OnPlayerDisconnect(playerid, reason)

Cemo postaviti da kad se igrac disconnecta da mu spremi posao
Ovako to treba izgledati

public OnPlayerDisconnect(playerid, reason)
{
    new INI:File = INI_Open(UserPath(playerid)); //Zapisuje podatke u igracevu fajl datoteku
   INI_SetTag(File,"data"); //Takoder zapisuje podatke u igracevu fajl datoteku
    INI_WriteInt(File,"Posao",PlayerInfo[playerid][pPosao]); //INI_WriteInt upisuje Posao u igracev fajl
    return 1;
}


Sada kad smo sredili da nam sprema posao lagano mozemo poceti sa komandama za zaposljavanje i za opremu, pokusat cu objasniti najopsirnije

Ukoliko nemate zcmd obavezno ga skinite, jer vam on olaksava sve sto se tice komandi!

Komande
1. Pravimo komandu za zaposljavanje, znaci ja vec imam mjesto di ce se uzimati posao i par vozila namjestenih, vi to mozete lagano promjeniti kordinate i ostale stvari po vasemu

CMD:posao(playerid, params[])
{
if(PlayerInfo[playerid][pPosao] < 0) return SendClientMessage(playerid, -1, "{FF0000}Greska: {FFFFFF}Vec imate posao!");//izbacuje poruku igracu ukoliko je vec zaposlen
if(IsPlayerInRangeOfPoint(playerid, 2,  2272.6143,-2353.6563,13.5682))//provjera dali je igrac na mjestu kordinata za uzimanje posla dostavljac
{ //znaci ovo sve unutar ove zagrade vrsi radnju ukoliko igrac nije zaposlen i ukoliko je na mjestu zaposljavanja
SendClientMessage(playerid, -1, "{00FF00}Posao: {FFFFFF}Zaposlili ste se kao {00FF00}Dostavljac{FFFFFF}, radite marljivo !."); //salje igracu poruku da se uspijesno zaposlio
SCM(playerid, COLOR_GRAD1, "{00FF00}Posao: {FFFFFF}Vasa oprema se nalazi u kabinetu do vas /oprema, za pomoc");
PlayerInfo[playerid][pPosao] = 1;//postavlja igracu ID posla, znaci za dostavljaca je ID 1, za dalje poslove stavite 2,3,4 i tako dalje, ID 0 je nezaposlen
}
return 1;
}


Idemo sada napraviti komandu sa kojom ce igrac uzeti opremu
CMD:oprema(playerid, params[])
{
if(PlayerInfo[playerid][pPosao] != 1) return SCM(playerid, COLOR_GRAD1, "{FF0000}Greska: {FFFFFF}Niste dostavljac"); //ukoliko je nezaposlen salje mu ovu poruku
if(PlayerInfo[playerid][pOprema] != 0) return SCM(playerid, COLOR_GRAD1, "{FF0000}Greska: {FFFFFF}Vec imate opremu"); //ako igrac ima upremu salje mu poruku
if(IsPlayerInRangeOfPoint(playerid, 2, 2268.4680,-2350.3628,13.5682)) //provjerava dali je igrac na mjestu uzimanja opreme
{ //unutar ove zagrade se vrsi radnja ukoliko je igrac dostavljac i ukoliko je na mjestu uzimanja opreme
SendClientMessage(playerid, COLOR_GRAD1, "{00FF00}Posao: {FFFFFF}Uzeli te opremu, sjednite u kamion i zapocnite prijevoz produkata");
SetPlayerSkin(playerid, 101); //postavlja igracu skin ID 101, vi mozete naravno to promjeniti po vasem ukusu
PlayerInfo[playerid][pOprema] = 1; //postavlja igracu ID opreme na 1, znaci da ima opremu, kad bi htjeli da mu maknemo opremu stavili bi 0
}
return 1;
}


Sada komanda za /otkaz, vi tu stavite kordinate u svojoj opstini ili gdje god vi zelite da vam bude za otkaz lokacija, ja cu samo ovako objasniti bez lokacije
CMD:otkaz(playerid, params[])
{
   if(PlayerInfo[playerid][pPosao] == 0) return SendClientMessage(playerid, COLOR_GRAD1, "{FF0000}Greska: {FFFFFF}Niste zaposleni"); //Provjerava dali igrac ima neki ID posla, ako nema salje mu ovu poruku kao sto vidite
   { //vrsi se radnja unutar zagrada ukoliko je igrac uspijesno dao otkaz
   SCM(playerid, COLOR_GRAD1, "{FF8000}Burza: {FFFFFF}Dali ste otkaz, sada ste nezaposleni"); //salje igracu poruku da je uspijesno dao otkaz
   PlayerInfo[playerid][pPosao] = 0; //postavlja igracu ID posla na 0, znaci ID 0 je nezaposlen uvijek
   }
   return 1;
}


Usput da vam pokazem kako cete ubaciti da igrac mora biti na lokaciji kako bih dao otkaz
if(!IsPlayerInRangeOfPoint(playerid, 3.0, x, y, z)) return SCM(playerid, COLOR_GRAD1, "{FF0000}Greska:{FFFFFF}Niste na lokaciji za davanje otkaza");  //znaci ovu liniju dodajte iznad if(PlayerInfo[playerid][pPosao] u komandi otkaz, ubacite svoje x, y, z kordinate

Sada cemo napraviti komandu za pocetak posla to ce biti /dostava
CMD:dostava(playerid, params[])
{
if(PlayerInfo[playerid][pPosao] != 1) return SendClientMessage(playerid, COLOR_GRAD1, "{FF0000}Greska: {FFFFFF}Niste zaposleni kao Dostavljac"); //Ukoliko je igracu ID posla 0, znaci nezaposlen salje mu ovu poruku
if(!VoziloDostavljaca(GetPlayerVehicleID(playerid))) return SendClientMessage(playerid, -1, "{FF0000}Greska: {FFFFFF}Niste u vozilu dostavljaca"); //ukoliko igrac nije u kombiju dostavljaca salje mu ovu poruku
    if(PlayerInfo[playerid][pDostava] == 1) return SendClientMessage(playerid, -1, "{FF0000}Greska: {FFFFFF}Vec ste zapoceli voznju produkata"); //ukoliko je igracu pDostava na 1 vec salje mu poruku da ima vec posao u tijeku
    {
    SCM(playerid, COLOR_GRAD1, "{00FF00}Dostavljac: {FFFFFF}Zapoceli ste posao dostava produkata! idite na utovar kako bi utovarili pakete!"); //salje igracu poruku da ide na lokaciju utovara
    PlayerInfo[playerid][pDostava] = 1; //postavlja ID dostave na 1 znaci da se posao radi i da je posao u tijeku, kako igrac nebi konstantno palio /dostava
    CP[playerid] = 100; //postavlja ID checkpointa
    SetPlayerCheckpoint(playerid, 2049.6191, -2089.4775, 13.0238, 13); //postavlja checkpoint na lokaciju utovara
    }
    return 1;
}


Poslovna vozila

Sada idemo napraviti stock za poslovno vozilo objasnit cu
Dodajte ovo iznad vasih komandi, kod stockova

stock VoziloDostavljaca(carid)
{
for(new i = 0; i < sizeof(Dostavljac); i++)
{
if(carid == Dostavljac[i]) return 1; //provjerava dali je to Dostavljac[7]; vozilo
}
return 0;
}


Znaci zbog ovoga smo napravili new Dostavljac[7]; ovaj stock je napravljen za vozilodostavljaca

Sada kad imamo rijesen stock za poslovno vozilo mozemo ici dalje...pod
public OnPlayerEnterCheckpoint(playerid)

Ukoliko nista nemate dodajte ovo sve
public OnPlayerEnterCheckpoint(playerid) //znaci public kad igrac stane na checkpoint
{
if(CP[playerid]==100) //ID Checkpointa znaci 100 koji smo stavili kad smo zapoceli posao sa /dostava komandom
{
if(!VoziloDostavljaca(GetPlayerVehicleID(playerid))) //Provjerava dali je igrac i dalje u vozilu dostavljaca
{
PlayerInfo[playerid][pDostava] = 0; //postavlja igracu ID radnje posla na 0 znaci prekida mu posao
DisablePlayerCheckpoint(playerid); //gasi mu sve checkpointe
SendClientMessage(playerid, -1, "{FF0000}Posao: {FFFFFF}Posao prekinut, niste u vozilu dostavljaca"); //salje mu poruku i obavjestava ga
}
SetTimer("DostavljacUtovar",1000*10, 0); //tajmer za utovar, 1000*10 je 10 sekundi, vi to mozete promjeniti naravno
GameTextForPlayer(playerid, "Utovaranje robe..", 1, 1); //postavlja mu gametext preko screena i obavjestava ga da je utovaranje robe pocelo
TogglePlayerControllable(playerid, 0); //zamrzava igraca da se nemoze micati dok se roba utovara
DisablePlayerCheckpoint(playerid); //gasi mu sve checkpointe tjekom utovara
}
if(CP[playerid]==101)//DOSTAVLJAC ISTOVAR
{
if(!VoziloDostavljaca(GetPlayerVehicleID(playerid))) //provjerava dali se igrac i dalje nalazi u vozilu dostavljaca
{
PlayerInfo[playerid][pDostava] = 0; //namjesta mu ID radnje posla na 0 i prekida posao
DisablePlayerCheckpoint(playerid); //gasi mu sve checkpointe
SendClientMessage(playerid, -1, "{FF0000}Posao: {FFFFFF}Posao prekinut, niste u vozilu dostavljaca"); //obavjestava ga
    return 1;
}
SetTimer("DostavljacIstovar",1000*10,0); //postavlja mu tajmer 10 sekundi vi to mozete promjeniti naravno
    TogglePlayerControllable(playerid, 0); //zamrzava ga da se nemoze micati tijekom istovara
DisablePlayerCheckpoint(playerid); //gasi mu checkpointe tjekom istovara
}
if(CP[playerid]==102) //ID koji je tajmer postavio, salje igraca u bazu od dostavljaca po pare
{
new vID; //ovo nam treba kako bi respawnali vozilo od igraca, to jest kombi poslovni
SCM(playerid, COLOR_GRAD1, "{00FFFF}Isplata: {FFFFFF} Odvezao si jednu turu i zaradio 500$"); //obavjestava ga o isplati
PlayerInfo[playerid][pDostava] = 0; //postavlja mu ID radnje na 0
DisablePlayerCheckpoint(playerid); //gasi mu sve checkpointe
SetVehicleToRespawn(vID); //respawna mu kombi
GivePlayerCash(playerid, 500); //daje igracu zaradu od 500$
}
    return 1;
}


Tajmeri

Eh sada kad smo sa time gotovi moramo srediti tajmere koje smo tu napravili
Tamo gdje su vam ostali tajmeri, mislim na forward i public zajedno dodajte
Znaci ovdje se vrsi radnja od onih 2 SetTimer("DostavljacUtovar", 1000*10,1,0); koje smo gore postavili, nakon sto 10 sekundi predje tajmer vrsi radnju koja se nalazi ovdje dolje

forward DostavljacUtovar(playerid);
public DostavljacUtovar(playerid)  //proslo 10 sekundi i vrsi se radnja, postavljanje novog CP-a i odredista i odmrzava se igrac
{
SCM(playerid, COLOR_GRAD1, "{00FF00}Dostavljac: {FFFFFF}Utovarili ste pakete, vozite do istovara na odrediste"); //kada igracu zavrsi onih 10 sekundi namjesteno na tajmeru salje mu poruku da je roba utovarena
SetPlayerCheckpoint(playerid, 217.9389, -231.4781, 1.4002, 6); //postavlja mu novu lokaciju checkpointa to jest Istovar
CP[playerid]= 101; //ID checkpointa ovog gore ^^
TogglePlayerControllable(playerid, 1); //Odmrzava igraca, 1 znaci odmrznut a 0 zamrznut
return 1;
}

forward DostavljacIstovar(playerid);
public DostavljacIstovar(playerid) //proslo 10 sekundi i vrsi se radnja, postavljanje novog CP-a i odredista i odmrzava se igrac
{
CP[playerid]= 102; //postavlja igracu ID checkpointa
TogglePlayerControllable(playerid, 1); //odmrzava igraca nakon utovara
SetPlayerCheckpoint(playerid, 2280.3503, -2338.5566, 12.4762, 6); //postavlja igracu checkpoint lokaciju to jest, salje ga u bazu po platu
SendClientMessage(playerid, COLOR_GRAD1, "{00FF00}Dostavljac: {FFFFFF}Istovarili ste robu, sada idite u bazu po platu"); //obavjestava igraca da ide u bazu po platu
return 1;
}


Dodavanje Kombija i zavrsni radovi

//================================[DOSTAVLJAC]=======================================
Dostavljac[0] = CreateVehicle(414, 2284.8330, -2356.9536, 13.5690, 24.9600, -1, -1, 100);
Dostavljac[1] = CreateVehicle(414, 2287.6184, -2354.6724, 13.5690, 24.9600, -1, -1, 100);
Dostavljac[2] = CreateVehicle(414, 2290.4658, -2351.8228, 13.5690, 24.9600, -1, -1, 100);
Dostavljac[3] = CreateVehicle(414, 2293.3662, -2349.0701, 13.5690, 24.9600, -1, -1, 100);
Dostavljac[4] = CreateVehicle(414, 2296.1062, -2346.2478, 13.5690, 24.9600, -1, -1, 100);
Dostavljac[5] = CreateVehicle(414, 2298.6824, -2343.4363, 13.5690, 25.1400, -1, -1, 100);
Dostavljac[6] = CreateVehicle(414, 2301.5647, -2340.6758, 13.5690, 25.1400, -1, -1, 100);


Sada vidite ovdje zasto sam vam rekao da se stavlja 7 a ne 6 pod new Dostavljac[7];, zato sto imate 7 vozila jer se i 0 racuna ovdje

Label i Pickup da se lakse snalazite

Dodajte ih pod OnGameModeInit,

Labeli

Create3DTextLabel("{FF8000}Dostavljac oprema\n{FFFFFF}Da uzmete opremu /oprema", COLOR_GRAD1, 2268.4680,-2350.3628,13.5682, 11.0, 0, 0);
Create3DTextLabel("{FF8000}Posao Dostavljac\n{FFFFFF}Da se zaposlite upisite\n {FFFFFF}/posao", COLOR_GRAD1, 2272.6143,-2353.6563,13.5682, 13.0, 0, 0);


Pickupovi
AddStaticPickup(1275, 1, 2268.4680,-2350.3628,13.5682, 0); //DOSTAVLJAC OPREMA
AddStaticPickup(1210, 1, 2272.6143,-2353.6563,13.5682, 0); //DOSTAVLJAC POSAO


I za kraj samo dodajte ova 3 remove buildinga da vam se maknu 3 zgrade, ukoliko neko zeli mapu posla dat cu mu nije problem

Ove removebuilding stavljate pod OnPlayerConnect
RemoveBuildingForPlayer(playerid, 3686, 2288.2656, -2342.0703, 15.5625, 0.25);
RemoveBuildingForPlayer(playerid, 3627, 2288.2656, -2342.0703, 15.5625, 0.25);
RemoveBuildingForPlayer(playerid, 1412, 2282.0703, -2312.0469, 13.7578, 0.25);
RemoveBuildingForPlayer(playerid, 1412, 2285.8281, -2315.7578, 13.7578, 0.25);


Kraj

Nadam se da sam pomogao barem nekome, nisam nikako radio tutorijale, bilo mi malo dosadno pa sam se odlucio malo pozabavit uzeo vremena od 12h do 3 ujutro.
Eto, ako nesto ne stima i ako sam nesto zaboravio recite samo.
Pokusao sam napraviti sa sto vise objasnjavanja.
A ako tutorijal nevalja jbg recite

Pomocice pocetnicima :)
Srecu cine male stvari i veliko pivo!
x3M-Gaming USKORO!

Valjda
Citat: VuKaN poslato April 16, 2016, 03:09:08 PRE PODNE
Pomocice pocetnicima :)

valjda hoce ;) mislim ja bi to jos opsirnije napiso al kasno sam se sjetio radit

Ma dobro je, lijepo si sve objasnjavao i svaka cast ! :)
KOPAJ KRIPTOVALUTU TELEFONOM! >>> SAZNAJ VIŠE <<<
POČNI RADITI KAO PREDAVAČ ENGLESKOG JEZIKA! >>> SAZNAJ VIŠE <<<

Sve fino objasnjeno, svaka cast :)