Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Mivčo

pomoc OnPlayerEnterRaceCheckpoint

Recommended Posts

Zdravím mám problem... Mám autoškolu rozdelenú na 2 časti. Prvú časť jazdu robíš na dvore autoškoly a druhú časť po meste ale problem mám že keď dokončím prvú jazdu tak mi nenabehne druhá časť jazdy po meste :monkaX:

Code:

public OnPlayerEnterRaceCheckpoint(playerid)
{
    if(!IsPlayerNPC(playerid))
	{
		if(IsPlayerConnected(playerid))
		{
			if(VRServer[playerid][MissionID] == 1)
            {
				if(GetPlayerVehicleID(playerid) > 0)
		        {
					SetPVarInt(playerid,"Skuska",GetPVarInt(playerid,"Skuska")+1);
					switch(GetPVarInt(playerid,"Skuska"))
					{
						case 0: SetPlayerRaceCheckpoint(playerid, 0, 1792.4083,-1801.7075,13.1925, 1782.0227,-1803.4670,13.1813, 2.0);
						case 1: SetPlayerRaceCheckpoint(playerid, 0, 1782.0227,-1803.4670,13.1813, 1774.3981,-1803.7609,13.5234, 2.0);
						case 2: SetPlayerRaceCheckpoint(playerid, 0, 1774.3981,-1803.7609,13.5234, 1766.6222,-1802.6149,13.5380, 2.0);
						case 3: SetPlayerRaceCheckpoint(playerid, 0, 1766.6222,-1802.6149,13.5380, 1758.1747,-1800.7885,13.5461, 2.0);
						case 4: SetPlayerRaceCheckpoint(playerid, 0, 1758.1747,-1800.7885,13.5461, 1750.6824,-1797.5869,13.5402, 2.0);
						case 5: SetPlayerRaceCheckpoint(playerid, 0, 1750.6824,-1797.5869,13.5402, 1746.7960,-1790.5583,13.5335, 2.0);
						case 6: SetPlayerRaceCheckpoint(playerid, 0, 1746.7960,-1790.5583,13.5335, 1748.0051,-1781.1691,13.5345, 2.0);
						case 7: SetPlayerRaceCheckpoint(playerid, 0, 1748.0051,-1781.1691,13.5345, 1754.8124,-1773.3386,13.5357, 2.0);
						case 8: SetPlayerRaceCheckpoint(playerid, 0, 1754.8124,-1773.3386,13.5357, 1763.8038,-1774.8002,13.5375, 2.0);
						case 9: SetPlayerRaceCheckpoint(playerid, 0, 1763.8038,-1774.8002,13.5375, 1784.5613,-1783.7423,13.5323, 2.0);
						case 10: SetPlayerRaceCheckpoint(playerid, 1, 1784.5613,-1783.7423,13.5323, 1784.5613,-1783.7423,13.5323, 2.0);
						case 11:
						{
							new Float:h;
							GetVehicleHealth(GetPlayerVehicleID(playerid),h);
							DeletePVar(playerid,"Skuska");
							VRServer[playerid][MissionID] = 9999;
							if(h < 650)
							{
								FormatPlayerInfoBox(playerid,"~g~Vodicak","~w~Nespravil si vodicak, Musís ísť ešte raz.",3000);
							}
							else
							{
								FormatPlayerInfoBox(playerid,"~g~Vodicak","~w~Uspesne si absolvoval Prvy test Autoskoly a pokracuj dalej po meste",3000);
								SetPlayerPos(playerid, 1801.2992,-1751.0087,13.5503);
								VRServer[playerid][MissionID] = 2;
							}
							DisablePlayerRaceCheckpoint(playerid);
						}
					}
				}
            }
			else if(VRServer[playerid][MissionID] == 2)
            {
				if(GetPlayerVehicleID(playerid) > 0)
		        {
					SetPVarInt(playerid,"Skuska",GetPVarInt(playerid,"Skuska")+1);
					switch(GetPVarInt(playerid,"Skuska"))
					{
						case 0: SetPlayerRaceCheckpoint(playerid, 0, 1820.1997,-1724.1368,13.0624, 1845.3339,-1495.8528,13.0400, 2.0);
						case 1: SetPlayerRaceCheckpoint(playerid, 0, 1845.3339,-1495.8528,13.0400, 1843.2533,-1265.0377,13.0731, 2.0);
						case 2: SetPlayerRaceCheckpoint(playerid, 0, 1843.2533,-1265.0377,13.0731, 1718.3967,-1294.8931,13.0663, 2.0);
						case 3: SetPlayerRaceCheckpoint(playerid, 0, 1718.3967,-1294.8931,13.0663, 1708.8884,-1164.0419,23.3392, 2.0);
						case 4: SetPlayerRaceCheckpoint(playerid, 0, 1708.8884,-1164.0419,23.3392, 1462.9440,-1163.4559,23.3460, 2.0);
						case 5: SetPlayerRaceCheckpoint(playerid, 0, 1462.9440,-1163.4559,23.3460, 1454.2349,-1440.2679,13.0681, 2.0);
						case 6: SetPlayerRaceCheckpoint(playerid, 0, 1454.2349,-1440.2679,13.0681, 1424.0779,-1726.4900,13.0743, 2.0);
						case 7: SetPlayerRaceCheckpoint(playerid, 0, 1424.0779,-1726.4900,13.0743, 1391.6322,-1746.0953,13.0625, 2.0);
						case 8: SetPlayerRaceCheckpoint(playerid, 0, 1391.6322,-1746.0953,13.0625, 1391.6322,-1746.0953,13.0625, 2.0);
						case 9: SetPlayerRaceCheckpoint(playerid, 0, 1391.6322,-1746.0953,13.0625, 1393.5955,-1869.4871,13.0648, 2.0);
						case 10: SetPlayerRaceCheckpoint(playerid, 0, 1393.5955,-1869.4871,13.0648, 1681.4602,-1862.0621,13.0703, 2.0);
						case 11: SetPlayerRaceCheckpoint(playerid, 0, 1681.4602,-1862.0621,13.0703, 1694.8257,-1735.6460,13.0606, 2.0);
						case 12: SetPlayerRaceCheckpoint(playerid, 0, 1694.8257,-1735.6460,13.0606, 1787.7635,-1734.3370,13.0625, 2.0);
						case 13: SetPlayerRaceCheckpoint(playerid, 1, 1787.7635,-1734.3370,13.0625, 1787.7635,-1734.3370,13.0625, 2.0);
						case 14:
						{
							new Float:h;
							GetVehicleHealth(GetPlayerVehicleID(playerid),h);
							DeletePVar(playerid,"Skuska");
   							VRServer[playerid][MissionID] = 9999;
							if(h < 850)
							{
								FormatPlayerInfoBox(playerid,"~g~Vodicak","~w~Nespravil si vodicak. Musís ísť ešte raz.",3000);
							}
							else
							{
								PlayerInfo[playerid][Vodicak] = 1;
								FormatPlayerInfoBox(playerid,"~g~Vodicak","~w~Uspesne si dokončil Autoskolu. Prave si ziskal vodicak",3000);
							}
							DisablePlayerRaceCheckpoint(playerid);
						}
					}
				}
            }
		}
	}
	return 1;
}

 

Sdílet tento příspěvek


Link to post
Share on other sites

Trošku viac opíš problém aby sme nestrácali čas hlúposťami...

Pri dokončení prvej časti nezobrazuješ nový CP... Alebo musí hráč prísť k nejakému pickupu a spustiť 2. časť skúšky?

Podľa textov v kóde si myslím že chceš aby po dokončení prvej časti autoškoly automaticky prešiel na druhú časť. V tom je problém, pretože si použil ELSE IF, konkrétne tuto:

else if(VRServer[playerid][MissionID] == 2)

Tento riadok spôsobí, že keď sa dokončí prvá misia, tak už sa nebude pokračovať v tejto vetve programu.

Názorná ukážka:

new w = 1;
if (w == 1) // podmienka splnena, idem dnu
	w = 2; // nastavim w na 2
else if (w == 2) // podmienka sice je splnena ale program ju preskoci pretoze v skutocnosti sa najprv vyhodnoti ELSE a az potom IF
	w = 3; // toto sa uz nevykona
// w je teraz 2

// toto je identicky kod ale viac prehladny
w = 1;
if (w == 1) {
	w = 2;
} else {
	if (w == 2) {
		w = 3;
	}
}

// a takto by vyyeral kod kde sa splnia obe podmienky
w = 1;
if (w == 1) // podmienka splnena takze nastavime w na 2
	w = 2;
if (w == 2) // ziadne else takze sa vyhodnocuje podmienka a ta je splnena
	w = 3;

Takže moja rada na záver: ak chceš automaticky spustiť druhú misiu, zmaž ELSE

Ešte tip: používaš SetPlayerPos po dokončení prvej časti - hráčovi asi bude chýbať auto ;)

if(GetPlayerVehicleID(playerid) > 0) // IsPlayerInAnyVehicle
SetPVarInt(playerid,"Skuska",GetPVarInt(playerid,"Skuska")+1); // ked kukam na toto, načo máš CASE 0? či "Skuska" je niekedy nastavena na -1?

EDIT: Načo kontroluješ či nie je hráč NPC? Ty nejakým NPC nastavuješ checkpointy? (NIE) Taktiež nepripojený hráč asi nespustí OnPlayerEnterRaceCheckpoint... Zbytočné podmienky 

Edited by Quiter

Sdílet tento příspěvek


Link to post
Share on other sites
Citace
else if(VRServer[playerid][MissionID] == 2)

tu bol problem... a už to išlo... proste školácka chyba na mojej strane :| :D 

 

a pomohol by si mi ešte s týmto ak chceš... mám spravený obchod/ nemovitosti a ked dám vyplatiť tak mi to dá takuto sumu ako je na obrazku proste bude chyba v mode a ja už neviem kde.... pridám aj kod

lj68hrdi15nq4i4p1d5m.png

 

case 3:
			{
 				if(playerid == blbost)
                {
                    if(0 < Vysloto[id])
                    {
                        new string[256];
                        new Float:VydelkovySystem = floatround(random((Vysloto[id] / 7) + 100), floatround_round);
                        format(string, 200, "Obchod %s ma v trezoru %d$,bolo strhnuto %d$ za udrzbu a vyplaty zamestnancov. Peniaze vam boli poslane na ucet.", NehnutelnostInfo[id][Nazev], Vysloto[playerid] - VydelkovySystem, VydelkovySystem);
                        FormatPlayerInfoBox(playerid,"~g~Nemovitost",string, 3000);
                        VydelkovySystem = Vysloto[id] - VydelkovySystem;
                        GivePlayerMoney(playerid, VydelkovySystem);
                        Vysloto[id] = 0;
                    }
                    else
                    {
                        FormatPlayerInfoBox(playerid,"~g~Nemovitost","Nemovitost nic nezarobila.", 3000);
                    }
                }
                else
                {
                    new var31[128];
                    format(var31, 128, "Nie si vlastnikom tento nehnutelnosti %s", NehnutelnostInfo[id][Nazev]);
                    FormatPlayerInfoBox(playerid,"~g~Nemovitost",var31, 3000);
                }

			}

Proste celý nemovytosti mi funguju od kupý až po neviem čo ale ked mám to vyplatiť tak nič proste

proste pri tomto kode mi píše toto

 

warning 213: tag mismatch

GivePlayerMoney(playerid, VydelkovySystem);

 

Sdílet tento příspěvek


Link to post
Share on other sites
Guru
před 2 hodinami, Mivčo said:
warning 213: tag mismatch

GivePlayerMoney(playerid, VydelkovySystem);

 

Proměnná VydelkovySystem je float (desetinné číslo) a GivePlayerMoney() chce int (celá čísla).

Edited by Scydo

Sdílet tento příspěvek


Link to post
Share on other sites
před 14 hodinami, Scydo said:

Proměnná VydelkovySystem je float (desetinné číslo) a GivePlayerMoney() chce int (celá čísla).

no dal som preč ten float z new a teraz mi ukazuje najprv že -1500 a potom 1500 a pri sebe mám 120000$ hmm 

nechapem aby mi to ukazovalo tu sumu 

Sdílet tento příspěvek


Link to post
Share on other sites
před 4 hodinami, Quiter said:
VydelkovySystem = Vysloto[id] - VydelkovySystem; // tu je ID a hore (vo formate) máš PLAYERID

 

ale mám to takto...

 

	else if(Current == Nehnutelnosts)
	{
        TogglePlayerControllable(playerid, true);
        coze[playerid] = 0;
        new id = GetPlayerNehnutelnost(playerid);
        new blbost = PlayerIDs(NehnutelnostInfo[id][Owner]);
		if(id == -1)
		{
			return FormatPlayerInfoBox(playerid,"~g~Nemovitost","Musite byt u nemovitosti",4000);
		}
		switch(row)
	    {

od switch mám case

Sdílet tento příspěvek


Link to post
Share on other sites
format(string, 200, "Obchod %s ma v trezoru %d$,bolo strhnuto %d$ za udrzbu a vyplaty zamestnancov. Peniaze vam boli poslane na ucet.", NehnutelnostInfo[id][Nazev], Vysloto[playerid] - VydelkovySystem, VydelkovySystem);

Tu máš Vysloto[PLAYERID]

 

VydelkovySystem = Vysloto[id] - VydelkovySystem;

A tu zase ID... čiže v infoboxe ti zobrazí nejakú nezmyselnú hodnotu

 

Tiež ako už bolo vyššie spomínané. skontroluj si či sú tvoje premenné (hlavne Vysloto a VydelkovySystem) typu integer (tj. obyčajný NEW). Ak použiješ format %d a pošleš tam float tak sa opäť zobrazí úplne nezmyselná hodnota :)

Edited by Quiter

Sdílet tento příspěvek


Link to post
Share on other sites
před 20 hodinami, Quiter said:
format(string, 200, "Obchod %s ma v trezoru %d$,bolo strhnuto %d$ za udrzbu a vyplaty zamestnancov. Peniaze vam boli poslane na ucet.", NehnutelnostInfo[id][Nazev], Vysloto[playerid] - VydelkovySystem, VydelkovySystem);

Tu máš Vysloto[PLAYERID]

 

VydelkovySystem = Vysloto[id] - VydelkovySystem;

A tu zase ID... čiže v infoboxe ti zobrazí nejakú nezmyselnú hodnotu

 

Tiež ako už bolo vyššie spomínané. skontroluj si či sú tvoje premenné (hlavne Vysloto a VydelkovySystem) typu integer (tj. obyčajný NEW). Ak použiješ format %d a pošleš tam float tak sa opäť zobrazí úplne nezmyselná hodnota :)

mám iba toto: new Vysloto[MAX_PLAYERS_EX]; a new Float:VydelkovySystem = floatround(random((Vysloto[id] / 7) + 100), floatround_round);

a zmenil som to na id a ked na servery kupim obchod a po vyplate idem si pre zarobok obchodu tak mi to dá cez jednu miliardu...

Sdílet tento příspěvek


Link to post
Share on other sites

Miešaš hrušky s jablkami :)

new id = GetPlayerNehnutelnost(playerid); // tu je ID čož nemá s playerid nič spoločné, je to proste ID firmy

 

před 11 minutami, Mivčo said:

mám iba toto: new Vysloto[MAX_PLAYERS_EX]; a new Float:VydelkovySystem = floatround(random((Vysloto[id] / 7) + 100), floatround_round);

a zmenil som to na id a ked na servery kupim obchod a po vyplate idem si pre zarobok obchodu tak mi to dá cez jednu miliardu...

tu píšeš že Vysloto[MAX_PLAYERS_EX]; takže sa viaže na PLAYERID

VydelkovySystem = Vysloto[id] - VydelkovySystem;

Tu opäť používaš ID... Chápeš? Hrušky s jablkami...

A tiež zmeň new Float:VydelkovySystem na new VydelkovySystem... Potom to otestuj a pošli sem realny príklad + sprav si viac výpisov, kludne si vypíš všetky premenné do chatu pred spracovaním, po spracovaní, v priebehu nejakých výpočtov a na základe toho hladaj problém :) Inak poslal som ti súkromnú správu, neviem či si ju čítal

Sdílet tento příspěvek


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...