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

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

FlexMatch 规则语言

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

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

规则类型

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

绝对排序规则 (absoluteSort)

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

绝对排序规则属性

  • sortDirection— 有关将对战门票排序的说明。有效选项是 ascendingdescending

  • sortAttribute— 用于对玩家排序依据的玩家属性。

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

    • minValue:对于最旧的票证,找到包含最低值的关键字。

    • maxValue:对于最旧的票证,找到包含最高值的关键字。

  • partyAggregation— 处理多个玩家(派对)门票的方法。有效选项是使用最小值 (min最小值 (max),或者平均值(avg) 机票玩家的值。默认为 avg

收集规则 (collection)

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

收集规则属性

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

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

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

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

  • partyAggregation— 处理多个玩家(派对)门票的方法。有效选项是使用union要么intersection机票玩家的价值。默认为 union

比较规则 (comparison)

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

比较规则属性

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

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

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

  • partyAggregation— 处理多个玩家(派对)门票的方法。有效选项是使用最小值 (min最小值 (max),或者平均值(avg) 机票玩家的值。默认为 avg

距离规则 (distance)

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

距离规则属性

  • measurements— 用于度量距离的玩家属性值;必须为数字值。

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

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

  • partyAggregation— 处理多个玩家(派对)门票的方法。有效选项是使用最小值 (min最小值 (max),或者平均值(avg) 机票玩家的值。默认为 avg

Batch 距离规则 (batchDistance

Batch 距离规则用于度量两个数字值之间的差值,例如技能级别之间的差距。当你想验证玩家在其他玩家的特定范围内是否有属性值时,这会很有帮助。

Batch 距离规则属性

  • batchAttribute— 用于构建批处理的玩家属性值;必须为数字值。

  • maxDistance— 为了成功进行对战游戏而允许的最大距离值。

  • partyAggregation— 处理多个玩家(派对)门票的方法。有效选项是使用最小值 (min最小值 (max),或者平均值(avg) 机票玩家的值。默认为 avg

距离排序规则 (distanceSort)

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

距离排序规则属性

  • sortDirection— 有关将对战门票排序的说明。有效选项是 ascendingdescending

  • sortAttribute— 用于对玩家排序依据的玩家属性。

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

    • minValue:对于最旧的票证,找到包含最低值的关键字。

    • maxValue:对于最旧的票证,找到包含最高值的关键字。

  • partyAggregation— 处理多个玩家(派对)门票的方法。有效选项是使用最小值 (min最小值 (max),或者平均值(avg) 机票玩家的值。默认为 avg

延迟规则 (latency)

延迟规则按区域评估玩家延迟报告例如,某个规则可能要求匹配玩家在相同区域内的延迟必须都在最大限值内。这是唯一允许进行大型匹配的规则类型,并设置maxLatency是唯一允许的财产。

延迟规则属性

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

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

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

  • partyAggregation— 处理多个玩家(派对)门票的方法。有效选项是使用最小值 (min最小值 (max),或者平均值(avg) 机票玩家的值。默认为 avg

属性表达式

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

  • 单个玩家数据。

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

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

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

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

表达式 意义 结果类型

teams[red].players[playerid]

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

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

聚合 输入 意义 输出
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<?>

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

表达式 意义 结果类型
flatten(teams[*].players.attributes[skill]) 对战游戏中的所有玩家的“技能”属性 (未分组) List<number>
avg(teams[red].players.attributes[skill]) 红队玩家的平均技能 number
avg (团队[ *] .players.attributes [技能]) 对战游戏中的每个团队的平均技能 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