修改下发技能流程

This commit is contained in:
yuexin 2020-12-30 20:08:40 +08:00
parent 03a52351ed
commit 2e91b632d2
5 changed files with 107 additions and 62 deletions

View File

@ -22,10 +22,12 @@ export class BattleHandler {
private _playerids: Map<string, Player> = new Map();
_room: Room;
private _cardusing: boolean;
private _flowing: boolean;
private _sktime: number;
private _gamestart: boolean = false;
private _cacheSkills: SkillTarget[] = [];
//--------------------对外接口--player相关---(外部调用)----------------------------
public init(cs: CardGameState, room: Room){
this._cs = cs;
@ -211,6 +213,15 @@ export class BattleHandler {
return bok? pet: null;
};
public getSkillOppTargets(st: SkillTarget): SkillTarget[]{
let lst: SkillTarget[] = [];
lst.push(st.oppClone());
if(this.isFlowing()){
this._cacheSkills.push(...lst);
}
return lst;
};
public getSkillTargets(skill: Skill, param: SkillParam): SkillTarget[]{
let lst: SkillTarget[] = [];
let players = this.getTargetPlayers(skill._data.friendlyid, param.srcplayer, param.dstplayer);
@ -244,6 +255,9 @@ export class BattleHandler {
break;
}
}
if(this.isFlowing()){
this._cacheSkills.push(...lst);
}
return lst;
};
@ -344,24 +358,31 @@ export class BattleHandler {
return lst;
};
public beginUseCard(){
this._cardusing = true;
this._sktime = 0;
};
public endUseCard(){
this._cardusing = false;
};
public isUsingCard(){
return this._cardusing;
};
public checkPets(){
this._players.forEach((item: PlayerHandler) => {
item.checkPets(true);
});
};
public isFlowing(){
return this._flowing;
};
public beginFlow(){
this._flowing = true;
this._sktime = 0;
this._cacheSkills.length = 0;
};
public endFlow(){
if(this._cacheSkills.length > 0){
this.onSkillResultNotify(this._cacheSkills);
this._cacheSkills.length = 0;
}
this._flowing = false;
this.checkPets();
return this._sktime * 1000;
};
//--------------------对外接口(外部调用)----------------------------
/**
* 使
@ -389,7 +410,7 @@ export class BattleHandler {
dstpt = dstph._self;
}
this.beginUseCard();
this.beginFlow();
let pt = obj.cardpoint;
@ -408,9 +429,7 @@ export class BattleHandler {
this.onUseCardEnd(ps);
this.endUseCard();
return this._sktime*1000;
return this.endFlow();
};
/**
@ -470,10 +489,16 @@ export class BattleHandler {
public onCardLinkOver(aplayer: Player, linkcards: Card[], fromplayer?: Player){
let ph = this.getPlayer(aplayer);
let fromph = this.getPlayer(fromplayer);
ph && ph.onCardLinkEnd(linkcards, fromph);
//1
if(!ph){
return 0;
}
this.beginFlow();
ph.onCardLinkEnd(linkcards, fromph);
return this.endFlow();
};
/**
@ -483,10 +508,14 @@ export class BattleHandler {
*/
public onCardDiscarded(aplayer: Player, card: Card){
let ph = this.getPlayer(aplayer);
ph && ph.onCardDiscarded(card);
//1
if(!ph){
return 0;
}
this.beginFlow();
ph.onCardDiscarded(card);
return this.endFlow();
};
/**
@ -498,9 +527,6 @@ export class BattleHandler {
return;
}
sp.srcplayer && sp.srcplayer.onUseCardEnd(sp);
//1
return 0;
};
/**
@ -539,10 +565,15 @@ export class BattleHandler {
this._gamestart = true;
}
let ph = this.getPlayer(aplayer);
ph && ph.onRoundStart();
//1
if(!ph){
return 0;
}
this.beginFlow();
ph.onRoundStart();
return this.endFlow();
};
/**
@ -551,11 +582,15 @@ export class BattleHandler {
*/
public onPlayerRoundEnd(aplayer: Player){
let ph = this.getPlayer(aplayer);
ph && ph.onRoundEnd();
this.checkPets();
//1
if(!ph){
return 0;
}
this.beginFlow();
ph.onRoundEnd();
// this.checkPets();
return this.endFlow();
};
/**
@ -671,26 +706,26 @@ export class BattleHandler {
tm += st.getLastTime();
skid += st.srcskillid + '|';
st.isHurtSkill() && item.forEach((v: SkillTarget)=>{
if(v.targetIsPet()){
let ph = v.targetPlayer();
if(!checklst.includes(ph)){
checklst.push(ph);
}
}
})
// st.isHurtSkill() && item.forEach((v: SkillTarget)=>{
// if(v.targetIsPet()){
// let ph = v.targetPlayer();
// if(!checklst.includes(ph)){
// checklst.push(ph);
// }
// }
// })
});
if(this.isUsingCard()){
if(this.isFlowing()){
this._sktime += tm;
}else{
this._room.addScheduleTime(tm*1000, skid);
}
this._room.bMsgQueue(lst);
checklst.forEach((item: PlayerHandler) => {
item.checkPets();
});
// checklst.forEach((item: PlayerHandler) => {
// item.checkPets();
// });
};
public onPlayerAddHPNotify(aplayer: PlayerHandler, addhp: number){

View File

@ -261,7 +261,7 @@ export class PetHandler {
return 0;
}
if(value > 0 && this.isAlive()){
if(value > 0 && !this.isAlive()){
return 0;
}
@ -368,17 +368,24 @@ export class PetHandler {
this._owner.onPetDied(this);
};
public attack(apet: PetHandler, param: SkillParam, ev: number = 0, isAtkBack: boolean = false){
public attack(sk: Skill, apet: PetHandler, param: SkillParam, ev: number = 0, isAtkBack: boolean = false){
!isAtkBack && this._owner.onAttackBefore(this, param);
// let myap = this.totalAP();
// myap += myap*ev;
let myap = ev? ev: this.totalAP();
let rv = sk.getEffValue(param.edd_cnt, param.cardpoint, this.totalAP());
let myap = isAtkBack? ev: rv;
let bakap = apet.totalAP();
let n = apet.beHurt(myap);
!isAtkBack && this._owner.onBeAttack(apet, param);
let nowap = apet.totalAP();
return n;
};

View File

@ -240,7 +240,6 @@ export class PlayerHandler {
let sk = this.newSkill(skillid);
lst.push(sk);
}
// this._owner.onSkillResultNotify(lst);
}else {
let bhalo = false;
let bchged = false;
@ -348,8 +347,8 @@ export class PlayerHandler {
return this._self? this._self.reborn(): false;
};
public attack(apet: PetHandler, param: SkillParam, ev: number, isAtkBack: boolean = false){
return this._self? this._self.attack(apet, param, ev, isAtkBack): 0;
public attack(sk: Skill, apet: PetHandler, param: SkillParam, ev: number, isAtkBack: boolean = false){
return this._self? this._self.attack(sk, apet, param, ev, isAtkBack): 0;
};
public beSilent(count: number){
@ -592,7 +591,7 @@ export class PlayerHandler {
let reslst: SkillTarget[] = [];
this._self && this._self.checkSkills(tgttype, tgtvalue, sp, (skill: Skill, ap: SkillParam, res: SkillTarget[])=>{
if(res){
reslst = reslst.concat(res);
reslst.push(...res);
}else{
let st = new SkillTarget(skill);
st.LoadParam(sp);
@ -607,7 +606,7 @@ export class PlayerHandler {
sp.srcpet = item;
item.checkSkills(tgttype, tgtvalue, sp, (skill: Skill, ap: SkillParam, res: SkillTarget[])=>{
if(res){
reslst = reslst.concat(res);
reslst.push(...res);
}else{
let st = new SkillTarget(skill);
st.LoadParam(sp);
@ -616,7 +615,7 @@ export class PlayerHandler {
});
});
this._owner.onSkillResultNotify(reslst);
// this._owner.onSkillResultNotify(reslst);
};
singleCheckSkills(apet: PetHandler, tgttype: TriggerType, tgtvalue?: any, tgtsp?: SkillParam){
@ -627,14 +626,14 @@ export class PlayerHandler {
let reslst: SkillTarget[] = [];
apet.checkSkills(tgttype, tgtvalue, sp, (skill: Skill, ap: SkillParam, res: SkillTarget[])=>{
if(res){
reslst = reslst.concat(res);
reslst.push(...res);
}else{
let st = new SkillTarget(skill);
st.LoadParam(sp);
reslst.push(st);
}
});
this._owner.onSkillResultNotify(reslst);
// this._owner.onSkillResultNotify(reslst);
};
simpleCheckSkills(skills: Skill[], apet?: PetHandler, param?: SkillParam): SkillTarget[]{
@ -651,7 +650,7 @@ export class PlayerHandler {
skills.forEach((item: Skill)=>{
item.checkTrigger(TriggerType.NO_COND, 0, sp, (skill: Skill, ap: SkillParam, res: SkillTarget[])=>{
if(res){
reslst = reslst.concat(res);
reslst.push(...res);
}else{
let st = new SkillTarget(skill);
st.LoadParam(sp);
@ -660,7 +659,7 @@ export class PlayerHandler {
});
});
this._owner.onSkillResultNotify(reslst);
// this._owner.onSkillResultNotify(reslst);
return reslst;
};

View File

@ -194,6 +194,10 @@ export class Skill {
return this._owner._owner.getSkillTargets(this, param);
};
getOppTargets(st: SkillTarget): SkillTarget[]{
return this._owner._owner.getSkillOppTargets(st);
};
getEnhanceValue(param: SkillParam): number{
return CfgMan.calcEnhanceValue(this._data.edd_effid, this._data.edd_effnum, param.edd_cnt, param.cardpoint);
};
@ -603,7 +607,7 @@ export class Skill {
if(tgt.dsttype == GameUnitType.HERO || tgt.dsttype == GameUnitType.PET){
let obj = tgt.srcpet? tgt.srcpet: tgt.srcplayer;
let v = effvalue;
let res = obj.attack((tgt.dst as PetHandler), param, v, isAtkBack);
let res = obj.attack(this, (tgt.dst as PetHandler), param, v, isAtkBack);
if(res){
tgt.success(efftype, res);
// if(this._data.quoteskillid){

View File

@ -81,7 +81,7 @@ let TriggerManager = {
let tgts;
if(target && effectid == SkillEffectType.ATTACK_BACK){
tgts = [target.oppClone()];
tgts = sender.getOppTargets(target);
}else{
tgts = sender.getTargets(param);
}
@ -158,7 +158,7 @@ let TriggerManager = {
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, atkback? obj.bakTotalAP(): obj.totalAP());
let ev = atkback? sender.getEffValue(0, 0, obj.bakTotalAP()): 0;
sender.attack(ev, item, param, atkback);
});
break;