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 | Liczbowy | Szacowany czas opóźnienia gracza na serwerze. |
Ma przyjaciół | Kategorialny | Czy serwer ma przyjaciela lub innego gracza o tym samym adresie IP co dołączający gracz. |
Czy czat głosowy jest włączony | Kategorialny | Czy gracz ma włączony czat głosowy. |
Wiek gracza | Liczbowy | Wiek gracza. |
Typ urządzenia gracza | Kategorialny | wpisywaćurządzenia gracza. Może to być urządzenie mobilne, komputer, tablet, konsola lub urządzenie VR. |
Język gracza | Kategorialny | Język gracza. |
Historia gry gracza | Liczbowy | Liczba minut log-10, które gracz rozegrał w wszechświecie w ciągu ostatnich 28 dni. |
Zajętość serwera | Liczbowy | Liczba 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, whereageDifference = 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), whereplayHistoryDifference = 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 testowaniaMatchmakingService:InitializeServerAttributesForStudio({Level = "Advanced",Elo = 123.456,TrainingMode = true})end-- Zwraca atrybut poziomulocal currentLevel, error = MatchmakingService:GetServerAttribute("Level")if error thenprint(error)elseprint("Current level: " .. currentLevel)end-- Aktualizuje wartość atrybutu poziomu do zaawansowanejlocal 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
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 = 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
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 = 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)
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} / occupancyreturn score
Przykład klasyfikacji dla sygnału kategorii gracza
local num_players_same_Guild = 15local occupancy = 19local score = num_players_same_Guild / occupancyreturn 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} / occupancyreturn 1 - score
Rozdrobnienie przykładu sygnału kategorii gracza
local num_players_same_RpgClass = 15local occupancy = 19local score = num_players_same_RpgClass / occupancyreturn 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 = 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)
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 = 500local max_relevant_difference = 1000local constant_value = 1000local 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} thenreturn 1elsereturn 0end
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 thenreturn 1elsereturn 0end
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 thenreturn 1elsereturn 0end
Przykład stałej wartości dla sygnału kategorii serwera
local server_GameNotStarted = trueif server_GameNotStarted = true thenreturn 1elsereturn 0end