From 94e8a9e17ba9dd680761b3f218b44ae03438ff1e Mon Sep 17 00:00:00 2001 From: yuexin Date: Wed, 24 Mar 2021 17:03:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8A=80=E8=83=BD=E5=94=AF?= =?UTF-8?q?=E4=B8=80=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 | 4 +++- src/rooms/logic/Handler/PetHandler.ts | 13 +++++++++++-- src/rooms/logic/Handler/PlayerHandler.ts | 9 +++++++-- src/rooms/logic/skill/Skill.ts | 4 ++++ 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/rooms/logic/Handler/BattleHandler.ts b/src/rooms/logic/Handler/BattleHandler.ts index 2ec183c..cf418d0 100644 --- a/src/rooms/logic/Handler/BattleHandler.ts +++ b/src/rooms/logic/Handler/BattleHandler.ts @@ -12,7 +12,7 @@ import { PetHandler } from "./PetHandler"; import { SKillEffectData, SkillInfoMsg } from "message/SkillInfo"; import { PetInfo } from "message/PetInfo"; import arrUtil from "../../../utils/array.util"; -import { debugRoom } from "../../../common/Debug"; +import { debugRoom, error } from "../../../common/Debug"; import { RemovePetMsg } from "message/RemovePetMsg"; @@ -692,6 +692,7 @@ export class BattleHandler { oldpos?: number}) :number{ if(!obj || !obj.card){ + error(`[useCard]not card!`); return 0; } @@ -702,6 +703,7 @@ export class BattleHandler { let dstpt = dstph? dstph.getPet(obj.dstpet): null; if(!ph){ + error(`[useCard]not player!${obj.srcplayer.id}`); return 0; } diff --git a/src/rooms/logic/Handler/PetHandler.ts b/src/rooms/logic/Handler/PetHandler.ts index 00247a3..4b42b69 100644 --- a/src/rooms/logic/Handler/PetHandler.ts +++ b/src/rooms/logic/Handler/PetHandler.ts @@ -612,12 +612,21 @@ export class PetHandler { return n; }; - public checkSkills(tgtype: TriggerType, tgtv: PlayerHandler, sp: SkillParam, cb?: any){ + public checkSkills(tgtype: TriggerType, tgtv: PlayerHandler, sp: SkillParam, cb?: any, soleskills?: Map){ if(this._isSilent){ return; } this._waitskills.forEach((item: Skill) => { - item.checkTrigger(tgtype, tgtv, sp, cb); + let bfind = false; + if(soleskills){ + bfind = !!soleskills.get(item._id); + } + if(!bfind){ + let bok = !!item.checkTrigger(tgtype, tgtv, sp, cb); + if(bok && item.isSoleSkill() && soleskills){ + soleskills.set(item._id, item); + } + } }); }; diff --git a/src/rooms/logic/Handler/PlayerHandler.ts b/src/rooms/logic/Handler/PlayerHandler.ts index 2135cd8..50daf57 100644 --- a/src/rooms/logic/Handler/PlayerHandler.ts +++ b/src/rooms/logic/Handler/PlayerHandler.ts @@ -13,6 +13,7 @@ import { Card } from "rooms/schema/Card"; import arrUtil from "utils/array.util"; import { SKillEffectData } from "message/SkillInfo"; import { GameEnv } from "../../../cfg/GameEnv"; +import { error } from "../../../common/Debug"; export class PlayerHandler { public _player: Player; @@ -208,6 +209,7 @@ export class PlayerHandler { { let cfg = CfgMan.findEffCardCfg(obj.cardid); if(!cfg){ + error(`[useCard]not config!${obj.cardid}`); return false; } @@ -232,6 +234,7 @@ export class PlayerHandler { let pet = this.newPet(); if(!pet){ + error(`[useCard]not empty pet!${obj.cardid}|${oldpos}`); return false; } obj.srcpet = pet; @@ -812,6 +815,8 @@ export class PlayerHandler { sp = new SkillParam(0, 0, 0, this, this._self, null, null); } + let soleskills: Map = new Map(); + let reslst: SkillTarget[] = []; this._self && (this._self != expet) && this._self.checkSkills(tgttype, tgtvalue, sp, (skill: Skill, ap: SkillParam, res: SkillTarget[])=>{ if(res){ @@ -821,7 +826,7 @@ export class PlayerHandler { st.LoadParam(sp); reslst.push(st); } - }); + }, soleskills); this._pets.forEach((item: PetHandler) => { if(!item.isAlive()){ @@ -839,7 +844,7 @@ export class PlayerHandler { st.LoadParam(sp); reslst.push(st); } - }); + }, soleskills); }); this._owner.onSkillResult(reslst); diff --git a/src/rooms/logic/skill/Skill.ts b/src/rooms/logic/skill/Skill.ts index 44bbf09..1c95aad 100644 --- a/src/rooms/logic/skill/Skill.ts +++ b/src/rooms/logic/skill/Skill.ts @@ -129,6 +129,10 @@ export class Skill { return this._data.effect_typeid == SkillEffectType.SKILL_GET; }; + isSoleSkill(){ + return this._data.repeatedeffect == 1; + }; + isSingleTarget(){ switch(this._data.rangeid){ case SkillRangeUnitType.ALL: