Merge branch 'second' of http://git.kingsome.cn/node/card_svr into second

This commit is contained in:
yuexin 2020-12-25 11:56:41 +08:00
commit cf31b56e3b
5 changed files with 36 additions and 15 deletions

View File

@ -46,7 +46,6 @@ export class Robot {
addListeners() { addListeners() {
let self = this; let self = this;
this.room.onMessage("*", (type, data) => { this.room.onMessage("*", (type, data) => {
debug("[ROBOT] received message:", type, "=>", data);
switch (type) { switch (type) {
case 'draw_card_s2c': case 'draw_card_s2c':
// if (data.player == self.sessionId) { // if (data.player == self.sessionId) {
@ -57,6 +56,7 @@ export class Robot {
break; break;
case 'eat_card_s2c': case 'eat_card_s2c':
if (data.errcode == 0 && data.player == self.sessionId) { if (data.errcode == 0 && data.player == self.sessionId) {
debug(`eat_success: ${self.sessionId}`);
self.selectPet(); self.selectPet();
} }
break; break;
@ -64,7 +64,7 @@ export class Robot {
}); });
this.room.onLeave(function () { this.room.onLeave(function () {
debug("[ROBOT] LEFT ROOM", arguments); debug("LEFT ROOM", arguments);
self.room.removeAllListeners(); self.room.removeAllListeners();
self.room.leave(); self.room.leave();
}); });
@ -165,6 +165,7 @@ export class Robot {
return; return;
} }
let cardIds = cards.map(o => o.id); let cardIds = cards.map(o => o.id);
log(`discard: ${self.sessionId} ${cardIds}`);
self.reply('discard_card_c2s', { self.reply('discard_card_c2s', {
cards: cardIds cards: cardIds
}); });
@ -200,7 +201,7 @@ export class Robot {
* @private * @private
*/ */
private eatCard(cardIds: number[], target: number) { private eatCard(cardIds: number[], target: number) {
log(`${this.sessionId} 吃牌 ${cardIds} -> ${target}`); log(`eta_card: ${this.sessionId} ${cardIds} -> ${target}`);
this.reply('eat_card_c2s', { this.reply('eat_card_c2s', {
cards: cardIds, cards: cardIds,
target target

View File

@ -100,7 +100,7 @@ export class RobotClient implements Client {
} }
public send(messageOrType: any, messageOrOptions?: any | ISendOptions, options?: ISendOptions) { public send(messageOrType: any, messageOrOptions?: any | ISendOptions, options?: ISendOptions) {
log(`receive server msg: ${messageOrType}, ${messageOrOptions}`); // log(`receive server msg: ${messageOrType}, ${messageOrOptions}`);
let self = this; let self = this;
if (!this.active) { if (!this.active) {
return; return;
@ -142,6 +142,7 @@ export class RobotClient implements Client {
return; return;
} }
let cardIds = cards.map(o => o.id); let cardIds = cards.map(o => o.id);
log(`discard: ${self.sessionId} ${cardIds}`);
self.reply('discard_card_c2s', { self.reply('discard_card_c2s', {
cards: cardIds cards: cardIds
}); });

View File

@ -113,6 +113,7 @@ Object.defineProperties(Room.prototype, {
return 0; return 0;
} else { } else {
let dstHp = player.hp + (hp | 0); let dstHp = player.hp + (hp | 0);
debugRoom(`更新血量: ${player.id} ${player.hp} -> ${hp}`);
if (dstHp <= 0) { if (dstHp <= 0) {
dstHp = 0; dstHp = 0;
this.dispatcher.dispatch(new PlayDeadCommand(), {player: player}); this.dispatcher.dispatch(new PlayDeadCommand(), {player: player});

View File

@ -20,7 +20,7 @@ export class BeginGameCommand extends Command<CardGameState, {}> {
let cardAll = card0.concat(card1); let cardAll = card0.concat(card1);
cardAll.randomSort(); cardAll.randomSort();
this.state.cardQueue = cardAll; this.state.cardQueue = cardAll;
let i = 1; let i = 0;
for (let [id] of this.state.players) { for (let [id] of this.state.players) {
this.room.addCard(id, new GameEnv().playerInitNums[i++], 0); this.room.addCard(id, new GameEnv().playerInitNums[i++], 0);
} }

View File

@ -10,6 +10,7 @@ import {HeroCfg} from "../cfg/parsers/HeroCfg";
import {EffectType} from "../cfg/enums/EffectType"; import {EffectType} from "../cfg/enums/EffectType";
import {CardType} from "../cfg/enums/CardType"; import {CardType} from "../cfg/enums/CardType";
import {GameEnv} from "../cfg/GameEnv"; import {GameEnv} from "../cfg/GameEnv";
import {error, robotLog} from "../common/Debug";
let assistantUtil = { let assistantUtil = {
@ -151,28 +152,44 @@ let assistantUtil = {
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[] = [];
let petCards: Card[] = [];
// 优先取随从 // 优先取随从
let petCount = 1; let petCount = 0;
for (let [,pet] of dstPlayer.pets) { for (let [,pet] of dstPlayer.pets) {
if (pet.state == 1) petCount ++; if (pet.state == 1 && !pet.isHero) petCount ++;
} }
let noMorePet = petCount >= new GameEnv().maxPlayerPetCount; let noMorePet = petCount >= new GameEnv().maxPlayerPetCount;
let noPet = Math.random2(0, 100) > 70;
for (let card of cards) { for (let card of cards) {
let effect = effectMap.get(card.effect); if (card.type == CardType.variable_unit) {
// if (effect.type_id == EffectType.unit && dstPlayer.unitCfgs.has(card.effect + '')) { petCards.push(card);
if (effect.type_id == EffectType.unit && !noMorePet) { } else if (card.type == CardType.general) {
result = card;
break;
} else if (effect.type_id == EffectType.skill) {
spellCards.push(card); spellCards.push(card);
} }
} }
if (!result) { if (!noMorePet && !noPet && petCards.length > 0) {
result = petCards.randomOne();
}
if (!result && spellCards.length > 0) {
result = spellCards.randomOne(); result = spellCards.randomOne();
} }
let oldpos = -1;
if (!result && petCards.length > 0) {
result = petCards.randomOne();
if (noMorePet) {
oldpos = 1;
}
}
if (!result) { if (!result) {
error(`无法选择随从或法术, 随从数: ${petCount}, 法术牌数量: ${spellCards.length}`);
return null; return null;
} }
robotLog(`select_pet ${dstPlayer.id}: ${result.effect} 类型: ${effectMap.get(result.effect).type_id == EffectType.skill ? '法术' : '随从'}`)
let targetType: SkillTargetType = CfgMan.getTargetByCard(result.effect); let targetType: SkillTargetType = CfgMan.getTargetByCard(result.effect);
let targetPlayer; let targetPlayer;
let targetPos; let targetPos;
@ -224,7 +241,8 @@ let assistantUtil = {
card: result.id, card: result.id,
player: targetPlayer?.id, player: targetPlayer?.id,
pos: targetPos, pos: targetPos,
effCards effCards,
oldpos
} }
}, },