Atrybuty i sygnały

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Istniejące atrybuty

Domyślna konfiguracja matchmakingu Roblox wykorzystuje sygnały oparte na istniejących atrybutach, takich jak lokalizacja gracza, grupa wiekowa i opóźnienie.

Aby wykorzystać dane do matchmakingu, które Roblox nie automatycznie uwzględnia w swojej domyślnej konfiguracji, musisz stworzyć niestandardowe atrybuty i niestandardowe sygnały.

Atrybut Typ Opis
Szacowane opóźnienie gracza LiczbowySzacowany czas opóźnienia gracza na serwerze.
Ma przyjaciół KategorialnyCzy serwer ma przyjaciela lub innego gracza o tym samym adresie IP co dołączający gracz.
Czy czat głosowy jest włączony KategorialnyCzy gracz ma włączony czat głosowy.
Wiek gracza LiczbowyWiek gracza.
Typ urządzenia gracza Kategorialnywpisywaćurządzenia gracza. Może to być urządzenie mobilne, komputer, tablet, konsola lub urządzenie VR.
Język gracza KategorialnyJęzyk gracza.
Historia gry gracza LiczbowyLiczba minut log-10, które gracz rozegrał w wszechświecie w ciągu ostatnich 28 dni.
Zajętość serwera LiczbowyLiczba graczy na serwerze.

Istniejące sygnały

Następujące sygnały są zdefiniowane przez Roblox na podstawie atrybutów Roblox:

Sygnał Opis
Wiek Różnica między średnim wiekiem graczy na serwerze a wiekiem dołączającego gracza, z maksymalną odpowiednią różnicą 25.
Typ urządzenia Proporcja graczy na serwerze o tym samym typie urządzenia, co dołączający gracz.
Przyjaciele Liczba osób na serwerze, które są przyjaciółmi dołączającego gracza lub które dzielą adres IP z dołączającym graczem.1, jeśli istnieje preferowany gracz, 0 w przeciwnym razie.
Opóźnienie Szacowane opóźnienie gracza dla serwera, z maksymalną odpowiednią wartością 250.
Język Proporcja graczy na serwerze z tym samym językiem, co dołączający gracz
Zajęcie Stosunek liczby graczy na serwerze do pojemności serwera.
Historia odtwarzania Różnica między przeciętną historią gry na serwerze a historią gry dołączającego gracza, z maksymalną odpowiednią różnicą 4.6.
Czat głosowy Proporcja graczy na serwerze z włączonym czatem głosowym.

Wiek

Sygnał liczbowy, który porównuje średni wiek graczy na serwerze do wieku gracza dołączającego.Ten sygnał ma maksymalną odpowiednią różnicę 25.Wynik sygnału jest odwrotnie związany z różnicą wieku, co oznacza, że ​​niższe różnice wieku mają wyższe wyniki.


ageDifferenceSignalScore = 1 - min(25, ageDifference) / 25, where
ageDifference = abs(avgServerAge - joiningPlayerAge)

Typ urządzenia

Kategorialny sygnał, który mierzy stosunek liczby graczy na serwerze z tym samym typem urządzenia, co dołączający gracz.Typy urządzeń obejmują: komputer, urządzenie mobilne, tablet, konsolę i urządzenie VR.


deviceTypeSignalScore = (# players with same device as joining player) / (# players on the server)

Przyjaciele

Preferowany gracz to gracz, który jest przyjacielem dołączającego gracza lub który ma ten sam adres IP co dołączający gracz.Sygnał przyjaciół jest sygnałem kategoricznym z wynikiem 1, gdy na serwerze jest preferowany gracz, i wynikiem 0, gdy na serwerze nie ma preferowanych graczy.


friendsSignalScore = hasFriends ? 1 : 0

Sygnał przyjaciół można również uznać za sygnał liczbowy o maksymalnej wartości odpowiedniej 1.


friendsSignalScore = min(# preferred players in server, 1) / 1

Język

Kategorialny sygnał, który mierzy stosunek liczby graczy na serwerze, którzy mają taką samą ustawienie języka jak dołączający gracz.


languageSignalScore = (# players with same language setting as joining player) / (# players on the server)

Opóźnienie

Sygnał liczbowy, który mierzy szacowany czas pingowania w milisekundach dołączającego gracza, jeśli miałby grać na serwerze.Ten sygnał ma maksymalną wartość odpowiednią 250 milisekund.Wynik sygnału jest odwrotnie związany z pingiem, co oznacza, że ​​niższe wartości ping mają wyższe wyniki.


latencySignalScore = 1 - min(250, estimatedPingMs) / 250

Zajęcie

Sygnał liczbowy, który mierzy stosunek liczby graczy na serwerze do pojemności serwera.


occupancySignalScore = (# players in server) / serverCapacity

Historia odtwarzania

Wartość atrybutu historii gry to liczba minut, w których gracz grał w wszechświecie w ciągu ostatnich 28 dni.Ten sygnał liczbowy porównuje średnią wartość log-10 historii gry graczy na serwerze z wartością historii gry dołączającego gracza.Ten sygnał ma maksymalną odpowiednią różnicę 4.6.Wynik sygnału jest odwrotnie związany z różnicą historii odtwarzania, co oznacza, że różnice w historii odtwarzania są niższe.


playHistorySignalScore = 1 - min(4.6, playHistoryDifference / 4.6), where
playHistoryDifference = abs(avgServerPlayHistory - joiningPlayerPlayHistory)

Czat głosowy

Gracz może mieć włączoną lub wyłączoną czat głosowy.Sygnał czatu głosowego to sygnał kategoriczny, który mierzy stosunek liczby graczy z tym samym ustawieniem czatu głosowego, jak dołączający gracz, do liczby graczy na serwerze.

Jeśli miejsce ma wyłączoną czat głosowy, waga sygnału czatu głosowego wynosi 0.


voiceChatSignalScore = (# players with same voice chat setting as joining player) / (# players on the server)

Niestandardowe atrybuty

Niestandardowe atrybuty dają dostęp do danych gracza i serwera sygnałom niestandardowym.Aby uzyskać więcej informacji o tworzeniu własnych niestandardowych atrybutów, zobacz Stwórz niestandardowy atrybut.Aby uzyskać więcej informacji o istniejących atrybutach Roblox, zobacz Istniejące atrybuty.

Atrybut Charakterystyki
Gracz Trwałe dane o graczu, które utrzymują się w magazynach danych, takich jak poziom gracza lub wynik wewnątrz doświadczenia Zarządzane za pomocą interfejsów programistycznych DataStore
Serwer Nie są trwałe i istnieją tylko tak długo, jak serwer jest aktywny Dane serwerowe, takie jak poziom serwera lub tryb gry Zarządzane za pomocą MatchmakingService API
Przykład atrybutu gracza

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
Przykład atrybutu serwera

local MatchmakingService = game::GetService("MatchmakingService")
local RunService = game:GetService("RunService")
if RunService:IsStudio() then
-- Ustawia początkowe atrybuty i schemat do testowania
MatchmakingService:InitializeServerAttributesForStudio(
{
Level = "Advanced",
Elo = 123.456,
TrainingMode = true
})
end
-- Zwraca atrybut poziomu
local currentLevel, error = MatchmakingService:GetServerAttribute("Level")
if error then
print(error)
else
print("Current level: " .. currentLevel)
end
-- Aktualizuje wartość atrybutu poziomu do zaawansowanej
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

Niestandardowe sygnały

Niestandardowe sygnały są tworzone i określone przez ciebie i mogą być liczbowe lub kategoryczne:

  • Sygnały liczbowe są liczbami.Porównują różnicę między atrybutem łączącego gracza a zagregowaną wartością serwera, z większymi różnicami obniżającymi lub zwiększającymi wynik.Na przykład, im bliżej poziom umiejętności gracza jest do średniego poziomu umiejętności serwera, tym wyższa jest ocena sygnału liczbowego.Wynik ten jest następnie mnożony przez wagę sygnału.
  • Sygnały kategorialne są ciągami lub boolianami.Opierają się one na tym, jak powszechny jest atut łączącego gracza w porównaniu z innymi graczami na serwerze.Na przykład, jeśli wysoki procent graczy w serwerze ma ten sam preferowany język co dołączający gracz, wynik wzrasta.Wynik ten jest następnie również mnożony przez wagę sygnału.

Aby uzyskać więcej informacji o tworzeniu własnych niestandardowych sygnałów, zobacz Stwórz niestandardowy sygnał.Aby uzyskać więcej informacji o istniejących sygnałach Roblox, patrz Istniejące sygnały.

Gracz liczbowy

Dołączanie gracza

Minimalizuje różnicę między przeciętną właściwością gracza serwera a właściwością gracza dołączającego.Różnice ponad 1000 zwracają wynik sygnału 0.

Dołączanie formuły gracza do sygnału liczbowego gracza

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
Dołączanie przykładu gracza do sygnału liczbowego gracza

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
Wartość stała

Minimalizuje różnicę między przeciętną wartością atrybutu gracza serwera a stałą wartością 500.Różnice ponad 1000 zwracają wynik sygnału 0.

Formuła stałej wartości dla sygnału liczbowego gracza

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
Przykład stałej wartości dla sygnału liczbowego gracza

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)

Kategoria gracza

Klasyfikacja

Maksymalizuje współczynnik liczby graczy na serwerze, którzy mają ten sam atut, co atut dołączającego gracza.

Formuła klasyfikacji dla sygnału kategorii gracza

local score = num_players_same_{attribute_name} / occupancy
return score
Przykład klasyfikacji dla sygnału kategorii gracza

local num_players_same_Guild = 15
local occupancy = 19
local score = num_players_same_Guild / occupancy
return score
Rozdrobnienie

Maksymalizuje relację graczy na serwerze, którzy mają inny atrybut niż atrybut dołączającego gracza.

Diversyfikacja formuły dla sygnału kategorii gracza

local score = num_players_same_{attribute_name} / occupancy
return 1 - score
Rozdrobnienie przykładu sygnału kategorii gracza

local num_players_same_RpgClass = 15
local occupancy = 19
local score = num_players_same_RpgClass / occupancy
return score

Serwer liczbowy

Dołączanie gracza

Minimalizuje różnicę między atrybutem serwera a atrybutem łączącego gracza. Różnice ponad 1000 zwracają wynik sygnału 0.

Dołączanie formuły gracza do sygnału liczbowego serwera

local diff = math.abs(server_{attribute_name} - joining_player_{attribute_name})
local score = 1 - math.min(diff / max_relevant_difference, 1)
return score
Dołączanie przykładu gracza do sygnału liczbowego gracza

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)
Wartość stała

Minimalizuje różnicę między wartością atrybutu serwera a stałą wartością. Różnice ponad tą stałą wartością zwracają wynik sygnału 0.

Formuła wartości stałej dla sygnału liczbowego serwera

local diff = math.abs(server_{attribute_name} - constant_value)
local score = math.min(diff / max_relevant_difference, 1)
return score
Przykład stałej wartości dla sygnału liczbowego serwera

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)

Kategoria serwera

Porównaj do dołączania gracza

Wynik wynosi 1, gdy wartość atrybutu serwera (na przykład, Tryb gry) jest równa wartości atrybutu gracza (na przykład, Preferowany tryb gry).W przeciwnym razie wynik sygnału wynosi 0.

Dołączanie formuły gracza do sygnału kategorii serwera

if server_{attribute_name} = joining_player_{attribute_name} then
return 1
else
return 0
end
Dołączanie przykładu gracza do sygnału kategorii serwera

local server_GameMode = "Survival"
local joining_player_GameMode = "Survival"
if server_GameMode = joining_player_GameMode then
return 1
else
return 0
end
Porównaj z stałą wartością

Wynik to 1, gdy wartość atrybutu serwera jest równa stałej wartości prawdy. W przeciwnym razie wynik sygnału to 0.

Formuła wartości stałej dla sygnału kategorii serwera

if server_{attribute_name} = constant_value then
return 1
else
return 0
end
Przykład stałej wartości dla sygnału kategorii serwera

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