Attributs et signaux

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

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ériqueLe délai estimé d'un joueur dans un serveur.
A des amis CatégorielSi 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égorielSi un joueur a activé le chat vocal.
Âge du joueur NumériqueÂge du joueur.
Type d'appareil du joueur CatégorielLe taperd'appareil du joueur. Peut être un appareil mobile, un ordinateur, une tablette, une console ou un appareil VR.
Langue du joueur CatégorielLa langue du joueur.
Historique du jeu du joueur NumériqueLe 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ériqueLe 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, where
ageDifference = 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), where
playHistoryDifference = 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 test
MatchmakingService:InitializeServerAttributesForStudio(
{
Level = "Advanced",
Elo = 123.456,
TrainingMode = true
})
end
-- Récupère l'attribut niveau
local currentLevel, error = MatchmakingService:GetServerAttribute("Level")
if error then
print(error)
else
print("Current level: " .. currentLevel)
end
-- Mise à jour de la valeur de l'attribut niveau à avancé
local success, error = MatchmakingService:SetServerAttribute("Level", "Advanced")
if not success then
print("Failed to update server attribute [Level] to [Advanced] due to error: " .. error)
else
print("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 = 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 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 = 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)

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} / occupancy
return score
Exemple de regroupement pour le signal catégoriel du joueur

local num_players_same_Guild = 15
local occupancy = 19
local score = num_players_same_Guild / occupancy
return 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} / occupancy
return 1 - score
Exemple de diversification du signal catégoriel du joueur

local num_players_same_RpgClass = 15
local occupancy = 19
local score = num_players_same_RpgClass / occupancy
return 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 = 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)
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 = 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)

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} then
return 1
else
return 0
end
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 then
return 1
else
return 0
end
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 then
return 1
else
return 0
end
Exemple de valeur constante pour le signal catégoriel du serveur

local server_GameNotStarted = true
if server_GameNotStarted = true then
return 1
else
return 0
end