Mevcut öznitelikler
Varsayılan Roblox eşleştirme yapılandırması, oyuncu konumu, yaş grupve gecikme gibi mevcut özelliklere dayalı sinyalleri kullanır.
Roblox'un varsayılan yapılandırmasına otomatik olarak dahil etmediği eşleştirme için verileri kullanmak için, özel öznitelikler ve özel sinyaller oluşturmanız gerekir.
Öznitelik | Tür | Açıklama |
---|---|---|
Tahmini Oyuncu Latansı | Sayısal | Bir oyuncunun sunucudaki tahmini gecikme süresi. |
Arkadaşları Var | Sınıfsal | Bir sunucunun katılan oyuncuyla aynı IP adresine sahip bir arkadaşı veya başka bir oyuncusu olup olmadığı. |
Sesli sohbet etkinleştirildi mi | Sınıfsal | Bir oyuncunun sesli sohbet etkin olup olmadığı. |
Oyuncu Yaşı | Sayısal | Oyuncunun yaşı. |
Oyuncu Cihaz Türü | Sınıfsal | Oyuncunun cihaz yaz. Bir mobil cihaz, bilgisayar, tablet, konsol veya VR cihazı olabilir. |
Oyuncu Dili | Sınıfsal | Oyuncunun dili. |
Oyuncu Oynama Geçmişi | Sayısal | Bir oyuncunun son 28 günde bir evrende oynadığı dakika sayısı log-10. |
Sunucu Doluluğu | Sayısal | Bir sunucudaki oyuncu sayısı. |
Mevcut sinyaller
Aşağıda, Roblox özniteliklerine dayanarak Roblox tarafından tanımlanan sinyaller bulunmaktadır:
İşaret | Açıklama |
---|---|
Yaşı | Sunucudaki oyuncuların ortalama yaşı ve katılan oyuncunun yaşı arasındaki fark, maksimum alakalı bir farkı 25 ile. |
Cihaz Türü | Katılan oyuncuyla aynı cihaz türüne sahip sunucudaki oyuncu oranı. |
Arkadaşlar | Katılan oyuncuyla arkadaş olan veya katılan oyuncuyla bir IP adresini paylaşan sunucudaki kişi sayısı.1, tercih edilen bir oyuncu varsa, 0 aksi takdirde. |
Geçiş Süresi | Bir sunucu için tahmini oyuncu gecikme süresi, maksimum alakalı değeri 250 ile. |
Dil | Katılan oyuncuyla aynı dilde olan sunucudaki oyuncu oranı |
Doldurma | Sunucudaki oyuncuların oranı, sunucunun kapasitesine kıyasla. |
Oynama Geçmişi | Sunucudaki ortalama oynama geçmişi ve katılan oyuncunun oynama geçmişi arasındaki fark, maksimum 4.6 ile ilgili bir farkla. |
Sesli sohbet | Sesli sohbet etkinleştirilmiş sunucudaki oyuncu oranı. |
Yaş
Bir sunucudaki oyuncuların ortalama yaşlarını katılan oyuncunun yaşıyla karşılaştıran sayısal bir sinyal.Bu sinyalin maksimum alakalı farkı 25'tir.Sinyal puanı yaş farkıyla ters orantılıdır, yani daha düşük yaş farkları daha yüksek puanlara sahiptir.
ageDifferenceSignalScore = 1 - min(25, ageDifference) / 25, whereageDifference = abs(avgServerAge - joiningPlayerAge)
Cihaz Türü
Katılan oyuncunun aynı cihaz türüyle sunucudaki oyuncu oranını ölçen kategorik bir sinyal.Cihaz türleri şunları içerir: Bilgisayar, mobil cihaz, tablet, konsol ve VR cihazı.
deviceTypeSignalScore = (# players with same device as joining player) / (# players on the server)
Arkadaşlar
Tercih edilen bir oyuncu, katılan oyuncuyla arkadaş olan veya katılan oyuncunun aynı IP adresini paylaşan bir oyuncudur.Arkadaş sinyali, sunucuda tercih edilen bir oyuncu varsa puan 1 ile kategorik bir sinyaldir ve sunucuda tercih edilen oyuncu yoksa puan 0'dur.
friendsSignalScore = hasFriends ? 1 : 0
Arkadaş sinyali de maksimum alakalı değeri 1 ile bir sayısal sinyal olarak düşünülebilir.
friendsSignalScore = min(# preferred players in server, 1) / 1
Dil
Katılma oyuncusu ile aynı dil ayarını paylaşan sunucudaki oyuncuların oranını ölçen kategorik bir sinyal.
languageSignalScore = (# players with same language setting as joining player) / (# players on the server)
Gecikme
Katılan oyuncunun bir saniyedeki tahmini ping süresini ölçen sayısal bir sinyal, eğer bir sunucuda oynarsa.Bu sinyalin maksimum alakalı değeri 250 milisaniye'dir.Sinyal puanı, ping ile ters orantılıdır, yani daha düşük ping değerlerinin puanı daha yüksektir.
latencySignalScore = 1 - min(250, estimatedPingMs) / 250
Doluluk
Sunucudaki oyuncu oranını sunucunun kapasitesine göre ölçen sayısal bir sinyal.
occupancySignalScore = (# players in server) / serverCapacity
Oynama Geçmişi
Oynama Geçmişi öznitelik değeri, bir oyuncunun son 28 gün içinde bir evrende oynadığı dakika sayısı log-10'dur.Bu sayısal sinyal, sunucudaki oyuncuların ortalama log-10 Oyun Geçmişi değerini, katılan oyuncunun Oyun Geçmişi değerine karşılaştırır.Bu sinyalin maksimum alakalı farkı 4.6'dır.Sinyal puanı, oynatma geçmişi farkıyla ters orantılıdır, yani daha düşük oynatma geçmişi farklarının puanı daha yüksektir.
playHistorySignalScore = 1 - min(4.6, playHistoryDifference / 4.6), whereplayHistoryDifference = abs(avgServerPlayHistory - joiningPlayerPlayHistory)
Sesli Sohbet
Bir oyuncu sesli sohbeti etkinleştirilmiş veya devre dışı bırakılmış olabilir.Sesli sohbet sinyali, katılan oyuncunun aynı sesli sohbet ayarına sahip oyuncuların oranını sunucudaki oyuncu sayısına ölçen kategorik bir sinyaldir.
Bir yerin ses sohbeti devre dışıysa, Ses Sohbeti sinyalinin ağırlığı 0'dur.
voiceChatSignalScore = (# players with same voice chat setting as joining player) / (# players on the server)
Özel öznitelikler
Özel öznitelikler, oyuncu ve sunucu verilerine özel sinyallerin erişimine izin verir.Kendi özel özniteliklerinizi oluşturma hakkında daha fazla bilgi için, bakın Özel bir öznitelik oluşturun.Mevcut Roblox öznitelikleri hakkında daha fazla bilgi için, Mevcut öznitelikler bakın.
Öznitelik | Özellikler |
---|---|
Oyuncu | Veri depolarında kalan kalıcı özel oyuncu verileri, deneyimin içinde bir oyuncunun seviyesi veya skoru gibi Yönetilen DataStore API'ler kullanılarak yönetilen |
Sunucu | Kalıcı değil ve yalnızca sunucu aktif olduğu sürece sürer Server seviyesi veya oyun modu gibi sunucuya özel veriler API ile yönetilir MatchmakingService |
Oyuncu özelliği örneği
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
Sunucu özelliği örneği
local MatchmakingService = game::GetService("MatchmakingService")local RunService = game:GetService("RunService")if RunService:IsStudio() then-- Test için başlangıç özniteliklerini ve şemayı ayarlarMatchmakingService:InitializeServerAttributesForStudio({Level = "Advanced",Elo = 123.456,TrainingMode = true})end-- Seviye özniteliğini alırlocal currentLevel, error = MatchmakingService:GetServerAttribute("Level")if error thenprint(error)elseprint("Current level: " .. currentLevel)end-- Seviye öznitelik değerini Gelişmiş'e güncelleyinlocal 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
Özel sinyaller
Özel sinyaller sizin tarafınızdan oluşturulur ve tanımlanır ve sayısal veya kategorik olabilir:
- Sayısal sinyaller sayılardır.Katılan oyuncunun özelliği ve sunucunun toplanmış değeri arasındaki farkı, puanı düşüren veya artıran daha büyük farklılıklarla karşılaştırırlar.Örneğin, bir oyuncunun beceri seviyesi sunucunun ortalama beceri seviyesine ne kadar yakın olursa, sayısal sinyalin puanı o kadar yüksektir.Bu puan ardından sinyalin ağırlığı ile çarpılır.
- Kategorik sinyaller dize ya da booleans'tır.Katılan oyuncunun özelliğinin, sunucudaki diğer oyuncularla karşılaştırıldığında ne kadar yaygın olduğuna dayanıyorlar.Örneğin, bir sunucudaki oyuncuların yüksek bir yüzdesi aynı tercih edilen dili katılan oyuncuyla paylaşıyorsa, puan artar.Bu puan ardından sinyalin ağırlığı ile çarptılır.
Kendi özel sinyallerinizi oluşturma hakkında daha fazla bilgi için, Özel bir sinyal oluşturun bakın.Mevcut Roblox sinyalleri hakkında daha fazla bilgi için, Mevcut sinyaller bakın.
Oyuncu sayısal
Oyuncuya katılma
Sunucunun ortalama oyuncu özelliği ve katılan oyuncunun özelliği arasındaki farkı en aza indirir.1000'in ötesindeki farklılıklar bir sinyal puanı 0 olarak döndürür.
Oyuncu sayısal sinyali için oyuncu formülüne katılma
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
Oyuncu sayısal sinyali için oyuncu örneğine katılma
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
Sabit değer
sunucuortalama oyuncu özelliği ve 500'lik sabit değer arasındaki farkı en aza indirir.1000'in ötesindeki farklılıklar bir sinyal puanı 0 olarak döndürür.
Oyuncu sayısal sinyali için sabit değer formülü
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
Oyuncu sayısal sinyali için sabit değer örneği
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)
Oyuncu kategorik
Sıralama
Katılan oyuncunun özelliği ile aynı özelliğe sahip sunucudaki oyuncuların oranını maksimuma çıkarır.
Oyuncu kategorik sinyali için gruplama formülü
local score = num_players_same_{attribute_name} / occupancyreturn score
Oyuncu kategorik sinyali için gruplama örneği
local num_players_same_Guild = 15local occupancy = 19local score = num_players_same_Guild / occupancyreturn score
Çeşitlendirme
Katılan oyuncunun özelliğinden farklı bir özelliğe sahip olan sunucudaki oyuncu oranını maksimuma çıkarır.
Oyuncu kategorik sinyali için formül çeşitlendirilmesi
local score = num_players_same_{attribute_name} / occupancyreturn 1 - score
Oyuncu kategorik sinyali için örnek çeşitlendirme
local num_players_same_RpgClass = 15local occupancy = 19local score = num_players_same_RpgClass / occupancyreturn score
Sunucu sayısal
Oyuncuya katılma
sunucuözelliği ve katılan oyuncunun özelliği arasındaki farkı en aza indirir. 1000'in ötesindeki farklar bir sinyal puanı 0 olarak döndürür.
Sunucu sayısal sinyali için oyuncu formülüne katılma
local diff = math.abs(server_{attribute_name} - joining_player_{attribute_name})local score = 1 - math.min(diff / max_relevant_difference, 1)return score
Oyuncu sayısal sinyali için oyuncu örneğine katılma
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)
Sabit değer
sunucuöznitelik değeri ve sabit bir değer arasındaki farkı en aza indirir. Bu sabit değerin ötesindeki farklar bir sinyal puanı 0 olarak döndürür.
Sunucu sayısal sinyali için sabit değer formülü
local diff = math.abs(server_{attribute_name} - constant_value)local score = math.min(diff / max_relevant_difference, 1)return score
Sunucu sayısal sinyali için sabit değer örneği
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)
Sunucu kategorik
Oyuncuya katılmaya karşılaştır
sunucuöznitelik değeri (örneğin, Oyun Modu) oyuncunun öznitelik değerine eşit olduğunda puan 1'dir (örneğin, Tercih Edilen Oyun Modu).Aksi takdirde, sinyal puanı 0'dur.
Sunucu kategorik sinyali için oyuncu formülüne katılma
if server_{attribute_name} = joining_player_{attribute_name} thenreturn 1elsereturn 0end
Sunucu kategorik sinyali için oyuncu örneğine katılma
local server_GameMode = "Survival"local joining_player_GameMode = "Survival"if server_GameMode = joining_player_GameMode thenreturn 1elsereturn 0end
Sabit değere karşılaştırın
sunucuöznitelik değeri doğru bir sabit değere eşit olduğunda puan 1'dir. Aksi takdirde, sinyal puanı 0'dur.
Sunucu kategorik sinyali için sabit değer formülü
if server_{attribute_name} = constant_value thenreturn 1elsereturn 0end
Sunucu kategorik sinyali için sabit değer örneği
local server_GameNotStarted = trueif server_GameNotStarted = true thenreturn 1elsereturn 0end