特性和訊號

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

現有特性

預設 Roblox 配對配置使用基於現有特性的信號來進行配對,例如玩家位置、年齡群組和延遲。

若要使用 Roblox 未自動包含在預設配置中的匹配資料,您需要創建 自訂特性自訂訊號

特性 類型 說明
估算玩家延遲時間 數字伺服器務器上玩家的預估延遲時間。
有朋友 類別化伺服器是否有朋友或同一個IP地址的其他玩家與加入玩家相同。
語音聊天已啟用 類別化玩家是否啟用了語音聊天。
玩家年齡 數字玩家的年齡。
玩家裝置類型 類別化玩家的裝置輸入。可以是手機、電腦、平板電腦、遊戲主機或 VR 裝置。
玩家語言 類別化玩家的語言。
玩家遊戲歷史記錄 數字玩家在過去 28 天內在宇宙中遊玩的時間(log-10)數量。
伺服器使用率 數字服務伺服器中的玩家數量。

現有信號

以下是基於 Roblox 特性定義的 Roblox 訊號:

訊號 說明
年齡 服務器中玩家的平均年齡和加入玩家的年齡之間的差異,最大相關差異為 25。
裝置類型 伺服器中與加入玩家相同裝置類型的玩家比率。
朋友 伺服器上與加入玩家為朋友或與加入玩家共享 IP 地址的人數。如果有首選玩家,則為 1;否則為 0。
延遲 伺服器的預估玩家延遲時間,最大相關值為 250。
語言 與加入玩家相同語言的伺服器中玩家比率
使用率 伺服器中玩家與伺服器容量的比率。
遊戲歷史 伺服器中的平均遊戲歷史與加入玩家的遊戲歷史之間的差異,最大相關差異為 4.6。
語音聊天 啟用語音聊天的伺服器中玩家比率。

年齡

一個數字信號,比較服務器上玩家的平均年齡與加入玩家的年齡。此信號的最大相關差異為 25。信號分數與年齡差相反,意味著年齡差小的分數更高。


ageDifferenceSignalScore = 1 - min(25, ageDifference) / 25, where
ageDifference = abs(avgServerAge - joiningPlayerAge)

裝置類型

一個類別信號,用於測量服務器上與加入玩家相同裝置類型的玩家比例。裝置類型包括:電腦、行動裝置、平板電腦、控制器和 VR 裝置。


deviceTypeSignalScore = (# players with same device as joining player) / (# players on the server)

好友

優選玩家是與加入玩家為朋友或與加入玩家共享相同 IP 地址的玩家。朋友信號是一個分類信號,當服務器上有首選玩家時,分數為 1;當服務伺服器上沒有首選玩家時,分數為 0。


friendsSignalScore = hasFriends ? 1 : 0

朋友信號也可以視為具有最大相關值為 1 的數字信號。


friendsSignalScore = min(# preferred players in server, 1) / 1

語言

一個分類信號,用於測量與加入玩家相同語言設定的服務器上的玩家比例。


languageSignalScore = (# players with same language setting as joining player) / (# players on the server)

延遲

一個數字信號,用於測量加入玩家的估計延遲時間,以秒為單位,如果他們在伺服器務器上播放。此信號的最大相關值為 250 毫秒。信號分數與彎徑相反,意味著彎徑值較低的分數較高。


latencySignalScore = 1 - min(250, estimatedPingMs) / 250

占用率

一個數字信號,用於測量伺服器上玩家數量與伺服器容量的比率。


occupancySignalScore = (# players in server) / serverCapacity

播放歷史

遊戲歷史屬性值是玩家在過去 28 天內在宇宙中遊玩的分鐘數字,即 log-10 數字。這個數字信號會將服務器上玩家的平均 log-10 遊戲歷史值與加入玩家的遊戲歷史值進行比較。此信號的最大相關差異為 4.6。信號分數與遊戲歷史差異相反,意味著低遊戲歷史差異有更高的分數。


playHistorySignalScore = 1 - min(4.6, playHistoryDifference / 4.6), where
playHistoryDifference = abs(avgServerPlayHistory - joiningPlayerPlayHistory)

語音聊天

玩家可以啟用或停用語音聊天。語音聊天訊號是一種類別訊號,用於測量與加入玩家相同的語音聊天設定的玩家數量與伺服器上玩家數量的比率。

如果地方有啟用語音聊天功能,語音聊天信號的重量為 0。


voiceChatSignalScore = (# players with same voice chat setting as joining player) / (# players on the server)

自訂特性

自訂特性提供給玩家和伺服器數據的訪問個人化信號。有關創建自己的自訂特性的更多信息,請參閱創建自訂特性。有關現有 Roblox 特性的更多資訊,請參閱 現有特性

特性 特性
玩家 永久 在資料儲存中持續存在的個人化玩家資料,例如玩家的等級或經驗內的分數 使用 DataStore 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
end
伺服器特性範例

local MatchmakingService = game::GetService("MatchmakingService")
local RunService = game:GetService("RunService")
if RunService:IsStudio() then
-- 設定初始屬性和資料庫結構以進行測試
MatchmakingService:InitializeServerAttributesForStudio(
{
Level = "Advanced",
Elo = 123.456,
TrainingMode = true
})
end
-- 取得等級特性
local currentLevel, error = MatchmakingService:GetServerAttribute("Level")
if error then
print(error)
else
print("Current level: " .. currentLevel)
end
-- 將等級特性值更新為高級
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

自訂訊號

自訂訊號由您創建和定義,可以是數字或類別:

  • 數字信號是數字。他們比較加入玩家的屬性與服務器的總值之間的差異,大差異會降低或提高分數。例如,玩家的技能等級與伺服器的平均技能等級越接近,數字信號的分數就越高。此分數然後乘以訊號的重量。
  • 類別信號是字串或布林。它們是根據加入玩家的特性與伺服器中其他玩家比較的多普度來決定的。例如,如果服務器內的玩家高達一定百分比使用與加入玩家相同的首選語言,分數將增加。此分數還會乘以訊號的重量。

有關創建自己的自訂訊號的更多資訊,請參閱創建自訂訊號。有關現有 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 score
加入玩家示例以獲得玩家數字信號

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
恆定值

最小化伺服器平均玩家屬性和恆定值 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 score
玩家數字信號的常數值示例

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)

玩家類別

集群化

最大化服務器上擁有與加入玩家擁有相同特性的玩家數量。

玩家類別信號的群集方式公式

local score = num_players_same_{attribute_name} / occupancy
return score
玩家類別信號的群集範例

local 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 - score
玩家類別信號多樣化範例

local 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 score
加入玩家示例以獲得玩家數字信號

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)
恆定值

最小化伺服器的特性值與恆定值之間的差異。超出此恆定值的差異返回信號分數為 0。

伺服器數字信號的恆定值方程式

local diff = math.abs(server_{attribute_name} - constant_value)
local score = math.min(diff / max_relevant_difference, 1)
return score
伺服器數字信號的恆定值範例

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)

伺服器類別

與加入玩家比較

當伺服器的特性值 (例如,遊戲模式) 與玩家的特性值 (例如,首選遊戲模式) 相等時,得分為 1。否則,信號分數為 0。

加入玩家配方以獲得服務器類別信號

if server_{attribute_name} = joining_player_{attribute_name} then
return 1
else
return 0
end
加入玩家示例以獲得服務器類別信號

local server_GameMode = "Survival"
local joining_player_GameMode = "Survival"
if server_GameMode = joining_player_GameMode then
return 1
else
return 0
end
與常量值比較

當伺服器的特性值與真實的常數值相等時,分數為 1;否則,信號分數為 0。

伺服器類別信號的恆定值方程式

if server_{attribute_name} = constant_value then
return 1
else
return 0
end
伺服器類別信號的恆定值範例

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