logic handle -- not finish
This commit is contained in:
parent
25602c4885
commit
9a4a68ad9a
BIN
doc/todolist8.3.xmind
Normal file
BIN
doc/todolist8.3.xmind
Normal file
Binary file not shown.
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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,
|
||||
};
|
||||
|
||||
// 技能大类
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user