添加规则集

最近更新时间:2019-08-26 15:24:39

用户可通过配置 JSON 设置匹配规则集,从而实现 1V1、多V多游戏对战。

MGOBE 控制台 默认提供以下规则集内容:1V1 ,2V2 , 3V3, 5V5,添加分段规则,添加误差规则。

适应场景

参与匹配的房间人数不超过100人。如需了解更多请 联系我们

JSON 结构

配置 JSON 结构如下图所示:

示例介绍

规则说明

  1. 3V3 比赛。
  2. 组队条件:年龄在同一个阶段的人组成一队;1 - 12岁一组,13 - 18岁一组,19 - 30岁一组,31 - 100岁一组。
  3. 队与队的匹配条件:每个团队平均技能相差在2以内的匹配在一起。
{
    "version": "V1.0",
    "teams": [{
        "name": "3v3", //3v3的比赛
        "maxPlayers": 3, //每支队伍最大人数3
        "minPlayers": 3, //每支队伍最小人数3
        "number": 2 //一共两个队
    }],
    "playerAttributes": [{
            "name": "age", //年龄,匹配时传入的参数
            "type": "number"
        },
        {
            "name": "skill", //技能,匹配时传入的参数
            "type": "number"
        }
    ],
    "rules": [{
        "type": "segment",
        "expression": "teams[i].players.age", //根据年龄进行组队
        "value": [
            [1, 12],
            [13, 18],
            [19, 30],
            [31, 100]
        ],
        "waitTimeSteps": [{
            "waitTimeSeconds": 10, //等待10s若匹配不上,放宽规则
            "value": [
                [1, 30],
                [31, 100]
            ]
        }]
    }, {
        "type": "deviation",
        "expression": "avg(teams[*].players.skill)", //每个团队的平均技能
        "value": 2, //技能相差不大于2
        "waitTimeSteps": [{
            "waitTimeSeconds": 10, //等待10s若匹配不上,放宽规则
            "value": 5
        }]
    }],
    "timeout": 40
}

配置详解

1. version

版本说明,初始版本只能填写"V1.0"。

2. playerAttributes

属性数组,包含0-多组属性值,最多5个属性值,可不填属性。

参数 类型 意义
name string 属性字段,接口调用时需要传入的参数。数组内 name 不能重复,由英文数字下划线组成,最大长度20
type string 属性类型,暂时只支持 number 属性,可不填,默认 number

示例代码

{
  "playerAttributes": [
        {
            "name": "deviationAttri1",//该参数代表的值,一般由数字度量的属性,如score、skill等
            "type": "number"
        },
        {
            "name": "segmentAttri1",//该参数代表的值,一般由数字度量的属性,如score、skill等
            "type": "number"
        }
    ]
}

3. teams

创建队伍,一个房间内的玩家最大数量不超过100。

参数 类型 意义
name string 队伍类型名称, 由英文数字下划线组成,最大长度为20
maxPlayers number 团队最大人数,minPlayers<=maxPlayers,团队个数 * 团队最大人数<=100 ,即 maxPlayers*number<=100
minPlayers number 团队最小人数,minPlayers<=maxPlayers
number number 创建团队个数,团队个数 * 团队最大人数<=100 ,即 maxPlayers*number<=100

示例代码

{
  "version": "V1.0",
    "teams": [{
        "name": "5v5",
        "maxPlayers": 5, //每个团队的最大人数
        "minPlayers": 5, //每个团队的最小人数
        "number": 2 //团队个数
    }]
}

4. rules

设置匹配规则,总共最多支持5组算法规则,可不填 rules。匹配规则分为误差规则、分段规则,误差规则最多支持一组,分段规则最多支持5组。

参数说明

参数 类型 意义
type string 规则类型, "deviation" 或 "segment"
expression string 玩家某个属性的表达式,表达式可转化成数组
value number 当 type 为 deviation 误差规则时,该值表示最大误差值; 当 type 为 segment 分段规则时,该值表示分段数组
waitTimeSteps 数组 如等待时间超时后重新指定 value 值,仅一组,非必填

type 规则类型说明

type 包含误差规则 deviation 和分段规则 segment。

  • 误差规则 deviation
    误差规则在 rules 里只能配置一个,有更多需求请 联系我们
    误差规则表示一个数组里最大值和最小值相差不超过某个值。误差规则 deviation 的有效 expression 是一个可以转化为数组的字符串,value 是一个值。例如,一人1个队伍,3个人的房间,要求所有玩家技能相差不超过2。
    玩家1技能:1
    玩家2技能:3
    玩家3技能:5
    玩家4技能:2
    玩家1和玩家2的技能相差为2,可以匹配上,玩家3和玩家1技能相差为4,所以匹配不上,玩家4与玩家1和玩家2技能相差为1,可以匹配上。
    示例代码:
    {
      "version": "V1.0",
      "teams": [{
          "name": "da_guai",
          "maxPlayers": 3,
          "minPlayers": 3,
          "number": 1
      }],
      "playerAttributes": [{
          "name": "skill",
          "type": "number"
      }],
      "rules": [{
          "type": "deviation", //误差规则
          "expression": "teams[i].players.skill", //表示每个队伍,这里只有一个队伍
          "value": 2
      }]
    }
  • 分段规则 segment
    表示将一个段的匹配在一起,分段规则 segment 的有效 expression 是一个可以转化为数组的字符串,value 是一个二维数组。如技能1 - 3的匹配在一起,4 - 6的匹配在一起,7 - 10的匹配在一起。
    示例代码:
    {
      "version": "V1.0",
      "teams": [{
          "name": "da_guai",
          "maxPlayers": 3,
          "minPlayers": 3,
          "number": 1
      }],
      "playerAttributes": [{
          "name": "skill",
          "type": "number"
      }],
      "rules": [{
          "type": "segment", //分段规则
          "expression": "teams[i].players.skill", //表示每个队伍,这里只有一个队伍
          "value": [
              [1, 3],
              [4, 6],
              [7, 10]
          ] //表示技能1-3的会匹配在一起,技能4-6的匹配在一起,技能7-10的匹配在一起。
      }]
    }

expression 表达式说明

目前仅支持以下表达式,如有更多需求,请 联系我们

表达式 类型 意义 适用规则
teams[i].players.skill List<Number> 房间里某个团队所有成员的技能属性,如果没有团队概念(1个 team),即房间所有成员的技能属性,多个团队时,通常用于组队条件 分段规则 segment,误差规则 deviation
teams[*].players.skill List< List<Number> > 房间里每个团队的技能属性,这是一个二维数组 -
avg(teams[*].players.skill) List<number> 房间内每个团队的技能平均值,通过 avg,二维数组变成一维数组,多个团队时,通常用于团队与团队的匹配条件 分段规则 segment,误差规则 deviation

示例代码:
先通过技能进行分组,技能1 - 3的组队,4 - 6的组队,7 - 10的组队,再通过每个队伍的平均技能,相差为2以内的匹配在一起:

{
    "version": "V1.0",
    "teams": [{
        "name": "da_guai",
        "maxPlayers": 3,
        "minPlayers": 3,
        "number": 2
    }],
    "playerAttributes": [{
        "name": "skill",
        "type": "number"
    }],
    "rules": [{
        "type": "segment", //误差规则,也可用分段规则
        "expression": "teams[i].players.skill",//表示组队条件:teams[i]表示队伍i的每个成员,是一个数组。
        "value": [
            [1, 3],
            [4, 6],
            [7, 10]
        ] //表示技能1-3的会组队,技能4-6的会组队,技能7-10的会组队
    }, {
        "type": "deviation", //分段规则,也可使用误差规则
        "expression": "avg(teams[*].players.skill)", //表示队和队的匹配条件:表示每个队伍之间的平均技能
        "value": 2 //技能误差为2
    }]
}

waitTimeSteps 超时设置

等待时间超时后重新指定 value 值,仅一组,非必填。 这里的超时设置,不能大于 timeout 的时间。

参数 类型 意义
waitTimeSeconds number 设置等待匹配超时时间,规则集内全部 waitTimeSeconds 必须相同,取值范围:[10,40]
value number 与 rules.value 规则一致

示例代码:

{
    "version": "V1.0",
    "teams": [{
        "name": "5v5",
        "maxPlayers": 5,
        "minPlayers": 5,
        "number": 2
    }],
    "playerAttributes": [{
        "name": "skill",
        "type": "number"
    }, {
        "name": "score",
        "type": "number"
    }],
    "rules": [{
            "type": "deviation", //误差规则
            "expression": "teams[i].players.skill",
            "value": 2,
            "waitTimeSteps": [{
                "waitTimeSeconds": 10,
                "value": 5 //误差规则,则waitTimeSteps设定的value值为数字
            }]
        },
        {
            "type": "segment", //分段规则
            "expression": "teams[i].players.score",
            "value": [
                [1, 3],
                [4, 6],
                [7, 10]
            ],
            "waitTimeSteps": [{
                "waitTimeSeconds": 10,
                "value": [
                    [0, 5],
                    [6, 10]
                ] //分段规则,则waitTimeSteps设定的value范围比前面的value范围更宽松;
            }]
        }
    ]
}

5. timeout

参数说明

参数 类型 意义
timeout number 全局匹配超时,取值范围:[10,300]s,必须大于 waitTimeSeconds,默认是40s

示例代码

房间内每个团队 skill 数值平均值相差不超过3的匹配在一起。如果超过1分钟未匹配上,将 skill 平均值相差调整到5,整个匹配的超时时间是2分钟。

{
    "version": "V1.0",
    "teams": [{
        "name": "5v5",
        "maxPlayers": 5,
        "minPlayers": 5,
        "number": 2
    }],
    "playerAttributes": [{
        "name": "skill",
        "type": "number"
    }],
    "rules": [{
        "type": "deviation",
        "expression": "avg(teams[*].players.skill)",
        "value": 3,
        "waitTimeSteps": [{
            "waitTimeSeconds": 60,
            "value": 5
        }]
    }],
    "timeout": 120//匹配超时60s后,skill平均值相差为5,整个匹配超时时间是120S。
}