Atributos existentes
A configuração padrão de correspondência do Roblox usa sinais baseados em atributos existentes, como localização do jogador, faixa etária e latência.
Para usar dados para correspondência 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 |
|---|---|---|
| Latência Estimada do Jogador | Numérico | A latência estimada de um jogador em um servidor. |
| Tem Amigos | Categórico | Se um servidor tem um amigo ou outro jogador com o mesmo endereço IP do jogador que está entrando. |
| O Chat de Voz Está Ativado | Categórico | Se um jogador tem o chat de voz ativado. |
| Idade do Jogador | Numérico | A idade do jogador. |
| Tipo de Dispositivo do Jogador | Categórico | O tipo de dispositivo do jogador. Pode ser um dispositivo móvel, um computador, um tablet, um console ou um dispositivo VR. |
| Idioma do Jogador | Categórico | O idioma do jogador. |
| Histórico de Jogo do Jogador | Numérico | O log-10 do número de minutos que um jogador jogou em um universo nos últimos 28 dias. |
| Ocupação do Servidor | Numérico | O número de jogadores em um servidor. |
| Grupo de Chat de Texto do Jogador | Categórico | O grupo de chat de texto do jogador onde eles podem conversar juntos. |
Sinais existentes
Os seguintes são sinais definidos pelo Roblox derivados com base em 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 está entrando, com uma diferença máxima relevante de 25. |
| Tipo de Dispositivo | A proporção de jogadores no servidor com o mesmo tipo de dispositivo que o jogador que está entrando. |
| Amigos | O número de pessoas no servidor que são amigas do jogador que está entrando ou que compartilham um endereço IP com o jogador que está entrando. 1 se houver um jogador preferido, 0 caso contrário. |
| Latência | A latência delta do jogador que está entrando para um servidor, que é a latência estimada acima da menor latência que o jogador poderia alcançar em seu melhor datacenter acessível, com um valor máximo relevante de 100. |
| Idioma | A proporção de jogadores no servidor com o mesmo idioma que o jogador que está entrando. |
| Ocupação | A proporçã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 está entrando, com uma diferença máxima relevante de 4.6. |
| Chat de Voz | A proporção de jogadores no servidor com o chat de voz ativado. |
| Chat de Texto | A proporção de jogadores no servidor que podem conversar por texto com o jogador que está entrando. |
Idade
Um sinal numérico que compara as idades médias dos jogadores em um servidor com a idade do jogador que está entrando. Este sinal tem uma diferença máxima relevante de 25. A pontuação do sinal é inversamente relacionada à diferença de idade, o que significa que diferenças de idade menores têm pontuações mais altas.
onde
Tipo de Dispositivo
Um sinal categórico que mede a proporção de jogadores no servidor com o mesmo tipo de dispositivo que o jogador que está entrando. Os tipos de dispositivos incluem: Computador, dispositivo móvel, tablet, console e dispositivo VR.
Amigos
Um jogador preferido é um jogador que é amigo do jogador que está entrando ou que compartilha o mesmo endereço IP que o jogador que está entrando. O sinal Amigos é um sinal categórico 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.
O sinal Amigos também pode ser considerado um sinal numérico com um valor máximo relevante de 1.
Idioma
Um sinal categórico que mede a proporção de jogadores no servidor que compartilham a mesma configuração de idioma que o jogador que está entrando.
Latência
Um sinal numérico que mede a latência delta do jogador que está entrando em milissegundos se ele jogasse em um servidor, que é a latência estimada acima da menor latência que o jogador poderia alcançar em seu melhor datacenter acessível. Este sinal tem um valor máximo relevante de 100 milissegundos. A pontuação do sinal é inversamente relacionada à latência delta, o que significa que valores de latência delta menores têm pontuações mais altas.
Ocupação
Um sinal numérico que mede a proporção de jogadores no servidor em relação à capacidade do servidor.
Histórico de Jogo
O valor do atributo Histórico de Jogo é o log-10 do número de minutos que um jogador jogou em um universo nos últimos 28 dias. Este sinal numérico compara o valor médio de Histórico de Jogo log-10 dos jogadores no servidor com o valor de Histórico de Jogo do jogador que está entrando. Este sinal tem uma diferença máxima relevante de 4.6. A pontuação do sinal é inversamente relacionada à diferença de histórico de jogo, o que significa que diferenças de histórico de jogo menores têm pontuações mais altas.
, onde
Chat de Voz
Um jogador pode ter o chat de voz ativado ou desativado. O sinal de Chat de Voz é um sinal categórico que mede a proporção de jogadores com a mesma configuração de chat de voz que o jogador que está entrando em relação ao número de jogadores no servidor.
Se um lugar tiver o chat de voz desativado, o peso do sinal de Chat de Voz é 0.
Chat de Texto
Um sinal categórico que mede a proporção de jogadores no servidor que podem conversar por texto com o jogador que está entrando em comum.
Atributos personalizados
Atributos personalizados dão acesso a dados de jogadores e servidores para sinais personalizados. Para mais informações sobre como criar seus próprios atributos personalizados, veja Criar um atributo personalizado. Para mais informações sobre atributos existentes do Roblox, veja Atributos existentes.
| Atributo | Características |
|---|---|
| Jogador | Persistente Dados personalizados do jogador que persistem em lojas de dados, como o nível ou a pontuação de um jogador dentro do jogo Gerenciado usando as APIs DataStore |
| Servidor | Não persistente e dura apenas enquanto o servidor estiver ativo Dados específicos do servidor, como o nível do servidor ou modo de jogo Gerenciado usando a API MatchmakingService |
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
endlocal MatchmakingService = game:GetService("MatchmakingService")
local RunService = game:GetService("RunService")
if RunService:IsStudio() then
-- Configura atributos e esquema iniciais para teste
MatchmakingService:InitializeServerAttributesForStudio({
Level = "Avançado",
Elo = 123.456,
TrainingMode = true
})
end
-- Recupera o atributo Level
local currentLevel, errorMessage = MatchmakingService:GetServerAttribute("Level")
if errorMessage then
warn(errorMessage)
else
print("Nível atual: " .. currentLevel)
end
-- Atualiza o valor do atributo Level para Avançado
local success, errorMessage = MatchmakingService:SetServerAttribute("Level", "Avançado")
if not success then
warn("Falha ao atualizar o atributo do servidor [Level] para [Avançado] devido ao erro: " .. errorMessage)
else
print("Atributo [Level] definido com sucesso para [Avançado]")
endSinais personalizados
Sinais personalizados são criados e definidos por você e podem ser numéricos ou categóricos:
- Sinais numéricos são números. Eles comparam a diferença entre o atributo do jogador que está entrando 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 estiver do nível de habilidade médio do servidor, maior será a pontuação do sinal numérico. Essa pontuação é então multiplicada pelo peso do sinal.
- Sinais categóricos são strings ou booleanos. Eles se baseiam em quão comum é o atributo do jogador que está entrando em comparação com os outros jogadores no servidor. Por exemplo, se uma alta porcentagem dos jogadores dentro de um servidor tiver o mesmo idioma preferido que o jogador que está entrando, a pontuação aumenta. Essa pontuação também é multiplicada pelo peso do sinal.
Para mais informações sobre como criar 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
Jogador que está entrando
Minimiza a diferença entre o atributo médio do jogador no servidor e o atributo do jogador que está entrando. Diferenças além de 1000 retornam uma pontuação de sinal de 0.
local diff = math.abs(server_{aggregation_function}_{attribute_name} - joining_player_{attribute_name})
local score = 1 - math.min(diff / max_relevant_difference, 1)
return scorelocal 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 scoreValor constante
Minimiza a diferença entre o atributo médio do jogador no servidor e um valor constante de 500. Diferenças além de 1000 retornam uma pontuação de sinal de 0.
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 scorelocal 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 categórico
Clustering
Maximiza a proporção de jogadores no servidor que têm o mesmo atributo que o atributo do jogador que está entrando.
local score = num_players_same_{attribute_name} / occupancy
return scorelocal num_players_same_Guild = 15
local occupancy = 19
local score = num_players_same_Guild / occupancy
return scoreDiversificando
Maximiza a proporção de jogadores no servidor que têm um atributo diferente do atributo do jogador que está entrando.
local score = num_players_same_{attribute_name} / occupancy
return 1 - scorelocal num_players_same_RpgClass = 15
local occupancy = 19
local score = num_players_same_RpgClass / occupancy
return scoreServidor numérico
Jogador que está entrando
Minimiza a diferença entre o atributo do servidor e o atributo do jogador que está entrando. Diferenças além de 1000 retornam uma pontuação de sinal de 0.
local diff = math.abs(server_{attribute_name} - joining_player_{attribute_name})
local score = 1 - math.min(diff / max_relevant_difference, 1)
return scorelocal 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.
local diff = math.abs(server_{attribute_name} - constant_value)
local score = math.min(diff / max_relevant_difference, 1)
return scorelocal 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 categórico
Comparar com o jogador que está entrando
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.
if server_{attribute_name} == joining_player_{attribute_name} then
return 1
else
return 0
endlocal server_GameMode = "Sobrevivência"
local joining_player_GameMode = "Sobrevivência"
if server_GameMode == joining_player_GameMode then
return 1
else
return 0
endComparar com valor constante
A pontuação é 1 quando o valor do atributo do servidor é igual a um valor constante de verdadeiro. Caso contrário, a pontuação do sinal é 0.
if server_{attribute_name} == constant_value then
return 1
else
return 0
endlocal server_GameNotStarted = true
if server_GameNotStarted == true then
return 1
else
return 0
end