←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Ostatni parametr LoadFileForMe i odpowiedn...

  • +
  • -
Ogen Dogen - zdjęcie Ogen Dogen 08.03.2014

Witam. Tak więc mam 2 pytania. Pierwsze jak powinno wyglądać użycie funkcji LoadFileForMe ? Mam problem z ostatnim parametrem , nie wiem za bardzo jak uzupełnić a w dokumentacji nie ma przykładu.

 

Druga rzecz to kiedy używać funkcji is_user_connected żeby kod był optymalny ? Wiem że przed dodaniem broni się sprawdza lub w menu żeby się zabezpieczyć przed wykonaniem na nie istniejącym graczu. Kiedy jeszcze i jak używać żeby nie zostało niepotrzebnie użyte ?

Odpowiedz

  • +
  • -
^Grzyboo - zdjęcie ^Grzyboo 08.03.2014

Nie ma co się bać o to is_user_connected. Warto w jakiś eventach itd, tam gdzie przez "przypadek" może się wykonać na niepołączonych graczach. Jeśli Cię bardzo boli optymalizacja to możesz stworzyć zmienną i to ją sprawdzać, zamiast natywu.

new gbConnected[33];

public client_connect(id)
    gbConnected[id] = true;

public client_disconnect(id)
    gbConnected[id] = false;

Ogólnie unikać niepotrzebnie w prethinku sprawdzania tego, a tak to możesz wrzucać gdziekolwiek chcesz. Lepiej wrzucić, niż potem mieć crashe, albo inne dziwne problemy bez powodu.

 

Co do LoadFileForMe

 

to &length: "Variable to store the file length. This may return a number larger than the buffer size".

Jest to zmienna referencyjna, czyli do niej zostanie zwrócona długość pliku. Po prostu tworzysz nową zmienną.

new iReturn;
LoadFileForMe(..., ..., ..., iReturn);


Do iReturn zostanie zwrócona owa długość i nic poza tym. Nie ma to żadnego wpływu na działanie funkcji.

Odpowiedz

  • +
  • -
Engi - zdjęcie Engi 08.03.2014


Druga rzecz to kiedy używać funkcji is_user_connected żeby kod był optymalny ? Wiem że przed dodaniem broni się sprawdza lub w menu żeby się zabezpieczyć przed wykonaniem na nie istniejącym graczu. Kiedy jeszcze i jak używać żeby nie zostało niepotrzebnie użyte ?

 

Broni nie daje się martwym graczom dlatego możesz użyć po spawnie is_user_alive(id) (automatycznie nie musisz używać is_user_connected bo jeżeli gracz żywy to wiadomo że połączony, kiedyś ktoś o tym pisał na forum) i wtedy rozdać broń. is_user_connected używaj kiedy operujesz na martwym graczu, a is_user_alive na żywym.

Nie dodawaj tego w żadnych prethinkach, jeżeli musisz sprawdzić czy gracz dalej nie żyje albo czy jest połączony do jakiegoś pluginu np do respawnu to ustaw sobie taska

Odpowiedz

  • +
  • -
Ogen Dogen - zdjęcie Ogen Dogen 09.03.2014

A czy przy pomocy LoadFileForMe mogę wczytać zawartość plików nvault i statystyk .dat ? Chciałbym zrobić sobie funkcje do backup'u takich plików , bo ze zwykłymi nie byłoby problemów ;)


is_user_connected używaj kiedy operujesz na martwym graczu, a is_user_alive na żywym.

To co zwróci is_user_alive kiedy nie ma gracza w grze ? False , -1 ?

 

Odpowiedz

  • +
  • -
Engi - zdjęcie Engi 09.03.2014


To co zwróci is_user_alive kiedy nie ma gracza w grze ? False , -1 ?

 

Dokumentacji już ci się nie chciało sprawdzać ;P

Funkcja zwraca 1 gdy jest żywy, 0 w pozostałych przypadkach.
Odpowiedz

  • +
  • -
Ogen Dogen - zdjęcie Ogen Dogen 09.03.2014

Dzięki , plusy dla was. Nurtuje mnie jeszcze jedna kwestia. Co gdy gracza się zwiesi w grze , bo np. miał problem z łączem a cały czas stoi na respie. Wtedy is_user_alive zwróci true , wykona kod a gracz przecież jest nie połączony. Chyba że to tak samo się zachowuje :)

Odpowiedz

  • +
  • -
Engi - zdjęcie Engi 09.03.2014

Wydaje mi się, że gracz który ma laga (wisi w powietrzu na respie np.) jest traktowany jako połączony i żywy, wnioskuję tym że da się go slapować (zawsze sprawdzam zanim wykopie takiego gracza właśnie slapem, jak wisi w powietrzu to kick), serwer wyrzuca go zazwyczaj sam po 30 sekundach (bodajże ustawiane w server.cfg ale ręki uciąć nie dam) z powodem "connection time out" czy jakoś tak.

Należy jeszcze zwrócić uwagę, że gracz który ma laga, zamknie cs'a i wróci na serwer zanim serwer wykopie jego zlagowanego "klona" będzie miał zmieniony nick z dodanym (1), będzie się "gryzło" z zapisem na nick póki zlagowany "klon" nie zostanie wyrzucony z serwera, a gracz nie zrobi reconnecta

 

Co do kopiowania plików poczekaj na TibacK'a, kiedyś też szukał kodu na kopiowanie pliku .vault ale kazał zamknąć temat, napisałem do niego pw z prośbą o wstawienie tego kodu jeżeli nie jest ściśle tajny ;P

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 09.03.2014

Niestety nie mam tego kodu. Trzebaby kopiowac plik linijke po linijce.
Odpowiedz