修改判断吃和胡根据配表
This commit is contained in:
parent
95a71b7082
commit
54e3d589c1
@ -50,6 +50,12 @@ export class GameEnv {
|
|||||||
public robotActTimeMax: number;
|
public robotActTimeMax: number;
|
||||||
// 队友死亡后,补牌数量
|
// 队友死亡后,补牌数量
|
||||||
public teamDeadAddNum: number;
|
public teamDeadAddNum: number;
|
||||||
|
// 胡牌张数(自摸)
|
||||||
|
public selfEatCount: number;
|
||||||
|
// 胡牌张数(吃牌)
|
||||||
|
public otherEatCount: number;
|
||||||
|
// 轮空轮的间隔时间
|
||||||
|
public emptyRoundTime: number;
|
||||||
|
|
||||||
public init(data: Map<number, BaseCfg>) {
|
public init(data: Map<number, BaseCfg>) {
|
||||||
this.initCardNum = data.get(BaseConst.INIT_CARD_NUM).value;
|
this.initCardNum = data.get(BaseConst.INIT_CARD_NUM).value;
|
||||||
@ -75,5 +81,8 @@ export class GameEnv {
|
|||||||
this.robotActTimeMin = data.get(BaseConst.ROBOT_ACTTIME_MIN).value;
|
this.robotActTimeMin = data.get(BaseConst.ROBOT_ACTTIME_MIN).value;
|
||||||
this.robotActTimeMax = data.get(BaseConst.ROBOT_ACTTIME_MAX).value;
|
this.robotActTimeMax = data.get(BaseConst.ROBOT_ACTTIME_MAX).value;
|
||||||
this.teamDeadAddNum = data.get(BaseConst.TEAM_DEAD_ADDNUM).value;
|
this.teamDeadAddNum = data.get(BaseConst.TEAM_DEAD_ADDNUM).value;
|
||||||
|
this.selfEatCount = data.get(BaseConst.SELF_EAT_COUNT).value;
|
||||||
|
this.otherEatCount = data.get(BaseConst.OTHER_EAT_COUNT).value;
|
||||||
|
this.emptyRoundTime = data.get(BaseConst.EMPTY_ROUND_TIME).value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,14 @@ export class BaseConst {
|
|||||||
public static readonly ROBOT_ACTTIME_MAX = 99022;
|
public static readonly ROBOT_ACTTIME_MAX = 99022;
|
||||||
// 队友死亡后,补牌数量
|
// 队友死亡后,补牌数量
|
||||||
public static readonly TEAM_DEAD_ADDNUM = 99023
|
public static readonly TEAM_DEAD_ADDNUM = 99023
|
||||||
|
// 胡牌张数(自摸)
|
||||||
|
public static readonly SELF_EAT_COUNT = 99024
|
||||||
|
// 胡牌张数(吃牌)
|
||||||
|
public static readonly OTHER_EAT_COUNT = 99025
|
||||||
|
// 轮空轮的间隔时间
|
||||||
|
public static readonly EMPTY_ROUND_TIME = 99026
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,6 +8,8 @@ import {GameEnv} from "../../cfg/GameEnv";
|
|||||||
import {debugRoom} from "../../common/Debug";
|
import {debugRoom} from "../../common/Debug";
|
||||||
import {TurnEndCommand} from "./TurnEndCommand";
|
import {TurnEndCommand} from "./TurnEndCommand";
|
||||||
import {Card} from "../schema/Card";
|
import {Card} from "../schema/Card";
|
||||||
|
import {Wait} from "./Wait";
|
||||||
|
import {CardType} from "../../cfg/enums/CardType";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 出牌
|
* 出牌
|
||||||
@ -38,7 +40,7 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
|
|||||||
for (let id of cards) {
|
for (let id of cards) {
|
||||||
tmpCards.push(player.cards.get(id + ''));
|
tmpCards.push(player.cards.get(id + ''));
|
||||||
}
|
}
|
||||||
if (!gameUtil.checkDiscard(tmpCards)) {
|
if (!gameUtil.checkDiscard(tmpCards, new GameEnv().selfEatCount)) {
|
||||||
this.room.send(client,'discard_card_s2c', {errcode: 4, errmsg: '出牌不符合规则'});
|
this.room.send(client,'discard_card_s2c', {errcode: 4, errmsg: '出牌不符合规则'});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -68,12 +70,12 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
|
|||||||
if (cards.length === 1) {
|
if (cards.length === 1) {
|
||||||
let cardArr: Card[] = [...this.state.cards.values()];
|
let cardArr: Card[] = [...this.state.cards.values()];
|
||||||
this.room.battleMan.onCardDiscarded(player, cardArr[0])
|
this.room.battleMan.onCardDiscarded(player, cardArr[0])
|
||||||
return [new NextSubCommand()];
|
|
||||||
// if (cardArr[0].type == 1) {
|
|
||||||
// return [new NextSubCommand()];
|
// return [new NextSubCommand()];
|
||||||
// } else {
|
if (cardArr[0].type == CardType.general || cardArr[0].type == CardType.variable_unit) {
|
||||||
// return [new Wait().setPayload(3000), new TurnEndCommand()];
|
return [new NextSubCommand()];
|
||||||
// }
|
} else {
|
||||||
|
return [new Wait().setPayload(new GameEnv().emptyRoundTime), new TurnEndCommand()];
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
let cardArr: Card[] = [...this.state.cards.values()];
|
let cardArr: Card[] = [...this.state.cards.values()];
|
||||||
this.room.battleMan.onCardLinkOver(player, cardArr);
|
this.room.battleMan.onCardLinkOver(player, cardArr);
|
||||||
|
@ -4,6 +4,7 @@ import {Client} from "colyseus";
|
|||||||
import gameUtil from "../../utils/game.util";
|
import gameUtil from "../../utils/game.util";
|
||||||
import {GameStateConst} from "../../constants/GameStateConst";
|
import {GameStateConst} from "../../constants/GameStateConst";
|
||||||
import {EatConfirmCommand} from "./EatConfirmCommand";
|
import {EatConfirmCommand} from "./EatConfirmCommand";
|
||||||
|
import {GameEnv} from "../../cfg/GameEnv";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 吃牌
|
* 吃牌
|
||||||
@ -32,7 +33,7 @@ export class EatCardCommand extends Command<CardGameState, { client: Client, car
|
|||||||
tmpCards.push(player.cards.get(id + ''));
|
tmpCards.push(player.cards.get(id + ''));
|
||||||
}
|
}
|
||||||
tmpCards.push(this.state.cards.get(target + ''));
|
tmpCards.push(this.state.cards.get(target + ''));
|
||||||
if (!gameUtil.checkDiscard(tmpCards)) {
|
if (!gameUtil.checkDiscard(tmpCards, new GameEnv().otherEatCount)) {
|
||||||
this.room.send(client,'discard_card_s2c', {errcode: 5, errmsg: '不符合吃牌规则'});
|
this.room.send(client,'discard_card_s2c', {errcode: 5, errmsg: '不符合吃牌规则'});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ let assistantUtil = {
|
|||||||
*/
|
*/
|
||||||
checkTriple(cardArr: Card[], card?: Card): Card[] {
|
checkTriple(cardArr: Card[], card?: Card): Card[] {
|
||||||
if (card) cardArr.push(card);
|
if (card) cardArr.push(card);
|
||||||
|
let maxCount = card ? new GameEnv().otherEatCount : new GameEnv().selfEatCount;
|
||||||
let pointMap: Map<number, Card[]> = new Map();
|
let pointMap: Map<number, Card[]> = new Map();
|
||||||
let cardIdSet: Set<number> = new Set();
|
let cardIdSet: Set<number> = new Set();
|
||||||
for (let c of cardArr) {
|
for (let c of cardArr) {
|
||||||
@ -40,13 +41,13 @@ let assistantUtil = {
|
|||||||
// 优先出对子
|
// 优先出对子
|
||||||
for (let [point, arr] of pointMap) {
|
for (let [point, arr] of pointMap) {
|
||||||
if (card) {
|
if (card) {
|
||||||
if (point == card.number && arr.length >= 3) {
|
if (point == card.number && arr.length >= maxCount) {
|
||||||
fetched = true;
|
fetched = true;
|
||||||
result = arr;
|
result = arr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (arr.length >= 3) {
|
if (arr.length >= maxCount) {
|
||||||
fetched = true;
|
fetched = true;
|
||||||
result = arr;
|
result = arr;
|
||||||
break;
|
break;
|
||||||
@ -71,17 +72,17 @@ let assistantUtil = {
|
|||||||
tmp.push(cur);
|
tmp.push(cur);
|
||||||
}
|
}
|
||||||
if (card) {
|
if (card) {
|
||||||
if (tmp.indexOf(card.number) >= 0 && tmp.length >= 3) {
|
if (tmp.indexOf(card.number) >= 0 && tmp.length >= maxCount) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (tmp.length >= 3) {
|
if (tmp.length >= maxCount) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tmp.length >= 3) {
|
if (tmp.length >= maxCount) {
|
||||||
let subTmp = [];
|
let subTmp = [];
|
||||||
for (let i = tmp[0] - 1; i > 0; i--) {
|
for (let i = tmp[0] - 1; i > 0; i--) {
|
||||||
if (cardIdSet.has(i)) {
|
if (cardIdSet.has(i)) {
|
||||||
|
@ -8,8 +8,9 @@ import {error} from "../common/Debug";
|
|||||||
import {Room} from "colyseus";
|
import {Room} from "colyseus";
|
||||||
import {PlayerStateConst} from "../constants/PlayerStateConst";
|
import {PlayerStateConst} from "../constants/PlayerStateConst";
|
||||||
import {GameEnv} from "../cfg/GameEnv";
|
import {GameEnv} from "../cfg/GameEnv";
|
||||||
import {GameResultCommand} from "../rooms/commands/GameResultCommand";
|
|
||||||
import {CardGameState} from "../rooms/schema/CardGameState";
|
import {CardGameState} from "../rooms/schema/CardGameState";
|
||||||
|
import {CardType} from "../cfg/enums/CardType";
|
||||||
|
import {EffectType} from "../cfg/enums/EffectType";
|
||||||
|
|
||||||
let gameUtil = {
|
let gameUtil = {
|
||||||
/**
|
/**
|
||||||
@ -27,8 +28,8 @@ let gameUtil = {
|
|||||||
let [effid, effType] = this.getRandomEffect(cfg.weightArr, effCfgMap, countMap);
|
let [effid, effType] = this.getRandomEffect(cfg.weightArr, effCfgMap, countMap);
|
||||||
let type = cfg.type_id;
|
let type = cfg.type_id;
|
||||||
// 如果效果的type_id为11, 说明是自选随从卡, 则将card的type改为11
|
// 如果效果的type_id为11, 说明是自选随从卡, 则将card的type改为11
|
||||||
if (effType == 11) {
|
if (effType == EffectType.variable_unit) {
|
||||||
type = 11;
|
type = CardType.variable_unit;
|
||||||
}
|
}
|
||||||
let card = new Card(localId++, cfg.point, type, effid);
|
let card = new Card(localId++, cfg.point, type, effid);
|
||||||
cards.push(card);
|
cards.push(card);
|
||||||
@ -202,7 +203,7 @@ let gameUtil = {
|
|||||||
addCardToPlayer(room: Room, player: Player, cards: Card[], fromplayer?: Player) {
|
addCardToPlayer(room: Room, player: Player, cards: Card[], fromplayer?: Player) {
|
||||||
for (let card of cards) {
|
for (let card of cards) {
|
||||||
// 如果card的type == 11, 说明是自选随从卡, 则替换成玩家牌组中的卡
|
// 如果card的type == 11, 说明是自选随从卡, 则替换成玩家牌组中的卡
|
||||||
if (card.type == 11) {
|
if (card.type == CardType.variable_unit) {
|
||||||
card.effect = this.getRandomServant(player);
|
card.effect = this.getRandomServant(player);
|
||||||
}
|
}
|
||||||
player.cards.set(card.id + '', card);
|
player.cards.set(card.id + '', card);
|
||||||
@ -227,7 +228,7 @@ let gameUtil = {
|
|||||||
let count = targetCards.length;
|
let count = targetCards.length;
|
||||||
for (let i = 0; i < count; i++) {
|
for (let i = 0; i < count; i++) {
|
||||||
let card = cardArr.pop();
|
let card = cardArr.pop();
|
||||||
if (card.type == 11) {
|
if (card.type == CardType.variable_unit) {
|
||||||
card.effect = this.getRandomServant(player);
|
card.effect = this.getRandomServant(player);
|
||||||
}
|
}
|
||||||
cards.push(card);
|
cards.push(card);
|
||||||
@ -239,8 +240,9 @@ let gameUtil = {
|
|||||||
/**
|
/**
|
||||||
* 检查出牌是否符合规则
|
* 检查出牌是否符合规则
|
||||||
* @param cardsLst
|
* @param cardsLst
|
||||||
|
* @param maxCount
|
||||||
*/
|
*/
|
||||||
checkDiscard(cardsLst: Card[]) {
|
checkDiscard(cardsLst: Card[], maxCount: number) {
|
||||||
if (cardsLst.length == 0 || cardsLst.length == 2) {
|
if (cardsLst.length == 0 || cardsLst.length == 2) {
|
||||||
return false
|
return false
|
||||||
} else if (cardsLst.length == 1) {
|
} else if (cardsLst.length == 1) {
|
||||||
@ -248,14 +250,14 @@ let gameUtil = {
|
|||||||
}
|
}
|
||||||
let numSet: number[] = [];
|
let numSet: number[] = [];
|
||||||
cardsLst.forEach(function (value) {
|
cardsLst.forEach(function (value) {
|
||||||
if (value.number < 11) {
|
if (value.type == CardType.general || value.type == CardType.variable_unit) {
|
||||||
numSet.push(value.number);
|
numSet.push(value.number);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (numSet.length === 1) {
|
if (numSet.length === 1) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (numSet.length < 3) {
|
if (numSet.length < maxCount) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
numSet.sort((a, b) => {
|
numSet.sort((a, b) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user