增加技能唯一处理

This commit is contained in:
yuexin 2021-03-24 17:03:50 +08:00
parent f3751495dd
commit 94e8a9e17b
4 changed files with 25 additions and 5 deletions

View File

@ -12,7 +12,7 @@ import { PetHandler } from "./PetHandler";
import { SKillEffectData, SkillInfoMsg } from "message/SkillInfo"; import { SKillEffectData, SkillInfoMsg } from "message/SkillInfo";
import { PetInfo } from "message/PetInfo"; import { PetInfo } from "message/PetInfo";
import arrUtil from "../../../utils/array.util"; import arrUtil from "../../../utils/array.util";
import { debugRoom } from "../../../common/Debug"; import { debugRoom, error } from "../../../common/Debug";
import { RemovePetMsg } from "message/RemovePetMsg"; import { RemovePetMsg } from "message/RemovePetMsg";
@ -692,6 +692,7 @@ export class BattleHandler {
oldpos?: number}) oldpos?: number})
:number{ :number{
if(!obj || !obj.card){ if(!obj || !obj.card){
error(`[useCard]not card!`);
return 0; return 0;
} }
@ -702,6 +703,7 @@ export class BattleHandler {
let dstpt = dstph? dstph.getPet(obj.dstpet): null; let dstpt = dstph? dstph.getPet(obj.dstpet): null;
if(!ph){ if(!ph){
error(`[useCard]not player!${obj.srcplayer.id}`);
return 0; return 0;
} }

View File

@ -612,12 +612,21 @@ export class PetHandler {
return n; return n;
}; };
public checkSkills(tgtype: TriggerType, tgtv: PlayerHandler, sp: SkillParam, cb?: any){ public checkSkills(tgtype: TriggerType, tgtv: PlayerHandler, sp: SkillParam, cb?: any, soleskills?: Map<number, any>){
if(this._isSilent){ if(this._isSilent){
return; return;
} }
this._waitskills.forEach((item: Skill) => { 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);
}
}
}); });
}; };

View File

@ -13,6 +13,7 @@ import { Card } from "rooms/schema/Card";
import arrUtil from "utils/array.util"; import arrUtil from "utils/array.util";
import { SKillEffectData } from "message/SkillInfo"; import { SKillEffectData } from "message/SkillInfo";
import { GameEnv } from "../../../cfg/GameEnv"; import { GameEnv } from "../../../cfg/GameEnv";
import { error } from "../../../common/Debug";
export class PlayerHandler { export class PlayerHandler {
public _player: Player; public _player: Player;
@ -208,6 +209,7 @@ export class PlayerHandler {
{ {
let cfg = CfgMan.findEffCardCfg(obj.cardid); let cfg = CfgMan.findEffCardCfg(obj.cardid);
if(!cfg){ if(!cfg){
error(`[useCard]not config!${obj.cardid}`);
return false; return false;
} }
@ -232,6 +234,7 @@ export class PlayerHandler {
let pet = this.newPet(); let pet = this.newPet();
if(!pet){ if(!pet){
error(`[useCard]not empty pet!${obj.cardid}|${oldpos}`);
return false; return false;
} }
obj.srcpet = pet; obj.srcpet = pet;
@ -812,6 +815,8 @@ export class PlayerHandler {
sp = new SkillParam(0, 0, 0, this, this._self, null, null); sp = new SkillParam(0, 0, 0, this, this._self, null, null);
} }
let soleskills: Map<number, Skill> = new Map();
let reslst: SkillTarget[] = []; let reslst: SkillTarget[] = [];
this._self && (this._self != expet) && this._self.checkSkills(tgttype, tgtvalue, sp, (skill: Skill, ap: SkillParam, res: SkillTarget[])=>{ this._self && (this._self != expet) && this._self.checkSkills(tgttype, tgtvalue, sp, (skill: Skill, ap: SkillParam, res: SkillTarget[])=>{
if(res){ if(res){
@ -821,7 +826,7 @@ export class PlayerHandler {
st.LoadParam(sp); st.LoadParam(sp);
reslst.push(st); reslst.push(st);
} }
}); }, soleskills);
this._pets.forEach((item: PetHandler) => { this._pets.forEach((item: PetHandler) => {
if(!item.isAlive()){ if(!item.isAlive()){
@ -839,7 +844,7 @@ export class PlayerHandler {
st.LoadParam(sp); st.LoadParam(sp);
reslst.push(st); reslst.push(st);
} }
}); }, soleskills);
}); });
this._owner.onSkillResult(reslst); this._owner.onSkillResult(reslst);

View File

@ -129,6 +129,10 @@ export class Skill {
return this._data.effect_typeid == SkillEffectType.SKILL_GET; return this._data.effect_typeid == SkillEffectType.SKILL_GET;
}; };
isSoleSkill(){
return this._data.repeatedeffect == 1;
};
isSingleTarget(){ isSingleTarget(){
switch(this._data.rangeid){ switch(this._data.rangeid){
case SkillRangeUnitType.ALL: case SkillRangeUnitType.ALL: