Skocz do zawartości
Jaev

Nie odbiera paliwa

Rekomendowane odpowiedzi

public OnGameModeInit()
{
	SetTimer("OdbierzPaliwo", ODBIERZ_PALIWO, true); // odpalamy timer ;)
	for(new i = 0; i < MAX_VEHICLES; i++)
	{
		Fuel[i] = MAX_PALIWO_REST; // żeby nie było pustych baków
	}
    return 1;
                                    
}
#define ODBIERZ_PALIWO 3000
forward OdbierzPaliwo(playerid);
public OdbierzPaliwo(playerid)
{
	for(new i; i < MAX_VEHICLES; i++)
	{
		new vehicleid = GetPlayerVehicleID(playerid),
			engine, lights, alarm, doors, bonnet, boot, objective;
		GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
		if(engine == 1)
		{
			if(Fuel[vehicleid] > 0)
			{
				new mid = GetVehicleModel(vehicleid);
				if(mid == 509 || mid == 481 || mid == 510) { return 1; }
				else
				{
					new Speed = PobierzPredkoscPojazdu(vehicleid);
					if(Speed <= 5){ Fuel[vehicleid] = Fuel[vehicleid] - 0.1; }
					if(Speed > 5 && Speed <= 10){ Fuel[vehicleid] = Fuel[vehicleid] - 0.1; }
					if(Speed > 10 && Speed <= 30){ Fuel[vehicleid] = Fuel[vehicleid] - 0.2; }
					if(Speed > 30 && Speed <= 50){ Fuel[vehicleid] = Fuel[vehicleid]- 0.3; }
					if(Speed > 50 && Speed <= 70){ Fuel[vehicleid] = Fuel[vehicleid] - 0.4; }
					if(Speed > 70 && Speed <= 90){ Fuel[vehicleid] = Fuel[vehicleid] - 0.5; }
					if(Speed > 90 && Speed <= 100){ Fuel[vehicleid] = Fuel[vehicleid] - 0.7; }
					if(Speed > 100){ Fuel[vehicleid] = Fuel[vehicleid] - 0.8; }
				}
			}
		}
	}
	return 1;
}

Niestety nie odbiera paliwa, a jak dałem w OnPlayerUpdate coś takiego:

public OnPlayerUpdate(playerid)
{
	if(IsPlayerInAnyVehicle(playerid))
	{
		new vid = GetPlayerVehicleID(playerid);
		if(Fuel[vid] <= 0)
		{
			new lights, alarm, doors, bonnet, boot, objective;
			SetVehicleParamsEx(vid, 0, lights, alarm, doors, bonnet, boot, objective);
		}
	}
}

To od razu po wejściu wyłącza silnik.

Edytowane przez Jaev

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie wiem czy dobrze myśle, bo nie widzę reszty twojego kodu.

new Speed = PobierzPredkoscPojazdu(vehicleid);

Chyba Speed powinna być zmienną zmiennoprzecinkową, czyli:

new Float:Speed = PobierzPredkoscPojazdu(vehicleid);

Lecz mogę się mylić. Zauważyłem jeszcze że nigdzie nie sprawdzasz czy gracz jest w pojeździe ( w tym timerze ).

Edytowane przez Dejv

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

pred_b jak widać nie jest Floatem

stock PobierzPredkoscPojazdu(vehicleid)
{
	new Float:predx;
	new Float:predy;
	new Float:predz;
	new Float:pred_a;
	new pred_b;
	GetVehicleVelocity(vehicleid, predx, predy, predz);
	pred_a = floatsqroot(((predx*predx)+(predy*predy))+(predz*predz))* 136.666;
	pred_b = floatround(pred_a,floatround_round);
	return pred_b;
}

 

Edytowane przez Jaev

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zdajesz sobie sprawę z tego, że poniższy kod:

if(Speed <= 5){ Fuel[vehicleid] = Fuel[vehicleid] - 0.1; }
if(Speed > 5 && Speed <= 10){ Fuel[vehicleid] = Fuel[vehicleid] - 0.1; }
if(Speed > 10 && Speed <= 30){ Fuel[vehicleid] = Fuel[vehicleid] - 0.2; }
if(Speed > 30 && Speed <= 50){ Fuel[vehicleid] = Fuel[vehicleid]- 0.3; }
if(Speed > 50 && Speed <= 70){ Fuel[vehicleid] = Fuel[vehicleid] - 0.4; }
if(Speed > 70 && Speed <= 90){ Fuel[vehicleid] = Fuel[vehicleid] - 0.5; }
if(Speed > 90 && Speed <= 100){ Fuel[vehicleid] = Fuel[vehicleid] - 0.7; }
if(Speed > 100){ Fuel[vehicleid] = Fuel[vehicleid] - 0.8; }

Odejmie 3.1 w przypadku prędkości >100?

Skoro w OnPlayerUpdate(...) zamyka pojazd, to znaczy że paliwo jest już wyzerowane.

Rozwiązanie jest banalnie proste - skorzystaj z IsVehicleInUse(...)

Jak dobrze pamiętam ta funkcja nie znajduje się w domyślnych bibliotekach, więc musisz ją napisać samemu/wygooglować :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
24 minut temu, Michalec napisał:

Zdajesz sobie sprawę z tego, że poniższy kod:


if(Speed <= 5){ Fuel[vehicleid] = Fuel[vehicleid] - 0.1; }
if(Speed > 5 && Speed <= 10){ Fuel[vehicleid] = Fuel[vehicleid] - 0.1; }
if(Speed > 10 && Speed <= 30){ Fuel[vehicleid] = Fuel[vehicleid] - 0.2; }
if(Speed > 30 && Speed <= 50){ Fuel[vehicleid] = Fuel[vehicleid]- 0.3; }
if(Speed > 50 && Speed <= 70){ Fuel[vehicleid] = Fuel[vehicleid] - 0.4; }
if(Speed > 70 && Speed <= 90){ Fuel[vehicleid] = Fuel[vehicleid] - 0.5; }
if(Speed > 90 && Speed <= 100){ Fuel[vehicleid] = Fuel[vehicleid] - 0.7; }
if(Speed > 100){ Fuel[vehicleid] = Fuel[vehicleid] - 0.8; }

Odejmie 3.1 w przypadku prędkości >100?

Skoro w OnPlayerUpdate(...) zamyka pojazd, to znaczy że paliwo jest już wyzerowane.

Rozwiązanie jest banalnie proste - skorzystaj z IsVehicleInUse(...)

Jak dobrze pamiętam ta funkcja nie znajduje się w domyślnych bibliotekach, więc musisz ją napisać samemu/wygooglować :)

Pomyśl zanim napiszesz

Zmień pętle z MAX_VEHICLES na MAX_PLAYERS i usun argument (playerid) z funkcji

Edytowane przez NikeKST

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
1 minutę temu, NikeKST napisał:

Pomyśl najpierw napiszesz post

Zmień pętle z MAX_VEHICLES na MAX_PLAYERS i usun argument (playerid) z funkcji

Nie wiem co to ma do mojego posta. Skoro autor tematu w taki sposób chce odejmować paliwo, to niech tak robi.

Ja podałem mu najprostsze rozwiązanie jego problemu.

Co do argumentu w funkcji, to nie zwróciłem na to uwagi.

A jeżeli mamy się czepiać, to jestem pewien, że autor tematu niezbyt zrozumie Twój post. Sama zmiana MAX_VEHICLES na MAX_PLAYERS nic nie da.

Jak już chcesz pomagać, to pomagaj, a nie piszesz na "odwal się" i oczekujesz, że autor się domyśli co miałeś na myśli.

Pozdrawiam :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
public OnGameModeInit()
{
	SetTimer("OdbierzPaliwo", ODBIERZ_PALIWO, true); // odpalamy timer ;)
	for(new i = 0; i < MAX_VEHICLES; i++)
	{
		Fuel[i] = MAX_PALIWO_REST; // żeby nie było pustych baków
	}
    return 1;
                                    
}

To samo dałem w OnVehicleStreamIn, więc nie ma jak być pustych baków.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
forward OdbierzPaliwo();
public OdbierzPaliwo()
{
	for(new playerid = 0; playerid < GetPlayerPoolSize()+1; playerid++)
	{
      	if(!IsPlayerConnected(playerid) || !IsPlayerInAnyVehicle(playerid)) continue;
		new vehicleid = GetPlayerVehicleID(playerid),
			engine, lights, alarm, doors, bonnet, boot, objective;
		GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
		if(engine == 1)
		{
			if(Fuel[vehicleid] > 0)
			{
				new mid = GetVehicleModel(vehicleid);
				if(mid == 509 || mid == 481 || mid == 510) { return 1; }
				else
				{
					new Speed = PobierzPredkoscPojazdu(vehicleid);
					if(Speed <= 5){ Fuel[vehicleid] = Fuel[vehicleid] - 0.1; }
					if(Speed > 5 && Speed <= 10){ Fuel[vehicleid] = Fuel[vehicleid] - 0.1; }
					if(Speed > 10 && Speed <= 30){ Fuel[vehicleid] = Fuel[vehicleid] - 0.2; }
					if(Speed > 30 && Speed <= 50){ Fuel[vehicleid] = Fuel[vehicleid]- 0.3; }
					if(Speed > 50 && Speed <= 70){ Fuel[vehicleid] = Fuel[vehicleid] - 0.4; }
					if(Speed > 70 && Speed <= 90){ Fuel[vehicleid] = Fuel[vehicleid] - 0.5; }
					if(Speed > 90 && Speed <= 100){ Fuel[vehicleid] = Fuel[vehicleid] - 0.7; }
					if(Speed > 100){ Fuel[vehicleid] = Fuel[vehicleid] - 0.8; }
				}
			}
		}
	}
	return 1;
}

Masz, spróbuj tak

a ile wynosi to 

MAX_PALIWO_REST

?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×