From 39e2e320be5433d08a980a2712e2bed1c2710dd9 Mon Sep 17 00:00:00 2001 From: zhl Date: Wed, 10 Mar 2021 18:09:52 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=AD=BB=E4=BA=A1?= =?UTF-8?q?=E5=90=8E=E7=A6=BB=E5=BC=80=E6=B8=B8=E6=88=8F,=20=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E6=AD=A3=E7=A1=AE=E4=B8=8A=E6=8A=A5=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rooms/GeneralRoom.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rooms/GeneralRoom.ts b/src/rooms/GeneralRoom.ts index a67258f..7acb2fe 100644 --- a/src/rooms/GeneralRoom.ts +++ b/src/rooms/GeneralRoom.ts @@ -194,7 +194,7 @@ export class GeneralRoom extends Room { try { // 20210310 添加, 如果该玩家已死亡, 则上报下, 清除redis中的锁定键 if (this.state.mode == 1 && !player.robot && player.state == PlayerStateConst.PLAYER_DEAD) { - await leftGame(player.id, this.roomId) + await leftGame(player.accountId, this.roomId) } else if (consented) { throw new Error('consented leave') } else { From 211320ffb968447e8a7383880f8ec0fd43225017 Mon Sep 17 00:00:00 2001 From: zhl Date: Thu, 11 Mar 2021 16:46:44 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=B8=BB=E5=8A=A8?= =?UTF-8?q?=E9=80=80=E5=87=BA=E6=B8=B8=E6=88=8F=E5=90=8E,=20=E8=BF=98?= =?UTF-8?q?=E6=98=AF=E6=97=A0=E6=B3=95=E8=BF=9B=E5=85=A5=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/WebApi.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/WebApi.ts b/src/common/WebApi.ts index b798a69..dd524b3 100644 --- a/src/common/WebApi.ts +++ b/src/common/WebApi.ts @@ -169,7 +169,7 @@ export async function createRobot(data: any) { */ export async function leftGame(accountid: string, roomid: string) { debugRoom(`player dead and left game: ${roomid}, ${accountid}`) - const data = { roomid } + const data = { roomid, token: SERVER_TOKEN } let dataStr = JSON.stringify(data) const infoHost = await new Service().getInfoSvr() if (!infoHost) { From fd768743e05f358712f623f6979320aa97aadbf6 Mon Sep 17 00:00:00 2001 From: zhl Date: Fri, 12 Mar 2021 11:39:49 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=83=E7=89=8C?= =?UTF-8?q?=E8=A7=84=E5=88=99,=20=E5=8F=AF=E4=BB=A5=E5=90=83=E4=B8=8A?= =?UTF-8?q?=E4=B8=80=E5=BC=A0=E5=8D=95=E7=89=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rooms/commands/DiscardCommand.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/rooms/commands/DiscardCommand.ts b/src/rooms/commands/DiscardCommand.ts index 72ab266..3f0862c 100644 --- a/src/rooms/commands/DiscardCommand.ts +++ b/src/rooms/commands/DiscardCommand.ts @@ -79,7 +79,7 @@ export class DiscardCommand extends Command 1) { + if (this.state.cards.size > 1 || this.state.cards.size == 0) { this.room.send(client, 'discard_card_s2c', { errcode: 6, errmsg: '不符合吃牌规则' @@ -104,6 +104,9 @@ export class DiscardCommand extends Command Date: Fri, 12 Mar 2021 12:32:09 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=83=E7=89=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/compound_tbl.json | 2 +- src/rooms/commands/DiscardCommand.ts | 5 +- src/rooms/commands/SelectPetCommand.ts | 31 ++++----- src/rooms/schema/CardGameState.ts | 88 +++++++++++++------------- src/rooms/schema/Player.ts | 5 +- src/utils/assistant.util.ts | 2 +- 6 files changed, 69 insertions(+), 64 deletions(-) diff --git a/config/compound_tbl.json b/config/compound_tbl.json index bc0ba79..4f099c9 100644 --- a/config/compound_tbl.json +++ b/config/compound_tbl.json @@ -1 +1 @@ -[{"id":99001,"type_id":1,"value":6},{"id":99002,"type_id":1,"value":2},{"id":99003,"type_id":2,"value":20},{"id":99004,"type_id":1,"value":2},{"id":99005,"type_id":1,"value":1},{"id":99006,"type_id":1,"value":20},{"id":99007,"type_id":1,"value":12},{"id":99008,"type_id":2,"value":12},{"id":99009,"type_id":2,"value":15},{"id":99010,"type_id":2,"value":15},{"id":99011,"type_id":2,"value":20},{"id":99012,"type_id":2,"value":8},{"id":99013,"type_id":1,"value":3},{"id":99014,"type_id":2,"value":5},{"id":99015,"type_id":1,"value":10},{"id":99016,"type_id":1,"value":10},{"id":99017,"type_id":2,"value":12},{"id":99018,"type_id":2,"value":15},{"id":99019,"type_id":2,"value":3},{"id":99020,"type_id":2,"value":30},{"id":99021,"type_id":3,"value":15},{"id":99022,"type_id":3,"value":35},{"id":99023,"type_id":1,"value":2},{"id":99024,"type_id":1,"value":3},{"id":99025,"type_id":1,"value":3},{"id":99026,"type_id":2,"value":1},{"id":99027,"type_id":1,"value":5},{"id":99028,"type_id":1,"value":5},{"id":99029,"type_id":1,"value":6},{"id":99030,"type_id":1,"value":6},{"id":99031,"type_id":4,"value":90001},{"id":99032,"type_id":4,"value":90002},{"id":99033,"type_id":2,"value":15},{"id":99034,"type_id":4,"value":80031},{"id":99035,"type_id":4,"value":80029},{"id":99036,"type_id":4,"value":80030},{"id":99037,"type_id":4,"value":80032},{"id":99038,"type_id":1,"value":20},{"id":99039,"type_id":5,"value":0},{"id":99040,"type_id":5,"value":0},{"id":99041,"type_id":3,"value":50},{"id":99042,"type_id":3,"value":0},{"id":99043,"type_id":3,"value":50},{"id":99044,"type_id":3,"value":70},{"id":99045,"type_id":3,"value":90},{"id":99046,"type_id":3,"value":0},{"id":99047,"type_id":3,"value":10},{"id":99048,"type_id":3,"value":25},{"id":99049,"type_id":3,"value":50}] \ No newline at end of file +[{"id":99001,"type_id":1,"value":6},{"id":99002,"type_id":1,"value":2},{"id":99003,"type_id":2,"value":20},{"id":99004,"type_id":1,"value":2},{"id":99005,"type_id":1,"value":1},{"id":99006,"type_id":1,"value":20},{"id":99007,"type_id":1,"value":12},{"id":99008,"type_id":2,"value":12},{"id":99009,"type_id":2,"value":15},{"id":99010,"type_id":2,"value":15},{"id":99011,"type_id":2,"value":20},{"id":99012,"type_id":2,"value":8},{"id":99013,"type_id":1,"value":3},{"id":99014,"type_id":2,"value":5},{"id":99015,"type_id":1,"value":10},{"id":99016,"type_id":1,"value":10},{"id":99017,"type_id":2,"value":12},{"id":99018,"type_id":2,"value":15},{"id":99019,"type_id":2,"value":3},{"id":99020,"type_id":2,"value":30},{"id":99021,"type_id":3,"value":15},{"id":99022,"type_id":3,"value":35},{"id":99023,"type_id":1,"value":2},{"id":99024,"type_id":1,"value":3},{"id":99025,"type_id":1,"value":3},{"id":99026,"type_id":2,"value":1},{"id":99027,"type_id":1,"value":5},{"id":99028,"type_id":1,"value":5},{"id":99029,"type_id":1,"value":6},{"id":99030,"type_id":1,"value":6},{"id":99031,"type_id":4,"value":90001},{"id":99032,"type_id":4,"value":90002},{"id":99033,"type_id":2,"value":15},{"id":99034,"type_id":4,"value":80031},{"id":99035,"type_id":4,"value":80029},{"id":99036,"type_id":4,"value":80030},{"id":99037,"type_id":4,"value":80032},{"id":99038,"type_id":1,"value":20},{"id":99039,"type_id":5,"value":0},{"id":99040,"type_id":5,"value":1},{"id":99041,"type_id":3,"value":50},{"id":99042,"type_id":3,"value":0},{"id":99043,"type_id":3,"value":50},{"id":99044,"type_id":3,"value":70},{"id":99045,"type_id":3,"value":90},{"id":99046,"type_id":3,"value":0},{"id":99047,"type_id":3,"value":10},{"id":99048,"type_id":3,"value":25},{"id":99049,"type_id":3,"value":50}] diff --git a/src/rooms/commands/DiscardCommand.ts b/src/rooms/commands/DiscardCommand.ts index 3f0862c..5e3b09d 100644 --- a/src/rooms/commands/DiscardCommand.ts +++ b/src/rooms/commands/DiscardCommand.ts @@ -104,6 +104,7 @@ export class DiscardCommand extends Command 3) { + moreAp += new GameEnv().extraAddScore + } + if (card.id == cardId) { + targetCard = card + } + } + if (!targetCard) { + return + } for (let eCardId of effCards) { if (!player.cards.has(eCardId + '')) { continue @@ -59,21 +74,7 @@ export class SelectPetCommand extends Command 3) { - moreAp += new GameEnv().extraAddScore - } - if (card.id == cardId) { - targetCard = card - } - } - if (!targetCard) { - return - } + //停止选随从计时, 并更新player.extraTime; let elapsedTime = this.room.stopSchedule(ClockNameConst.SELECT_PET) if (elapsedTime >= 0) { diff --git a/src/rooms/schema/CardGameState.ts b/src/rooms/schema/CardGameState.ts index 58d77a8..6e2f118 100644 --- a/src/rooms/schema/CardGameState.ts +++ b/src/rooms/schema/CardGameState.ts @@ -1,13 +1,13 @@ -import { Schema, MapSchema, type } from "@colyseus/schema"; -import {Player} from "./Player"; -import {Card} from "./Card"; -import {GameStateConst} from "../../constants/GameStateConst"; +import { MapSchema, Schema, type } from '@colyseus/schema' +import { Player } from './Player' +import { Card } from './Card' +import { GameStateConst } from '../../constants/GameStateConst' export class CardGameState extends Schema { @type({ map: Player }) - players = new MapSchema(); + players = new MapSchema() /** * 游戏阶段, 值定义查看 GameStateConst.ts * 1: 等待玩家准备 @@ -16,35 +16,35 @@ export class CardGameState extends Schema { * 4: 游戏中吃牌后的选随从轮 * 9: 游戏结束 */ - @type("number") - gameState: number = GameStateConst.STATE_WAIT_JOIN; + @type('number') + gameState: number = GameStateConst.STATE_WAIT_JOIN - @type("string") - currentTurn: string; + @type('string') + currentTurn: string /** * 用于替换currentTurn的字段, * 格式: playerId:eatCount * @type {string} */ - @type("string") - playerTurn: string; + @type('string') + playerTurn: string /** * currentTurn当中当前玩家吃牌次数 * @type {number} */ - @type("number") - eatCount: number; + @type('number') + eatCount: number /** * 用于吃牌时的计轮, 只有在gameState==3的时候才需要判断 */ - @type("string") - subTurn: string; + @type('string') + subTurn: string /** * 轮次 */ - @type("number") - round: number; + @type('number') + round: number /** * 游戏模式 * 1: 匹配 @@ -52,57 +52,57 @@ export class CardGameState extends Schema { * 3: 娱乐 * @type {number} */ - @type("number") - mode: number; + @type('number') + mode: number /** * 当局游戏卡组队列 */ - cardQueue: Card[] = []; + cardQueue: Card[] = [] /** * 上轮玩家出的牌 */ - @type({map: Card}) - cards = new MapSchema() ; + @type({ map: Card }) + cards = new MapSchema() /** * 先手玩家 */ - firstPlayer: string; + firstPlayer: string /** * 用于临时存放吃牌的数据 */ - tmpActionMap: Map = new Map(); + tmpActionMap: Map = new Map() /** * 点击重开的玩家数量 */ - restartCount = 0; + restartCount = 0 /** * 当前牌局扩展卡库当前最大的card id */ - maxCardId = 0; + maxCardId = 0 - @type({map: "number"}) - rules = new MapSchema(); - - updateGameState(val: number) { - let preVal = this.gameState; - this.gameState = val; - this.$listeners?.gameState?.invoke(val, preVal); - } - - updateGameTurn(val: string, eatCount: number) { - let preVal = this.currentTurn; - this.currentTurn = val; - this.eatCount = eatCount; - this.$listeners?.currentTurn?.invoke(val, preVal); - let prePlayerTurn = this.playerTurn - this.playerTurn = `${this.currentTurn}:${this.eatCount}` - this.$listeners?.playerTurn?.invoke(this.playerTurn, prePlayerTurn); - } + @type({ map: 'number' }) + rules = new MapSchema() get advMode() { return this.mode == 1 || this.mode == 2 } + + updateGameState(val: number) { + let preVal = this.gameState + this.gameState = val + this.$listeners?.gameState?.invoke(val, preVal) + } + + updateGameTurn(val: string, eatCount: number) { + let preVal = this.currentTurn + this.currentTurn = val + this.eatCount = eatCount + this.$listeners?.currentTurn?.invoke(val, preVal) + let prePlayerTurn = this.playerTurn + this.playerTurn = `${ this.currentTurn }:${ this.eatCount }` + this.$listeners?.playerTurn?.invoke(this.playerTurn, prePlayerTurn) + } } diff --git a/src/rooms/schema/Player.ts b/src/rooms/schema/Player.ts index 605036c..9101766 100644 --- a/src/rooms/schema/Player.ts +++ b/src/rooms/schema/Player.ts @@ -40,7 +40,10 @@ export class Player extends Schema { }) @type({map: Card}) cards = new MapSchema(); - + /** + * 公开的手牌数据 + * @type {SetSchema} + */ @type({set: "string"}) cardSet = new SetSchema(); diff --git a/src/utils/assistant.util.ts b/src/utils/assistant.util.ts index 98a1ce5..dc7e6f8 100644 --- a/src/utils/assistant.util.ts +++ b/src/utils/assistant.util.ts @@ -227,7 +227,7 @@ let assistantUtil = { * @private */ async selectPet(dstPlayer: Player, state: CardGameState) { - let cards = [...state.cards.values()] + let cards = [...dstPlayer.cardQueue.values()] let result: Card let effectMap: Map = global.$cfg.get(BaseConst.EFFECTCARD) let spellCards: Card[] = []