Attributs existants
La configuration par défaut de matchmaking Roblox utilise des signaux basés sur des attributs existants tels que l'emplacement du joueur, le groupe d'âge et le délai.
Pour utiliser les données pour le matchmaking que Roblox n'inclut pas automatiquement dans sa configuration par défaut, vous devez créer des attributs personnalisés et des signaux personnalisés.
Attributeur | Type | Avertissement |
---|---|---|
Estimation de la latence du joueur | Numérique | Le délai estimé d'un joueur dans un serveur. |
A des amis | Catégoriel | Si un serveur a un ami ou un autre joueur de la même adresse IP que le joueur rejoignant. |
Le chat vocal est-il activé | Catégoriel | Si un joueur a activé le chat vocal. |
Âge du joueur | Numérique | Âge du joueur. |
Type d'appareil du joueur | Catégoriel | Le taperd'appareil du joueur. Peut être un appareil mobile, un ordinateur, une tablette, une console ou un appareil VR. |
Langue du joueur | Catégoriel | La langue du joueur. |
Historique du jeu du joueur | Numérique | Le nombre de minutes de log-10 qu'un joueur a jouées dans un univers au cours des 28 derniers jours. |
Occupation du serveur | Numérique | Le nombre de joueurs dans un serveur. |
Signaux existants
Les signaux suivants sont définis par Roblox en se basant sur les attributs de Roblox :
Signaleur | Avertissement |
---|---|
Âge | La différence entre l'âge moyen des joueurs dans le serveur et l'âge du joueur rejoignant, avec une différence pertinente maximale de 25. |
Type d'appareil | Le ratio des joueurs sur le serveur avec le même type d'appareil que le joueur rejoignant. |
Amis | Le nombre de personnes dans le serveur qui sont amies avec le joueur rejoignant ou qui partagent une adresse IP avec le joueur rejoignant.1 s'il y a un joueur préféré, 0 sinon. |
Décalage | La latence estimée du joueur pour un serveur, avec une valeur maximale pertinente de 250. |
Langue | Le ratio des joueurs sur le serveur avec la même langue que le joueur rejoignant |
Remplissage | Le ratio des joueurs sur le serveur par rapport à la capacité du serveur. |
Histoire du jeu | La différence entre l'historique de jeu moyen sur le serveur et l'historique de jeu du joueur rejoignant, avec une différence pertinente maximale de 4,6. |
Discussion vocale | Le ratio des joueurs sur le serveur avec le chat vocal activé. |
Âge
Un signal numérique qui compare l'âge moyen des joueurs sur un serveur à l'âge du joueur rejoignant.Ce signal a une différence maximale pertinente de 25.Le score du signal est inversément lié à la différence d'âge, ce qui signifie que les différences d'âge plus faibles ont des scores plus élevés.
ageDifferenceSignalScore = 1 - min(25, ageDifference) / 25, whereageDifference = abs(avgServerAge - joiningPlayerAge)
Type d'appareil
Un signal catégoriel qui mesure le rapport des joueurs sur le serveur avec le même type d'appareil que le joueur rejoignant.Les types d'appareils incluent : ordinateur, appareil mobile, tablette, console et appareil VR.
deviceTypeSignalScore = (# players with same device as joining player) / (# players on the server)
Amis
Un joueur préféré est un joueur qui est ami avec le joueur rejoignant ou qui partage la même adresse IP que le joueur rejoignant.Le signal des amis est un signal catégoriel avec un score de 1 lorsqu'il y a un joueur préféré sur le serveur et un score de 0 lorsqu'il n'y a pas de joueurs préférés sur le serveur.
friendsSignalScore = hasFriends ? 1 : 0
Le signal des amis peut également être considéré comme un signal numérique avec une valeur maximale pertinente de 1.
friendsSignalScore = min(# preferred players in server, 1) / 1
Langue
Un signal catégoriel qui mesure le rapport des joueurs sur le serveur qui partagent le même paramètre de langue que le joueur rejoignant.
languageSignalScore = (# players with same language setting as joining player) / (# players on the server)
Délai
Un signal numérique qui mesure le temps de ping estimé en millisecondes du joueur rejoignant s'il devait jouer sur un serveur.Ce signal a une valeur maximale pertinente de 250 millisecondes.Le score du signal est inversément lié au ping, ce qui signifie que les valeurs de ping plus basses ont des scores plus élevés.
latencySignalScore = 1 - min(250, estimatedPingMs) / 250
Réoccupation
Un signal numérique qui mesure le ratio des joueurs sur le serveur à la capacité du serveur.
occupancySignalScore = (# players in server) / serverCapacity
Historique des jeux
La valeur de l'attribut d'histoire de jeu est le nombre log-10 de minutes pendant lesquelles un joueur a joué dans un univers au cours des 28 derniers jours.Ce signal numérique compare la valeur moyenne de l'historique de jeu des joueurs dans le serveur à la valeur de l'historique de jeu du joueur rejoignant.Ce signal a une différence maximale pertinente de 4,6.Le score du signal est inversément lié à la différence d'histoire de jeu, ce qui signifie que les différences d'histoire de jeu plus faibles ont des scores plus élevés.
playHistorySignalScore = 1 - min(4.6, playHistoryDifference / 4.6), whereplayHistoryDifference = abs(avgServerPlayHistory - joiningPlayerPlayHistory)
chatde voix
Un joueur peut activer ou désactiver le chat vocal.Le signal de chat vocal est un signal catégoriel qui mesure le rapport de joueurs avec le même paramètre de chat vocal que le joueur rejoignant au nombre de joueurs sur le serveur.
Si un lieu a désactivé le chat vocal, le poids du signal de chat vocal est de 0.
voiceChatSignalScore = (# players with same voice chat setting as joining player) / (# players on the server)
Attributs personnalisés
Les attributs personnalisés donnent à l'attribut signal d'accès aux données du joueur et du serveur.Pour plus d'informations sur la création de vos propres attributs personnalisés, voir Créer un attribut personnalisé.Pour plus d'informations sur les attributs Roblox existants, voir attributs existants.
Attributeur | Caractéristiques |
---|---|
Joueur | Données persistantes du joueur qui persistent dans les magasins de données, comme le niveau ou le score d'un joueur à l'intérieur de l'expérience Gérées à l'aide des API DataStore |
Serveur | Non persistant et ne dure que tant que le serveur est actif Données spécifiques au serveur comme le niveau du serveur ou le mode de jeu Gérées à l'aide de l'API MatchmakingService |
Exemple d'attribut du joueur
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
Exemple d'attribut du serveur
local MatchmakingService = game::GetService("MatchmakingService")local RunService = game:GetService("RunService")if RunService:IsStudio() then-- Configure les attributs et le schéma initiaux pour le testMatchmakingService:InitializeServerAttributesForStudio({Level = "Advanced",Elo = 123.456,TrainingMode = true})end-- Récupère l'attribut niveaulocal currentLevel, error = MatchmakingService:GetServerAttribute("Level")if error thenprint(error)elseprint("Current level: " .. currentLevel)end-- Mise à jour de la valeur de l'attribut niveau à avancélocal 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
Signaux personnalisés
Les signaux personnalisés sont créés et définis par vous et peuvent être numériques ou catégoriels :
- Les signaux numériques sont des nombres.Ils comparent la différence entre l'attribut du joueur rejoignant et la valeur agrégée du serveur, avec des différences plus importantes qui réduisent ou augmentent le score.Par exemple, plus le niveau de compétence d'un joueur est proche du niveau de compétence moyen du serveur, plus le score du signal numérique est élevé.Ce score est ensuite multiplié par le poids du signal.
- Les signaux catégoriels sont des chaînes ou des booléens.Ils sont basés sur la fréquence de l'attribut du joueur rejoignant par rapport aux autres joueurs du serveur.Par exemple, si un pourcentage élevé des joueurs dans un serveur a le même langage préféré que le joueur rejoignant, le score augmente.Ce score est ensuite également multiplié par le poids du signal.
Pour plus d'informations sur la création de vos propres signaux personnalisés, voir Créer un signal personnalisé.Pour plus d'informations sur les signaux Roblox existants, voir signaux existants .
Joueur numérique
Rejoindre le joueur
Minimise la différence entre l'attribut moyen du joueur du serveur et l'attribut du joueur rejoignant.Les différences au-delà de 1000 retournent un score de signal de 0.
Rejoindre la formule du joueur pour le signal numérique du joueur
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
Exemple de jointure du joueur pour le signal numérique du joueur
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
Valeur constante
Minimise la différence entre l'attribut moyen du joueur du serveur et une valeur constante de 500.Les différences au-delà de 1000 retournent un score de signal de 0.
Formule de valeur constante pour le signal numérique du joueur
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
Exemple de valeur constante pour le signal numérique du joueur
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)
Joueur catégoriel
Clusterisation
Maximise le ratio du nombre de joueurs sur le serveur qui ont le même attribut que l'attribut du joueur rejoignant.
Formule de regroupement pour le signal catégoriel du joueur
local score = num_players_same_{attribute_name} / occupancyreturn score
Exemple de regroupement pour le signal catégoriel du joueur
local num_players_same_Guild = 15local occupancy = 19local score = num_players_same_Guild / occupancyreturn score
Diversification
Maximise le ratio du nombre de joueurs sur le serveur qui ont un attribut différent de l'attribut du joueur rejoignant.
Formule de diversification pour le signal catégoriel du joueur
local score = num_players_same_{attribute_name} / occupancyreturn 1 - score
Exemple de diversification du signal catégoriel du joueur
local num_players_same_RpgClass = 15local occupancy = 19local score = num_players_same_RpgClass / occupancyreturn score
Serveur numérique
Rejoindre le joueur
Minimise la différence entre l'attribut du serveur et l'attribut du joueur de raccord. Les différences au-delà de 1000 retournent un score de signal de 0.
Rejoindre la formule du joueur pour le signal numérique du serveur
local diff = math.abs(server_{attribute_name} - joining_player_{attribute_name})local score = 1 - math.min(diff / max_relevant_difference, 1)return score
Exemple de jointure du joueur pour le signal numérique du joueur
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)
Valeur constante
Minimise la différence entre la valeur d'attribut du serveur et une valeur constante. Les différences au-delà de cette valeur constante retournent un score de signal de 0.
Formule de valeur constante pour le signal numérique du serveur
local diff = math.abs(server_{attribute_name} - constant_value)local score = math.min(diff / max_relevant_difference, 1)return score
Exemple de valeur constante pour le signal numérique du serveur
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)
Serveur catégoriel
Comparer à la participation du joueur
Le score est de 1 lorsque la valeur de l'attribut du serveur (par exemple, le mode de jeu) est égale à la valeur de l'attribut du joueur (par exemple, le mode de jeu préféré).Sinon, le score du signal est de 0.
Rejoindre la formule du joueur pour le signal catégoriel du serveur
if server_{attribute_name} = joining_player_{attribute_name} thenreturn 1elsereturn 0end
Exemple de jointure de joueur pour le signal catégoriel du serveur
local server_GameMode = "Survival"local joining_player_GameMode = "Survival"if server_GameMode = joining_player_GameMode thenreturn 1elsereturn 0end
Comparer à la valeur constante
Le score est de 1 lorsque la valeur de l'attribut du serveur est égale à une valeur constante de vrai. Sinon, le score du signal est de 0.
Formule de valeur constante pour le signal catégoriel du serveur
if server_{attribute_name} = constant_value thenreturn 1elsereturn 0end
Exemple de valeur constante pour le signal catégoriel du serveur
local server_GameNotStarted = trueif server_GameNotStarted = true thenreturn 1elsereturn 0end