Jump to content
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek

Recommended Posts

Jeżeli spędziłeś już trochę czasu na programowaniu w pawnie, na pewno natknąłeś się na funkcje, które pobierają dane z innych pluginów, np. cod_get_user_class, które zwróci ID postaci, na której aktualnie gramy. Warto zauważyć, że owe informacje wychodzą bezpośrednio z silnika cod moda - następuje więc tutaj bezpośrednia wymiana informacji pomiędzy pluginami. W tym poradniku zajmiemy się po krótce tym zagadnieniem.

 

1. Funkcje natywne

Działanie "natywów" sprowadza się do zdalnego wywołania funkcji i ewentualnego zwrócenia rezultatu:

 

natyw.thumb.png.fbaf62ce8efbcd8a9bdc108b02cc3781.png

 

0 - Nasz plugin posiada funkcję natywną szarego pluginu

I - zlecamy wykonanie funkcji

II - szary plugin wykonuje polecenie

III - szary plugin zwraca otrzymany rezultat

IV - rezultat trafia do naszego pluginu

 

 

Teraz pokażę jak takiego natywa z szarego pluginu stworzyć. Przede wszystkim natywy dodajemy w takiej funkcji:

public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)

Daje nam to pewność, że załadują się one w odpowiedniej chwili. 

 

Warto wspomnieć, że natywy możemy wczytywać pojedynczo, bądź jako biblioteka - tworzyć nasze własne pliki #include. W tym poradniku skupię się tylko na tej drugiej metodzie. Musimy więc najpierw zarejestrować naszą bibliotekę:

RegPluginLibrary("NaszaNazwa");

następnie dodajemy natywy w następujący sposób:

CreateNative("nazwa_natywu", Funkcja_Ktora_Ma_Sie_Wywolac);

na samym końcu zwracamy:

return APLRes_Success;

 

Teraz pora na Funkcja_Ktora_Ma_Sie_Wywolac. Natywy pozwalają nam również na bezproblemowe przekazywanie argumentów, jednak funkcja, o której przed chwilą wspomniałem, nie może po prostu tych argumentów przyjmować w nawiasach () - działa to w trochę inny sposób:

public int Funkcja_Ktora_Ma_Sie_Wykonac(Handle plugin, int numParams)
{
	int liczba = GetNativeCell(1);
	
	return liczba * 2;
}

po pierwsze, argumenty muszą być takie, jak wyżej - Handle plugin (uchwyt to NASZEGO pluginu), a także numParams (ilość parametrów, które przekazaliśmy)

Pobieranie argumentów odbywa się poprzez specjalne funkcje GetNative___ (polecam po prostu wpisać sobie "getnative" a także "setnative" w dokumentacji
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!). Każdorazowo pierwszy argument GetNative__ to numer argumentu z naszego wywołania (wyjątkowo numerujemy tutaj od 1!)

W przykładzie powyżej założyłem, że przekazany zostanie jedynie int, który zostanie przemnożony przez 2 i zwrócony.

 

Przykładowe zastosowanie:

Spoiler

/////////////// SZARY PLUGIN \\\\\\\\\\\\\\\\\\\
public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
	RegPluginLibrary("GoCode");
	CreateNative("GC_PomnozPrzezDwa", FunkcjaMnozenia);
	return APLRes_Success;
}

public int FunkcjaMnozenia(Handle plugin, int numParams)
{
	int liczba = GetNativeCell(1);
	
	return liczba * 2;
}

//////////////// NASZ PLUGIN \\\\\\\\\\\\\\\\\\\

#include <GoCode>
  
public void JakasFunkcja(int client)
{
	int wynik = GC_PomnozPrzezDwa(5);
  	PrintToChat(client, "Wynik to %d", wynik); //wypisze 10
}

 

 

Pamiętajmy jednak, że ciągle nie stworzyliśmy biblioteki GoCode! Będzie ona wyglądać mniej więcej tak:

Spoiler

#if defined _GoCode_included_
  #endinput
#endif
#define _GoCode_included_

// mnozy otrzymana liczbe przez 2
native int GC_PomnozPrzezDwa(int liczba);

 

 

Tak przygotowany plik możemy zapisać jako GoCode.inc i wrzucić do naszego folderu include w kompilatorze. Koniec ?

 

2. Forwardy (coming soon)

 

  • Lubię to! 7

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

Nasza historia

Na początku byliśmy małą grupą internetowych znajomych, którzy stwierdzili, że potrzebne jest solidne forum, na którym znajdą się ludzie z dużą wiedzą programistyczną ukierunkowaną na CS:GO. Pomysł powstał na początku 2018 roku, a parę miesięcy później, 19 kwietnia, powstała ta strona internetowa. Jako alternatywna odpowiedź na inne tego typu miejsca, poważnie podeszliśmy do tematu, najpierw tłumacząc angielską dokumentację SourceMod'a na język polski, a potem pisząc rozległe poradniki i wypełniając forum najpotrzebniejszymi rzeczami dla właścicieli serwerów i programistów. Cała nasza Ekipa jest dumna z pracy jaką w to włożyliśmy i cieszymy się że zbierają się wokół nas zarówno ludzie znający tematy sourcepawn'a i konfiguracji, jak i również nowe twarze w tym "biznesie", którym z chęcią niesiemy wiedzę oraz pomoc w rozwiązywaniu problemów.

Największe modyfikacje serwerowe

×
×
  • Create New...