# 匹配系统

# 一、介绍

游戏策划配置可用的游戏模式,开发者即可通过该系统,在可用的游戏模式下进行组队、匹配的操作

匹配系统中的事件流为:创建队伍/加入其它队伍 -> 邀请玩家加入? -> 发起匹配 -> 匹配完成,明确所有阵营 -> 所有玩家点击确认 -> 进入游戏

# 二、使用

// 先在头部引入匹配模块
import { matchSystem } from "@timi/mogs-sdk";
1
2

1. 获取可用的游戏模式信息

也就是上面提到的游戏策划的配置结果

const gameModes = await matchSystem.availableGameModes;
gameModes.forEach((item) => console.log(item.gameMode));
1
2

2. 创建队伍

从可用游戏模式中挑选一种并创建一支空的队伍

matchSystem.createTeam({
    gameMode: xxxx, // 从游戏模式列表中选择一种
    fail(err){
        console.error(err);
    },
    success(res){
        console.log('createTeam',res);
    },
    complete(){
        console.log('complete');
    }
})
1
2
3
4
5
6
7
8
9
10
11
12

3. 获取当前队伍的信息

当前如果处于队伍中,可以取得队伍信息(包括队长id,队员列表,队伍id等),否则取得null

const teamInfo = await matchSystem.getCurrentTeam();
if (!teamInfo) {
    console.log('当前不存在队伍');
} else {
    console.log(teamInfo.teamPlayerList);
}
1
2
3
4
5
6

4. 邀请他人加入队伍

只要处于队伍中,就可以邀请他人加入队伍

matchSystem.inviteJoinTeam({
    inviteeOpenId: xxxx,
    teamId: xxxx,
    gameMode: xxxx,
    fail(err){
        console.error(err);
    },
    success(res){
        console.log('inviteJoinTeam',res);
    },
    complete(){
        console.log('complete');
    }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14

5. 发起匹配

在队伍中才可发起匹配

matchSystem.match({
    teamId: xxxx, // 可以不传,则默认使用已经创建好的队伍id,
    matchScore: xxxx,
    fail(err){
        console.error(err);
    },
    success(res){
        console.log('match',res);
    },
    complete(){
        console.log('complete');
    }
})
1
2
3
4
5
6
7
8
9
10
11
12
13

5. 获取匹配结果

匹配完成后可以获取匹配结果(包括匹配房间号、所有阵营的成员信息等)

const matchResult = await matchSystem.getMatchResult();
console.log(matchResult.groupList);
1
2

6. 监听队伍信息变化

以下几种情况都会触发队伍信息变化的事件:

1、自己新建队伍

2、玩家加入/离开队伍

3、自己加入一个队伍

mogs会在事件回调中返回:

1、队伍成员的前后比对结果列表(谁加入了以及谁离开了 ps:自己新建队伍时就等于是自己加入了)

2、队长的变化

matchSystem.onTeamPlayersChange((ev) => {
    ev.patch.forEach((item) => {
        if (item.type === 'ADD') console.log('新增一个队员(新建队伍时就是自己):', item.player);
        if (item.type === 'REMOVE') console.log('一个队员离开:', item.player);
    });
    if (ev.ownerChange) {
        console.log('原队长是:', ev.ownerChange.previousValue);
        console.log('新队长是:', ev.ownerChange.currentValue);
    }
});
1
2
3
4
5
6
7
8
9
10

7. 完整的匹配过程监听

匹配过程分为几个阶段:

一、发起匹配,收到匹配开始的通知,详见onMatchStart

二、匹配完成,收到匹配完成的通知,详见onMatchDone

三、匹配确认,即所有玩家都点击了确认,收到匹配确认的通知,若倒计时结束有玩家未点击确认,则在通知的回调参数中返回已超时的flag,详见onMatchConfirmed

ps: 匹配取消,即有玩家在匹配完成之前点击取消匹配,收到匹配取消的通知,详见onMatchCanceled

事件监听的使用方式同上

TIP

更多匹配模块的api请参考匹配模块