Atribut yang ada
Konfigurasi pencocokan default Roblox menggunakan sinyal berdasarkan atribut yang ada seperti lokasi pemain, kelompok umur, dan latensi.
Untuk menggunakan data untuk pencocokan yang tidak secara otomatis disertakan dalam konfigurasi default Roblox, Anda perlu membuat atribut kustom dan sinyal kustom.
| Atribut | Tipe | Deskripsi |
|---|---|---|
| Perkiraan Latensi Pemain | Numerik | Latensi yang diperkirakan dari seorang pemain di dalam server. |
| Memiliki Teman | Kategorikal | Apakah server memiliki teman atau pemain lain dengan alamat IP yang sama dengan pemain yang bergabung. |
| Apakah Suara Chat Diaktifkan | Kategorikal | Apakah seorang pemain telah mengaktifkan obrolan suara. |
| Usia Pemain | Numerik | Usia pemain. |
| Tipe Perangkat Pemain | Kategorikal | Tipe perangkat pemain. Bisa berupa perangkat mobile, komputer, tablet, konsol, atau perangkat VR. |
| Bahasa Pemain | Kategorikal | Bahasa yang digunakan oleh pemain. |
| Riwayat Bermain Pemain | Numerik | Log-10 jumlah menit seorang pemain telah bermain di suatu universe dalam 28 hari terakhir. |
| Kepadatan Server | Numerik | Jumlah pemain di dalam server. |
| Grup Obrolan Teks Pemain | Kategorikal | Grup obrolan teks pemain di mana mereka dapat berkomunikasi satu sama lain. |
Sinyal yang ada
Berikut adalah sinyal yang didefinisikan oleh Roblox yang diperoleh berdasarkan atribut Roblox:
| Sinyal | Deskripsi |
|---|---|
| Usia | Perbedaan antara rata-rata usia pemain di server dan usia pemain yang bergabung, dengan perbedaan maksimum relevan 25. |
| Tipe Perangkat | Rasio pemain di server dengan tipe perangkat yang sama dengan pemain yang bergabung. |
| Teman | Jumlah orang di server yang merupakan teman pemain yang bergabung atau yang berbagi alamat IP dengan pemain yang bergabung. 1 jika ada pemain yang diutamakan, 0 jika tidak. |
| Latensi | Latensi pemain yang diperkirakan untuk sebuah server, dengan nilai maksimum relevan 250. |
| Bahasa | Rasio pemain di server dengan bahasa yang sama dengan pemain yang bergabung |
| Kepadatan | Rasio pemain di server dibandingkan dengan kapasitas server. |
| Riwayat Bermain | Perbedaan antara rata-rata nilai Riwayat Bermain di server dan nilai Riwayat Bermain pemain yang bergabung, dengan perbedaan maksimum relevan 4.6. |
| Obrolan Suara | Rasio pemain di server dengan obrolan suara yang diaktifkan. |
| Obrolan Teks | Rasio pemain di server yang dapat berkomunikasi melalui obrolan teks dengan pemain yang bergabung. |
Usia
Sinyal numerik yang membandingkan rata-rata usia pemain di server dengan usia pemain yang bergabung. Sinyal ini memiliki perbedaan relevan maksimum 25. Skor sinyal berkorelasi terbalik dengan perbedaan usia, yang berarti perbedaan usia yang lebih rendah memiliki skor yang lebih tinggi.
di mana
Tipe Perangkat
Sinyal kategorikal yang mengukur rasio pemain di server dengan tipe perangkat yang sama dengan pemain yang bergabung. Tipe perangkat mencakup: Komputer, perangkat mobile, tablet, konsol, dan perangkat VR.
Teman
Pemain yang diutamakan adalah pemain yang merupakan teman dengan pemain yang bergabung atau yang berbagi alamat IP yang sama dengan pemain yang bergabung. Sinyal Teman adalah sinyal kategorikal dengan skor 1 ketika ada pemain yang diutamakan di server dan skor 0 ketika tidak ada pemain yang diutamakan di server.
Sinyal Teman juga dapat dianggap sebagai sinyal numerik dengan nilai maksimum relevan 1.
Bahasa
Sinyal kategorikal yang mengukur rasio pemain di server yang memiliki pengaturan bahasa yang sama dengan pemain yang bergabung.
Latensi
Sinyal numerik yang mengukur waktu pings yang diperkirakan dalam milidetik dari pemain yang bergabung jika mereka bermain di server. Sinyal ini memiliki nilai maksimum relevan 250 milidetik. Skor sinyal berkorelasi terbalik dengan ping, yang berarti nilai ping yang lebih rendah memiliki skor yang lebih tinggi.
Kepadatan
Sinyal numerik yang mengukur rasio pemain di server terhadap kapasitas server.
Riwayat Bermain
Nilai atribut Riwayat Bermain adalah log-10 jumlah menit seorang pemain telah bermain di suatu universe dalam 28 hari terakhir. Sinyal numerik ini membandingkan nilai rata-rata log-10 Riwayat Bermain pemain di server dengan nilai Riwayat Bermain pemain yang bergabung. Sinyal ini memiliki perbedaan relevan maksimum 4.6. Skor sinyal berkorelasi terbalik dengan perbedaan riwayat bermain, yang berarti perbedaan riwayat bermain yang lebih rendah memiliki skor yang lebih tinggi.
, di mana
Obrolan Suara
Seorang pemain dapat mengaktifkan atau menonaktifkan obrolan suara. Sinyal Obrolan Suara adalah sinyal kategorikal yang mengukur rasio pemain dengan pengaturan obrolan suara yang sama seperti pemain yang bergabung terhadap jumlah pemain di server.
Jika suatu tempat memiliki obrolan suara yang dinonaktifkan, bobot Sinyal Obrolan Suara adalah 0.
Obrolan Teks
Sinyal kategorikal yang mengukur rasio pemain di server yang dapat berkomunikasi melalui obrolan teks dengan pemain yang bergabung secara bersamaan.
Atribut kustom
Atribut kustom memberikan akses sinyal kustom ke data pemain dan server. Untuk informasi lebih lanjut tentang cara membuat atribut kustom Anda sendiri, lihat Buat atribut kustom. Untuk informasi lebih lanjut tentang atribut Roblox yang ada, lihat Atribut yang ada.
| Atribut | Karakteristik |
|---|---|
| Pemain | Persisten Data pemain kustom yang persisten di data store, seperti level atau skor pemain di dalam permainan Dikelola menggunakan API DataStore |
| Server | Tidak persisten dan hanya berlangsung selama server aktif Data spesifik server seperti level server atau mode permainan Dikelola 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 serverlocal MatchmakingService = game:GetService("MatchmakingService")local RunService = game:GetService("RunService")if RunService:IsStudio() then-- Menyiapkan atribut awal dan skema untuk pengujianMatchmakingService:InitializeServerAttributesForStudio({Level = "Maju",Elo = 123.456,TrainingMode = true})end-- Mengambil atribut Levellocal currentLevel, errorMessage = MatchmakingService:GetServerAttribute("Level")if errorMessage thenwarn(errorMessage)elseprint("Level saat ini: " .. currentLevel)end-- Memperbarui nilai atribut Level menjadi Majulocal success, errorMessage = MatchmakingService:SetServerAttribute("Level", "Maju")if not success thenwarn("Gagal memperbarui atribut server [Level] menjadi [Maju] karena kesalahan: " .. errorMessage)elseprint("Berhasil mengatur [Level] ke [Maju]")end
Sinyal kustom
Sinyal kustom dibuat dan didefinisikan oleh Anda dan dapat bersifat numerik atau kategorikal:
- Sinyal numerik adalah angka. Mereka membandingkan perbedaan antara atribut pemain yang bergabung dan nilai agregat server, dengan perbedaan yang lebih besar mengurangi atau meningkatkan skor. Misalnya, semakin dekat tingkat keterampilan seorang pemain dengan tingkat keterampilan rata-rata server, semakin tinggi skor sinyal numerik tersebut. Skor ini kemudian dikalikan dengan bobot sinyal.
- Sinyal kategorikal adalah string atau boolean. Mereka didasarkan pada seberapa umum atribut pemain yang bergabung dibandingkan dengan pemain lainnya di server. Misalnya, jika persentase tinggi pemain di dalam server memiliki bahasa yang disukai yang sama dengan pemain yang bergabung, skor meningkat. Skor ini kemudian juga dikalikan dengan bobot sinyal.
Untuk informasi lebih lanjut tentang cara membuat sinyal kustom Anda sendiri, lihat Buat sinyal kustom. Untuk informasi lebih lanjut tentang sinyal Roblox yang ada, lihat Sinyal yang ada.
Pemain numerik
Pemain yang bergabung
Meminimalkan perbedaan antara atribut pemain rata-rata server dan atribut pemain yang bergabung. Perbedaan lebih dari 1000 mengembalikan skor sinyal 0.
Rumus pemain yang bergabung untuk sinyal numerik pemainlocal diff = math.abs(server_{aggregation_function}_{attribute_name} - joining_player_{attribute_name})local score = 1 - math.min(diff / max_relevant_difference, 1)return score
Contoh pemain yang bergabung untuk sinyal numerik pemainlocal 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 tetap
Meminimalkan perbedaan antara atribut pemain rata-rata server dan nilai tetap 500. Perbedaan lebih dari 1000 mengembalikan skor sinyal 0.
Rumus nilai tetap untuk sinyal numerik pemainlocal 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 tetap untuk sinyal numerik pemainlocal 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 kategorikal
Klusterisasi
Maksimalkan rasio pemain di server yang memiliki atribut yang sama dengan atribut pemain yang bergabung.
Rumus klusterisasi untuk sinyal kategorikal pemainlocal score = num_players_same_{attribute_name} / occupancyreturn score
Contoh klusterisasi untuk sinyal kategorikal pemainlocal num_players_same_Guild = 15local occupancy = 19local score = num_players_same_Guild / occupancyreturn score
Divestasi
Maksimalkan rasio pemain di server yang memiliki atribut yang berbeda dari atribut pemain yang bergabung.
Rumus divestasi untuk sinyal kategorikal pemainlocal score = num_players_same_{attribute_name} / occupancyreturn 1 - score
Contoh divestasi untuk sinyal kategorikal pemainlocal num_players_same_RpgClass = 15local occupancy = 19local score = num_players_same_RpgClass / occupancyreturn score
Server numerik
Pemain yang bergabung
Meminimalkan perbedaan antara atribut server dan atribut pemain yang bergabung. Perbedaan lebih dari 1000 mengembalikan skor sinyal 0.
Rumus pemain yang bergabung untuk sinyal numerik serverlocal diff = math.abs(server_{attribute_name} - joining_player_{attribute_name})local score = 1 - math.min(diff / max_relevant_difference, 1)return score
Contoh pemain yang bergabung untuk sinyal numerik serverlocal 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 tetap
Meminimalkan perbedaan antara nilai atribut server dan nilai tetap. Perbedaan lebih dari nilai tetap ini mengembalikan skor sinyal 0.
Rumus nilai tetap untuk sinyal numerik serverlocal diff = math.abs(server_{attribute_name} - constant_value)local score = math.min(diff / max_relevant_difference, 1)return score
Contoh nilai tetap untuk sinyal numerik serverlocal 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 kategorikal
Bandingkan dengan pemain yang bergabung
Skor adalah 1 ketika nilai atribut server (misalnya, Mode Permainan) sama dengan nilai atribut pemain (misalnya, Mode Permainan yang Disukai). Jika tidak, skor sinyalnya adalah 0.
Rumus pemain yang bergabung untuk sinyal kategorikal serverif server_{attribute_name} == joining_player_{attribute_name} thenreturn 1elsereturn 0end
Contoh pemain yang bergabung untuk sinyal kategorikal serverlocal server_GameMode = "Survival"local joining_player_GameMode = "Survival"if server_GameMode == joining_player_GameMode thenreturn 1elsereturn 0end
Bandingkan dengan nilai tetap
Skor adalah 1 ketika nilai atribut server sama dengan nilai tetap true. Jika tidak, skor sinyalnya adalah 0.
Rumus nilai tetap untuk sinyal kategorikal serverif server_{attribute_name} == constant_value thenreturn 1elsereturn 0end
Contoh nilai tetap untuk sinyal kategorikal serverlocal server_GameNotStarted = trueif server_GameNotStarted == true thenreturn 1elsereturn 0end