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[]{ 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 { public subAP(value: number, from: PetHandler):number {
@ -352,7 +356,7 @@ export class PetHandler {
if(this._isHero){ if(this._isHero){
if(this._owner.canBeKill(value) && this.canReborn()){ if(this._owner.canBeKill(value) && this.canReborn()){
// 直接复活 // 直接复活
this._owner.simpleCheckSkills([this._rebornskill], this); this._owner.simpleCheckSkills([this._rebornskill], true, this);
return 0; return 0;
} }
return this._owner.addHP(value, from); return this._owner.addHP(value, from);

View File

@ -214,7 +214,11 @@ export class PlayerHandler {
}; };
public useSkill(skillid: number, count: number, obj: SkillParam): SkillTarget[]{ 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{ public newSkill(skillid: number): Skill{
@ -225,11 +229,7 @@ export class PlayerHandler {
return obj; return obj;
}; };
public addSkill(skillid: number, count: number = 1, sender?: PetHandler): Skill[]{ public handleSkill(skillid: number, count: number, pet: PetHandler, sender?: PetHandler, param?: SkillParam):SkillTarget[]{
return this._self? this._self.addSkill(skillid, count, sender): null;
};
public handleSkill(skillid: number, count: number, param: SkillParam, pet: PetHandler):SkillTarget[]{
let cfg = CfgMan.findSkillCfg(skillid); let cfg = CfgMan.findSkillCfg(skillid);
if(!cfg){ if(!cfg){
return null; return null;
@ -243,8 +243,7 @@ export class PlayerHandler {
}else { }else {
let bhalo = false; let bhalo = false;
let bchged = false; let bchged = false;
for(let i = 0; i < count; i++){ let sl = pet.addSkill(skillid, count, sender);
let sl = pet.addSkill(skillid);
if(sl && sl.length > 0){ if(sl && sl.length > 0){
bchged = true; bchged = true;
sl.forEach((obj: Skill)=>{ sl.forEach((obj: Skill)=>{
@ -260,7 +259,6 @@ export class PlayerHandler {
} }
}); });
} }
}
if(bhalo){ if(bhalo){
this.onHaloAdd(pet, true); this.onHaloAdd(pet, true);
} }
@ -268,7 +266,7 @@ export class PlayerHandler {
pet.dataChanged(pet); 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{ public summonPet(petid: number, count: number = 1, exparam: SkillParam):number{
@ -410,7 +408,7 @@ export class PlayerHandler {
this.onEMChanged(apet._enmagic);//增加法强 this.onEMChanged(apet._enmagic);//增加法强
// 战吼 // 战吼
if(!apet.isSilent()){ if(!apet.isSilent()){
this.simpleCheckSkills(apet._bornSkills, apet, param); this.simpleCheckSkills(apet._bornSkills, true, apet, param);
} }
this.checkSkills(TriggerType.PET_BORN, null, null, apet); this.checkSkills(TriggerType.PET_BORN, null, null, apet);
@ -419,7 +417,7 @@ export class PlayerHandler {
public onPetDied(apet: PetHandler): boolean{ public onPetDied(apet: PetHandler): boolean{
// 遗愿 // 遗愿
if(!apet.isSilent()){ if(!apet.isSilent()){
this.simpleCheckSkills(apet._dieSkills); this.simpleCheckSkills(apet._dieSkills, true);
} }
if(apet.isAlive()){ if(apet.isAlive()){
@ -750,7 +748,10 @@ export class PlayerHandler {
this._owner.onSkillResult(reslst); 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); let sp = param? param: new SkillParam(0, 0, 0, this, apet, this, apet);
if(sp && sp.cardid == 0 && apet){ if(sp && sp.cardid == 0 && apet){
if(!sp.edd_cnt){ if(!sp.edd_cnt){
@ -762,7 +763,7 @@ export class PlayerHandler {
} }
let reslst: SkillTarget[] = []; let reslst: SkillTarget[] = [];
skills.forEach((item: Skill)=>{ 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){ if(res){
reslst.push(...res); reslst.push(...res);
}else{ }else{

View File

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

View File

@ -61,7 +61,7 @@ export const enum CondDecideType {
* 6. * 6.
* 7. * 7.
* 8. * 8.
* 10. * 10.
* 11. * 11.
* 12.ID40122 * 12.ID40122
* 13. * 13.
@ -93,6 +93,8 @@ export const enum TriggerType
ROUND_START_MYSELF = 8, ROUND_START_MYSELF = 8,
NORMAL = 9,
BE_HURT = 11, BE_HURT = 11,
BEFORE_ATTACK = 12, BEFORE_ATTACK = 12,
@ -190,7 +192,7 @@ export const enum SkillRangeUnitType{
* 3. * 3.
* 4. * 4.
* 5.HP性质的战力 * 5.HP性质的战力
* 6. * 6.// 暂无用
* 7. * 7.
* 8.ID * 8.ID
* 9.ID // 已废弃 * 9.ID // 已废弃
@ -239,6 +241,9 @@ export const enum SkillEffectType
CARD_DROP = 29, CARD_DROP = 29,
BUFF_SHIELD = 30, BUFF_SHIELD = 30,
HP_STEAL_ENHANCE = 31, 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; return this.bresok? this.lasttime: 0;
}; };
// 暂无用
public exportData(): SkillInfoMsg{ public exportData(): SkillInfoMsg{
let msg = new SkillInfoMsg(); let msg = new SkillInfoMsg();
msg.data = new SkillInfoData(); msg.data = new SkillInfoData();
@ -236,10 +237,12 @@ export class SkillTarget{
obj.pos = st.srcpet? st.srcpet._idx: 0; obj.pos = st.srcpet? st.srcpet._idx: 0;
obj.datas = []; obj.datas = [];
lst.forEach((item: SkillTarget) => { lst.forEach((item: SkillTarget) => {
item.res && item.res.forEach((skres: SkillResult) => { let eds = item.exportEffDatas();
let ed = item.exportResData(skres); eds && obj.datas.push(...eds);
ed && obj.datas.push(ed); // item.res && item.res.forEach((skres: SkillResult) => {
}); // let ed = item.exportResData(skres);
// ed && obj.datas.push(ed);
// });
}); });
return msg; return msg;
}; };
@ -271,6 +274,67 @@ export class SkillTarget{
} }
return null; 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){ isOK(tg_type: any){
if(this._type == TriggerType.NO_COND){
return true;
}
return this._type == tg_type; return this._type == tg_type;
}; };
} }

View File

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