Facebook
From Blush Prairie Dog, 7 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 246
  1.  
  2. Siemanko ! :)
  3. W poprzedniej części [KLIK] omawiałem środowisko pracy i kompilator, jeśli macie już wszystko przygotowane to najwyższa pora zacząć "kodzić" :)
  4.  
  5. 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.
  6. Oczywiście omówię przy tym wszystkie elementy, które wykorzystamy, tak więc bez zbędnego przedłużania.. zaczynajmy :).
  7.  
  8. # Kod pluginu
  9. #include
  10.  
  11. int Napisal[MAXPLAYERS+1];
  12.  
  13. public OnPluginStart()
  14. {
  15.         RegConsoleCmd("sm_testowo", Komenda);
  16. }
  17.  
  18. public OnClientAuthorized(client)
  19. {
  20.         Napisal[client] = 0;
  21. }
  22.  
  23. public Action Komenda(client, args)
  24. {
  25.         if(Napisal[client] == 0)
  26.         {
  27.                 PrintToChat(client, "Napisales komende !testowo po raz pierwszy");
  28.                 Napisal[client]++;
  29.         }
  30.         else if(Napisal[client] == 1)
  31.         {
  32.                 PrintToChat(client, "Napisales komende !testowo po raz drugi");
  33.         }
  34. }
  35.  
  36. # Omówienie
  37. Okej kod już mamy, ale co do czego ? Omówmy sobie go po linijce, zacznijmy od:
  38. // Nasz pierwszy plugin !
  39.  
  40. Jest to komentarz czyli dowolny tekst, który jest całkowicie ignorowany przez kompilator. Oznacza to że w komentarzu możemy napisać cokolwiek.
  41. 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.
  42. Komentarze liniowe zaczynają się od "//" i można w nich pisac do końca linijki, wyglądają one tak:
  43.  
  44. public JakasFunkcja()// Jest to jakas funkcja, która robi jakieś rzeczy
  45.  
  46.  
  47. 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:
  48. /*############################################################
  49. ###################### TO JEST SEKCJA KOMENTARZY #############
  50. ##############################################################  */
  51.  
  52. Kolejna linijka:
  53. #include
  54. 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ą.
  55.  
  56. Od linijki:
  57. int Napisal[MAXPLAYERS+1];
  58. 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.
  59.  
  60.  
  61. public OnPluginStart()
  62. {
  63.         RegConsoleCmd("sm_testowo", Komenda);
  64. }
  65.  
  66. 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 ? :)
  67.  
  68.  
  69. public Action Komenda(client, args)
  70. {
  71.         if(Napisal[client] == 0)
  72.         {
  73.                 PrintToChat(client, "Napisales komende !testowo po raz pierwszy");
  74.                 Napisal[client]++;
  75.         }
  76.         else if(Napisal[client] == 1)
  77.         {
  78.                 PrintToChat(client, "Napisales komende !testowo po raz drugi");
  79.         }
  80. }
  81. 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.
  82. if(Napisal[client] == 0)
  83.   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:  
  84.  
  85.  
  86. public OnClientAuthorized(client)
  87. {
  88.         Napisal[client] = 0;
  89. }
  90. 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.
  91.  
  92. 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 :).
  93.