现有属性
默认的 Roblox 匹配配置使用基于现有属性的信号,如玩家位置、年龄段和延迟。
要使用 Roblox 在默认配置中没有自动包含的匹配数据,你需要创建 自定义属性 和 自定义信号。
| 属性 | 类型 | 描述 |
|---|---|---|
| 估计玩家延迟 | 数值 | 服务器中玩家的估计延迟。 |
| 有朋友 | 类别 | 服务器中是否有朋友或与加入玩家拥有相同 IP 地址的其他玩家。 |
| 是否启用语音聊天 | 类别 | 玩家是否启用了语音聊天。 |
| 玩家年龄 | 数值 | 玩家的年龄。 |
| 玩家设备类型 | 类别 | 玩家的设备类型。可以是移动设备、电脑、平板电脑、游戏主机或 VR 设备。 |
| 玩家语言 | 类别 | 玩家的语言。 |
| 玩家游戏历史 | 数值 | 玩家在过去 28 天内在某个宇宙中游戏的对数 (log-10) 分钟数。 |
| 服务器占用率 | 数值 | 服务器中的玩家数量。 |
| 玩家文本聊天组 | 类别 | 玩家的文本聊天组,在这里他们可以一起进行文本聊天。 |
现有信号
以下是基于 Roblox 属性派生的 Roblox 定义信号:
| 信号 | 描述 |
|---|---|
| 年龄 | 服务器中玩家的平均年龄与加入玩家的年龄之间的差异,最大相关差异为 25。 |
| 设备类型 | 服务器中与加入玩家相同设备类型的玩家比例。 |
| 朋友 | 与加入玩家是朋友的玩家人数或与加入玩家共享 IP 地址的玩家人数。若存在优先玩家,则为 1,否则为 0。 |
| 延迟 | 服务器的估计玩家延迟,最大相关值为 250。 |
| 语言 | 服务器中与加入玩家相同语言的玩家比例。 |
| 占用率 | 服务器中玩家与服务器容量的比例。 |
| 游戏历史 | 服务器中玩家的平均游戏历史与加入玩家游戏历史之间的差异,最大相关差异为 4.6。 |
| 语音聊天 | 服务器中启用语音聊天的玩家比例。 |
| 文本聊天 | 服务器中可以与加入玩家共同进行文本聊天的玩家比例。 |
年龄
一个数值信号,比较服务器中玩家的平均年龄与加入玩家的年龄。该信号的最大相关差异为 25。信号分数与年龄差异成反比,即较小的年龄差异具有更高的分数。
其中
设备类型
一个类别信号,测量服务器中与加入玩家相同设备类型的玩家的比例。设备类型包括:电脑、移动设备、平板、游戏主机和 VR 设备。
朋友
优先玩家是与加入玩家是朋友的玩家或与加入玩家共享相同 IP 地址的玩家。朋友信号是一个类别信号,当服务器中存在优先玩家时得分为 1,当服务器中没有优先玩家时得分为 0。
朋友信号也可以视为一个数值信号,最大相关值为 1。
语言
一个类别信号,测量服务器中与加入玩家相同语言设置的玩家的比例。
延迟
一个数值信号,测量加入玩家在服务器上游戏时的估计延迟时间(以毫秒为单位)。该信号的最大相关值为 250 毫秒。信号分数与延迟成反比,即较小的延迟值具有更高的分数。
占用率
一个数值信号,测量服务器中玩家数量与服务器容量的比例。
游戏历史
游戏历史属性值是玩家在过去 28 天内在某个宇宙中游戏的对数 (log-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-- 检索等级属性local currentLevel, errorMessage = MatchmakingService:GetServerAttribute("Level")if errorMessage thenwarn(errorMessage)elseprint("当前等级: " .. currentLevel)end-- 将等级属性值更新为高级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
与常量值比较
当服务器的属性值等于常量值 true 时,分数为 1。否则,信号分数为 0。
服务器类别信号的常量值公式if server_{attribute_name} == constant_value thenreturn 1elsereturn 0end
服务器类别信号的常量值示例local server_GameNotStarted = trueif server_GameNotStarted == true thenreturn 1elsereturn 0end