Atributos existentes
A configuração padrão de matchmaking do Roblox usa sinais baseados em atributos existentes, como localização do jogador, grupo de idade e latência.
Para usar dados para matchmaking que o Roblox não inclui automaticamente em sua configuração padrão, você precisa criar atributos personalizados e sinais personalizados.
Atributo | Tipo | Descrição |
---|---|---|
Estimativa de Latência do Jogador | Numericamente | A latência estimada de um jogador em um servidor. |
Tem Amigos | Categorização | Se um servidor tem um amigo ou outro jogador com o mesmo endereço IP do jogador que se junta. |
O bate-papo de voz está ativado | Categorização | Se um jogador tem o chat de voz ativado. |
Idade do Jogador | Numericamente | A idade do jogador. |
Tipo de Dispositivo do Jogador | Categorização | O digitarde dispositivo do jogador. Pode ser um dispositivo móvel, um computador, um tablet, um console ou um dispositivo VR. |
Idioma do jogador | Categorização | O idioma do jogador. |
Histórico de Jogo do Jogador | Numericamente | O número log-10 de minutos que um jogador jogou em um universo nos últimos 28 dias. |
Ocupação do Servidor | Numericamente | O número de jogadores em um servidor. |
Sinais existentes
Os seguintes são sinais definidos pelo Roblox derivados com base nos atributos do Roblox:
Sinal | Descrição |
---|---|
Idade | A diferença entre a idade média dos jogadores no servidor e a idade do jogador que se junta, com uma diferença relevante máxima de 25. |
Tipo de dispositivo | A razão de jogadores no servidor com o mesmo tipo de dispositivo do jogador que se junta. |
Amigos | O número de pessoas no servidor que são amigas do jogador que se junta ou que compartilham um endereço IP com o jogador que se junta.1 se houver um jogador preferido, 0 caso contrário. |
Latência | A latência estimada do jogador para um servidor, com um valor máximo relevante de 250. |
Idioma | A razão de jogadores no servidor com o mesmo idioma do jogador que se junta |
Ocupação | A razão de jogadores no servidor em comparação com a capacidade do servidor. |
Histórico de Jogo | A diferença entre o histórico de jogo médio no servidor e o histórico de jogo do jogador que se junta, com uma diferença relevante máxima de 4.6. |
Chat de Voz | A proporção de jogadores no servidor com o chat de voz ativado. |
Idade
Um sinal numérico que compara a idade média dos jogadores em um servidor para a idade do jogador que se junta.Este sinal tem uma diferença máxima relevante de 25.A pontuação do sinal está inversamente relacionada à diferença de idade, o que significa que diferenças de idade mais baixas têm pontuações mais altas.
ageDifferenceSignalScore = 1 - min(25, ageDifference) / 25, whereageDifference = abs(avgServerAge - joiningPlayerAge)
Tipo de dispositivo
Um sinal categorial que mede a razão de jogadores no servidor com o mesmo tipo de dispositivo do jogador que se junta.Tipos de dispositivo incluem: Computador, dispositivo móvel, tablet, console e dispositivo VR.
deviceTypeSignalScore = (# players with same device as joining player) / (# players on the server)
Amigos
Um jogador preferido é um jogador que é amigo do jogador que se junta ou que compartilha o mesmo endereço IP do jogador que se junta.O sinal Amigos é um sinal categorial com uma pontuação de 1 quando há um jogador preferido no servidor e uma pontuação de 0 quando não há jogadores preferidos no servidor.
friendsSignalScore = hasFriends ? 1 : 0
O sinal Amigos também pode ser considerado um sinal numérico com um valor máximo relevante de 1.
friendsSignalScore = min(# preferred players in server, 1) / 1
Linguagem
Um sinal categorial que mede a proporção de jogadores no servidor que compartilham a mesma configuração de idioma do jogador que se junta.
languageSignalScore = (# players with same language setting as joining player) / (# players on the server)
Latência
Um sinal numérico que mede o tempo de ping estimado em milisegundos do jogador que se juntar se ele jogar em um servidor.Este sinal tem um valor máximo relevante de 250 milisegundos.A pontuação do sinal está inversamente relacionada ao ping, o que significa que valores de ping mais baixos têm pontuações mais altas.
latencySignalScore = 1 - min(250, estimatedPingMs) / 250
Ocupação
Um sinal numérico que mede a proporção de jogadores no servidor para a capacidade do servidor.
occupancySignalScore = (# players in server) / serverCapacity
Histórico de Jogo
O valor do atributo Histórico de Jogo é o número log-10 de minutos que um jogador jogou em um universo nos últimos 28 dias.Este sinal numérico compara o valor médio do Histórico de Jogo de jogadores no servidor ao valor do Histórico de Jogo do jogador que se junta.Este sinal tem uma diferença máxima relevante de 4.6.A pontuação do sinal está inversamente relacionada à diferença do histórico de reprodução, o que significa que diferenças de histórico de reprodução mais baixas têm pontuações mais altas.
playHistorySignalScore = 1 - min(4.6, playHistoryDifference / 4.6), whereplayHistoryDifference = abs(avgServerPlayHistory - joiningPlayerPlayHistory)
chat/conversade Voz
Um jogador pode ter o chat de voz ativado ou desativado.O sinal de Chat de Voz é um sinal categorial que mede a proporção de jogadores com a mesma configuração de chat de voz como o jogador que se junta ao número de jogadores no servidor.
Se um local tiver o chat de voz desativado, o peso do sinal de chat de voz é 0.
voiceChatSignalScore = (# players with same voice chat setting as joining player) / (# players on the server)
Atributos personalizados
Atributos personalizados dão acesso a sinais personalizados a dados do jogador e do servidor.Para mais informações sobre a criação de seus próprios atributos personalizados, veja Criar um atributo personalizado.Para mais informações sobre os atributos existentes do Roblox, veja Atributos existentes.
Atributo | Características |
---|---|
Jogador | Dados de jogador persistentes que persistem em armazenamentos de dados, como o nível ou a pontuação de um jogador dentro da experiência Gerenciados usando as APIs DataStore |
Servidor | Não persistente e só dura enquanto o servidor estiver ativo Dados específicos do servidor, como o nível do servidor ou o modo de jogo Gerenciado usando a API (Interface de Programação para Aplicações)MatchmakingService |
Exemplo de atributo de jogador
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
Exemplo de atributo do servidor
local MatchmakingService = game::GetService("MatchmakingService")local RunService = game:GetService("RunService")if RunService:IsStudio() then-- Configura os atributos iniciais e o esquema para testesMatchmakingService:InitializeServerAttributesForStudio({Level = "Advanced",Elo = 123.456,TrainingMode = true})end-- Recupera o atributo Nívellocal currentLevel, error = MatchmakingService:GetServerAttribute("Level")if error thenprint(error)elseprint("Current level: " .. currentLevel)end-- Atualiza o valor do atributo Nível para Avançadolocal 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
Sinais personalizados
Sinais personalizados são criados e definidos por você e podem ser numericamente ou categoricamente:
- Sinais numéricos são números.Eles comparam a diferença entre o atributo do jogador que se junta e o valor agregado do servidor, com diferenças maiores diminuindo ou aumentando a pontuação.Por exemplo, quanto mais próximo o nível de habilidade de um jogador está do nível médio de habilidade do servidor, maior é a pontuação do sinal numérico.Esta pontuação é então multiplicada pelo peso do sinal.
- Sinais categoricais são strings ou booleans.Eles são baseados em quão comum é o atributo do jogador de junção quando comparado aos outros jogadores no servidor.Por exemplo, se uma porcentagem alta dos jogadores dentro de um servidor tiver o mesmo idioma preferido do jogador que se junta, a pontuação aumenta.Essa pontuação é então multiplicada também pelo peso do sinal.
Para mais informações sobre a criação de seus próprios sinais personalizados, veja Criar um sinal personalizado.Para mais informações sobre sinais existentes do Roblox, veja Sinais existentes.
Jogador numérico
Junting jogador
Minimiza a diferença entre o atributo médio do jogador do servidor e o atributo do jogador que se junta.Diferenças acima de 1000 retornam uma pontuação de sinal de 0.
Juntando a fórmula do jogador ao sinal numérico do jogador
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
Juntando exemplo de jogador para sinal numérico do jogador
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
Valor constante
Minimiza a diferença entre o atributo médio do jogador do servidor e um valor constante de 500.Diferenças acima de 1000 retornam uma pontuação de sinal de 0.
Fórmula de valor constante para sinal numérico do jogador
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
Exemplo de valor constante para sinal numérico do jogador
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)
Jogador categorical
Agrupamento
Maximiza a proporção de jogadores no servidor que têm o mesmo atributo do atributo do jogador que se junta.
Fórmula de agrupamento para sinal categorial do jogador
local score = num_players_same_{attribute_name} / occupancyreturn score
Exemplo de agrupamento para sinal categorial do jogador
local num_players_same_Guild = 15local occupancy = 19local score = num_players_same_Guild / occupancyreturn score
Diversificando
Maximiza a proporção de jogadores no servidor que têm um atributo diferente do atributo do jogador que se junta.
Diversificar fórmula para sinal categorial do jogador
local score = num_players_same_{attribute_name} / occupancyreturn 1 - score
Exemplo de diversificação para sinal categorial do jogador
local num_players_same_RpgClass = 15local occupancy = 19local score = num_players_same_RpgClass / occupancyreturn score
Servidor numerico
Junting jogador
Minimiza a diferença entre o atributo do servidor e o atributo do jogador de conexão. Diferenças acima de 1000 retornam uma pontuação de sinal de 0.
Juntando a fórmula do jogador ao sinal numérico do servidor
local diff = math.abs(server_{attribute_name} - joining_player_{attribute_name})local score = 1 - math.min(diff / max_relevant_difference, 1)return score
Juntando exemplo de jogador para sinal numérico do jogador
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)
Valor constante
Minimiza a diferença entre o valor do atributo do servidor e um valor constante. Diferenças além desse valor constante retornam uma pontuação de sinal de 0.
Fórmula de valor constante para sinal numérico do servidor
local diff = math.abs(server_{attribute_name} - constant_value)local score = math.min(diff / max_relevant_difference, 1)return score
Exemplo de valor constante para sinal numérico do servidor
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)
Servidor categorical
Compare para se juntar ao jogador
A pontuação é 1 quando o valor do atributo do servidor (por exemplo, Modo de Jogo) é igual ao valor do atributo do jogador (por exemplo, Modo de Jogo Preferido).Caso contrário, a pontuação do sinal é 0.
Juntando a fórmula do jogador ao sinal categorial do servidor
if server_{attribute_name} = joining_player_{attribute_name} thenreturn 1elsereturn 0end
Juntando exemplo de jogador para sinal categorial do servidor
local server_GameMode = "Survival"local joining_player_GameMode = "Survival"if server_GameMode = joining_player_GameMode thenreturn 1elsereturn 0end
Compare ao valor constante
A pontuação é 1 quando o valor do atributo do servidor é igual a um valor constante de verdade. Caso contrário, a pontuação do sinal é 0.
Fórmula de valor constante para sinal categorial do servidor
if server_{attribute_name} = constant_value thenreturn 1elsereturn 0end
Exemplo de valor constante para sinal categorial do servidor
local server_GameNotStarted = trueif server_GameNotStarted = true thenreturn 1elsereturn 0end