增加玩家死亡时onPlayerDead的调用

This commit is contained in:
zhl 2020-12-08 16:25:18 +08:00
parent 9528d7296f
commit 3de7c13212
4 changed files with 31 additions and 15 deletions

View File

@ -15,7 +15,7 @@ Object.defineProperties(Room.prototype, {
let player1 = this.state.players.get(dstplayer); let player1 = this.state.players.get(dstplayer);
let tmpCards = gameUtil.removeCard(player1, count); let tmpCards = gameUtil.removeCard(player1, count);
let player0 = this.state.players.get(srcplayer); let player0 = this.state.players.get(srcplayer);
gameUtil.addCardToPlayer(player0, tmpCards); gameUtil.addCardToPlayer(this, player0, tmpCards, player1);
let cardIds = tmpCards.map(card => card.id); let cardIds = tmpCards.map(card => card.id);
let client = this.getClient(player0); let client = this.getClient(player0);
//广播一个偷卡成功信息, 并私信一个偷卡详情给当前玩家 //广播一个偷卡成功信息, 并私信一个偷卡详情给当前玩家
@ -63,7 +63,7 @@ Object.defineProperties(Room.prototype, {
return false; return false;
} }
let player2 = fromplayer ? this.state.players.get(fromplayer) : null; let player2 = fromplayer ? this.state.players.get(fromplayer) : null;
let cards = gameUtil.drawCard(this.state.cardQueue, player, count, player2); let cards = gameUtil.drawCard(this, this.state.cardQueue, player, count, player2);
let client = this.getClient(dstplayer); let client = this.getClient(dstplayer);
let sData = { let sData = {
player: dstplayer, player: dstplayer,
@ -83,8 +83,19 @@ Object.defineProperties(Room.prototype, {
updateHp: { updateHp: {
value: function (dstplayer: string, hp: number): number { value: function (dstplayer: string, hp: number): number {
let player = this.state.players.get(dstplayer); let player = this.state.players.get(dstplayer);
if (!player) error("updateHp 未找到玩家")
return 0; if (player.state === PlayerStateConst.PLAYER_DEAD) {
return 0;
} else {
let dstHp = player.hp + hp;
if (dstHp <= 0) {
dstHp = 0;
player.state = PlayerStateConst.PLAYER_DEAD;
this.battleMan.onPlayerDead(player);
}
player.hp = dstHp;
}
return player.hp;
} }
} }
}); });

View File

@ -10,6 +10,7 @@ import {PlayerStateConst} from "../../constants/PlayerStateConst";
import {Player} from "../schema/Player"; import {Player} from "../schema/Player";
import gameUtil from "../../utils/game.util"; import gameUtil from "../../utils/game.util";
import {PartCompare, PartResultMsg} from "../../message/PartResult"; import {PartCompare, PartResultMsg} from "../../message/PartResult";
import {Room} from "colyseus";
/** /**
* *
@ -37,7 +38,7 @@ class CompareResult {
} }
} }
const comparePlayer = function (p0: Player, p1: Player): CompareResult { const comparePlayer = function (room: Room, p0: Player, p1: Player): CompareResult {
let s0 = gameUtil.calcTotalAp(p0); let s0 = gameUtil.calcTotalAp(p0);
let s1 = gameUtil.calcTotalAp(p1); let s1 = gameUtil.calcTotalAp(p1);
let r: CompareResult = new CompareResult(p0, p1); let r: CompareResult = new CompareResult(p0, p1);
@ -61,6 +62,7 @@ const comparePlayer = function (p0: Player, p1: Player): CompareResult {
if (p1.hp <= 0) { if (p1.hp <= 0) {
p1.hp = 0; p1.hp = 0;
p1.state = PlayerStateConst.PLAYER_DEAD; p1.state = PlayerStateConst.PLAYER_DEAD;
room.battleMan.onPlayerDead(p1);
} else { } else {
r.next.set(1, p1); r.next.set(1, p1);
} }
@ -73,6 +75,7 @@ const comparePlayer = function (p0: Player, p1: Player): CompareResult {
if (p0.hp <= 0) { if (p0.hp <= 0) {
p0.hp = 0; p0.hp = 0;
p0.state = PlayerStateConst.PLAYER_DEAD; p0.state = PlayerStateConst.PLAYER_DEAD;
room.battleMan.onPlayerDead(p0);
} else { } else {
r.next.set(0, p0); r.next.set(0, p0);
} }
@ -102,18 +105,18 @@ export class PartResultCommand extends Command<CardGameState, {}> {
} }
} }
let result = []; let result = [];
let r0 = comparePlayer(t0[0], t1[0]); let r0 = comparePlayer(this.room, t0[0], t1[0]);
let obj0 = new PartCompare(r0.p0.id, r0.p1.id, r0.result, 0, r0.val); let obj0 = new PartCompare(r0.p0.id, r0.p1.id, r0.result, 0, r0.val);
result.push(obj0) result.push(obj0)
let r1 = comparePlayer(t0[1], t1[1]); let r1 = comparePlayer(this.room, t0[1], t1[1]);
let obj1 = new PartCompare(r1.p0.id, r1.p0.id, r1.result, 0, r1.val); let obj1 = new PartCompare(r1.p0.id, r1.p0.id, r1.result, 0, r1.val);
result.push(obj1) result.push(obj1)
if (r0.result == CompareEnum.P0DEAD && r1.next.has(0)) { if (r0.result == CompareEnum.P0DEAD && r1.next.has(0)) {
let r2 = comparePlayer(r0.p1, r1.next.get(0)); let r2 = comparePlayer(this.room, r0.p1, r1.next.get(0));
let obj2 = new PartCompare(r2.p0.id, r2.p0.id, r2.result, 0, r2.val); let obj2 = new PartCompare(r2.p0.id, r2.p0.id, r2.result, 0, r2.val);
result.push(obj2) result.push(obj2)
} else if (r0.result == CompareEnum.P1DEAD && r1.next.has(1)) { } else if (r0.result == CompareEnum.P1DEAD && r1.next.has(1)) {
let r2 = comparePlayer(r0.p0, r1.next.get(1)); let r2 = comparePlayer(this.room, r0.p0, r1.next.get(1));
let obj2 = new PartCompare(r2.p0.id, r2.p0.id, r2.result, 0, r2.val); let obj2 = new PartCompare(r2.p0.id, r2.p0.id, r2.result, 0, r2.val);
result.push(obj2) result.push(obj2)
} }
@ -127,7 +130,6 @@ export class PartResultCommand extends Command<CardGameState, {}> {
deadCount1 ++; deadCount1 ++;
} }
} }
//TODO: onPlayerDead
const roundNum = singleton(GameEnv).duelRoundNum; const roundNum = singleton(GameEnv).duelRoundNum;
const totalRound = roundNum * singleton(GameEnv).maxDuelNum; const totalRound = roundNum * singleton(GameEnv).maxDuelNum;
if ((deadCount0 == 2 || deadCount1 == 2) || (this.state.round >= totalRound - 1)) { // 游戏结束 if ((deadCount0 == 2 || deadCount1 == 2) || (this.state.round >= totalRound - 1)) { // 游戏结束

View File

@ -65,7 +65,6 @@ export class Player extends Schema {
*/ */
countPresent: number; countPresent: number;
//TODO: set hp, ap from cfg
constructor(id: string, heroId: number, team: number) { constructor(id: string, heroId: number, team: number) {
super(); super();
this.id = id; this.id = id;

View File

@ -6,6 +6,7 @@ import {BaseConst} from "../constants/BaseConst";
import {SystemCardCfg} from "../cfg/parsers/SystemCardCfg"; import {SystemCardCfg} from "../cfg/parsers/SystemCardCfg";
import {EffectCardCfg} from "../cfg/parsers/EffectCardCfg"; import {EffectCardCfg} from "../cfg/parsers/EffectCardCfg";
import {error} from "../common/Debug"; import {error} from "../common/Debug";
import {Room} from "colyseus";
let gameUtil = { let gameUtil = {
/** /**
@ -91,18 +92,18 @@ let gameUtil = {
}, },
/** /**
* *
* @param room
* @param cardArr * @param cardArr
* @param player * @param player
* @param count * @param count
* @param fromplayer * @param fromplayer
*/ */
drawCard(cardArr: Card[], player: Player, count: number, fromplayer?: Player): Card[] { drawCard(room: Room, cardArr: Card[], player: Player, count: number, fromplayer?: Player): Card[] {
let cards: Card[] = []; let cards: Card[] = [];
for (let i = 0; i < count; i++) { for (let i = 0; i < count; i++) {
cards.push(cardArr.pop()); cards.push(cardArr.pop());
} }
//TODO: this.addCardToPlayer(room, player, cards, fromplayer);
this.addCardToPlayer(player, cards);
return cards; return cards;
}, },
/** /**
@ -122,15 +123,18 @@ let gameUtil = {
}, },
/** /**
* *
* @param room
* @param player * @param player
* @param cards * @param cards
* @param fromplayer
*/ */
addCardToPlayer(player: Player, cards: Card[]) { addCardToPlayer(room: Room, player: Player, cards: Card[], fromplayer?: Player) {
for (let card of cards) { for (let card of cards) {
player.cards.set(card.id + '', card); player.cards.set(card.id + '', card);
player.cardSet.add(card.id + ''); player.cardSet.add(card.id + '');
} }
player.countTotal += cards.length; player.countTotal += cards.length;
room.battleMan.onCardGetted(player, cards, fromplayer);
}, },
/** /**
* *