Robię prostą małą MOBA dla zabawy. Robiłem wszystko dla jednego gracza, a potem zdałem sobie sprawę, „cholera, prawdopodobnie powinienem dodać tryb wieloosobowy, huh”.
Nigdy wcześniej nie robiłem nic z siecią, więc nauka integracji Lidgrena z moją grą była fajna i niesamowita. Chodzi o to, że właściwie wiem, że sposób, w jaki robię, jest zły, ponieważ, o ile wiem, nie jest wystarczająco solidny, aby korzystać z gier głównego nurtu, ale co jest z tym nie tak?
Zasadniczo za każdym razem, gdy gracz wykonuje akcję, wysyła komunikat do serwera z informacją: „hej, właśnie to zrobiłem”. Serwer i klient uruchamiają tę samą symulację. Serwer wysyła następnie wiadomość do wszystkich innych klientów, informując ich, że ten facet to zrobił.
W większości przypadków, z wyjątkiem kilku przypadków, gdy gracz coś robi, klient zakłada, że jest fajny i sam go realizuje. Więc kiedy klikniesz gdzieś prawym przyciskiem myszy, aby się tam przenieść, klient tego gracza po prostu zaczyna tam przenosić swojego faceta, a następnie wysyła wiadomość na serwer z informacją o tym.
Więc w zasadzie:
- Gracz 1 rzuca zaklęcie, dzięki czemu porusza się o 100% szybciej przez sześć sekund
- Lokalny klient Gracza 1 dodaje to wzmocnienie do swojego obiektu Jednostki
- Klient Gracza 1 wysyła do serwera wiadomość „hej, właśnie rzuciłem to zaklęcie”
- Serwer upewnia się, że naprawdę miał wystarczająco dużo many, aby rzucić to zaklęcie, a jeśli tak, dodaje to wzmocnienie do kopii serwera tego obiektu Jednostki
- Serwer wysyła wiadomość do wszystkich pozostałych klientów, mówiąc: „hej, ten facet właśnie rzucił to zaklęcie”
- Każdy inny klient otrzymuje wiadomość i „och dobrze” i dodaje to wzmocnienie do lokalnego obiektu Jednostki dla tego gracza
Przeglądałem różne rzeczy, aby zobaczyć, jak duże gry radzą sobie w trybie dla wielu graczy, i jest to trochę mylące dla kogoś, kto dopiero zaczyna bawić się w te rzeczy, ale wygląda na to, że silnik Source wysyła pakiet zawierający wszystkie zmiany we wszystkim w świat co tyka? Znowu, zupełnie nowy w tych rzeczach, ale czy naprawdę możesz tak często przesyłać tak dużo danych?
Przepraszam, jeśli jest to nieco chaotyczny, ale w zasadzie zastanawiałem się, dlaczego mój prostszy system nie jest właściwą drogą, ponieważ gdyby tak było, inne gry mogłyby z niego skorzystać, prawda?