Atributos e sinais

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

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 NumericamenteA latência estimada de um jogador em um servidor.
Tem Amigos CategorizaçãoSe 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çãoSe um jogador tem o chat de voz ativado.
Idade do Jogador NumericamenteA idade do jogador.
Tipo de Dispositivo do Jogador CategorizaçãoO digitarde dispositivo do jogador. Pode ser um dispositivo móvel, um computador, um tablet, um console ou um dispositivo VR.
Idioma do jogador CategorizaçãoO idioma do jogador.
Histórico de Jogo do Jogador NumericamenteO número log-10 de minutos que um jogador jogou em um universo nos últimos 28 dias.
Ocupação do Servidor NumericamenteO 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, where
ageDifference = 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), where
playHistoryDifference = 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 testes
MatchmakingService:InitializeServerAttributesForStudio(
{
Level = "Advanced",
Elo = 123.456,
TrainingMode = true
})
end
-- Recupera o atributo Nível
local currentLevel, error = MatchmakingService:GetServerAttribute("Level")
if error then
print(error)
else
print("Current level: " .. currentLevel)
end
-- Atualiza o valor do atributo Nível para Avançado
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

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 = 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
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 = 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)

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} / occupancy
return score
Exemplo de agrupamento para sinal categorial do jogador

local num_players_same_Guild = 15
local occupancy = 19
local score = num_players_same_Guild / occupancy
return 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} / occupancy
return 1 - score
Exemplo de diversificação para sinal categorial do jogador

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

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} then
return 1
else
return 0
end
Juntando exemplo de jogador para sinal categorial do servidor

local server_GameMode = "Survival"
local joining_player_GameMode = "Survival"
if server_GameMode = joining_player_GameMode then
return 1
else
return 0
end
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 then
return 1
else
return 0
end
Exemplo de valor constante para sinal categorial do servidor

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