Atribut yang ada
Konfigurasi matchmaking Roblox default menggunakan sinyal berdasarkan atribut yang ada seperti lokasi pemain, grupusia, dan kelambatan.
Untuk menggunakan data untuk matchmaking yang Roblox tidak secara otomatis termasuk dalam konfigurasi defaultnya, Anda perlu membuat attribut khusus dan sinyal khusus .
Atribut | Jenis | Deskripsi |
---|---|---|
Estimasi Latensi Pemain | Angka | Estimasi kelambatan pemain di server. |
Memiliki Teman | Kategorial | Apakah server memiliki teman atau pemain lain dengan alamat IP yang sama dengan pemain yang bergabung. |
Apakah Obrolan Suara Diaktifkan | Kategorial | Apakah pemain memiliki obrolan suara yang diaktifkan. |
Usia Pemain | Angka | Usia pemain. |
Jenis Perangkat Pemain | Kategorial | ketikperangkat pemain. Bisa menjadi perangkat seluler, komputer, tablet, konsol, atau perangkat VR. |
Bahasa Pemain | Kategorial | Bahasa pemain. |
Histori Permainan Pemain | Angka | Angka log-10 menit yang dimainkan pemain di alam semesta dalam 28 hari terakhir. |
Penggunaan Server | Angka | Jumlah pemain di server. |
Sinyal yang ada
Berikut adalah sinyal yang didefinisikan oleh Roblox berdasarkan atribut Roblox:
Sinyal | Deskripsi |
---|---|
Usia | Perbedaan antara usia rata-rata pemain di server dan usia pemain yang bergabung, dengan perbedaan relevan maksimal 25. |
Tipe Perangkat | Rasio pemain di server dengan jenis perangkat yang sama dengan pemain bergabung. |
Teman | Jumlah orang di server yang berteman dengan pemain yang bergabung atau yang berbagi alamat IP dengan pemain bergabung.1 jika ada pemain yang disukai, 0 lainnya. |
Latensi | Estimasi latensi pemain untuk server, dengan nilai relevan maksimum 250. |
Bahasa | Rasio pemain di server dengan bahasa yang sama dengan pemain yang bergabung |
Pemenuhan | Rasio pemain di server dibandingkan dengan kapasitas server. |
Histori Permainan | Perbedaan antara histori permainan rata-rata di server dan histori permainan pemain yang bergabung, dengan perbedaan relevan maksimum 4.6. |
Obrolan Suara | Rasio pemain di server dengan obrolan suara aktif. |
Usia
Sinyal numerik yang membandingkan usia rata-rata pemain di server dengan usia pemain yang bergabung.Sinyal ini memiliki perbedaan maksimum yang relevan 25.Skor sinyal terbalik terkait dengan perbedaan usia, artinya perbedaan usia yang lebih rendah memiliki skor lebih tinggi.
ageDifferenceSignalScore = 1 - min(25, ageDifference) / 25, whereageDifference = abs(avgServerAge - joiningPlayerAge)
Jenis Perangkat
Sinyal kategorik yang mengukur rasio pemain di server dengan jenis perangkat yang sama dengan pemain yang bergabung.Jenis perangkat termasuk: Komputer, perangkat seluler, tablet, konsol, dan perangkat VR.
deviceTypeSignalScore = (# players with same device as joining player) / (# players on the server)
Rakan
Pemain yang disukai adalah pemain yang berteman dengan pemain yang bergabung atau yang berbagi alamat IP yang sama dengan pemain yang bergabung.Sinyal Teman adalah sinyal kategorik dengan skor 1 saat ada pemain terfavorit di server dan skor 0 saat tidak ada pemain terfavorit di server.
friendsSignalScore = hasFriends ? 1 : 0
Sinyal Teman juga dapat dianggap sebagai sinyal numerik dengan nilai maksimum yang relevan 1.
friendsSignalScore = min(# preferred players in server, 1) / 1
Bahasa
Sinyal kategorik yang mengukur rasio pemain di server yang membagi pengaturan bahasa yang sama dengan pemain yang bergabung.
languageSignalScore = (# players with same language setting as joining player) / (# players on the server)
Kelambatan
Sinyal numerik yang mengukur waktu ping yang diperkirakan dalam milidetik pemain bergabung jika mereka bermain di server.Sinyal ini memiliki nilai relevan maksimum 250 milidetik.Skor sinyal terbalik terkait dengan ping, artinya nilai ping yang lebih rendah memiliki skor lebih tinggi.
latencySignalScore = 1 - min(250, estimatedPingMs) / 250
Pendudukan
Sinyal numerik yang mengukur rasio pemain di server ke kapasitas server.
occupancySignalScore = (# players in server) / serverCapacity
Sejarah Bermain
Nilai atribut Histori Bermain adalah nomor log-10 menit yang dimainkan pemain di alam semesta dalam 28 hari terakhir.Sinyal angka ini membandingkan nilai Histori Permainan rata-rata log-10 pemain di server dengan nilai Histori Permainan pemain yang bergabung.Sinyal ini memiliki perbedaan maksimum yang relevan 4.6.Skor sinyal terbalik terkait dengan perbedaan histori permainan, artinya perbedaan histori permainan yang lebih rendah memiliki skor lebih tinggi.
playHistorySignalScore = 1 - min(4.6, playHistoryDifference / 4.6), whereplayHistoryDifference = abs(avgServerPlayHistory - joiningPlayerPlayHistory)
Obrolan chat
Pemain dapat memiliki obrolan suara diaktifkan atau dinonaktifkan.Sinyal Obrolan Suara adalah sinyal kategorik yang mengukur rasio pemain dengan pengaturan obrolan suara yang sama dengan pemain yang bergabung dengan jumlah pemain di server.
Jika suatu tempat memiliki obrolan suara dinonaktifkan, berat sinyal obrolan suara adalah 0.
voiceChatSignalScore = (# players with same voice chat setting as joining player) / (# players on the server)
Atribut khusus
Atribut khusus memberikan akses sinyal khusus ke data pemain dan server.Untuk informasi lebih lanjut tentang membuat atribut khusus Anda sendiri, lihat Buat atribut khusus.Untuk informasi lebih lanjut tentang atribut Roblox yang ada, lihat atribut yang ada.
Atribut | Fituristik |
---|---|
Pemain | Data pemain permanen yang bertahan di penyimpanan data, seperti tingkat pemain atau skor di dalam pengalaman Dimanajemen menggunakan API DataStore |
Pelayan | Tidak bertahan dan hanya berlangsung selama server aktif Data khusus server seperti tingkat server atau mode permainan Diatur menggunakan API MatchmakingService |
Contoh atribut pemain
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
Contoh atribut server
local MatchmakingService = game::GetService("MatchmakingService")local RunService = game:GetService("RunService")if RunService:IsStudio() then-- Menyiapkan atribut awal dan skema untuk pengujianMatchmakingService:InitializeServerAttributesForStudio({Level = "Advanced",Elo = 123.456,TrainingMode = true})end-- Ambil atribut Tingkatlocal currentLevel, error = MatchmakingService:GetServerAttribute("Level")if error thenprint(error)elseprint("Current level: " .. currentLevel)end-- Memperbarui nilai atribut Tingkat ke Lanjutanlocal 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
Sinyal khusus
Sinyal khusus dibuat dan didefinisikan oleh Anda dan dapat bersifat numerik atau kategorik:
- Sinyal numerik adalah angka.Mereka membandingkan perbedaan antara atribut pemain bergabung dan nilai agregat server, dengan perbedaan yang lebih besar menurunkan atau meningkatkan skor.Sebagai contoh, semakin dekat tingkat keterampilan pemain dengan tingkat keterampilan rata-rata server, semakin tinggi skor sinyal numerik.Skor ini kemudian dikalikan dengan berat sinyal.
- Sinyal kategorik adalah string atau boolean.Mereka didasarkan pada seberapa umum atribut pemain bergabung dibandingkan dengan pemain lain di server.Sebagai contoh, jika persentase tinggi pemain di dalam server memiliki bahasa preferensial yang sama dengan pemain yang bergabung, skor meningkat.Skor ini kemudian juga dikalikan dengan berat sinyal.
Untuk informasi lebih lanjut tentang membuat sinyal khusus Anda sendiri, lihat Buat sinyal khusus.Untuk informasi lebih lanjut tentang sinyal Roblox yang ada, lihat Sinyal yang ada.
Pemain numerik
Bergabung dengan pemain
Mengurangi perbedaan antara atribut pemain rata-rata server dan atribut pemain bergabung.Perbedaan di luar 1000 memberikan skor sinyal 0.
Bergabung dengan formula pemain untuk sinyal numerik pemain
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
Bergabung dengan contoh pemain untuk sinyal numerik pemain
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
Nilai konstan
Mengurangi perbedaan antara atribut pemain rata-rata server dan nilai konstan 500.Perbedaan di luar 1000 memberikan skor sinyal 0.
Formula nilai konstan untuk sinyal numerik pemain
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
Contoh nilai konstan untuk sinyal numerik pemain
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)
Pemain kategorik
Klusterisasi
Maksimalisasi rasio pemain di server yang memiliki atribut yang sama dengan atribut pemain yang bergabung.
Formula klusterisasi untuk sinyal kategoris pemain
local score = num_players_same_{attribute_name} / occupancyreturn score
Contoh kluster untuk sinyal kategoris pemain
local num_players_same_Guild = 15local occupancy = 19local score = num_players_same_Guild / occupancyreturn score
Diversifikasi
Maksimalisasi rasio pemain di server yang memiliki atribut berbeda dari atribut pemain yang bergabung.
Mengdiversifikasi formula untuk sinyal kategoris pemain
local score = num_players_same_{attribute_name} / occupancyreturn 1 - score
Contoh diversifikasi untuk sinyal kategoris pemain
local num_players_same_RpgClass = 15local occupancy = 19local score = num_players_same_RpgClass / occupancyreturn score
Server angka
Bergabung dengan pemain
Mengurangi perbedaan antara atribut server dan atribut pemain bergabung. Perbedaan di luar 1000 mengembalikan skor sinyal 0.
Bergabung dengan formula pemain untuk sinyal numerik server
local diff = math.abs(server_{attribute_name} - joining_player_{attribute_name})local score = 1 - math.min(diff / max_relevant_difference, 1)return score
Bergabung dengan contoh pemain untuk sinyal numerik pemain
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)
Nilai konstan
Mengurangi perbedaan antara nilai atribut server dan nilai konstan. Perbedaan di luar nilai konstan ini mengembalikan skor sinyal 0.
Formula nilai konstan untuk sinyal numerik server
local diff = math.abs(server_{attribute_name} - constant_value)local score = math.min(diff / max_relevant_difference, 1)return score
Contoh nilai konstan untuk sinyal numerik server
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)
Server kategorik
Bandingkan dengan bergabung dengan pemain
Skor adalah 1 ketika nilai atribut server (misalnya, Mode Permainan) sama dengan nilai atribut pemain (misalnya, Mode Permainan Favorit).Jika tidak, skor sinyal adalah 0.
Bergabung dengan formula pemain untuk sinyal kategoris server
if server_{attribute_name} = joining_player_{attribute_name} thenreturn 1elsereturn 0end
Bergabung dengan contoh pemain untuk sinyal kategoris server
local server_GameMode = "Survival"local joining_player_GameMode = "Survival"if server_GameMode = joining_player_GameMode thenreturn 1elsereturn 0end
Bandingkan dengan nilai konstan
Skor adalah 1 ketika nilai atribut server sama dengan nilai konstan dari benar. Jika tidak, skor sinyal adalah 0.
Formula nilai konstan untuk sinyal kategoris server
if server_{attribute_name} = constant_value thenreturn 1elsereturn 0end
Contoh nilai konstan untuk sinyal kategoris server
local server_GameNotStarted = trueif server_GameNotStarted = true thenreturn 1elsereturn 0end