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

Tworzenie menu


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
50 odpowiedzi w tym temacie

#1 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

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

Napisano 27.06.2009 17:39

*
Popularny

Tworzenie menu

Stary temat składa się tylko z jednej części i autor chyba nie zamierza kontynuować, więc opiszę tworzenie menu od podstaw.

Kilka słów wstępu.
Najpierw zajrzyj do komend i operacji bitowych. Pisząc tutorial zakładam, że czytelnik wie jak budować komendy i co to jest suma bitowa.
W przykładowych źródłach celowo pomijam stałe nagłówki (#include, #define) w celu zmniejszenia objętości tekstu. Kod bez nich się nie skompiluje!


Po pierwsze trzeba wiedzieć, że mamy do dyspozycji 2 metody tworzenia menu:
  • tzw. stara↵ - ręczna, wymaga więcej przygotowania, ale jest elastyczniejsza
  • tzw. nowa↵ - korzystamy z przygotowanych zasobów, za organizację menu odpowiadają natywne funkcje AMXX

Formatowanie

Niezależnie od metody, treść menu formatujemy tymi samymi znakami, a oto one:

^n - nowa linia
^t - tabulator
\w - dalszy tekst będzie miał kolor biały
\y - dalszy tekst będzie miał kolor zółty
\r - dalszy tekst będzie miał kolor czerwony
\d - dalszy tekst będzie miał kolor szary
\R - dalszy tekst będzie wyrównany do prawej

Przykładowe (stare) menu

\yWidzisz to menu?^n^n\w1. Tak^t2. Nie

na początku y, więc tekst do następnego znaku zmiany koloru będzie żółty
jako kolejne rozpoznajemy ^n, czyli po nagłówku "Widzisz to menu?" przechodzimy do nowej linii
następny ^n tworzy linijkę odstępu
teraz mamy w, czyli dalszy tekst będzie biały
ostatni jest ^t, który oddzieli opcję 'tak' od 'nie'

Efekt:

menu1.JPG






Metoda 1

Nasze menu jest pokazywane przy użyciu funkcji
show_menu ( index, keys, const menu[], time = -1, title[] = "" )
index - id gracza
keys - suma odpowiadająca używanym klawiszom, tylko te, które się w niej zawierają będą rozpoznawane przez menu
const menu[] - treść menu, czyli to co zostanie pokazane graczowi
time - czas utrzymania menu na ekranie w sekundach, -1 oznacza, aż do naciśnięcia klawisza z menu
title[] - tytuł, potrzebny do rozpoznania menu

Korzystając z wcześniejszego przykładu menu:
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");
}
public mymenu(id){
	show_menu(id, MENU_KEY_1| MENU_KEY_2, "yWidzisz to menu?^n^nw1. Tak^t2. Nie");
	return PLUGIN_HANDLED;
}
Z nowości mamy:

MENU_KEY_1| MENU_KEY_2

jest to suma bitowa stałych MENU_KEY_1 i MENU_KEY_2. Pierwsza odpowiada klawiszowi 1 (slot1), druga klawiszowi 2 (slot2). Razem stanowią zbiór klawiszy przechwytywanych przez menu.

Ogólnie mamy do dyspozycji 10 klawiszy:
#define MENU_KEY_1		(1<<0)
#define MENU_KEY_2		(1<<1)
#define MENU_KEY_3		(1<<2)
#define MENU_KEY_4		(1<<3)
#define MENU_KEY_5		(1<<4)
#define MENU_KEY_6		(1<<5)
#define MENU_KEY_7		(1<<6)
#define MENU_KEY_8		(1<<7)
#define MENU_KEY_9		(1<<8)
#define MENU_KEY_0		(1<<9)

Ok, pokazaliśmy graczowi menu, zdefiniowaliśmy klawisze, na które menu reaguje. Pora na przechwycenie zdarzeń menu.

Najpierw musimy przypisać naszemu menu jakąś publiczną funkcję. Służy do tego funkcja z
register_menu ( title[], keys, function[], outside=0 )
title - tytuł, potrzebny do rozpoznania menu, musi być dokładnie taki sam jak w show_menu
keys - suma klawiszy, powinna zawierać wszystkie możliwe do użycia w naszym menu klawiszy (np. gdy jedna z opcji jest dostępna tylko dla żywych graczy, jej klawisz również powinien być zsumowany)
function - nazwa publicznej funkcji, do której zostanie przekazane id i klawisz
outside - zmienimy na 1, gdy menu będzie z zewnętrznego źródła (inny plugin, silnik gry)

Kod powinien wyglądać tak:
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");
	
	register_menu("MyMenu",MENU_KEY_1|MENU_KEY_2,"cbMyMenu");
}
public mymenu(id){
	show_menu(id,MENU_KEY_1|MENU_KEY_2, "yWidzisz to menu?^n^nw1. Tak^t2. Nie",-1,"MyMenu");
	return PLUGIN_HANDLED;
}
public cbMyMenu(id, key){
}

Suma klawiszy powtarza się, więc użyjmy stałej. Argumenty funkcji cbMyMenu to id gracza i użyty klawisz. Przyciski numerowane są od zera, więc naciśnięcie 1 prześle key=0, naciśnięcie 2 prześle key=1 itd. Dość mylące rozwiązanie, zwłaszcza patrząc na klawisz 0, dla którego key=9 Dołączona grafika
#define MYMENU_KEYS MENU_KEY_1|MENU_KEY_2
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");
	
	register_menu("MyMenu",MYMENU_KEYS,"cbMyMenu");
}
public mymenu(id){
	show_menu(id, MYMENU_KEYS, "yWidzisz to menu?^n^nw1. Tak^t2. Nie", -1, "MyMenu");
	return PLUGIN_HANDLED;
}
public cbMyMenu(id, key){
	client_print(id, print_chat, "Wybrales opcje: %d", key+1);
}
Aby przypisać operacje danemu klawiszowi wygodnie jest zastosować switch().
#define MYMENU_KEYS MENU_KEY_1|MENU_KEY_2
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");
	
	register_menu("MyMenu",MYMENU_KEYS,"cbMyMenu");
}
public mymenu(id){
	show_menu(id,MYMENU_KEYS, "yWidzisz to menu?^n^nw1. Tak^t2. Nie",-1,"MyMenu");
	return PLUGIN_HANDLED;
}
public cbMyMenu(id, key){
	switch(key){
		case 0:{
			client_print(id, print_chat, "Wybrales opcje Tak");
		}
		case 1:{
			client_print(id, print_chat, "Wybrales opcje Nie");
		}
	}
}

Oczywiście można dodać opcję Anuluj, dodając do sumy klawisz 0 i zmienić nieco treść menu. Nie trzeba dodawać case 9:, gdyż menu automatycznie zamknie się po złapaniu klawisza i nie ma potrzeby wykonywania innych czynności. Gdy chcesz zachować menu na wierzchu nawet po naciśnięciu klawisza za strukturą switch wywołaj funkcję mymenu(id), która ponownie je wyświetli.

------------------------------------------------------------------------------------------------------------------------------------------------


Metoda 2

Nowy styl stworzenia menu pozwala na dynamiczne nim zarządzanie. Tworzeniem treści menu zajmują się przygotowane funkcję, nasza praca polega na dostarczeniu informacji.

Pierwszą operacją jest stworzenie uchwytu. Pozostałe operacje wymagają do niego odwołania. Jeśli pokazujemy wszystkim to samo menu uchwyt może mieć zasięg globalny, a menu utworzone w plugin_init(). W innym razie menu tworzymy tuż przed wyświetleniem. Główna funkcja to:
menu_create ( title[], handler[], ml=0 )
title[] - tytuł, tutaj służy również za nagłówek menu (jeśli nie podamy własnego)
handler[] - nazwa publicznej funkcji, do której przekazywane będą informacje z menu
ml=0 - przestało być używane, nie podajemy

Podawanie klawiszy, na które reaguje menu jest niepotrzebne. Funkcja wyświetlająca potrafi rozpoznać niezbędne klawisze, zależnie od dostępnych opcji.

new gMyMenu
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	gMyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");	
}
public cbMyMenu(id, menu, item){
 
}

Tym razem funkcja cbMyMenu ma aż 3 argumenty: id - index gracza, menu - uchwyt menu, oraz item. Ten ostatni argument zawiera numer wybranej opcji (numerowane od zera). Pozwala np. za pomocą switch() przyporządkować operacje danej opcji. Jest to szczególnie wygodne przy menu wielostronnym. Trzeba pamiętać, że wartość item może być mniejsza od zera - opcja wyjścia z menu to item=-3.

Do dodawania opcji służy funkcja:
menu_additem(menu, const name[], const info[]="", paccess=0, callback=-1);
menu - uchwyt menu
const name[] - tekst opcji
const info[] - informacja wewnętrzna, w większości menu wartość nieistotna
paccess - poziom dostępu do menu, tak samo jak w przypadku komend, np. ADMIN_BAN
callback - w tym miejscu możemy przypisać funkcję kontrolną, o której później

new gMyMenu;
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	gMyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");
	menu_additem(gMyMenu,"Witam");//item=0
	menu_additem(gMyMenu,"Czesc");//item=1
	menu_additem(gMyMenu,"Przyszedl Admin <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' />","",ADMIN_CHAT);//item=2
}
public cbMyMenu(id, menu, item){
	switch(item){
		case 0:{
			client_cmd(id, "say Witam");
		}
		case 1:{
			client_cmd(id, "say Czesc");
		}
		case 2:{
			client_cmd(id, "say Przyszedl Admin <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' />");
		}
	}
}

Mamy menu pokażmy je graczowi.
menu_display(id, menu, page=0);
id - index gracza
menu - uchwyt menu
page - podstrona menu

new gMyMenu;
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");
	
	gMyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");
	menu_additem(gMyMenu,"Witam");//item=0
	menu_additem(gMyMenu,"Czesc");//item=1
	menu_additem(gMyMenu,"Przyszedl Admin <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' />","",ADMIN_CHAT);//item=2
		
}
public mymenu(id){
	menu_display(id, gMyMenu,0);
	return PLUGIN_HANDLED;
}
public cbMyMenu(id, menu, item){
	switch(item){
		case 0:{
			client_cmd(id, "say Witam");
		}
		case 1:{
			client_cmd(id, "say Czesc");
		}
		case 2:{
			client_cmd(id, "say Przyszedl Admin <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' />");
		}
	}
}

menu2.JPG





Żeby pokazać więcej o nowym stylu menu przeniosę uchwyt i tworzenie do mymenu(id). Podstawą różnicą jest potrzeba zniszczenia menu po zakończeniu pracy.
menu_destroy ( menu )
menu - uchwyt menu

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");	
}
public mymenu(id){
	new MyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");
	
	menu_additem(MyMenu,"Witam");//item=0
	menu_additem(MyMenu,"Czesc");//item=1
	menu_additem(MyMenu,"Przyszedl Admin <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' />","",ADMIN_CHAT);//item=2
	
	menu_display(id, MyMenu,0);
	return PLUGIN_HANDLED;
}
public cbMyMenu(id, menu, item){
	switch(item){
		case 0:{
			client_cmd(id, "say Witam");
		}
		case 1:{
			client_cmd(id, "say Czesc");
		}
		case 2:{
			client_cmd(id, "say Przyszedl Admin <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' />");
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

menu_destroy() sprawia, że nasz uchwyt staje się bezużyteczny, czyści pamięć zajmowaną dotychczas przez menu. Oczywiście zamiast go niszczyć, możemy zostawić menu na ekranie. Wystraczy w cbMyMenu ponownie wywołać menu_display(). Wtedy nie powinniśmy dopuścić do wywołania menu_destroy a zwrócić nie PLUGIN_HANDLE tylko PLUGIN_CONTINUE, np. tak:

public cbMyMenu(id, menu, item){
	switch(item){
		case 0:{
			client_cmd(id, "say Witam");
			menu_display(id, menu);
			return PLUGIN_CONTINUE;
		}
		case 1:{
			client_cmd(id, "say Czesc");
		}
		case 2:{
			client_cmd(id, "say Przyszedl Admin <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' />");
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
Efekt: Gdy wybierzemy "Witam" menu pozostanie na ekranie.


Funkcja kontrolna

Do każdej z opcji możemy przypisać taką funkcję. Będzie ona decydować czy dana opcja jest aktywna (biała) czy nieaktywna (szara, bez reakcji na swój przycisk).

Najpierw utwórzmy uchwyt, tym razem dla publicznej funkcji.
menu_makecallback(const function[])
zwróconą wartość przekażemy do menu_additem:

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");	
}
public mymenu(id){
	new MyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");
	new MyMenuFun=menu_makecallback("mcbMyMenu");
	
	menu_additem(MyMenu,"Witam","",0,MyMenuFun);//item=0
	menu_additem(MyMenu,"Czesc","",0,MyMenuFun);//item=1
	menu_additem(MyMenu,"Przyszedl Admin <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' />","",ADMIN_CHAT,MyMenuFun);//item=2
	
	menu_display(id, MyMenu,0);
	return PLUGIN_HANDLED;
}
public cbMyMenu(id, menu, item){
	switch(item){
		case 0:{
			client_cmd(id, "say Witam");
		}
		case 1:{
			client_cmd(id, "say Czesc");
		}
		case 2:{
			client_cmd(id, "say Przyszedl Admin <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' />");
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
public mcbMyMenu(id, menu, item){
	return ITEM_ENABLED;
}
Przypisana funkcja ma taką postać. Zwracana wartość decyduje o aktywności opcji. Ta funkcja sprawi, że wszystkie opcje będą aktywne. Zwrócenie ITEM_DISABLED spowoduje brak aktywności wszystkich/danej opcji zależnie od zastosowania.
public mcbMyMenu(id, menu, item){
	return ITEM_ENABLED;
}

Np. przez taką funkcję
public mcbMyMenu(id, menu, item){
	if(item==1)
		return ITEM_DISABLED;
	return ITEM_ENABLED;
}
Opcja "Czesc" będzie nieaktywna:

menu3.JPG






Dostosowanie

W starym stylu wygląd menu znacznie bardziej zależy od nas, jednak projektowanie menu o kilku stronach może być kłopotliwe. Nowa metoda tworzenia mimo schematycznej budowy ma kilka opcji, które pozwalają dostosować treść menu, ale oczywiście w mniejszym stopniu.

Potrzebuje nowej funkcji:
menu_setprop(menu, prop, ...);
menu - uchwyt menu
prop - wartość z listy:
#define MPROP_PERPAGE	1		/* Liczba opcji na stronę (param1 = liczba, 0=bez stronnicowania, 7=domyślnie) */
#define MPROP_BACKNAME	2		/* Nazwa opcji Back/Wstecz (param1 = tekst) */
#define MPROP_NEXTNAME	3		/* Nazwa opcji Next/Dalej (param1 = tekst) */
#define MPROP_EXITNAME	4		/* Nazwa opcji Exit/Wyjście (param1 = tekst) */
#define MPROP_TITLE	5		/* Nagł&#243;wek menu (param1 = tekst) */
#define MPROP_EXIT	6		/* Opcja wyjścia? (param1 = liczba, MEXIT_ALL - zawsze, MEXIT_NEVER- nidgy) */
#define MPROP_NOCOLORS	8		/* Czy usunąć automatyczne kolory(param1 = liczba, 0=domyślnie) */
#define MPROP_NUMBER_COLOR	10	/* Kolor opis&#243;w przycisk&#243;w (param1 = tekst, "r"=domyślny) */

Przykład użycia:
public mymenu(id){
	new MyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");
	new MyMenuFun=menu_makecallback("mcbMyMenu");
	
	menu_additem(MyMenu,"Witam","",0,MyMenuFun);//item=0
	menu_additem(MyMenu,"Czesc","",0,MyMenuFun);//item=1
	menu_additem(MyMenu,"Przyszedl Admin <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' />","",ADMIN_CHAT,MyMenuFun);//item=2
	
	//opcja wyjścia "Wyjście" zamiast "Exit"
	menu_setprop(MyMenu,MPROP_EXITNAME,"Wyjscie");
 
	//zawsze pokaż opcję wyjścia
	menu_setprop(MyMenu,MPROP_EXIT,MEXIT_ALL);
 
	//kolor cyfry przycisku zmień na ż&#243;łty
	menu_setprop(MyMenu,MPROP_NUMBER_COLOR,"y");
	
	
	menu_display(id, MyMenu,0);
	return PLUGIN_HANDLED;
}

Rezultat:

menu4.JPG






Podsumowanie

Stare menu jest znacznie elastyczniejsze, pozwala nam wpłynąć bezpośrednio na całą treść menu, jednak wymaga więcej pracy. Nowy styl menu, zwłaszcza połączony z globalnymi tablicami standardowymi/dynamicznymi, pozwala nam znacznie zautomatyzować menu. Musimy wybrać między metodami zależnie od zapotrzebowania. Obie są składnikiem biblioteki , więc ma problemu wyboru modułów.

Początkującym programistom Pawna pod AMXX polecam nowy styl - unikniecie wielu błędów.

PS. Do zamknięcia obu menu możemy użyć funkcji:
#define hide_menu(%1) show_menu(%1,0,"^n")
/*
To samo co
public hide_menu(id)
	show_menu(id,0,"^n");
*/



Dodatek

W przykładach menu otwierało się na komendę. Aby pokazać je zaraz po wejściu na serwer należy użyć kodu:
#define TASK_SHOWMENU 12000
 
public client_putinserver(id)
	set_task(1.0, "show_menu_", id+TASK_SHOWMENU);
	
public show_menu_(tid){
	new id=tid-TASK_SHOWMENU;
	new iTeam=get_user_team(id);
 
	new menu_id, keys;
	new menuUp = player_menu_info( id, menu_id, keys );
 
	if ( iTeam && (menuUp <= 0 || menu_id < 0) )
		//Tu pokazujemy menu
		mymenu(id);
	else
		set_task(1.0, "show_menu_", tid);
}
który nie pozwoli nadpisać menu wyboru drużyny i modelu.
  • +
  • -
  • 64

#2 naven

    Hero

  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 27.06.2009 17:57

Elegancko, czekamy na part2;p

R - dalszy tekst będzie wyrównany do prawej

Wracamy na lewą nie pisząc nic?
  • +
  • -
  • 0

#3 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

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

Napisano 27.06.2009 18:03

Wygląda to tak jak cena w menu z bronią. Cały tekst od R do ^n lub końca jest przesunięty w prawo.
  • +
  • -
  • 1

#4 kyku

    Wszechmogący

  • Użytkownik

Reputacja: 166
Profesjonalista

  • Postów:612
  • Lokalizacja:Jasło
Offline

Napisano 27.06.2009 18:49

Macie :^D
Dołączona grafika

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Menu"
#define VERSION "1.0"
#define AUTHOR "ty :)"


public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_clcmd("say /menu","mymenu");
}
public mymenu(id){
    show_menu(id, MENU_KEY_1| MENU_KEY_2, "wTekst ^nnowa linia
^nTekst ^tTabulator 
^nTekst wKolor bialy
^nTekst yKolor zolty
^nwTekst rKolor czerowy
^nwTekst dKolor szary
^nwTekst RZ prawej");
    return PLUGIN_HANDLED;
}

  • +
  • -
  • 0

#5 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

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

Napisano 28.06.2009 13:44

Dostępna pełna wersja tutoriala.
  • +
  • -
  • 1

#6 darkman

    Wszechwiedzący

  • Przyjaciel

Reputacja: 87
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 28.06.2009 15:24

stary tut przeniosłem do kosza, bo się umywa przed tym, gj.
  • +
  • -
  • 0

#7 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

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

Napisano 28.06.2009 18:02

Dzięki

Kilka drobnych poprawek. Potem zrobię i dołączę więcej screenów.
  • +
  • -
  • 1

#8 Wizardius

    Zaawansowany

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:77
  • GG:
  • Lokalizacja:Sieradz
Offline

Napisano 25.10.2009 14:38

#include <amxmodx>

#define PLUGIN "zasady_jail"
#define VERSION "1.0"
#define AUTHOR "Wizzardius"

new gMyMenu

public plugin_init() { 
    register_plugin(PLUGIN, VERSION, AUTHOR) 
    register_clcmd("/menu","gMyMenu");

    gMyMenu=menu_create("Zasady Serwera","gMyMenu")
    menu_additem(gMyMenu,"Zasady Klawisza");//item=0
    menu_additem(gMyMenu,"Zasady Wieznia");//item=1
    menu_additem(gMyMenu,"Zasady FreeDay");//item=2
}
public mymenu(id){
  menu_display(id, gMyMenu,0);
  return PLUGIN_HANDLED
}
public cbMyMenu(id, menu, item){ 
    switch(item){ 
        case 0:{ 
            client_cmd(id, "say Witam"); 
        } 
        case 1:{ 
            client_cmd(id, "say Czesc"); 
        } 
        case 2:{ 
            client_cmd(id, "say Przyszedl Admin :D"); 
        } 
    } 
}

Co źle zrobilem? Bo menu sie w ogóle nie wyswietla? :( Pomozcie, dopiero zaczynam :P
  • +
  • -
  • 0

#9 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 552
Godlike

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

Napisano 25.10.2009 18:57

#include <amxmodx> 

#define PLUGIN "zasady_jail" 
#define VERSION "1.0" 
#define AUTHOR "Wizzardius" 

new gMyMenu 

public plugin_init() { 
    register_plugin(PLUGIN, VERSION, AUTHOR) 
    register_clcmd("/menu","mymenu"); 

    gMyMenu=menu_create("Zasady Serwera","gMyMenu") 
    menu_additem(gMyMenu,"Zasady Klawisza");//item=0 
    menu_additem(gMyMenu,"Zasady Wieznia");//item=1 
    menu_additem(gMyMenu,"Zasady FreeDay");//item=2 
} 
public mymenu(id){ 
  menu_display(id, gMyMenu,0); 
  return PLUGIN_HANDLED 
} 
public cbMyMenu(id, menu, item){ 
    switch(item){ 
        case 0:{ 
            client_cmd(id, "say Witam"); 
        } 
        case 1:{ 
            client_cmd(id, "say Czesc"); 
        } 
        case 2:{ 
            client_cmd(id, "say Przyszedl Admin :D"); 
        } 
    } 
}
może tak
  • +
  • -
  • 1

#10 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

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

Napisano 26.10.2009 13:07

To co napisał DarkGL i jeszcze:
gMyMenu=menu_create("Zasady Serwera","cbMyMenu")

  • +
  • -
  • 1

#11 wlochen

    Zaawansowany

  • Użytkownik

Reputacja: 9
Nowy

  • Postów:79
  • GG:
  • Imię:Kamil
  • Lokalizacja:z Csowa
Offline

Napisano 02.11.2009 19:28

#include <amxmodx>

#define PLUGIN "menu"
#define VERSION "1.0"
#define AUTHOR "wlochen"

new gMyMenu

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_clcmd("/menu","mymenu");

[b]    gMyMenu=menu_create("cs-witnica","gMyMenu")
    menu_additem(gMyMenu,"ykup t r Admina");//item=0
    menu_additem(gMyMenu,"ykup t r vipa ");//item=1
    menu_additem(gMyMenu,"ykup t r slota");//item=2[/b]
}
public mymenu(id){
  menu_display(id, gMyMenu,0);
  return PLUGIN_HANDLED
}
public cbMyMenu(id, menu, item){
    switch(item){
        case 0:{
            client_cmd(id, "say /kupadmina");
        }
        case 1:{
            client_cmd(id, "say /kupvipa");
        }
        case 2:{
            client_cmd(id, "say /kupslota");
        }
    }
}
O:)
mam problem nie chcę mi się skompilować co jest źle?
[edit ]mam już


[edit2] plugin działa tylko że po wpisaniu /menu nic nie wyskakuje pomoże ktoś?
  • +
  • -
  • 0

#12 naven

    Hero

  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 02.11.2009 22:18

#include <amxmodx>

#define PLUGIN "menu"
#define VERSION "1.0"
#define AUTHOR "wlochen"

new gMyMenu

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("/menu","mymenu");

[B)] co to jest? gMyMenu=menu_create("cs-witnica","gMyMenu")
menu_additem(gMyMenu,"ykup t r Admina");//item=0
menu_additem(gMyMenu,"ykup t r vipa ");//item=1
menu_additem(gMyMenu,"ykup t r slota");//item=2[/b]
}
public mymenu(id){
menu_display(id, gMyMenu,0);
return PLUGIN_HANDLED
}
public cbMyMenu(id, menu, item){
switch(item){
case 0:{
client_cmd(id, "say /kupadmina");
}
case 1:{
client_cmd(id, "say /kupvipa");
}
case 2:{
client_cmd(id, "say /kupslota");
}
}
}


  • +
  • -
  • 0

#13 hardbot

    Banned

  • Zbanowany

Reputacja: 0
Nowy

  • Postów:3 049
Offline

Napisano 11.11.2009 22:19

#include <amxmodx>

#define PLUGIN "menu"
#define VERSION "1.0"
#define AUTHOR "wlochen"

new gMyMenu

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("/menu","mymenu");

[color=red][B)] co to jest? gMyMenu=menu_create("cs-witnica","gMyMenu")[/color]
menu_additem(gMyMenu,"ykup t r Admina");//item=0
menu_additem(gMyMenu,"ykup t r vipa ");//item=1
menu_additem(gMyMenu,"ykup t r slota");//item=2[/b]
}
public mymenu(id){
menu_display(id, gMyMenu,0);
return PLUGIN_HANDLED
}
public cbMyMenu(id, menu, item){
switch(item){
case 0:{
client_cmd(id, "say /kupadmina");
}
case 1:{
client_cmd(id, "say /kupvipa");
}
case 2:{
client_cmd(id, "say /kupslota");
}
}
}

z tego co dobrze wiem to jest Nazwa MENU czyli

new gMyMenu;

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("mymenu","mymenu");

To cała nazwa gł. menu [color=red] gMyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");[/color]
menu_additem(gMyMenu,"Witam");//item=0
menu_additem(gMyMenu,"Czesc");//item=1
menu_additem(gMyMenu,"Przyszedl Admin :D","",ADMIN_CHAT);//item=2

}
public mymenu(id){
menu_display(id, gMyMenu,0);
return PLUGIN_HANDLED;
}
public cbMyMenu(id, menu, item){
switch(item){
case 0:{
client_cmd(id, "say Witam");
}
case 1:{
client_cmd(id, "say Czesc");
}
case 2:{
client_cmd(id, "say Przyszedl Admin :D");
}
}
}

Użytkownik hardbot edytował ten post 09.05.2010 20:47


#14 ProJumper

    Początkujący

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:15
  • Lokalizacja:mnie znacie?
Offline

Napisano 18.03.2010 19:59

Co ja tu źle zrobiłem, bo nie chce się skompilować.

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
#define TASK_SHOWMENU 12000


new qMyMenu

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	gMyMenu=menu_create("Jakie wybierasz BunnyHop?","cbMyMenu");
	menu_additem(gMyMenu,"Auto BH");//item=0
	menu_additem(gMyMenu,"Zwykle BH");//item=1

}
public client_putinserver(id){
	set_task(1.0, "show_menu_", id+TASK_SHOWMENU);

}
public mymenu(id){
	menu_display(id, gMyMenu, page=0);
	return PLUGIN_HANDLED;

}
public show_menu_(tid){
	new id=tid-TASK_SHOWMENU;
	new iTeam=get_user_team(id);

	new menu_id, keys;
	new menuUp = player_menu_info( id, menu_id, keys );

	if ( iTeam && (menuUp <= 0 || menu_id < 0) )

		mymenu(id);
	else
		set_task(1.0, "show_menu_", tid);
}

public cbMyMenu(id, menu, item){
	switch(item){
		case 0:{
			client_cmd(id, "say Wybrales auto BH");
			
		}
		case 1:{
			client_cmd(id, "say Wybrales normalne BH");
			
		}
	}
	menu_destroy ( menu ) 
	return PLUGIN_HANDLED;
}

  • +
  • -
  • 0

#15 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

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

Napisano 18.03.2010 20:18

deklaracja z włączonym capsem wygladałaby tak:

new QMENU;

q!=g :D

2 błąd wyeliminujesz używając
menu_display(id, gMyMenu);

zamiast tego z page=0


no i nie wolno niszczyć takiego menu :P wyrzuć to : menu_destroy ( menu )
  • +
  • -
  • 3

#16 ProJumper

    Początkujący

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:15
  • Lokalizacja:mnie znacie?
Offline

Napisano 18.03.2010 21:27

Gdzie jest ten pierwszy błąd? ;P

Ogólnie gdy kompiluje wyskakuje błąd z tą linijką:
gMyMenu=menu_create("Jakie wybierasz BunnyHop?","cbMyMenu");
I jest napisane:
Error: Undefined symbol "gMyMenu" on line 17
Error: Undefined symbol "gMyMenu" on line 18
Warning: Expression has no effect on line 18
Error: Expected token: ";", but found ")" on line 18
Error: Invalid expression, assumed zero on line 18
Error: Too many error messages on one line on line 18

Compilation aborted.
5 Errors.
Could not locate output file E:\skompilowane\menu_bh2.amx (compile failed).


A, i czemu nie można niszczyć takiego menu? :D

@
Już wiem co jest grane. Mały fail. :D

Użytkownik ProJumper edytował ten post 18.03.2010 21:28

  • +
  • -
  • 0

#17 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

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

Napisano 18.03.2010 21:30

menu tworzone w plugin_init powinno być niszczone w plugin_end,
po menu_display i wciśnięciu klawisza przez gracza, menu więcej się nie pokaże :P
  • +
  • -
  • 3

#18 .minD

    Wszechobecny

  • Użytkownik

Reputacja: 57
Pomocny

  • Postów:451
  • Lokalizacja:Łódź
Offline

Napisano 09.05.2010 19:21

temat stary ale nie jest tu opisana jedna rzecz

jak zwiększyć liczbę możliwości do wyboru bo jak robię więcej niż 3 (case:4, case:5 itd.) to w kompilatorze wyskakuje "error 036: empty statement" (dotyczy 2 sposobu)


@edit OMG ale głupotę palnąłem, nie czytać ! xD już naprawiłem sobie :P

Użytkownik .minD edytował ten post 09.05.2010 19:39

  • +
  • -
  • 1

#19 ALIENt

    Życzliwy

  • Użytkownik

Reputacja: 8
Nowy

  • Postów:27
  • Lokalizacja:Warszawa
Offline

Napisano 09.06.2010 23:56

Poprawne menu i tworzenie dodatkowych opcji wyglada tak:


/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
#define TASK_SHOWMENU 12000


new gMyMenu

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	gMyMenu=menu_create("Jakie wybierasz BunnyHop?","cbMyMenu");
	menu_additem(gMyMenu,"Auto BH");//item=0
	menu_additem(gMyMenu,"item1");//item=1
	menu_additem(gMyMenu,"item2");//item=2
	menu_additem(gMyMenu,"item3");//item=3

}
public client_putinserver(id){
	set_task(1.0, "show_menu_", id+TASK_SHOWMENU);

}
public mymenu(id){
	menu_display(id, gMyMenu);
	return PLUGIN_HANDLED;

}
public show_menu_(tid){
	new id=tid-TASK_SHOWMENU;
	new iTeam=get_user_team(id);

	new menu_id, keys;
	new menuUp = player_menu_info( id, menu_id, keys );

	if ( iTeam && (menuUp <= 0 || menu_id < 0) )

		mymenu(id);
	else
		set_task(1.0, "show_menu_", tid);
}

public cbMyMenu(id, menu, item){
	switch(item){
		case 0:{
			client_cmd(id, "say Wybrales auto BH");
			
		}
		case 1:{
			client_cmd(id, "say Wybrales normalne BH");
			
		}
		case 2:{
			client_cmd(id, "say item 2");
		
		}
		case 3:{
			client_cmd(id, "say item 3");	
			
		}
	}
	menu_destroy ( menu ) 
	return PLUGIN_HANDLED;
}

Aby dodac kolejne dodajemy linijki:


menu_additem(gMyMenu,"item3");//item=3


oraz


}
		case 3:{
			client_cmd(id, "say item 3");


Dla tych co mają nadal problemy z rozbudowaniem menu.

Pozdrawiam :)
  • +
  • -
  • 2

#20 DeVvILL

    Zaawansowany

  • Użytkownik

Reputacja: 45
Pomocny

  • Postów:95
  • Lokalizacja:Strzelce Krajenskie
Offline

Napisano 17.06.2010 19:07

Bardzo Fajnie Zrobione dzięki za pomoc leci Repucik

Użytkownik Cs Cs Cs edytował ten post 17.06.2010 19:10

  • +
  • -
  • 0




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

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