diff --git a/src/common/GConfig.ts b/src/common/GConfig.ts index 2a55b66..ca2f4af 100644 --- a/src/common/GConfig.ts +++ b/src/common/GConfig.ts @@ -7,6 +7,7 @@ import {SystemCardCfg} from "../cfg/parsers/SystemCardCfg"; import {UnitCfg} from "../cfg/parsers/UnitCfg"; import {BaseConst} from "../constants/BaseConst"; import SkillMan from "../rooms/logic/skill/SkillMan"; +import {FormulaCfg} from "../cfg/parsers/FormulaCfg"; export function initData() { @@ -17,6 +18,7 @@ export function initData() { rP(BaseConst.SKILL, SkillCfg); rP(BaseConst.SYSTEMCARD, SystemCardCfg); rP(BaseConst.UNIT, UnitCfg); + rP(BaseConst.FORMULA, FormulaCfg); DataParser.loadAll(); let map = global.$cfg.get(BaseConst.SKILL); diff --git a/src/constants/BaseConst.ts b/src/constants/BaseConst.ts index 902f562..dd64fdb 100644 --- a/src/constants/BaseConst.ts +++ b/src/constants/BaseConst.ts @@ -67,4 +67,5 @@ export class BaseConst { public static readonly SKILL = "skill"; public static readonly SYSTEMCARD = "systemcard"; public static readonly UNIT = "unit"; + public static readonly FORMULA = "formula" } diff --git a/src/global.d.ts b/src/global.d.ts index 118ee07..c26ba9e 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -32,6 +32,7 @@ declare module "colyseus" { mainClock: Delayed; robotCount: number; match: boolean; + score: number; /** * 根据sessionId获取client * @param player 玩家id或者玩家的对象 diff --git a/src/rooms/GeneralRoom.ts b/src/rooms/GeneralRoom.ts index f7f30d6..34bbbe2 100644 --- a/src/rooms/GeneralRoom.ts +++ b/src/rooms/GeneralRoom.ts @@ -25,6 +25,7 @@ import {createRobot} from "../common/WebApi"; export class GeneralRoom extends Room { dispatcher = new Dispatcher(this); maxClients = 4; + score = 0; battleMan = new BattleHandler(); // 用于游戏过程中各种计时器, 使用该计时器的前提是, 只针对当前操作玩家 gameClock: Map = new Map(); @@ -50,6 +51,9 @@ export class GeneralRoom extends Room { if (options.match) { this.match = options.match; } + if (options.score) { + this.score = options.score; + } this.battleMan.init(cs, this); this.clock.start(); this.state.gameState = GameStateConst.STATE_WAIT_JOIN; @@ -113,7 +117,8 @@ export class GeneralRoom extends Room { let data = { client: client, accountId: options.accountid, - seat: options.seat + seat: options.seat, + score: options.score, }; this.dispatcher.dispatch(new OnJoinCommand(), data); } diff --git a/src/rooms/RankedLobbyRoom.ts b/src/rooms/RankedLobbyRoom.ts index 709c05e..5fabc06 100644 --- a/src/rooms/RankedLobbyRoom.ts +++ b/src/rooms/RankedLobbyRoom.ts @@ -1,4 +1,5 @@ import {Client, generateId, matchMaker, Room} from "colyseus"; +import {BaseConst} from "../constants/BaseConst"; interface MatchmakingGroup { averageRank: number; @@ -109,6 +110,7 @@ export class RankedLobbyRoom extends Room { * 如果找到的记录, clients已经查过2条, 则也插入一条记录 * 如果找到的记录, clients是1, 则把当前client添加到该记录中, 同时更新rank */ + const fc = global.$cfg.get(BaseConst.FORMULA); if (options.group) { let length = this.stats.length; let groupData; @@ -142,7 +144,7 @@ export class RankedLobbyRoom extends Room { }); } else { groupData.clients.set(client.sessionId, {client, options}); - groupData.rank = (groupData.rank + options.rank) / 2 + groupData.rank = (groupData.rank + options.rank) / 2 * (1 + fc.get(70027).number / 100); } } client.send("clients", groupData.clients.size); @@ -299,11 +301,24 @@ export class RankedLobbyRoom extends Room { .map(async (group) => { if (group.ready) { group.confirmed = 0; - + let score = 0; + let count = 0; + group.clients.map(client => { + for (let [,data] of client.clients) { + score += (data.options?.score || 0); + count ++; + } + }) + let avaScore = score / count; /** * Create room instance in the server. */ - const room = await matchMaker.createRoom(this.roomToCreate, {rank: true, count: this.numClientsToMatch - group.count}); + const room = await matchMaker.createRoom(this.roomToCreate, { + match: true, + rank: group.averageRank, + score: avaScore, + count: this.numClientsToMatch - group.count + }); // TODO: 预处理数据, 确定座次 let hasGroup = false; for (let client of group.clients) { diff --git a/src/rooms/commands/GameResultCommand.ts b/src/rooms/commands/GameResultCommand.ts index 7eed480..765c085 100644 --- a/src/rooms/commands/GameResultCommand.ts +++ b/src/rooms/commands/GameResultCommand.ts @@ -201,6 +201,7 @@ export class GameResultCommand extends Command { team: player.team, heroid: player.heroId, statdata: dataObj, + score: player.score, cards: cards }); } diff --git a/src/rooms/commands/OnJoinCommand.ts b/src/rooms/commands/OnJoinCommand.ts index cd48ce1..75e1a12 100644 --- a/src/rooms/commands/OnJoinCommand.ts +++ b/src/rooms/commands/OnJoinCommand.ts @@ -4,6 +4,8 @@ import {Player} from "../schema/Player"; import {Client} from "colyseus"; import {GameStateConst} from "../../constants/GameStateConst"; import {GameEnv} from "../../cfg/GameEnv"; +import {BaseConst} from "../../constants/BaseConst"; +import {getRandom} from "../../utils/number.util"; /** * 玩家成功加入房间 @@ -12,13 +14,16 @@ export class OnJoinCommand extends Command { - execute({client, accountId, seat} = this.payload) { + execute({client, accountId, seat, score} = this.payload) { let count = this.state.players.size; if (count >= this.room.maxClients) { return; } + let isRobot = false; if (accountId && accountId == 'robot') { + isRobot = true; accountId = `robot_${client.sessionId}`; } else if (!accountId) { accountId = `player_${client.sessionId}`; @@ -32,6 +37,15 @@ export class OnJoinCommand extends Command