←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Pobieranie danych z pliku gracza

  • +
  • -
csMaster - zdjęcie csMaster 03.12.2020

Sprawa wygląda tak, że chce utworzyć u gracza plik przez motd_write, a następnie odczytać przez połączenie exec register_clcmd(). Kod wykonuje się po wejściu gracza na serwer.

U mnie za każdym razem wszystko działa poprawnie. Tworzony jest u mnie plik, a następnie za każdym kolejnym razem odczytywany. Ale u innych graczy tak to nie działa. Z tego co zauważyłem, zmiany mapy nie mają na ten kod wpływu. To bardziej wina po stronie gracza. Wnioskuje to po tym że w logach z odczytu tego pliku widać jak gracz kilka razy wchodzi na serwer, i odczyt jest poprawny, ale po jakimś dłuższym czasie np. 30 minut, logi pokazują, że utworzony plik już nie istnieje u gracza. Tak jakby włączył grę jeszcze raz. Gracze spędzający dużo czasu na serwerze, którzy na pewno nie wyłączają gry co chwile, u takich osób przez wiele godzin zawartość pliku jest odczytywana poprawnie.

 

Wie ktoś co może być tego powodem ? Myślałem nad różnymi rzeczami. Że coś typu cl_filterstuffcmd blokuje wykonanie komend u innych graczy, ale nie wiem czy na nonsteam istnieje coś takiego nie licząc CSXGuard. Że gracz nie ma uprawnień do lokalizacji w której ma zainstalowaną grę. Że ma ustawione pliki tylko do odczytu. Albo że jeśli exec jest wykonywane przez serwer to nie można zarejestrować wykonania się komendy u gracza która pochodzi z pliku pod exec. Ale wszystkie te wyjaśnienia wydają mi się absurdalne.

Czy wie ktoś co może powodować usunięcie pliku u gracza, utworzonego przez motd_write, po ponownym włączeniu gry ? Byłbym wdzięczny za wyjaśnienie, albo przynajmniej odpowiedź że niczego takiego nie ma jeśli ktoś wie coś na ten temat.

 

Dodatkowo chciałbym zauważyć że nie jest to modyfikowanie plików gracza. Plik który chce utworzyć domyślnie na pewno nie istnieje w plikach gry. Więc nie uważam żeby można było to nazwać "modyfikowaniem". Przecież to nie to samo co wysłanie graczowi pliku TrackerUI.DLL. Plik który chce utworzyć u gracza, jest nieszkodliwy i służy tylko odczytaniu u gracza ustawień na serwerze.

Odpowiedz

  • +
  • -
TafiT - zdjęcie TafiT 03.12.2020

Rozumiem co chcesz zrobić aczkolwiek spróbujmy inaczej zamiast iść drogą naokoło. Co powiesz na skorzystanie z funkcji:
get_user_info
set_user_info

zapisywać się wszystko będzie w configu gracza, możesz graczom edytować to z poziomu pluginu, pobierać, plik na pewno będzie miał każdy gracz i będzie prościej.
Do tego chcesz zapisywać ustawienia gracza więc myślę, że rozwiązanie jest po prostu najlepsze w Twoim przypadku.

Możesz użyć setinfo _options "312314"
i przykładowo
pierwsza cyfra odpowiada za zapisywanie czy gracz chce mieć hud oraz czy ma być to hud,dhud czy StatusText i kolejno cyferki odpowiadać beda za inne ustawienie bądź
setinfo _hud "1"
setinfo _ustawieniekolejne "0"
aczkolwiek pamietaj, że z linijkami od setinfo nie należy też przesadzać dlatego radziłbym użyć tej pierwszej opcji.


Użytkownik TafiT edytował ten post 03.12.2020 13:46
Odpowiedz

  • +
  • -
csMaster - zdjęcie csMaster 03.12.2020

Ja mam setinfo zapełnione kompletnie. Tak jak i wiele innych graczy, którzy piszą mi że po kupieniu vipa nie mogą wpisać hasła z powodu błędu:

 

Info string length exceeded

 

Wiec rozumiesz dlaczego nie chce korzystać z setinfo. Po prostu niepotrzebnie będę kolejnym graczom robił problemy zapełniając im setinfo.

Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 03.12.2020

Sprawdź jakiej wersji CS'a używają użytkownicy u których jest problem

Odpowiedz

  • +
  • -
csMaster - zdjęcie csMaster 03.12.2020

Spytałem się jednego z takich graczy, odpowiedział v43. O to ci chodziło tak ? Z tym że też mam wersję v43 i u mnie wszystko działa.

Odpowiedz