Rent system

Započeo TONY x, Jul 24, 2019, 11:57:58 PRE PODNE

prethodna tema - sledeća tema

0 članova i 4 gostiju pregledaju ovu temu.

Problem(error/warning): Problem je oko rent systema. 1. Kada udjem ne freeza me i ne pokazuje mi poruku za rent.    2. Ako rentujem jedno i udjem u neko drugo umesto da kaze da vec imam jedno iznajmljeno, ono kaze da je to vozilo vec neko iznajmio (a nije). 3. Kada izadjem i opet udjem u svoje ispisuje da je to neko drugi rentovao.

Deo skripte: Ukoliko je potrebno poslacu i druge delove

public OnPlayerStateChange(playerid, newstate, oldstate)
{

    if(newstate == PLAYER_STATE_DRIVER)
    {
		if(VecRentano(GetPlayerVehicleID(playerid)))
		{
			SCM(playerid, -1, "Neko je vec rentao ovo vozilo.");
   			TogglePlayerControllable(playerid, 1);
        	RemovePlayerFromVehicle(playerid);
		}
	}
	return 1;
}


CMD:rent(playerid, params[])
{
	if(Rent[playerid] != -1)
	{
		SCM(playerid, ROZE, "Vec si iznajmio vozilo, prvo vrati iznjamljeno(/unrent) pa mozes opet rentat");
        TogglePlayerControllable(playerid, 1);
        RemovePlayerFromVehicle(playerid);
	}
	if(Rent[playerid] == GetPlayerVehicleID(playerid))
	{
		SCM(playerid, CRVENA, "Neko je vec rentovao ovo vozilo !");
        TogglePlayerControllable(playerid, 1);
        RemovePlayerFromVehicle(playerid);
	}
	if(GetPlayerVehicleID(playerid) >= RentVozilo[0] && GetPlayerVehicleID(playerid) <= RentVozilo[12])
	{
		SPD(playerid, DIALOG_RENT, DIALOG_STYLE_LIST, "Odaberite vreme","10 sec test      (100$)\n10 minuta      (150$)\n20 minuta      (200$)\n30 minuta      (300$)\n60 minuta      (350$)", ""zelena"U redu", ""crvena"Odustani");
	}
	else return SCM(playerid, CRVENA, "Nisi u RENT VOZILU !");

	return 1;
}

case DIALOG_RENT:
		{
	 		if(response)
			{
			    new vehicleid;
			    vehicleid = GetPlayerVehicleID(playerid);
	            if(listitem == 0)
				{
   					if(Rent[playerid] != -1)
					{
						RemovePlayerFromVehicle(playerid);
						TogglePlayerControllable(playerid, 1);
					}
					else
					{
		   				if(GetPlayerMoney(playerid) <  100) return SCM(playerid,-1,"Nema te dovoljno novca");
		   				GivePlayerMoney(playerid, -200);
		                Rent[playerid] = GetPlayerVehicleID(playerid);
		                SCM(playerid,-1, "Rentao si vozilo na 10 sec test, ako ga zelis vratit kucaj /unrent");
		                TogglePlayerControllable(playerid, 1);
		                SetTimerEx("IstekRenta",10000, 0, "i", playerid);
	                }
				}
				if(listitem == 1)
				{
   					if(Rent[playerid] != -1)
					{
						RemovePlayerFromVehicle(playerid);
						TogglePlayerControllable(playerid, 1);
					}
					else
					{
		                if(GetPlayerMoney(playerid) <  150) return SCM(playerid,-1,"Nema te dovoljno novca");
		                GivePlayerMoney(playerid,-100);
		                Rent[playerid] = GetPlayerVehicleID(playerid);
						SCM(playerid,-1, "Rentao si vozilo na 10 minuta, ako ga zelis vratit kucaj /unrent");
		                TogglePlayerControllable(playerid, 1);
		                SetTimerEx("IstekRenta",600000, 0, "i", playerid);
	                }
				}
				if(listitem == 2)
				{
   					if(Rent[playerid] != -1)
					{
						RemovePlayerFromVehicle(playerid);
						TogglePlayerControllable(playerid, 1);
					}
					else
					{
		          		if(GetPlayerMoney(playerid) <  200) return SCM(playerid,-1,"Nema te dovoljno novca");
		                GivePlayerMoney(playerid, -200);
		                Rent[playerid] = GetPlayerVehicleID(playerid);
		              	SCM(playerid,-1, "Rentao si vozilo na 20 minuta, ako ga zelis vratit kucaj /unrent");
		                TogglePlayerControllable(playerid, 1);
		                SetTimerEx("IstekRenta",1200000, 0, "i", playerid);
	                }
				}
				if(listitem == 3)
				{
   					if(Rent[playerid] != -1)
					{
						RemovePlayerFromVehicle(playerid);
						TogglePlayerControllable(playerid, 1);
					}
					else
					{
	            	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 30 minuta, ako ga zelis vratit kucaj /unrent");
	                TogglePlayerControllable(playerid, 1);
	                SetTimerEx("IstekRenta",1800000, 0, "i", playerid);
	                }

				}
				if(listitem == 4)
				{
   					if(Rent[playerid] != -1)
					{
						RemovePlayerFromVehicle(playerid);
						TogglePlayerControllable(playerid, 1);
					}
					else
					{
		            	if(GetPlayerMoney(playerid) <  350) return SCM(playerid,-1,"Nema te dovoljno novca");
		                GivePlayerMoney(playerid, -350);
		                Rent[playerid] = GetPlayerVehicleID(playerid);
						SCM(playerid,-1, "Rentao si vozilo na 60 minuta, ako ga zelis vratit kucaj /unrent");
		                TogglePlayerControllable(playerid, 1);
		                SetTimerEx("IstekRenta",3600000, 0, "i", playerid);
	                }
				}
			}
		}


Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): //
Slika/video ingame problema(obavezno ako je ingame problem): nema potrebe
Poslednja Izmena: Jul 24, 2019, 12:00:47 POSLE PODNE od TONY x

Takodje sam zaboravio da stavim

stock VecRentano(vehid)
{
	 //foreach(new i : Player)
	 for(new i; i < MAX_PLAYERS; i++)
	 {
		if(Rent[i] == vehid) return true;
	 }
	 return false;
}


Ako treba jos nesto recite

Sto se tice freeza
TogglePlayerControllabe(playerid,0); // - Freeza igraca
TogglePlayerControllabe(playerid,1); // - unfreeza igraca



Za dalje mi se neda pisati msm da si zbagao to u stock VecRentano

Pa gde može biti problem u vecrentano ?

Foreach nisam iskoristio već standardno
Poslednja Izmena: Jul 25, 2019, 12:48:13 POSLE PODNE od TONY x

Pokusaj ovako mada nisam siguran da li ce da ti radi
public OnPlayerStateChange(playerid, newstate, oldstate)
{


    if(newstate == PLAYER_STATE_DRIVER)
    {
    	for(new i; i < MAX_PLAYERS; i++)
    	{
    		if(Rent[i] == vehid)
    		{
	    		SCM(playerid, -1, "Neko je vec rentao ovo vozilo.");
	   			TogglePlayerControllable(playerid, 1);
	        	RemovePlayerFromVehicle(playerid);
    		}
    	}
	}
	return 1;
}[/i]

Sto se tice freeze napravi  se tajmer

stock h_freeze(playerid) {

    TogglePlayerControllable( playerid,  0 );
    SetTimerEx( "u_freeze", 2000,  false,  "i", playerid );

}

forward u_freeze(playerid);
public u_freeze(playerid) {

TogglePlayerControllable(playerid, 1);

}


Drugo u komandi nemas provjeru za ulazak u rent vozilo
Tr ece
if(Rent[playerid] != -1)

zamjeni s
if(Rent[playerid] == -1)

da ti prikaze poruku da li si rent ili ne

• G A M E M O D E •
• F I L T E R S C R I P T •
• T U T O R I A L •


Citat
You are what you believe yoursefl to be.

Citat: anderson87 poslato Jul 25, 2019, 21:35:04 POSLE PODNE
Sto se tice freeze napravi  se tajmer

stock h_freeze(playerid) {

    TogglePlayerControllable( playerid,  0 );
    SetTimerEx( "u_freeze", 2000,  false,  "i", playerid );

}

forward u_freeze(playerid);
public u_freeze(playerid) {

TogglePlayerControllable(playerid, 1);

}


Drugo u komandi nemas provjeru za ulazak u rent vozilo
Tr ece
if(Rent[playerid] != -1)

zamjeni s
if(Rent[playerid] == -1)

da ti prikaze poruku da li si rent ili ne


Da li sam ja glup ili ti retardiran  :D .Msm ja nikada nisam koristio tajmer za freeze i unfreeze, ne vidim ni potrebu koriscenja toga.

Citat: 002 poslato Jul 25, 2019, 22:34:11 POSLE PODNE

Da li sam ja glup ili ti retardiran  :D .Msm ja nikada nisam koristio tajmer za freeze i unfreeze, ne vidim ni potrebu koriscenja toga.

Koga boli qrac sta ti koristis, ja sto sam mu napisao nista nije pogresno,  da sam mu dao nesto sto nema nikakve veze sa temom pa hajd mozda bi i bio retardiran al da me nazivas retardom zbog koristenja tajmera za freeze... tu je ocigledno ispalo da si ti glup ne ja
• G A M E M O D E •
• F I L T E R S C R I P T •
• T U T O R I A L •


Citat
You are what you believe yoursefl to be.

zar ti nije lakse ovako? (dao sam ti primjer)
new Haze_VoziloRent[MAX_VEHICLES],Haze_VoziloRentano[MAX_VEHICLES];
// ongamemodeinit
Haze_VoziloRent[69] = 1;
Haze_VoziloRentano[69] = -1;

i onda tako primijenis da ne pozivas nonstop for petlju za igrače bezveze msm mozes ti i tako ali ovako je lakse bolje barem po meni, nadam se da si skontao na koji nacin mislim.


Poslednja Izmena: Jul 26, 2019, 00:42:42 PRE PODNE od youngdeal
69

Citat: anderson87 poslato Jul 25, 2019, 23:33:35 POSLE PODNE
Koga boli qrac sta ti koristis, ja sto sam mu napisao nista nije pogresno,  da sam mu dao nesto sto nema nikakve veze sa temom pa hajd mozda bi i bio retardiran al da me nazivas retardom zbog koristenja tajmera za freeze... tu je ocigledno ispalo da si ti glup ne ja


Vidi se da nisam pogresio, retard si cisti...

L3o

*

Evo ja sam ti složio nešto nabrzaka, ove poruke i to tvoje sam ostavio. Uzmi dole kod i samo nadogradi šta ti je još potrebno, usput nisam testiro niti compile-o već sam na site-u pisao - tako da ako ima neka greška tagaj me pa ćemo riješiti. Izvoli i pastebin -> https://pastebin.com/nHWm5zEV.

// rent system - b samp help

new 
	bool: _RentVeh[MAX_PLAYERS] = false
	_RentVehID[MAX_PLAYERS] = INVALID_VEHICLE_ID;


//
CMD:rent(playerid, params[]) {
	new vehicleid = GetPlayerVehicleID(playerid);
	if(_RentVeh[playerid] == true)
		return SCM(playerid, -1, "Vec si iznajmio vozilo, prvo vrati iznjamljeno(/unrent) pa mozes opet rentat"), RemovePlayerFromVehicle(playerid);
	
	foreach(new i: Player) {
		if(_RentVehID[i] == vehicleid) {
			SCM(playerid, CRVENA, "Neko je vec rentovao ovo vozilo !");
			RemovePlayerFromVehicle(playerid);
		}
	}
	
	if(vehicleid >= RentVozilo[0] && vehicleid <= RentVozilo[12]) {	
		ShowPlayerDialog(playerid, DIALOG_RENT, DIALOG_STYLE_LIST, "Odaberite vreme","Test (100$)\n....", ""zelena"U redu", ""crvena"Odustani");
	}
	else return SCM(playerid, CRVENA, "Nisi u RENT VOZILU !");
	return (true);
}

//
public OnPlayerDisconnect(playerid, reason) {
	if(_RentVeh[playerid] == true) 
		DestroyRentVehicle(playerid, _RentVehID[playerid]);
	return (true);
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
	case DIALOG_RENT: {
		if(response) {
	        
			if(listitem == 0) {
		   		if(GetPlayerMoney(playerid) <  100) return SCM(playerid,-1,"Nema te dovoljno novca");
		   		GivePlayerMoney(playerid, -200);
		        
				_RentVehID[playerid] = CreateVehicle(.....);
				_RentVeh[playerid] = (true);
				
		        SCM(playerid,-1, "Rentao si vozilo na 10 sec test, ako ga zelis vratit kucaj /unrent");
		        SetTimerEx("IstekRenta", 10*1000, (false), "dd", playerid, _RentVehID[playerid]);
			}
			// dalje ti dodaj jos koliko oces item-a listanih.
		}
	}
	return (true);
}

//
DestroyRentVehicle(playerid, vehicleid) {
	// Resetira varijable i brise vozilo. 
	
	_RentVeh[playerid] = (false);
	_RentVehID[playerid] = INVALID_VEHICLE_ID;
	DestroyVehicle(vehicleid);
	return (true);
}

//
forward IstekRenta(playerid, vehicleid);
public IstekRenta(playerid, vehicleid); {
	// Reset - Isteklo vrijeme renta.
	DestroyRentVehicle(playerid, vehicleid);
	
	SendClientMessage(playerid, -1, "Isteklo je vase vrijeme renta.");
	return (true);
}
Poslednja Izmena: Jul 26, 2019, 04:38:19 PRE PODNE od L3o
retired