修改吃牌逻辑
This commit is contained in:
parent
fd768743e0
commit
830bb83adb
@ -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}]
|
||||
[{"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}]
|
||||
|
@ -104,6 +104,7 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
|
||||
})
|
||||
return
|
||||
}
|
||||
// 吃掉牌后删除state.cards中的牌
|
||||
for (let [key, val] of this.state.cards) {
|
||||
this.state.cards.delete(key)
|
||||
}
|
||||
@ -146,7 +147,7 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
|
||||
const singleEat = !!this.state.rules.get(RULE_SINGLEEAT)
|
||||
if (cards.length === 1
|
||||
&& !(singleEat && tmpCards.length == 1 && (tmpCards[0].type == CardType.general || tmpCards[0].type == CardType.variable_unit))) {
|
||||
let cardArr: Card[] = [...this.state.cards.values()]
|
||||
let cardArr: Card[] = [...player.cardQueue.values()]
|
||||
let time = this.room.battleMan.onCardDiscarded(player, cardArr[0])
|
||||
await this.delay(time)
|
||||
// 20210219 修改: 出单张牌后直接进入下个玩家的出牌时间
|
||||
@ -157,7 +158,7 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
|
||||
// }
|
||||
return [new Wait().setPayload(new GameEnv().emptyRoundTime), new TurnEndCommand()]
|
||||
} else {
|
||||
let cardArr: Card[] = [...this.state.cards.values()]
|
||||
let cardArr: Card[] = [...player.cardQueue.values()]
|
||||
let self = this
|
||||
let cardMsg: any = { player: player.id, errcode: 0, errmsg: '' }
|
||||
if (targetCard) {
|
||||
|
@ -41,6 +41,21 @@ export class SelectPetCommand extends Command<CardGameState, {
|
||||
let eff_cnt = 0 // 效果卡数量
|
||||
let dbpt_cnt = 0 // 点数翻倍卡数量
|
||||
let transCount = 0
|
||||
for (let card of player.cardQueue.values()) {
|
||||
ap += card.number
|
||||
count++
|
||||
if (count === 3) {
|
||||
moreAp += new GameEnv().baseAddScore
|
||||
} else if (count > 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<CardGameState, {
|
||||
if (effectRate && transCount) {
|
||||
eff_cnt += (transCount / effectRate | 0)
|
||||
}
|
||||
for (let card of this.state.cards.values()) {
|
||||
ap += card.number
|
||||
count++
|
||||
if (count === 3) {
|
||||
moreAp += new GameEnv().baseAddScore
|
||||
} else if (count > 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) {
|
||||
|
@ -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<Player>();
|
||||
players = new MapSchema<Player>()
|
||||
/**
|
||||
* 游戏阶段, 值定义查看 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<Card>() ;
|
||||
@type({ map: Card })
|
||||
cards = new MapSchema<Card>()
|
||||
/**
|
||||
* 先手玩家
|
||||
*/
|
||||
firstPlayer: string;
|
||||
firstPlayer: string
|
||||
|
||||
|
||||
/**
|
||||
* 用于临时存放吃牌的数据
|
||||
*/
|
||||
tmpActionMap: Map<string, string[] | number> = new Map();
|
||||
tmpActionMap: Map<string, string[] | number> = new Map()
|
||||
/**
|
||||
* 点击重开的玩家数量
|
||||
*/
|
||||
restartCount = 0;
|
||||
restartCount = 0
|
||||
/**
|
||||
* 当前牌局扩展卡库当前最大的card id
|
||||
*/
|
||||
maxCardId = 0;
|
||||
maxCardId = 0
|
||||
|
||||
@type({map: "number"})
|
||||
rules = new MapSchema<number>();
|
||||
|
||||
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<number>()
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,10 @@ export class Player extends Schema {
|
||||
})
|
||||
@type({map: Card})
|
||||
cards = new MapSchema<Card>();
|
||||
|
||||
/**
|
||||
* 公开的手牌数据
|
||||
* @type {SetSchema<string>}
|
||||
*/
|
||||
@type({set: "string"})
|
||||
cardSet = new SetSchema<string>();
|
||||
|
||||
|
@ -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<number, EffectCardCfg> = global.$cfg.get(BaseConst.EFFECTCARD)
|
||||
let spellCards: Card[] = []
|
||||
|
Loading…
x
Reference in New Issue
Block a user