Merge branch 'second' of git.kingsome.cn:node/card_svr into second

This commit is contained in:
zhl 2021-01-11 17:14:57 +08:00
commit 1a3c295c79
12 changed files with 171 additions and 60 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

BIN
doc/todolist2021.xmind Normal file

Binary file not shown.

View File

@ -234,7 +234,11 @@ export class PetHandler {
};
public useSkill(skillid: number, count: number, obj: SkillParam): SkillTarget[]{
return this._owner.handleSkill(skillid, count, obj, this);
return this._owner.handleSkill(skillid, count, this, this, obj);
};
public useSkillEx(skillid: number, count: number, sender: PetHandler): SkillTarget[]{
return this._owner.handleSkill(skillid, count, this, sender);
};
public subAP(value: number, from: PetHandler):number {
@ -352,7 +356,7 @@ export class PetHandler {
if(this._isHero){
if(this._owner.canBeKill(value) && this.canReborn()){
// 直接复活
this._owner.simpleCheckSkills([this._rebornskill], this);
this._owner.simpleCheckSkills([this._rebornskill], true, this);
return 0;
}
return this._owner.addHP(value, from);

View File

@ -214,9 +214,13 @@ export class PlayerHandler {
};
public useSkill(skillid: number, count: number, obj: SkillParam): SkillTarget[]{
return this.handleSkill(skillid, count, obj, this._self);
return this.handleSkill(skillid, count, this._self, this._self, obj);
};
public useSkillEx(skillid: number, count: number, sender: PetHandler): SkillTarget[]{
return this.handleSkill(skillid, count, this._self, sender);
};
public newSkill(skillid: number): Skill{
let obj = SkillMan.getSkill(skillid);
if(obj){
@ -225,11 +229,7 @@ export class PlayerHandler {
return obj;
};
public addSkill(skillid: number, count: number = 1, sender?: PetHandler): Skill[]{
return this._self? this._self.addSkill(skillid, count, sender): null;
};
public handleSkill(skillid: number, count: number, param: SkillParam, pet: PetHandler):SkillTarget[]{
public handleSkill(skillid: number, count: number, pet: PetHandler, sender?: PetHandler, param?: SkillParam):SkillTarget[]{
let cfg = CfgMan.findSkillCfg(skillid);
if(!cfg){
return null;
@ -243,23 +243,21 @@ export class PlayerHandler {
}else {
let bhalo = false;
let bchged = false;
for(let i = 0; i < count; i++){
let sl = pet.addSkill(skillid);
if(sl && sl.length > 0){
bchged = true;
sl.forEach((obj: Skill)=>{
if(obj.isBornSkill()){
lst.push(obj);
}else if(obj.isDieSkill()){
//nothing to do
}else if(obj.isAPHaloSkill() || obj.isBuffHaloSkill()){
//only handle halo, not handle skill
bhalo = true;
}else{
lst.push(obj);
}
});
}
let sl = pet.addSkill(skillid, count, sender);
if(sl && sl.length > 0){
bchged = true;
sl.forEach((obj: Skill)=>{
if(obj.isBornSkill()){
lst.push(obj);
}else if(obj.isDieSkill()){
//nothing to do
}else if(obj.isAPHaloSkill() || obj.isBuffHaloSkill()){
//only handle halo, not handle skill
bhalo = true;
}else{
lst.push(obj);
}
});
}
if(bhalo){
this.onHaloAdd(pet, true);
@ -268,7 +266,7 @@ export class PlayerHandler {
pet.dataChanged(pet);
}
}
return this.simpleCheckSkills(lst, pet, param);
return this.simpleCheckSkills(lst, false, pet, param);
};
public summonPet(petid: number, count: number = 1, exparam: SkillParam):number{
@ -410,7 +408,7 @@ export class PlayerHandler {
this.onEMChanged(apet._enmagic);//增加法强
// 战吼
if(!apet.isSilent()){
this.simpleCheckSkills(apet._bornSkills, apet, param);
this.simpleCheckSkills(apet._bornSkills, true, apet, param);
}
this.checkSkills(TriggerType.PET_BORN, null, null, apet);
@ -419,7 +417,7 @@ export class PlayerHandler {
public onPetDied(apet: PetHandler): boolean{
// 遗愿
if(!apet.isSilent()){
this.simpleCheckSkills(apet._dieSkills);
this.simpleCheckSkills(apet._dieSkills, true);
}
if(apet.isAlive()){
@ -750,7 +748,10 @@ export class PlayerHandler {
this._owner.onSkillResult(reslst);
};
simpleCheckSkills(skills: Skill[], apet?: PetHandler, param?: SkillParam): SkillTarget[]{
simpleCheckSkills(skills: Skill[], runimm: boolean, apet?: PetHandler, param?: SkillParam): SkillTarget[]{
if(!skills || skills.length <= 0){
return null;
}
let sp = param? param: new SkillParam(0, 0, 0, this, apet, this, apet);
if(sp && sp.cardid == 0 && apet){
if(!sp.edd_cnt){
@ -762,7 +763,7 @@ export class PlayerHandler {
}
let reslst: SkillTarget[] = [];
skills.forEach((item: Skill)=>{
item.checkTrigger(TriggerType.NO_COND, null, sp, (skill: Skill, ap: SkillParam, res: SkillTarget[])=>{
item.checkTrigger(runimm? TriggerType.NO_COND: TriggerType.NORMAL, null, sp, (skill: Skill, ap: SkillParam, res: SkillTarget[])=>{
if(res){
reslst.push(...res);
}else{

View File

@ -468,6 +468,7 @@ export class Skill {
let n = efftype == SkillEffectType.POWER_ENHANCE? tgt.dst.addBaseAP(effvalue, tgt.srcPet())
: tgt.dst.addExAP(effvalue, tgt.srcPet());
tgt.success(efftype, n);
tgt.success(SkillEffectType.CHG_AP, n);
}else{
tgt.fail(efftype, -1);
}
@ -478,12 +479,16 @@ export class Skill {
if(tgt.dsttype != GameUnitType.NONE){
let oldhp = tgt.dst.getHP();
let n = tgt.dst.beHurt(effv, tgt.srcPet());
tgt.success(efftype, n);
if(n != 0){
tgt.success(SkillEffectType.HURT_POWER, n);
tgt.success(SkillEffectType.CHG_AP, n);
}
let dthp = tgt.dst.getHP() - oldhp;
if(dthp != 0){
tgt.success(SkillEffectType.HURT_HP, dthp);
tgt.success(SkillEffectType.CHG_HP, dthp);
}
if(n == 0 && dthp == 0){
tgt.success(SkillEffectType.CHG_AP, 0);
}
let hv = n + dthp;
let pet = tgt.srcPet();
@ -491,7 +496,7 @@ export class Skill {
//吸血
let sv = pet.HPS(hv);
if(sv != 0){
tgt.success(SkillEffectType.HURT_POWER, sv, true);
tgt.success(SkillEffectType.CHG_AP, sv, true);
}
}
}else{
@ -509,6 +514,7 @@ export class Skill {
let effv = this.EMV(effvalue);
let n = tgt.dst.addHP(effv, tgt.srcPet());
tgt.success(efftype, n);
tgt.success(SkillEffectType.CHG_HP, n);
}else{
tgt.fail(efftype, -1);
}
@ -525,7 +531,7 @@ export class Skill {
}
};
summon(efftype: SkillEffectType, exparam: SkillParam, tgt: SkillTarget){
summon(efftype: SkillEffectType, exparam: SkillParam, tgt: SkillTarget){
switch(efftype){
case SkillEffectType.SUMMON_NPC:
{
@ -543,6 +549,10 @@ export class Skill {
case SkillEffectType.SUMMON_SKILL:
{
let obj = tgt.srcpet? tgt.srcpet: tgt.srcplayer;
if(!obj){
tgt.fail(efftype, -1);
return;
}
let n1 = this.getQuoteValue(this._data.quoteskill_times, this._data.quoteskill_timesmax, exparam.edd_cnt);
let r1 = obj.useSkill(this._data.quoteskillid, n1, exparam);
@ -568,19 +578,35 @@ export class Skill {
}
}
let ncount = this.getFinalValue(EnhanceCustomType.GET_TIMES, this._data.getskill_times, this._data.getskill_timesmax,
exparam.edd_cnt, true);
let obj = tgt.getTarget(this._data.skill_ownersid);
let n1 = obj? obj.addSkill(this._data.getskillid, ncount, sender): 0;
n1 && tgt.success(efftype, this._data.getskillid);
let bres1 = false, bres2 = false;
ncount = this.getFinalValue(EnhanceCustomType.GET_TIMES, this._data.getskill2_times, this._data.getskill2_timesmax,
exparam.edd_cnt, true);
obj = tgt.getTarget(this._data.skill2_ownersid);
let n2 = obj? obj.addSkill(this._data.getskill2id, ncount, sender): 0;
n2 && tgt.success(efftype, this._data.getskill2id);
if(this._data.getskillid){
let obj = tgt.getTarget(this._data.skill_ownersid);
if(!obj){
tgt.fail(efftype, this._data.getskillid);
}else{
let ncount = this.getFinalValue(EnhanceCustomType.GET_TIMES, this._data.getskill_times, this._data.getskill_timesmax,
exparam.edd_cnt, true);
let res = obj.useSkillEx(this._data.getskillid, ncount, sender);
res? tgt.success(efftype, this._data.getskillid): tgt.fail(efftype, this._data.getskillid);
}
bres1 = true;
}
if(!n1 && !n2){
if(this._data.getskill2id){
let obj = tgt.getTarget(this._data.skill2_ownersid);
if(!obj){
tgt.fail(efftype, this._data.getskill2id);
}else{
let ncount = this.getFinalValue(EnhanceCustomType.GET_TIMES, this._data.getskill2_times, this._data.getskill2_timesmax,
exparam.edd_cnt, true);
let res = obj.useSkillEx(this._data.getskill2id, ncount, sender);
res? tgt.success(efftype, this._data.getskill2id): tgt.fail(efftype, this._data.getskill2id);
}
bres2 = true;
}
if(!bres1 && !bres2){
tgt.fail(efftype, -1);
}
}
@ -694,7 +720,10 @@ export class Skill {
// let n = obj.canAttack()? obj.attack(this, dst, param, v, isAtkBack): 1;
let n = obj.attack(this, dst, param, v, isAtkBack);
if(n <= 0){
tgt.success(SkillEffectType.HURT_POWER, n);
tgt.success(efftype, n);
if(n != 0){
tgt.success(SkillEffectType.CHG_AP, n);
}
// if(this._data.quoteskillid){
// let dp = this._data.skill_users? param.oppClone(): param;
// let pet = tgt.srcpet;
@ -705,7 +734,10 @@ export class Skill {
// }
let dthp = tgt.dst.getHP() - oldhp;
if(dthp != 0){
tgt.success(SkillEffectType.HURT_HP, dthp);
tgt.success(SkillEffectType.CHG_HP, dthp);
}
if(n == 0 && dthp == 0){
tgt.success(SkillEffectType.CHG_AP, 0);
}
let hv = n + dthp;
let pet = tgt.srcPet();
@ -713,7 +745,7 @@ export class Skill {
//吸血
let sv = pet.HPS(hv);
if(sv != 0){
tgt.success(SkillEffectType.HURT_POWER, sv, true);
tgt.success(SkillEffectType.CHG_AP, sv, true);
}
}
tgt.success(efftype, hv);

View File

@ -61,7 +61,7 @@ export const enum CondDecideType {
* 6.
* 7.
* 8.
* 10.
* 10.
* 11.
* 12.ID40122
* 13.
@ -93,6 +93,8 @@ export const enum TriggerType
ROUND_START_MYSELF = 8,
NORMAL = 9,
BE_HURT = 11,
BEFORE_ATTACK = 12,
@ -190,7 +192,7 @@ export const enum SkillRangeUnitType{
* 3.
* 4.
* 5.HP性质的战力
* 6.
* 6.// 暂无用
* 7.
* 8.ID
* 9.ID // 已废弃
@ -239,6 +241,9 @@ export const enum SkillEffectType
CARD_DROP = 29,
BUFF_SHIELD = 30,
HP_STEAL_ENHANCE = 31,
CHG_AP = 10001,
CHG_HP = 10002,
};
// 技能效果参数类型

View File

@ -204,6 +204,7 @@ export class SkillTarget{
return this.bresok? this.lasttime: 0;
};
// 暂无用
public exportData(): SkillInfoMsg{
let msg = new SkillInfoMsg();
msg.data = new SkillInfoData();
@ -236,10 +237,12 @@ export class SkillTarget{
obj.pos = st.srcpet? st.srcpet._idx: 0;
obj.datas = [];
lst.forEach((item: SkillTarget) => {
item.res && item.res.forEach((skres: SkillResult) => {
let ed = item.exportResData(skres);
ed && obj.datas.push(ed);
});
let eds = item.exportEffDatas();
eds && obj.datas.push(...eds);
// item.res && item.res.forEach((skres: SkillResult) => {
// let ed = item.exportResData(skres);
// ed && obj.datas.push(ed);
// });
});
return msg;
};
@ -271,6 +274,67 @@ export class SkillTarget{
}
return null;
};
public exportEffData(reslst: SkillResult[], bopp: boolean = false): SKillEffectData{
if(!reslst || reslst.length <= 0){
return null;
}
let ed = new SKillEffectData();
let item = this;
if(bopp){
ed.pos = item.srcPet()._idx;
ed.player = item.srcPlayer().getId();
}else{
if(item.dsttype == GameUnitType.PLAYER){
ed.pos = 0;
ed.player = (item.dst as PlayerHandler).getId();
}else {
ed.pos = (item.dst as PetHandler)._idx;
ed.player = (item.dst as PetHandler)._owner.getId();
}
}
reslst.forEach((item: SkillResult) => {
let obj = {
effect_id: item.effect_type,
val: item.bsuccess? item.effect_res: item.err,
result: item.bsuccess? 0: -1,
};
if(!ed.data){
ed.data = [obj];
}else{
ed.data.push(obj);
}
});
return ed;
};
public exportEffDatas(): SKillEffectData[]{
if(!this.res){
return null;
}
let r1: SkillResult[] = [];
let r2: SkillResult[] = [];
this.res.forEach((item: SkillResult) => {
if(item.beffsrc){
r2.push(item);
}else{
r1.push(item);
}
});
let reslst = [];
let res = this.exportEffData(r1);
res && reslst.push(res);
res = this.exportEffData(r2, true);
res && reslst.push(res);
return reslst;
}
};

View File

@ -7,6 +7,9 @@ export class Trigger {
};
isOK(tg_type: any){
if(this._type == TriggerType.NO_COND){
return true;
}
return this._type == tg_type;
};
}

View File

@ -86,14 +86,16 @@ let TriggerManager = {
tgts = sender.getTargets(param);
}
if(!tgts || !tgts.length){
if(!tgts || tgts.length <= 0){
return null;
}
switch (effectid) {
case SkillEffectType.NONE:
return tgts;
tgts.forEach((item: SkillTarget) =>{
item.success(effectid, 0);
});
break;
case SkillEffectType.CARD_ADD:
case SkillEffectType.CARD_ADD_LIMIT:
case SkillEffectType.CARD_STEAL: