←  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

  • +
  • -
MAGNET - zdjęcie MAGNET 22.11.2014

Nie bądź taki hop do przodu. Każdy plugin jest zbudowany inaczej i nie ma stuprocentowego gotowca dla każdego z nich, wiec jeśli chcesz coś zdziałać na forwardach trzeba kod trochę poobserwowac.
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 22.11.2014

Master Yoga skup się. Raz piszesz, że plugin ma 1000 linijek, a raz piszesz, że jeszcze go nie masz. Zdecyduj się, znajdź konkrety i wtedy się pomyśli. Plugin musi mieć funkcję dającą ten extra item (czyli w pewien sposób musi być przygotowany do takiego "zdalnego odpalenia").


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.

 

Ty nie odpalasz fragmentu kodu z innego plginu w swoim, tylko swoim pluginem doprowadzasz do wykonania funkcji w oryginalnym pluginie, wszystko co dalej się dzieje jest obslugiwane już przez oryginalny plugin (dzwieki modele itd), a nie przez Twój.

 

 

Zrozumiałem, że znleziony przez Ciebie plugin to przyklad i to nie ten, którego masz zamiar używać więc nawet go nie otwieram.

Odpowiedz

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

No właśnie chyba odwrotnie najpierw napisałem, że nie mam, a potem, że nie niektóre z itemów osiągają tysiąc linii, więc kto tu powinien się skupić... ?

 


Ty nie odpalasz fragmentu kodu z innego plginu w swoim, tylko swoim pluginem doprowadzasz do wykonania funkcji w oryginalnym pluginie, wszystko co dalej się dzieje jest obslugiwane już przez oryginalny plugin (dzwieki modele itd), a nie przez Twój.
ja nie mówię, że wywołana funkcji jest obługiwana przez mój plugin..., 

ale z tego co napisałeś mam rozumieć, że wywołując jedną funkcję ( public ) reszta wywoła się już razem z nim ?

Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 23.11.2014

Mam wrażenie, że brakuje Ci podstawowej wiedzy na temat działania funkcji, czy też ogólnie programowania. Musisz się trochę podciągnąć z podstaw jeśli idziesz w takie rzeczy. Żeby odpowiedzieć Ci na pytanie w sposób zaspakajający musiałbym przedstawić tutaj setki przypadków, a i tak bardzo możliwe, że nie trafie, bo będziesz miał jeszcze coś innego. Znajdź/zrób te pluginy, których funkcje chcesz uruchamiać ze swojego, a my zobaczymy czy to jest przystosowane czy nie i czy będzie to działało tak jak chcesz czy nie.

Odpowiedz

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

Bardzo możliwe, że czegoś mi brakuję, ponieważ nikt mnie tego nie uczył...


wywołując jedną funkcję ( public ) reszta wywoła się już razem z nim ?
no, aż nie wieże, że sam tak napisałem  :facepalm2:

ale skoro już tu jesteś i udzielasz się w tym temacie to powinieneś próbować nam ( czyt. mi i ogierowi ) pomóc, a nie pierdzielić jakieś głupoty, czepiając się czy też wytykając jakieś głupie błędy. 

 


Żeby odpowiedzieć Ci na pytanie w sposób zaspakajający musiałbym przedstawić tutaj setki przypadków, a i tak bardzo możliwe, że nie trafie, bo będziesz miał jeszcze coś innego.
Widziałeś item pod zm ? No ba pytanie retoryczne skoro udzielasz mi tutaj takich "mądrych" odpowiedzi ... żeby otrzymać item wiadomo, że musimy wywołać funkcję dającą nam ten item. 

Nie mam pojęcia po co się tak głupio czepiasz. Ogier poruszył ten sam temat co ja. 
Jeżeli wywołamy jakąś tam funkcję np.

zp_extra_item_selected(index, item)

i będzie ona przykładowo wyglądała tak :

public zp_extra_item_selected(player, itemid){
if (itemid == g_itemid){
give_item(player, "weapon_broon")
client_print(player, print_chat, "Kupiles jakiś tam item")
(zmienna globalna)
}
}

to da ona nam tylko bron, a co z modelami itd ?

Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 24.11.2014

Słuchaj, ja też uczyłem się sam i uważnie czytałem porady lepszych ode mnie starając się je zrozumieć, a nie się wkurzałem, bo nie rozumiem , dlatego umiem to co umiem.

Zejdź trochę z tonu, bo to Ty prosisz o pomoc, a nie ja nalegam, żeby Ci jej udzielić.

Jeśli masz funkcję tak jak podałeś, czyli:


public zp_extra_item_selected(player, itemid){
if (itemid == g_itemid){
give_item(player, "weapon_broon")
client_print(player, print_chat, "Kupiles jakiś tam item")
(zmienna globalna)
}
}

To w pluginie docelowym (w którym ją masz) też nie ustawia żadnego modelu.

Jednak jeśli w pluginie docelowym wszystko działa jak należy, to znaczy, że tam jest już ustawiony model, a funkcja powinna wyglądać tak:

public zp_extra_item_selected(player, itemid){
     if (itemid == g_itemid){
     give_item(player, "weapon_broon")
     client_print(player, print_chat, "Kupiles jakiś tam item")
     (zmienna globalna)
     ustaw_model(player,itemid)
     ustaw_psio(player,itemid)
     ustaw_gówno(player,iteamid)
     }
}

Musisz po prostu przeczytać plugin docelowy, a następnie wywołać u siebie te funkcje (jedną, dwie, osiem-nie wiem), które są wywoływane żeby ten plugin dał Ci broń, ustawił model itd. Zwykle takie rzeczy są ze sobą ściśle powiązane i zamieszczone w jednej funkcji. 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).

Odpowiedz

  • +
  • -
ogieR8 - zdjęcie ogieR8 24.11.2014

Master - rozumiem troszkę oburzenie, przeszedłem ten etap i dalej go nieco przechodzę, Ci wyżsi z czasem swojej edukacji zapominają jak to przechodzili i jak swoją już wiedzę przekazać tak, byśmy to zrozumieli, jeżyk im się wzbogaca w treści, których nie rozumiemy.. ale nie unoś się, bo dobrze CI powiedzieli, tutaj my mamy kłopot i to oni z dobrej woli nam pomagają :P

 

Ale wiem o co Masterowi chodzi,, rzucę pluginem: http://amxx.pl/topic...5-dragon-canon/

 

Jest tam funkcja za zp menu, nazywa się zp_extra_item_selected, gdybyśmy dobrze pozbyli się cząstek zp, zmiennych, warunków, funkcji z zombie plague (forwardów) to mamy plugin działający bez include zombieplague, do czystego cs'a, aby otrzymać broń wystarczy w/w funkcję zamienić np na : 

public daj_dragoncannon(id) {
	if(!is_user_alive(id) || !is_user_connected(id))
		return PLUGIN_HANDLED

	g_had_cannon[id] = 1
	g_reloading[id] = 0
	
	give_item(id, "weapon_m249")
	
	static ent
	ent = find_ent_by_owner(-1, "weapon_m249", id)	
	
	cs_set_weapon_ammo(ent, 0)
	cs_set_user_bpammo(id, CSW_CANNON, get_pcvar_num(cvar_ammo))
	
	play_weapon_anim(id, 3)
	
	return PLUGIN_CONTINUE
}

i wywołać ją po wpisaniu komendy (register_clcmd) w plugin_init(). Wiem, bo robie tak samo, nawet odnosząc się do tego przykładu.. (bo zagraniczne itemy pod zm'a sa bardzo ciekawe, przede wszystkim bronie ;)). 

 

Ale teraz tak:

plugin bazowy: wywolywana jest funkcja, dostajemy bron, ustawiaja sie zmienne, plugin ciagnie za soba forwardy, eventy, kiedy ma zmieniac model, ustawia mu sprite w hud (żółty znaczek przy zmianie broni), dźwięki strzału, przeładowania, braku ammunicji itd - wszystko działą cacy.

A jak to jest, jeśli funkcję daj_dragoncanon zmienimy na natywną i ją użyjemy ? Podmiany audio-wizualne w eventach również zadziałają ? Bo nie kumam..

Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 24.11.2014

Jeśli wywolasz public daj_dragoncannon, to zostaną wywołane wszystkie polecenia w tym public'u zawarte, z efektami audiowizualnymi włącznie
Odpowiedz

  • +
  • -
ogieR8 - zdjęcie ogieR8 24.11.2014

Nie wiem jak to opisać.. w funkcji natywnej nie ma przekierowania do tych funkcji audio-wizualnych, jak to pokazałeś w przykładzie: 

public zp_extra_item_selected(player, itemid){
     if (itemid == g_itemid){
     give_item(player, "weapon_broon")
     client_print(player, print_chat, "Kupiles jakiś tam item")
     (zmienna globalna)
     ustaw_model(player,itemid)// TUTAJ !!!
     ustaw_psio(player,itemid)// TUTAJ !!!
     ustaw_gówno(player,iteamid) // TUTAJ !!!
     }
}

tylko za pomocą eventów zarejestrowanych w plugin_init coś sie dzieje - zmienia model czy coś, tymbardziej, że większość pluginów o których mówię tworzy zupełnie nową broń, rejestrując nawet bron w weapon_list :X Czy uzycie w takim wypadku natywu na danie broni da znac pluginowi-bibliotece, ze jego eventy sa dalej 'aktualne' ? Nie wiem jak sie wysłowic...

 

tylko, że w tym publicu nie ma funkcji związanych z audio-wizualizacją, a są 'aktywowane' przez eventy, dam CI przykład:

register_forward(FM_SetModel, "fw_SetModel")
public fw_SetModel(entity, model[])
{
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static szClassName[33]
	entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
	
	if(!equal(szClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	static iOwner
	iOwner = entity_get_edict(entity, EV_ENT_owner)
	
	if(equal(model, "models/w_m249.mdl"))
	{
		static ent
		ent = find_ent_by_owner(-1, "weapon_m249", entity)
		
		if(!is_valid_ent(ent))
			return FMRES_IGNORED;
		
		if(g_had_cannon[iOwner])
		{
			entity_set_int(ent, EV_INT_impulse, 1028)
			g_had_cannon[iOwner] = false
			set_pev(ent, pev_iuser3, cs_get_user_bpammo(iOwner, CSW_CANNON))
			entity_set_model(entity, w_model)
			
			return FMRES_SUPERCEDE;
		}
	}
	
	return FMRES_IGNORED;
}

nie ma nigdzie użytej funkcji fw_SetModel oprócz zarejestrowania forwardu

Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 24.11.2014

Nie natywem, a forwardem
Odpowiedz

  • +
  • -
ogieR8 - zdjęcie ogieR8 24.11.2014

Nie rozumiem.. jakie prawidłowe rozwiązanie ? Mam użyć funkcji daj_dragoncannon jako forwardu w moim głównym pluginie ? Znow sie pogubilem, albo w głównym dać public 'sprawdzający' czy gracz ma odpowiednia klase (diablomod) i wywolac ja forwardem w pluginie(bibliotece) ? :X

Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 24.11.2014

Innego rozwiązania nie widzę. Natywem mógłbyś tylko coś "pokazać" - a nie "zadziałać". Jedyne rozwiązanie, jakie mi się nasuwa, to zrobienie forwardu z identycznymi odniesieniami jak wewnątrz funkcji daj_dragoncannon. Kodem sypać nie będę, bo pisze z telefonu.

Chyba ze jeszcze Grankee coś wymóżdży z tym natywem.
Odpowiedz

  • +
  • -
ogieR8 - zdjęcie ogieR8 24.11.2014

nie musisz dokładny kod, ale prosiłbym o zilustrowanie tego forwardu.. bo się gubie w którą strone go użyć. Dobrze mysle ? Bo serio dla mnie osobiscie natywy, forwardy - czy teoria, czy praktyka to jakies jaja osobiscie.. dalej to troszke myle i nie wiem jak to zastosowac wzgledem moich potrzeb :D

 

'w glownym zrobic publica, w ktorym beda warunki i sprawdzenia, czy gracz spelnia wymagania na otrzymanie broni.. poczym w bibliotece uzyc w/w funkcji jako forwardu i w niej daj_dragoncannon' ?

 

Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 24.11.2014

Tak jak mówisz
Odpowiedz

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


Master - rozumiem troszkę oburzenie, przeszedłem ten etap i dalej go nieco przechodzę, Ci wyżsi z czasem swojej edukacji zapominają jak to przechodzili i jak swoją już wiedzę przekazać tak, byśmy to zrozumieli, jeżyk im się wzbogaca w treści, których nie rozumiemy.. ale nie unoś się, bo dobrze CI powiedzieli, tutaj my mamy kłopot i to oni z dobrej woli nam pomagają
 
Ale wiem o co Masterowi chodzi,, rzucę pluginem: http://amxx.pl/topic...5-dragon-canon/
ogierze ja nic nie przechodzę :D i myślę, żę jesteśmy na podobnym poziomie  ;)

jak zauważyłem, to tylko ty zrozumiałeś temat i kilku gości z support team'u, a ten dalej głosi jakieś teorię uważając, że nic nie kumam...

 


To w pluginie docelowym (w którym ją masz) też nie ustawia żadnego modelu.

plugin dał Ci broń, ustawił model itd.

już wiesz o co mi chodzi ? 

 

Magnet widzę, że jesteś maniacem BB, wieć masz coś wspólnego z zombie.|

 

Funkcję napisałem gdzieś tam wyżej ( zp_extra_item_selected )

w niej ustawiona jest zmienna globalna

w pluginie zarejestrowany jest event który sprawdza bron i model 
do sprawdzenia modelu też używana jest ta zmienna globalna, do dmg rownież, więc teraz pytanie 

czy wywołując tę funkcję z zmienną globalną pociągnie ona inne funkcję ?


o czystego cs'a, aby otrzymać broń wystarczy w/w funkcję zamienić np na
no fajnie super tylko, żę ja chciałbym żeby to jednocześnie działało jako item i jako bonus w menu 
Odpowiedz

  • +
  • -
Najlepsza odpowiedź grankee - zdjęcie grankee 25.11.2014


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).

 

Odpowiedz

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

Toż nie mogłeś tak od razu ? 


Zrozum, wywołując  forwardem jakąś funkcję w innym pluginie nie przenosisz jej do swojego tylko uruchamiasz w tymże pluginie (ale zdalnie)
czy ja piszę takie głupoty czy ty nie możesz mnie zrozumieć ? bo ja nie pisałem, że kod z jednego pluginu przeniesie się na inny plugin dlatego też napisałem w temacie wywołać, a nie przenieść,

ale dziękuję Ci za pomoc, oczywiście dostajesz +, choć szło ciężko :D

Temat można zamknąć chyba, że ogier chce jeszcze coś tam pokombinować z tym.

Dzięki

Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 26.11.2014


choć szło ciężko

Nic nie szkodzi, jak ja się uczyłem to też nie wszystko pojmowałem od razu :) Z czasem będziesz coraz bystrzej myślał  ^D^

Odpowiedz