Utilizzando i dati persistenti, puoi tracciare e salvare i dati in base al giocatore nelle diverse sessioni di gioco. Questa operazione apre varie modalità di gioco progressive dalle quali i giocatori possono uscire e rientrare per continuare con i loro obiettivi o trovare lo stesso stato di quando erano usciti.
I dati, per esempio il profilo o le statistiche, sono persistenti mediante l'archiviazione in base al giocatore in Verse. I dati possono poi essere aggiornati ogni volta che cambiano i valori. Dato che i dati sono persistenti, vengono portati da una sessione di gioco all'altra e sono disponibili ogni volta che i giocatori sono online.
Survival, Magnate, GdR e Roguelite sono alcuni esempi di modalità di gioco che utilizzano dati persistenti. Questi tipi di modalità di gioco richiedono ai giocatori di accumulare oggetti per raggiungere obiettivi a lungo termine definiscono il gameplay.
Utilizza i dati persistenti nei tuoi script Verse per archiviare le informazioni che vengono salvate in base al giocatore e al modulo. Implementa i dati persistenti nelle modalità di gioco in vuoi conservare i giocatori incoraggiando continui progressi.
Per prendere familiarità con l'implementazione della persistenza, dai un'occhiata al tutorial delle Statistiche giocatore persistenti.
I dati persistenti possono essere creati e utilizzati in Verse, ma ci sono anche altri dispositivi di Fortnite Creativo che hanno una funzionalità di base che supporta i dati persistenti. Per maggiori dettagli, vedi Dispositivi di persistenza.
Cosa significa persistenza in Verse
In Verse, una variabile definita in un modulo è globale per ogni istanza di gioco in esecuzione in cui la variabile è nell'ambito. Tranne le variabili con ambito modulo associate alla sessione, una variabile con ambito modulo richiede persistenza e l'archiviazione dei dati oltre la partita in corso. Per questo motivo, sono presenti restrizioni sui tipi che possono essere utilizzate nell'ambito del modulo.
Al momento puoi utilizzare i seguenti tipi di ambito di modulo:
| Tipi di ambito modulo permessi | Definizione | Limitazioni |
|---|---|---|
| I dati di qualsiasi tipo rappresentato da | I dati vengono archiviati solo durante la sessione attuale e non vengono portati ai round successivi. |
| I dati di qualsiasi tipo rappresentato da | L'accesso ai dati persistenti del giocatore è permesso solo quando il giocatore è nella partita attuale. |
Se un giocatore esce dalla partita o non è nella sessione in corso, non puoi più archiviare o accedere ai suoi dati in quella sessione di gioco. Se il giocatore torna o gioca di nuovo la stessa partita, puoi accedere e aggiornare i suoi dati.
Creazione di dati persistenti in Verse
Puoi creare i tuoi dati persistenti per ogni giocatore che può essere continuamente aggiornato, archiviato e richiamato quando i giocatori rientrano nella partita. Durante gli abbinamenti, viene controllato se il nuovo giocatore ha dati persistenti. Se giocatore ha dati persistenti disponibili, vengono caricati e resi disponibili per gli script di Verse.
Se il giocatore ha dati persistenti per un'isola e il caricamento dei dati non riesce, il giocatore non può entrare nell'isola. Questo è un sistema di protezione che impedisce che i dati persistenti vengano sovrascritti in caso di errore nel loro caricamento.
Per creare dati persistenti nel tuo codice Verse, definisci una variabile globale vulnerabili_map che utilizza il tipo di player come chiave e un tipo persistente come valore. Vedi Tipi persistenti per l'intero elenco di tipi che possono essere persistenti.
Nell'esempio seguente, la variabile 'weak_map' globale MySavedPlayerData utilizza il tipo di giocatore come chiave e un intero come valore. Archiviare un valore intero in questa variabile per un giocatore significa che i dati saranno persistenti nelle varie sessioni di gioco e sarà possibile accedere ed eseguire aggiornamenti in qualsiasi momento in cui il giocatore fa parte della partita.
var MySavedPlayerData:weak_map(player, int) = map{}
Una volta definiti i tuoi dati persistenti, devi inizializzare i dati per ogni giocatore. Puoi farlo tramite un controllo per vedere se non siano già presenti dati archiviati per il giocatore e poi aggiungendo il giocatore e un valore iniziale alla weak_map.
# Runs when the device is started in a running game
OnBegin<override>()<suspends>:void =
InitialSavedPlayerData:int = 0
Players := GetPlayspace().GetPlayers()
for (Player : Players):
if:
not MySavedPlayerData[Player]
set MySavedPlayerData[Player] = InitialSavedPlayerDataL'esempio precedente archivia solo un valore intero, ma puoi utilizzare altri tipi, tra cui classi e array, per archiviare più dati per ogni giocatore nella weak_map. Vedi Tipi persistenti per l'intero elenco di tipi che puoi utilizzare.
Il seguente esempio di Verse mostra come puoi definire un profilo giocatore personalizzato in una classe che può essere archiviata, aggiornata e accessibile in seguito da parte del giocatore. La classe player_profile_data archivia le informazioni del giocatore, come i PE ottenuti, la posizione in classifica e le missioni che ha completato.
player_profile_data := class<final><persistable>:
Version:int = 0
Class:player_class = player_class.Villager
XP:int = 0
Rank:int = 0
CompletedQuestCount:int = 0
QuestHistory:[]string = array{}
var PlayerProfileDataMap:weak_map(player, player_profile_data) = map{}C'è un limite alla quantità di dati che puoi archiviare per giocatore e per isola. Ogni volta che salvi i dati, consigliamo di controllare il modo in cui i tuoi aggiornamenti influenzano la dimensione totale utilizzando la funzione 'FitsInPlayerMap'. Per maggiori dettagli, consulta Verificare che i dati persistenti siano all'interno dei limiti.
Ora che sai come creare i tuoi dati persistenti e inizializzarli per ogni giocatore, dai un'occhiata a Buone prassi per i modi consigliati di utilizzare i dati persistenti in Verse!
Modifica dei dati tra le versioni pubblicate della tua isola
Dopo aver pubblicato l'attuale versione della tua isola, se esegui aggiornamenti ai dati persistenti, i dati archiviati da una versione precedente dell'isola devono essere supportati nelle versioni successive dell'isola.
Per garantire che sia così, viene eseguito un controllo di retrocompatibilità in UEFN e si verifica un errore di compilazione se il codice Verse non è più compatibile con la versione attualmente pubblicata. Questo controllo di retrocompatibilità viene eseguito ogni volta che:
Fai clic su Avvia sessione nella barra degli strumenti di UEFN.
Fai clic su Attua modifiche o Attua le modifiche Verse nella barra degli strumenti di UEFN.
Pubblicare la tua isola per la prima volta.
Attivare una nuova versione pubblica della tua isola.
Questo controllo di retrocompatibilità è essenzialmente un controllo del tipo del valore dell'ambito di modulo della variabile weak_map. Per tipi semplici come gli interi, non è possibile modificare il tipo dopo la pubblicazione dell'isola. Ciò include structs nelle quali non puoi modificare la definizione della struttura dopo la pubblicazione dell'isola.
Al momento, l'unico tipo di dati persistenti a cui puoi aggiungere più dati dopo la pubblicazione dell'isola è il tipo class a condizione che i nuovi campi abbiano valori predefiniti. Ciò significa che il caricamento dei dati salvati da una versione precedente includerà i nuovi campi e i loro valori predefiniti. Per maggiori dettagli sull'utilizzo delle classi come dati persistenti, dai un'occhiata alle buone prassi.
Reimpostazione dei dati persistenti della tua isola
Se hai bisogno di forzare una reimpostazione dei dati persistenti per la tua isola, puoi farlo in Verse assegnando un valore predefinito per i dati persistenti nella weak_map per i giocatori al momento in cui entrano nell'isola.
Per sapere se i dati del giocatore sono stati reimpostati, puoi includere un valore della versione per la tua classe e aggiornarlo con le nuove modifiche nell'ambito dei tuoi dati persistenti. Questa è una delle buone prassi elencate di seguito; ricordati di dare un'occhiata anche alle altre!
Tipi persistenti in Verse
I seguenti sono tipi persistenti che puoi utilizzare nella tua variabile con ambito modulo weak_map:
| Tipo | Descrizione |
|---|---|
array | Un array è persistente se il tipo di elementi nell'array è persistente. |
char32 | I valori dei caratteri sono persistenti. |
char8 | I valori dei caratteri sono persistenti. |
class | Una classe è persistente quando è:
|
I valori del colore sono persistenti. | |
enum | Un'enum è persistente quando è definita con lo specificatore persistente. |
float | I valori in virgola mobile sono persistenti. |
int | I valori interi sono persistenti. |
logic | I valori logici sono persistenti. |
map | Una mappa è persistente se sia la chiave che i tipi di valore sono persistenti. |
option | Un'opzione è persistente se il suo valore è persistente. |
struct | Una struttura è persistente quando è:
Non puoi alterare una struttura persistente dopo aver pubblicato la tua isola. Per questo motivo, consigliamo di utilizzare strutture persistenti solo quando lo schema è noto per essere costante. tupla |
tupla | Una tupla è persistente se ogni tipo di elemento è persistente. |
I valori vector2 sono persistenti. | |
I valori vector2i sono persistenti. | |
I valori vector3 sono persistenti. |
Test con dati persistenti
Se vuoi sottoporre a test il comportamento dei dati persistenti prima di pubblicare la versione più recente della tua isola, puoi impostare il seguente comportamento nel tuo dispositivo Impostazioni isola per l'impostazione Comportamento di persistenza: sessione di playtest e l'impostazione Comportamento di persistenza: sessione di modifica:
| Comportamento dei dati persistenti | Descrizione |
|---|---|
Importa in tempo reale | Importa i dati della sessione dai dati in tempo reale, se disponibili. Questa azione richiede che l'isola sia stata pubblicata e che il giocatore abbia giocato alla versione in tempo reale dell'isola. Se sono disponibili i dati in tempo reale, i dati della sessione di playtest vengono alimentati con una copia dei dati in tempo reale. Può essere molto utile per eseguire test su problemi con dati persistenti associati a modifiche alla logica della tua isola. |
Simula nuovo utente | Fa iniziare il giocatore con nuovi dati persistenti come se stesse giocando l'isola per la prima volta. |
Entrambi i comportamenti Importa in Importa in tempo reale e Simula nuovi utenti funzionano sia per la persistenza di Verse che per i dispositivi di persistenza come i dispositivi Punto di salvataggio e Tracciatore. Simula nuovo utente eseguirà la sessione con dati vuoti per la persistenza Verse e per i dispositivi di persistenza senza modificare i dati in tempo reale e Importa da Live caricherà i dati persistenti da entrambi, se i dati in tempo reale sono disponibili.
Le impostazioni del comportamento dei dati persistenti vengono applicate durante il tuo playtest. Ci sono due scenari diversi in cui puoi eseguire test con i dati persistenti:
Sessione di modifica: le impostazioni del comportamento dei dati persistenti vengono applicate quando avvii una sessione da UEFN. Significa che i dati persistenti possono essere portati da una partita all'altra all'interno di una singola sessione. Se esci dalla sessione e avvii una nuova sessione, i dati persistenti verranno reimpostati e le impostazioni del comportamento dei dati persistenti verranno applicate di nuovo.
Sessione di playtest: le impostazioni del comportamento dei dati persistenti vengono applicate quando imposti un playtest nel Portale creatori quando un playtester si unisce tramite un codice di playtest o un codice link privato. Le impostazioni del comportamento dei dati persistenti vengono applicate solo la prima volta che il giocatore entra. Quando il giocatore esce dal playtest e poi rientra, i suoi dati vengono portati da una sessione all'altra e le impostazioni del comportamento dei dati persistenti non vengono applicate di nuovo. Per reimpostare i dati persistenti, devi creare un nuovo codice link di playtest.
Per gli aggiornamenti all'isola che influenzano il modo in cui i dati persistenti vengono gestiti e aggiornati, ti consigliamo di eseguire prove in entrambi gli scenari, avviando una sessione da UEFN e un playtest che utilizza un codice link. Esegui test sulle modifiche che applichi ai dati persistenti sia con i dati in tempo reale che con i dati simulati di un nuovo utente. Questo ti sarà d'aiuto per garantire che le tue modifiche funzionino sia per i giocatori attuali della tua isola che per i nuovi giocatori.
Effetti della pubblicazione di nuove versioni della tua isola
Una volta pubblicata la tua isola, viene creato un record persistente per i giocatori quando i loro dati vengono archiviati nella weak_map. Questi dati verranno archiviati e caricati alle visite successive alla tua isola.
Se vengono pubblicate nuove versioni della tua isola, i dati persistenti verranno uniti automaticamente nella nuova versione. Per maggiori informazioni, vedi Modificare i dati tra le versioni pubblicate della tua isola.
Effetti del rollback dell'isola pubblicata
Se esegui il rollback della tua isola a una versione precedente tramite il Portale creatori, i dati persistenti di tutti gli utenti verranno resettati.
Non è al momento presente supporto per le notifiche ai giocatori che i loro dati sono stati interessati da un rollback.
Ciò fa sì che gli aggiornamenti recenti ai dati dei giocatori vadano persi e potrebbe anche causare la reimpostazione completa dei dati del giocatore. Ciò è vero anche se il rollback non include internamente modifiche alla logica che influenzerebbero i dati persistenti.
A causa dell'impatto sui dati persistenti, consigliamo di utilizzare la funzionalità di rollback solo come ultima risorsa.
Limitazioni
Le seguenti sono le limitazioni per utilizzare i dati persistenti in Verse.
Dimensioni massime dell'oggetto persistente
C'è un limite della quantità di dati che possono essere archiviati in una weak_map per ogni giocatore.
Un record di weak_map è la quantità totale di dati associati a un singolo elemento weak_map. Un singolo record della weak_map ha una dimensione massima dei dati di 256 kilobyte (KB) per giocatore.
Quando viene salvato un valore della 'weak_map', viene calcolata la quantità totale di memoria necessaria per salvare i dati.
I seguenti sono esempi di dati che superano il limite di 256 KB:
Circa 24.000 valori
floatoint.Circa 200.000 caratteri di testo. Sono pari a circa 60 pagine di testo in un romanzo.
Se provi a salvare dati di dimensione maggiore di 256 KB per il record di un giocatore, il salvataggio non andrà a buon fine e riceverai un messaggio di errore di runtime di Verse.
Puoi evitare errori di salvataggio utilizzando la funzione di aiuto di Verse FitsInPlayerMap. La funzione FitsInPlayerMap esegue una copia del record che vuoi salvare e ne controlla le dimensioni. Se è possibile salvare il record, la chiamata di funzione avrà esito positivo; se invece il record è troppo grande, avrà esito negativo.
La funzione FitsInPlayerMap è particolarmente utile quando si utilizza un array dinamico o una map di dati e si aggiungono nuovi elementi. L'aggiornamento di un int, float o logic che si trovava in precedenza nel record persistente non modificherà le dimensioni del record persistente.
Massimo di mappe deboli del giocatore persistenti per isola
Una singola isola può avere fino a quattro variabili persistenti, cioè quattro variabili weak_map con player come tipo di chiave. Questo requisito è verificato dal compilatore Verse.
Weak Map obbligatoria con il tipo di classe
Se è soddisfatto il criterio del limite per il numero massimo di variabili persistenti, almeno un valore weak_map della variabile persistente deve essere una classe. L'obiettivo è garantire che sia possibile aggiungere successivamente i dati alle variabili a condizione che sia soddisfatta la retrocompatibilità al momento della pubblicazione dell'isola.