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 <YSI\y_ini>
#include <YSI\y_commands>
Sljedece, moramo definirat neke stavri pa to uradimo ovako:
new Rent[MAX_PLAYERS];//ova ce nam varijabla pomoc oko rentanja vozila
#define RENT_VOZILA 999//s ovim definiramo dialog
new rentvozila[3];// 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[playerid] != -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[playerid] == 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[0] && GetPlayerVehicleID(playerid) <= rentvozila[2])//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[playerid] != -1)
{
if(v== Rent[playerid])
{
TogglePlayerControllable(playerid, 1);
}
SetVehicleToRespawn(Rent[playerid]);//respawna rentano vozilo
RemovePlayerFromVehicle(playerid);//izbacuje igraca iz vozila
Rent[playerid] = -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[0] && GetPlayerVehicleID(playerid) <= rentvozila[2])
{
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[playerid] = 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[playerid] = 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[playerid] = 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[playerid] = 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[playerid] = -1;
SetVehicleToRespawn(Rent[playerid]);
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[i] == vehid) return true;
}
return false;
}
Takodjer ovo stavite pod OnPlayerConnet
Rent[playerid] = -1;
Jos je preostalo da vam pokazem kako cete stavljat vozila:
rentvozila[0] = AddStaticVehicle(....);
rentvozila[1] = AddStaticVehicle(....);
rentvozila[2] = 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 :D
Ok je tutorial ali nasao sam gresku (morao sam da trazim).
Ovaj deo ti ne valja:
if(Rent[playerid] == 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[i] == 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...
dobar tut ,stvatno moze pomoc novim skrpiterima da shvate neke osnovne koncepte
,imam samo dvije zamjerke
kod "if(dialogid == RENT_VOZILA) "
tu su mogao skratit kod za dosta...
i foreach nije standardna funkcija ,tako da moze izbacivat erore onima koji nemaju
Ovo je pre 4 godina ako se ne varam :D .Jel moze neko da objasni kako da ubacim pored mog spawna ta rent vozila od AddStatic i to kako da napravim da bude ispred spawna sve je ovo vec na srw samo da se dodaju motori da mogu rentati,ispred mog spawna.Ako me niste dobro razumeli,kako da postavim motore