Započeo Crazyn3ss
•21. Jun 2013.• Zaključano[TUT] Rent vozila | Na odredeno vrijeme
5,713
pregleda
33
postova
Kingpin
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
1,208
Postovi:
44
Teme:
Pridružio se:Jan. 2012
21. Jun 2013.
TUT - Rent Vozila by Crazyn3ss
UVOD
Ovo je moj prvi tutorial, pa ako ima gresaka slobodno mi javite na PM/PP, ili ovdje u temi komentirajte. Ovaj tutorial radim, jer sam vidio da jednom clanu treba pomoc oko toga, pa da se ne mucim a i da skuzi lakse.
PA KRENIMO
Tutorial cemo radit uz pomoc YSI-a, komande ce biti u YCMD procesoru. Ukoliko nemate YSI, skinite jer ce vam biti potreban. Prvo sto cemo uradit je postavi include u mod a to ce te uradit ovako:
#include
#include Sljedece, moramo definirat neke stavri pa to uradimo ovako:
new Rent;//ova ce nam varijabla pomoc oko rentanja vozila
#define RENT_VOZILA 999//s ovim definiramo dialog
new rentvozila;// ovo ce nam pomoc pri oznacavanju rent vozila Mozemo krenit na komandu. Komanda bi trebala izgledati ovako:
YCMD:iznajmivozilo(playerid, params[], help)
{
#pragma unused help
#pragma unused params
if(Rent != -1)//ovaj dio provjerava dali smo vec rentali neko od rentanih vozila
{
SCM(playerid, -1, "Vec si iznajmio vozilo, prvo vrati iznjamljeno pa mozes opet rentat");
return 1;
}
if(Rent == GetPlayerVehicleID(playerid))//ovaj dio provjerava dali je neko vec rentao to vozilo
{
SCM(playerid, -1, "Neko je vec rentao ovo vozilo.");
return 1;
}
if(GetPlayerVehicleID(playerid) >= rentvozila && GetPlayerVehicleID(playerid) <= rentvozila)//ovaj dio provjerava dal je igrac u vozilu za rentanje a ako nije, izbacit ce poruku da nije, a ako je izbacit ce dialog
{
SPD(playerid,RENT_VOZILA,DIALOG_STYLE_LIST, "Odaberite vrijeme","10 minuta\n20 minuta\n30 minuta\n60 minuta", "U redu", "Odustani");
}
else return SCM(playerid, -1, "Nisi u vozilu za iznjamljivanje vozila");
return 1;
}
Sljedi komanda s kojom vracamo rentano vozilo, prije vremena.
YCMD:vrativozilo(playerid, params[], help)
{
#pragma unused help
#pragma unused params
new v= GetPlayerVehicleID(playerid);
if(Rent != -1)
{
if(v== Rent)
{
TogglePlayerControllable(playerid, 1);
}
SetVehicleToRespawn(Rent);//respawna rentano vozilo
RemovePlayerFromVehicle(playerid);//izbacuje igraca iz vozila
Rent = -1;//postavlja varijablu na -1 sto znaci da ce igrac ponovno moc rentat vozilo
SCM(playerid,-1,"Vratio si rentano vozilo");
}
return 1;
}Komanda s kojom napustamo vozilo, ukoliko necemo rentat:
YCMD:exit(playerid, params[], help)
{
#pragma unused help
#pragma unused params
if(GetPlayerVehicleID(playerid) >= rentvozila && GetPlayerVehicleID(playerid) <= rentvozila)
{
RemovePlayerFromVehicle(playerid);
TogglePlayerControllable(playerid, 1);
}
return 1;
}Komande su gotove, sad mozemo preci na dialog. To cete ubacit pod OnDialogResponse. Dialog cete ovako uradit:
if(dialogid == RENT_VOZILA)
{
if(response)
{
if(listitem == 0)
{
if(GetPlayerMoney(playerid) < 50) return SCM(playerid,-1,"Nema te dovoljno novca");//postavite kaku god ocete cijenu
GivePlayerMoney(playerid,-50);//oduzima vam novac
Rent = GetPlayerVehicleID(playerid);//pamti vam vozilo u kojem sjedit, tocnije id
SCM(playerid,-1, "Rentao si vozilo na 10 minuta, ako ga zelis vratit kucaj /vrativozilo");
TogglePlayerControllable(playerid, 1);//odmrzaje igraca je zamrznit bio u autu
SetTimerEx("IstekRenta",600000, 0, "i", playerid);//timer koji se postavlja na 10 minuta
}
if(listitem == 1)
{
if(GetPlayerMoney(playerid) < 100) return SCM(playerid,-1,"Nema te dovoljno novca");
GivePlayerMoney(playerid,-100);
Rent = GetPlayerVehicleID(playerid);
SCM(playerid,-1, "Rentao si vozilo na 20 minuta, ako ga zelis vratit kucaj /vrativozilo");
TogglePlayerControllable(playerid, 1);
SetTimerEx("IstekRenta",1200000, 0, "i", playerid);
}
if(listitem == 2)
{
if(GetPlayerMoney(playerid) < 150) return SCM(playerid,-1,"Nema te dovoljno novca");
GivePlayerMoney(playerid,-150);
Rent = GetPlayerVehicleID(playerid);
SCM(playerid,-1, "Rentao si vozilo na 30 minuta, ako ga zelis vratit kucaj /vrativozilo");
TogglePlayerControllable(playerid, 1);
SetTimerEx("IstekRenta",1800000, 0, "i", playerid);
}
if(listitem == 3)
{
if(GetPlayerMoney(playerid) < 300) return SCM(playerid,-1,"Nema te dovoljno novca");
GivePlayerMoney(playerid,-300);
Rent = GetPlayerVehicleID(playerid);
SCM(playerid,-1, "Rentao si vozilo na 60 minuta, ako ga zelis vratit kucaj /vrativozilo");
TogglePlayerControllable(playerid, 1);
SetTimerEx("IstekRenta",3600000, 0, "i", playerid);
}
}
}Sada cemo uradit timer, koji sluzi kad istekne vrijeme, da igraca izbaci iz vozila i vozilo se respawna, takodjer se igracu mice rent varijabla:
forward IstekRenta(playerid);
public IstekRenta(playerid)
{
Rent = -1;
SetVehicleToRespawn(Rent);
RemovePlayerFromVehicle(playerid);
TogglePlayerControllable(playerid, 1);
return 1;
}Sada cemo napravit da kad igrac ude u vozilu, da mu ispise, dal oce rentat ili ce napustit vozilo, taj dio cemo stavit pod callback OnPlayerStateChange:
if(newstate == PLAYER_STATE_DRIVER)
{
if(VecRentano(GetPlayerVehicleID(playerid)))//ovaj dio provjerava dali je neko vec rentao to vozilo
{
SCM(playerid, -1, "Neko je vec rentao ovo vozilo.");
return 1;
}
}Ovo dodajte na kraj moda, to je za provjeravanje vozilda dali su rent vozila:
stock VecRentano(vehid)
{
foreach(Player,i)
{
if(Rent == vehid) return true;
}
return false;
}Takodjer ovo stavite pod OnPlayerConnet
Rent = -1;Jos je preostalo da vam pokazem kako cete stavljat vozila:
rentvozila = AddStaticVehicle(....);
rentvozila = AddStaticVehicle(....);
rentvozila = AddStaticVehicle(....);ZAKLJUCAK
Mislim da je to to, ukoliko ima gresaka, molio bih da prijavite, nadam se da sam nekom i pomogo, barem se nadam tom jednom clanu koji trazio pomoc u vezi toga. Kad mi server krene u rad, vjerovatno da cu vise objavljivat neke tutove i fs-ove, sad trenunto nemam toliko vremena. Ovaj sam tut piso u dva navrata. Pozdrav svima 😄
Kingpin
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
1,208
Postovi:
44
Teme:
Pridružio se:Jan. 2012
21. Jun 2013.
David (Sabljak) A.k.A SABO(T) wrote on June 21, 2013, 8:28 pm:
Vidim lijepo sve objasnjeno koliko sam uhvatio
Samo dodaj #pragma unused za YCMD komande da ne baca igracima warninge..
Samo dodaj #pragma unused za YCMD komande da ne baca igracima warninge..
ma to znaju i sami, al et stavit kad dodem..
Kingpin
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
1,343
Postovi:
84
Teme:
Pridružio se:Okt. 2012
Godfather
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
1,725
Postovi:
152
Teme:
Pridružio se:Apr. 2011
24. Jun 2013.
Ok je tutorial ali nasao sam gresku (morao sam da trazim).
Ovaj deo ti ne valja:
Tako neces proveriti sve igrace da li je neko vec rentao to isto vozilo, ja sam napravio funkciju:
I onda bi umesto onog tvog koda islo:
Sa tom funkcijuom on ce proveriti da li je neko od igraca vec rentao to vozilo onako po tvome je proveravao samo od igraca koji je kucao komandu...
Ovaj deo ti ne valja:
if(Rent == GetPlayerVehicleID(playerid))//ovaj dio provjerava dali je neko vec rentao to vozilo
{
SCM(playerid, -1, "Neko je vec rentao ovo vozilo.");
return 1;
}Tako neces proveriti sve igrace da li je neko vec rentao to isto vozilo, ja sam napravio funkciju:
stock VecRentano(vehid)
{
foreach(Player,i)
{
if(Rent == vehid) return true;
}
return false;
}I onda bi umesto onog tvog koda islo:
if(VecRentano(GetPlayerVehicleID(playerid)))//ovaj dio provjerava dali je neko vec rentao to vozilo
{
SCM(playerid, -1, "Neko je vec rentao ovo vozilo.");
return 1;
}Sa tom funkcijuom on ce proveriti da li je neko od igraca vec rentao to vozilo onako po tvome je proveravao samo od igraca koji je kucao komandu...
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava
