冲锋反击逻辑修复

This commit is contained in:
yuexin 2020-12-28 17:41:16 +08:00
parent 2446739efe
commit fe503f7404
6 changed files with 68 additions and 10 deletions

View File

@ -363,6 +363,11 @@ export class BattleHandler {
return this._cardusing; return this._cardusing;
}; };
public checkPets(){
this._players.forEach((item: PlayerHandler) => {
item.checkPets(true);
});
};
//--------------------对外接口(外部调用)---------------------------- //--------------------对外接口(外部调用)----------------------------
/** /**
* 使 * 使
@ -493,6 +498,8 @@ export class BattleHandler {
return; return;
} }
sp.srcplayer && sp.srcplayer.onUseCardEnd(sp); sp.srcplayer && sp.srcplayer.onUseCardEnd(sp);
this.checkPets();
}; };
/** /**

View File

@ -54,6 +54,8 @@ export class PetHandler {
_bakBaseap: number; _bakBaseap: number;
_bakTotalap: number = 0;
_hasreborned: boolean = false; _hasreborned: boolean = false;
_orignEffCnt: number = 0; _orignEffCnt: number = 0;
@ -228,6 +230,8 @@ export class PetHandler {
return 0; return 0;
} }
this._bakTotalap = this.totalAP();
let n = -value; let n = -value;
for(let i = 0; i < this._effhalos.length;i++){ for(let i = 0; i < this._effhalos.length;i++){
let dv = this._effhalos[i].addHaloValue(n); let dv = this._effhalos[i].addHaloValue(n);
@ -277,6 +281,14 @@ export class PetHandler {
return this._baseap + this.getEffHaloV(); 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{ public beHurt(value: number): number{
let rv = value - value * this._exredhurt; let rv = value - value * this._exredhurt;
if(rv < 0){ if(rv < 0){

View File

@ -329,6 +329,10 @@ export class PlayerHandler {
return this._self? this._self.totalAP(): 0; return this._self? this._self.totalAP(): 0;
}; };
public bakTotalAP(){
return this._self? this._self.bakTotalAP(): 0;
};
public setFriend(aplayer: PlayerHandler){ public setFriend(aplayer: PlayerHandler){
this._friend = aplayer; this._friend = aplayer;
}; };
@ -653,11 +657,13 @@ export class PlayerHandler {
return reslst; return reslst;
}; };
checkPets(){ checkPets(breset: boolean = false){
for(let i = this._pets.length - 1; i > 0; i--){ for(let i = this._pets.length - 1; i > 0; i--){
let pet = this._pets[i]; let pet = this._pets[i];
if(pet && !pet.isAlive()){ if(pet && !pet.isAlive()){
this.delPet(pet); this.delPet(pet);
}else if(breset){
pet.resetBakAP();
} }
} }
}; };

View File

@ -238,6 +238,7 @@ export class Skill {
} }
if(this._subskill){ if(this._subskill){
let pl = []; let pl = [];
let bst = false;
if(!this._data.skill_users){ if(!this._data.skill_users){
pl.push(param); pl.push(param);
}else{ }else{
@ -255,6 +256,7 @@ export class Skill {
} }
pl.push(sp); pl.push(sp);
}); });
bst = true;
}else{ }else{
pl.push(param.oppClone()); pl.push(param.oppClone());
} }
@ -266,16 +268,18 @@ export class Skill {
ncount = 1; ncount = 1;
} }
for(let i=0; i<ncount;i++){ for(let i=0; i<ncount;i++){
pl.forEach((item: SkillParam)=>{ for(let j = 0; j < pl.length; j++){
this._subskill._trigger(item, cb); 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效果 //触发buff效果
let res = TriggerManager.onTrigger(this, param); let res = TriggerManager.onTrigger(this, param, target);
this._currCount++; this._currCount++;

View File

@ -119,6 +119,28 @@ export class SkillTarget{
return (this.dst as PetHandler)._owner; 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(){ public checkRes(){
}; };

View File

@ -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 effectid = sender._data.effect_typeid;
let effv = sender.getEffValue(param.edd_cnt, param.cardpoint); 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){ if(!tgts || !tgts.length){
return null; return null;
} }
@ -148,10 +154,11 @@ let TriggerManager = {
break; break;
case SkillEffectType.ATTACK: case SkillEffectType.ATTACK:
case SkillEffectType.ATTACK_BACK: case SkillEffectType.ATTACK_BACK:
let atkback = effectid == SkillEffectType.ATTACK_BACK;
tgts.forEach((item)=>{ tgts.forEach((item)=>{
let obj = item.srcpet? item.srcpet: item.srcplayer; let obj = item.srcpet? item.srcpet: item.srcplayer;
let ev = sender.getEffValue(param.edd_cnt, param.cardpoint, obj.totalAP()); let ev = sender.getEffValue(param.edd_cnt, param.cardpoint, atkback? obj.bakTotalAP(): obj.totalAP());
sender.attack(ev, item, param, effectid == SkillEffectType.ATTACK_BACK); sender.attack(ev, item, param, atkback);
}); });
break; break;
default: default: