Skocz do zawartości
DarkvTen

Pisanie pluginów

Rekomendowane odpowiedzi

Na samym początku pluginów powinniśmy zdefiniować biblioteki, jakich będziemy używać:

#include <biblioteka>

Biblioteki to moduły, ale również "moduły" od osób trzecich.

Potem musimy zdefiniować funkcję plugin_init(). Funkcja ta wykonywana jest przy starcie pluginu, czyli na początku mapy. Rejestrujemy tam wydarzenia, komendy itp.

public plugin_init() {
    register_plugin("Nazwa", "1.0", "autor"); // definiujemy nazwę pluginu, wersję i autora
    //pozostały kod
}

Potem możemy już dodawać nasze funkcje. Niektóre funkcje (public'i) są zdefiniowane w silniku gry, np:

public client_connect(indeks) // funkcja zostanie wykonana podczas łączenia się gracza

Niektóre musimy zdefiniować sami za pomocą wydarzeń w plugin_init, albo wykonać w innej funkcji.

Przykładowy plugin wygląda tak:

#include <amxmodx>
#include <amxmisc>
#include <ColorChat> // dodatkowa biblioteka

    
public plugin_init() {
    register_plugin("Pomoc", "1.0", "DarkvTen");
    register_clcmd("say /pomoc", "wyswietlPomoc"); // zarejestrowanie komendy
    register_clcmd("say /help", "wyswietlPomoc"); // zarejestrowanie komendy
    register_clcmd("say /komendy", "wyswietlPomoc"); // zarejestrowanie komendy
    register_clcmd("say /komenda", "wyswietlPomoc"); // zarejestrowanie komendy
    register_clcmd("say_team /pomoc", "wyswietlPomoc"); // zarejestrowanie komendy
    register_clcmd("say_team /help", "wyswietlPomoc"); // zarejestrowanie komendy
    register_clcmd("say_team /komendy", "wyswietlPomoc"); // zarejestrowanie komendy
    register_clcmd("say_team /komenda", "wyswietlPomoc"); // zarejestrowanie komendy
}

public wyswietlPomoc(id) {
        ColorChat(id, NORMAL, "Pomoc zostala wyswietlona^x03 w Twojej konsoli."); // colorchat to biblioteka kolorująca tekst
        set_task(0.1,"Pomoc",id); // wykonuje funkcję "Pomoc" po upływie 0.1 sekundy
        return PLUGIN_HANDLED; // ukrywa komendę na czacie
}

public Pomoc(id) { // funkcja wyświetla w konsoli pomoc
        console_print(id, "===============::LISTA KOMEND::===============");
        console_print(id, "/reset, /r - resetuje statystyki");
        console_print(id, "/statystyki, /s - wyswietla statystyki");
        console_print(id, "/klasa, /k - menu wyboru klas");
        console_print(id, "/klasy - opisy klas");
        console_print(id, "/perk, /p - informacje o perku");
        console_print(id, "/drop, /d - wyrzuca perk");
        console_print(id, "[e] lub +use - uzycie umiejetnosci klasy");
        console_print(id, "radio3 (C) lub useperk - uzycie perku");
        console_print(id, "/stopsound - wylaczenie / wlaczenie dzwiekow mapy");
        console_print(id, "/pogoda - wlaczenie / wylaczenie pogody");
        console_print(id, "/mapa - przelaczenie dzwiekow mapy i pogody na raz");
        console_print(id, "/roundsound - wylaczenie / wlaczenie dzwiekow na koniec rundy");
        console_print(id, "/sklep - sklepik za monety");
        console_print(id, "/zaklad - zaloz sie");
        console_print(id, "Forum: www.Aterium.pl");
        console_print(id, "Maksymalny poziom: 201 | Ostatni reset: 18.02.2013 18:30");
        console_print(id, "===============::LISTA KOMEND::===============");
}

Zmienne pozwalają na konfigurację funkcji, są niemal podstawą Pawna.

Zmienne dzielimy na trzy grupy:

-logiczne:

new bool:nazwazmiennej

-liczbowe:

new nazwazmiennej

-zmiennoprzecinkowe

new Float:nazwazmiennej

Zmienna logiczna przyjmuje wartość jedynie true/false, zmienna liczbowa liczby całkowitej, a zmiennoprzecinkowa każdy rodzaj liczby.

Zmiennych używa się często do warunkowania różnych rzeczy, ale także przy systemach statystyk i podobnych. Każdy bardziej złożony plugin korzysta ze zmiennych, bez nich nie dałoby rady zrobić cokolwiek.

Warunki, właśnie za pomocą zmiennych lub tablic pozwalają na wykonywanie kodu, gdy warunek zostanie spełniony, lub nie. Dzięki nim możemy operować wieloma rzeczami.

Konstrukcja warunków wygląda tak:

if(warunek) {
//kod
}

Przykładowo:

if(zmienna == 15) {
zmienna++;
}

Kod sprawdzi, czy zmienna równa się 15, jeżeli tak, to zwiększy wartość zmiennej o jeden.

Zmiennych używa się często do sprawdzania, czy gracz żyje, czy jest połączony z serwerem, w jakiej drużynie jest itp.
Przykładowo:

if(!is_user_alive)
return PLUGIN_HANDLED; // Jeżeli osoba nie jest żywa, plugin zatrzyma pracę
 
// dalszy kod

Jest to bardzo przydatne.

Przykładowy plugin korzystający ze zmiennych:

#include <amxmodx>
#include <amxmisc>
#include <ColorChat> // dodatkowa biblioteka
 
new wybral[33]; // zainicjowanie tablicy z danymi dla każdego gracza.
 
public plugin_init() {
    register_plugin("plugin", "1.0", "DarkvTen");
    register_clcmd("say /czat", "wyswietl"); // zarejestrowanie komendy
    register_clcmd("say /reset", "resetuj"); // zarejestrowanie komendy
}
 
public client_connect(id) {
        wybral[id] = false; // ustawianie zmiennej przy łączeniu się z serwerem
}

public wyswietl(id) {
        if(wybral[id] || !is_user_alive(id))
                return PLUGIN_HANDLED; // sprawdza, czy gracz już wybierał, i czy żyje. Jeżeli nie, kończy pracę.
        ColorChat(id, GREEN, "Mozesz wybrac jeszcze ^x03 jeden raz.");
        wybral[id] = true;
}
 
public resetuj(id)
        wybral[id] = false; //ustawia zmienną wybrał na "false"

Poradnik opracował @DarkvTen dla Aterium.pl
Wszelkie prawa kopiowania zabronione ©

  • Lubię to 3
  • Haha 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

I tak nic z tego nie rozumiem, ale dam plusika za chęci :p 

Przez  DarkvTen,

Gdzie ten +? Bo nie widzę go?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Trochę słabo rozpisany. Brak w jakim programie to zrobić (można w każdym :D). Prosty i banalny plugin do napisania, mogłeś podać, np. /menu, jest to bardziej "rozwinięty" plugin. Leci plusik za chęci :) 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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.


×
×
  • Dodaj nową pozycję...