增加简单的ai, 自动选择技能的目标
This commit is contained in:
parent
f19adf27f9
commit
55f7580c2c
@ -12,12 +12,14 @@ import {HeroCfg} from "../cfg/parsers/HeroCfg";
|
||||
import {EffectCardCfg} from "../cfg/parsers/EffectCardCfg";
|
||||
import CfgMan from '../rooms/logic/CfgMan';
|
||||
import {SkillTargetType} from "../rooms/logic/skill/SkillConst";
|
||||
import {Player} from "../rooms/schema/Player";
|
||||
|
||||
export class RobotClient implements Client {
|
||||
id: string;
|
||||
readyState: number;
|
||||
ref: EventEmitter;
|
||||
sessionId: string;
|
||||
selfPlayer: Player;
|
||||
state: ClientState;
|
||||
svrstate: CardGameState;
|
||||
room: Room;
|
||||
@ -29,6 +31,7 @@ export class RobotClient implements Client {
|
||||
constructor(sessionId: string, state: CardGameState, clock: Clock, onMessageHandlers: {[id: string]: (client: Client, message: any) => void}) {
|
||||
this.sessionId = sessionId;
|
||||
this.svrstate = state;
|
||||
this.selfPlayer = this.svrstate.players.get(sessionId);
|
||||
this.clock = clock;
|
||||
this.ref = new EventEmitter();
|
||||
this.onMessageHandlers = onMessageHandlers;
|
||||
@ -206,6 +209,37 @@ export class RobotClient implements Client {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 随机获取敌对玩家
|
||||
* @private
|
||||
*/
|
||||
private getEnemyPlayer(): Player {
|
||||
let enemys = [];
|
||||
for (let [,player] of this.svrstate.players) {
|
||||
if (player.team !== this.selfPlayer.team) {
|
||||
enemys.push(player);
|
||||
}
|
||||
}
|
||||
return arrUtil.randomOne(enemys);
|
||||
}
|
||||
|
||||
/**
|
||||
* 随机获取可用的随从
|
||||
* @param player
|
||||
* @private
|
||||
*/
|
||||
private getRandomPet(player: Player): number {
|
||||
let pets = [];
|
||||
for (let [, pet] of player.pets) {
|
||||
if (pet.ap > 0 && pet.state == 1)
|
||||
pets.push(pet);
|
||||
}
|
||||
let result;
|
||||
if (pets.length > 0) {
|
||||
result = arrUtil.randomOne(pets);
|
||||
}
|
||||
return result ? result.pos : -1;
|
||||
}
|
||||
private selectPet() {
|
||||
let cards = [...this.svrstate.cards.values()];
|
||||
let result;
|
||||
@ -221,20 +255,49 @@ export class RobotClient implements Client {
|
||||
result = arrUtil.randomGet(cards, 1)[0];
|
||||
}
|
||||
let targetType: SkillTargetType = CfgMan.getTargetByCard(result.id);
|
||||
let targetPlayer;
|
||||
let targetPos;
|
||||
switch (targetType) {
|
||||
case SkillTargetType.ENEMY_PLAYER:
|
||||
targetPlayer = this.getEnemyPlayer();
|
||||
break;
|
||||
case SkillTargetType.ENEMY_PET:
|
||||
for (let [,player] of this.svrstate.players) {
|
||||
if (player.team !== this.selfPlayer.team) {
|
||||
let pos = this.getRandomPet(player);
|
||||
if (pos > - 1) {
|
||||
targetPlayer = player;
|
||||
targetPos = pos;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SkillTargetType.FRIEND_PET:
|
||||
for (let [,player] of this.svrstate.players) {
|
||||
if (player.team == this.selfPlayer.team) {
|
||||
let pos = this.getRandomPet(player);
|
||||
if (pos > - 1) {
|
||||
targetPlayer = player;
|
||||
targetPos = pos;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SkillTargetType.SELF_PET:
|
||||
let pos = this.getRandomPet(this.selfPlayer);
|
||||
if (pos > - 1) {
|
||||
targetPlayer = this.selfPlayer;
|
||||
targetPos = pos;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
this.reply('select_pet_c2s', {
|
||||
card: result.id,
|
||||
player: null,
|
||||
pos: null,
|
||||
player: targetPlayer?.id,
|
||||
pos: targetPos,
|
||||
effCards: []
|
||||
})
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ import {Schema, ArraySchema, type} from "@colyseus/schema";
|
||||
export class Pet extends Schema {
|
||||
@type("number")
|
||||
id?: number;
|
||||
pos: number;
|
||||
/**
|
||||
* 当前点数
|
||||
*/
|
||||
@ -32,8 +33,9 @@ export class Pet extends Schema {
|
||||
*/
|
||||
@type("number")
|
||||
state: number;
|
||||
constructor() {
|
||||
constructor(index: number) {
|
||||
super();
|
||||
this.pos = index;
|
||||
this.ap = 0;
|
||||
}
|
||||
|
||||
|
@ -75,7 +75,7 @@ export class Player extends Schema {
|
||||
this.countTotal = 0;
|
||||
this.countPresent = 0;
|
||||
for (let i = 0; i < singleton(GameEnv).maxPlayerPetCount + 1; i++) {
|
||||
let pet = new Pet();
|
||||
let pet = new Pet(i);
|
||||
pet.state = 0;
|
||||
pet.isHero = i === 0;
|
||||
this.pets.set(i+'', pet);
|
||||
|
@ -102,6 +102,18 @@ let arrUtil = {
|
||||
}
|
||||
return shuffled.slice(min);
|
||||
},
|
||||
/**
|
||||
* 随机获取1个
|
||||
* @param arr
|
||||
*/
|
||||
randomOne<T>(arr: Array<T>) {
|
||||
let results = this.randomGet(arr, 1);
|
||||
if (results.length > 0) {
|
||||
return results[0];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 随机移除n个元素
|
||||
* @param arr
|
||||
|
Loading…
x
Reference in New Issue
Block a user