←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Return PLUGIN_CONTINUE, co da...

Zablokowany

MrBombastic - zdjęcie MrBombastic 09.02.2013

Witam,

Mam pytanie, otóż od zawsze mnie zastanawiało, co robi się po tym jak w publicu daje się return plugin_handled, continue
public Bron(id){
    if(get_user_flags(id) & FLAGA)
        return PLUGIN_CONTINUE
        
        if(read_data(2)==CSW_AWP)
        set_pev(id, pev_viewmodel2, "ścieżka do awp")
        
    
        if(read_data(2)==CSW_DEAGLE)
        set_pev(id, pev_viewmodel2, "scieżka do dgl")
    }

}
Jest napisane, że powinno to zwrócić value w warningu, ale nie wiem w jaki sposób i gdzie to umieścić ( przypuszczam jedynie, że to jest return 1, return 0 ale nie jestem pewien. Mógłby mi to ktoś dokładnie wytłumaczyć?
dzięki
Odpowiedz

  • +
  • -
glut - zdjęcie glut 09.02.2013

Opcja szukaj nie boli :)

Proszę tutaj masz np. jak benio101 opisał to

Spoiler
Odpowiedz

MrBombastic - zdjęcie MrBombastic 09.02.2013

No dobra, ale teraz pytanie, skoro po dopisaniu return PLUGIN_CONTINUE muszę zwrócić wartość, to jaką i gdzie?
Odpowiedz

Gość_21977_* 09.02.2013

To, co zrobisz po returnie, nie ma absolutnie znaczenia, gdyż instrukcja return przerywa dalsze wywołanie funkcji.
Co zresztą zakończy się zapewne otrzymaniem ostrzeżenia od debuggera o nieosiągalnym kodzie,

Instrukcja return zarazem zwraca określoną wartość, w tym przypadku PLUGIN_CONTINUE, którego znaczenie poznałeś z poprzedniego postu.
Podsumowując, return zwraca pewną wartość, zarazem przerywając dalsze wywołanie funkcji, także po niej można dodać co najwyżej komentarz.
Odpowiedz

MrBombastic - zdjęcie MrBombastic 09.02.2013

Czyli dając return PLUGIN_HANDLED warning może wyskakiwać, że powinno to zwracać określoną wartość?
Odpowiedz

Gość_21977_* 09.02.2013

Kod za returnem nie zostanie wykonany, a debugger będzie na tyle łaskawy poinformować Cię o tym.
W Twoim kodzie fragment
				if(read_data(2)==CSW_AWP)
set_pev(id, pev_viewmodel2, "ścieżka do awp")


if(read_data(2)==CSW_DEAGLE)
set_pev(id, pev_viewmodel2, "scieżka do dgl")
nie zostanie NIGDY wykonany, gdyż znajduje się za instrukcją return, która przerwie wywołanie funkcji.
Debugger po prostu Cię o tym poinformuje w postaci ostrzeżenia.

@edit. Oczywiście zakładając, że na końcu linijki
if(get_user_flags(id) & FLAGA)
jest klamra, bo najwyraźniej jej brakuje.
Użytkownik benio101 edytował ten post 09.02.2013 18:35
lit.
Odpowiedz

  • +
  • -
Jak się nazwać - zdjęcie Jak się nazwać 09.02.2013

Dodam że warning występuje ponieważ gdy zwracasz jakąś wartość w danym momencie funkcji, pawn wymaga aby także zwrócić wartość domyślną na samym końcu funkcji, czyli przed ostatnią klamrą daj: return PLUGIN_CONTINUE i będzie ok.
Odpowiedz

MrBombastic - zdjęcie MrBombastic 09.02.2013

Dzięki, rozumiem wszystko, pozdrawiam
Odpowiedz

Gość_21977_* 09.02.2013

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany