diff --git a/src/rooms/logic/Handler/BattleHandler.ts b/src/rooms/logic/Handler/BattleHandler.ts index af657b9..a09b4ff 100644 --- a/src/rooms/logic/Handler/BattleHandler.ts +++ b/src/rooms/logic/Handler/BattleHandler.ts @@ -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; } diff --git a/src/rooms/logic/Handler/PlayerHandler.ts b/src/rooms/logic/Handler/PlayerHandler.ts index 43ec42b..e709328 100644 --- a/src/rooms/logic/Handler/PlayerHandler.ts +++ b/src/rooms/logic/Handler/PlayerHandler.ts @@ -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)); } }); } diff --git a/src/rooms/logic/skill/Skill.ts b/src/rooms/logic/skill/Skill.ts index 12833cb..7940aa7 100644 --- a/src/rooms/logic/skill/Skill.ts +++ b/src/rooms/logic/skill/Skill.ts @@ -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()){ diff --git a/src/rooms/logic/skill/SkillParam.ts b/src/rooms/logic/skill/SkillParam.ts index c539e3c..cc1570e 100644 --- a/src/rooms/logic/skill/SkillParam.ts +++ b/src/rooms/logic/skill/SkillParam.ts @@ -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; };