Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

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

Różnica między pluginem PLUGIN_HANDLED i PLUGIN_CONTINUE


Recommended Posts

W bardzoooo dużym skrócie: HANDLED - blokuje dalszy przebieg całego zdarzenia, a CONTINUE pomija jakiś fragment zdarzenia, ale nie blokuje jego dalszego wywoływania.

Na prostym przykładzie: tworzymy komendę /xxx, która włącza/wyłącza możliwość autobh.

  • Jeśli użyjemy CONTINUE, to zdarzenie zostanie pominięte, ale graczom pokaże się, że użyliśmy tej komendy.
  • Jeśli użyjemy HANDLED, to zdarzenie nie tylko zostanie pominięte, ale również zablokowane, przez co gracze nie będą widzieć, że użyliśmy tej komendy.

Na nieco trudniejszym przykładzie: mamy funkcję client_preThink ( już nieistotne co i jak robi ).

  • Jeśli użyjemy CONTINUE, to konkretne zdarzenie zostanie pominięte i pozwoli innym pluginom funkcjonować.
  • Jeśli użyjemy HANDLED, to zdarzenie nie tylko zostanie pominięte, ale również zablokowane dalsze działanie, przez co w innych pluginach również może się nie wykonywać.

Pozdrawiam

  • Super! 1
  • Przykro mi 1
Link to post
Share on other sites
  • Moderator

Dobrze zostało to opisane w tym temacie, przez użytkownika Greyscale.


Plugin_Continue - Pozwala funkcji iść dalej normalnie, jak powinna z założeń
Plugin_Handled - Zatrzymuje dalszy proces danej funkcji.
Plugin_Changed - Zwraca zmodyfikowane parametry do silnika.
Plugin_Stop - Zatrzymuje nazwijmy to "łańcuch funkcji", i rzeczywiście głównie używane w timerach ? 

 

@Ktzp nadal nie rozumiesz? ?

  • Super! 1
  • Przykro mi 1

 

2a.png


brand-logo.png

Z kodem rabatowym "TIMOR" zyskasz 10% rabatu na wszystkie usługi przez pierwszy miesiąc!

Link to post
Share on other sites
  • Moderator

Już piszę Ci przykład o który prosiłeś. ? Edytuję ten post i Cię oznaczę ? 

 

 

Spoiler
/////// Plugin_Stop
int ilosc_wyslanych_printow; // robie inta globalnie

public void OnPluginStart()
{
		ilosc_wyslanych_printow = 0; // do stworzonego wyzej inta przypisuje wartosc 0
		CreateTimer(0.1, FunkcjaX, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); // tworze powtarzajacy sie co 0.1s timer, ktory odpala FunkcjaX
}
public Action FunkcjaX(Handle timer, any server) // funkcja odpalana przez timer
{
	if(ilosc_wyslanych_printow <= 10) // sprawdzam, czy wartosc inta ilosc_wyslanych_printow jest mniejsza, badz rowna 10
	{ // jesli jest
		PrintToChatAll("BlaBlaBla"); // leci sobie print
		ilosc_wyslanych_printow ++; // dodajemy +1 do inta
	}
	else // jesli nie jest
		return Plugin_Stop; // timer zostanie zatrzymany
		
	return Plugin_Continue; // funkcja sobie leci dalej, timer się powtórzy, ze względu na flagę "TIMER REPEAT"
}
//// Plugin_Continue & Plugin_Changed

public void OnClientPutInServer(int client) // przy wejsciu gracza
{
	SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage); // podpinam go do funkcji OnTakeDamage
}
public void OnClientDisconnect(int client) // przy wyjsciu gracza
{
	SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage); // odpinam go od tej funkcji
}

public Action OnTakeDamage(int client, int &attacker, int &inflictor, float &damage, int &damagetype) // funkcja do ktorej podpielismy graczy przy wejsciu
{
/// PLUGIN_CONTINUE	
	if(!IsValidClient(attacker)) // sprawdzam czy gracz jest prawidlowy - jesli nie jest
		return Plugin_Continue; // to funkcja przechodzi do końca omijając wszystko po drodze

//// PLUGIN_CHANGED
	if(GetClientTeam(client) == GetClientTeam(attacker)) // sprawdzam, czy gracz zadajacy i otrzymujacy obrazenia sa z tego samego teamu
	{// jesli sa, to zalozmy ze mamy friendlyfire 1 i chce zwiekszyc obrazenia o 50
		damage = damage + 50.0;	 // zwiekszam damage, ktory przyszedl jako input(wejscie) do tej funkcji z silnika (patrz argumenty funkcji)
		return Plugin_Changed; // koncze funkcje zwracajac do silnika zmieniona wartosc "damage"		
	} 

	return Plugin_Continue;
}

// PLUGIN_HANDLED
public void OnPluginStart()
{
	RegConsoleCmd("sm_komenda", Komenda); // tworze komende
}

public Action Komenda(int client, int args) 
{
	if(GetUserFlagBits(client) & ADMFLAG_RESERVATION)// no sprawdzam sobie czy gracz ma flage "a" przykladowo
		return Plugin_Handled; // nie pokaze sie na czacie komenda, ktorej uzyl gracz jesli ma flage "a", i dalszy przebieg tej funkcji zostanie zablokowany tutaj, i w kazdym pluginie uzywajacym tej funkcji
	
	if(GetUserFlagBits(client) & ADMFLAG_CUSTOM1)// w innym przypadku robie sobie ifa, ktory sprawdza czy ma flage "o"
		return Plugin_Continue; // pokaze sie na czacie komenda, ktorej uzyl gracz jesli ma flage "o", ale dalszy przebieg tej funkcji zostanie zablokowany
	
	return Plugin_Continue;
}

 

 @Ktzp

  • Super! 1

 

2a.png


brand-logo.png

Z kodem rabatowym "TIMOR" zyskasz 10% rabatu na wszystkie usługi przez pierwszy miesiąc!

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.

  • Similar Content

    • By BsN
      Witam mam problem odnośnie pluginu ze skinami na sourcemod ponieważ jak chcę edytować plik o nazwie core.cfg i database.cfg to wyskakuje mi komunikat o treści 
      "Nazwa pliu nazwa katalogu lub składnia etykiety woluminu jest niepoprawna" Proszę o pomoc 
    • By SzefTotalny13
      Witam, posiadam problem z owym pluginem na supermoce. 
      Problem znajduję się w załączonej grafice. Zbytnio się nie znam na tym wszystkim, więc nie wiem czy po prostu plugin został źle napisany czy problem leży po mojej stronie 😔😥

    • By Termi | Only-Deagl.pl
      Witam, mam problem z 1 pluginem mianowicie przy próbie komplikacji wyskakuje mi taki o to błąd
       
      SourcePawn Compiler 1.10 Copyright (c) 1997-2006 ITB CompuPhase Copyright (c) 2004-2018 AlliedModders LLC plugin.sp(47) : error 088: cannot return a value from a void function plugin.sp(47) : warning 213: tag mismatch 1 Error.
       
      Poniżej zamieszczam kod z pluginem, z góry dziękuje uprzejmie za pomoc. 
      https://wklejaj.pl/33204
    • By younger
      Witam
      dodałem na swój serwer plugin hextags, skonfigurowałem i wszystko działało, po CT wyświetlał się tag itp, ale po tt już nie, wstawiam fragment configu na tt:

      Nie mogę tam znaleźć błędu, może ktoś wie co jest źle
    • By KivbiX
      Siema ma mały problem ponieważ kazdy plugin jaki wgram na pokazywanie obrażeń wygląda tak. Liczę na pomoc i z góry dziękuje 😉

×
×
  • Create New...