Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Forwardy, rejestrowanie, usuwanie, itp.


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
5 odpowiedzi w tym temacie

#1 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 24.02.2012 23:44

Mam takie pytanie odnośnie forwardów, itp. Może najpierw co do rejestracji forwardów/funkcji (nie wiem jak to dokładnie nazwać :D). W paru pluginach widziałem jak rejestracja takiego forwardu dokonywana jest gdzieś w środku kodu, a jeśli spełniony jest jakiś warunek, to ten forward jest "wyrejestrowywany". Może ktoś mi napisać jak można wyrejestrować każdy forward/funkcję, który został już zarejestrowany? Czyli np. mam
RegisterHam(Ham_TakeDamage, "player", "ObrazeniaPre", 0);
register_forward(FM_AddToFullPack, "client_AddToFullPack", 0);

i teraz chciałbym je "usunąć". No i jeszcze czy w ogóle opłaca się "usuwać" takie forwardy/funkcje, jeśli w danym momencie nie są używane, a aktywować je tylko wtedy gdy są potrzebne?

Co do forwardów, które tworzy się samemu, to w codzie zauważyłem coś takiego
forward_handle = CreateOneForward(pluginy_perkow[perk], "cod_perk_enabled", FP_CELL, FP_CELL, FP_CELL, FP_CELL);
ExecuteForward(forward_handle, ret, id, wartosc, wytrzymalosc, perk);
DestroyForward(forward_handle);

if(ret == 4) {
UstawPerk(id, -1, -1, -1, 1);
return PLUGIN_CONTINUE;
}

Kiedy "ret" zwraca 4? I ogólnie jakie wartości może zwrócić ta zmienna?
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#2 Cypis'

    Master

  • Przyjaciel

Reputacja: 1 162
Super Hero

  • Postów:965
  • GG:
  • Steam:steam
  • Lokalizacja:polska
Offline

Napisano 24.02.2012 23:56

dziś akurat klepałem taki kod, masz kawałek kodu moze ci się przyda:

new HamHook:fHamKill, HamHook:fHamDamage, HamHook:fHamTrace, HamHook:fHamTouch[3];
public RegisterHams(bool:wartosc)
{
if(wartosc)
{
if(fHamKill)
EnableHamForward(fHamKill);
else
fHamKill = RegisterHam(Ham_Killed, "player", "SmiercGraczaPost", 1);

if(fHamDamage)
EnableHamForward(fHamDamage);
else
fHamDamage = RegisterHam(Ham_TakeDamage, "player", "TakeDamage");

if(fHamTrace)
EnableHamForward(fHamTrace);
else
fHamTrace = RegisterHam(Ham_TraceAttack, "player", "TraceAttack");

if(fHamTouch[0])
EnableHamForward(fHamTouch[0]);
else
fHamTouch[0] = RegisterHam(Ham_Touch, "armoury_entity", "DotykBroni");

if(fHamTouch[1])
EnableHamForward(fHamTouch[1]);
else
fHamTouch[1] = RegisterHam(Ham_Touch, "weapon_shield", "DotykBroni");

if(fHamTouch[2])
EnableHamForward(fHamTouch[2]);
else
fHamTouch[2] = RegisterHam(Ham_Touch, "weaponbox", "DotykBroni")

}
else
{
if(fHamKill)
DisableHamForward(fHamKill);

if(fHamDamage)
DisableHamForward(fHamDamage);

if(fHamTrace)
DisableHamForward(fHamTrace);

if(fHamTouch[0])
DisableHamForward(fHamTouch[0]);

if(fHamTouch[1])
DisableHamForward(fHamTouch[1]);

if(fHamTouch[2])
DisableHamForward(fHamTouch[2]);
}
}

RegisterHams(true) - wlacza
RegisterHams(false) - wylacza

A co do codmoda to "ret" zwraca 4 kiedy w tym publicku zwrocimy return 4 ,np:

public cod_perk_enabled(id, wartosc, wytrzymalosc, perk)
{
return 4 // teraz ci zwroci w silniku coda "ret" = 4
}

tu masz wiecej na temat forwardow http://amxx.pl/topic/28693-forwardy/

Użytkownik Cypis' edytował ten post 25.02.2012 00:02

  • +
  • -
  • 1

#3 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 25.02.2012 14:33

Co do forwardów, które tworzy się samemu, to w codzie zauważyłem coś takiego

forward_handle = CreateOneForward(pluginy_perkow[perk], "cod_perk_enabled", FP_CELL, FP_CELL, FP_CELL, FP_CELL);
ExecuteForward(forward_handle, ret, id, wartosc, wytrzymalosc, perk);
DestroyForward(forward_handle);

if(ret == 4) {
UstawPerk(id, -1, -1, -1, 1);
return PLUGIN_CONTINUE;
}

Kiedy "ret" zwraca 4? I ogólnie jakie wartości może zwrócić ta zmienna?

Teraz tak przyjrzałem się lepiej i czy to nie jest tak, że ret (czyli drugi parametr w "ExecuteForward") zwraca to co zwraca dana funkcja do której odwołuje się forward?

Sory, nie zauważyłem edycji postu wyżej :D

Co do "register_forward", to już znalazłem to co chciałem (unregister_forward), ale teraz właśnie czy jest sens to robić? Bo myślę zrobić swojego diablo na wzór coda i w poszczególnych pluginach rejestrować bądź zwalniać dane przychwytywanie zdarzenia w zależności od tego, czy jest ono potrzebne.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#4 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 25.02.2012 14:52

jak robisz dynamiczne to robisz wlasne forwardy a usuwanie forwardów np fakemety sie przydaje np jesli masz prethink i w nim duzo kodu nawalone ale uzywasz go tylko do jakiejs rzeczy na początku rundy to bez sensu wykonywac obliczenia przez calą runde skoro mozesz go wylączyc i znów włączyć

z ham'em jest o tyle ciekawsza rzecz ze mozna przypisać forward do konkretnego ent'a np jak robilbys zombie jesli gracz staje sie zombie wlączasz mu forward staje sie humanem to go wyłączasz to pozwala ci na uzycie mniejszej liczby if'ów i mniejsze obciązenie servera
  • +
  • -
  • 2
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#5 Jak się nazwać

    Wszechmogący

  • Power User

Reputacja: 169
Profesjonalista

  • Postów:617
  • Imię:a
  • Lokalizacja:a
Offline

Napisano 25.02.2012 17:27

Apropo tego ret nawet w pliku inc masz tak jakby wyjaśnienie:
#define COD_STOP 4
czyli jak dasz
return COD_STOP
to tak jakby return 4 co wywołuje przerwanie akcji
  • +
  • -
  • 0
Pisze na zamówienie statystyki pod nvault. GG: 15600964

#6 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 25.02.2012 17:32

Apropo tego ret nawet w pliku inc masz tak jakby wyjaśnienie:
#define COD_STOP 4
czyli jak dasz
return COD_STOP
to tak jakby return 4 co wywołuje przerwanie akcji

Teraz tak przyjrzałem się lepiej i czy to nie jest tak, że ret (czyli drugi parametr w "ExecuteForward") zwraca to co zwraca dana funkcja do której odwołuje się forward?

Specjalnie nie usuwałem tego w poprzednim poście, bo właśnie też zauważyłem to w pliku inc.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych