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

[ROZWIĄZANE] Czy żywy gracz może być nie połączony? (is_user_alive)


  • Zamknięty Temat jest zamknięty
13 odpowiedzi w tym temacie

#1 Ossal

    Wszechwidzący

  • Użytkownik

Reputacja: 20
Życzliwy

  • Postów:273
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 11.01.2015 02:51

Pytanie proste, czy istnieje przypadek gdy jednocześnie is_user_alive będzie 1, a is_user_connected bedzie 0?
Inaczej, czy trzeba sprawdzać connect, gdy sprawdzamy alive ==> czy is_user_alive 1 w 100% przypadków wyklucza is_user_connected 0?
Z góry dzięki za odp :)


  • +
  • -
  • 0

#2 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 11.01.2015 02:55

Nie istnieje taki przypadek. Jeśli gracz jest żywy to jest połączony.
  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#3 NoLiFeR

    Wszechobecny

  • Użytkownik

Reputacja: 103
Zaawansowany

  • Postów:483
  • GG:
  • Imię:Adrian
  • Lokalizacja:Sosnowiec
Offline

Napisano 11.01.2015 03:02

Jak gracz może być żywy, nie będąc podłączonym ?


  • +
  • -
  • 0

#4 Ossal

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 20
Życzliwy

  • Postów:273
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 11.01.2015 03:18

Tak samo jak może być martwy w chwili spawnu. Pytanie było dość proste, ale do zaawansowanych, a raczej doświadczonych skrypterów, a tak w ogóle to przed znakiem zapytania nie stawia się spacji :)
Dzięki GwynBleidD za odp, ale poczekam na opinie innych hajtów programowania :v

 


  • +
  • -
  • 0

#5 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

Napisano 11.01.2015 09:19

Jeżeli gracz jest żywy, to musi być połączony, nie ma innej opcji, jak sobie wyobrażasz to inaczej?

Sprawdź sobie - mianowicie sprawdzania, czy gracz jest żywy ma wbudowane najpierw sprawdzenie, czy gracz w ogóle jest połączony.

static cell AMX_NATIVE_CALL is_user_connected(AMX *amx, cell *params) /* 1 param */
{
    int index = params[1];
    
    if (index < 1 || index > gpGlobals->maxClients)
        return 0;
    
    CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
    
    return(pPlayer->ingame ? 1 : 0);
}

extern bool g_bmod_tfc;
static cell AMX_NATIVE_CALL is_user_alive(AMX *amx, cell *params) /* 1 param */
{
    int index = params[1];
    
    if (index < 1 || index > gpGlobals->maxClients)
    {
        return 0;
    }
    
    CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);

    if (g_bmod_tfc)
    {
        edict_t *e = pPlayer->pEdict;
        if (e->v.flags & FL_SPECTATOR || 
            (!e->v.team || !e->v.playerclass))
        {
            return 0;
        }
    }
    
    return((pPlayer->ingame && pPlayer->IsAlive()) ? 1 : 0);
}

Użytkownik Wielkie Jol edytował ten post 11.01.2015 09:22

  • +
  • -
  • 0

"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.


#6 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 11.01.2015 09:32

A czy jak sprawdzam czy gracz jest zywy i zwraca 0 (martwy) To muszę sprawdzać czy jest połączony? Przykład: chcę zrobić komendę która będzie działać tylko dla martwych. Czy samo !alive wystarczy czy muszę !alive && connected?
  • +
  • -
  • 0

#7 IntelCom

    Wszechwiedzący

  • Power User

Reputacja: 100
Zaawansowany

  • Postów:500
  • GG:
  • Imię:Dawid
  • Lokalizacja:Opole
Offline

Napisano 11.01.2015 09:59

Samo !alive wystarczy.
  • +
  • -
  • 0

#8 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

Napisano 11.01.2015 10:06   Najlepsza odpowiedź

return((pPlayer->ingame && pPlayer->IsAlive()) ? 1 : 0);

 

Z tego jasno wynika, że gracz musi być ingame ( w grze ), a dopiero potem jest sprawdzane, czy gracz jest żywy ( zwraca 1 ) czy nie ( zwraca 0 ).


  • +
  • -
  • 1

"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.


#9 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 11.01.2015 11:00

Tak samo jak może być martwy w chwili spawnu. Pytanie było dość proste, ale do zaawansowanych, a raczej doświadczonych skrypterów, a tak w ogóle to przed znakiem zapytania nie stawia się spacji :)
Dzięki GwynBleidD za odp, ale poczekam na opinie innych hajtów programowania :v

W chwili spawnu czasami jest martwy, bo istnieje jeden przypadek, gdzie jeszcze przed spawnem funkcja od spawnu może się wykonać raz. Dostałeś odpowiedź i tutaj opinie innych "hajtów" nic nie zmienią.

A czy jak sprawdzam czy gracz jest zywy i zwraca 0 (martwy) To muszę sprawdzać czy jest połączony? Przykład: chcę zrobić komendę która będzie działać tylko dla martwych. Czy samo !alive wystarczy czy muszę !alive && connected?

!alive && connected
  • +
  • -
  • 0

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


#10 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

Napisano 11.01.2015 12:00

!alive && connected

 

Czemu !alive && connected?


Wielkie Jol (11.01.2015 15:40):
dobra, rozpisałem sobie wszystkie warunki i rzeczywiście,
jeżeli gracz niepołączony && nieżywy zwraca 0
jeżeli gracz połączony i nieżywy zwraca 0

głupie pytanie no ale cóż :P

  • +
  • -
  • 0

"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.


#11 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 11.01.2015 13:27

Skoro gracz ma być nie żywy, to trzeba sprawdzić, czy jest na serwerze, bo gracz nie żywy, może ale nie musi być na serwerze.
  • +
  • -
  • 1

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


#12 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 11.01.2015 14:06


Z tego jasno wynika, że gracz musi być ingame ( w grze ), a dopiero potem jest sprawdzane, czy gracz jest żywy ( zwraca 1 ) czy nie ( zwraca 0 ).

 

 


return((pPlayer->ingame && pPlayer->IsAlive()) ? 1 : 0);

Dla mnie z tego jasno wynika, że jest to warunek złożony z dwóch i jeśli co najmniej jeden jest niespełniony to zwraca 0, jeśli tylko alive będzie niespełniony to zwróci 0, jeśli także connected będzie niespełniony, to też zwróci 0,skąd zatem po zwróconym zerze chcesz wiedzieć czy gracz jest niepołączony czy połączony, ale martwy.

 

Gdyby w przypadku braku gracza nie zwracało 0 lecz np. -1 to funkcja is_user_connected stała by się praktycznie bezużyteczna, chociaż mogłaby zostać dla intuicyjnego znalezienia po nazwie.

 

 

 

Co zaś tyczy się pytania Ossal'a:

Jeśli is_user_alive zwraca 1 to na 100% gracz jest połączony.


Użytkownik grankee edytował ten post 11.01.2015 14:10

  • +
  • -
  • 1

#13 Ossal

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 20
Życzliwy

  • Postów:273
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 11.01.2015 15:13

Jak widać tylko Wielkie Jol potrafił wyjaśnić co i dlaczego, łap plusa, odpowiedź udzielona :)


  • +
  • -
  • -2

#14 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 11.01.2015 15:24

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark





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

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