Posao Dostavljac
UvodZnaci 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 pDostavaOvako to mora izgledatienum pInfo
{
pPosao,
pDostava,
pOprema
};
new PlayerInfo[MAX_PLAYERS][pInfo];
No ukoliko vec imate enum, samo dodajteposao,
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 snalazenjenew CP[MAX_PLAYERS];
Nakon toga definirat cemo broj vozila dostavljaca, koliko ce ih biti
stavite ovo na ispod vasih #definenew 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 statseINI_WriteInt(File,"Posao",PlayerInfo[playerid][pPosao]);//zapisuje pPosao u scriptfiles od igraca
Znaci to vam treba izgledati ovako u Y_INI funkciji za spremanjefunction 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[])
DodajteINI_Int("Posao",PlayerInfo[playerid][pPosao]);
To ovako treba izgledatifunction 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 podpublic OnPlayerDisconnect(playerid, reason)
Cemo postaviti da kad se igrac disconnecta da mu spremi posao
Ovako to treba izgledatipublic 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 najopsirnijeUkoliko nemate zcmd obavezno ga skinite, jer vam on olaksava sve sto se tice komandi!Komande1. 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 vasemuCMD: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 opremuCMD: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 lokacijeCMD: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 otkazif(!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 /dostavaCMD: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 stockovastock 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...podpublic OnPlayerEnterCheckpoint(playerid)
Ukoliko nista nemate dodajte ovo svepublic 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 napraviliTamo 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 doljeforward 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 ovdjeLabel i Pickup da se lakse snalazite
Dodajte ih pod OnGameModeInit,LabeliCreate3DTextLabel("{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);
PickupoviAddStaticPickup(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 problemOve removebuilding stavljate pod OnPlayerConnectRemoveBuildingForPlayer(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 :)
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 ! :)
Sve fino objasnjeno, svaka cast :)
Citat: ⤠♛ á´á´œá´á´€ â™› ⤠poslato April 16, 2016, 18:49:41 POSLE PODNE
Sve fino objasnjeno, svaka cast :)
Hvala :) bit ce jos tutova, ciljam na one kojih bas nema tu