91 lines
3.3 KiB
TypeScript
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;
|
|
}
|
|
}
|
|
});
|