屬性與信號

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

現有屬性

默認的 Roblox 比賽配置使用基於現有屬性的信號,例如玩家位置、年齡組和延遲。

要使用比賽中 Roblox 未自動包含在其默認配置中的數據,您需要創建 自定義屬性自定義信號

屬性類型描述
估計玩家延遲數值型服務器中玩家的估計延遲。
有朋友類別型服務器是否有朋友或與加入玩家有相同 IP 地址的其他玩家。
語音聊天是否啟用類別型玩家是否啟用了語音聊天。
玩家年齡數值型玩家的年齡。
玩家設備類型類別型玩家的設備類型。可以是移動設備、計算機、平板電腦、控制台或 VR 設備。
玩家語言類別型玩家的語言。
玩家遊玩歷史數值型玩家在過去28天內在一個宇宙中玩耍的以10為底的分鐘數。
服務器佔用率數值型服務器中的玩家數量。
玩家文字聊天組類別型玩家的文字聊天組,在該組中他們可以一起進行文字聊天。

現有信號

以下是根據 Roblox 屬性衍生的由 Roblox 定義的信號:

信號描述
年齡服務器中的玩家的平均年齡與加入玩家的年齡之間的差異,最大相關差異為25。
設備類型服務器中具有與加入玩家相同的設備類型的玩家的比例。
朋友服務器中與加入玩家為朋友或與加入玩家共享 IP 地址的人數。如果有首選玩家則為1,否則為0。
延遲服務器的估計玩家延遲,最大相關值為250。
語言服務器中與加入玩家語言相同的玩家比例
佔用率服務器中的玩家數量與服務器容量的比例。
遊玩歷史服務器中的平均遊玩歷史與加入玩家的遊玩歷史之間的差異,最大相關差異為4.6。
語音聊天服務器中啟用語音聊天的玩家比例。
文字聊天服務器中能夠與加入玩家一起進行文字聊天的玩家的比例。

年齡

一個數值型信號,將服務器中玩家的平均年齡與加入玩家的年齡進行比較。這個信號的最大相關差異為25。信號分數與年齡差異成反比,即年齡差異越小,分數越高。

ageDifferenceSignalScore=1min(25,ageDifference)/25\text{ageDifferenceSignalScore} = 1 - \min(25, \text{ageDifference}) / 25

其中

ageDifference=avgServerAgejoiningPlayerAge\text{ageDifference} = |\text{avgServerAge} - \text{joiningPlayerAge}|

設備類型

一個類別型信號,用於衡量服務器中與加入玩家設備類型相同的玩家的比率。設備類型包括:計算機、移動設備、平板電腦、控制台和 VR 設備。

deviceTypeSignalScore=# players with same device as joining player/# players on the server\text{deviceTypeSignalScore} = \text{\# players with same device as joining player} / \text{\# players on the server}

朋友

首選玩家是與加入玩家為朋友或與加入玩家共享相同 IP 地址的玩家。朋友信號是一個類別型信號,當服務器中存在首選玩家時其分數為1,當服務器中不存在首選玩家時其分數為0。

friendsSignalScore=hasFriends ? 1:0\text{friendsSignalScore} = \text{hasFriends} \ {?} \ 1 : 0

朋友信號也可以被視為一個數值型信號,最大相關值為1。

friendsSignalScore=min(# preferred players in server,1)/1\text{friendsSignalScore} = \min(\text{\# preferred players in server}, 1) / 1

語言

一個類別型信號,用於衡量服務器中與加入玩家語言設置相同的玩家的比例。

languageSignalScore=# players with same language setting as joining player/# players on the server\text{languageSignalScore} = \text{\# players with same language setting as joining player} / \text{\# players on the server}

延遲

一個數值型信號,用於衡量如果加入玩家在服務器上遊玩時的預估延遲時間(以毫秒計)。這個信號的最大相關值為250毫秒。信號分數與延遲成反比,即延遲值越低,分數越高。

latencySignalScore=1min(250,estimatedPingMs)/250\text{latencySignalScore} = 1 - \min(250, \text{estimatedPingMs}) / 250

佔用率

一個數值型信號,用於衡量服務器中的玩家數量與服務器容量的比率。

occupancySignalScore=# players in server/serverCapacity\text{occupancySignalScore} = \text{\# players in server} / \text{serverCapacity}

遊玩歷史

遊玩歷史屬性值為玩家在過去28天內在一個宇宙中遊玩的以10為底的分鐘數。這個數值型信號將服務器中玩家的平均以10為底的遊玩歷史值與加入玩家的遊玩歷史值進行比較。這個信號的最大相關差異為4.6。信號分數與遊玩歷史差異成反比,即遊玩歷史差異越小,分數越高。

playHistorySignalScore=1min(4.6,playHistoryDifference/4.6)\text{playHistorySignalScore} = 1 - \min(4.6, \text{playHistoryDifference} / 4.6), 其中

playHistoryDifference=avgServerPlayHistoryjoiningPlayerPlayHistory\text{playHistoryDifference} = |\text{avgServerPlayHistory} - \text{joiningPlayerPlayHistory}|

語音聊天

玩家可以啟用或禁用語音聊天。語音聊天信號是一個類別型信號,測量具有與加入玩家相同的語音聊天設置的玩家與服務器上玩家的比率。

如果一個地點禁用了語音聊天,則語音聊天信號的權重為0。

voiceChatSignalScore=# players with same voice chat setting as joining player/# players on the server\text{voiceChatSignalScore} = \text{\# players with same voice chat setting as joining player} / \text{\# players on the server}

文字聊天

一個類別型信號,用於衡量服務器中能夠與加入玩家一起進行文字聊天的玩家的比例。

textChatSignalScore=# players can text with the joining player in common /# players on the server\text{textChatSignalScore} = \text{\# players can text with the joining player in common } / \text{\# players on the server}

自定義屬性

自定義屬性允許自定義信號訪問玩家和服務器數據。詳細了解創建自己的自定義屬性,請參見 創建自定義屬性。有關現有 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
end
服務器屬性示例

local 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 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 = "生存"
local joining_player_GameMode = "生存"
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
©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。