优化多次技能问题

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

View File

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