Skocz do zawartości

Rekomendowane odpowiedzi

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)

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
5 minut temu, MAGNET napisał:

Spokojnie, przecież masz "coming soon" :3

to czekamy :v

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No dobra, z tą biblioteką trochę zagmatwane , bo w sumie bez jej rejestracji(RegPluginLibrary) plugin też będzie działać poprawnie, jeżeli zrobi się include tego pliku inc. W każdym razie brakuje mi tu innych typów natywów niż int i wyjątków. 😉

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ć obrazków. Dodaj lub załącz obrazki z adresu URL.


×
×
  • Dodaj nową pozycję...