Öznitelikler ve sinyaller

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

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ısalBir oyuncunun sunucudaki tahmini gecikme süresi.
Arkadaşları Var SınıfsalBir sunucunun katılan oyuncuyla aynı IP adresine sahip bir arkadaşı veya başka bir oyuncusu olup olmadığı.
Sesli sohbet etkinleştirildi mi SınıfsalBir oyuncunun sesli sohbet etkin olup olmadığı.
Oyuncu Yaşı SayısalOyuncunun yaşı.
Oyuncu Cihaz Türü SınıfsalOyuncunun cihaz yaz. Bir mobil cihaz, bilgisayar, tablet, konsol veya VR cihazı olabilir.
Oyuncu Dili SınıfsalOyuncunun dili.
Oyuncu Oynama Geçmişi SayısalBir oyuncunun son 28 günde bir evrende oynadığı dakika sayısı log-10.
Sunucu Doluluğu SayısalBir 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, where
ageDifference = 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), where
playHistoryDifference = 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ı ayarlar
MatchmakingService:InitializeServerAttributesForStudio(
{
Level = "Advanced",
Elo = 123.456,
TrainingMode = true
})
end
-- Seviye özniteliğini alır
local currentLevel, error = MatchmakingService:GetServerAttribute("Level")
if error then
print(error)
else
print("Current level: " .. currentLevel)
end
-- Seviye öznitelik değerini Gelişmiş'e güncelleyin
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

Ö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 = 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
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 = 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)

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} / occupancy
return score
Oyuncu kategorik sinyali için gruplama örneği

local num_players_same_Guild = 15
local occupancy = 19
local score = num_players_same_Guild / occupancy
return 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} / occupancy
return 1 - score
Oyuncu kategorik sinyali için örnek çeşitlendirme

local num_players_same_RpgClass = 15
local occupancy = 19
local score = num_players_same_RpgClass / occupancy
return 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 = 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)
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 = 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)

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} then
return 1
else
return 0
end
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 then
return 1
else
return 0
end
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 then
return 1
else
return 0
end
Sunucu kategorik sinyali için sabit değer örneği

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