Skocz do zawartości

Komendy


Muzzik
# CSH External VIP Project

Masz dosyć problemów z czynnikiem zaufania w CS2 lub notorycznymi banami?

Sprawdź CSH External VIP Project.


Więcej informacji  

Rekomendowane odpowiedzi

[Poziom]

W jaki sposób zaprojektować komendę, aby odpowiadała naszym wymaganiom?

 

Podstawą jest funkcja:

 

register_concmd ( const cmd[], const function[], flags=-1, info[]="")

 

Definiujemy samą komendę, przypisujemy jej funkcję wywoływaną po wpisaniu komendy. Reszta jest opcjonalna i opiszę niżej. Użyta może być poprzez dowolną konsolę.

 

oraz jej 'siostra'

 

register_clcmd ( const client_cmd[],const function[], flags=-1, info[]="" )

 

Działa tak samo, tylko komenda użyta może być jedynie w konsoli gracza.

 

-----

Argumenty:

const cmd[] lub client_cmd[] - nazwa komendy; zwykle z prefiksem (np. amx_)

const function[] - nazwa publicznej funkcji, obsługującej naszą komendę

flags=-1 - flagi potrzebne do użycia komendy

info[]="" - opis parametrów funkcji

 

 

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plugin"
#define VERSION "1.0"
#define AUTHOR "Author"

public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        register_concmd("komenda1","fnKomenda1");
        register_concmd("komenda2","fnKomenda2",ADMIN_BAN);
        register_concmd("komenda3","fnKomenda3",ADMIN_BAN, " ");
}

public fnKomenda1(id)
{
        console_print(id,"Uzyles komendy nr 1");
        return PLUGIN_HANDLED;
}
public fnKomenda2(id,level,cid)
{
        if (!cmd_access(id,level,cid,1))
                return PLUGIN_HANDLED;
        console_print(id,"Uzyles komendy nr 2");
        return PLUGIN_HANDLED;
}
public fnKomenda3(id,level,cid)
{
        if (!cmd_access(id,level,cid,3))
                return PLUGIN_HANDLED;
        new tekst[64],szliczba[4],iliczba;
        read_argv(1, tekst, 63);
        read_argv(2,szliczba,3);
        iliczba=str_to_num(szliczba);
        console_print(id, "Uzyles komendy nr 3 z parametrami: %s %d",tekst,iliczba);
        return PLUGIN_HANDLED;
}
Każda funkcja będąca wywoływana przez komendy powinna zwracać PLUGIN_HANDLED; trochę inaczej wygląda sprawa, jeśli komendy używamy przez czat.

return PLUGIN_HANDLED; nie pozwoli wysłać do czatu podanej komendy natomiast return PLUGIN_CONTINUE; tego nie zablokuje.

 

 

  • komenda1 - bez argumentów, dostęp ma każdy
Nie wymaga komentarza

 

  • komenda2 - bez argumentów, dostęp ma gracz z flagą ADMIN_BAN
Warto opisać tu działanie

 

if (!cmd_access(id,level,cid,1))
                return PLUGIN_HANDLED;
Na podstawie argumentów funkcji sprawdza czy osoba używająca komendy ma odpowiednie flagi.

Dodatkowo sprawdza ilość parametrów komendy - tablica parametrów zaczyna się nazwą komendy więc wymagamy 1 argumentu. Odpowiada też za komunikat o brakujących parametrach i braku dostępu.

 

  • komenda3 - z argumentami, dostęp ma gracz z flagą ADMIN_BAN
cmd_access jak wyżej

 

Użyłem tutaj funkcji :

read_argv(1, tekst, 63);

Jak wspomniałem wartość 0 to nazwa komendy, stąd prosimy o 1. Ta linia pobiera pierwszy parametr komendy i zapisuje do zmiennej 'tekst'. Pamiętamy o wolnym znaku na /0 (zmienna tekst ma 64 indeksy, a pobieramy 63 znaki).

Podobnie z drugim parametrem, który jednak używać będziemy jako liczby - dlatego pobieramy do stringai konwertujemy do liczby całkowitej funkcją

str_to_num();

 

 

 

Analizując ten tekst można się domyślić, że komendy o podobnej konstrukcji działania może obsługiwać jedna funkcja:

 

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plugin"
#define VERSION "1.0"
#define AUTHOR "Author"

public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        register_concmd("komenda1","fnKomenda");
        register_concmd("komenda2","fnKomenda",ADMIN_BAN);
        register_concmd("komenda3","fnKomenda",ADMIN_BAN, " ");
}
public fnKomenda(id,level,cid)
{
        new cmd[32];
        read_argv(0, cmd, 31);
        if(equal(cmd,"komenda1"))
        {
                console_print(id,"Uzyles komendy nr 1");
        }
        else if(equal(cmd,"komenda2"))
        {
                if (!cmd_access(id,level,cid,1))
                        return PLUGIN_HANDLED;
                console_print(id,"Uzyles komendy nr 2");
        }
        else if(equal(cmd,"komenda3"))
        {
                if (!cmd_access(id,level,cid,3))
                        return PLUGIN_HANDLED;
                new tekst[64],szliczba[4],iliczba;
                read_argv(1, tekst, 63);
                read_argv(2,szliczba,3);
                iliczba=str_to_num(szliczba);
                console_print(id, "Uzyles komendy nr 3 z parametrami: %s %d",tekst,iliczba);
        }
        return PLUGIN_HANDLED;
}

 

 

Źródło amxx.pl

Zapraszam na mojego twittera:

@Muzzikx

Odnośnik do komentarza

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Regulamin. Polityka prywatności