[POMOC]Pomjesani id


Započeo Marchelo, Jun 10, 2016, 10:05:34 PRE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Moj Gamemode od 0:
Bio sam pravio rent sistem motora i sve radi nema erora niti nista i kad dodem ig prvo moram ukucati /unrent tek onda sjest na vozilo i rentati ga.Ali stvar
je u tome da meni skripta sva vozila stavlja pod rent ne samo ta odredena nego sve
:
Koji dio skripte da stavim:
Neke slike/video za lakse dobivanje pomoci(neobavezno):
MARCHELO

Posalji nam kod gde ti se zapisuje rentano vozilo.


Moras da odredis broj vozila koliko imas za rent npr RentVozila[20];
I onda da definises u OnGameModeInit tih npr 20 rent vozila , RentVozilo[0] = AddStaticVehicleEx(.....
i tako sva vozila sto imas za rent i onda u CMD:rent ili kako si vec stavio das uslov da igrac mora da bude u vozilima za rent

Evo ovako sve je dobro definirano...
Imam jedno vozilo koje je probno
new Rent[1] definirano je 1 jer dodajemo za 1 vise
i kada je tako definirano ne radi! znaci onda mi ne izbacuje poruku da mogu rentati to vozilo niti nista
a kada stavim za dva vise onda mi izbacuje poruku.....
i jos k tome mogu usvako vozilo sjest i ikucat rent sto nema logike a nisu definirana ta vozila
i kada udem na server prvo moram kucati /unrent da bi mogao rentati
MARCHELO

pa pod onplayerdiscconect stavi da mu se unrenta -.-
heroin rap - Moskri u kuci, od sledece lajne glava ce mi puci

Citat: ophion poslato Jun 10, 2016, 22:29:16 POSLE PODNE
pa pod onplayerdiscconect stavi da mu se unrenta -.-
Da ali nisam rentao vozilo.Tako da nemoram unrent
MARCHELO

Vidim da nikakve kodove nisi slao ali ajde da ti od prilike objasnim kako bi to trebalo da izgleda. Uzmemo primer 1 obicnu varijablu koju bi stavio negde na vrh scripte kod ostalih slicnih.
new RentVozilo[MAX_PLAYERS];


Tu istu varijablu bi trebalo da u public OnPlayerConnect postavimo na 0.
RentVozilo[playerid] = 0;


A isto tako bi trebali i kod publica OnPlayerDisconnect da ponistimo to da bi se ajd da kazemo vozilo rtc i da bi neko drugi mogao da ga iskoristi jer je ovaj otisao sa servera.
if (RentVozilo[playerid] > 0) // Proveravamo da li igrac ima na sebi rentano vozilo jer ako je na 0 kao sto smo podesili na konekciji znaci da nema vozilo ako je vise od 0 znaci da imamo rent vozilo
{
    SetVehicleToRespawn(RentVozilo[playerid]); // Rtc rent vozilo odnosno ID vozila koji smo zapisali na varijablu kada smo rentali vozilo
    RentVozilo[playerid] = 0; // Takodje mozemo opet postaviti i varijablu na 0
}


I zatim kod samog renta trebas da postavis ID vozila na ovu varijablu... To je veoma jednostavno samo proveris ID vozila i zapises mu, naravno to stavljas tamo kod renta.
RentVozilo[playerid] = GetPlayerVehicleID(playerid);


I to bi bila sva filozofija sada ako ces da pravis neku komandu /unrent jednostavno samo proveris da li igrac vec ima rent vozilo ili ne eno ti primer gore sto sam pisao za public OnPlayerDisconnect i onda mu sklonis isto to ili mu saljes poruku da nema rent vozilo...
Poslednja Izmena: Jun 10, 2016, 23:04:34 POSLE PODNE od â–… â–† â–ˆ Rudimental â–ˆ â–† â–…

evo imamo ovako sve

new Rent[MAX_PLAYERS];
#define RENT_VOZILA 999
new rvozila[3];
forward IstekRenta(playerid);
public IstekRenta(playerid)
{
    Rent[playerid] = -1;
    SetVehicleToRespawn(Rent[playerid]);
	RemovePlayerFromVehicle(playerid);
	TogglePlayerControllable(playerid, 1);
	return 1;
}


rvozila[0] = AddStaticVehicleEx(522,1669.8160000,-1881.5861000,13.2070000,0.0000000,-1,-1,15000); //NRG-500
  rvozila[1] = AddStaticVehicle(522,1669.8160000,-1881.5861000,13.2070000,0.0000000,-1,-1,15000); //NRG-500
  rvozila[2] = AddStaticVehicle(522,1669.8160000,-1881.5861000,13.2070000,0.0000000,-1,-1,15000); //NRG-500


ali ja mogu sva vozila i dalje rentati
evo komande
YCMD:rent(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) >= rvozila[0])
{
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;
}
YCMD:unrent(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;
}
YCMD:exit(playerid, params[], help)
{
#pragma unused help
#pragma unused params
if(GetPlayerVehicleID(playerid) >= rvozila[0] && GetPlayerVehicleID(playerid) <= rvozila[2])
{
RemovePlayerFromVehicle(playerid);
TogglePlayerControllable(playerid, 1);
}
return 1;
}
stock VecRentano(vehid)
{
 foreach(Player,i)
 {
	if(Rent[i] == vehid) return true;
 }
 return false;
}
MARCHELO

Komanda za rent bi trebala ovako da ti bude.
YCMD:rent(playerid, params[], help)
{
	#pragma unused help
	#pragma unused params
	new
	    carid = GetPlayerVehicleID(playerid);
	if (!RentVozila(carid)) return SCM (playerid, -1, "Nisi u vozilu za iznjamljivanje vozila");
	if (Rent[playerid] > 0) return SCM (playerid, -1, "Vec si iznajmio vozilo, prvo vrati iznjamljeno pa mozes opet rentat");
	else
	{
		foreach (Player, i)
		{
			if (Rent[i] == carid) return SCM(playerid, -1, "Neko je vec rentao ovo vozilo.");
		}
		SPD (playerid, RENT_VOZILA, DIALOG_STYLE_LIST, "Odaberite vrijeme","10 minuta\n20 minuta\n30 minuta\n60 minuta", "U redu", "Odustani");
	}
	return 1;
}


Takodje uradim sam public za ta rent vozila da bude jednostavnije jer ces mozda jos negde koristiti pa ako ga nemas evo.
forward RentVozila(carid);
public RentVozila(carid)
{
	for (new i = 0; i < sizeof(rvozila); i++)
	{
		if (carid == rvozila[i]) return 1;
	}
	return 0;
}


I to bi trebalo sada da ti bude ok ali ono sto mene sada isto brine jeste tvoj public IstekRenta znaci ti na varijablu na kojoj postavljas ID rent vozila isto tako mu i skidas to po -1 kao neko vreme i kako on sada da dobije tacno vreme renta odnosno tu se ustvari i desi problem do pomesanja ID-ova jer ti njemu kada zapises ID vozila koji je rentao isto tako odma mu i menjas taj ID zbog tog isteka. Moras napraviti 2 varijable jednu za rent gde ce biti samo ID da bi ti ove provere u komandi dobro radile i drugu za vreme renta i onda nece dolaziti do mesanja ID-ova...

da ali kada kucam komandu /RENT onda mi izbacuje dialog u kojem biram koliko minuta zelim rentati vozilo
MARCHELO

Jel me sada zaebavas ili sta ? :D Taj dialog si ti uradio... :D

normalno da ga nisam ja radio hahaha
MARCHELO

Pa ne znam onda ko ga je radio ali si ti poslao kodove sa tim i ne vidim sta je tu problem :D