光环处理逻辑修改
This commit is contained in:
parent
8a03776427
commit
248bd43c9d
@ -194,9 +194,9 @@ export class BattleHandler {
|
|||||||
*/
|
*/
|
||||||
public useCard(obj:
|
public useCard(obj:
|
||||||
{srcplayer: Player, card: number, cardpoint: number, dbpt_cnt: number, eff_cnt: number, dstplayer: Player, dstpet: Pet})
|
{srcplayer: Player, card: number, cardpoint: number, dbpt_cnt: number, eff_cnt: number, dstplayer: Player, dstpet: Pet})
|
||||||
{
|
:number{
|
||||||
if(!obj || !obj.card){
|
if(!obj || !obj.card){
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
let ph = this.getPlayer(obj.srcplayer);
|
let ph = this.getPlayer(obj.srcplayer);
|
||||||
@ -206,7 +206,7 @@ export class BattleHandler {
|
|||||||
let dstpt = dstph? dstph.getPet(obj.dstpet): null;
|
let dstpt = dstph? dstph.getPet(obj.dstpet): null;
|
||||||
|
|
||||||
if(!ph){
|
if(!ph){
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
let pt = obj.cardpoint;
|
let pt = obj.cardpoint;
|
||||||
@ -221,6 +221,8 @@ export class BattleHandler {
|
|||||||
ph.useCard(ps);
|
ph.useCard(ps);
|
||||||
|
|
||||||
this.onUseCardEnd(ps);
|
this.onUseCardEnd(ps);
|
||||||
|
|
||||||
|
return 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -332,11 +334,15 @@ export class BattleHandler {
|
|||||||
|
|
||||||
// --------------------调用外部接口函数--------------------------
|
// --------------------调用外部接口函数--------------------------
|
||||||
public onAddPetNotify(apet: PetHandler){
|
public onAddPetNotify(apet: PetHandler){
|
||||||
return this._room.bAddPet(apet.exportData());
|
return this._room.bAddPet(apet.exportInfoMsg());
|
||||||
};
|
};
|
||||||
|
|
||||||
public onDelPetNotify(apet: PetHandler){
|
public onDelPetNotify(apet: PetHandler){
|
||||||
return this._room.bRemovePet(apet.exportRemoveData());
|
return this._room.bRemovePet(apet.exportRemoveMsg());
|
||||||
|
};
|
||||||
|
|
||||||
|
public onUpdatePetNotify(apet: PetHandler){
|
||||||
|
return this._room.updatePet([apet.exportInfo()])
|
||||||
};
|
};
|
||||||
|
|
||||||
public onPlayerAddCardNotify(aplayer: PlayerHandler, count: number, maxcount: number, from?: PlayerHandler){
|
public onPlayerAddCardNotify(aplayer: PlayerHandler, count: number, maxcount: number, from?: PlayerHandler){
|
||||||
|
@ -7,9 +7,10 @@ import SkillMan from "../skill/SkillMan";
|
|||||||
|
|
||||||
import { EnhanceEffectType, PowerValueType, TriggerType } from "../skill/SkillConst";
|
import { EnhanceEffectType, PowerValueType, TriggerType } from "../skill/SkillConst";
|
||||||
import { PlayerHandler } from "./PlayerHandler";
|
import { PlayerHandler } from "./PlayerHandler";
|
||||||
import { PetInfoMsg } from "../../../message/PetInfo";
|
import { PetInfo, PetInfoMsg } from "../../../message/PetInfo";
|
||||||
import { SkillParam, SkillTarget } from "../skill/SkillParam";
|
import { SkillParam, SkillTarget } from "../skill/SkillParam";
|
||||||
import { RemovePetMsg } from "../../../message/RemovePetMsg";
|
import { RemovePetMsg } from "../../../message/RemovePetMsg";
|
||||||
|
import { SKillEffectData } from "message/SkillInfo";
|
||||||
|
|
||||||
export class PetHandler {
|
export class PetHandler {
|
||||||
_pet: Pet;
|
_pet: Pet;
|
||||||
@ -28,7 +29,7 @@ export class PetHandler {
|
|||||||
|
|
||||||
_baseap: number; // 基础
|
_baseap: number; // 基础
|
||||||
|
|
||||||
_exap: number = 0; // 额外
|
// _exap: number = 0; // 额外
|
||||||
|
|
||||||
_exredhurt: number = 0; // 减伤
|
_exredhurt: number = 0; // 减伤
|
||||||
|
|
||||||
@ -87,12 +88,22 @@ export class PetHandler {
|
|||||||
};
|
};
|
||||||
|
|
||||||
public clearEffHalos(){
|
public clearEffHalos(){
|
||||||
// this._effhalos.length = 0;
|
this._effhalos.length = 0;
|
||||||
this._exap = 0;
|
// this._exap = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
public addEffHalo(skill: Skill, ap: number){
|
public addEffHalo(skill: Skill){
|
||||||
this._exap += ap;
|
this._effhalos.push(skill);
|
||||||
|
// this._exap += ap;
|
||||||
|
};
|
||||||
|
|
||||||
|
public getEffHaloV(): number{
|
||||||
|
let n = 0;
|
||||||
|
this._effhalos.forEach((item: Skill) => {
|
||||||
|
n += item.getHaloValue();
|
||||||
|
});
|
||||||
|
return n;
|
||||||
|
// return this._exap;
|
||||||
};
|
};
|
||||||
|
|
||||||
public addSkill(skillid: number){
|
public addSkill(skillid: number){
|
||||||
@ -151,41 +162,64 @@ export class PetHandler {
|
|||||||
return this._owner.handleSkill(skillid, count, obj, this);
|
return this._owner.handleSkill(skillid, count, obj, this);
|
||||||
};
|
};
|
||||||
|
|
||||||
public addAP(value: number){
|
public subAP(value: number):number {
|
||||||
this._exap += value;
|
// this._exap += value;
|
||||||
if(this._exap < 0){
|
// if(this._exap < 0){
|
||||||
this._baseap += this._exap;
|
// this._baseap += this._exap;
|
||||||
this._exap = 0;
|
// this._exap = 0;
|
||||||
|
// }
|
||||||
|
if(value <= 0){
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
let n = -value;
|
||||||
|
for(let i = 0; i < this._effhalos.length;i++){
|
||||||
|
let dv = this._effhalos[i].addHaloValue(n);
|
||||||
|
n -= dv;
|
||||||
|
if(n >= 0){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(n < 0){
|
||||||
|
this._baseap += n;
|
||||||
|
}
|
||||||
|
this.dataChanged();
|
||||||
if(this._baseap < 0){
|
if(this._baseap < 0){
|
||||||
this.die();
|
this.die();
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
};
|
};
|
||||||
|
|
||||||
public addBaseAP(value: number){
|
public addBaseAP(value: number): number{
|
||||||
|
if(value == 0){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
this._baseap += value;
|
this._baseap += value;
|
||||||
|
this.dataChanged();
|
||||||
if(this._baseap < 0){
|
if(this._baseap < 0){
|
||||||
this.die();
|
this.die();
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
};
|
};
|
||||||
|
|
||||||
public addExAP(value: number){
|
public addExAP(value: number, skill: Skill){
|
||||||
return this.addAP(value);
|
// return this.addAP(value);
|
||||||
};
|
};
|
||||||
|
|
||||||
public totalAP(){
|
public totalAP(){
|
||||||
return this._baseap + this._exap;
|
return this._baseap + this.getEffHaloV();
|
||||||
};
|
};
|
||||||
|
|
||||||
public beHurt(value: number){
|
public beHurt(value: number): number{
|
||||||
let res = value * this._exredhurt;
|
let res = value - value * this._exredhurt;
|
||||||
return this.addAP(-res);
|
if(res < 0){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return this.subAP(res);
|
||||||
};
|
};
|
||||||
|
|
||||||
public addReduceHurt(value: number){
|
public addReduceHurt(value: number){
|
||||||
this._exredhurt += value;
|
this._exredhurt += value;
|
||||||
|
(value != 0) && this.dataChanged();
|
||||||
return value;
|
return value;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -225,7 +259,7 @@ export class PetHandler {
|
|||||||
public checkHalo(apet: PetHandler){
|
public checkHalo(apet: PetHandler){
|
||||||
this._halos.forEach((item: Skill)=>{
|
this._halos.forEach((item: Skill)=>{
|
||||||
if(item.isEffSelfPet(this, apet)){
|
if(item.isEffSelfPet(this, apet)){
|
||||||
this.addEffHalo(item, item.getEffValue()); // 暂时都加战力
|
this.addEffHalo(item); // 暂时都加战力
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -236,12 +270,12 @@ export class PetHandler {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
public exportData(): PetInfoMsg{
|
public exportInfoMsg(): PetInfoMsg{
|
||||||
let obj = new PetInfoMsg({
|
let obj = new PetInfoMsg({
|
||||||
id: this._id,
|
id: this._id,
|
||||||
isHero: this._isHero,
|
isHero: this._isHero,
|
||||||
ap: this._baseap,
|
ap: this._baseap,
|
||||||
extAp: this._exap,
|
extAp: this.getEffHaloV(),
|
||||||
pos: this._idx,
|
pos: this._idx,
|
||||||
player: this._owner.getId(),
|
player: this._owner.getId(),
|
||||||
harmReduce: this._exredhurt,
|
harmReduce: this._exredhurt,
|
||||||
@ -251,11 +285,29 @@ export class PetHandler {
|
|||||||
return obj;
|
return obj;
|
||||||
};
|
};
|
||||||
|
|
||||||
public exportRemoveData(): RemovePetMsg{
|
public exportRemoveMsg(): RemovePetMsg{
|
||||||
return new RemovePetMsg({
|
return new RemovePetMsg({
|
||||||
id: this._id,
|
id: this._id,
|
||||||
player: this._owner.getId(),
|
player: this._owner.getId(),
|
||||||
pos: this._idx
|
pos: this._idx
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public exportInfo(): PetInfo{
|
||||||
|
let obj = new PetInfo();
|
||||||
|
obj.id = this._id,
|
||||||
|
obj.isHero = this._isHero,
|
||||||
|
obj.ap = this._baseap,
|
||||||
|
obj.extAp = this.getEffHaloV(),
|
||||||
|
obj.pos = this._idx,
|
||||||
|
obj.player = this._owner.getId(),
|
||||||
|
obj.harmReduce = this._exredhurt,
|
||||||
|
obj.skills = this._selfskills,
|
||||||
|
obj.extSkills = this._exskills;
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
|
||||||
|
public dataChanged(){
|
||||||
|
this._owner && this._owner.onPetChanged(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,6 +81,11 @@ export class PlayerHandler {
|
|||||||
return pr;
|
return pr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public delPet(ph: PetHandler){
|
||||||
|
let idx = this._pets.indexOf(ph);
|
||||||
|
(idx >= 0) && this._pets.splice(idx, 1);
|
||||||
|
};
|
||||||
|
|
||||||
public getPet(pet: Pet){
|
public getPet(pet: Pet){
|
||||||
return this._pets.find((item:PetHandler)=>{
|
return this._pets.find((item:PetHandler)=>{
|
||||||
return item._pet == pet;
|
return item._pet == pet;
|
||||||
@ -171,21 +176,29 @@ export class PlayerHandler {
|
|||||||
// this._owner.onSkillResultNotify(lst);
|
// this._owner.onSkillResultNotify(lst);
|
||||||
}else {
|
}else {
|
||||||
let bhalo = false;
|
let bhalo = false;
|
||||||
|
let bchged = false;
|
||||||
for(let i = 0; i < count; i++){
|
for(let i = 0; i < count; i++){
|
||||||
let obj = pet.addSkill(skillid);
|
let obj = pet.addSkill(skillid);
|
||||||
if(obj.isBornSkill()){
|
if(obj){
|
||||||
lst.push(obj);
|
bchged = true;
|
||||||
}else if(obj.isDieSkill()){
|
if(obj.isBornSkill()){
|
||||||
|
lst.push(obj);
|
||||||
}else if(obj.isHaloSkill()){
|
}else if(obj.isDieSkill()){
|
||||||
bhalo = true;
|
//nothing to do
|
||||||
}else{
|
}else if(obj.isHaloSkill()){
|
||||||
lst.push(obj);
|
//only handle halo, not handle skill
|
||||||
|
bhalo = true;
|
||||||
|
}else{
|
||||||
|
lst.push(obj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(bhalo){
|
if(bhalo){
|
||||||
this.onHaloChanged(pet);
|
this.onHaloChanged(pet);
|
||||||
}
|
}
|
||||||
|
if(bchged){
|
||||||
|
pet.dataChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return this.simpleCheckSkills(lst, pet, param);
|
return this.simpleCheckSkills(lst, pet, param);
|
||||||
};
|
};
|
||||||
@ -223,23 +236,6 @@ export class PlayerHandler {
|
|||||||
return this._player.hp;
|
return this._player.hp;
|
||||||
};
|
};
|
||||||
|
|
||||||
public checkHalo(apet:PetHandler){
|
|
||||||
this._self.clearEffHalos();
|
|
||||||
this._pets.forEach((obj:PetHandler)=>{
|
|
||||||
obj.clearEffHalos();
|
|
||||||
});
|
|
||||||
this._pets.forEach((obj: PetHandler)=>{
|
|
||||||
if(obj != apet){
|
|
||||||
obj.checkHalo(apet);
|
|
||||||
}
|
|
||||||
apet.checkHalo(obj);
|
|
||||||
});
|
|
||||||
if(this._self != apet){
|
|
||||||
this._self.checkHalo(apet);
|
|
||||||
apet.checkHalo(this._self);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public setFriend(aplayer: PlayerHandler){
|
public setFriend(aplayer: PlayerHandler){
|
||||||
this._friend = aplayer;
|
this._friend = aplayer;
|
||||||
};
|
};
|
||||||
@ -265,10 +261,29 @@ export class PlayerHandler {
|
|||||||
|
|
||||||
// 遗愿
|
// 遗愿
|
||||||
this.simpleCheckSkills(apet._dieSkills, apet);
|
this.simpleCheckSkills(apet._dieSkills, apet);
|
||||||
|
|
||||||
|
this.delPet(apet);
|
||||||
|
};
|
||||||
|
|
||||||
|
public onPetChanged(apet: PetHandler){
|
||||||
|
this._owner.onUpdatePetNotify(apet);
|
||||||
};
|
};
|
||||||
|
|
||||||
public onHaloChanged(apet: PetHandler){
|
public onHaloChanged(apet: PetHandler){
|
||||||
this.checkHalo(apet);
|
this._self.clearEffHalos();
|
||||||
|
this._pets.forEach((obj:PetHandler)=>{
|
||||||
|
obj.clearEffHalos();
|
||||||
|
});
|
||||||
|
this._pets.forEach((obj: PetHandler)=>{
|
||||||
|
if(obj != apet){
|
||||||
|
obj.checkHalo(apet);
|
||||||
|
}
|
||||||
|
apet.checkHalo(obj);
|
||||||
|
});
|
||||||
|
if(this._self != apet){
|
||||||
|
this._self.checkHalo(apet);
|
||||||
|
apet.checkHalo(this._self);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public isMyPet(apet: PetHandler){
|
public isMyPet(apet: PetHandler){
|
||||||
|
@ -23,7 +23,7 @@ export class Skill {
|
|||||||
_start: boolean;
|
_start: boolean;
|
||||||
_cb: any;
|
_cb: any;
|
||||||
|
|
||||||
ap: number = 0;
|
halo_v: number = -1;
|
||||||
rd: number = 0;
|
rd: number = 0;
|
||||||
// LIFE-CYCLE CALLBACKS:
|
// LIFE-CYCLE CALLBACKS:
|
||||||
|
|
||||||
@ -135,6 +135,7 @@ export class Skill {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 是否能影响自己
|
||||||
isEffSelfPet(srcpet: PetHandler, dstpet: PetHandler){
|
isEffSelfPet(srcpet: PetHandler, dstpet: PetHandler){
|
||||||
if(this._data.friendlyid != GameCampType.SELF){
|
if(this._data.friendlyid != GameCampType.SELF){
|
||||||
return false;
|
return false;
|
||||||
@ -166,6 +167,33 @@ export class Skill {
|
|||||||
this._data.num_signid, this._data.eff_num, ap? ap: this._data.eff_num);
|
this._data.num_signid, this._data.eff_num, ap? ap: this._data.eff_num);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
getHaloValue(ap?: number): number{
|
||||||
|
if(!this.isHaloSkill()){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(this.halo_v < 0){
|
||||||
|
this.halo_v = this.getEffValue(ap);
|
||||||
|
}
|
||||||
|
return this.halo_v;
|
||||||
|
};
|
||||||
|
|
||||||
|
addHaloValue(v: number): number{
|
||||||
|
if(this.halo_v < 0){
|
||||||
|
this.halo_v = this.getEffValue();
|
||||||
|
}
|
||||||
|
if(this.halo_v > 0){
|
||||||
|
let tmp = this.halo_v;
|
||||||
|
this.halo_v += v;
|
||||||
|
if(this.halo_v < 0){
|
||||||
|
this.halo_v = 0;
|
||||||
|
return -tmp;
|
||||||
|
}else{
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
|
||||||
trigger(param: SkillParam, cb?: any) {
|
trigger(param: SkillParam, cb?: any) {
|
||||||
//触发buff效果
|
//触发buff效果
|
||||||
let res = TriggerManager.onTrigger(this, param);
|
let res = TriggerManager.onTrigger(this, param);
|
||||||
@ -249,7 +277,7 @@ export class Skill {
|
|||||||
case SkillEffectType.POWER_ENHANCE:
|
case SkillEffectType.POWER_ENHANCE:
|
||||||
case SkillEffectType.POWEREX_ENHANCE:
|
case SkillEffectType.POWEREX_ENHANCE:
|
||||||
if(tgt.dsttype != GameUnitType.NONE && tgt.dsttype != GameUnitType.PLAYER){
|
if(tgt.dsttype != GameUnitType.NONE && tgt.dsttype != GameUnitType.PLAYER){
|
||||||
let n = efftype == SkillEffectType.POWER_ENHANCE? tgt.dst.addBaseAP(effvalue): tgt.dst.addExAP(effvalue);
|
let n = efftype == SkillEffectType.POWER_ENHANCE? tgt.dst.addBaseAP(effvalue): tgt.dst.addExAP(effvalue, this);
|
||||||
tgt.success(efftype, n);
|
tgt.success(efftype, n);
|
||||||
}else{
|
}else{
|
||||||
tgt.fail(efftype, -1);
|
tgt.fail(efftype, -1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user