FlexMatch 规则语言 - Amazon GameLift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

FlexMatch 规则语言

为 FlexMatch 规则集编写规则时,使用下列属性表达式语法。

了解有关创建 FlexMatch 规则的更多信息:

规则类型

FlexMatch 支持以下规则类型。每个规则类型都需要一组属性,此处将对其进行介绍。

距离规则 (distance)

距离规则用于度量两个数字值之间的差值,例如技能级别之间的差距。例如,距离规则可能要求所有玩家都在两个技能级别内。

距离规则属性

  • measurements – 为其度量距离的玩家属性值;必须为数字值。

  • referenceValue – 用于对照潜在对战游戏度量距离的数字值。

  • minDistance/maxDistance – 为了成功进行对战游戏而允许的最大或最小距离值。

  • partyAggregation 处理具有多个玩家的票证的方法 (广告)。–有效选项是使用票证玩家的最小值 (min)、最大值 (max) 或平均值 (avg)。默认为 avg

比较规则 (comparison)

比较规则测量玩家属性值与另一个值。有两种类型的比较规则。第一个类型将属性值与提供的参考值进行比较。指定参考值和有效的比较操作。例如,规则可能要求匹配的玩家拥有 24 或更高的技能水平。第二种类型将比较团队中玩家的玩家属性值,或进行对战以确定所有玩家是否没有玩家具有相同的属性值。对于此类比较规则,请省略引用值并指定等于 (“=”) 或不等于 (“!=”) 操作。例如,规则可能要求对战游戏中的所有玩家选择相同的游戏地图,或要求团队中没有玩家选择相同的角色。

比较规则属性

  • measurements – 要比较的玩家属性值。

  • referenceValue – 用于对照潜在对战游戏评估测量值的值。

  • operation – 如何评估测量值。有效操作包括:<, <=, =, !=, >, >=

  • partyAggregation 处理具有多个玩家的票证的方法 (广告)。–有效选项是使用票证玩家的最小值 (min)、最大值 (max) 或平均值 (avg)。默认为 avg

收集规则 (collection)

集合规则评估玩家属性值的集合。一个集合可以包含多个玩家的属性值和/或采用集合格式 (字符串列表) 的一个玩家属性。例如,某个集合规则可能会查看玩家在团队中选择的角色,并且要求该团队具有至少一个特定角色。

收集规则属性

  • measurements – 要评估的玩家属性值的集合。属性值必须采用字符串列表形式。

  • referenceValue 值(或值集合),用于对照潜在对战游戏评估测量值。–

  • operation – 如何评估测量值集合。有效操作包括:

  • minCount/maxCount – 为了成功进行对战游戏而允许的最大或最小计数值。

  • partyAggregation 处理具有多个玩家的票证的方法 (广告)。–有效选项是使用票证玩家的 unionintersection 值。默认为 union

延迟规则 (latency)

延迟规则按区域评估玩家延迟报告 - 例如,规则可能要求匹配的玩家必须在低于最大限制的同一区域中具有延迟。这是大型对战游戏唯一允许的规则类型,而设置 maxLatency 是唯一允许的属性。

延迟规则属性

  • maxLatency – 区域的最高可接受延迟值。对于每个票证,忽略超过此延迟的所有区域。

  • maxDistance 每个票证的延迟与距离参考值之间的最大差值。–

  • distanceReference – 与 maxDistance 配合使用。 要对照成功对战游戏度量距离的数字值。对于延迟,此值是多个玩家的延迟值的聚合。有效选项为玩家延迟的最小值 (min) 或平均值 (avg)。(请参阅属性表达式部分。)

  • partyAggregation 处理具有多个玩家的票证的方法 (广告)。–有效选项是使用票证玩家的最小值 (min)、最大值 (max) 或平均值 (avg)。默认为 avg

距离排序规则 (distanceSort)

距离排序是一个显式排序选项,该选项指示对战构建器根据玩家属性对一批对战票证进行排序。距离排序规则根据与最旧票证的距离评估票证。

距离排序规则属性

  • sortDirection – 有关对战票证排序的说明。有效选项是 ascendingdescending

  • sortAttribute – 用作玩家排序依据的玩家属性。

  • mapKey – 如何对玩家的地图属性进行评估。有效选项包括:

    • minValue: 对于最旧的票证,找到具有最低值的密钥。

    • maxValue: 对于最旧的票证,找到具有最高值的密钥。

  • partyAggregation 用于处理具有多个玩家的票证的方法 (广告)。–有效选项是使用票证玩家的最小值 (min)、最大值 (max) 或平均值 (avg)。默认为 avg

绝对排序规则 (absoluteSort)

绝对排序是一个显式排序选项,该选项指示对战构建器根据玩家属性对一批对战票证进行排序。绝对排序根据其玩家属性是否与最旧的票证匹配来评估对战票证。

绝对排序规则属性

  • sortDirection – 有关对战票证排序的说明。有效选项是 ascendingdescending

  • sortAttribute – 用作玩家排序依据的玩家属性。

  • mapKey – 如何对玩家的地图属性进行评估。有效选项包括:

    • minValue: 对于最旧的票证,找到具有最低值的密钥。

    • maxValue: 对于最旧的票证,找到具有最高值的密钥。

  • partyAggregation 用于处理具有多个玩家的票证的方法 (广告)。–有效选项是使用票证玩家的最小值 (min)、最大值 (max) 或平均值 (avg)。默认为 avg

属性表达式

属性表达式可用于定义与对战相关的某些属性。它们允许您在定义属性值时使用计算和逻辑。属性表达式通常生成以下两种形式之一:

  • 单个玩家数据。

  • 单个玩家数据的计算集合。

有效属性表达式标识单个玩家、团队或对战游戏的特定值。以下部分表达式说明了如何标识团队和玩家:

目标 Input (输入) 意义 输出
标识对战游戏的特定团队: teams[red] 红队 团队
标识对战游戏的所有团队: teams[*] 所有团队 List<Team>
标识特定团队中的玩家: team[red].players 红队中的玩家 List<Player>
标识对战游戏的玩家: team[*].players 对战游戏的玩家 (按团队分组) List<List<Player>>

下表给出基于之前示例构建的部分有效属性表达式:

Expression 意义 结果类型

teams[red].players[playerid]

红队所有玩家的玩家IDs List<string>
teams[red].players.attributes[skill] 红队所有玩家的“技能”属性 List<number>
teams[*].players.attributes[skill] 对战游戏的所有玩家的“技能”属性 (按团队分组) List<List<number>>

属性表达式可用于使用以下函数或组合函数来聚合团队数据:

Aggregation Input (输入) 意义 输出
min List<number> 获取列表中所有数字的最小值。 number
max List<number> 获取列表中所有数字的最大值。 number
avg List<number> 获取列表中所有数字的平均值。 number
median List<number> 获取列表中所有数字的中值。 number
sum List<number> 获取列表中所有数字的总和。 number
count List<?> 获取列表中的元素数量。 number
stddev List<number> 获取列表中所有数字的标准差。 number
flatten List<List<?>> 将嵌套列表的集合变成包含所有元素的单个列表。 List<?>
set_intersection List<List<string>> 获取在集合的所有字符串列表中找到的字符串列表。 List<string>
以上全部 List<List<?>> 对嵌套列表的所有操作会对每个子列表执行一次以生成结果列表。 List<?>

下表给出使用聚合函数的部分有效属性表达式:

Expression 意义 结果类型
flatten(teams[*].players.attributes[skill]) 对战游戏中的所有玩家的“技能”属性 (未分组) List<number>
avg(teams[red].players.attributes[skill]) 红队玩家的平均技能 number
avg(teams[*].players.attributes[skill] 对战游戏中的每个团队的平均技能 List<number>
avg(flatten(teams[*].players.attributes[skill])) 对战游戏中的所有玩家的平均技能级别。该表达式获取玩家技能的展开列表,然后计算它们的平均值。 number
count(teams[red].players) 红队的玩家数量 number
count (teams[*].players) 对战游戏中的每个团队的玩家数量 List<number>
max(avg(teams[*].players.attributes[skill])) 对战游戏中的最高团队技能级别 number