Jump to content

pomoc OnPlayerEnterRaceCheckpoint


Mivčo

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;
}

 

  • Zmatený 1
Link to comment
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
  • Líbí se mi to! (+1) 1
Link to comment
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);

 

Link to comment
Share on other sites

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
Link to comment
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 

Link to comment
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

Link to comment
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
Link to comment
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...

Link to comment
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

Link to comment
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...