logic handle -- not finish

This commit is contained in:
y.x 2020-12-21 04:13:51 +08:00
parent 25602c4885
commit 9a4a68ad9a
6 changed files with 237 additions and 28 deletions

BIN
doc/todolist8.3.xmind Normal file

Binary file not shown.

View File

@ -27,6 +27,8 @@ export class PetHandler {
_waitskills: Skill[] = [];
_attackskills: Skill[] = [];
_baseap: number; // 基础
_basehp: number = 0;
@ -39,6 +41,8 @@ export class PetHandler {
_istaunt: boolean = false; // 是否是嘲讽
_rebornskill: Skill = null; // 是否可复活
_isSilent: boolean = false; // 是否被沉默
_silentCD: number = 0; // 沉默剩余回合
@ -48,6 +52,8 @@ export class PetHandler {
_bakBaseap: number;
_hasreborned: boolean = false;
public init(apet: Pet, owner: PlayerHandler, index: number){
this._pet = apet;
this._owner = owner;
@ -130,7 +136,7 @@ export class PetHandler {
return lst;
};
public addSkill(skillid: number){
public addSkill(skillid: number): Skill{
if(skillid > 0){
let obj = this._skills.get(skillid);
if(!obj){
@ -219,11 +225,19 @@ export class PetHandler {
this._bakBaseap = this._baseap;
this._baseap += value;
this._ceilBaseAP();
this.dataChanged();
if(this._baseap <= 0){
if(this._isHero){
this._baseap = 0;
this.dataChanged();
this.addHP(this._baseap);
}else{
this.die();
}
}else{
this._ceilBaseAP();
this.dataChanged();
}
return value;
};
@ -245,7 +259,15 @@ export class PetHandler {
};
public addHP(value: number){
if(value == 0){
return;
}
if(this._isHero){
if(this._owner.canBeKill(value) && this.canReborn()){
// 直接复活
this._owner.simpleCheckSkills([this._rebornskill], this);
return;
}
return this._owner.addHP(value);
}
return 0;
@ -257,8 +279,12 @@ export class PetHandler {
return value;
};
public addEM(value: number){
return this._owner.addEM(value);
};
public born(param: SkillParam){
this._owner && this._owner.onPetBorned(this, param);
this._owner.onPetBorned(this, param);
};
public isDead(){
@ -266,15 +292,46 @@ export class PetHandler {
};
public die(){
this._owner && this._owner.onPetDied(this);
this._owner.onPetDied(this);
};
public attack(apet: PetHandler, param: SkillParam){
//todo:
return 0;
};
beforeAttack(){
//todo:
};
afterAttack(){
//todo:
};
public reborn(){
if(this._hasreborned){
// this.die();
return false;
}
if(this._baseap <= 0){
this._effhalos.forEach((item: Skill) => {
item.resetHaloValue();
});
this._baseap = this._bakBaseap;
this._bakBaseap = 0;
this.dataChanged();
}
this._hasreborned = true;
return true;
};
public canReborn(): boolean{
return this._rebornskill != null && !this._isSilent && !this._hasreborned;
};
public clear(){
@ -295,7 +352,7 @@ export class PetHandler {
};
public isTaunt(){
return this._istaunt;
return this._istaunt && !this._isSilent;
};
public isSilent(){
@ -310,8 +367,10 @@ export class PetHandler {
this._isSilent = true;
this._silentCD = count;
if(this.hasHaloSkill()){
//todo:
}
return count;
};
public hasHaloSkill(): boolean{
@ -398,6 +457,6 @@ export class PetHandler {
};
public dataChanged(){
this._owner && this._owner.onPetChanged(this);
this._owner.onPetChanged(this);
}
}

View File

@ -11,6 +11,7 @@ import { SkillParam, SkillTarget } from "../skill/SkillParam";
import SkillMan from "../skill/SkillMan";
import { Card } from "rooms/schema/Card";
import arrUtil from "utils/array.util";
import { SKillEffectData } from "message/SkillInfo";
export class PlayerHandler {
public _player: Player;
@ -27,7 +28,10 @@ export class PlayerHandler {
public _friend: PlayerHandler;
public _enmagic: number = 0; // 法术强化
_totalcc: number = 0;
private _bakhp: number = 0;
public init(aplayer: Player, owner: BattleHandler){
this._owner = owner;
@ -176,6 +180,10 @@ export class PlayerHandler {
return obj;
};
public addSkill(skillid: number): Skill{
return this._self.addSkill(skillid);
};
public handleSkill(skillid: number, count: number, param: SkillParam, pet: PetHandler):SkillTarget[]{
let cfg = CfgMan.findSkillCfg(skillid);
if(!cfg){
@ -246,7 +254,8 @@ export class PlayerHandler {
return this._owner.onPlayerStealCardNotify(this, dstplayer, count);
};
public addHP(value: number){
public addHP(value: number): number{
this._bakhp = this.getHP();
return this._owner.onPlayerAddHPNotify(this, value);
};
@ -254,6 +263,20 @@ export class PlayerHandler {
return this._player.hp;
};
public addEM(value: number): number{
let tmp = this._enmagic;
this._enmagic += value;
if(this._enmagic < 0){
this._enmagic = 0;
return tmp;
}
return value;
};
public getEM(){
return this._enmagic;
};
public setFriend(aplayer: PlayerHandler){
this._friend = aplayer;
};
@ -263,6 +286,26 @@ export class PlayerHandler {
//todo:
};
public reborn(){
return this._self.reborn();
};
public attack(apet: PetHandler, param: SkillParam){
return this._self.attack(apet, param);
};
public beSilent(count: number){
return this._self.beSilent(count);
};
public canBeKill(subhp: number): boolean{
if(subhp >= 0){
return false;
}
let hp = this.getHP();
return (hp + subhp <= 0);
};
public isAlive(): boolean{
return this._player.state != 2;
};

View File

@ -24,7 +24,6 @@ export class Skill {
_cb: any;
halo_v: number = -1;
reborn_v: number = -1;
rd: number = 0;
// LIFE-CYCLE CALLBACKS:
@ -104,6 +103,10 @@ export class Skill {
return this._data.effect_typeid == SkillEffectType.HURT_POWER;
};
isRebornSkill(){
return this._data.effect_typeid == SkillEffectType.REBORN;
};
isSingleTarget(){
switch(this._data.rangeid){
case SkillRangeUnitType.ALL:
@ -309,6 +312,7 @@ export class Skill {
}
break;
case SkillEffectType.HURT_POWER:
case SkillEffectType.HURT_ALL:
if(tgt.dsttype != GameUnitType.NONE && tgt.dsttype != GameUnitType.PLAYER){
let n = (tgt.dst as PetHandler).beHurt(effvalue);
tgt.success(efftype, n);
@ -335,17 +339,31 @@ export class Skill {
let ncount = 1 + exparam.edd_cnt;
switch(efftype){
case SkillEffectType.SUMMON_NPC:
{
let obj = tgt.srcpet? tgt.srcpet: tgt.srcplayer;
let n = obj.summonPet(this._data.quoteunitid, ncount, exparam);
if(n >= 0){
tgt.success(efftype, n);
}
}
break;
case SkillEffectType.SUMMON_SKILL:
let res = tgt.dst.useSkill(this._data.quoteskillid, ncount, exparam);
{
let obj = tgt.srcpet? tgt.srcpet: tgt.srcplayer;
let res = obj.useSkill(this._data.quoteskillid, ncount, exparam);
if(res){
tgt.success(efftype, res.length);
}
}
break;
case SkillEffectType.SKILL_GET:
{
let obj = tgt.srcpet? tgt.srcpet: tgt.srcplayer;
let n = obj.addSkill(this._data.quoteskillid);
if(n){
tgt.success(efftype, this._data.quoteskillid);
}
}
break;
default:
break;
@ -376,6 +394,69 @@ export class Skill {
}
};
enhanceMagic(effvalue: number, tgt: SkillTarget){
let efftype = SkillEffectType.ENHANCE_MAGIC;
if(tgt.dsttype != GameUnitType.NONE){
let obj = tgt.dst;
let n = obj.addEM(effvalue);
if(n >= 0){
tgt.success(efftype, n);
}
}else{
tgt.fail(efftype, -1);
}
};
reborn(tgt: SkillTarget){
let efftype = SkillEffectType.REBORN;
if(tgt.dsttype != GameUnitType.NONE){
let res = tgt.dst.reborn();
if(res){
tgt.success(efftype, 1);
}
}else{
tgt.fail(efftype, -1);
}
};
silent(effvalue: number, tgt: SkillTarget){
let efftype = SkillEffectType.REBORN;
if(tgt.dsttype != GameUnitType.NONE){
let res = tgt.dst.beSilent(effvalue);
if(res){
tgt.success(efftype, res);
}
}else{
tgt.fail(efftype, -1);
}
};
attack(tgt: SkillTarget, param: SkillParam){
let efftype = SkillEffectType.ATTACK;
if(tgt.dsttype == GameUnitType.HERO || tgt.dsttype == GameUnitType.PET){
let obj = tgt.srcpet? tgt.srcpet: tgt.srcplayer;
let res = obj.attack((tgt.dst as PetHandler), param);
if(res){
tgt.success(efftype, res);
}
}else{
tgt.fail(efftype, -1);
}
};
attack_back(effvalue: number, tgt: SkillTarget, param: SkillParam){
let efftype = SkillEffectType.ATTACK_BACK;
if(tgt.dsttype == GameUnitType.HERO || tgt.dsttype == GameUnitType.PET){
let obj = tgt.srcpet? tgt.srcpet: tgt.srcplayer;
let res = obj.attack((tgt.dst as PetHandler), param);
if(res){
tgt.success(efftype, res);
}
}else{
tgt.fail(efftype, -1);
}
};
setOwner(owner: PlayerHandler) {
this._owner = owner;
};

View File

@ -24,12 +24,6 @@ export const enum CondType
CARD_ACTION_LINK_OTHER = 4,
CARD_ACTION_LINK_SELF = 5,
BE_ATTACK = 6,
BE_HURT = 7,
BEFORE_ATTACK = 8,
};
// 判断方式
@ -74,6 +68,12 @@ export const enum TriggerType
CARD_DROP_MYROUND = 7,
ROUND_START_MYSELF = 8,
BE_ATTACK = 9,
BE_HURT = 10,
BEFORE_ATTACK = 11,
};
// 技能大类

View File

@ -99,6 +99,7 @@ let TriggerManager = {
case SkillEffectType.POWER_ENHANCE:
case SkillEffectType.POWEREX_ENHANCE:
case SkillEffectType.HURT_POWER:
case SkillEffectType.HURT_ALL:
tgts.forEach((item)=>{
sender.handlePower(effectid, effv + env, item);
});
@ -129,6 +130,31 @@ let TriggerManager = {
sender.reduceHurt(effv + env, item);
});
break;
case SkillEffectType.REBORN:
tgts.forEach((item)=>{
sender.reborn(item);
});
break;
case SkillEffectType.ENHANCE_MAGIC:
tgts.forEach((item)=>{
sender.enhanceMagic(effv + env, item);
});
break;
case SkillEffectType.SILENT:
tgts.forEach((item)=>{
sender.silent(effv + env, item);
});
break;
case SkillEffectType.ATTACK:
tgts.forEach((item)=>{
sender.attack(item, param);
});
break;
case SkillEffectType.ATTACK_BACK:
tgts.forEach((item)=>{
sender.attack_back(effv + env, item, param);
});
break;
default:
break;
}