←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Pytanie: Jak wywołać plugin innym pluginem.


Najlepsza odpowiedź grankee 25.11.2014 22:12


Jeśli są to na przykład jakieś dzwięki powiązane z używaniem broni to wywołując funkcję dającą broń sprawiasz, że plugin docelowy będzie już to obsługiwał tzn nadpisywał dzwięki, modele itd po wykryciu danej broni specjalnej (wcześniej danej).

 

Wydaje mi się, że jasno tutaj odpowiedziałem.

Jeśli jest to obsługiwane za pomocą eventu to także. Zrozum, wywołując  forwardem jakąś funkcję w innym pluginie nie przenosisz jej do swojego tylko uruchamiasz w tymże pluginie (ale zdalnie) i wszystko jest tak jakbyś uruchomił ją w tym pluginie gdzie ona jest, a jeśli uruchomisz ją w tym pluginie docelowym w którym ona jest to wszystko działa jak należy, ustawia wartości zmiennej globalnej, obsługuje model broni, dźwięki itd (nieważne czy funkcjami bezpośrednio czy w eventach, bo ten plugin w którym jest funkcja dająca broń cały czas działa, ma sygnał że dana osoba dostała extra item, zmienia sobie to w globalnych i robi co trzeba).

 

Przejdź do postu

  • +
  • -
Master Yoga - zdjęcie Master Yoga 13.11.2014

Witam.

Nurtuję mnie takie jedno małe pytanie czy można za pomocą jednego pluginu wywołać drugi ?

Jeśli tak to proszę o odpowiedź w jaki sposób.

I czy zadziałało by to w taki sposób:

 Tworzymy menu z jakimiś tam bonusami

i np po wybraniu dajmy na to złotego m4a1 wywołuje już istniejący plugin z właśnie tą bronią? ( menu i złote m4a1 to 2 różne pluginy )


Użytkownik Master Yoga edytował ten post 13.11.2014 11:39
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 14.11.2014

poczytaj o natywach

Odpowiedz

  • +
  • -
Master Yoga - zdjęcie Master Yoga 17.11.2014

ok tylka ja chce wywołać cały plugin, a nie tylko funkcję ... 

Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 17.11.2014

funkcja pause/unpause

Odpowiedz

  • +
  • -
Master Yoga - zdjęcie Master Yoga 17.11.2014

funkcja pause/unpause

Ja nie chce pauzować pluginów ...
Che z menu wywołać cały inny plugin ( extra item ) ? możliwe ?

Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 18.11.2014

Co to znaczy "wywołać cały plugin"?

Plugin działa cały czas, a to funkcje w danym pluginie powodują że coś się dzieje/zmienia np. dostajesz granata, przyciemnia się mapa, giniesz itp. To wszystko obsługują odpowiednie funkcje.


 Tworzymy menu z jakimiś tam bonusami
i np po wybraniu dajmy na to złotego m4a1 wywołuje już istniejący plugin z właśnie tą bronią? ( menu i złote m4a1 to 2 różne pluginy )

Nie ma czegoś takiego jak "plugin z bronią". Jest plugin, w którym jest funkcja dająca graczowi daną broń, ustawia jej kolor na złoty itd. i to właśnie tą funkcję musisz wywołać z odpowiednimi parametrami. Jeśli jest to funkcja public i znasz jej nazwę oraz parametry to możesz nie ruszając pluginu dającego bron zrobić wymusić forward.

Załóżmy, że masz w pluginie funkcję 

public DajBron(id)
{
//tutaj ciało funkcji dajace bron ammo oraz ustawiajace zloty kolor itd
}

dajesz w swoim pluginie

zd=CreateMultiForward("nazwa_funkcji_dajacej_m4", ET_CONTINUE, FP_CELL);
new zwrot;
ExecuteForward(zd, zwrot, id);//gdzie id to id osoby ktorej ma dac m4

oczywiscie to przyklad, nie wiem jak wyglada ta funkcja w Twoim pluginie, musisz podac konkrety

Odpowiedz

  • +
  • -
Master Yoga - zdjęcie Master Yoga 18.11.2014

( Przecież napisałem w drugim poście, że to extra item - no ale jak chcesz szukać dziury w całym to proszę bardzo :giggle:. )


Plugin działa cały czas,
serio ? :facepalm2: 
Dobra wracając do tematu czy tym sposobem nie wywołam tylko jednej funkcji ? Czyli tak jak to dałeś w przykładzie tylko jednego public'u ?
 
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 19.11.2014

Dostałeś wędkę. Podasz konkrety-otrzymasz pomoc. Będę miał sma tego pluginu od itema to Ci powiem coś więcej. Tak na sucho to mogę 1000 linijek przypuszczeń wypisać i dalej mogę nie trafić w sedno.

Odpowiedz

  • +
  • -
ogieR8 - zdjęcie ogieR8 20.11.2014

Podpinam się pod temat, z chęcią się temu przyjrzę bo w sumie mam ten sam problem/pytanie (jest w tym samym dziale), nie zwróciłem uwagi, że ktoś ma podobny interes.. Jeśli ktoś by taki prosty przykład funkcji z plugin2.amxx wywołał w plugin1.amxx to byłbym wdzięczny (jak widać nie tylko ja, taki schemat, a nie sama teoria, bo czasem jeśli ktoś nie kuma tematu to ciężko ma to w praktyke przenieść :P), najlepiej omijając pliki .inc (ew z jedną dodatkową zmienną przyjmującą wartości 0 i 1.

 

A co do tematu.. 

public set_gun(id) {
	create_gun(id); // dostaje nowa bron
	have_gun[id]=1; // otrzymuje 'uprawnienia' do tej broni..
	client_print(id, print_chat, "Dostales BRON"); // informuje gracza o otrzymaniu BRONI
}

Na tym przykładzie wystarczy wywołać funkcję 'set_gun', która dosłownie pociągnie za sobą funkcję 'create_gun', która znów z kolei pociągnie za sobą resztę.

 

chociaż w sumie mam teraz rozkminę, bo mam identyczny problem jak ten autor i teraz prawie przyznałem mu racje.. bo w moim itemku np są wywoływane różne eventy, ustawia mu model, dźwięk, sprite, tor lotu, dmg, ustala 'strukturę?' broni - dosłownie tworzy nową broń, nawet tworzy nową listę weapon_.. więc otrzymanie takiej broni przez drugi plugin odwzoruje idealnie jak otrzymanie ją przez główny plugin ? :X 

Odpowiedz

  • +
  • -
Master Yoga - zdjęcie Master Yoga 20.11.2014

Widzę w końcu, że ktoś mnie zrozumiał ( Ogier ).
Grankee nie mam pluginów, bo miałem dopiero zamiar takowy wykonać, ale brakowało mi właśnie tego jak to wywołać. 

A może pójść na łatwiznę i zrobić nowy public w pluginie 2 coś takiego: 

Public A(id)
{
kod
}
public B(id)
{
kod
}
public C(id){
kod
} 

Public Wszystkie_publicki(index)
{ 
A(id);
B(id;
C(id);
}

czyli streścić wszystkie publiki w jeden i później wywołać w pluginie nr 1 public wszytkie_publicki(index) ?

Odpowiedz

  • +
  • -
ogieR8 - zdjęcie ogieR8 20.11.2014

Nie, nie, nie, tak nie możesz. Każdy public ma swój czas w którym działa, jeden działa gdy zabijesz (np dodaje expa), jeden gdy zmieniasz bron, jeden na poczatku rundy - roznosci doslownie i nie da sie aktywowac wszystkich naraz, od tego sa eventy, event zmiany broni, nowej rundy wlasnie itd :P

Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 20.11.2014

Możesz na początku mapy po prostu dać pause dla określonego pluginu i w tym menu po wybraniu odpowiedniej pozycji zrobić unpause tego pluginu. Możesz też, jak to mówił grankee wyżej, wykorzystać forwardy to rozruszania pluginu, aby dawał te złote AK.

Tercium non datum
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 21.11.2014

Daj ogólny zarys pomysłu. Ja nie wiem co te funkcje mają robić, co innego jak jedna daje bron, druga daje ammo a trzecia ustawia model, wtedy wszystkie trzeba wykonac naraz (IMHO bezsens). Co innego zaś jeśli tak jak pisał ogieR, jedna funkcja robi coś druga coś innego a trzecia jeszcze coś innego, wtedy wywoływanie ich razem nie ma kompletnie sensu. daj ogólną strukturę funkcji tak jak podałeś + info w środku co dana funkcja ma robić.

Zamiast robić funkcję wywołującą 3 inne funkcje lepiej zamieścić zawartość tychże trzech funkcji w jednej i ją wywołać.


Użytkownik grankee edytował ten post 21.11.2014 01:17
Odpowiedz

  • +
  • -
Master Yoga - zdjęcie Master Yoga 21.11.2014

A no tak sory ogierze nie przemyślane to było, dochodzą jeszcze stocki itp. 

Ogólny zarys mówisz hymm. 

Pomysł był taki, aby zrobić menu dla ostatniego humana ( z tym nie ma problemu ) z kilkoma bonusami takimi jak:

- exp, ap

- extra item'y

- nic / inne
No i nie chciało mi się wdrążać kodu itemow do pluginu z menu ponieważ niektóre osiągały do tysiąca linijek, więc chciałem wywołać istniejący już plugin itemu, ale jak widać nie tylko ja mam takie pomysły :P , więc powiedzmy, że z ogierem mamy "wspólny interes" :D

Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 22.11.2014

No to masz dajmy na to w pluginie już gotową funkcję dającą extra item:

Przykład

public daj_extra_item(id,weapon)

teraz w swoim pluginie daj:

new gFW;
public plugin_init(){
	gFW = CreateMultiForward("daj_extra_item", ET_CONTINUE, FP_CELL, FP_CELL);
}
public callback_menu(){
        //.....
	new iRet;
	ExecuteForward(gFW, iRet,id,WEAPON_GLOCK);
}

o ile funkcja dajaca extra item jest public to powinno zadzialac.

Odpowiedz

  • +
  • -
Master Yoga - zdjęcie Master Yoga 22.11.2014

No tak tylko, że znów wywołam tylko jeden public, który jedynie da mi zwykłą broń i ustawi zmienną globalną na true, a pozostaną jeszcze modele, dmg i inne dodatki.

Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 22.11.2014

Daj plugin od tej broni
Odpowiedz

  • +
  • -
Master Yoga - zdjęcie Master Yoga 22.11.2014


Grankee nie mam pluginów, bo miałem dopiero zamiar takowy wykonać, ale brakowało mi właśnie tego jak to wywołać.
Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 22.11.2014

"No i nie chciało mi się wdrążać kodu itemow do pluginu z menu ponieważ niektóre osiągały do tysiąca linijek"
Ten wgraj
Odpowiedz

  • +
  • -
Master Yoga - zdjęcie Master Yoga 22.11.2014

"No i nie chciało mi się wdrążać kodu itemow do pluginu z menu ponieważ niektóre osiągały do tysiąca linijek"
Ten wgraj

:facepalm2:

aż nie skomentuje tego ...
ale skoro ci tak zależy na jakimś pluginie to specjalnie dla ciebie znalazłem ten : 

~800 linii 

http://amxx.pl/topic/62639-ion-cannon/

Odpowiedz