Atribut yang ada
Konfigurasi pencocokan default Roblox menggunakan sinyal berdasarkan atribut yang ada seperti lokasi pemain, kelompok usia, dan latensi.
Untuk menggunakan data untuk pencocokan yang tidak secara otomatis disertakan dalam konfigurasi defaultnya, Anda perlu membuat atribut kustom dan sinyal kustom.
| Atribut | Tipe | Deskripsi |
|---|---|---|
| Perkiraan Latensi Pemain | Numerik | Perkiraan latensi seorang pemain di server. |
| Memiliki Teman | Kategorikal | Apakah server memiliki teman atau pemain lain dengan alamat IP yang sama dengan pemain yang bergabung. |
| Apakah Obrolan Suara Diaktifkan | Kategorikal | Apakah pemain memiliki obrolan suara yang diaktifkan. |
| 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 pemain. |
| Riwayat Permainan Pemain | Numerik | Jumlah log-10 menit yang telah dimainkan pemain dalam suatu universe dalam 28 hari terakhir. |
| Kepadatan Server | Numerik | Jumlah pemain di server. |
| Grup Obrolan Teks Pemain | Kategorikal | Grup obrolan teks pemain di mana mereka dapat obrolan teks bersama. |
Sinyal yang ada
Berikut adalah sinyal yang didefinisikan oleh Roblox yang diturunkan berdasarkan atribut Roblox:
| Sinyal | Deskripsi |
|---|---|
| Usia | Selisih antara usia rata-rata pemain di server dan usia pemain yang bergabung, dengan selisih maksimum yang relevan sebesar 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 ada. |
| Latensi | Delta ping pemain yang bergabung untuk server, yang merupakan perkiraan ping di atas ping terendah yang dapat dicapai pemain di pusat data terbaik yang dapat dijangkau, dengan nilai maksimum yang relevan sebesar 100. |
| Bahasa | Rasio pemain di server dengan bahasa yang sama dengan pemain yang bergabung. |
| Kepadatan | Rasio pemain di server dibandingkan dengan kapasitas server. |
| Riwayat Permainan | Selisih antara riwayat permainan rata-rata di server dan riwayat permainan pemain yang bergabung, dengan selisih maksimum yang relevan sebesar 4.6. |
| Obrolan Suara | Rasio pemain di server dengan obrolan suara yang diaktifkan. |
| Obrolan Teks | Rasio pemain di server yang dapat obrolan teks dengan pemain yang bergabung bersama. |
Usia
Sinyal numerik yang membandingkan usia rata-rata pemain di server dengan usia pemain yang bergabung. Sinyal ini memiliki selisih maksimum yang relevan sebesar 25. Skor sinyal berhubungan terbalik dengan selisih usia, yang berarti selisih 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 termasuk: Komputer, perangkat mobile, tablet, konsol, dan perangkat VR.
Teman
Pemain yang diutamakan adalah pemain yang merupakan teman 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 yang relevan sebesar 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 delta ping pemain yang bergabung dalam milidetik jika mereka bermain di server, yang merupakan perkiraan ping di atas ping terendah yang dapat dicapai pemain di pusat data terbaik yang dapat dijangkau. Sinyal ini memiliki nilai maksimum yang relevan sebesar 100 milidetik. Skor sinyal berhubungan terbalik dengan delta ping, yang berarti nilai delta ping yang lebih rendah memiliki skor yang lebih tinggi.
Kepadatan
Sinyal numerik yang mengukur rasio pemain di server terhadap kapasitas server.
Riwayat Permainan
Nilai atribut Riwayat Permainan adalah jumlah log-10 menit yang telah dimainkan pemain dalam suatu universe dalam 28 hari terakhir. Sinyal numerik ini membandingkan nilai riwayat permainan log-10 rata-rata pemain di server dengan nilai Riwayat Permainan pemain yang bergabung. Sinyal ini memiliki selisih maksimum yang relevan sebesar 4.6. Skor sinyal berhubungan terbalik dengan selisih riwayat permainan, yang berarti selisih riwayat permainan yang lebih rendah memiliki skor yang lebih tinggi.
, di mana
Obrolan Suara
Seorang pemain dapat memiliki obrolan suara yang diaktifkan atau dinonaktifkan. Sinyal Obrolan Suara adalah sinyal kategorikal yang mengukur rasio pemain dengan pengaturan obrolan suara yang sama dengan pemain yang bergabung terhadap jumlah pemain di server.
Jika suatu tempat memiliki obrolan suara dinonaktifkan, bobot sinyal Obrolan Suara adalah 0.
Obrolan Teks
Sinyal kategorikal yang mengukur rasio pemain di server yang dapat obrolan teks dengan pemain yang bergabung bersama.
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 bertahan di penyimpanan data, seperti level atau skor pemain di dalam permainan Dikelola menggunakan API DataStore |
| Server | Tidak persisten dan hanya bertahan selama server aktif Data spesifik server seperti level server atau mode permainan Dikelola menggunakan API MatchmakingService |
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
endlocal MatchmakingService = game:GetService("MatchmakingService")
local RunService = game:GetService("RunService")
if RunService:IsStudio() then
-- Menyiapkan atribut awal dan skema untuk pengujian
MatchmakingService:InitializeServerAttributesForStudio({
Level = "Lanjutan",
Elo = 123.456,
TrainingMode = true
})
end
-- Mengambil atribut Level
local currentLevel, errorMessage = MatchmakingService:GetServerAttribute("Level")
if errorMessage then
warn(errorMessage)
else
print("Level saat ini: " .. currentLevel)
end
-- Memperbarui nilai atribut Level menjadi Lanjutan
local success, errorMessage = MatchmakingService:SetServerAttribute("Level", "Lanjutan")
if not success then
warn("Gagal memperbarui atribut server [Level] menjadi [Lanjutan] karena kesalahan: " .. errorMessage)
else
print("Berhasil mengatur [Level] ke [Lanjutan]")
endSinyal Kustom
Sinyal kustom dibuat dan didefinisikan oleh Anda dan dapat berupa numerik atau kategorikal:
- Sinyal numerik adalah angka. Mereka membandingkan selisih antara atribut pemain yang bergabung dan nilai agregat server, dengan selisih yang lebih besar menurunkan atau meningkatkan skor. Misalnya, semakin dekat tingkat keterampilan seorang pemain dengan tingkat keterampilan rata-rata server, semakin tinggi skor sinyal numerik. 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 lain di server. Misalnya, jika persentase tinggi pemain di dalam server memiliki bahasa 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 selisih antara atribut pemain rata-rata server dan atribut pemain yang bergabung. Selisih di luar 1000 mengembalikan skor sinyal 0.
local diff = math.abs(server_{aggregation_function}_{attribute_name} - joining_player_{attribute_name})
local score = 1 - math.min(diff / max_relevant_difference, 1)
return scorelocal 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 scoreNilai konstan
Meminimalkan selisih antara atribut pemain rata-rata server dan nilai konstan 500. Selisih di luar 1000 mengembalikan skor sinyal 0.
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 scorelocal 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)Pemain kategorikal
Pengelompokan
Memaksimalkan rasio pemain di server yang memiliki atribut yang sama dengan atribut pemain yang bergabung.
local score = num_players_same_{attribute_name} / occupancy
return scorelocal num_players_same_Guild = 15
local occupancy = 19
local score = num_players_same_Guild / occupancy
return scoreDiversifikasi
Memaksimalkan rasio pemain di server yang memiliki atribut berbeda dari atribut pemain yang bergabung.
local score = num_players_same_{attribute_name} / occupancy
return 1 - scorelocal num_players_same_RpgClass = 15
local occupancy = 19
local score = num_players_same_RpgClass / occupancy
return scoreServer numerik
Pemain yang bergabung
Meminimalkan selisih antara atribut server dan atribut pemain yang bergabung. Selisih di luar 1000 mengembalikan skor sinyal 0.
local diff = math.abs(server_{attribute_name} - joining_player_{attribute_name})
local score = 1 - math.min(diff / max_relevant_difference, 1)
return scorelocal 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)Nilai konstan
Meminimalkan selisih antara nilai atribut server dan nilai konstan. Selisih di luar nilai konstan ini mengembalikan skor sinyal 0.
local diff = math.abs(server_{attribute_name} - constant_value)
local score = math.min(diff / max_relevant_difference, 1)
return scorelocal 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)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 Diutamakan). Jika tidak, skor sinyal adalah 0.
if server_{attribute_name} == joining_player_{attribute_name} then
return 1
else
return 0
endlocal server_GameMode = "Survival"
local joining_player_GameMode = "Survival"
if server_GameMode == joining_player_GameMode then
return 1
else
return 0
endBandingkan dengan nilai konstan
Skor adalah 1 ketika nilai atribut server sama dengan nilai konstan true. Jika tidak, skor sinyal adalah 0.
if server_{attribute_name} == constant_value then
return 1
else
return 0
endlocal server_GameNotStarted = true
if server_GameNotStarted == true then
return 1
else
return 0
end