Istniejące atrybuty
Domyślna konfiguracja dopasowywania Roblox wykorzystuje sygnały oparte na istniejących atrybutach, takich jak lokalizacja gracza, grupa wiekowa i opóźnienie.
Aby użyć danych do dopasowywania, których Roblox nie uwzględnia automatycznie w swojej domyślnej konfiguracji, musisz utworzyć niestandardowe atrybuty i niestandardowe sygnały.
| Atrybut | Typ | Opis |
|---|---|---|
| Szacowane opóźnienie gracza | Liczbowy | Szacowane opóźnienie gracza w serwerze. |
| Ma przyjaciół | Kategoryczny | Czy serwer ma przyjaciela lub innego gracza o tym samym adresie IP, co gracz dołączający. |
| Czat głosowy włączony | Kategoryczny | Czy gracz ma włączony czat głosowy. |
| Wiek gracza | Liczbowy | Wiek gracza. |
| Typ urządzenia gracza | Kategoryczny | Typ urządzenia gracza. Może to być urządzenie mobilne, komputer, tablet, konsola lub urządzenie VR. |
| Język gracza | Kategoryczny | Język gracza. |
| Historia gry gracza | Liczbowy | Liczba minut, które gracz spędził w uniwersum w ciągu ostatnich 28 dni (logarytm dziesiętny). |
| Zajętość serwera | Liczbowy | Liczba graczy w serwerze. |
| Grupa czatu tekstowego gracza | Kategoryczny | Grupa czatu tekstowego gracza, w której mogą wspólnie czatować. |
Istniejące sygnały
Poniżej znajdują się sygnały zdefiniowane przez Roblox, pochodzące na podstawie atrybutów Robloxa:
| Sygnał | Opis |
|---|---|
| Wiek | Różnica między średnim wiekiem graczy na serwerze a wiekiem gracza dołączającego, z maksymalną istotną różnicą wynoszącą 25. |
| Typ urządzenia | Stosunek graczy na serwerze z tym samym typem urządzenia, co gracz dołączający. |
| Przyjaciele | Liczba osób na serwerze, które są przyjaciółmi gracza dołączającego lub które dzielą adres IP z graczem dołączającym. 1, jeśli istnieje preferowany gracz, 0 w przeciwnym razie. |
| Opóźnienie | Szacowane opóźnienie gracza dla serwera, z maksymalną istotną wartością wynoszącą 250. |
| Język | Stosunek graczy na serwerze z tym samym językiem, co gracz dołączający. |
| Zajętość | Stosunek graczy na serwerze do pojemności serwera. |
| Historia gry | Różnica między średnią historią gry na serwerze a historią gry gracza dołączającego, z maksymalną istotną różnicą wynoszącą 4.6. |
| Czat głosowy | Stosunek graczy na serwerze z włączonym czatem głosowym. |
| Czat tekstowy | Stosunek graczy na serwerze, którzy mogą wspólnie czatować tekstowo z graczem dołączającym. |
Wiek
Liczbowy sygnał, który porównuje średni wiek graczy na serwerze z wiekiem gracza dołączającego. Ten sygnał ma maksymalną istotną różnicę wynoszącą 25. Wynik sygnału jest odwrotnie proporcjonalny do różnicy wieku, co oznacza, że niższe różnice wieku mają wyższe wyniki.
gdzie
Typ urządzenia
Kategoryczny sygnał, który mierzy stosunek graczy na serwerze z tym samym typem urządzenia, co gracz dołączający. Typy urządzeń obejmują: komputer, urządzenie mobilne, tablet, konsola i urządzenie VR.
Przyjaciele
Preferowany gracz to gracz, który jest przyjacielem gracza dołączającego lub dzieli ten sam adres IP z graczem dołączającym. Sygnał Przyjaciele to kategoryczny sygnał, którego wynik wynosi 1, gdy na serwerze jest preferowany gracz, oraz 0, gdy nie ma preferowanych graczy na serwerze.
Sygnał Przyjaciele można również traktować jako sygnał liczbowy z maksymalną istotną wartością wynoszącą 1.
Język
Kategoryczny sygnał, który mierzy stosunek graczy na serwerze, którzy dzielą to samo ustawienie języka, co gracz dołączający.
Opóźnienie
Liczbowy sygnał, który mierzy szacowany czas ping w milisekundach gracza dołączającego, gdyby grał na serwerze. Ten sygnał ma maksymalną istotną wartość wynoszącą 250 milisekund. Wynik sygnału jest odwrotnie proporcjonalny do pingu, co oznacza, że niższe wartości pingu mają wyższe wyniki.
Zajętość
Liczbowy sygnał, który mierzy stosunek graczy na serwerze do pojemności serwera.
Historia gry
Wartość atrybutu Historia gry to logarytm dziesiętny liczby minut, które gracz spędził w uniwersum w ciągu ostatnich 28 dni. Ten liczbowy sygnał porównuje średnią wartość logarytmu dziesiętnego Historii gry graczy na serwerze z wartością Historii gry gracza dołączającego. Ten sygnał ma maksymalną istotną różnicę wynoszącą 4.6. Wynik sygnału jest odwrotnie proporcjonalny do różnicy w historii gry, co oznacza, że niższe różnice w historii gry mają wyższe wyniki.
, gdzie
Czat głosowy
Gracz może mieć włączony lub wyłączony czat głosowy. Sygnał Czat głosowy to kategoryczny sygnał, który mierzy stosunek graczy z tym samym ustawieniem czatu głosowego, co gracz dołączający, do liczby graczy na serwerze.
Jeśli miejsce ma wyłączony czat głosowy, waga sygnału Czat głosowy wynosi 0.
Czat tekstowy
Kategoryczny sygnał, który mierzy stosunek graczy na serwerze, którzy mogą wspólnie czatować tekstowo z graczem dołączającym.
Niestandardowe atrybuty
Niestandardowe atrybuty dają niestandardowym sygnałom dostęp do danych graczy i serwera. Aby uzyskać więcej informacji na temat tworzenia własnych niestandardowych atrybutów, zobacz Utwórz niestandardowy atrybut. Aby uzyskać więcej informacji na temat istniejących atrybutów Roblox, zobacz Istniejące atrybuty.
| Atrybut | Cechy |
|---|---|
| Gracz | Trwały Niestandardowe dane gracza, które są zachowywane w magazynach danych, takie jak poziom lub wynik gracza w grze Zarządzane przy użyciu API DataStore |
| Serwer | Nie trwały i działa tylko tak długo, jak serwer jest aktywny Dane specyficzne dla serwera, takie jak poziom serwera lub tryb gry Zarządzane przy użyciu 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
-- Ustawia początkowe atrybuty i schemat do testowania
MatchmakingService:InitializeServerAttributesForStudio({
Level = "Zaawansowany",
Elo = 123.456,
TrainingMode = true
})
end
-- Pobiera atrybut Level
local currentLevel, errorMessage = MatchmakingService:GetServerAttribute("Level")
if errorMessage then
warn(errorMessage)
else
print("Aktualny poziom: " .. currentLevel)
end
-- Aktualizuje wartość atrybutu Level na Zaawansowany
local success, errorMessage = MatchmakingService:SetServerAttribute("Level", "Zaawansowany")
if not success then
warn("Nie udało się zaktualizować atrybutu serwera [Level] na [Zaawansowany] z powodu błędu: " .. errorMessage)
else
print("Pomocnie ustawiono [Level] na [Zaawansowany]")
endNiestandardowe sygnały
Niestandardowe sygnały są tworzone i definiowane przez ciebie i mogą być liczbowe lub kategoryczne:
- Sygnały liczbowe to liczby. Porównują różnicę między atrybutem gracza dołączającego a skumulowaną wartością serwera, gdzie większe różnice obniżają lub zwiększają wynik. Na przykład im bliżej poziom umiejętności gracza jest średniego poziomu umiejętności serwera, tym wyższy wynik sygnału liczbowego. Ten wynik jest następnie mnożony przez wagę sygnału.
- Sygnały kategoryczne to napisy lub boolow. Opierają się na tym, jak powszechny jest atrybut gracza dołączającego w porównaniu do innych graczy na serwerze. Na przykład, jeśli wysoki procent graczy w serwerze ma to samo preferowane ustawienie językowe, co gracz dołączający, wynik wzrasta. Ten wynik jest następnie również mnożony przez wagę sygnału.
Aby uzyskać więcej informacji na temat tworzenia własnych niestandardowych sygnałów, zobacz Utwórz niestandardowy sygnał. Aby uzyskać więcej informacji na temat istniejących sygnałów Roblox, zobacz Istniejące sygnały.
Liczby gracza
Gracz dołączający
Minimalizuje różnicę między średnim atrybutem gracza na serwerze a atrybutem gracza dołączającego. Różnice przekraczające 1000 zwracają wynik sygnału równy 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 scoreWartość stała
Minimalizuje różnicę między średnim atrybutem gracza na serwerze a stałą wartością 500. Różnice przekraczające 1000 zwracają wynik sygnału równy 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)Kategoria gracza
Klastrowanie
Maksymalizuje współczynnik graczy w serwerze, którzy mają ten sam atrybut, co atrybut gracza dołączającego.
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 scoreZróżnicowanie
Maksymalizuje współczynnik graczy w serwerze, którzy mają inny atrybut niż atrybut gracza dołączającego.
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 scoreLiczby serwera
Gracz dołączający
Minimalizuje różnicę między atrybutem serwera a atrybutem gracza dołączającego. Różnice przekraczające 1000 zwracają wynik sygnału równy 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)Wartość stała
Minimalizuje różnicę między wartością atrybutu serwera a stałą wartością. Różnice przekraczające tę stałą wartość zwracają wynik sygnału równy 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)Kategoria serwera
Porównanie do gracza dołączającego
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.
if server_{attribute_name} == joining_player_{attribute_name} then
return 1
else
return 0
endlocal server_GameMode = "Survival"
local joining_player_GameMode = "Survival"
if server_GameMode == joining_player_GameMode then
return 1
else
return 0
endPorównanie do wartości stałej
Wynik wynosi 1, gdy wartość atrybutu serwera jest równa stałej wartości prawdziwej. W przeciwnym razie wynik sygnału wynosi 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