Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Strona menu - new menu


  • Zamknięty Temat jest zamknięty
10 odpowiedzi w tym temacie

#1 diggs

    Wszechwidzący

  • Użytkownik

Reputacja: 28
Życzliwy

  • Postów:229
  • Lokalizacja:Internet
Offline

Napisano 08.05.2011 18:10

Witam, potrzebuje małej pomocy. Nie jestem do końca pewien jak zrobić funkcje która będzie zwracała nam stronę menu z którego został wybrany item. Przykład:
Mamy menu z nickami graczy, graczy jest powiedzmy 11, więc będą 2 strony tego menu, teraz w zależności z której strony wybierzemy gracza (0 czy 1) po wykonaniu jakiejś funkcji otworzy się nam to samo menu na tej samej stronie.
Przykładowy kod:
public player_menu (id)
{	
	new player_menu;
	
	player_menu = menu_create("\rMenu przyklad", "menu_hanlder");
	
	new plnum = get_maxplayers();
	new name[32];
	new info[64]
	
	for(new i=1; i<=plnum; i++)
	{
		if (is_user_connected(i))
		{
			get_user_name(i, name, 31);
			if(is_user_alive(player_i))
			{
				format(info, 63, "%s", name);
			}
			else
			{
				format(info, 63, "\r%s", name);
			}
			menu_additem(player_menu, info, name);
		}
	}
	
	menu_destroy(menu);
	menu_display(id, player_menu, 0);
	
	return PLUGIN_HANDLED;
}

public menu_hanlder(id, menu, item)
{
	if (item == MENU_EXIT)
	{
		menu_destroy(menu);
		choose_menu(id);
		return PLUGIN_HANDLED;
	}
	
	/*[...]
	robi sie co ma sie zrobic
	[...]*/
	
	menu_display(id, menu, strona);
}
Na razie mam coś takiego, ale przy kompilacji wywala mi błąd
public menu_page(menu, item)
{
	new pages = menu_pages(menu);
	
	if (pages > 1);                   //=============Error: Empty statement
	{
		for(new i=1; i<=pages; i++)
		{
			if(item <= i*7-1)
				return i-1;
		}
	}
	else
	{
		return 0;                   //=============Error: Invalid expression, assumed zero
	}
}
Użyte w taki sposób:
public menu_hanlder(id, menu, item)
{
	if (item == MENU_EXIT)
	{
		menu_destroy(menu);
		choose_menu(id);
		return PLUGIN_HANDLED;
	}
	
	/*[...]
	robi sie co ma sie zrobic
	[...]*/
	
	menu_display(id, menu, menu_page(menu, item));
}
PS. Trochę nie związane z tematem ale spytam przy okazji.
Czym rożni się funkcja public od "nie public" czasami spotyka się w pluginach taką definicje funkcji
funkcja(...)
{
//[...]
}

Użytkownik diggs edytował ten post 08.05.2011 18:16

  • +
  • -
  • 0

cFun.pl BaseBuilderPro v6.5.8 Tirant edit by diggs
IP: 80.82.16.66:27034
b_350_20_D91408_470002_FFFFFA_000000.png

cFun.pl Only AWP - 1000 FPS [SkinsMod]
IP: 80.72.42.113:27015
b_350_20_F8D241_B69427_0F100D_000000.png


#2 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 08.05.2011 20:59

Proponuję krócej:
public menu_page(item)
{	
	return item/7;
}

I też działa :)

Spoiler



PS Rodzaje funkcji w Pawnie - AMXX.pl: Support AMX Mod X
  • +
  • -
  • 2

#3 diggs

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 28
Życzliwy

  • Postów:229
  • Lokalizacja:Internet
Offline

Napisano 09.05.2011 08:15

Dzięki wielkie za linka, leci plusik.
Co do funkcji od stron twoja nie jest idealna jeszcze ;], już wyjaśniam czemu jest zła. Jeśli masz w menu max 8 item'ow ponumerowanych od 0-7 tworzona jest tylko jedna strona w menu bo przyciski next (klawisz 8) i back (klawisz9) nie jest tworzony i item'y mogą wejść na ich miejsce, a wybierając 8 item (o wartości 7 w menu) funkcja zwróci nam błędną stronę bo 1 (czyli drugą tak po ludzku).
Wyjściem z tej sytuacji wydaje się użycie if'a tak jak ja to zrobiłem
if (pages > 1);
ale wracamy do punktu wyjścia ponieważ przy kompilacji pojawiają się znów te same błędy.

Już lepszym rozwiązaniem było by użycie takiej funkcji
public menu_page(menu, item)
{
	new pages = menu_pages(menu);
	
	if (pages > 1);
	{
		for(new i=1; i<=pages; i++)
		{
			if(item <= i*7-1)
				return i;
		}
	}
	else
	{
		return 1;
	}
}
Minusem tej funkcji jest fakt że w przypadku chęci wyświetlenia menu musimy od wyniku odjąć 1. Dodatkowo nie wiem czy funkcja się skompiluje bo nie mam możliwości teraz tego sprawdzenia.

A tak ogólnie dziwi mnie że takiej funkcji nie ma w amxx, ale za to jest funkcja która zwraca liczbę wszystkich stron w menu. Ale po co to???
  • +
  • -
  • 0

cFun.pl BaseBuilderPro v6.5.8 Tirant edit by diggs
IP: 80.82.16.66:27034
b_350_20_D91408_470002_FFFFFA_000000.png

cFun.pl Only AWP - 1000 FPS [SkinsMod]
IP: 80.72.42.113:27015
b_350_20_F8D241_B69427_0F100D_000000.png


#4 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 09.05.2011 09:23

error masz, bo stawiasz średnik po ifie ;P

Chyba mamy różne wersja amxxa, ale i tę jedną stronę da się obejść prosto
public menu_page(menu, item)
{	
	if(menu_items(menu) > 8)
		return item/7;
	return 0;
}

Zamiast odejmować potem możesz zwracać o jeden mniejszą wartość i oraz 0 zamiast 1.

Nasze funkcje wiele się teraz nie różnią, tego fora zastąpiłem dzieleniem.
  • +
  • -
  • 1

#5 diggs

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 28
Życzliwy

  • Postów:229
  • Lokalizacja:Internet
Offline

Napisano 09.05.2011 10:22

Wszystko działa funkcja spełnia wszystkie moje potrzeby, do tego jest prosta i krótka ;]
Dzięki za pomoc leci plusik. Można tę funkcje dodać do działu Gotowe funkcje, może komuś się jeszcze przyda ;]
  • +
  • -
  • 0

cFun.pl BaseBuilderPro v6.5.8 Tirant edit by diggs
IP: 80.82.16.66:27034
b_350_20_D91408_470002_FFFFFA_000000.png

cFun.pl Only AWP - 1000 FPS [SkinsMod]
IP: 80.72.42.113:27015
b_350_20_F8D241_B69427_0F100D_000000.png


#6 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 09.05.2011 10:37

Do gotowych średnio się nadaje, bo można ustawić liczbę opcji na stronę i już nie będzie działać tak fajnie. Musiało by być bardziej uniwersalne.
  • +
  • -
  • 0

#7 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 09.05.2011 14:58

menu_destroy(menu);
to jest chyba niepotrzebne poza tym możesz użyć
player_menu_info
które zwroci ci strone menu ; )
  • +
  • -
  • 0

#8 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 09.05.2011 15:09

playermenu zwraca jeśli gracz widzi menu, po kliknięciu przycisku w callbacku player_menu_info zwraca -1
  • +
  • -
  • 0

#9 diggs

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 28
Życzliwy

  • Postów:229
  • Lokalizacja:Internet
Offline

Napisano 09.05.2011 18:21

Do gotowych średnio się nadaje, bo można ustawić liczbę opcji na stronę i już nie będzie działać tak fajnie. Musiało by być bardziej uniwersalne.

Mi liczba opcji w menu zmienia się "dynamicznie" w zależności od liczby graczy na serwerze i funkcja ta działa dobrze, wiec nie wiem o co ci chodzi.

menu_destroy(menu);
to jest chyba niepotrzebne

W którym miejscu niby jest nie potrzebne?
  • +
  • -
  • 0

cFun.pl BaseBuilderPro v6.5.8 Tirant edit by diggs
IP: 80.82.16.66:27034
b_350_20_D91408_470002_FFFFFA_000000.png

cFun.pl Only AWP - 1000 FPS [SkinsMod]
IP: 80.72.42.113:27015
b_350_20_F8D241_B69427_0F100D_000000.png


#10 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 09.05.2011 20:01

#define MPROP_PERPAGE	1		/* Number of items per page (param1 = number, 0=no paginating, 7=default) */

dla
menu_setprop(menu,MPROP_PERPAGE, 5 )

funkcja nie jest prawidłowa
  • +
  • -
  • 0

#11 diggs

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 28
Życzliwy

  • Postów:229
  • Lokalizacja:Internet
Offline

Napisano 10.05.2011 07:14

Wczoraj testowałem menu i doszedłem do ciekawych wniosków. Okazało się również, że wprowadziłem w błąd siebie i R3X'a. Mianowicie menu zawsze na jednej stronie ustawia maksymalnie 7 item'ów gdy jest ich 8 to ósmy jest już na 2 stronie menu. Więc wystarczy w takim przypadku uszyć pierwszej funkcji R3X'a.
public menu_page(item)
{	
	return item/7;
}

#define MPROP_PERPAGE 1 /* Number of items per page (param1 = number, 0=no paginating, 7=default) */



dla

menu_setprop(menu,MPROP_PERPAGE, 5 )



funkcja nie jest prawidłowa

OK! Zgadzam się zapomniałem o takiej możliwości, ale to już jest trochę niestandardowe menu i mało osób takiego używa.
  • +
  • -
  • 0

cFun.pl BaseBuilderPro v6.5.8 Tirant edit by diggs
IP: 80.82.16.66:27034
b_350_20_D91408_470002_FFFFFA_000000.png

cFun.pl Only AWP - 1000 FPS [SkinsMod]
IP: 80.72.42.113:27015
b_350_20_F8D241_B69427_0F100D_000000.png





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych