import {Client, Room} from "colyseus"; import gameUtil from "../utils/game.util"; import {singleton} from "../common/Singleton"; import {GameEnv} from "../cfg/GameEnv"; import {error} from "../common/Debug"; import {PlayerStateConst} from "../constants/PlayerStateConst"; import {Player} from "./schema/Player"; /** * 一些常用的方法 */ Object.defineProperties(Room.prototype, { drawCardFromPlayer: { value: function (srcplayer: string, dstplayer: string, count: number): number { let player1 = this.state.players.get(dstplayer); let tmpCards = gameUtil.removeCard(player1, count); let player0 = this.state.players.get(srcplayer); gameUtil.addCardToPlayer(player0, tmpCards); let cardIds = tmpCards.map(card => card.id); let client = this.getClient(player0); //广播一个偷卡成功信息, 并私信一个偷卡详情给当前玩家 let msgData = { srcplayer, dstplayer, cards: cardIds }; this.bStealCard(msgData, {except: client}); let sMsgData = { srcplayer, dstplayer, cards: tmpCards } this.sStealCard(client, sMsgData); return tmpCards.length; } }, giveUpCard: { value: function (dstplayer: string, count: number){ let player = this.state.players.get(dstplayer); let tmpCards = gameUtil.removeCard(player, count); let cardIds = tmpCards.map(card => card.id); let msgData = { player: dstplayer, cards: cardIds }; this.bRemoveCard(msgData); return true; } }, addCard: { value: function ( dstplayer: string, count: number, max_count: number, source: number = 0, fromplayer?: string) { let player = this.state.players.get(dstplayer); if (count > 0) { if (max_count > 0) { let curCount = player.cards.size; count = Math.min(count, max_count - curCount); } } else if (max_count > 0){ let curCount = player.cards.size; count = max_count - curCount; } else { error("补卡方法的参数有问题, count和max_count都为0"); return false; } let player2 = fromplayer ? this.state.players.get(fromplayer) : null; let cards = gameUtil.drawCard(this.state.cardQueue, player, count, player2); let client = this.getClient(dstplayer); let sData = { player: dstplayer, cards: cards }; this.sDrawCard(client, sData); let cardIds = cards.map(card => card.id); let bData = { player: dstplayer, cards: cardIds, source: source }; this.bDrawCard(bData, {except: client}); return true; } }, updateHp: { value: function (dstplayer: string, hp: number): number { let player = this.state.players.get(dstplayer); return 0; } } });