From fe503f7404f0c1015a1bd16497c84e17f43c5cce Mon Sep 17 00:00:00 2001 From: yuexin Date: Mon, 28 Dec 2020 17:41:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=B2=E9=94=8B=E5=8F=8D=E5=87=BB=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rooms/logic/Handler/BattleHandler.ts | 7 +++++++ src/rooms/logic/Handler/PetHandler.ts | 12 ++++++++++++ src/rooms/logic/Handler/PlayerHandler.ts | 8 +++++++- src/rooms/logic/skill/Skill.ts | 14 +++++++++----- src/rooms/logic/skill/SkillParam.ts | 22 ++++++++++++++++++++++ src/rooms/logic/skill/TriggerMan.ts | 15 +++++++++++---- 6 files changed, 68 insertions(+), 10 deletions(-) diff --git a/src/rooms/logic/Handler/BattleHandler.ts b/src/rooms/logic/Handler/BattleHandler.ts index d03c4ec..40ceb1d 100644 --- a/src/rooms/logic/Handler/BattleHandler.ts +++ b/src/rooms/logic/Handler/BattleHandler.ts @@ -363,6 +363,11 @@ export class BattleHandler { return this._cardusing; }; + public checkPets(){ + this._players.forEach((item: PlayerHandler) => { + item.checkPets(true); + }); + }; //--------------------对外接口(外部调用)---------------------------- /** * 使用卡片 @@ -493,6 +498,8 @@ export class BattleHandler { return; } sp.srcplayer && sp.srcplayer.onUseCardEnd(sp); + + this.checkPets(); }; /** diff --git a/src/rooms/logic/Handler/PetHandler.ts b/src/rooms/logic/Handler/PetHandler.ts index fd7d3b7..1526872 100644 --- a/src/rooms/logic/Handler/PetHandler.ts +++ b/src/rooms/logic/Handler/PetHandler.ts @@ -54,6 +54,8 @@ export class PetHandler { _bakBaseap: number; + _bakTotalap: number = 0; + _hasreborned: boolean = false; _orignEffCnt: number = 0; @@ -228,6 +230,8 @@ export class PetHandler { return 0; } + this._bakTotalap = this.totalAP(); + let n = -value; for(let i = 0; i < this._effhalos.length;i++){ let dv = this._effhalos[i].addHaloValue(n); @@ -277,6 +281,14 @@ export class PetHandler { return this._baseap + this.getEffHaloV(); }; + public bakTotalAP(){ + return this._bakTotalap > 0? this._bakTotalap: this.totalAP(); + }; + + public resetBakAP(){ + this._bakTotalap = this.totalAP(); + }; + public beHurt(value: number): number{ let rv = value - value * this._exredhurt; if(rv < 0){ diff --git a/src/rooms/logic/Handler/PlayerHandler.ts b/src/rooms/logic/Handler/PlayerHandler.ts index 6f16ee6..2825c8b 100644 --- a/src/rooms/logic/Handler/PlayerHandler.ts +++ b/src/rooms/logic/Handler/PlayerHandler.ts @@ -329,6 +329,10 @@ export class PlayerHandler { return this._self? this._self.totalAP(): 0; }; + public bakTotalAP(){ + return this._self? this._self.bakTotalAP(): 0; + }; + public setFriend(aplayer: PlayerHandler){ this._friend = aplayer; }; @@ -653,11 +657,13 @@ export class PlayerHandler { return reslst; }; - checkPets(){ + checkPets(breset: boolean = false){ for(let i = this._pets.length - 1; i > 0; i--){ let pet = this._pets[i]; if(pet && !pet.isAlive()){ this.delPet(pet); + }else if(breset){ + pet.resetBakAP(); } } }; diff --git a/src/rooms/logic/skill/Skill.ts b/src/rooms/logic/skill/Skill.ts index 3ab58a6..4867886 100644 --- a/src/rooms/logic/skill/Skill.ts +++ b/src/rooms/logic/skill/Skill.ts @@ -238,6 +238,7 @@ export class Skill { } if(this._subskill){ let pl = []; + let bst = false; if(!this._data.skill_users){ pl.push(param); }else{ @@ -255,6 +256,7 @@ export class Skill { } pl.push(sp); }); + bst = true; }else{ pl.push(param.oppClone()); } @@ -266,16 +268,18 @@ export class Skill { ncount = 1; } for(let i=0; i{ - this._subskill._trigger(item, cb); - }); + for(let j = 0; j < pl.length; j++){ + let sp = pl[j]; + let st = bst? sts[j]: null; + this._subskill._trigger(sp, cb, st); + } } } }; - _trigger(param: SkillParam, cb?: any) { + _trigger(param: SkillParam, cb?: any, target?: SkillTarget) { //触发buff效果 - let res = TriggerManager.onTrigger(this, param); + let res = TriggerManager.onTrigger(this, param, target); this._currCount++; diff --git a/src/rooms/logic/skill/SkillParam.ts b/src/rooms/logic/skill/SkillParam.ts index f6ac0f9..e460781 100644 --- a/src/rooms/logic/skill/SkillParam.ts +++ b/src/rooms/logic/skill/SkillParam.ts @@ -119,6 +119,28 @@ export class SkillTarget{ return (this.dst as PetHandler)._owner; }; + oppClone(){ + let st = new SkillTarget(this.srcskill); + + if(this.dsttype != GameUnitType.NONE){ + if(this.dsttype == GameUnitType.PLAYER){ + st.srcplayer = (this.dst as PlayerHandler); + st.srcpet = st.srcplayer._self; + }else { + st.srcpet = (this.dst as PetHandler); + st.srcplayer = st.srcpet._owner; + } + } + if(this.srcpet){ + st.dst = this.srcpet; + st.dsttype = this.srcpet._isHero? GameUnitType.HERO: GameUnitType.PET; + }else{ + st.dst = this.srcplayer; + st.dsttype = GameUnitType.PLAYER; + } + return st; + }; + public checkRes(){ }; diff --git a/src/rooms/logic/skill/TriggerMan.ts b/src/rooms/logic/skill/TriggerMan.ts index 4d0fb81..953ac04 100644 --- a/src/rooms/logic/skill/TriggerMan.ts +++ b/src/rooms/logic/skill/TriggerMan.ts @@ -74,12 +74,18 @@ let TriggerManager = { }, - onTrigger(sender: Skill, param: SkillParam): SkillTarget[] { + onTrigger(sender: Skill, param: SkillParam, target: SkillTarget): SkillTarget[] { let effectid = sender._data.effect_typeid; let effv = sender.getEffValue(param.edd_cnt, param.cardpoint); - let tgts = sender.getTargets(param); + let tgts; + if(target && effectid == SkillEffectType.ATTACK_BACK){ + tgts = [target.oppClone()]; + }else{ + tgts = sender.getTargets(param); + } + if(!tgts || !tgts.length){ return null; } @@ -148,10 +154,11 @@ let TriggerManager = { break; case SkillEffectType.ATTACK: case SkillEffectType.ATTACK_BACK: + let atkback = effectid == SkillEffectType.ATTACK_BACK; tgts.forEach((item)=>{ let obj = item.srcpet? item.srcpet: item.srcplayer; - let ev = sender.getEffValue(param.edd_cnt, param.cardpoint, obj.totalAP()); - sender.attack(ev, item, param, effectid == SkillEffectType.ATTACK_BACK); + let ev = sender.getEffValue(param.edd_cnt, param.cardpoint, atkback? obj.bakTotalAP(): obj.totalAP()); + sender.attack(ev, item, param, atkback); }); break; default: