Bestehende Attribute
Die Standard-Roblox-Matchmaking-Konfiguration verwendet Signale basierend auf vorhandenen Attributen wie Spielerstandort, Gruppeund Verzögerung.
Um Daten für das Matchmaking zu verwenden, die Roblox nicht automatisch in seine Standardkonfiguration einbezieht, musst du benutzerdefinierte Attribute und benutzerdefinierte Signale erstellen.
Zuordnung | Typ | Beschreibung |
---|---|---|
Geschätzte Spielerverzögerung | Zahlend | Die geschätzte Verzögerung eines Spielers auf einem Server. |
Hat Freunde | Kategorisch | Ob ein Server einen Freund oder einen anderen Spieler der gleichen IP-Adresse wie der beitretende Spieler:inhat. |
Ist Voice-Chat aktiviert | Kategorisch | Ob ein Spieler Voice-Chat aktiviert hat. |
Spieleralter | Zahlend | Das Alter des Spielers. |
Spielgerätetyp | Kategorisch | Der eingebendes Spielers. Es kann ein mobiles Gerät, ein Computer, ein Tablet, eine Konsole oder ein VR-Gerät sein. |
Spieler-Sprache | Kategorisch | Die Sprache des Spielers. |
Spieler-Spiel历史 | Zahlend | Die Anzahl der Minuten, die ein Spieler in einem Universum in den letzten 28 Tagen gespielt hat. |
Serverbesetzung | Zahlend | Die Anzahl der Spieler auf einem Server. |
Bestehende Signale
Die folgenden sind von Roblox definierte Signale, die basierend auf Roblox-Attributen abgeleitet wurden:
Signale | Beschreibung |
---|---|
Alter | Der Unterschied zwischen dem durchschnittlichen Alter der Spieler auf dem Server und dem Alter des beitretenden Spielers, mit einem maximal relevanten Unterschied von 25. |
Gerätetyp | Die Relation der Spieler auf dem Server mit demselben Gerätetyp wie der beitretende Spieler:in. |
Freunde | Die Anzahl der Personen auf dem Server, die mit dem beitretenden Spieler befreundet sind oder eine IP-Adresse mit dem beitretenden Spieler:inteilen.1, wenn es einen bevorzugten Spieler:ingibt, 0 sonst. |
Verzögerung | Die geschätzte Spielerverzögerung für einen Server mit einem maximal relevanten Wert von 250. |
Sprache | Das Verhältnis der Spieler auf dem Server mit der gleichen Sprache wie der beitretende Spieler:in |
Belegung | Die Relation der Spieler auf dem Server im Vergleich zur Kapazität des Servers. |
Spielhistorie | Der Unterschied zwischen der durchschnittlichen Spielhistorie auf dem Server und der Spielhistorie des beitretenden Spielers, mit einem maximal relevanten Unterschied von 4.6. |
Stimmchat | Das Verhältnis der Spieler auf dem Server mit Voice-Chat aktiviert. |
Alter
Ein numerisches Signal, das die durchschnittlichen Alter der Spieler auf einem Server mit dem Alter des beitretenden Spieler:invergleicht.Dieses Signal hat einen maximal relevanten Unterschied von 25.Die Signalpunktzahl ist umgekehrt mit dem Altersunterschied verbunden, was bedeutet, dass niedrigere Altersunterschiede höhere Punktzahlen haben.
ageDifferenceSignalScore = 1 - min(25, ageDifference) / 25, whereageDifference = abs(avgServerAge - joiningPlayerAge)
Gerätetyp
Ein kategorisches Signal, das die Relation der Spieler auf dem Server mit demselben Gerätetyp wie der beitretende Spieler:inmisst.Gerätetypen umfassen: Computer, mobiles Gerät, Tablet, Konsole und VR-Gerät.
deviceTypeSignalScore = (# players with same device as joining player) / (# players on the server)
Freunde
Ein bevorzugter Spieler ist ein Spieler, der entweder Freund des beitretenden Spielers ist oder die gleiche IP-Adresse wie der beitretende Spieler:inteilt.Das Freundes-Signal ist ein kategorisches Signal mit einer Punktzahl von 1, wenn es einen bevorzugten Spieler auf dem Server gibt, und eine Punktzahl von 0, wenn es keine bevorzugten Spieler auf dem Server gibt.
friendsSignalScore = hasFriends ? 1 : 0
Das Freundes-Signal kann auch als numerisches Signal mit einem maximal relevanten Wert von 1 betrachtet werden.
friendsSignalScore = min(# preferred players in server, 1) / 1
Sprache
Ein kategorisches Signal, das die Relation der Spieler auf dem Server misst, die die gleiche Spracheinstellung wie der beitretende Spieler:inhaben.
languageSignalScore = (# players with same language setting as joining player) / (# players on the server)
Latenz
Ein numerisches Signal, das die geschätzte Pingzeit in Millisekunden des anschließenden Spielers misst, wenn er auf einem Server spielen würde.Dieses Signal hat einen maximal relevanten Wert von 250 Millisekunden.Die Signalpunktzahl ist umgekehrt mit dem Ping verbunden, was bedeutet, dass niedrigere Ping-Werte höhere Werte haben.
latencySignalScore = 1 - min(250, estimatedPingMs) / 250
Belegung
Ein numerisches Signal, das die Relation der Spieler auf dem Server zur Kapazität des Servers misst.
occupancySignalScore = (# players in server) / serverCapacity
Spielhistorie
Der Wert des Attributs "Spiel历史" ist die Anzahl der Minuten, die ein Spieler in einem Universum in den letzten 28 Tagen gespielt hat.Dieses numerische Signal vergleicht den durchschnittlichen log-10-Spielhistorienwert der Spieler auf dem Server mit dem Spielhistorien-Wert des beitretenden Spieler:in.Dieses Signal hat einen maximal relevanten Unterschied von 4,6.Die Signalpunktzahl ist umgekehrt mit dem Unterschied der Spielhistorie verbunden, d. h. niedrigere Unterschiede der Spielhistorie haben höhere Punktzahlen.
playHistorySignalScore = 1 - min(4.6, playHistoryDifference / 4.6), whereplayHistoryDifference = abs(avgServerPlayHistory - joiningPlayerPlayHistory)
Chat
Ein Spieler kann Voice-Chat aktiviert oder deaktiviert haben.Das Voice-Chat-Signal ist ein kategorisches Signal, das die Relation der Spieler mit derselben Voice-Chat-Einstellung wie der beitretende Spieler zur Anzahl der Spieler auf dem Server misst.
Wenn ein Ort Voice-Chat deaktiviert hat, beträgt das Gewicht des Voice-Chat-Signals 0.
voiceChatSignalScore = (# players with same voice chat setting as joining player) / (# players on the server)
Benutzerdefinierte Attribute
Benutzerdefinierte Attribute gewähren Zugriff auf Spieler- und Serversdaten durch benutzerdefinierte Signale.Für weitere Informationen zur Erstellung eigener benutzerdefinierter Attribute siehe Erstellen eines benutzerdefinierten Attributes.Für weitere Informationen über vorhandene Roblox-Attribute siehe Bestehende Attribute.
Zuordnung | Eigenschaften |
---|---|
Spieler | Beständige benutzerdefinierte Spielerdaten, die in Datenlagern bleiben, wie das Level oder die Punktzahl eines Spieler:ininnerhalb der Erfahrung Über die DataStore APIs verwaltet |
Server | Nicht persistent und nur so lange aktiv, wie der Server aktiv ist Server-spezifische Daten wie das Serverlevel oder der Spielmodus Managed mit der MatchmakingService |
Spielerattribut-Beispiel
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
Beispiel für Serverattribut
local MatchmakingService = game::GetService("MatchmakingService")local RunService = game:GetService("RunService")if RunService:IsStudio() then-- Stellt initiale Attribute und Schema für Tests bereitMatchmakingService:InitializeServerAttributesForStudio({Level = "Advanced",Elo = 123.456,TrainingMode = true})end-- Ruft den Attribut-Level ablocal currentLevel, error = MatchmakingService:GetServerAttribute("Level")if error thenprint(error)elseprint("Current level: " .. currentLevel)end-- Aktualisiert den Wert des Attributs Levels auf Fortgeschrittenlocal 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
Benutzerdefinierte Signale
Benutzerdefinierte Signale werden von dir erstellt und definiert und können numerisch oder kategorisch sein:
- Zahlensignale sind Zahlen.Sie vergleichen den Unterschied zwischen dem Attribut des anschließenden Spieler:inund dem aggregierten Wert des Servers, wobei größere Unterschiede die Punktzahl senken oder erhöhen.Zum Beispiel ist der Abstand des Fähigkeitslevels eines Spielers zum durchschnittlichen Fähigkeitslevel des Servers umso größer, je höher die Punktzahl des numerischen Signals ist.Diese Punktzahl wird dann mit dem Gewicht des Signals multipliziert.
- Kategorische Signale sind Zeichenketten oder Booleen.Sie basieren darauf, wie häufig das Attribut des anschließenden Spieler:inim Vergleich zu den anderen Spielern auf dem Server ist.Wenn beispielsweise ein hoher Prozentsatz der Spieler in einem Server die gleiche bevorzugte Sprache wie der beitretende Spieler:inhat, steigt die Punktzahl.Diese Punktzahl wird dann auch mit dem Gewicht des Signals multipliziert.
Für weitere Informationen zur Erstellung eigener benutzerdefinierter Signale siehe Erstelle ein benutzerdefiniertes Signal.Für weitere Informationen über vorhandene Roblox-Signale siehe Bestehende Signale.
Spieler numerisch
Spieler beitreten
Verringert den Unterschied zwischen dem durchschnittlichen Spielerattribut des Servers und dem Attribut des beitretenden Spieler:in.Unterschiede über 1000 geben eine Signalpunktzahl von 0 zurück.
Spielerformel für numerisches Signal des Spielers beitreten
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
Beispiel des Spielers für numerisches Signal des Spielers beitreten
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
Konstante Wert
Verringert den Unterschied zwischen dem durchschnittlichen Spielerattribut des Servers und einem konstanten Wert von 500.Unterschiede über 1000 geben eine Signalpunktzahl von 0 zurück.
Konstante Wertformel für numerisches Signal des Spielers
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
Konstante Wertbeispiel für numerisches Signal des Spielers
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)
Spieler kategorisch
Klusterung
Maximiert das Verhältnis der Spieler auf dem Server, die dasselbe Attribut wie das Attribut des beitretenden Spieler:inhaben.
Klassierungsformel für Spielerkategorisches Signal
local score = num_players_same_{attribute_name} / occupancyreturn score
Klassifizierungsexempel für Spielersignal
local num_players_same_Guild = 15local occupancy = 19local score = num_players_same_Guild / occupancyreturn score
Diversifizierung
Maximiert das Verhältnis der Spieler auf dem Server, die ein anderes Attribut als das des anschließenden Spieler:inhaben.
Diversifizierungsformel für kategorielle Signal des Spielers
local score = num_players_same_{attribute_name} / occupancyreturn 1 - score
Beispiel zur Diversifizierung für kategorielle Signal des Spielers
local num_players_same_RpgClass = 15local occupancy = 19local score = num_players_same_RpgClass / occupancyreturn score
Servernumerisch
Spieler beitreten
Minimiert den Unterschied zwischen dem Attribut des Servers und dem Attribut des anschließenden Spieler:in. Unterschiede über 1000 geben eine Signalpunktzahl von 0 zurück.
Spielermenge an der Formel für servernumerisches Signal anschließen
local diff = math.abs(server_{attribute_name} - joining_player_{attribute_name})local score = 1 - math.min(diff / max_relevant_difference, 1)return score
Beispiel des Spielers für numerisches Signal des Spielers beitreten
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)
Konstante Wert
Minimiert den Unterschied zwischen dem Attributwert des Servers und einem konstanten Wert. Unterschiede über diesem konstanten Wert geben eine Signalpunktzahl von 0 zurück.
Konstante Wertformel für servernumerisches Signal
local diff = math.abs(server_{attribute_name} - constant_value)local score = math.min(diff / max_relevant_difference, 1)return score
Konstante Wertbeispiel für servernumerisches Signal
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)
Serverkategorisch
Vergleichen mit dem Beitritt von Spielern
Die Punktzahl ist 1, wenn der Attributswert des Servers (z. B. Spielmodus) dem Attributswert des Spieler:in(z. B. bevorzugter Spielmodus) gleich ist.Ansonsten ist die Signalpunktzahl 0.
Spielerformel für Serverkategorisches Signal beitreten
if server_{attribute_name} = joining_player_{attribute_name} thenreturn 1elsereturn 0end
Beitritt zum Spielerbeispiel für serverkategorische Signal
local server_GameMode = "Survival"local joining_player_GameMode = "Survival"if server_GameMode = joining_player_GameMode thenreturn 1elsereturn 0end
Vergleichen mit konstanter Wert
Die Punktzahl ist 1, wenn der Attributswert des Servers einem konstanten Wert von true gleich ist. Ansonsten ist die Signalpunktzahl 0.
Konstante Wertformel für serverkategorisches Signal
if server_{attribute_name} = constant_value thenreturn 1elsereturn 0end
Konstante Wertbeispiel für Serverkategorisches Signal
local server_GameNotStarted = trueif server_GameNotStarted = true thenreturn 1elsereturn 0end