Skocz do zawartości

Nowy szablon forum

mygo.pl

Stworzyliśmy dla Was nowy wygląd forum. Z pewnością znajdziesz rzeczy, które wg Ciebie mogą zostać zmienione - wspomnij o tym w specjalnym wątku.

Czytaj więcej

Jak założyć własną sieć

serwerów CS

Zastanawiasz się nad prowadzeniem własnej sieci serwerów? Przeczytaj podstawowe informacje, na które należy zwrócić uwagę, przy takim projekcie.

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

Dodaj sieć do której należysz, pozwoli to na promocję i budowę ogólnopolskiej bazy sieci CS.

Czytaj więcej

Jak przygotować plik pod późniejsze programowanie własnej wtyczki?


Dementor11
 Udostępnij

Rekomendowane odpowiedzi

 

Jeżeli chcesz, aby twój serwer był unikalny, to musisz wgrać jakieś ciekawe pluginy, które zainteresują potencjalnych graczy. Najlepiej jest zainstalować jakiś plugin, którego nie znajdzie się na żadnym innym serwerze. Można zlecić wykonanie takiego pluginu osobie trzeciej lub wykonać go samemu. Poniższy poradnik jest skierowany do osób, które wybiorą tę drugą opcję.  

 

Od czego zacząć? 

Ten artykuł skierowany jest do osób, które chociaż w podstawowym poziome znają język programowania SourcePawn.  

Jeżeli znasz ten język, to na samym stępie chciałbym jeszcze zauważyć, że będziemy pisać naszą wtyczkę w SourceModzie. 

 Na początku otwórz swój ulubiony edytor tekstu i utwórz nowy pusty plik. Gdy masz pusty plik, możesz po prostu zacząć pisać kod przy użyciu podstawowego języka, jednak nie będziesz mógł korzystać z żadnych funkcji SourceMod, ponieważ kompilator nie wie o nich. Odbywa się to celowo, aby można było korzystać z SourcePawn poza SourceMod. Ponieważ jednak piszemy wtyczkę SourceMod, warto najpierw włączyć dostęp do funkcji SourceMod. Odbywa się to za pomocą dyrektywy #include. Nakazuje kompilatorowi „wkleić” kod z innego pliku do twojego. 

Oto komenda, za pomocą której włączymy dostęp do funkcji SourceMod. 

 

#include <sourcemod> 

 

Jak to działa? Przede wszystkim zwróć uwagę, że nazwę pliku umieściliśmy w nawiasach kątowych. Nawiasy kątowe informują kompilator, aby szukał w domyślnym katalogu dołączania. Domyślnie jest to skrypt “włącz”.  

 

Możesz go teraz otworzyć i zobaczyć wiele plików inc. Są to pliki SourceMod zawierające pliki opisujące różne funkcje, tagi i inne funkcje dostępne dla wtyczek SourceMod. Pliki są w postaci zwykłego tekstu i zachęcam do ich przeczytania. Zauważysz jednak, że nie ma tam dużo kodu, a na pewno nie wystarcza do wdrożenia wszystkich wspaniałych funkcji SourceMod, więc gdzie one są? Są one zaimplementowane w rdzeniu SourceMod napisanym w C ++ i skompilowanym w pliki binarne, które kończą się w katalogu bin. Więc w jaki sposób twój kod SourcePawn łączy się z rdzeniem SM, jeśli kompilator nie wie o istnieniu tego ostatniego? Pliki źródłowe SourceMod są pisane specjalnie, więc mówią, że implementacja funkcji jest gdzie indziej. Kompilator to rozumie i generuje specjalny kod, który mówi, że to wywołanie funkcji wychodzi na zewnątrz. Gdy SourceMod ładuje wtyczkę, sprawdza te fragmenty kodu i zastępuje własne funkcje wewnętrzne. Nazywa się to łączeniem dynamicznym. 

 

Teraz, gdy mamy dostęp do funkcji SourceMod, nadszedł czas, aby skonfigurować informacje, które będą wyświetlane za pomocą polecenia sm plugin list. Nikt nie lubi nienazwanych wtyczek. W tym celu zajrzymy do pliku sourcemod.inc i zobaczmy format, w jakim informacje powinny zostać zadeklarowane. Zawsze pomocne jest zajrzenie do plików SM, aby znaleźć informacje, których nie znasz. Istnieje również dokumentacja API, ale może być nieaktualna i zawiera tylko podstawowe pliki SM, więc jeśli Twoja wtyczka będzie korzystać z dowolnego rozszerzenia lub innej wtyczki, będziesz musiał przestudiować pliki inc. Więc otwórz sourcemod.inc i przewiń trochę w dół, aż zobaczysz: 

 

/** * Plugin public information. */ struct Plugin { public const char[] name; /**< Plugin Name */ public const char[] description; /**< Plugin Description */ public const char[] author; /**< Plugin Author */ public const char[] version; /**< Plugin Version */ public const char[] url; /**< Plugin URL */ }; 

 

/** * Declare this as a struct in your plugin to expose its information. * Example: * * public Plugin myinfo = * { * name = "My Plugin", * //etc * };  */ public Plugin myinfo; 

 

Mówi nam, że musimy utworzyć globalną zmienną publiczną myinfo, która musi być typu Pluginu, który jest strukturą zawierającą 5 pól, które same są łańcuchami. Może to wydawać się skomplikowane dla początkującego, ale w praktyce jest łatwe. Przejdźmy dalej i stwórzmy: 

 

public Plugin myinfo = { name = "My First Plugin", author = "Me",description = "My first plugin ever", version = "1.0", url = "http://www.sourcemod.net/" }; 

 

Mamy już gotową funkcje SourceMod oraz informacje o wypełnieniu oraz wtyczce. Mamy teraz doskonale uformowaną wtyczkę, którą można skompilować i załadować za pomocą SourceMod. Jest jednak jeden problem - nic nie robi. Możesz mieć ochotę po prostu zacząć pisać kod po deklaracji myinfo, aby zobaczyć, że się nie skompiluje. SourcePawn, w przeciwieństwie do innych języków skryptowych, takich jak Lua, nie pozwala, aby kod był poza funkcjami. Po przeczytaniu tego możesz prawdopodobnie po prostu zdefiniować jakąś funkcję, nazwać ją prawdopodobnie główną, skompilować i załadować wtyczkę oraz zobaczyć, że twój kod nigdy nie zostanie wywołany.  

 

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
 Udostępnij

×
×
  • Dodaj nową pozycję...