Le proprietà di rete sono uno degli aspetti più sfumati e comunemente fraintesi del motore Roblox. Quando un giocatore ha la proprietà di rete di una parte o di un'assemblaggio, ha completa autorità sulla simulazione fisica di quegli oggetti. Per impostazione predefinita, il server concede la proprietà di rete delle parti non ancorate ai client con personaggi giocatore vicini per distribuire il carico della simulazione fisica. Questo sistema migliora la reattività ma crea significative implicazioni di sicurezza che ogni sviluppatore deve comprendere.
Comprendere la proprietà di rete
Quando un client ha la proprietà di rete su parti (incluso il proprio personaggio), ha accesso a:
Manipolazione dell'assemblaggio:
- Teletrasportarsi in qualsiasi posizione.
- Questo può essere utilizzato per ottenere rapidamente la proprietà e il controllo di quante più parti e assemblaggi non ancorati il server consentirà.
- Manipolare il loro movimento e stato, come volare o cambiare la propria velocità.
- Gli sfruttatori possono impostare la loro Humanoid WalkSpeed su qualsiasi valore. Le proprietà possono essere modificate localmente senza attivare eventi sul client locale, e senza che tali modifiche alle proprietà possano essere lette da script locali.
- Riprodurre animazioni arbitrarie e manipolare lo stato dell'animazione.
- Superare ostacoli fisici e alterare la loro collisione.
Manipolazione della fisica
- Controllare la posizione e la rotazione di qualsiasi parte o meccanismo non ancorato, inclusa la replicazione di componenti Inf o NaN in CFrames. Impostare le velocità delle parti su valori estremi (inclusi Inf o NaN), che possono interferire con la fisica di altre parti/assemblaggi non ancorati, anche quelli che non sono di proprietà dello sfruttatore. Questo è spesso usato per lanciare altri personaggi giocatore e parti vicine. Manipolare l'attivazione degli eventi Touched, inclusa la non attivazione di Touched.
Se il tuo gioco richiede parti o assemblaggi completamente non ancorati critici per il gameplay, considera di utilizzare l'API di proprietà di rete per impostare manualmente la proprietà o disattivare la proprietà automatica.
Convalida del movimento
Nei giochi competitivi, la convalida del movimento dei giocatori lato server è cruciale per l'integrità della simulazione, poiché i client controllano il movimento e la fisica dei personaggi. Tuttavia, non esiste una soluzione universale a causa delle diverse meccaniche di gioco.
I metodi tradizionali spesso non sono sufficienti in scenari complessi. Semplici calcoli di distanza nel tempo possono essere adeguati per gli sparatutto competitivi ma falliscono in giochi ad alta intensità fisica che coinvolgono veicoli, volo o interazioni intricate. La convalida deve anche tenere conto della latenza di rete.
Fino a quando l'autorità del server non sarà disponibile, gli sviluppatori che implementano la convalida lato client devono comprendere che gli approcci efficaci variano notevolmente. Le euristiche di base possono segnalare giocatori innocenti con connessioni instabili, e semplici calcoli di velocità si rompono in giochi con sistemi di movimento complessi. Gli aggiornamenti di posizione sono soggetti alla latenza di internet, richiedendo una media nel tempo. Molti sviluppatori trovano che accumulatori in stile bucket leak funzionano bene per gestire movimenti esplosivi mentre prevengono violazioni sostenute.
L'implementazione pratica richiede spesso di proiettare il movimento su piani specifici (ad esempio, XZ per il movimento a terra) per evitare di penalizzare il legittimo movimento verticale mentre si rileva il teletrasporto orizzontale. I giochi con meccaniche di teletrasporto legittime necessitano di sistemi di esenzione espliciti. La frequenza di convalida, i livelli di tolleranza e le strategie di enforcement dovrebbero essere sintonizzati sui requisiti specifici di ciascun gioco.