From 58ac45ab0bf5d8c7fdea456149173e8dac746189 Mon Sep 17 00:00:00 2001 From: "y.x" Date: Mon, 18 Jan 2021 00:42:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=86=B2=E9=94=8B/=E5=8F=8D?= =?UTF-8?q?=E5=87=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rooms/logic/Handler/BattleHandler.ts | 47 +++++++++++++++++++++--- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/src/rooms/logic/Handler/BattleHandler.ts b/src/rooms/logic/Handler/BattleHandler.ts index ab6de04..59e816f 100644 --- a/src/rooms/logic/Handler/BattleHandler.ts +++ b/src/rooms/logic/Handler/BattleHandler.ts @@ -3,9 +3,9 @@ import {Card} from "../../schema/Card"; import {CardGameState} from "../../schema/CardGameState"; import { PlayerHandler } from "./PlayerHandler"; import CfgMan from "../CfgMan"; -import { EffectCardType, GameCampType, GameUnitType, SkillRangeUnitType } from "../skill/SkillConst"; +import { EffectCardType, GameCampType, GameUnitType, SkillEffectType, SkillRangeUnitType } from "../skill/SkillConst"; import { Pet } from "rooms/schema/Pet"; -import {PetUpdateProcess, SkillParam, SkillTarget} from "../skill/SkillParam"; +import {PetUpdateProcess, SkillParam, SkillResult, SkillTarget} from "../skill/SkillParam"; import { nosync, Room } from "colyseus"; import { Skill } from "../skill/Skill"; import { PetHandler } from "./PetHandler"; @@ -899,12 +899,22 @@ export class BattleHandler { * indexOfAttack start: number: number*/ let __indexOfAttack = function(start: number): number { - //todo: + for(let i = start; i < skillres.length;i++){ + if(skillres[i].bresok && skillres[i].isAttackSkill()){ + return i; + } + } return -1; }; - let __indexOfAttackBk = function(atkres: SkillTarget, start: number): number{ - //todo: + let __indexOfAttackBk = function(start: number, atkres: SkillTarget): number{ + for(let i = start; i < skillres.length;i++){ + let obj = skillres[i]; + if(obj.bresok && obj.isAttackBackSkill() + && atkres.dst == obj.srcPet() && obj.dst == atkres.srcPet()){ + return i; + } + } return -1; }; @@ -912,6 +922,33 @@ export class BattleHandler { if(!skillres || skillres.length <= 0){ return; } + + // 合并冲锋/反击 + let nstart = 0; + while(true){ + if(nstart >= skillres.length){ + break; + } + let natk = __indexOfAttack(nstart); + if(natk < 0){ + break; + } + nstart = natk + 1; + let atkobj = skillres[natk]; + let natkbk = __indexOfAttackBk(nstart, atkobj); + if(natkbk){ + let atkbkobj = skillres[natkbk]; + atkbkobj.res.forEach((item: SkillResult) => { + if(item.bsuccess){ + if(item.effect_type == SkillEffectType.CHG_AP || item.effect_type == SkillEffectType.CHG_HP){ + atkobj.success(item.effect_type, item.effect_res, true); + } + } + }); + skillres.splice(natkbk, 1); + } + } + let checklst: PlayerHandler[] = []; let lst: SkillInfoMsg[] = []; let resmap: Map = new Map;