top of page

Pułapki netcode’u: wiadomości, które po cichu znikają

Zdjęcie autora: Marcel Dütscher
Marcel Dütscher
21 cze
1 minut(y) czytania

Błędy w multiplayerze to osobny gatunek: nic się nie wywala, nic nie loguje błędu – po prostu nic się nie dzieje. Dwie z naszych ulubionych pułapek z własnego kodu sieciowego, ku przestrodze i dla rozrywki.


Pułapka 1: niezarejestrowana wiadomość. Nasz protokół sieciowy zna klasy wiadomości – „blok zmieniony”, „gracz się poruszył”, „czat”. Każdy nowy typ wiadomości trzeba zarejestrować w kodeku, żeby dostał ID i dało się go serializować. Zapomnij o tym, a stanie się najgorsze: wysyłanie się nie udaje, ale w miejscu, gdzie błąd jest po cichu połykany. Żadnego crasha, żadnego logu – funkcja „po prostu nie działa”. Debugowaliśmy to więcej niż raz, aż odruch się utrwalił: nowa klasa wiadomości? Pierwsze pytanie: czy jest zarejestrowana?


Pułapka 2: blok-duch. Kiedy serwer zmienia blok – na przykład dlatego, że jakiś skrypt przekształca teren – musi aktywnie powiadomić wszystkich podłączonych graczy. Zapomnij o rozgłoszeniu, a dostaniesz blok-ducha: serwer wie, że tam jest blok, a klient pokazuje powietrze. Gracz wpada na niewidzialną ścianę – albo, co gorsza, buduje w miejscu, które po stronie serwera już nie istnieje. Dopiero ponowne załadowanie chunka znów zgrywa oba światy.


Wspólny mianownik: w multiplayerze zawsze są dwie prawdy – serwera i klienta – a każde miejsce, które musi je synchronizować, to potencjalna pułapka. Naszą odpowiedzią były testy sprawdzające dokładnie tę synchronizację oraz listy kontrolne dla nowych wiadomości. Mało spektakularne, ale duchy od tamtej pory zdarzają się rzadko.

Ostatnie posty

Zobacz wszystkie

Komentarze


Komentowanie tego posta nie jest już dostępne. Skontaktuj się z właścicielem strony, aby uzyskać więcej informacji.
bottom of page