card_svr/src/rooms/RoomExtMethod.ts
2020-12-08 16:06:29 +08:00

91 lines
3.3 KiB
TypeScript

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;
}
}
});