Własność sieciowa jest jednym z bardziej złożonych i często źle rozumianych aspektów silnika Roblox. Gdy gracz ma własność sieciową części lub zespołu, ma pełną kontrolę nad symulacją fizyki tych obiektów. Domyślnie serwer przyznaje własność sieciową nieprzywiązanym częściom klientom z pobliskimi postaciami graczy, aby rozłożyć obciążenie symulacji fizyki. Ten system poprawia responsywność, ale stwarza istotne implikacje bezpieczeństwa, które każdy deweloper musi zrozumieć.
Zrozumienie własności sieciowej
Gdy klient ma własność sieciową nad częściami (w tym swoją postacią), ma dostęp do:
Manipulacja zespołem:
- Teleportacja do dowolnej pozycji.
- Może to być użyte do szybkiego uzyskania własności i kontroli nad tak dużą liczbą nieprzywiązanych części i zespołów, jaką serwer pozwoli.
- Manipulacja ich ruchem i stanem, na przykład latanie lub zmiana prędkości.
- Oszuści mogą ustawić swoją prędkość chodzenia Humanoida na dowolną wartość. Właściwości mogą być modyfikowane lokalnie bez wywoływania jakichkolwiek zdarzeń na lokalnym kliencie, a zmiany takich właściwości nie mogą być odczytywane z lokalnych skryptów.
- Odtwarzanie dowolnych animacji i manipulacja stanem animacji.
- Omijanie przeszkód fizycznych i zmiana ich kolizji.
Manipulacja fizyką
- Kontrola pozycji i rotacji dowolnych nieprzywiązanych części lub mechanizmów, w tym replikacja komponentów Inf lub NaN w CFrames. Ustawianie prędkości części na ekstremalne wartości (w tym Inf lub NaN), co może zakłócać fizykę innych nieprzywiązanych części/zespołów, nawet tych, które nie są własnością oszusta. Często jest to używane do miotania innymi postaciami graczy i pobliskimi częściami. Manipulacja wywoływaniem zdarzeń Touched, w tym całkowite pomijanie wywołania Touched.
Jeśli Twoja gra wymaga krytycznych dla rozgrywki całkowicie nieprzywiązanych części lub zespołów, rozważ użycie API własności sieciowej do ręcznego ustawiania własności lub wyłączenia automatycznej własności.
Walidacja ruchu
W grach konkurencyjnych walidacja ruchu gracza po stronie serwera jest kluczowa dla integralności symulacji, ponieważ klienci kontrolują ruch postaci i fizykę. Jednak uniwersalne rozwiązanie nie istnieje z powodu różnorodnych mechanik rozgrywki.
Tradycyjne metody często zawodzą w złożonych scenariuszach. Proste obliczenia odległości w czasie mogą wystarczyć dla konkurencyjnych strzelanek, ale zawodzą w grach intensywnie wykorzystujących fizykę, które obejmują pojazdy, lot lub skomplikowane interakcje. Walidacja musi również uwzględniać opóźnienia sieciowe.
Dopóki autorytet serwera nie będzie dostępny, deweloperzy wdrażający walidację po stronie klienta muszą zrozumieć, że skuteczne podejścia znacznie się różnią. Podstawowe heurystyki mogą oznaczać niewinne osoby z niestabilnymi połączeniami, a proste obliczenia prędkości zawodzą w grach z złożonymi systemami ruchu. Aktualizacje pozycji są podatne na opóźnienia internetowe, co wymaga uśredniania w czasie. Wielu deweloperów odkrywa, że akumulatory w stylu leaky bucket dobrze radzą sobie z obsługą nagłych ruchów, jednocześnie zapobiegając długotrwałym naruszeniom.
Praktyczna implementacja często wymaga projektowania ruchu na określonych płaszczyznach (np. XZ dla ruchu opartego na ziemi), aby uniknąć karania legalnego ruchu pionowego przy jednoczesnym wykrywaniu teleportacji poziomej. Gry z legalnymi mechanikami teleportacji potrzebują wyraźnych systemów zwolnień. Częstotliwość walidacji, poziomy tolerancji i strategie egzekwowania powinny być dostosowane do specyficznych wymagań każdej gry.