Merge branch 'second' of http://git.kingsome.cn/node/card_svr into second

This commit is contained in:
yuexin 2020-12-21 19:58:05 +08:00
commit 46814c6a6a
7 changed files with 83 additions and 20 deletions

View File

@ -38,6 +38,17 @@ export class SelectHeroCommand extends Command<CardGameState, { client: Client,
if (unitData.base_skill1id) heroPet.skills.push(unitData.base_skill1id);
if (unitData.base_skill2id) heroPet.skills.push(unitData.base_skill2id);
if (unitData.base_skill3id) heroPet.skills.push(unitData.base_skill3id);
let petInitData: number[][] = [];
for (let i = 1; i < 10; i++) {
if (!heroData[`follower${i}id`]) {
break;
}
let subData: number[] = [];
subData.push(heroData[`follower${i}id`]);
subData.push(heroData[`follower${i}`]);
petInitData.push(subData);
}
player.unitCfgs = petInitData;
this.room.battleMan.addPlayer(player);
this.room.bSelectHero({errocode: 0, errmsg: '', player: client.sessionId, heroId: heroId});
let readyCount = 0;

View File

@ -72,7 +72,6 @@ export class SelectPetCommand extends Command<CardGameState, {client: Client,
dstpet = dstplayer.pets.get(pos+'');
}
let cardpoint = moreAp + ap;
//TODO:: 将type = 11的卡转化为实际卡
let data = {srcplayer: player, card: targetCard.effect, cardpoint, eff_cnt, dstplayer, dstpet, dbpt_cnt}
let time = this.room.battleMan.useCard(data);
await this.delay(time);

View File

@ -11,7 +11,7 @@ import { Skill } from "../skill/Skill";
import { PetHandler } from "./PetHandler";
import { SKillEffectData, SkillInfoMsg } from "message/SkillInfo";
import { PetInfo } from "message/PetInfo";
import arrUtil from "utils/array.util";
import arrUtil from "../../../utils/array.util";
export class BattleHandler {
@ -98,7 +98,7 @@ export class BattleHandler {
}
};
public getFinalTarget(ut: SkillRangeUnitType, players: PlayerHandler[], apet: PetHandler, expet: PetHandler, ct: GameUnitType,
public getFinalTarget(ut: SkillRangeUnitType, players: PlayerHandler[], apet: PetHandler, expet: PetHandler, ct: GameUnitType,
checktaunt: boolean=false): PetHandler
{
let pet = apet;
@ -351,7 +351,7 @@ export class BattleHandler {
if(!dstph){
dstph = ph;
}
let ps = new SkillParam(obj.card, pt, obj.eff_cnt, ph, null, dstph, dstpt);
ph.useCard(ps);
@ -384,7 +384,7 @@ export class BattleHandler {
/**
*
* @param aplayer
* @param aplayer
*/
public getTransEffCardRate(aplayer: Player): number{
let ph = this.getPlayer(aplayer);
@ -519,19 +519,19 @@ export class BattleHandler {
return this._room.updatePet(lst);
};
public onPlayerAddCardNotify(aplayer: PlayerHandler, count: number, maxcount: number,
public onPlayerAddCardNotify(aplayer: PlayerHandler, count: number, maxcount: number,
from?: PlayerHandler): number{
return this._room.addCard(aplayer.getId(), count, maxcount, 1, from? from.getId(): null);
};
public onPlayerStealCardNotify(srcplayer: PlayerHandler,
public onPlayerStealCardNotify(srcplayer: PlayerHandler,
dstplayer: PlayerHandler, count: number): number{
return this._room.drawCardFromPlayer(srcplayer.getId(), dstplayer.getId(), count);
};
public onPlayerAddDirectCardNotify(aplayer: PlayerHandler, count: number, cardid: number,
public onPlayerAddDirectCardNotify(aplayer: PlayerHandler, count: number, cardid: number,
from?: PlayerHandler){
return this._room.generateCard({player: aplayer.getId(), count, effectId: cardid,
return this._room.generateCard({player: aplayer.getId(), count, effectId: cardid,
fromplayer: from? from.getId(): null});
};
@ -553,7 +553,7 @@ export class BattleHandler {
tm += item.getLastTime();
skid += item.srcskillid + '|';
});
if(this.isUsingCard()){
this._sktime += tm;
}else{

View File

@ -35,6 +35,7 @@ export class Card extends Schema {
* 1: 普通牌
* 2: 效果强化卡
* 3: 点数加倍卡
* 11: 自选随从卡
*/
@type("number")
type: number;

View File

@ -65,10 +65,10 @@ export class Player extends Schema {
countPresent: number;
/**
*
* //TODO
* , , ()
* [id, ]
*/
privateCards: [];
unitCfgs: number[][];
constructor(id: string, heroId: number, team: number) {
super();

View File

@ -144,17 +144,28 @@ let assistantUtil = {
*/
async selectPet(dstPlayer: Player, state: CardGameState) {
let cards = [...state.cards.values()];
let result;
let result: Card;
let effectMap: Map<number, EffectCardCfg> = global.$cfg.get(BaseConst.EFFECTCARD);
let spellCards: Card[] = [];
// 优先取随从
for (let card of cards) {
let effect = effectMap.get(card.effect);
if (effect.type_id == 1) {
let hasCard = false;
for (let [id, weight] of dstPlayer.unitCfgs) {
if (id === card.effect) {
hasCard = true;
break;
}
}
if (effect.type_id == 1 && hasCard) {
result = card;
break;
} else if (card.type == 1) {
spellCards.push(card);
}
}
if (!result) {
result = arrUtil.randomGet(cards, 1)[0];
result = spellCards.randomOne();
}
let targetType: SkillTargetType = CfgMan.getTargetByCard(result.effect);
let targetPlayer;
@ -198,6 +209,11 @@ let assistantUtil = {
}
//TODO: 增加效果卡
let effCards: number[] = [];
for (let card of cards) {
if (card.type == 2 || card.type == 3) {
effCards.push(card.id);
}
}
return {
card: result.id,
player: targetPlayer?.id,

View File

@ -20,8 +20,13 @@ let gameUtil = {
let localId = 1;
for (let [, cfg] of numCfgMap) {
for (let i = 0; i < cfg.count; i++) {
let effid = this.getRandomEffect(cfg.weightArr, effCfgMap, countMap);
let card = new Card(localId++, cfg.point, cfg.type_id, effid);
let [effid, effType] = this.getRandomEffect(cfg.weightArr, effCfgMap, countMap);
let type = cfg.type_id;
// 如果效果的type_id为11, 说明是自选随从卡, 则将card的type改为11
if (effType == 11) {
type = 11;
}
let card = new Card(localId++, cfg.point, type, effid);
cards.push(card);
}
}
@ -46,13 +51,34 @@ let gameUtil = {
let cfg: SystemCardCfg = cfgs.randomOne();
return new Card(preCardId + 1, cfg.point, cfg.type_id, effectId);
},
/**
*
* @param player
*/
getRandomServant(player: Player) {
let total = 0;
let tmpArr: number[][] = [];
for (let [id, weight] of player.unitCfgs) {
total += weight;
tmpArr.push([id, total]);
}
let num = Math.random() * total;
let result;
for (let data of tmpArr) {
if (data[1] >= num) {
result = data[0];
break;
}
}
return result;
},
/**
* , id
* @param weightArr
* @param effCfgMap
* @param countMap
*/
getRandomEffect(weightArr: number[][], effCfgMap: Map<number, EffectCardCfg>, countMap: Map<number, number>) {
getRandomEffect(weightArr: number[][], effCfgMap: Map<number, EffectCardCfg>, countMap: Map<number, number>): number[] {
let total = 0;
let tmpArr: number[][] = [];
for (let data of weightArr) {
@ -61,11 +87,13 @@ let gameUtil = {
}
let num = Math.random() * total;
let effid;
let effType;
for (let data of tmpArr) {
if (data[1] >= num) {
let count = countMap.has(data[0]) ? countMap.get(data[0]) : 0;
if (count < effCfgMap.get(data[0]).count) {
effid = effCfgMap.get(data[0]).id;
effType = effCfgMap.get(data[0]).type_id;
countMap.set(effid, count + 1);
break;
}
@ -75,6 +103,7 @@ let gameUtil = {
for (let [id, count] of countMap) {
if (count < effCfgMap.get(id).count) {
effid = id;
effType = effCfgMap.get(effid).type_id;
countMap.set(effid, count + 1);
break
}
@ -83,7 +112,7 @@ let gameUtil = {
if (!effid) {
error('生成卡组时, 无法匹配效果卡, 请确认效果卡的最大数量是否等于点数卡总数')
}
return effid;
return [effid, effType];
},
/**
* id是否在存在
@ -168,6 +197,10 @@ let gameUtil = {
*/
addCardToPlayer(room: Room, player: Player, cards: Card[], fromplayer?: Player) {
for (let card of cards) {
// 如果card的type == 11, 说明是自选随从卡, 则替换成玩家牌组中的卡
if (card.type == 11) {
card.effect = this.getRandomServant(player);
}
player.cards.set(card.id + '', card);
player.cardSet.add(card.id + '');
}
@ -190,6 +223,9 @@ let gameUtil = {
let count = targetCards.length;
for (let i = 0; i < count; i++) {
let card = cardArr.pop();
if (card.type == 11) {
card.effect = this.getRandomServant(player);
}
cards.push(card);
player.cards.set(card.id + '', card);
player.cardSet.add(card.id + '');