Attributi esistenti
La configurazione predefinita di matchmaking di Roblox utilizza segnali basati su attributi esistenti come posizione del giocatore, Gruppoetà e latenza.
Per utilizzare i dati per il matchmaking che Roblox non include automaticamente nella sua configurazione predefinita, devi creare attributi personalizzati e segnali personalizzati.
Attributo | Tipo | Descrizione |
---|---|---|
Stima del ritardo del giocatore | Numeroico | Il ritardo stimato di un giocatore in un Server. |
Ha amici | Categoriale | Se un server abbia un amico o un altro giocatore con lo stesso indirizzo IP del Giocatoredi destinazione. |
La chat vocale è abilitata | Categoriale | Se un giocatore ha la chat vocale abilitata. |
Età del giocatore | Numeroico | L'età del giocatore. |
Tipo di dispositivo del giocatore | Categoriale | Il inserisci / scrividi dispositivo del giocatore. Può essere un Dispositivomobile, un computer, un tablet, una console o un DispositivoVR. |
Lingua del giocatore | Categoriale | La lingua del giocatore. |
Storico delle partite del giocatore | Numeroico | Il numero log-10 dei minuti in cui un giocatore ha giocato in un universo negli ultimi 28 giorni. |
Occupazione del server | Numeroico | Il numero di giocatori in un Server. |
Segnali esistenti
Segnali seguenti sono definiti da Roblox in base agli attributi di Roblox:
Segnale | Descrizione |
---|---|
Età | La differenza tra l'età media dei giocatori nel server e l'età del giocatore che si unisce, con una differenza massima rilevante di 25. |
Tipo di dispositivo | La proporzione di giocatori nel server con lo stesso tipo di dispositivo del Giocatoreche si unisce. |
Amici | Il numero di persone nel server che sono amici del giocatore che si unisce o che condividono un indirizzo IP con il Giocatoreche si unisce.1 se c'è un Giocatorepreferito, 0 altrimenti. |
Tempo di ritardo | La latenza stimata del giocatore per un Server, con un valore massimo rilevante di 250. |
Linguaggio | La proporzione di giocatori nel server con la stessa lingua del Giocatoreche si unisce |
Occupazione | La proporzione di giocatori nel server rispetto alla capacità del Server. |
Storico di gioco | La differenza tra la storia di gioco media nel server e la storia di gioco del giocatore che si unisce, con una differenza massima rilevante di 4.6. |
Chat di voce | La proporzione di giocatori nel server con chat vocale abilitata. |
Età
Un segnale numerico che confronta l'età media dei giocatori su un server con l'età del Giocatoreche si unisce.Questo segnale ha una differenza massima rilevante di 25.Il punteggio del segnale è inversamente correlato alla differenza d'età, il che significa che le differenze d'età più basse hanno punteggi più elevati.
ageDifferenceSignalScore = 1 - min(25, ageDifference) / 25, whereageDifference = abs(avgServerAge - joiningPlayerAge)
Tipo dispositivo
Un segnale categorico che misura la proporzione dei giocatori sul server con lo stesso tipo di dispositivo del Giocatoreche si unisce.I tipi di dispositivi includono: computer, Dispositivomobile, tablet, console e DispositivoVR.
deviceTypeSignalScore = (# players with same device as joining player) / (# players on the server)
Amici
Un giocatore preferito è un giocatore che è amico del giocatore che si unisce o che condivide lo stesso indirizzo IP del Giocatoreche si unisce.Il segnale Amici è un segnale categorico con un punteggio di 1 quando c'è un giocatore preferito nel server e un punteggio di 0 quando non ci sono giocatori preferiti sul Server.
friendsSignalScore = hasFriends ? 1 : 0
Il segnale Amici può anche essere considerato un segnale numerico con un valore massimo rilevante di 1.
friendsSignalScore = min(# preferred players in server, 1) / 1
Lingua
Un segnale categorico che misura la proporzione di giocatori sul server che condividono la stessa impostazione linguistica del Giocatoreche si unisce.
languageSignalScore = (# players with same language setting as joining player) / (# players on the server)
Latenza
Un segnale numerico che misura il tempo di ping stimato in millisecondi del giocatore di destinazione se dovesse giocare su un Server.Questo segnale ha un valore massimo rilevante di 250 millisecondi.Il punteggio del segnale è inversamente correlato al ping, il che significa che i valori di ping più bassi hanno punteggi più elevati.
latencySignalScore = 1 - min(250, estimatedPingMs) / 250
Occupazione
Un segnale numerico che misura la proporzione dei giocatori sul server alla capacità del Server.
occupancySignalScore = (# players in server) / serverCapacity
Storia del gioco
Il valore dell'attributo Storia di gioco è il numero log-10 dei minuti in cui un giocatore ha giocato in un universo negli ultimi 28 giorni.Questo segnale numerico compara il valore della cronologia media di gioco dei giocatori nel server al valore della cronologia di gioco del Giocatoreche si unisce.Questo segnale ha una differenza massima rilevante di 4.6.Il punteggio del segnale è inversamente correlato alla differenza di storia di gioco, il che significa che le differenze di storia di gioco più basse hanno punteggi più elevati.
playHistorySignalScore = 1 - min(4.6, playHistoryDifference / 4.6), whereplayHistoryDifference = abs(avgServerPlayHistory - joiningPlayerPlayHistory)
Chat vocale
Un giocatore può avere la chat vocale abilitata o disabilitata.Il segnale di chat vocale è un segnale categorico che misura la proporzione di giocatori con la stessa impostazione di chat vocale del giocatore che si unisce al numero di giocatori nel Server.
Se un luogo ha disattivato la chat vocale, il peso del segnale della chat vocale è 0.
voiceChatSignalScore = (# players with same voice chat setting as joining player) / (# players on the server)
Attributi personalizzati
Gli attributi personalizzati danno accesso ai segnali personalizzati ai dati del giocatore e del server.Per ulteriori informazioni sulla creazione dei propri attributi personalizzati, vedi Crea un attributo personalizzato.Per ulteriori informazioni sugli attributi esistenti di Roblox, vedi Attributi esistenti.
Attributo | Caratteristiche |
---|---|
Giocatore | Dati personalizzati persistenti che persistono negli store di dati, come il livello o il punteggio di un Giocatoreall'interno dell'esperienza Gestiti utilizzando le API DataStore |
Server | Non persistente e solo fino a quando il server è attivo Dati specifici del server come il livello del server o la modalità di gioco Gestito utilizzando l'API MatchmakingService |
Esempio di attributo giocatore
local DataStoreService = game:GetService("DataStoreService")
local eloStore = DataStoreService:GetDataStore("PlayerElo")
function onMatchEnded(players: {Player}, winners: {Player}, losers: {Player})
for _, player in players do
local updatedElo = CalculateUpdatedElo(player, winners, losers)
local success, errorMessage = pcall(function()
eloStore:SetAsync(player.UserId, updatedElo)
end)
end
end
Esempio di attributo del server
local MatchmakingService = game::GetService("MatchmakingService")local RunService = game:GetService("RunService")if RunService:IsStudio() then-- Configura gli attributi iniziali e lo schema per i testMatchmakingService:InitializeServerAttributesForStudio({Level = "Advanced",Elo = 123.456,TrainingMode = true})end-- Recupera l'attributo Livellolocal currentLevel, error = MatchmakingService:GetServerAttribute("Level")if error thenprint(error)elseprint("Current level: " .. currentLevel)end-- Aggiorna il valore dell'attributo Livello a Avanzatolocal success, error = MatchmakingService:SetServerAttribute("Level", "Advanced")if not success thenprint("Failed to update server attribute [Level] to [Advanced] due to error: " .. error)elseprint("Successfully set [Level] to [Advanced]")end
Segnali personalizzati
I segnali personalizzati vengono creati e definiti da te e possono essere numerici o categorici:
- I segnali numerici sono numeri.Confrontano la differenza tra l'attributo del Giocatoredi connessione e il valore aggregato del Server, con differenze maggiori che abbassano o aumentano il punteggio.Ad esempio, più vicino è il livello di abilità di un giocatore al livello medio di abilità del Server, maggiore è il punteggio del segnale numerico.Questo punteggio viene quindi moltiplicato dal peso del segnale.
- I segnali categorici sono stringhe o booleani.Sono basati su quanto l'attributo del Giocatoredi connessione sia comune quando confrontato con gli altri giocatori nel Server.Ad esempio, se una percentuale elevata dei giocatori all'interno di un server ha la stessa lingua preferita del Giocatoreche si unisce, il punteggio aumenta.Questo punteggio viene quindi moltiplicato anche dal peso del segnale.
Per ulteriori informazioni sulla creazione dei tuoi segnali personalizzati, vedi Crea un segnale personalizzato.Per ulteriori informazioni sui segnali Roblox esistenti, vedi Segnali esistenti.
Giocatore numerico
Unire il giocatore
Minimizza la differenza tra l'attributo medio del giocatore del Servere l'attributo del Giocatoreche si unisce.Le differenze oltre 1000 restituiscono un punteggio di segnale di 0.
Unirsi alla formula del giocatore per il segnale numerico del giocatore
local diff = math.abs(server_{aggregation_function}_{attribute_name} - joining_player_{attribute_name})local score = 1 - math.min(diff / max_relevant_difference, 1)return score
Unirsi all'esempio del giocatore per il segnale numerico del giocatore
local server_average_Elo = 2000local joining_player_Elo = 1000local max_relevant_difference = 1500local diff = math.abs(server_average_Elo - joining_player_Elo)local score = 1 - math.min(diff / max_relevant_difference, 1)return score
Valore costante
Minimizza la differenza tra l'attributo giocatore medio del Servere un valore costante di 500.Le differenze oltre 1000 restituiscono un punteggio di segnale di 0.
Formula di valore costante per il segnale numerico del giocatore
local diff = math.abs(server_sum_{attribute_name} + joining_player_{attribute_name} - constant_value)local score = 1 - math.min(diff / max_relevant_difference, 1)return score
Esempio di valore costante per il segnale numerico del giocatore
local server_sum_PowerLevel = 4500local joining_player_PowerLevel = 9901local max_relevant_difference = 1500local constant_value = 5000local diff = math.abs(server_sum_PowerLevel + joining_player_PowerLevel - constant_value)local score = 1 - math.min(diff / max_relevant_difference, 1)
Giocatore categoriale
Clusterizzazione
Massimizza la proporzione dei giocatori nel server che hanno lo stesso attributo dell'attributo del Giocatoreche si unisce.
Formula di clusterizzazione per il segnale categorico del giocatore
local score = num_players_same_{attribute_name} / occupancyreturn score
Esempio di clusterizzazione per segnale categorico del giocatore
local num_players_same_Guild = 15local occupancy = 19local score = num_players_same_Guild / occupancyreturn score
Diversificazione
Massimizza la proporzione dei giocatori nel server che hanno un attributo diverso dall'attributo del Giocatoreche si unisce.
Formula di diversificazione per il segnale categorico del giocatore
local score = num_players_same_{attribute_name} / occupancyreturn 1 - score
Esempio di diversificazione per segnale categorale del giocatore
local num_players_same_RpgClass = 15local occupancy = 19local score = num_players_same_RpgClass / occupancyreturn score
Server numerico
Unire il giocatore
Minimizza la differenza tra l'attributo del Servere l'attributo del Giocatoredi connessione. Le differenze oltre 1000 restituiscono un punteggio di segnale di 0.
Unirsi alla formula del giocatore per il segnale numerico del server
local diff = math.abs(server_{attribute_name} - joining_player_{attribute_name})local score = 1 - math.min(diff / max_relevant_difference, 1)return score
Unirsi all'esempio del giocatore per il segnale numerico del giocatore
local server_Level = 4500local joining_player_Level = 9000local max_relevant_difference = 1500local diff = math.abs(server_Level - joining_player_Level)local score = 1 - math.min(diff / max_relevant_difference, 1)
Valore costante
Minimizza la differenza tra il valore dell'attributo del Servere un valore costante. Le differenze oltre questo valore costante restituiscono un punteggio di segnale di 0.
Formula di valore costante per il segnale numerico del server
local diff = math.abs(server_{attribute_name} - constant_value)local score = math.min(diff / max_relevant_difference, 1)return score
Esempio di valore costante per il segnale numerico del server
local server_GameTime = 500local max_relevant_difference = 1000local constant_value = 1000local diff = math.abs(server_GameTime - constant_value)local score = math.min(diff / max_relevant_difference, 1)
Categoria del server
Confronta con il join del giocatore
Il punteggio è 1 quando il valore dell'attributo del Server(ad esempio, Modalità di gioco) è uguale al valore dell'attributo del Giocatore(ad esempio, Modalità di gioco preferita).Altrimenti, il punteggio del segnale è 0.
Unirsi alla formula del giocatore per il segnale categorale del server
if server_{attribute_name} = joining_player_{attribute_name} thenreturn 1elsereturn 0end
Unirsi all'esempio del giocatore per il segnale categorico del server
local server_GameMode = "Survival"local joining_player_GameMode = "Survival"if server_GameMode = joining_player_GameMode thenreturn 1elsereturn 0end
Confronta con il valore costante
Il punteggio è 1 quando il valore dell'attributo del Serverè uguale a un valore costante di vero. Altrimenti, il punteggio del segnale è 0.
Formula di valore costante per il segnale categorico del server
if server_{attribute_name} = constant_value thenreturn 1elsereturn 0end
Esempio di valore costante per il segnale categorico del server
local server_GameNotStarted = trueif server_GameNotStarted = true thenreturn 1elsereturn 0end