- Siemanko ! :)
- W poprzedniej części [KLIK] omawiałem środowisko pracy i kompilator, jeśli macie już wszystko przygotowane to najwyższa pora zacząć "kodzić" :)
- Sporo już było gadania na temat przygotowań i tak dalej, dziś spróbujmy napisać prosty plugin, który będzie pokazywał coś na say po wpisaniu komendy !testowo.
- Oczywiście omówię przy tym wszystkie elementy, które wykorzystamy, tak więc bez zbędnego przedłużania.. zaczynajmy :).
- # Kod pluginu
- #include
- int Napisal[MAXPLAYERS+1];
- public OnPluginStart()
- {
- RegConsoleCmd("sm_testowo", Komenda);
- }
- public OnClientAuthorized(client)
- {
- Napisal[client] = 0;
- }
- public Action Komenda(client, args)
- {
- if(Napisal[client] == 0)
- {
- PrintToChat(client, "Napisales komende !testowo po raz pierwszy");
- Napisal[client]++;
- }
- else if(Napisal[client] == 1)
- {
- PrintToChat(client, "Napisales komende !testowo po raz drugi");
- }
- }
- # Omówienie
- Okej kod już mamy, ale co do czego ? Omówmy sobie go po linijce, zacznijmy od:
- // Nasz pierwszy plugin !
- Jest to komentarz czyli dowolny tekst, który jest całkowicie ignorowany przez kompilator. Oznacza to że w komentarzu możemy napisać cokolwiek.
- Komentarze piszemy w celu wyjaśnienia pewnych fragmentów kodu programu, oznaczenia funkcji, modułu, stocka, podzielenia kodu na sekcje itd.. Jest to naprawdę pomocne przy większych projektach. Polecam częste ich używanie.
- Komentarze liniowe zaczynają się od "//" i można w nich pisac do końca linijki, wyglądają one tak:
- public JakasFunkcja()// Jest to jakas funkcja, która robi jakieś rzeczy
- Komentarze wielo-liniowe umieszczane są w /* i */ i można w nich pisać ile sie tylko chce. Komentarz taki może mieć wiele linijek, wygląda on tak:
- /*############################################################
- ###################### TO JEST SEKCJA KOMENTARZY #############
- ############################################################## */
- Kolejna linijka:
- #include
- jest odpowiedzialna za moduł, z którego nasz plugin może pobierać informacje. Przykładowo.. jeśli chcielibyśmy użyć jakiejś funkcji z modułu np. "<cstrike>", a nie dołączylibyśmy go do naszego pluginu to kompilator by zwracał błąd, ponieważ nie jest zaznajomiony z tą funkcją.
- Od linijki:
- int Napisal[MAXPLAYERS+1];
- zaczynają się lekkie schody. Jest to Zmienna Globalna. O zmiennych będę mówił w następnej części, ale już teraz troszkę rozjaśnię jej zastosowanie. W naszym pluginie zmiennej użyjemy do zastosowania warunków, decydujących o tym jaka wiadomość zostanie wyświetlona (o tym dalej). Zostawmy na chwile tą linijkę i przejdźmy do kolejnych 4.
- public OnPluginStart()
- {
- RegConsoleCmd("sm_testowo", Komenda);
- }
- OnPluginStart jest to funkcja, od której rozpoczyna się plugin, tutaj też dołączamy eventy, nasłuchiwanie komend itd. Przed każdą funkcją widnieje "public", czyli jak można się domyślić publikujemy funkcje i jej zawartość. Każdą funkcję rozpoczyna się i kończy nawiasami klamrowymi "{ i }". Kod w środku funkcji najlepiej oddzielać tabulatorem dla czytelności kodu. Funkcja RegConsoleCmd pozwala nam nasłuchiwać komendy !testowo (na chat) lub sm_testowo (w konsoli), działa to tak, że po wpisaniu komendy !testowo, uruchamia nam się funkcja "Komenda". Zatem może do niej przejdźmy ? :)
- public Action Komenda(client, args)
- {
- if(Napisal[client] == 0)
- {
- PrintToChat(client, "Napisales komende !testowo po raz pierwszy");
- Napisal[client]++;
- }
- else if(Napisal[client] == 1)
- {
- PrintToChat(client, "Napisales komende !testowo po raz drugi");
- }
- }
- Omówmy sobie ten kod dokładnie, bo widzimy że weszły nam tu nowe rzeczy :). Jak można zauważyć jest tu również nasza zmienna, o której pisałem chwilkę temu. O co chodzi w tym kodzie ? Już tłumacze. Od początku.. W funkcji OnPluginStart nie było żadnych argumentów (wartości w nawiasach czyli client i args), tutaj się jednak pojawiają, co one oznaczają ? client jest to index gracza, który wprowadził komende, czyli coś na zasadzie id. Zaś args są to argumenty pisane poza komendą !testowo, np. !testowo <gracz> <wartość>. Jeśli już to rozumiecie (Mam taką nadzieję :D), możemy przejść do kodu funkcji.
- if(Napisal[client] == 0)
- if oznacza warunek, w tym warunku sprawdzamy wartość naszej zmiennej, i w zależności od jej wartości wyświetlamy wiadomość. Akurat ta zmienna jest indexowana na każdego klienta z osobna, tak więc wartość dla każdego na serwerze będzie podpisana tylko pod niego. Każda zmienna na początku ma wartość 1, żeby to zmienić, wcześniej w kodzie sprawdzimy dołączenie klienta i deklarujemy jego zmiennej wartość 0. Jest to kod:
- public OnClientAuthorized(client)
- {
- Napisal[client] = 0;
- }
- Wracając do warunku.. Tak jak już wcześniej wspomniałem, warunek sprawdza nam wartość zmiennej klienta o indexie "client" i w zależności od jego wartości wykonuje polecenie w klamrach. Oznacza to, że gdy pierwszy raz wpiszemy komendę !testowo to wyświetli nam się napis Napisales komende !testowo po raz pierwszy i nasza zmienna powiększy się o 1 za sprawą linijki Napisal[client]++; (Wyjaśnie to w następnej części, poświęconej zmiennym).Jeśli wpiszemy komendę po raz drugi, wyświetli nam się druga wiadomość, dalej wyświetlać się będzie komenda 2, ponieważ jej wartość już się nie zmienia.
- To już koniec ! Mam nadzieję, że wszystko co napisałem było jasne i klarowne, jeśli czegoś nie rozumiecie to piszcie w tym temacie :).