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
 

elipson - zdjęcie

elipson

Rejestracja: 12.04.2014
Aktualnie: Nieaktywny
Poza forum Ostatnio: 12.04.2014 23:50
-----

#489840 Tworzenie menu - przykłady

Napisane przez sebul w 13.12.2012 07:50

Tworzenie menu

Wstęp wróć
Flagi gracza: wróć
W pliku "amxconst.inc"
Spoiler

Dodatkowo przydatny będzie ten temat -> http://amxx.pl/topic/60353-flagi/

Wywołanie funkcji komendą: wróć
Potrzebne/użyte funkcje:
  • register_clcmd
    register_clcmd(const client_cmd[], const function[], flags = -1, info[] = "");
    

    client_cmd[] - komenda która musi zostać wpisana w konsoli gracza
    function[] - nazwa funkcji która zostanie uruchomiona (musi to być funkcja publiczna)
    flags - flagi dostępu
    info - opis funkcji
  • lub register_concmd
    register_concmd(const cmd[], const function[], flags = -1, info[] = "");
    

    cmd[] - komenda która musi zostać wpisana w konsoli gracza lub w konsoli serwera
    function[] - nazwa funkcji która zostanie uruchomiona (musi to być funkcja publiczna)
    flags - flagi dostępu
    info - opis funkcji
  • client_print - do wyświetlenia tekstu u gracza
    client_print(index, type, const message[], any:...);
    

    index - id gracza
    type - typ wiadomości

    print_chat - wiadomość na czacie
    print_center - na środku ekranu
    print_console - w konsoli
    print_notify - w konsoli w trybie developerskim

    message[] - wiadomość
    any:... - ciągi formatujące
  • cmd_access - do sprawdzania praw dostępu do funkcji, która jest wywoływana komendą
    cmd_access(id, level, cid, num, bool:accesssilent = false);
    

    id - indeks gracza wywołującego komendę
    level - poziom dostępu
    cid - identyfikator komendy
    num - ilość parametrów razem z komendą (gdy brak parametrów podajemy 1)
    accesssilent - opcjonalny, jeśli podasz true, to komunikaty z błędami nie będą pokazywane
Przykład:
Spoiler


Formatowanie tekstu: wróć
^n - nowa linia
^t - odstęp, inaczej tabulator (różniący się od spacji)
\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

Do formatowania tekstu (nie tylko w menu), można używać format lub formatex dla większej przejrzystości, a szczególnie gdy mamy dużo tekstu do formatowania.

Definicje klawiszy: wróć
W pliku "amxconst.inc"
Spoiler


Użycie switcha: wróć
Warto używać, szczególnie gdy w menu (i nie tylko) mamy dużo opcji.
Przykład:
Spoiler


Stare menu wróć
Do stworzenia starego menu, potrzebujemy:
  • register_menucmd
    register_menucmd(menuid, keys, const function[]);
    

    menuid - id naszego menu, które tworzy się za pomocą "register_menuid"
    keys - jakie klawisze ma rozpoznawać nasze menu, liczba 1023 jest dla wszystkich (od 1 do 0)
    function[] - nazwa funkcji w której pokazujemy menu
  • register_menuid
    register_menuid(const menu[], outside = 0);
    

    menu[] - nazwa menu
    outside - zamieniamy na 1, gdy menu jest z innego źródła, np. inny plugin
  • show_menu
    show_menu(index, keys, const menu[], time = -1, const title[] = "");
    

    index - id gracza
    keys - jakie klawisze ma rozpoznawać nasze menu, liczba 1023 jest dla wszystkich (od 1 do 0)
    menu[] - treść menu
    time - czas (w sekundach) wyświetlania menu, -1 oznacza, że menu zamknie się dopiero, gdy gracz naciśnie jakiś dostępny klawisz
    title[] - nazwa menu
  • Jest jeszcze register_menu, ale ja nigdy z tego nie korzystałem, więc nie będę teraz tej funkcji opisywał.
Przykład:
Spoiler

s1.png


Nowe menu wróć
Do stworzenia nowego menu, potrzebujemy:
  • menu_create - tworzenie menu oraz jego uchwytu
    menu_create(const title[], const handler[], ml = 0);
    

    title[] - nazwa menu oraz jego nagłówek gdy MPROP_TITLE nie ustawione
    handler[] - nazwa funkcji do której będą przekazywane informacje (musi to być funkcja publiczna)
    ml - nie trzeba podawać
  • menu_makecallback - tworzenie funkcji kontrolnej
    menu_makecallback(const function[]);
    

    function[] - nazwa funkcji kontrolnej (musi to być funkcja publiczna), w dalszej części będzie to bardziej opisane
  • menu_additem - dodawania opcji
    menu_additem(menu, const name[], const info[] = "", paccess = 0, callback = -1);
    

    menu - uchwyt stworzonego wcześniej menu
    name[] - nazwa dodawanej opcji
    info[] - dodatkowe informacje, które można przekazać do menu
    paccess - flagi dostępu do danej opcji, w dalszej części będzie to bardziej opisane
    callback - funkcja kontrolna, w dalszej części będzie to bardziej opisane
  • menu_setprop - konfiguracja menu
    menu_setprop(menu, prop, ...);
    

    menu - uchwyt stworzonego wcześniej menu
    prop - opcja z listy (plik "newmenus.inc"):

    #define MPROP_PERPAGE	1	/* Liczba opcji na stronę (param1 = liczba, 0=bez stronnicowania, 7=domyślnie oraz maksymalnie) */
    #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łó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 numerów opcji (param1 = tekst, "\r"=domyślny) */

    ... - wartość wybranej opcji
  • menu_display - wyświetlenie menu
    menu_display(id, menu, page = 0);
    

    id - id gracza
    menu - uchwyt stworzonego wcześniej menu
    page - strona w menu, którą ma wyświetlić jako pierwszą
  • menu_destroy - niszczenie menu
    menu_destroy(menu);
    

    menu - uchwyt stworzonego wcześniej menu
  • menu_item_getinfo - pobieranie informacji z menu (nie do końca opisane)
    menu_item_getinfo(menu, item, &access, info[], infolen, name[] = "", namelen = 0, &callback);
    

    menu - uchwyt stworzonego wcześniej menu
    item - podajemy numer opcji z menu (zaczyna się od 0)
    access - flagi dostępu do danej opcji
    info[] - dodatkowe informacje danej opcji
    infolen - maksymalna długość tablicy info[]
    name[] - nazwa danej opcji
    namelen - maksymalna długość tablicy name[]
    callback - ? (chyba id/uchwyt z funkcji "menu_makecallback")
Przykłady:
Gdy menu jest zawsze takie same dla każdego gracza, wystarczy utworzyć je tylko raz
Spoiler

n1.png

Gdy menu zmienia się, czyli nie jest ciągle takie same, wtedy trzeba tworzyć je oraz niszczyć za każdym razem (z wykorzystaniem get_user_team)
Spoiler

n1.png

Przykład wykorzystania menu_item_getinfo, dodatkowo wykorzystane zostało także: is_user_alive, is_user_connected, get_user_name oraz num_to_str
Spoiler

n2a.png n2b.png


Funkcja kontrolna: wróć
Każda opcja w menu może mieć swoją funkcję kontrolną, która może ją włączyć lub wyłączyć.

Do tworzenia funkcji kontrolnej wykorzystujemy menu_makecallback.

Przykład:
Spoiler

n3.png


Przykłady menu na flagę wróć
Zarówno w starym menu, jak i nowym można ograniczać dostęp albo do całego menu, albo do poszczególnych opcji w menu. Poniżej będzie to pokazane w obu stylach menu.
W starym menu wróć
Blokowanie całego menu, gdy można je wywołać tylko poprzez komendę
Spoiler

Blokowanie całego menu, gdy można je wywołać nie tylko poprzez komendę, np. menu wyświetla się także przy spawnie
Spoiler

Blokowanie opcji w menu po wciśnięciu klawisza (czyli bez blokowania klawiszy)
Spoiler

Blokowanie opcji w menu przed wciśnięciem klawisza (czyli z blokowaniem klawiszy)
Spoiler


W nowym menu wróć
Blokowanie całego menu, gdy można je wywołać tylko poprzez komendę
Spoiler

Blokowanie całego menu, gdy można je wywołać nie tylko poprzez komendę, np. menu wyświetla się także przy spawnie
Spoiler

Blokowanie opcji w menu po wciśnięciu klawisza
Spoiler

Blokowanie opcji w menu przed wciśnięciem klawisza
Spoiler

n4.png

Można jeszcze daną opcję dodawać na flagę przy użyciu menu_makecallback, ale nie warto tego używać do takich rzeczy, skoro są lepsze i szybsze sposoby (te które wymieniłem wyżej).

Paczka pluginów użytych w tym poradniku: Załączony plik  tworzenie_menu.rar   281,57 KB  206 Ilość pobrań


No i tym sposobem doszliśmy do końca ;]
Wróć na początek
  • +
  • -
  • 21