←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Wyświetlanie zawartości tablicy

Zablokowany

  • +
  • -
Jak się nazwać - zdjęcie Jak się nazwać 08.08.2011

Witam mam taką tablicę.
new const zadania[][] =
{
	{1,"Brak",0,0,0,0},
	{1,"Zabij 5 osób w 1 rundzie",300,5,ZABIJ+PRZEZ_RUNDE+ZAPISZ,5}, //1
	{1,"Zabij 3 osoby Hs w 1 rundzie",330,4,ZABIJ+PRZEZ_RUNDE+ZAPISZ,3},//2
	{1,"Podłuż 5 Bomb w ciągu mapy",400,10,PODLOZ+PRZEZ_MAPE+ZAPISZ,5}, //3
	{1,"Uratuj 3 razy hosty w ciągu mapy",350,8,URATUJ+PRZEZ_MAPE+ZAPISZ,3}, //4
	{1,"Zabij 20 Snajperów Hs",250,7,ZABIJ+ZAPISZ,20}, //5
	{1,"Przeżyj 1 runde bez zgona",500,11,NIE_MOZE_ZGINAC+ZAPISZ,1}, //6
	{1,"Zabij 100 osób Hs",1500,30,ZABIJ+ZAPISZ,100}, //7
	{1,"Rozbrój 20 Bomb",600,14,ROZBROJ+ZAPISZ,20}, //8
	{1,"Zabij 15 Vipów",420,12,ZABIJ+ZAPISZ,15}, //9
	{1,"Zabij 2 Premium w ciągu rundy",200,6,ZABIJ+PRZEZ_RUNDE+ZAPISZ,2}, //10
	{1,"Zabij 50 osób",600,23,ZABIJ+ZAPISZ,50}, //11
	{1,"Zabij 20 osób z AK47 lub M4A1 (Broń można kupić w sklepie)",300,14,ZABIJ+ZAPISZ,20}, //12
	{1,"Zabij 2 Osoby Hs z Kosy",150,5,ZABIJ+ZAPISZ,2}, //13
	{1,"Zabij 2 razy osobę rozbrajającą pakę",340,8,ZABIJ+ZAPISZ,2}, //14
	{1,"Zabij 3 razy osobę niosącą pakę",350,9,ZABIJ+ZAPISZ,3} //15
};

a tu wyświetlanie
	format(menuitem, 159, "\w%s \r[\yNagroda: %i XP i %i Monet\r] [\yPostep: %i/%i\r]", zadania[i][1], zadania[i][2], zadania[i][3], postep[id][i], zadania[i][5]);

I opis się wyświetla lecz nie wyświeltlają się nagrody, postęp co jest źle ? Oraz możecie mi powiedzieć jak zrobić żeby zadania[i][0] przydzielało do poszczególnych menu tzn chcę zrobić jak w tych questach od darkgl od poziomów oczywiście mam tablicę z przedziałem
zresztą tu macie całe menu
public PokazZadania(id)
{
	new menu = menu_create("Zadania:", "Zadanie_Handle");
	new cb = menu_makecallback("Zadanie_CallBack");
	
	new menuitem[160]
	for(new i=1; i < sizeof zadania; i++)
	{
		format(menuitem, 159, "\w%s \r[\yNagroda: %i XP i %i Monet\r] [\yPostep: %i/%i\r]", zadania[i][1], zadania[i][2], zadania[i][3], postep[id][i], zadania[i][5]);
		menu_additem(menu, menuitem, _, _, cb);
	}
	
	menu_setprop(menu, MPROP_PERPAGE, 5);
	menu_display(id, menu);
}

public Zadanie_Handle(id, menu, item)
{
	if(item++ == MENU_EXIT)
	{
		menu_destroy(menu);
		return;
	}
	
	zadanie_gracza[id] = item;
}

public Zadanie_CallBack(id, menu, item)
{
	item++;
	if(postep[id][item] >= zadania[item][5])
		return ITEM_DISABLED;
		
	return ITEM_ENABLED;
}

Dołączona grafika
Użytkownik Jak się nazwać edytował ten post 08.08.2011 22:13
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 08.08.2011

to nie PHP, że każdy element tablicy może być czymś innym ; co prawda to się kompiluje, ale dostęp do danych jest o wiele bardziej skomplikowany niż myślisz

{1,"Zabij 5 osób w 1 rundzie",300,5,ZABIJ+PRZEZ_RUNDE+ZAPISZ,5}
w pamięci wygląda tak
[0] 1
[1] 'Z'
[2] 'a'
[3] 'b'
[4] 'i'
[5] ''j
...
[23] 'z'
[24] 'i'
[25] 'e'
[26] 300
[27] 5
[28] ZABIJ+PRZEZ_RUNDE+ZAPISZ
[29] 5
wynikają z tego 2 problemy:
- napisu nie kończy znak zero (śmieci na końcu stringa)
- dostęp do reszty danych wymaga znajomości długości napisu


Jak to można poprawić?
Wstaw dane na początek tablicy, a napis niech idzie na końcu. Jego długość nie będzie miała znaczenia, wszystkie dane będą miały stałe indeksy w tablicy i string będzie mógł się skończyć na 0



Co do menu to wybierz nowy styl i walnij pętle przez całą tablicę
for(new i=1;i < sizeof(zadania); i++)
i tam menu_additem()

po wybraniu opcji z menu jeśli będzie item >=0 to robisz item++ i masz indeks tablicy zadania[] wybranego questa
Odpowiedz

  • +
  • -
Jak się nazwać - zdjęcie Jak się nazwać 08.08.2011

ok spróbuje trochę to ogarnąć. dzięki
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 08.08.2011

mogles inty i floaty zapisac sobie jako string i potem je parsowac odpowiednio :D

// albo napisac sobie plugin ktory udostepnial by tworzenie "vectorow" znanych min z C++
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 08.08.2011

coś na kształt vectora jest już dostępne w amxx, chodzi mi o api związane z typem Array

mogles inty i floaty zapisac sobie jako string i potem je parsowac odpowiednio

liczby jako tekst nadają się do plików, ale nie do tablic :wstyd:
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 09.08.2011

lepiej zrobic tablice stringow i parsowac niz sobie mieszac to pozatym konwersja w druga strone nie wchodzi w gre :D

chodzilo mi o plugin ktory by wlasnie uzywal dynamicznych tablic zeby symulowac vector czyli po 1 typie tablicy na typ danych i jedna tablica intow do przechowywania kolejnosci danych :D

//btw nie weim jak jest w javie ale c# jest tak ze np dane pobrane od usera sa jako string i trzeba je parsowac :D
Odpowiedz

  • +
  • -
Vertricus - zdjęcie Vertricus 09.08.2011

O ile dobrze pamiętam używajać enum można przechowywać różne typy danych w jednej tablicy,
enum costam { a, b[10], Float:c }
tablica[3][costam] = { {1,"a", 1.0},{2,"b", 3.0},{3,"c", 3.0}}

Nie wiem czy jest to poprawnie ale niestety o tej porze nie mam gdzie przestesować.
Odpowiedz

Dwdov - zdjęcie Dwdov 09.08.2011

Tutaj jest tutorial robienia struktur przy użyciu enum
http://amxx.pl/topic/42028-struktury/
Szkoda że PAWN taki zdeka ubogi jest np. klasy by się przydały ; d
Odpowiedz
Zablokowany