現有屬性
默認的 Roblox 比賽配置使用基於現有屬性的信號,例如玩家位置、年齡組和延遲。
要使用比賽中 Roblox 未自動包含在其默認配置中的數據,您需要創建 自定義屬性 和 自定義信號。
| 屬性 | 類型 | 描述 |
|---|---|---|
| 估計玩家延遲 | 數值型 | 服務器中玩家的估計延遲。 |
| 有朋友 | 類別型 | 服務器是否有朋友或與加入玩家有相同 IP 地址的其他玩家。 |
| 語音聊天是否啟用 | 類別型 | 玩家是否啟用了語音聊天。 |
| 玩家年齡 | 數值型 | 玩家的年齡。 |
| 玩家設備類型 | 類別型 | 玩家的設備類型。可以是移動設備、計算機、平板電腦、控制台或 VR 設備。 |
| 玩家語言 | 類別型 | 玩家的語言。 |
| 玩家遊玩歷史 | 數值型 | 玩家在過去28天內在一個宇宙中玩耍的以10為底的分鐘數。 |
| 服務器佔用率 | 數值型 | 服務器中的玩家數量。 |
| 玩家文字聊天組 | 類別型 | 玩家的文字聊天組,在該組中他們可以一起進行文字聊天。 |
現有信號
以下是根據 Roblox 屬性衍生的由 Roblox 定義的信號:
| 信號 | 描述 |
|---|---|
| 年齡 | 服務器中的玩家的平均年齡與加入玩家的年齡之間的差異,最大相關差異為25。 |
| 設備類型 | 服務器中具有與加入玩家相同的設備類型的玩家的比例。 |
| 朋友 | 服務器中與加入玩家為朋友或與加入玩家共享 IP 地址的人數。如果有首選玩家則為1,否則為0。 |
| 延遲 | 服務器的估計玩家延遲,最大相關值為250。 |
| 語言 | 服務器中與加入玩家語言相同的玩家比例 |
| 佔用率 | 服務器中的玩家數量與服務器容量的比例。 |
| 遊玩歷史 | 服務器中的平均遊玩歷史與加入玩家的遊玩歷史之間的差異,最大相關差異為4.6。 |
| 語音聊天 | 服務器中啟用語音聊天的玩家比例。 |
| 文字聊天 | 服務器中能夠與加入玩家一起進行文字聊天的玩家的比例。 |
年齡
一個數值型信號,將服務器中玩家的平均年齡與加入玩家的年齡進行比較。這個信號的最大相關差異為25。信號分數與年齡差異成反比,即年齡差異越小,分數越高。
其中
設備類型
一個類別型信號,用於衡量服務器中與加入玩家設備類型相同的玩家的比率。設備類型包括:計算機、移動設備、平板電腦、控制台和 VR 設備。
朋友
首選玩家是與加入玩家為朋友或與加入玩家共享相同 IP 地址的玩家。朋友信號是一個類別型信號,當服務器中存在首選玩家時其分數為1,當服務器中不存在首選玩家時其分數為0。
朋友信號也可以被視為一個數值型信號,最大相關值為1。
語言
一個類別型信號,用於衡量服務器中與加入玩家語言設置相同的玩家的比例。
延遲
一個數值型信號,用於衡量如果加入玩家在服務器上遊玩時的預估延遲時間(以毫秒計)。這個信號的最大相關值為250毫秒。信號分數與延遲成反比,即延遲值越低,分數越高。
佔用率
一個數值型信號,用於衡量服務器中的玩家數量與服務器容量的比率。
遊玩歷史
遊玩歷史屬性值為玩家在過去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
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 thenwarn(errorMessage)elseprint("當前等級: " .. currentLevel)end-- 更新 Level 屬性值為進階local success, errorMessage = MatchmakingService:SetServerAttribute("Level", "進階")if not success thenwarn("無法將服務器屬性 [Level] 更新為 [進階],錯誤: " .. errorMessage)elseprint("成功將 [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 = 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
常量值
最小化服務器中玩家屬性與常量值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 = 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)
玩家類別型
聚類
最大化服務器中擁有與加入玩家相同屬性的玩家的比例。
聚類的玩家類別型信號公式local score = num_players_same_{attribute_name} / occupancyreturn score
聚類的玩家類別型信號示例local num_players_same_Guild = 15local occupancy = 19local score = num_players_same_Guild / occupancyreturn score
多樣化
最大化服務器中擁有與加入玩家屬性不同的玩家的比例。
多樣化的玩家類別型信號公式local score = num_players_same_{attribute_name} / occupancyreturn 1 - score
多樣化的玩家類別型信號示例local num_players_same_RpgClass = 15local occupancy = 19local score = num_players_same_RpgClass / occupancyreturn 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 = 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)
常量值
最小化服務器屬性值與常量值之間的差距。超過此常量值的差距將返回信號分數為0。
常量值的服務器數值型信號公式local diff = math.abs(server_{attribute_name} - constant_value)local score = math.min(diff / max_relevant_difference, 1)return score
常量值的服務器數值型信號示例local 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)
服務器類別型
與加入玩家進行比較
當服務器的屬性值(例如,遊戲模式)等於玩家的屬性值(例如,首選遊戲模式)時,分數為1。否則信號分數為0。
加入玩家的服務器類別型信號公式if server_{attribute_name} == joining_player_{attribute_name} thenreturn 1elsereturn 0end
加入玩家的服務器類別型信號示例local server_GameMode = "生存"local joining_player_GameMode = "生存"if server_GameMode == joining_player_GameMode thenreturn 1elsereturn 0end
與常量值進行比較
當服務器的屬性值等於常量值為真時,分數為1。否則信號分數為0。
常量值的服務器類別型信號公式if server_{attribute_name} == constant_value thenreturn 1elsereturn 0end
常量值的服務器類別型信號示例local server_GameNotStarted = trueif server_GameNotStarted == true thenreturn 1elsereturn 0end