From 24ac49fafbe71556718831421cd36ce7485eece9 Mon Sep 17 00:00:00 2001 From: zhl Date: Mon, 18 Jan 2021 19:38:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BB=93=E7=AE=97=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/WebApi.ts | 10 ++---- src/rooms/GeneralRoom.ts | 4 +-- src/rooms/RoomExtMethod.ts | 5 +-- src/rooms/commands/GameResultCommand.ts | 44 ++++++++++++++++++------- src/rooms/commands/SelectHeroCommand.ts | 1 + 5 files changed, 40 insertions(+), 24 deletions(-) diff --git a/src/common/WebApi.ts b/src/common/WebApi.ts index 3bfdd56..7fa9b70 100644 --- a/src/common/WebApi.ts +++ b/src/common/WebApi.ts @@ -38,7 +38,7 @@ export function requestUnlockHero(accountid: string, heroid: number | string) { * 上报游戏结果 * @param data */ -export function reportGameResult(data: any) { +export async function reportGameResult(data: any) { let dataStr = JSON.stringify(data); let reqConfig = { @@ -51,13 +51,7 @@ export function reportGameResult(data: any) { }; // @ts-ignore - axios(reqConfig) - .then(function (response) { - debugRoom(JSON.stringify(response.data)); - }) - .catch(function (err) { - error(err); - }); + return axios(reqConfig) } /** diff --git a/src/rooms/GeneralRoom.ts b/src/rooms/GeneralRoom.ts index 34bbbe2..6bf19b0 100644 --- a/src/rooms/GeneralRoom.ts +++ b/src/rooms/GeneralRoom.ts @@ -48,9 +48,7 @@ export class GeneralRoom extends Room { if (options.count) { this.robotCount = Math.min(Math.max(0, options.count), this.maxClients - 1); } - if (options.match) { - this.match = options.match; - } + this.match = !!options.match || false; if (options.score) { this.score = options.score; } diff --git a/src/rooms/RoomExtMethod.ts b/src/rooms/RoomExtMethod.ts index d148035..358cf7d 100644 --- a/src/rooms/RoomExtMethod.ts +++ b/src/rooms/RoomExtMethod.ts @@ -126,8 +126,8 @@ Object.defineProperties(Room.prototype, { let dstHp = player.hp + (hp | 0); let sourceP = this.state.players.get(fromplayer); if (sourceP && hp < 0) { - sourceP.statData.inc(StateTypeEnum.DMG, hp); - player.statData.inc(StateTypeEnum.TDMG, hp); + sourceP.statData.inc(StateTypeEnum.DMG, Math.min(-hp, player.hp)); + player.statData.inc(StateTypeEnum.TDMG, Math.min(-hp, player.hp)); } debugRoom(`更新血量: ${player.id} ${player.hp} -> ${hp}, reason: ${reason}`); if (dstHp <= 0) { @@ -200,6 +200,7 @@ Object.defineProperties(Room.prototype, { if (!player || !targetPlayer) { error(`updatePetStat, player or targetPlayer is null ${!!player} ${!!targetPlayer}`); } + debugRoom(`updatePetStat, val change, old: ${valOld}, new: ${valNew}`); if (valNew < valOld) { player?.statData.inc(StateTypeEnum.DMG, valOld - valNew); targetPlayer?.statData.inc(StateTypeEnum.TDMG, valOld - valNew); diff --git a/src/rooms/commands/GameResultCommand.ts b/src/rooms/commands/GameResultCommand.ts index fb1a35d..f9c7235 100644 --- a/src/rooms/commands/GameResultCommand.ts +++ b/src/rooms/commands/GameResultCommand.ts @@ -22,6 +22,7 @@ class GameResult{ public mvpScore: number public scoreChange: number public scoreOld: number + public stat: any; constructor(player: Player) { this.id = player.id; @@ -30,6 +31,7 @@ class GameResult{ this.alive = player.state != PlayerStateConst.PLAYER_DEAD; this.ap = gameUtil.calcTotalAp(player); this.scoreOld = player.score; + this.stat = {}; } } /** @@ -111,6 +113,7 @@ export class GameResultCommand extends Command { if (type >= scores.length) { continue; } + result.stat[type] = val; val = val * scores[type]; s += val; if (resultMap.has(type)) { @@ -136,19 +139,23 @@ export class GameResultCommand extends Command { } } + let mvp; for (let [p, val] of scoreMap) { let mvpRate = p.team == winner ? fc.get(70051).number : fc.get(70052).number; let data = results.get(p); data.mvpScore = val * mvpRate; // mvp分 + if (!mvp) { + mvp = p; + } else { + if (data.mvpScore > results.get(mvp).mvpScore) { + mvp = p; + } + } } - let resultData: any = { - winner: winner, - results: [...results.values()], - statics: statics - }; + let self = this; - this.room.bGameResult(resultData); + this.state.updateGameState(GameStateConst.STATE_GAME_OVER); //启动定时, 时间到后, 踢出没离开且没点重玩的玩家, 并将房间设为非private let resultTimeOver = async function () { @@ -186,7 +193,15 @@ export class GameResultCommand extends Command { } let time = new GameEnv().gameResultTime * 1000; this.room.beginSchedule(time, resultTimeOver, 'restart_schedule'); - self.reportGameResult(resultData.winner); + let seasonData = (await self.reportGameResult(winner, mvp.id, results.get(mvp).mvpScore, results)).data.data; + let resultData: any = { + winner: winner, + mvp: mvp.id, + results: [...results.values()], + statics: statics, + seasonData + }; + this.room.bGameResult(resultData); this.resetAllState(); } @@ -230,13 +245,15 @@ export class GameResultCommand extends Command { /** * 向info-svr上报游戏结果 * @param {number} winner + * @param mvp + * @param mvpScore */ - reportGameResult(winner: number) { + async reportGameResult(winner: number, mvp: string, mvpScore: number, results: Map) { let data: any = { roomid: this.room.roomId, round: this.state.round, winner: winner, - season: 0, + season: this.room.match ? 1: 0 } let players: any[] = []; let i = 0; @@ -246,6 +263,9 @@ export class GameResultCommand extends Command { for (let [key,val] of player.statData) { dataObj[key] = val; } + if (player.id == mvp) { + data.mvp = player.accountId ; + } players.push({ accountid: player.accountId, playerid: player.id, @@ -254,11 +274,13 @@ export class GameResultCommand extends Command { heroid: player.heroId, statdata: dataObj, score: player.score, - cards: cards + cards: cards, + scoreChange: results.get(player).scoreChange, + mvpscore: player.id == mvp ? mvpScore : 0 }); } data.players = players; - reportGameResult(data); + return reportGameResult(data); } } diff --git a/src/rooms/commands/SelectHeroCommand.ts b/src/rooms/commands/SelectHeroCommand.ts index 85fc0c7..729c8c9 100644 --- a/src/rooms/commands/SelectHeroCommand.ts +++ b/src/rooms/commands/SelectHeroCommand.ts @@ -48,6 +48,7 @@ export class SelectHeroCommand extends Command