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

Komendy


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
Brak odpowiedzi do tego tematu

#1 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

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

Napisano 14.12.2008 13:26

*
Popularny

[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

Przykład:
#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, "<tekst> <liczba>");
}

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żdyNie wymaga komentarza
komenda2 - bez argumentów, dostęp ma gracz z flagą ADMIN_BANWarto 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_BANcmd_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, "<tekst> <liczba>");
}
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;
}


  • +
  • -
  • 6




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

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