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/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) { 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 { diff --git a/src/rooms/commands/DiscardCommand.ts b/src/rooms/commands/DiscardCommand.ts index 72ab266..5e3b09d 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,10 @@ 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[] = []