From 9e2f379be2af4ebd6811ae7a65cb8257d816764e Mon Sep 17 00:00:00 2001 From: "y.x" Date: Fri, 8 Jan 2021 02:13:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8F=91=E8=B5=B7=E8=80=85?= =?UTF-8?q?=E5=9B=9E=E4=BC=A0+=E5=86=B2=E9=94=8B=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rooms/logic/Handler/BattleHandler.ts | 14 +++++--- src/rooms/logic/Handler/PetHandler.ts | 45 +++++++++++++----------- src/rooms/logic/Handler/PlayerHandler.ts | 30 ++++++++-------- src/rooms/logic/skill/Skill.ts | 11 +++--- src/rooms/logic/skill/SkillParam.ts | 12 +++++++ 5 files changed, 67 insertions(+), 45 deletions(-) diff --git a/src/rooms/logic/Handler/BattleHandler.ts b/src/rooms/logic/Handler/BattleHandler.ts index 2071a5b..6f888f8 100644 --- a/src/rooms/logic/Handler/BattleHandler.ts +++ b/src/rooms/logic/Handler/BattleHandler.ts @@ -5,7 +5,7 @@ import { PlayerHandler } from "./PlayerHandler"; import CfgMan from "../CfgMan"; import { EffectCardType, GameCampType, GameUnitType, SkillRangeUnitType } from "../skill/SkillConst"; import { Pet } from "rooms/schema/Pet"; -import {SkillParam, SkillTarget} from "../skill/SkillParam"; +import {PetUpdateProcess, SkillParam, SkillTarget} from "../skill/SkillParam"; import { nosync, Room } from "colyseus"; import { Skill } from "../skill/Skill"; import { PetHandler } from "./PetHandler"; @@ -754,11 +754,11 @@ export class BattleHandler { return this._room.sNeedChangePet(aplayer.getId()); }; - public onUpdatePetNotify(apet: PetHandler, from?: PetHandler){ + public onUpdatePetNotify(apet: PetHandler, from: PetHandler){ return this._room.updatePet([apet.exportInfo()], from? from._owner.getId(): null); }; - public onUpdatePetsNotify(pets: PetHandler[], from?: PetHandler){ + public onUpdatePetsNotify(pets: PetHandler[], from: PetHandler){ if(!pets || pets.length <= 0){ return; } @@ -769,6 +769,12 @@ export class BattleHandler { return this._room.updatePet(lst, from? from._owner.getId(): null); }; + public onUpdatePets(infos: PetUpdateProcess[]){ + infos.forEach((item: PetUpdateProcess) =>{ + this._room.updatePet([item.info], item.from? item.from._owner.getId(): null); + }); + }; + public onPlayerAddCardNotify(aplayer: PlayerHandler, count: number, maxcount: number, from?: PlayerHandler): number{ return this._room.addCard(aplayer.getId(), count, maxcount, 1, from? from.getId(): null); @@ -849,7 +855,7 @@ export class BattleHandler { // }); }; - public onPlayerAddHPNotify(aplayer: PlayerHandler, addhp: number, from?: PlayerHandler){ + public onPlayerAddHPNotify(aplayer: PlayerHandler, addhp: number, from: PlayerHandler){ return this._room.updateHp(aplayer.getId(), addhp, from? from.getId(): null); }; //end------------------------------------------------ diff --git a/src/rooms/logic/Handler/PetHandler.ts b/src/rooms/logic/Handler/PetHandler.ts index 5e43dd9..ed155ec 100644 --- a/src/rooms/logic/Handler/PetHandler.ts +++ b/src/rooms/logic/Handler/PetHandler.ts @@ -260,7 +260,7 @@ export class PetHandler { } } if(n >= 0){ - this.dataChanged(); + this.dataChanged(from); return -value; } @@ -284,15 +284,15 @@ export class PetHandler { if(this._isHero){ let tmp = this._baseap; this._baseap = 0; - this.dataChanged(); + this.dataChanged(from); this.addHP(tmp, from); }else{ - this.dataChanged(); + this.dataChanged(from); this.die(); } }else{ // this._ceilBaseAP(); - this.dataChanged(); + this.dataChanged(from); } return res; @@ -326,7 +326,7 @@ export class PetHandler { }else if(rv > 0){ // 圣盾减伤后消失 if(this.hasShield()){ - this.delShield(); + this.delShield(from); this._owner.onShieldUsed(this); rv = 0; } @@ -356,15 +356,15 @@ export class PetHandler { return 0; }; - public addHPS(value: number){ + public addHPS(value: number, from: PetHandler){ this._hps += value; - (value != 0) && this.dataChanged(); + (value != 0) && this.dataChanged(from); return value; }; - public addReduceHurt(value: number){ + public addReduceHurt(value: number, from: PetHandler){ this._exredhurt += value; - (value != 0) && this.dataChanged(); + (value != 0) && this.dataChanged(from); return value; }; @@ -421,7 +421,7 @@ export class PetHandler { return n; }; - public reborn(){ + public reborn(from: PetHandler){ if(this._hasreborned){ // this.die(); return false; @@ -435,7 +435,7 @@ export class PetHandler { this._baseap = this._bakBaseap; this._bakBaseap = 0; - this.dataChanged(); + this.dataChanged(from); } this._hasreborned = true; @@ -504,10 +504,10 @@ export class PetHandler { return this._buffs.get(SkillEffectType.BUFF_SHIELD) > 0; }; - public delShield(): boolean{ - let n = this.delBuff(SkillEffectType.BUFF_SHIELD); + public delShield(from: PetHandler): boolean{ + let n = this.delBuff(SkillEffectType.BUFF_SHIELD, -1, from); if(n >= 0){ - this.dataChanged(); + this.dataChanged(from); return true; } return false; @@ -543,7 +543,7 @@ export class PetHandler { return bok; }; - // remove掉apet的光环 + // remove加在自己身上的属于apet的光环 public removeEffHalo(apet: PetHandler): boolean{ let bok = false; @@ -557,7 +557,7 @@ export class PetHandler { return bok; }; - public addBuff(buffid: number, buffcount: number = 1): number{ + public addBuff(buffid: number, buffcount: number, from: PetHandler): number{ let n = this._buffs.get(buffid); // todo: 暂时不叠加 if(n){ @@ -565,16 +565,19 @@ export class PetHandler { } let cnt = buffcount; this._buffs.set(buffid, cnt); - this.dataChanged(); + this.dataChanged(from); return cnt; }; - public delBuff(buffid: number, buffcount: number = 0): number{ + public delBuff(buffid: number, buffcount: number, from: PetHandler): number{ let n = this._buffs.get(buffid); if(typeof(n) != 'number'){ return -1; } if(buffcount == 0){ + return n; + } + if(buffcount < 0){ n = 0; }else{ n-=buffcount; @@ -588,7 +591,7 @@ export class PetHandler { }else{ this._buffs.set(buffid, n); } - this.dataChanged(); + this.dataChanged(from); return n; }; @@ -642,7 +645,7 @@ export class PetHandler { return obj; }; - public dataChanged(){ - this._owner.onPetChanged(this); + public dataChanged(from: PetHandler){ + this._owner.onPetChanged(this, from); } } diff --git a/src/rooms/logic/Handler/PlayerHandler.ts b/src/rooms/logic/Handler/PlayerHandler.ts index 8ba3e4d..aa478ae 100644 --- a/src/rooms/logic/Handler/PlayerHandler.ts +++ b/src/rooms/logic/Handler/PlayerHandler.ts @@ -265,7 +265,7 @@ export class PlayerHandler { this.onHaloAdd(pet, true); } if(bchged){ - pet.dataChanged(); + pet.dataChanged(pet); } } return this.simpleCheckSkills(lst, pet, param); @@ -322,8 +322,8 @@ export class PlayerHandler { return this._player.hp; }; - public addHPS(value: number): number{ - return this._self? this._self.addHPS(value): 0; + public addHPS(value: number, from: PetHandler): number{ + return this._self? this._self.addHPS(value, from): 0; }; public getHPS(): number{ @@ -348,8 +348,8 @@ export class PlayerHandler { } }; - public addReduceHurt(value: number){ - return this._self? this._self.addReduceHurt(value): 0; + public addReduceHurt(value: number, from: PetHandler){ + return this._self? this._self.addReduceHurt(value, from): 0; }; public totalAP(){ @@ -369,8 +369,8 @@ export class PlayerHandler { //todo: }; - public reborn(): boolean{ - return this._self? this._self.reborn(): false; + public reborn(from: PetHandler): boolean{ + return this._self? this._self.reborn(from): false; }; public attack(sk: Skill, apet: PetHandler, param: SkillParam, ev: number, isAtkBack: boolean = false){ @@ -428,8 +428,8 @@ export class PlayerHandler { return true; }; - public onPetChanged(apet: PetHandler){ - this._owner.onUpdatePetNotify(apet); + public onPetChanged(apet: PetHandler, from: PetHandler){ + this._owner.onUpdatePetNotify(apet, from); }; /** @@ -474,7 +474,7 @@ export class PlayerHandler { } } - this._owner.onUpdatePetsNotify(lst); + this._owner.onUpdatePetsNotify(lst, apet); }; public onHaloRemove(apet: PetHandler){ @@ -493,7 +493,7 @@ export class PlayerHandler { } } - this._owner.onUpdatePetsNotify(lst); + this._owner.onUpdatePetsNotify(lst, apet); }; onAttackBefore(apet: PetHandler, sp?: SkillParam){ @@ -793,11 +793,11 @@ export class PlayerHandler { this._totalcc += v; }; - addBuff(buffid: number, buffcount: number = 1): number{ - return this._self? this._self.addBuff(buffid, buffcount): 0; + addBuff(buffid: number, buffcount: number, from: PetHandler): number{ + return this._self? this._self.addBuff(buffid, buffcount, from): 0; }; - delBuff(buffid: number, buffcount: number = 0): number{ - return this._self? this._self.delBuff(buffid, buffcount): -1; + delBuff(buffid: number, buffcount: number, from: PetHandler): number{ + return this._self? this._self.delBuff(buffid, buffcount, from): -1; } } diff --git a/src/rooms/logic/skill/Skill.ts b/src/rooms/logic/skill/Skill.ts index f3824fd..ab73af6 100644 --- a/src/rooms/logic/skill/Skill.ts +++ b/src/rooms/logic/skill/Skill.ts @@ -517,7 +517,7 @@ export class Skill { let efftype = SkillEffectType.HP_STEAL_ENHANCE; if(tgt.dsttype != GameUnitType.NONE){ let effv = effvalue/100; - let n = tgt.dst.addHPS(effv); + let n = tgt.dst.addHPS(effv, tgt.srcPet()); tgt.success(efftype, n); }else{ tgt.fail(efftype, -1); @@ -603,7 +603,7 @@ export class Skill { switch(efftype){ case SkillEffectType.BUFF_SHIELD: if(tgt.dsttype != GameUnitType.NONE){ - let n = tgt.dst.addBuff(efftype); + let n = tgt.dst.addBuff(efftype, 1, tgt.srcPet()); if(n){ tgt.success(efftype, n); }else{ @@ -621,7 +621,7 @@ export class Skill { reduceHurt(effvalue: number, tgt: SkillTarget){ let efftype = SkillEffectType.HURT_REDUCE; if(tgt.dsttype != GameUnitType.NONE){ - let n = tgt.dst.addReduceHurt(effvalue); + let n = tgt.dst.addReduceHurt(effvalue, tgt.srcPet()); tgt.success(efftype, n); }else{ tgt.fail(efftype, -1); @@ -658,7 +658,7 @@ export class Skill { reborn(tgt: SkillTarget){ let efftype = SkillEffectType.REBORN; if(tgt.dsttype != GameUnitType.NONE){ - let res = tgt.dst.reborn(); + let res = tgt.dst.reborn(tgt.srcPet()); if(res){ tgt.success(efftype, 1); }else{ @@ -692,7 +692,7 @@ export class Skill { let dst = tgt.dsttype == GameUnitType.PLAYER? (tgt.dst as PlayerHandler)._self: (tgt.dst as PetHandler); let n = obj.attack(this, dst, param, v, isAtkBack); if(n <= 0){ - tgt.success(efftype, n); + tgt.success(SkillEffectType.HURT_POWER, n); // if(this._data.quoteskillid){ // let dp = this._data.skill_users? param.oppClone(): param; // let pet = tgt.srcpet; @@ -714,6 +714,7 @@ export class Skill { tgt.success(SkillEffectType.HURT_POWER, sv, true); } } + tgt.success(efftype, hv); }else{ tgt.fail(efftype, n); } diff --git a/src/rooms/logic/skill/SkillParam.ts b/src/rooms/logic/skill/SkillParam.ts index f526e01..6f036f6 100644 --- a/src/rooms/logic/skill/SkillParam.ts +++ b/src/rooms/logic/skill/SkillParam.ts @@ -3,6 +3,7 @@ import {PetHandler} from "../Handler/PetHandler"; import { Skill } from "./Skill"; import { GameUnitType, SkillEffectType, SkillUserType } from "./SkillConst"; import { SKillEffectData, SkillInfoData, SkillInfoMsg } from "../../../message/SkillInfo"; +import { PetInfo } from "message/PetInfo"; export class SkillParam{ cardid: number; @@ -272,3 +273,14 @@ export class SkillTarget{ return null; } }; + + +export class PetUpdateProcess{ + info: PetInfo; + from: PetHandler; + + constructor(pet: PetHandler, from: PetHandler){ + this.from = from; + this.info = pet.exportInfo(); + }; +}; \ No newline at end of file