优化多次技能问题

This commit is contained in:
yuexin 2021-01-19 17:05:27 +08:00
parent 02a74035e3
commit fd8134cc84
4 changed files with 26 additions and 21 deletions

View File

@ -273,7 +273,7 @@ export class BattleHandler {
return bok? pet: null;
};
public buildSkillTarget(sk: Skill, src: PetHandler, dst: PetHandler | PlayerHandler): SkillTarget{
public buildSkillTarget(sk: Skill, src: PetHandler, dst: PetHandler | PlayerHandler, flag: number): SkillTarget{
if(!dst){
return null;
}
@ -284,11 +284,11 @@ export class BattleHandler {
ut = GameUnitType.PLAYER;
}
let owner = sk? sk._owner: null;
return new SkillTarget(sk, src? src._owner: owner, src, dst, ut);
return new SkillTarget(sk, src? src._owner: owner, src, dst, ut, flag);
};
public singleSkillTargets(sk: Skill, src: PetHandler, dst: PetHandler | PlayerHandler): SkillTarget[]{
let tgt = this.buildSkillTarget(sk, src, dst);
let tgt = this.buildSkillTarget(sk, src, dst, 0);
if(this.isFlowing() && tgt){
this._cacheSkills.push(tgt);
}
@ -296,7 +296,7 @@ export class BattleHandler {
};
public singleSkillTarget(sk: Skill, src: PetHandler, dst: PetHandler | PlayerHandler): SkillTarget{
let tgt = this.buildSkillTarget(sk, src, dst);
let tgt = this.buildSkillTarget(sk, src, dst, 0);
if(this.isFlowing() && tgt){
this._cacheSkills.push(tgt);
}
@ -312,7 +312,7 @@ export class BattleHandler {
return lst;
};
public getSkillTargets(skill: Skill, param: SkillParam, lastph: PlayerHandler): SkillTarget[]{
public getSkillTargets(skill: Skill, param: SkillParam, flag: number, lastph: PlayerHandler): SkillTarget[]{
let lst: SkillTarget[] = [];
let players = this.getTargetPlayers(skill._data.friendlyid, param.srcplayer, param.dstplayer, lastph);
if(players.length > 0){
@ -320,12 +320,12 @@ export class BattleHandler {
case GameUnitType.PLAYER:
if(skill._data.rangeid == SkillRangeUnitType.PLAYER_BELINKED){
this._lastlinkph && lst.push(
this.buildSkillTarget(skill, param.srcpet, this._lastlinkph)
this.buildSkillTarget(skill, param.srcpet, this._lastlinkph, flag)
);
}else{
players.forEach((item:PlayerHandler)=>{
lst.push(
this.buildSkillTarget(skill, param.srcpet, item)
this.buildSkillTarget(skill, param.srcpet, item, flag)
);
});
}
@ -333,7 +333,7 @@ export class BattleHandler {
case GameUnitType.HERO:
players.forEach((item:PlayerHandler)=>{
lst.push(
this.buildSkillTarget(skill, param.srcpet, item._self)
this.buildSkillTarget(skill, param.srcpet, item._self, flag)
);
});
break;
@ -343,12 +343,12 @@ export class BattleHandler {
let pet = this.getFinalTarget(skill._data.rangeid, players, param.dstpet, param.srcpet, skill._petowner,
skill._data.targetid, !!skill._data.ridicule, skill._data.targetid == GameUnitType.PET);
pet && lst.push(
this.buildSkillTarget(skill, param.srcpet, pet)
this.buildSkillTarget(skill, param.srcpet, pet, flag)
);
}else{
let expet = skill.getExPet(param.srcpet);
players.forEach((item: PlayerHandler)=>{
item.exportAllPets(skill, param, expet, lst);
item.exportAllPets(skill, param, expet, flag, lst);
});
}
break;
@ -960,7 +960,7 @@ export class BattleHandler {
let lastkey = '';
let cnt = 0;
skillres.forEach((item: SkillTarget)=>{
let key = item.srcskillid + '|' + item.srcplayer.getId();
let key = item.srcskillid + '|' + item.srcplayer.getId() + '|' + item.flag;
if(item.srcpet){
key += '|' + item.srcpet._idx;
}

View File

@ -137,7 +137,7 @@ export class PlayerHandler {
})
};
public exportAllPets(skill: Skill, param: SkillParam, expet: PetHandler, dst: SkillTarget[]): SkillTarget[]{
public exportAllPets(skill: Skill, param: SkillParam, expet: PetHandler, flag: number, dst: SkillTarget[]): SkillTarget[]{
if(!dst){
return null;
}
@ -148,21 +148,21 @@ export class PlayerHandler {
let lst = this._pets.reverse();
lst.forEach(element => {
if(expet != element && element.isAlive()){
dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, element, GameUnitType.PET));
dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, element, GameUnitType.PET, flag));
}
});
(expet != this._self) && dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, this._self, GameUnitType.HERO));
(expet != this._self) && dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, this._self, GameUnitType.HERO, flag));
}
break;
case GameUnitType.HERO:
(expet != this._self) && dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, this._self, GameUnitType.HERO));
(expet != this._self) && dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, this._self, GameUnitType.HERO, flag));
break;
case GameUnitType.PET:
{
let lst = this._pets.reverse();
lst.forEach(element => {
if(expet != element && element.isAlive()){
dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, element, GameUnitType.PET));
dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, element, GameUnitType.PET, flag));
}
});
}

View File

@ -224,8 +224,8 @@ export class Skill {
return this._owner._owner.singleSkillTargets(this, this._petowner, this._petowner);
};
getTargets(param: SkillParam, lastph?: PlayerHandler): SkillTarget[]{
return this._owner._owner.getSkillTargets(this, param, lastph);
getTargets(param: SkillParam, flag: number, lastph?: PlayerHandler): SkillTarget[]{
return this._owner._owner.getSkillTargets(this, param, flag, lastph);
};
getOppTargets(st: SkillTarget): SkillTarget[]{
@ -347,7 +347,7 @@ export class Skill {
for(let i = 0; i < ncount; i++){
if(bnormal){
this.setTargets(this.getTargets(param, lastph));
this.setTargets(this.getTargets(param, i + 1, lastph));
}
if(!this.isSummonSkill()){

View File

@ -88,8 +88,9 @@ export class SkillTarget{
bresok: boolean = false;
res: SkillResult[];
flag: number;
constructor(skill: Skill | number, splayer?: PlayerHandler, spet?: PetHandler, dstobj?: any, dsttype?: GameUnitType) {
constructor(skill: Skill | number, splayer?: PlayerHandler, spet?: PetHandler, dstobj?: any, dsttype?: GameUnitType, flag?: number) {
let bsk = skill instanceof Skill;
let sk = bsk? (skill as Skill): null;
let sid = !bsk? (skill as number): 0;
@ -101,6 +102,7 @@ export class SkillTarget{
this.dst = dstobj;
this.dsttype = dsttype;
this.lasttime = sk? sk._data.indicate_time: 0;
this.flag = flag? flag: 0;
};
public LoadParam(sp: SkillParam){
@ -189,7 +191,7 @@ export class SkillTarget{
};
public clone(){
return new SkillTarget(this.srcskill, this.srcplayer, this.srcpet, this.dst, this.dsttype);
return new SkillTarget(this.srcskill, this.srcplayer, this.srcpet, this.dst, this.dsttype, this.flag);
};
public oppClone(){
@ -211,6 +213,9 @@ export class SkillTarget{
st.dst = this.srcplayer;
st.dsttype = GameUnitType.PLAYER;
}
st.flag = this.flag;
return st;
};