Trafika


Započeo Xladen, Januar 25, 2018, 00:16:41 PRE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Detaljan opis problema: Kada otvorim dialog i kupim nesto nista ne dobijem i ne skida mi novac.I u konzolu mi salje neki amx backtrace,molim vas pomozite ovo je vec deseti put da stavljam istu temu.
Dio skripte:
CMD:
CMD:trafika(playerid, params[])
{

    if(UlogovanProvera[playerid] == 0) return Ulogovan(playerid);
    if(IsPlayerInAnyVehicle( playerid )) return SCM(playerid,-1,""CRVENA"[GRESKA] "BELA"Moras biti van vozila!");
    if(IsPlayerInRangeOfPoint(playerid, 2.0, -2540.9431, 2292.0476, 4.9844) || IsPlayerInRangeOfPoint(playerid, 2.0, -2278.4382, 2312.0273, 4.9659) || IsPlayerInRangeOfPoint(playerid, 2.0, -2565.6521, 2469.9983, 19.4087) || IsPlayerInRangeOfPoint(playerid, 2.0, -1472.1143, 2642.0332, 55.8359) || IsPlayerInRangeOfPoint(playerid, 2.0, -1525.1388, 2544.7451, 55.8359))
	SPD(playerid, DIALOG_TRAFIKA, DIALOG_STYLE_LIST, ""BELA"Trafika", ""HZELENA"- "BELA"Dopuna (20$)\n"HZELENA"- "BELA"Dopuna (50$)\n"HZELENA"- "BELA"Dopuna (100$)\n"HZELENA"- "BELA"Sok (10$)\n"HZELENA"- "BELA"Cigare (20$)\n"HZELENA"- "BELA"Upaljac (10$)\n"HZELENA"- "BELA"Cokoladica (10$)\n"HZELENA"- "BELA"Mp3 (100$)\n", "Odaberi", "Izlaz");
    else return SCM(playerid,-1,""CRVENA"[GRESKA] "BELA"Nisi kod trafike!");
	return 1;
}


Evo i dialog
    if(dialogid == DIALOG_TRAFIKA)
	{
		if(!response) return 1;
		if(FirmaInfo[KioskKupovina[playerid]][fProizvodi] <= 0) return SCM(playerid,-1,""ZPLAVA"[Trafika]: "BELA"Nemamo vise proizvoda!");
		FirmaInfo[KioskKupovina[playerid]][fProizvodi]--;
		switch(listitem)
		{
			case 0:
			{
				if(PlayerInfo[playerid][pMobilni] == 0) return SCM(playerid,-1, ""HZELENA"[BE:RPBE:RP] "SIVA"Nemate mobilni telefon!");
			   	if(PlayerInfo[playerid][pNovacDzep] < 20) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 20$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste 20 kredita za 20$!");
				PlayerInfo[playerid][pMobKredit] += 20;
				g_NovacMinus(playerid,20);
				FirmaNovac(KioskKupovina[playerid],20);
				SavePlayer(playerid);
			}
			case 1:
			{
				if(PlayerInfo[playerid][pMobilni] == 0) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate mobilni telefon!");
			   	if(PlayerInfo[playerid][pNovacDzep] < 50) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 50$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste 50 kredita za 50$!");
				PlayerInfo[playerid][pMobKredit] += 50;
				g_NovacMinus(playerid,50);
				FirmaNovac(KioskKupovina[playerid],50);
				SavePlayer(playerid);
			}
			case 2:
			{
			    if(PlayerInfo[playerid][pMobilni] == 0) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate mobilni telefon!");
			   	if(PlayerInfo[playerid][pNovacDzep] < 100) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 100$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste 100 kredita za 100$!");
				PlayerInfo[playerid][pMobKredit] += 100;
				g_NovacMinus(playerid,100);
				FirmaNovac(KioskKupovina[playerid],100);
				SavePlayer(playerid);
			}
			case 3:
			{
			   	if(PlayerInfo[playerid][pNovacDzep] < 10) return SCM(playerid,-1, ""HZELENA"[BE]"SIVA"Nemate dovoljno novca 10$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste sok za 10$!");
                SetPlayerSpecialAction( playerid, SPECIAL_ACTION_DRINK_SPRUNK);
				g_NovacMinus(playerid,10);
				FirmaNovac(KioskKupovina[playerid],10);
			}
			case 4:
			{
				if(PlayerInfo[playerid][pCigare] != 0) return SCMF(playerid,-1,""HZELENA"[BE] "SIVA"Vec imas %d cigara prvo ih popusi!",PlayerInfo[playerid][pCigare]);
			   	if(PlayerInfo[playerid][pNovacDzep] < 20) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 20$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste cigare | Sada mozete zapliti cigaru (/zapalicigaru | /ugasicigaru)!");
				PlayerInfo[playerid][pCigare] = 20;
				g_NovacMinus(playerid,20);
				FirmaNovac(KioskKupovina[playerid],20);
				SavePlayer(playerid);
			}
			case 5:
			{
				if(PlayerInfo[playerid][pUpaljac] == 1) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Vec posedujes upaljac!");
			   	if(PlayerInfo[playerid][pNovacDzep] < 10) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 10$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste upaljac za 10$!");
				PlayerInfo[playerid][pUpaljac] = 10;
				g_NovacMinus(playerid,10);
				FirmaNovac(KioskKupovina[playerid],10);
				SavePlayer(playerid);
			}
			case 6:
			{
			    new string[128];
			    if(PlayerInfo[playerid][pNovacDzep] < 10) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 10$!");
			    new Float:hp, Float:nhp; GetPlayerHealth(playerid, hp);
				nhp = floatadd(hp, 10.0); g_SetPlayerHealth(playerid, nhp);
				if(nhp > 99.0) g_SetPlayerHealth(playerid, 99.0);
				if(nhp >= 99.0) return SCM(playerid,-1,"[BE] "HZELENA"Niste gladni!");
				format(string, sizeof(string), "* %s jede cokoladicu.", GetName(playerid));
			    ProxDetector(15.0, playerid, string, PROX,PROX,PROX,PROX,PROX);
			    OnePlayAnim(playerid, "FOOD", "EAT_Burger", 3.0, 0, 0, 0, 0, 0);
			    g_NovacMinus(playerid,10);
				FirmaNovac(KioskKupovina[playerid],10);
			}
			case 7:
			{
				if(PlayerInfo[playerid][pMp3] == 1) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Vec posedujes mp3!");
			   	if(PlayerInfo[playerid][pNovacDzep] < 100) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 50$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste mp3 za 100$ | koriscenje : /mp3 !");
				PlayerInfo[playerid][pMp3] = 1;
				g_NovacMinus(playerid,100);
				FirmaNovac(KioskKupovina[playerid],100);
				SavePlayer(playerid);
			}
		}
	}


I konzoli mi se ovo pojavi kada pokusam da kupim nesto:
[debug] Run time error 4: "Array index out of bounds"
[debug]  Accessing element at negative index -1
[debug] AMX backtrace:
[debug] #0 001e1cd0 in ?? (0, 222, 1, 5, 22570212) from Exin.amx
[debug] #1 0000ad84 in public OnDialogResponse (0, 222, 1, 5, 22570212) from Exin.amx

Neke slike/video za lakse dobivanje pomoci(neobavezno):

Postavi nam ovdje gdje koristiš KioskKupovina varijablu.Odnosno daj nam gdje postavljaš njezinu vrijednost.

Ili možeš svoj dialog zamjeniti sa ovim,pa nam reci što ti ispisuje u server_log

    if(dialogid == DIALOG_TRAFIKA)
	{
		if(!response) return 1;
                printf("Kiosk Kupovina: %d",KioskKupovina[playerid]);
		if(FirmaInfo[KioskKupovina[playerid]][fProizvodi] <= 0) return SCM(playerid,-1,""ZPLAVA"[Trafika]: "BELA"Nemamo vise proizvoda!");
		FirmaInfo[KioskKupovina[playerid]][fProizvodi]--;
		switch(listitem)
		{
			case 0:
			{
				if(PlayerInfo[playerid][pMobilni] == 0) return SCM(playerid,-1, ""HZELENA"[BE:RPBE:RP] "SIVA"Nemate mobilni telefon!");
			   	if(PlayerInfo[playerid][pNovacDzep] < 20) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 20$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste 20 kredita za 20$!");
				PlayerInfo[playerid][pMobKredit] += 20;
				g_NovacMinus(playerid,20);
				FirmaNovac(KioskKupovina[playerid],20);
				SavePlayer(playerid);
			}
			case 1:
			{
				if(PlayerInfo[playerid][pMobilni] == 0) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate mobilni telefon!");
			   	if(PlayerInfo[playerid][pNovacDzep] < 50) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 50$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste 50 kredita za 50$!");
				PlayerInfo[playerid][pMobKredit] += 50;
				g_NovacMinus(playerid,50);
				FirmaNovac(KioskKupovina[playerid],50);
				SavePlayer(playerid);
			}
			case 2:
			{
			    if(PlayerInfo[playerid][pMobilni] == 0) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate mobilni telefon!");
			   	if(PlayerInfo[playerid][pNovacDzep] < 100) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 100$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste 100 kredita za 100$!");
				PlayerInfo[playerid][pMobKredit] += 100;
				g_NovacMinus(playerid,100);
				FirmaNovac(KioskKupovina[playerid],100);
				SavePlayer(playerid);
			}
			case 3:
			{
			   	if(PlayerInfo[playerid][pNovacDzep] < 10) return SCM(playerid,-1, ""HZELENA"[BE]"SIVA"Nemate dovoljno novca 10$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste sok za 10$!");
                SetPlayerSpecialAction( playerid, SPECIAL_ACTION_DRINK_SPRUNK);
				g_NovacMinus(playerid,10);
				FirmaNovac(KioskKupovina[playerid],10);
			}
			case 4:
			{
				if(PlayerInfo[playerid][pCigare] != 0) return SCMF(playerid,-1,""HZELENA"[BE] "SIVA"Vec imas %d cigara prvo ih popusi!",PlayerInfo[playerid][pCigare]);
			   	if(PlayerInfo[playerid][pNovacDzep] < 20) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 20$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste cigare | Sada mozete zapliti cigaru (/zapalicigaru | /ugasicigaru)!");
				PlayerInfo[playerid][pCigare] = 20;
				g_NovacMinus(playerid,20);
				FirmaNovac(KioskKupovina[playerid],20);
				SavePlayer(playerid);
			}
			case 5:
			{
				if(PlayerInfo[playerid][pUpaljac] == 1) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Vec posedujes upaljac!");
			   	if(PlayerInfo[playerid][pNovacDzep] < 10) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 10$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste upaljac za 10$!");
				PlayerInfo[playerid][pUpaljac] = 10;
				g_NovacMinus(playerid,10);
				FirmaNovac(KioskKupovina[playerid],10);
				SavePlayer(playerid);
			}
			case 6:
			{
			    new string[128];
			    if(PlayerInfo[playerid][pNovacDzep] < 10) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 10$!");
			    new Float:hp, Float:nhp; GetPlayerHealth(playerid, hp);
				nhp = floatadd(hp, 10.0); g_SetPlayerHealth(playerid, nhp);
				if(nhp > 99.0) g_SetPlayerHealth(playerid, 99.0);
				if(nhp >= 99.0) return SCM(playerid,-1,"[BE] "HZELENA"Niste gladni!");
				format(string, sizeof(string), "* %s jede cokoladicu.", GetName(playerid));
			    ProxDetector(15.0, playerid, string, PROX,PROX,PROX,PROX,PROX);
			    OnePlayAnim(playerid, "FOOD", "EAT_Burger", 3.0, 0, 0, 0, 0, 0);
			    g_NovacMinus(playerid,10);
				FirmaNovac(KioskKupovina[playerid],10);
			}
			case 7:
			{
				if(PlayerInfo[playerid][pMp3] == 1) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Vec posedujes mp3!");
			   	if(PlayerInfo[playerid][pNovacDzep] < 100) return SCM(playerid,-1, ""HZELENA"[BE] "SIVA"Nemate dovoljno novca 50$!");
                SCM(playerid,-1,""ZUTA"[INFO] "SIVA"Kupili ste mp3 za 100$ | koriscenje : /mp3 !");
				PlayerInfo[playerid][pMp3] = 1;
				g_NovacMinus(playerid,100);
				FirmaNovac(KioskKupovina[playerid],100);
				SavePlayer(playerid);
			}
		}
	}

Kada sam stavio taj drugi Dialog Trafike opet isto
[debug] Run time error 4: "Array index out of bounds"
[debug]  Accessing element at negative index -1
[debug] AMX backtrace:
[debug] #0 001fd888 in ?? (0, 222, 1, 0, 22632524) from Adamo.amx
[debug] #1 0000ad84 in public OnDialogResponse (0, 222, 1, 0, 22632524) from Adamo.amx


A ovo je sve gde imam KioskKupovina
new KioskKupovina[MAX_PLAYERS];

Kod OnPlayerConnect imam KioskKupovina[playerid] = -1;

I kod Trafike Dialog imam KioskKupovina.

Pa u tome ti je problem očito.KioskKupovina si vjerovatno ti pravio?KioskKupovina bi trebalo označavati ID firme,ali nigdje to ne koristiš tako da ti je KioskKupovina -1.
Morat ćeÅ¡ to na drugi način napraviti.Sve gdje imaÅ¡ KioskKupovina najbolje stavi pod komentar ( /*   */   ili // ) pa onda probaj.Prvo vidi da li je do toga(a vjerovatno je)

Onda ćeš morati to napraviti na drugi način,najbolje da kad kupuje napraviš jednu for petlju koja će provjeriti najbližu igračevu trafiku i njoj postaviti pare i smanjiti br. proizvoda.

probaj prebaciti taj sistem trafike sa underpointa,naravno malo prilagodi svom modu ali nema puno posla jer je ja msm up izvorni od adamo rp

for(new i = 86; i < 91; i++)
   	{
   	    if(IsPlayerInRangeOfPoint(playerid, 5.0, FirmaInfo[i][fUlazX], FirmaInfo[i][fUlazY], FirmaInfo[i][fUlazZ]))
		{
   			if(FirmaInfo[i][fVrsta] == VRSTA_SBIZZ)
			{
				x++;
				KioskKupovina[playerid] = i;
				SPD(playerid, DIALOG_TRAFIKA, DIALOG_STYLE_LIST, ""BELA"Trafika", ""CRVENA"- "BELA"Dopuna (20$)\n"CRVENA"- "BELA"Dopuna (50$)\n"CRVENA"- "BELA"Dopuna (100$)\n"CRVENA"- "BELA"Sok (10$)\n"CRVENA"- "BELA"Cigare (20$)\n"CRVENA"- "BELA"Upaljac (10$)\n"CRVENA"- "BELA"Cokoladica (10$)", "Odaberi", "Izlaz");
                break;
			}
   		}
	}



evo ti iz ovo sto ti je paul rekao,samo promijeni id firme,tj u ovoj for petlji

Citat: Paul Castellano poslato Januar 25, 2018, 19:56:19 POSLE PODNE
Pa u tome ti je problem očito.KioskKupovina si vjerovatno ti pravio?KioskKupovina bi trebalo označavati ID firme,ali nigdje to ne koristiš tako da ti je KioskKupovina -1.
Morat ćeÅ¡ to na drugi način napraviti.Sve gdje imaÅ¡ KioskKupovina najbolje stavi pod komentar ( /*   */   ili // ) pa onda probaj.Prvo vidi da li je do toga(a vjerovatno je)

Onda ćeš morati to napraviti na drugi način,najbolje da kad kupuje napraviš jednu for petlju koja će provjeriti najbližu igračevu trafiku i njoj postaviti pare i smanjiti br. proizvoda.
Da sada kada sam izbacio KioskKupovina radi sve lepo,ali kako da napravim tu proveru da ide najblizoj trafici novac.

Citat: Xladen poslato Januar 25, 2018, 20:02:18 POSLE PODNE
Da sada kada sam izbacio KioskKupovina radi sve lepo,ali kako da napravim tu proveru da ide najblizoj trafici novac.


pa evo ti gore for petlja sto sam ti poslao,samo zamijenis ove idove firmi

for(new i = 86; i < 91; i++)
   	{
   	    if(IsPlayerInRangeOfPoint(playerid, 5.0, FirmaInfo[i][fUlazX], FirmaInfo[i][fUlazY], FirmaInfo[i][fUlazZ]))
		{
   			if(FirmaInfo[i][fVrsta] == VRSTA_SBIZZ)
			{
				x++;
				KioskKupovina[playerid] = i;
				SPD(playerid, DIALOG_TRAFIKA, DIALOG_STYLE_LIST, ""BELA"Trafika", ""CRVENA"- "BELA"Dopuna (20$)\n"CRVENA"- "BELA"Dopuna (50$)\n"CRVENA"- "BELA"Dopuna (100$)\n"CRVENA"- "BELA"Sok (10$)\n"CRVENA"- "BELA"Cigare (20$)\n"CRVENA"- "BELA"Upaljac (10$)\n"CRVENA"- "BELA"Cokoladica (10$)", "Odaberi", "Izlaz");
                break;
			}
   		}
	}


Kako da stavim 3-4 id-a firme.Tipa hocu 2 4 7 12 gde da ih stavim i gde celu ovu for new da ubacim?

for petlju mozes dole ispod toga da ubacis,ispod tog dialoga


a za id firme ti je najbolje da obrises te firme pa da kreiras nove sa idovima npr. 100,101,102,103 i tako i onda u for petlji upises 100 i 103

Ma mene zadnima kako da ubacim te brojeve ovde

for(new i = 86; i < 91; i++)

Ako stavim od 100 do 107 trebao bih

for(new i = 100; i < 107; i++) ?? ili kako

da koliko ja znam,s tim da ti mora id trafike biti 100,101,102,103...

for(new i = 86; i < 91; i++)

Ajde mi molim te ubaci u ovo for new ove idove 105 106 107 108 109

for(new i = 105; i < 109; i++)

for(new i = 86; i < 91; i++)
   	{
   	    if(IsPlayerInRangeOfPoint(playerid, 5.0, FirmaInfo[i][fUlazX], FirmaInfo[i][fUlazY], FirmaInfo[i][fUlazZ]))
		{
   			if(FirmaInfo[i][fVrsta] == VRSTA_SBIZZ)
			{
				x++;
				KioskKupovina[playerid] = i;
				SPD(playerid, DIALOG_TRAFIKA, DIALOG_STYLE_LIST, ""BELA"Trafika", ""CRVENA"- "BELA"Dopuna (20$)\n"CRVENA"- "BELA"Dopuna (50$)\n"CRVENA"- "BELA"Dopuna (100$)\n"CRVENA"- "BELA"Sok (10$)\n"CRVENA"- "BELA"Cigare (20$)\n"CRVENA"- "BELA"Upaljac (10$)\n"CRVENA"- "BELA"Cokoladica (10$)", "Odaberi", "Izlaz");
                break;
			}
   		}
	}


Ovo ide kod CMD? i ako da pls ubaci mi u cmd.

CMD:trafika(playerid, params[])
{
	if(UlogovanProvera[playerid] == 0) return Ulogovan(playerid);
	if(IsPlayerInAnyVehicle( playerid )) return SCM(playerid,-1,""CRVENA"[GRESKA] "BELA"Moras biti van vozila!");
	if(IsPlayerInRangeOfPoint(playerid, 2.0, -2540.9431, 2292.0476, 4.9844) || IsPlayerInRangeOfPoint(playerid, 2.0, -2278.4382, 2312.0273, 4.9659) || IsPlayerInRangeOfPoint(playerid, 2.0, -2565.6521, 2469.9983, 19.4087) || IsPlayerInRangeOfPoint(playerid, 2.0, -1472.1143, 2642.0332, 55.8359) || IsPlayerInRangeOfPoint(playerid, 2.0, -1525.1388, 2544.7451, 55.8359))
	{
	ShowPlayerDialog(playerid, DIALOG_TRAFIKA, DIALOG_STYLE_LIST, ""BELA"Trafika", ""HZELENA"- "BELA"Dopuna (20$)\n"HZELENA"- "BELA"Dopuna (50$)\n"HZELENA"- "BELA"Dopuna (100$)\n"HZELENA"- "BELA"Sok (10$)\n"HZELENA"- "BELA"Cigare (20$)\n"HZELENA"- "BELA"Upaljac (10$)\n"HZELENA"- "BELA"Cokoladica (10$)\n"HZELENA"- "BELA"Mp3 (100$)\n", "Odaberi", "Izlaz");
	}
	else return SCM(playerid,-1,""CRVENA"[GRESKA] "BELA"Nisi kod trafike!");
	return 1;
}