現有屬性
默認的 Roblox 配對配置使用基於現有屬性的信號,例如玩家位置、年齡組和延遲。
要使用 Roblox 在其默認配置中未自動包含的配對數據,您需要創建 自定義屬性 和 自定義信號。
| 屬性 | 類型 | 描述 |
|---|---|---|
| 估計玩家延遲 | 數值型 | 伺服器中玩家的估計延遲。 |
| 有朋友 | 類別型 | 伺服器中是否有朋友或與加入玩家同一 IP 地址的其他玩家。 |
| 語音聊天是否啟用 | 類別型 | 玩家是否啟用了語音聊天。 |
| 玩家年齡 | 數值型 | 玩家的年齡。 |
| 玩家設備類型 | 類別型 | 玩家的設備類型。可以是移動設備、計算機、平板電腦、控制台或 VR 設備。 |
| 玩家語言 | 類別型 | 玩家的語言。 |
| 玩家遊玩歷史 | 數值型 | 玩家在過去 28 天內在一個宇宙中遊玩的分鐘數的以 10 為底的對數。 |
| 伺服器佔用率 | 數值型 | 伺服器中的玩家數量。 |
| 玩家文本聊天組 | 類別型 | 玩家的文本聊天組,玩家可以在其中進行文本聊天。 |
現有信號
以下是基於 Roblox 屬性派生的 Roblox 定義信號:
| 信號 | 描述 |
|---|---|
| 年齡 | 伺服器中玩家的平均年齡與加入玩家年齡之間的差異,最大相關差異為 25。 |
| 設備類型 | 伺服器中與加入玩家相同設備類型的玩家比例。 |
| 朋友 | 伺服器中與加入玩家是朋友或與加入玩家共享 IP 地址的人數。如果有首選玩家則為 1,否則為 0。 |
| 延遲 | 加入玩家在伺服器的 delta ping,這是玩家在其最佳可達數據中心上能夠達到的最低 ping 之上的估計 ping,最大相關值為 100。 |
| 語言 | 伺服器中與加入玩家相同語言的玩家比例。 |
| 佔用率 | 伺服器中玩家數量與伺服器容量的比例。 |
| 遊玩歷史 | 伺服器中平均遊玩歷史與加入玩家的遊玩歷史之間的差異,最大相關差異為 4.6。 |
| 語音聊天 | 伺服器中啟用語音聊天的玩家比例。 |
| 文本聊天 | 伺服器中可以與加入玩家一起進行文本聊天的玩家比例。 |
年齡
一個數值信號,將伺服器上玩家的平均年齡與加入玩家的年齡進行比較。此信號的最大相關差異為 25。信號分數與年齡差異成反比,這意味著年齡差異越小,分數越高。
其中
設備類型
一個類別信號,測量伺服器中與加入玩家相同設備類型的玩家比例。設備類型包括:計算機、移動設備、平板電腦、控制台和 VR 設備。
朋友
首選玩家是與加入玩家是朋友或與加入玩家共享相同 IP 地址的玩家。朋友信號是一個類別信號,當伺服器中有首選玩家時分數為 1,當伺服器中沒有首選玩家時分數為 0。
朋友信號也可以被視為一個數值信號,最大相關值為 1。
語言
一個類別信號,測量伺服器中與加入玩家共享相同語言設置的玩家比例。
延遲
一個數值信號,測量加入玩家在伺服器上遊玩時的 delta ping(以毫秒為單位),這是玩家在其最佳可達數據中心上能夠達到的最低 ping 之上的估計 ping。此信號的最大相關值為 100 毫秒。信號分數與 delta ping 成反比,這意味著較低的 delta ping 值具有較高的分數。
佔用率
一個數值信號,測量伺服器中玩家數量與伺服器容量的比例。
遊玩歷史
遊玩歷史屬性值是玩家在過去 28 天內在一個宇宙中遊玩的分鐘數的以 10 為底的對數。此數值信號將伺服器中玩家的平均以 10 為底的遊玩歷史值與加入玩家的遊玩歷史值進行比較。此信號的最大相關差異為 4.6。信號分數與遊玩歷史差異成反比,這意味著遊玩歷史差異越小,分數越高。
,其中
語音聊天
玩家可以啟用或禁用語音聊天。語音聊天信號是一個類別信號,測量與加入玩家相同語音聊天設置的玩家比例與伺服器中玩家的數量。
如果一個地方禁用了語音聊天,則語音聊天信號的權重為 0。
文本聊天
一個類別信號,測量伺服器中可以與加入玩家一起進行文本聊天的玩家比例。
自定義屬性
自定義屬性使自定義信號可以訪問玩家和伺服器數據。要了解有關創建自定義屬性的更多信息,請參見 創建自定義屬性。要了解有關現有 Roblox 屬性的更多信息,請參見 現有屬性。
| 屬性 | 特徵 |
|---|---|
| 玩家 | 持久性 在數據存儲中持久化的自定義玩家數據,例如玩家在遊戲中的等級或分數 使用 DataStore API 管理 |
| 伺服器 | 不持久,僅在伺服器活動期間存在 伺服器特定數據,例如伺服器等級或遊戲模式 使用 MatchmakingService API 管理 |
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
-- 設置測試的初始屬性和架構
MatchmakingService:InitializeServerAttributesForStudio({
Level = "進階",
Elo = 123.456,
TrainingMode = true
})
end
-- 獲取 Level 屬性
local currentLevel, errorMessage = MatchmakingService:GetServerAttribute("Level")
if errorMessage then
warn(errorMessage)
else
print("當前等級: " .. currentLevel)
end
-- 將 Level 屬性值更新為進階
local success, errorMessage = MatchmakingService:SetServerAttribute("Level", "進階")
if not success then
warn("無法將伺服器屬性 [Level] 更新為 [進階],錯誤: " .. errorMessage)
else
print("成功將 [Level] 設置為 [進階]")
end自定義信號
自定義信號由您創建和定義,可以是數值型或類別型:
- 數值信號是數字。它們比較加入玩家的屬性與伺服器的聚合值之間的差異,較大的差異會降低或增加分數。例如,玩家的技能水平越接近伺服器的平均技能水平,數值信號的分數就越高。然後將此分數乘以信號的權重。
- 類別信號是字符串或布爾值。它們基於加入玩家的屬性與伺服器中其他玩家的比較。例如,如果伺服器中有很高比例的玩家與加入玩家有相同的首選語言,則分數會增加。這個分數也會乘以信號的權重。
要了解有關創建自定義信號的更多信息,請參見 創建自定義信號。要了解有關現有 Roblox 信號的更多信息,請參見 現有信號。
玩家數值
加入玩家
最小化伺服器的平均玩家屬性與加入玩家屬性之間的差異。超過 1000 的差異返回信號分數 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 score常數值
最小化伺服器的平均玩家屬性與常數值 500 之間的差異。超過 1000 的差異返回信號分數 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)玩家類別
聚類
最大化伺服器中擁有與加入玩家屬性相同屬性的玩家比例。
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 score多樣化
最大化伺服器中擁有與加入玩家屬性不同屬性的玩家比例。
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 score伺服器數值
加入玩家
最小化伺服器的屬性與加入玩家的屬性之間的差異。超過 1000 的差異返回信號分數 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)常數值
最小化伺服器的屬性值與常數值之間的差異。超過此常數值的差異返回信號分數 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)伺服器類別
與加入玩家比較
當伺服器的屬性值(例如,遊戲模式)等於玩家的屬性值(例如,首選遊戲模式)時,分數為 1。否則,信號分數為 0。
if server_{attribute_name} == joining_player_{attribute_name} then
return 1
else
return 0
endlocal server_GameMode = "生存"
local joining_player_GameMode = "生存"
if server_GameMode == joining_player_GameMode then
return 1
else
return 0
end與常數值比較
當伺服器的屬性值等於常數值 true 時,分數為 1。否則,信號分數為 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