技能查找目标处理完毕

This commit is contained in:
yuexin 2020-12-18 20:16:35 +08:00
parent d4f1917639
commit d1071b08ba
3 changed files with 117 additions and 15 deletions

Binary file not shown.

View File

@ -3,13 +3,13 @@ import {Card} from "../../schema/Card";
import {CardGameState} from "../../schema/CardGameState";
import { PlayerHandler } from "./PlayerHandler";
import CfgMan from "../CfgMan";
import { EffectCardType, GameCampType, GameUnitType } from "../skill/SkillConst";
import { EffectCardType, GameCampType, GameUnitType, SkillRangeUnitType } from "../skill/SkillConst";
import { Pet } from "rooms/schema/Pet";
import {SkillParam, SkillTarget} from "../skill/SkillParam";
import { Room } from "colyseus";
import { Skill } from "../skill/Skill";
import { PetHandler } from "./PetHandler";
import { SkillInfoMsg } from "message/SkillInfo";
import { SKillEffectData, SkillInfoMsg } from "message/SkillInfo";
import { PetInfo } from "message/PetInfo";
import arrUtil from "utils/array.util";
@ -98,21 +98,73 @@ export class BattleHandler {
}
};
public getFinalTarget(players: PlayerHandler[], apet: PetHandler, ct: GameUnitType,
public getFinalTarget(ut: SkillRangeUnitType, players: PlayerHandler[], apet: PetHandler, expet: PetHandler, ct: GameUnitType,
checktaunt: boolean=false): PetHandler
{
let pet = apet;
let bok = this.petIsValid(pet, players, ct);
if(checktaunt && (!bok || !pet.isTaunt())){
for(let i = 0; i < players.length;i++){
let obj = players[i].findTauntPet();
if(obj){
pet = obj;
bok = true;
break;
let bok = false;
switch(ut){
case SkillRangeUnitType.RANDOM_ONE:
if(checktaunt){
let lst:PetHandler[] = [];
players.forEach((item:PlayerHandler)=>{
item.findAllTauntPets(lst);
});
if(lst.length > 0){
pet = arrUtil.randomOne(lst);
bok = true;
}
}
}
if(!bok){
let lst:PetHandler[] = [];
players.forEach((item:PlayerHandler)=>{
item.findAllPets(lst);
});
if(lst.length > 0){
pet = arrUtil.randomOne(lst);
bok = true;
}
}
break;
case SkillRangeUnitType.RANDOM_ONE_EXSELF:
if(checktaunt){
let lst:PetHandler[] = [];
players.forEach((item:PlayerHandler)=>{
item.findAllTauntPets(lst, expet);
});
if(lst.length > 0){
pet = arrUtil.randomOne(lst);
bok = true;
}
}
if(!bok){
let lst:PetHandler[] = [];
players.forEach((item:PlayerHandler)=>{
item.findAllPets(lst, expet);
});
if(lst.length > 0){
pet = arrUtil.randomOne(lst);
bok = true;
}
}
break;
default:
{
bok = this.petIsValid(pet, players, ct);
if(checktaunt && (!bok || !pet.isTaunt())){
for(let i = 0; i < players.length;i++){
let obj = players[i].findTauntPet();
if(obj){
pet = obj;
bok = true;
break;
}
}
}
}
break;
}
return bok? pet: null;
};
@ -134,7 +186,7 @@ export class BattleHandler {
case GameUnitType.BATTLEUNIT:
case GameUnitType.PET:
if(skill.isSingleTarget()){
let pet = this.getFinalTarget(players, param.dstpet, skill._data.targetid,
let pet = this.getFinalTarget(skill._data.rangeid, players, param.dstpet, param.srcpet, skill._data.targetid,
skill.isHurtPowerSkill());
pet && lst.push(new SkillTarget(skill, param.srcplayer, param.srcpet,
pet, pet._isHero? GameUnitType.HERO: GameUnitType.PET));
@ -228,7 +280,20 @@ export class BattleHandler {
}
break;
case GameCampType.FACE_ENEMY:
{
let bfind = false;
let player = this._room.getOppositePlayer(src.getId());
if(player){
let ph = this.getPlayer(player);
if(ph){
lst.push(ph);
bfind = true;
}
}
if(!bfind){
return this.getTargetPlayers(GameCampType.RANDOM_ENEMY, src, dst);
}
}
break;
default:
break;

View File

@ -10,6 +10,7 @@ import { Skill } from "../skill/Skill";
import { SkillParam, SkillTarget } from "../skill/SkillParam";
import SkillMan from "../skill/SkillMan";
import { Card } from "rooms/schema/Card";
import arrUtil from "utils/array.util";
export class PlayerHandler {
public _player: Player;
@ -363,7 +364,43 @@ export class PlayerHandler {
}
return this._pets.find((item: PetHandler) =>{
return item.isTaunt();
})
});
};
public findAllTauntPets(lst: PetHandler[], expet?: PetHandler): number{
if(!lst){
return -1;
}
let ncnt = 0;
if(this._self && this._self.isTaunt() && this._self != expet){
lst.push(this._self);
ncnt++;
}
this._pets.forEach((item: PetHandler) =>{
if(item.isTaunt() && this._self != expet){
lst.push(item);
ncnt++;
}
});
return ncnt;
};
public findAllPets(lst: PetHandler[], expet?: PetHandler): number{
if(!lst){
return -1;
}
let ncnt = 0;
if(this._self && this._self != expet){
lst.push(this._self);
ncnt++;
}
this._pets.forEach((item: PetHandler) =>{
if(this._self != expet){
lst.push(item);
ncnt++;
}
});
return ncnt;
};
public hasTransEffCardSkill(): boolean{