Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2619 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

(redaguota)

Sveiki,
temos pavadinimas gan aiškiai pasako problemą - konsolėje išmeta kelis erorr'us: 

įvedus žaidėjo vardą/ID - meta tokį errorą.

[KOMANDA] Vardas_Pavarde: /pinigai var
[debug] Run time error 4: "Array index out of bounds"
[debug]  Accessing element at index 65535 past array upper bound 999
[debug] AMX backtrace:
[debug] #0 0005ebb4 in public cmd_pinigai (0, 1898676) from GM.amx
[debug] #1 native CallLocalFunction () from samp-server.exe
[debug] #2 0000197c in public OnPlayerCommandText (0, 1898608) from GM.amx


Taip pat parašius komandą /pinigai ***** (vardas, kurio nėra žaidime) neišveda teksto "Tokio žaidėjo nėra". (suveikia kaip return 0;)
Kame galėtų būt problema?

CMD:pinigai(playerid, params[])
{
	new id;
	if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid,Raudona,"* Tokio žaidėjo nėra!");
	if(sscanf(params, "u", id))
	{
	    new message[144];
		id = playerid;
		format(message, sizeof(message),"{FFA500}* %s {CACACA}pinigai: rankoje {FFA500}%s€{CACACA}, bankomate {FFA500}%s€{CACACA}.", gaunamvarda(id), Comma(playerDB[id][pinigai]), Comma(playerDB[id][bankomate]));
		SendClientMessage(playerid, Zalia, message);
		SendClientMessage(playerid,Raudona,"{FFA500}* {CACACA}Uždarbį sužinoti gali parašęs - {FFA500}/uzdirbau.");
		return 1;
	}
	if(!sscanf(params, "u", id))
	{
	    new message[144];
		format(message, sizeof(message),"{FFA500}* %s {CACACA}pinigai: rankoje {FFA500}%s€{CACACA}, bankomate {FFA500}%s€{CACACA}.", gaunamvarda(id), Comma(playerDB[id][pinigai]), Comma(playerDB[id][bankomate]));
		SendClientMessage(playerid, Zalia, message);
		SendClientMessage(playerid,Raudona,"{FFA500}* {CACACA}Uždarbį sužinoti gali parašęs - {FFA500}/uzdirbau.");
		return 1;
	}
	return 1;
}

 

Redaguota , nario newyorkas
CMD:pinigai(playerid, params[])
{
	new id;
	if(sscanf(params, "u", id))
	{
	    new message[144];
		format(message, sizeof(message),"{FFA500}* %s {CACACA}pinigai: rankoje {FFA500}%s€{CACACA}, bankomate {FFA500}%s€{CACACA}.", playerid, Comma(playerDB[playerid][pinigai]), Comma(playerDB[playerid][bankomate]));
		SendClientMessage(playerid, Zalia, message);
		SendClientMessage(playerid,Raudona,"{FFA500}* {CACACA}Uždarbį sužinoti gali parašęs - {FFA500}/uzdirbau.");
		return 1;
	}
	else if(!sscanf(params, "u", id) && IsPlayerConnected(id))
	{
	    new message[144];
		format(message, sizeof(message),"{FFA500}* %s {CACACA}pinigai: rankoje {FFA500}%s€{CACACA}, bankomate {FFA500}%s€{CACACA}.", gaunamvarda(id), Comma(playerDB[id][pinigai]), Comma(playerDB[id][bankomate]));
		SendClientMessage(playerid, Zalia, message);
		SendClientMessage(playerid,Raudona,"{FFA500}* {CACACA}Uždarbį sužinoti gali parašęs - {FFA500}/uzdirbau.");
		return 1;
	}
	else return SendClientMessage(playerid,Raudona,"* Tokio žaidėjo nėra!");
	return 1;
}

Dabar tu tikrini ar id yra INVALID_PLAYER_ID, nors nieko jam nepriskyrei, todėl pagal nutylėjimą id bus 0. Pirmiausia turi rašyti sscanf funkciją, net jeigu ji naudojama if statement'e, tai vistiek reikšmė išsisaugo į kintamąjį.

  • Teigiamai 1
prieš 3 valandas(-ų), KasparasDope parašė:

CMD:pinigai(playerid, params[])
{
	new id;
	if(sscanf(params, "u", id))
	{
	    new message[144];
		format(message, sizeof(message),"{FFA500}* %s {CACACA}pinigai: rankoje {FFA500}%s€{CACACA}, bankomate {FFA500}%s€{CACACA}.", playerid, Comma(playerDB[playerid][pinigai]), Comma(playerDB[playerid][bankomate]));
		SendClientMessage(playerid, Zalia, message);
		SendClientMessage(playerid,Raudona,"{FFA500}* {CACACA}Uždarbį sužinoti gali parašęs - {FFA500}/uzdirbau.");
		return 1;
	}
	else if(!sscanf(params, "u", id) && IsPlayerConnected(id))
	{
	    new message[144];
		format(message, sizeof(message),"{FFA500}* %s {CACACA}pinigai: rankoje {FFA500}%s€{CACACA}, bankomate {FFA500}%s€{CACACA}.", gaunamvarda(id), Comma(playerDB[id][pinigai]), Comma(playerDB[id][bankomate]));
		SendClientMessage(playerid, Zalia, message);
		SendClientMessage(playerid,Raudona,"{FFA500}* {CACACA}Uždarbį sužinoti gali parašęs - {FFA500}/uzdirbau.");
		return 1;
	}
	else return SendClientMessage(playerid,Raudona,"* Tokio žaidėjo nėra!");
	return 1;
}

Dabar tu tikrini ar id yra INVALID_PLAYER_ID, nors nieko jam nepriskyrei, todėl pagal nutylėjimą id bus 0. Pirmiausia turi rašyti sscanf funkciją, net jeigu ji naudojama if statement'e, tai vistiek reikšmė išsisaugo į kintamąjį.

pagal nutylejima id yra random skaicius, del to klaida index out of bounds ir meta (per didelis skaicius), bet jo, problema pasakei

  • Teigiamai 1
prieš 3 valandas(-ų), Zero Two parašė:

pagal nutylejima id yra random skaicius, del to klaida index out of bounds ir meta (per didelis skaicius), bet jo, problema pasakei

OnPlayerConnect(playerid)
{
	new id;
	printf("id: %d", id);
	return true;
}

Kintamasis "id" visada bus nulis.

Jeigu žvilgtelėtum į a_samp.inc include'ą, tai pamatytum tokį define'ą:

#define INVALID_PLAYER_ID (0xFFFF)

Matome INVALID_PLAYER_ID yra uždefine'intas 0xFFFF ir toks skaičiaus išreiškimas vadinasi šešioliktainė skaičiavimo sistema (hexadecimal). Jeigu konvertuosime 0xFFFF iš šešioliktainės skaičiavimo sistemos į dešimtainę (visiems žinomą, nuo 0 iki 10), tai pamatysime, kad 0xFFFF atitinka skaičių 65535, kuris ir yra nurodytas temos autoriaus pateiktoje klaidoje. Šešioliktainėje skaičiavimo sistemoje 65535 atitinka -1, kadangi FFFF yra didžiausia galima reikšmė šioje skaičiavimo sistemoje. Sekantis skaičius būtų nulis, o prieš nulį eina -1, todėl 65535 atitinka -1 (Kad žinotum, šešioliktainėje skaičiavimo sistemoje yra 16 reikšmių, o tiksliau nuo 0 iki 9, o tada nuo A iki F. A atitinka 10, B atitinka 11 ir taip tęsiant matome, kad F lygu 16. 16 pakėlus 4 turime 65536, atimame 1, nes pradedame skaičiuoti nuo 0, ir vuolia).

Kitą kartą patariu pasidomėti prieš rašant ir klaidinant žmones. Programavime atsitiktinumų ir tokių "random" dalykų nebūna. Viskas pagrįsta tavo suteiktomis komandomis, kurias kompiuteris atlieka pagal eiliškumą, nepaisant tavo padarytų klaidų (pawno atveju, kompiliatorius suteikia tam tikra informacija tam tikrais atvejais, kad padeda surasti tą pačią klaidą).

  • Teigiamai 2
(redaguota)
Prieš 1 valandą, KasparasDope parašė:

OnPlayerConnect(playerid)
{
	new id;
	printf("id: %d", id);
	return true;
}

Kintamasis "id" visada bus nulis.

Jeigu žvilgtelėtum į a_samp.inc include'ą, tai pamatytum tokį define'ą:


#define INVALID_PLAYER_ID (0xFFFF)

Matome INVALID_PLAYER_ID yra uždefine'intas 0xFFFF ir toks skaičiaus išreiškimas vadinasi šešioliktainė skaičiavimo sistema (hexadecimal). Jeigu konvertuosime 0xFFFF iš šešioliktainės skaičiavimo sistemos į dešimtainę (visiems žinomą, nuo 0 iki 10), tai pamatysime, kad 0xFFFF atitinka skaičių 65535, kuris ir yra nurodytas temos autoriaus pateiktoje klaidoje. Šešioliktainėje skaičiavimo sistemoje 65535 atitinka -1, kadangi FFFF yra didžiausia galima reikšmė šioje skaičiavimo sistemoje. Sekantis skaičius būtų nulis, o prieš nulį eina -1, todėl 65535 atitinka -1 (Kad žinotum, šešioliktainėje skaičiavimo sistemoje yra 16 reikšmių, o tiksliau nuo 0 iki 9, o tada nuo A iki F. A atitinka 10, B atitinka 11 ir taip tęsiant matome, kad F lygu 16. 16 pakėlus 4 turime 65536, atimame 1, nes pradedame skaičiuoti nuo 0, ir vuolia).

Kitą kartą patariu pasidomėti prieš rašant ir klaidinant žmones. Programavime atsitiktinumų ir tokių "random" dalykų nebūna. Viskas pagrįsta tavo suteiktomis komandomis, kurias kompiuteris atlieka pagal eiliškumą, nepaisant tavo padarytų klaidų (pawno atveju, kompiliatorius suteikia tam tikra informacija tam tikrais atvejais, kad padeda surasti tą pačią klaidą).

atsiprašau, kad assuminau, kad samp kodas veikia kaip c kodas

a63d5f895f8dc18ea9b0158e721b8dd7.png

4bd7cfc6180e5b0c7d39538d08cec53f.png

 

Redaguota , nario Zero Two
  • Teigiamai 2

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2619 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...