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 |
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 serweralocal MatchmakingService = game:GetService("MatchmakingService")local RunService = game:GetService("RunService")if RunService:IsStudio() then-- Ustawia początkowe atrybuty i schemat do testowaniaMatchmakingService:InitializeServerAttributesForStudio({Level = "Zaawansowany",Elo = 123.456,TrainingMode = true})end-- Pobiera atrybut Levellocal currentLevel, errorMessage = MatchmakingService:GetServerAttribute("Level")if errorMessage thenwarn(errorMessage)elseprint("Aktualny poziom: " .. currentLevel)end-- Aktualizuje wartość atrybutu Level na Zaawansowanylocal success, errorMessage = MatchmakingService:SetServerAttribute("Level", "Zaawansowany")if not success thenwarn("Nie udało się zaktualizować atrybutu serwera [Level] na [Zaawansowany] z powodu błędu: " .. errorMessage)elseprint("Pomocnie ustawiono [Level] na [Zaawansowany]")end
Niestandardowe 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.
Formuła gracza dołączającego dla sygnału numerycznegolocal diff = math.abs(server_{aggregation_function}_{attribute_name} - joining_player_{attribute_name})local score = 1 - math.min(diff / max_relevant_difference, 1)return score
Przykład gracza dołączającego dla sygnału numerycznegolocal 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 średnim atrybutem gracza na serwerze a stałą wartością 500. Różnice przekraczające 1000 zwracają wynik sygnału równy 0.
Formuła wartości stałej dla sygnału numerycznegolocal 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 wartości stałej dla sygnału numerycznegolocal 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
Klastrowanie
Maksymalizuje współczynnik graczy w serwerze, którzy mają ten sam atrybut, co atrybut gracza dołączającego.
Formuła klastrowania dla sygnału kategorycznegolocal score = num_players_same_{attribute_name} / occupancyreturn score
Przykład klastrowania dla sygnału kategorycznegolocal num_players_same_Guild = 15local occupancy = 19local score = num_players_same_Guild / occupancyreturn score
Zróżnicowanie
Maksymalizuje współczynnik graczy w serwerze, którzy mają inny atrybut niż atrybut gracza dołączającego.
Formuła różnicowania dla sygnału kategorycznegolocal score = num_players_same_{attribute_name} / occupancyreturn 1 - score
Przykład różnicowania dla sygnału kategorycznegolocal num_players_same_RpgClass = 15local occupancy = 19local score = num_players_same_RpgClass / occupancyreturn score
Liczby 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.
Formuła dla gracza dołączającego dla sygnału numerycznego serweralocal diff = math.abs(server_{attribute_name} - joining_player_{attribute_name})local score = 1 - math.min(diff / max_relevant_difference, 1)return score
Przykład gracza dołączającego dla sygnału numerycznego serweralocal 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 przekraczające tę stałą wartość zwracają wynik sygnału równy 0.
Formuła wartości stałej dla sygnału numerycznego serweralocal diff = math.abs(server_{attribute_name} - constant_value)local score = math.min(diff / max_relevant_difference, 1)return score
Przykład wartości stałej dla sygnału numerycznego serweralocal 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ó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.
Formuła dla gracza dołączającego dla sygnału kategorycznego serweraif server_{attribute_name} == joining_player_{attribute_name} thenreturn 1elsereturn 0end
Przykład dla gracza dołączającego dla sygnału kategorycznego serweralocal server_GameMode = "Survival"local joining_player_GameMode = "Survival"if server_GameMode == joining_player_GameMode thenreturn 1elsereturn 0end
Poró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.
Formuła wartości stałej dla sygnału kategorycznego serweraif server_{attribute_name} == constant_value thenreturn 1elsereturn 0end
Przykład wartości stałej dla sygnału kategorycznego serweralocal server_GameNotStarted = trueif server_GameNotStarted == true thenreturn 1elsereturn 0end