diff --git a/src/rooms/RoomExtMethod.ts b/src/rooms/RoomExtMethod.ts index 1ae6b5a..5b16cb1 100644 --- a/src/rooms/RoomExtMethod.ts +++ b/src/rooms/RoomExtMethod.ts @@ -15,7 +15,7 @@ Object.defineProperties(Room.prototype, { let player1 = this.state.players.get(dstplayer); let tmpCards = gameUtil.removeCard(player1, count); 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 client = this.getClient(player0); //广播一个偷卡成功信息, 并私信一个偷卡详情给当前玩家 @@ -63,7 +63,7 @@ Object.defineProperties(Room.prototype, { return false; } 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 sData = { player: dstplayer, @@ -83,8 +83,19 @@ Object.defineProperties(Room.prototype, { updateHp: { value: function (dstplayer: string, hp: number): number { let player = this.state.players.get(dstplayer); - - return 0; + if (!player) error("updateHp 未找到玩家") + 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; } } }); diff --git a/src/rooms/commands/PartResultCommand.ts b/src/rooms/commands/PartResultCommand.ts index 8f17380..5afc015 100644 --- a/src/rooms/commands/PartResultCommand.ts +++ b/src/rooms/commands/PartResultCommand.ts @@ -10,6 +10,7 @@ import {PlayerStateConst} from "../../constants/PlayerStateConst"; import {Player} from "../schema/Player"; import gameUtil from "../../utils/game.util"; 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 s1 = gameUtil.calcTotalAp(p1); let r: CompareResult = new CompareResult(p0, p1); @@ -61,6 +62,7 @@ const comparePlayer = function (p0: Player, p1: Player): CompareResult { if (p1.hp <= 0) { p1.hp = 0; p1.state = PlayerStateConst.PLAYER_DEAD; + room.battleMan.onPlayerDead(p1); } else { r.next.set(1, p1); } @@ -73,6 +75,7 @@ const comparePlayer = function (p0: Player, p1: Player): CompareResult { if (p0.hp <= 0) { p0.hp = 0; p0.state = PlayerStateConst.PLAYER_DEAD; + room.battleMan.onPlayerDead(p0); } else { r.next.set(0, p0); } @@ -102,18 +105,18 @@ export class PartResultCommand extends Command { } } 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); 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); result.push(obj1) 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); result.push(obj2) } 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); result.push(obj2) } @@ -127,7 +130,6 @@ export class PartResultCommand extends Command { deadCount1 ++; } } - //TODO: onPlayerDead const roundNum = singleton(GameEnv).duelRoundNum; const totalRound = roundNum * singleton(GameEnv).maxDuelNum; if ((deadCount0 == 2 || deadCount1 == 2) || (this.state.round >= totalRound - 1)) { // 游戏结束 diff --git a/src/rooms/schema/Player.ts b/src/rooms/schema/Player.ts index 9097fe4..b6fb600 100644 --- a/src/rooms/schema/Player.ts +++ b/src/rooms/schema/Player.ts @@ -65,7 +65,6 @@ export class Player extends Schema { */ countPresent: number; - //TODO: set hp, ap from cfg constructor(id: string, heroId: number, team: number) { super(); this.id = id; diff --git a/src/utils/game.util.ts b/src/utils/game.util.ts index dab6e4d..f41568b 100644 --- a/src/utils/game.util.ts +++ b/src/utils/game.util.ts @@ -6,6 +6,7 @@ import {BaseConst} from "../constants/BaseConst"; import {SystemCardCfg} from "../cfg/parsers/SystemCardCfg"; import {EffectCardCfg} from "../cfg/parsers/EffectCardCfg"; import {error} from "../common/Debug"; +import {Room} from "colyseus"; let gameUtil = { /** @@ -91,18 +92,18 @@ let gameUtil = { }, /** * 抽卡 + * @param room * @param cardArr * @param player * @param count * @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[] = []; for (let i = 0; i < count; i++) { cards.push(cardArr.pop()); } - //TODO: - this.addCardToPlayer(player, cards); + this.addCardToPlayer(room, player, cards, fromplayer); return cards; }, /** @@ -122,15 +123,18 @@ let gameUtil = { }, /** * 往玩家的卡组里添加卡 + * @param room * @param player * @param cards + * @param fromplayer */ - addCardToPlayer(player: Player, cards: Card[]) { + addCardToPlayer(room: Room, player: Player, cards: Card[], fromplayer?: Player) { for (let card of cards) { player.cards.set(card.id + '', card); player.cardSet.add(card.id + ''); } player.countTotal += cards.length; + room.battleMan.onCardGetted(player, cards, fromplayer); }, /** * 更换相同数量的卡