Vorhandene Attribute
Die Standard-Matchmaking-Konfiguration von Roblox verwendet Signale, die auf vorhandenen Attributen wie Spielstandort, Altersgruppe und Latenz basieren.
Um Daten für das Matchmaking zu verwenden, die Roblox nicht automatisch in seiner Standardkonfiguration einbezieht, müssen Sie benutzerdefinierte Attribute und benutzerdefinierte Signale erstellen.
| Attribut | Typ | Beschreibung |
|---|---|---|
| Geschätzte Spieler-Latenz | Numerisch | Die geschätzte Latenz eines Spielers in einem Server. |
| Hat Freunde | Kategorisch | Ob ein Server einen Freund oder einen anderen Spieler mit der gleichen IP-Adresse wie der beitretende Spieler hat. |
| Sprach-Chat aktiviert | Kategorisch | Ob ein Spieler den Sprach-Chat aktiviert hat. |
| Spieleralter | Numerisch | Das Alter des Spielers. |
| Spieler-Gerätetyp | Kategorisch | Der Gerätetyp des Spielers. Kann ein mobiles Gerät, ein Computer, ein Tablet, eine Konsole oder ein VR-Gerät sein. |
| Sprache des Spielers | Kategorisch | Die Sprache des Spielers. |
| Spielgeschichte des Spielers | Numerisch | Die Log-10-Anzahl der Minuten, die ein Spieler in einem Universum in den letzten 28 Tagen gespielt hat. |
| Server-Auslastung | Numerisch | Die Anzahl der Spieler in einem Server. |
| Text-Chat-Gruppe des Spielers | Kategorisch | Die Text-Chat-Gruppe des Spielers, in der sie gemeinsam texten können. |
Vorhandene Signale
Die folgenden sind von Roblox definierte Signale, die auf den Roblox-Attributen basieren:
| Signal | Beschreibung |
|---|---|
| Alter | Der Unterschied zwischen dem durchschnittlichen Alter der Spieler im Server und dem Alter des beitretenden Spielers, mit einem maximal relevanten Unterschied von 25. |
| Gerätetyp | Das Verhältnis der Spieler im Server, die den gleichen Gerätetyp wie der beitretende Spieler haben. |
| Freunde | Die Anzahl der Personen im Server, die Freunde des beitretenden Spielers sind oder die eine IP-Adresse mit dem beitretenden Spieler teilen. 1, wenn es einen bevorzugten Spieler gibt, 0 sonst. |
| Latenz | Die geschätzte Spieler-Latenz für einen Server, mit einem maximal relevantem Wert von 250. |
| Sprache | Das Verhältnis der Spieler im Server, die die gleiche Sprache wie der beitretende Spieler haben. |
| Auslastung | Das Verhältnis der Spieler im Server im Vergleich zur Kapazität des Servers. |
| Spielhistorie | Der Unterschied zwischen der durchschnittlichen Spielhistorie im Server und der Spielhistorie des beitretenden Spielers, mit einem maximal relevanten Unterschied von 4.6. |
| Sprach-Chat | Das Verhältnis der Spieler im Server, die den Sprach-Chat aktiviert haben. |
| Text-Chat | Das Verhältnis der Spieler im Server, die mit dem beitretenden Spieler zusammen texten können. |
Alter
Ein numerisches Signal, das das durchschnittliche Alter der Spieler auf einem Server mit dem Alter des beitretenden Spielers vergleicht. Dieses Signal hat einen maximal relevanten Unterschied von 25. Der Signalwert steht in umgekehrtem Verhältnis zum Altersunterschied, was bedeutet, dass geringere Altersunterschiede höhere Werte haben.
wobei
Gerätetyp
Ein kategorisches Signal, das das Verhältnis der Spieler auf dem Server misst, die den gleichen Gerätetyp wie der beitretende Spieler haben. Gerätetypen umfassen: Computer, mobiles Gerät, Tablet, Konsole und VR-Gerät.
Freunde
Ein bevorzugter Spieler ist ein Spieler, der entweder mit dem beitretenden Spieler befreundet ist oder die gleiche IP-Adresse wie der beitretende Spieler teilt. Das Friends-Signal ist ein kategorisches Signal mit einem Wert von 1, wenn es einen bevorzugten Spieler im Server gibt, und einem Wert von 0, wenn es keine bevorzugten Spieler im Server gibt.
Das Friends-Signal kann auch als numerisches Signal mit einem maximal relevanten Wert von 1 betrachtet werden.
Sprache
Ein kategorisches Signal, das das Verhältnis der Spieler auf dem Server misst, die die gleiche Spracheinstellung wie der beitretende Spieler teilen.
Latenz
Ein numerisches Signal, das die geschätzte Ping-Zeit in Millisekunden des beitretenden Spielers misst, wenn er auf einem Server spielen würde. Dieses Signal hat einen maximal relevanten Wert von 250 Millisekunden. Der Signalwert steht in umgekehrtem Verhältnis zu den Pings, wobei niedrigere Ping-Werte höhere Werte haben.
Auslastung
Ein numerisches Signal, das das Verhältnis der Spieler im Server zur Kapazität des Servers misst.
Spielhistorie
Der Wert des Attributs Spielhistorie ist die Log-10-Anzahl der Minuten, die ein Spieler in einem Universum in den letzten 28 Tagen gespielt hat. Dieses numerische Signal vergleicht den durchschnittlichen Log-10-Wert der Spielhistorie der Spieler im Server mit dem Wert der Spielhistorie des beitretenden Spielers. Dieses Signal hat einen maximal relevanten Unterschied von 4.6. Der Signalwert steht in umgekehrtem Verhältnis zum Unterschied in der Spielhistorie, was bedeutet, dass geringere Unterschiede in der Spielhistorie höhere Werte haben.
, wobei
Sprach-Chat
Ein Spieler kann den Sprach-Chat aktiviert oder deaktiviert haben. Das Sprach-Chat-Signal ist ein kategorisches Signal, das das Verhältnis der Spieler mit der gleichen Sprach-Chat-Einstellung wie der beitretende Spieler zur Anzahl der Spieler im Server misst.
Wenn ein Ort den Sprach-Chat deaktiviert hat, ist das Gewicht des Sprach-Chat-Signals 0.
Text-Chat
Ein kategorisches Signal, das das Verhältnis der Spieler im Server misst, die mit dem beitretenden Spieler gemeinsam texten können.
Benutzerdefinierte Attribute
Benutzerdefinierte Attribute geben benutzerdefinierten Signalen Zugriff auf Spieler- und Serverdaten. Weitere Informationen zum Erstellen eigener benutzerdefinierter Attribute finden Sie unter Erstellen eines benutzerdefinierten Attributs. Weitere Informationen zu bestehenden Roblox-Attributen finden Sie unter Vorhandene Attribute.
| Attribut | Eigenschaften |
|---|---|
| Spieler | Persistente Benutzerdefinierte Spieldaten, die in Datenspeichern erhalten bleiben, wie die Stufe oder Punktzahl eines Spielers im Spiel Verwaltet mit den DataStore APIs |
| Server | Nicht persistent und hält nur so lange an, wie der Server aktiv ist Serverspezifische Daten wie die Serverstufe oder den Spielmodus Verwaltet mit der MatchmakingService API |
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
endlocal MatchmakingService = game:GetService("MatchmakingService")
local RunService = game:GetService("RunService")
if RunService:IsStudio() then
-- Initialisiert die Attribute und das Schema für Tests
MatchmakingService:InitializeServerAttributesForStudio({
Level = "Fortgeschritten",
Elo = 123.456,
TrainingMode = true
})
end
-- Abrufen des Attributs Level
local currentLevel, errorMessage = MatchmakingService:GetServerAttribute("Level")
if errorMessage then
warn(errorMessage)
else
print("Aktueller Level: " .. currentLevel)
end
-- Aktualisiert den Wert des Attributs Level auf Fortgeschritten
local success, errorMessage = MatchmakingService:SetServerAttribute("Level", "Fortgeschritten")
if not success then
warn("Fehler beim Aktualisieren des Serverattributs [Level] auf [Fortgeschritten]: " .. errorMessage)
else
print("Erfolgreich [Level] auf [Fortgeschritten] gesetzt")
endBenutzerdefinierte Signale
Benutzerdefinierte Signale werden von Ihnen erstellt und definiert und können numerisch oder kategorisch sein:
- Numerische Signale sind Zahlen. Sie vergleichen den Unterschied zwischen dem Attribut des beitretenden Spielers und dem aggregierten Wert des Servers, wobei größere Unterschiede den Wert verringern oder erhöhen. Zum Beispiel, je näher das Fähigkeitsniveau eines Spielers dem durchschnittlichen Fähigkeitsniveau des Servers ist, desto höher ist der Wert des numerischen Signals. Dieser Wert wird dann mit dem Gewicht des Signals multipliziert.
- Kategorische Signale sind Strings oder Booleans. Sie basieren darauf, wie häufig das Attribut des beitretenden Spielers im Vergleich zu den anderen Spielern im Server ist. Zum Beispiel, wenn ein hoher Prozentsatz der Spieler in einem Server die gleiche bevorzugte Sprache wie der beitretende Spieler hat, erhöht sich der Wert. Dieser Wert wird dann ebenfalls mit dem Gewicht des Signals multipliziert.
Für weitere Informationen zum Erstellen eigener benutzerdefinierter Signale siehe Erstellen eines benutzerdefinierten Signals. Für weitere Informationen zu bestehenden Roblox-Signalen siehe Vorhandene Signale.
Spieler numerisch
Beitretender Spieler
Minimiert den Unterschied zwischen dem durchschnittlichen Spielerattribut des Servers und dem Attribut des beitretenden Spielers. Unterschiede über 1000 liefern einen Signalwert von 0.
local diff = math.abs(server_{aggregation_function}_{attribute_name} - joining_player_{attribute_name})
local score = 1 - math.min(diff / max_relevant_difference, 1)
return scorelocal server_average_Elo = 2000
local joining_player_Elo = 1000
local max_relevant_difference = 1500
local diff = math.abs(server_average_Elo - joining_player_Elo)
local score = 1 - math.min(diff / max_relevant_difference, 1)
return scoreKonstanter Wert
Minimiert den Unterschied zwischen dem durchschnittlichen Spielerattribut des Servers und einem konstanten Wert von 500. Unterschiede über 1000 liefern einen Signalwert von 0.
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 scorelocal server_sum_PowerLevel = 4500
local joining_player_PowerLevel = 9901
local max_relevant_difference = 1500
local constant_value = 5000
local diff = math.abs(server_sum_PowerLevel + joining_player_PowerLevel - constant_value)
local score = 1 - math.min(diff / max_relevant_difference, 1)Spieler kategorisch
Clustering
Maximiert das Verhältnis der Spieler im Server, die dasselbe Attribut wie das Attribut des beitretenden Spielers haben.
local score = num_players_same_{attribute_name} / occupancy
return scorelocal num_players_same_Guild = 15
local occupancy = 19
local score = num_players_same_Guild / occupancy
return scoreDiversifizieren
Maximiert das Verhältnis der Spieler im Server, die ein anderes Attribut als das Attribut des beitretenden Spielers haben.
local score = num_players_same_{attribute_name} / occupancy
return 1 - scorelocal num_players_same_RpgClass = 15
local occupancy = 19
local score = num_players_same_RpgClass / occupancy
return scoreServer numerisch
Beitretender Spieler
Minimiert den Unterschied zwischen dem Attribut des Servers und dem Attribut des beitretenden Spielers. Unterschiede über 1000 liefern einen Signalwert von 0.
local diff = math.abs(server_{attribute_name} - joining_player_{attribute_name})
local score = 1 - math.min(diff / max_relevant_difference, 1)
return scorelocal server_Level = 4500
local joining_player_Level = 9000
local max_relevant_difference = 1500
local diff = math.abs(server_Level - joining_player_Level)
local score = 1 - math.min(diff / max_relevant_difference, 1)Konstanter Wert
Minimiert den Unterschied zwischen dem Attributswert des Servers und einem konstanten Wert. Unterschiede über diesen konstanten Wert liefern einen Signalwert von 0.
local diff = math.abs(server_{attribute_name} - constant_value)
local score = math.min(diff / max_relevant_difference, 1)
return scorelocal server_GameTime = 500
local max_relevant_difference = 1000
local constant_value = 1000
local diff = math.abs(server_GameTime - constant_value)
local score = math.min(diff / max_relevant_difference, 1)Server kategorisch
Vergleich mit beitretendem Spieler
Der Wert ist 1, wenn der Attributswert des Servers (z.B. Spielmodus) gleich dem Attributswert des Spielers (z.B. Bevorzugter Spielmodus) ist. Andernfalls ist der Signalwert 0.
if server_{attribute_name} == joining_player_{attribute_name} then
return 1
else
return 0
endlocal server_GameMode = "Überleben"
local joining_player_GameMode = "Überleben"
if server_GameMode == joining_player_GameMode then
return 1
else
return 0
endVergleich mit konstantem Wert
Der Wert ist 1, wenn der Attributswert des Servers gleich einem konstanten Wert von true ist. Andernfalls ist der Signalwert 0.
if server_{attribute_name} == constant_value then
return 1
else
return 0
endlocal server_GameNotStarted = true
if server_GameNotStarted == true then
return 1
else
return 0
end