From 69e211ba60dba860ec6e2a36c13cfa68938b203a Mon Sep 17 00:00:00 2001 From: yuexin Date: Mon, 28 Dec 2020 12:13:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=80=E8=83=BD=E7=BB=93=E6=9E=9C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rooms/logic/Handler/BattleHandler.ts | 45 +++++++++++----- src/rooms/logic/skill/SkillParam.ts | 69 +++++++++++++++++------- 2 files changed, 82 insertions(+), 32 deletions(-) diff --git a/src/rooms/logic/Handler/BattleHandler.ts b/src/rooms/logic/Handler/BattleHandler.ts index 0c04dcc..d03c4ec 100644 --- a/src/rooms/logic/Handler/BattleHandler.ts +++ b/src/rooms/logic/Handler/BattleHandler.ts @@ -624,25 +624,46 @@ export class BattleHandler { } let checklst: PlayerHandler[] = []; let lst: SkillInfoMsg[] = []; - let difflst: SkillTarget[] = []; + let resmap: Map = new Map; + let lastkey = ''; + let cnt = 0; skillres.forEach((item: SkillTarget)=>{ - lst.push(item.exportData()); - if(!difflst.includes(item)){ - difflst.push(item); + let key = item.srcskillid + '|' + item.srcplayer.getId(); + if(item.srcpet){ + key += '|' + item.srcpet._idx; + } + + key += '' + cnt; + if(lastkey != key && lastkey != ''){ + cnt++; + } + lastkey = key; + + let tmplst = resmap.get(key); + if(!tmplst){ + tmplst = [item]; + resmap.set(key, tmplst); + }else{ + tmplst.push(item); } }); let skid = ''; let tm = 0; - difflst.forEach((item: SkillTarget) =>{ - tm += item.getLastTime(); - skid += item.srcskillid + '|'; + resmap.forEach((item: SkillTarget[]) =>{ + let st = item[0]; + lst.push(st.exportMsg(item)); - if(item.isHurtSkill() && item.targetIsPet()){ - let ph = item.targetPlayer(); - if(!checklst.includes(ph)){ - checklst.push(ph); + 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); + } } - } + }) }); if(this.isUsingCard()){ diff --git a/src/rooms/logic/skill/SkillParam.ts b/src/rooms/logic/skill/SkillParam.ts index a65b6b8..f6ac0f9 100644 --- a/src/rooms/logic/skill/SkillParam.ts +++ b/src/rooms/logic/skill/SkillParam.ts @@ -71,7 +71,7 @@ export class SkillTarget{ lasttime: number; bresok: boolean = false; - res: SkillResult[]; + res: SkillResult; constructor(skill: Skill, splayer?: PlayerHandler, spet?: PetHandler, dstobj?: any, dsttype?: GameUnitType) { this.srcplayer = splayer; @@ -120,20 +120,18 @@ export class SkillTarget{ }; public checkRes(){ - if(!this.res){ - this.res = []; - } + }; public success(efftype: number, effres: number){ this.checkRes(); - this.res.push(new SkillResult(efftype, effres, true)); + this.res = new SkillResult(efftype, effres, true); this.bresok = true; }; public fail(efftype: number, err: number){ this.checkRes(); - this.res.push(new SkillResult(efftype, 0, false, err)); + this.res = new SkillResult(efftype, 0, false, err); }; public getLastTime(){ @@ -151,21 +149,52 @@ export class SkillTarget{ if(!this.res){ msg.errcode = -1; }else{ - this.res.forEach((item: SkillResult) => { - let ed = new SKillEffectData(); - if(this.dsttype == GameUnitType.PLAYER){ - ed.pos = 0; - ed.player = (this.dst as PlayerHandler).getId(); - }else { - ed.pos = (this.dst as PetHandler)._idx; - ed.player = (this.dst as PetHandler)._owner.getId(); - } - ed.effect_id = item.effect_type; - ed.val = item.bsuccess? item.effect_res: item.err; - ed.result = item.bsuccess? 0: -1; - obj.datas.push(ed); - }); + let ed = new SKillEffectData(); + if(this.dsttype == GameUnitType.PLAYER){ + ed.pos = 0; + ed.player = (this.dst as PlayerHandler).getId(); + }else { + ed.pos = (this.dst as PetHandler)._idx; + ed.player = (this.dst as PetHandler)._owner.getId(); + } + ed.effect_id = this.res.effect_type; + ed.val = this.res.bsuccess? this.res.effect_res: this.res.err; + ed.result = this.res.bsuccess? 0: -1; + obj.datas.push(ed); } return msg; + }; + + public exportMsg(lst: SkillTarget[]): SkillInfoMsg{ + if(!lst || lst.length == 0){ + return null; + } + let st = lst[0]; + let msg = new SkillInfoMsg(); + msg.data = new SkillInfoData(); + let obj = msg.data; + obj.skill_id = st.srcskillid; + obj.player = st.srcplayer.getId(), + obj.pos = st.srcpet? st.srcpet._idx: 0; + obj.datas = []; + lst.forEach((item: SkillTarget) => { + if(item.res){ + let ed = new SKillEffectData(); + if(item.dsttype == GameUnitType.PLAYER){ + ed.pos = 0; + ed.player = (item.dst as PlayerHandler).getId(); + }else { + ed.pos = (item.dst as PetHandler)._idx; + ed.player = (item.dst as PetHandler)._owner.getId(); + } + + let res = item.res; + ed.effect_id = res.effect_type; + ed.val = res.bsuccess? res.effect_res: res.err; + ed.result = res.bsuccess? 0: -1; + obj.datas.push(ed); + } + }); + return msg; } };