Merge branch 'master' of http://git.kingsome.cn/node/card_svr
This commit is contained in:
commit
de3839004c
@ -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}]
|
||||||
|
@ -169,7 +169,7 @@ export async function createRobot(data: any) {
|
|||||||
*/
|
*/
|
||||||
export async function leftGame(accountid: string, roomid: string) {
|
export async function leftGame(accountid: string, roomid: string) {
|
||||||
debugRoom(`player dead and left game: ${roomid}, ${accountid}`)
|
debugRoom(`player dead and left game: ${roomid}, ${accountid}`)
|
||||||
const data = { roomid }
|
const data = { roomid, token: SERVER_TOKEN }
|
||||||
let dataStr = JSON.stringify(data)
|
let dataStr = JSON.stringify(data)
|
||||||
const infoHost = await new Service().getInfoSvr()
|
const infoHost = await new Service().getInfoSvr()
|
||||||
if (!infoHost) {
|
if (!infoHost) {
|
||||||
|
@ -194,7 +194,7 @@ export class GeneralRoom extends Room {
|
|||||||
try {
|
try {
|
||||||
// 20210310 添加, 如果该玩家已死亡, 则上报下, 清除redis中的锁定键
|
// 20210310 添加, 如果该玩家已死亡, 则上报下, 清除redis中的锁定键
|
||||||
if (this.state.mode == 1 && !player.robot && player.state == PlayerStateConst.PLAYER_DEAD) {
|
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) {
|
} else if (consented) {
|
||||||
throw new Error('consented leave')
|
throw new Error('consented leave')
|
||||||
} else {
|
} else {
|
||||||
|
@ -79,7 +79,7 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
|
|||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (this.state.cards.size > 1) {
|
if (this.state.cards.size > 1 || this.state.cards.size == 0) {
|
||||||
this.room.send(client, 'discard_card_s2c', {
|
this.room.send(client, 'discard_card_s2c', {
|
||||||
errcode: 6,
|
errcode: 6,
|
||||||
errmsg: '不符合吃牌规则'
|
errmsg: '不符合吃牌规则'
|
||||||
@ -104,6 +104,10 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
|
|||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// 吃掉牌后删除state.cards中的牌
|
||||||
|
for (let [key, val] of this.state.cards) {
|
||||||
|
this.state.cards.delete(key)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!gameUtil.checkDiscard(tmpCards, new GameEnv().selfEatCount)) {
|
if (!gameUtil.checkDiscard(tmpCards, new GameEnv().selfEatCount)) {
|
||||||
this.room.send(client, 'discard_card_s2c', {
|
this.room.send(client, 'discard_card_s2c', {
|
||||||
@ -112,9 +116,6 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
|
|||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for (let [key, val] of this.state.cards) {
|
|
||||||
this.state.cards.delete(key)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -122,10 +123,17 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
|
|||||||
stopDrawCardClock(this.room, player)
|
stopDrawCardClock(this.room, player)
|
||||||
|
|
||||||
for (let card of tmpCards) {
|
for (let card of tmpCards) {
|
||||||
this.state.cards.set(card.id + '', card)
|
|
||||||
player.cardQueue.push(card)
|
player.cardQueue.push(card)
|
||||||
gameUtil.deleteCardFromPlayer(player, card.id)
|
gameUtil.deleteCardFromPlayer(player, card.id)
|
||||||
}
|
}
|
||||||
|
// 如果当前出的牌只有一张, 且是法术牌或者随从牌, 则替换state.cards中的牌
|
||||||
|
if (tmpCards.length == 1 && (tmpCards[0].type == CardType.general || tmpCards[0].type == CardType.variable_unit)) {
|
||||||
|
for (let [key, val] of this.state.cards) {
|
||||||
|
this.state.cards.delete(key)
|
||||||
|
}
|
||||||
|
let card = tmpCards[0]
|
||||||
|
this.state.cards.set(card.id + '', card)
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 这说明是当前轮正常出牌,
|
* 这说明是当前轮正常出牌,
|
||||||
* 如果出一张牌的话, 进入胡牌轮
|
* 如果出一张牌的话, 进入胡牌轮
|
||||||
@ -138,8 +146,8 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
|
|||||||
})
|
})
|
||||||
const singleEat = !!this.state.rules.get(RULE_SINGLEEAT)
|
const singleEat = !!this.state.rules.get(RULE_SINGLEEAT)
|
||||||
if (cards.length === 1
|
if (cards.length === 1
|
||||||
&& !(singleEat && tmpCards.length == 1 && (tmpCards[0].type == 1 || tmpCards[0].type == 11))) {
|
&& !(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])
|
let time = this.room.battleMan.onCardDiscarded(player, cardArr[0])
|
||||||
await this.delay(time)
|
await this.delay(time)
|
||||||
// 20210219 修改: 出单张牌后直接进入下个玩家的出牌时间
|
// 20210219 修改: 出单张牌后直接进入下个玩家的出牌时间
|
||||||
@ -150,7 +158,7 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
|
|||||||
// }
|
// }
|
||||||
return [new Wait().setPayload(new GameEnv().emptyRoundTime), new TurnEndCommand()]
|
return [new Wait().setPayload(new GameEnv().emptyRoundTime), new TurnEndCommand()]
|
||||||
} else {
|
} else {
|
||||||
let cardArr: Card[] = [...this.state.cards.values()]
|
let cardArr: Card[] = [...player.cardQueue.values()]
|
||||||
let self = this
|
let self = this
|
||||||
let cardMsg: any = { player: player.id, errcode: 0, errmsg: '' }
|
let cardMsg: any = { player: player.id, errcode: 0, errmsg: '' }
|
||||||
if (targetCard) {
|
if (targetCard) {
|
||||||
|
@ -41,6 +41,21 @@ export class SelectPetCommand extends Command<CardGameState, {
|
|||||||
let eff_cnt = 0 // 效果卡数量
|
let eff_cnt = 0 // 效果卡数量
|
||||||
let dbpt_cnt = 0 // 点数翻倍卡数量
|
let dbpt_cnt = 0 // 点数翻倍卡数量
|
||||||
let transCount = 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) {
|
for (let eCardId of effCards) {
|
||||||
if (!player.cards.has(eCardId + '')) {
|
if (!player.cards.has(eCardId + '')) {
|
||||||
continue
|
continue
|
||||||
@ -59,21 +74,7 @@ export class SelectPetCommand extends Command<CardGameState, {
|
|||||||
if (effectRate && transCount) {
|
if (effectRate && transCount) {
|
||||||
eff_cnt += (transCount / effectRate | 0)
|
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;
|
//停止选随从计时, 并更新player.extraTime;
|
||||||
let elapsedTime = this.room.stopSchedule(ClockNameConst.SELECT_PET)
|
let elapsedTime = this.room.stopSchedule(ClockNameConst.SELECT_PET)
|
||||||
if (elapsedTime >= 0) {
|
if (elapsedTime >= 0) {
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
import { Schema, MapSchema, type } from "@colyseus/schema";
|
import { MapSchema, Schema, type } from '@colyseus/schema'
|
||||||
import {Player} from "./Player";
|
import { Player } from './Player'
|
||||||
import {Card} from "./Card";
|
import { Card } from './Card'
|
||||||
import {GameStateConst} from "../../constants/GameStateConst";
|
import { GameStateConst } from '../../constants/GameStateConst'
|
||||||
|
|
||||||
|
|
||||||
export class CardGameState extends Schema {
|
export class CardGameState extends Schema {
|
||||||
|
|
||||||
@type({ map: Player })
|
@type({ map: Player })
|
||||||
players = new MapSchema<Player>();
|
players = new MapSchema<Player>()
|
||||||
/**
|
/**
|
||||||
* 游戏阶段, 值定义查看 GameStateConst.ts
|
* 游戏阶段, 值定义查看 GameStateConst.ts
|
||||||
* 1: 等待玩家准备
|
* 1: 等待玩家准备
|
||||||
@ -16,35 +16,35 @@ export class CardGameState extends Schema {
|
|||||||
* 4: 游戏中吃牌后的选随从轮
|
* 4: 游戏中吃牌后的选随从轮
|
||||||
* 9: 游戏结束
|
* 9: 游戏结束
|
||||||
*/
|
*/
|
||||||
@type("number")
|
@type('number')
|
||||||
gameState: number = GameStateConst.STATE_WAIT_JOIN;
|
gameState: number = GameStateConst.STATE_WAIT_JOIN
|
||||||
|
|
||||||
@type("string")
|
@type('string')
|
||||||
currentTurn: string;
|
currentTurn: string
|
||||||
/**
|
/**
|
||||||
* 用于替换currentTurn的字段,
|
* 用于替换currentTurn的字段,
|
||||||
* 格式: playerId:eatCount
|
* 格式: playerId:eatCount
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
@type("string")
|
@type('string')
|
||||||
playerTurn: string;
|
playerTurn: string
|
||||||
/**
|
/**
|
||||||
* currentTurn当中当前玩家吃牌次数
|
* currentTurn当中当前玩家吃牌次数
|
||||||
* @type {number}
|
* @type {number}
|
||||||
*/
|
*/
|
||||||
@type("number")
|
@type('number')
|
||||||
eatCount: number;
|
eatCount: number
|
||||||
/**
|
/**
|
||||||
* 用于吃牌时的计轮, 只有在gameState==3的时候才需要判断
|
* 用于吃牌时的计轮, 只有在gameState==3的时候才需要判断
|
||||||
*/
|
*/
|
||||||
@type("string")
|
@type('string')
|
||||||
subTurn: string;
|
subTurn: string
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 轮次
|
* 轮次
|
||||||
*/
|
*/
|
||||||
@type("number")
|
@type('number')
|
||||||
round: number;
|
round: number
|
||||||
/**
|
/**
|
||||||
* 游戏模式
|
* 游戏模式
|
||||||
* 1: 匹配
|
* 1: 匹配
|
||||||
@ -52,57 +52,57 @@ export class CardGameState extends Schema {
|
|||||||
* 3: 娱乐
|
* 3: 娱乐
|
||||||
* @type {number}
|
* @type {number}
|
||||||
*/
|
*/
|
||||||
@type("number")
|
@type('number')
|
||||||
mode: number;
|
mode: number
|
||||||
/**
|
/**
|
||||||
* 当局游戏卡组队列
|
* 当局游戏卡组队列
|
||||||
*/
|
*/
|
||||||
cardQueue: Card[] = [];
|
cardQueue: Card[] = []
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上轮玩家出的牌
|
* 上轮玩家出的牌
|
||||||
*/
|
*/
|
||||||
@type({map: Card})
|
@type({ map: Card })
|
||||||
cards = new MapSchema<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
|
* 当前牌局扩展卡库当前最大的card id
|
||||||
*/
|
*/
|
||||||
maxCardId = 0;
|
maxCardId = 0
|
||||||
|
|
||||||
@type({map: "number"})
|
@type({ map: 'number' })
|
||||||
rules = new MapSchema<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);
|
|
||||||
}
|
|
||||||
|
|
||||||
get advMode() {
|
get advMode() {
|
||||||
return this.mode == 1 || this.mode == 2
|
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})
|
@type({map: Card})
|
||||||
cards = new MapSchema<Card>();
|
cards = new MapSchema<Card>();
|
||||||
|
/**
|
||||||
|
* 公开的手牌数据
|
||||||
|
* @type {SetSchema<string>}
|
||||||
|
*/
|
||||||
@type({set: "string"})
|
@type({set: "string"})
|
||||||
cardSet = new SetSchema<string>();
|
cardSet = new SetSchema<string>();
|
||||||
|
|
||||||
|
@ -227,7 +227,7 @@ let assistantUtil = {
|
|||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
async selectPet(dstPlayer: Player, state: CardGameState) {
|
async selectPet(dstPlayer: Player, state: CardGameState) {
|
||||||
let cards = [...state.cards.values()]
|
let cards = [...dstPlayer.cardQueue.values()]
|
||||||
let result: Card
|
let result: Card
|
||||||
let effectMap: Map<number, EffectCardCfg> = global.$cfg.get(BaseConst.EFFECTCARD)
|
let effectMap: Map<number, EffectCardCfg> = global.$cfg.get(BaseConst.EFFECTCARD)
|
||||||
let spellCards: Card[] = []
|
let spellCards: Card[] = []
|
||||||
|
Loading…
x
Reference in New Issue
Block a user