属性:fix

This commit is contained in:
luying
2021-02-27 18:48:54 +08:00
parent 41f65eadd0
commit a0e87a9513
8 changed files with 83 additions and 70 deletions

View File

@@ -4,7 +4,7 @@ import { HERO_CE_RATIO, getAtrrNameById, CE_CONST, HERO_SUB_ATTR_RATIO } from '.
// hero表内属性基础格式
export class CeAttrData {
@prop({ required: true })
id?: number = 0;
id: number = 0;
@prop({ required: true })
base: number = 0;
@prop({ required: true })
@@ -13,16 +13,24 @@ export class CeAttrData {
fixUp: number = 0;
@prop({ required: true })
equipUp: number = 0;
constructor(id: number) {
this.id = id;
}
}
// role表属性格式
export class CeAttrDataRole {
@prop({ required: true })
id?: number = 0;
id: number = 0;
@prop({ required: true })
ratioUp: number = 0;
@prop({ required: true })
fixUp: number = 0;
constructor(id: number) {
this.id = id;
}
}
// 主属性
@@ -109,34 +117,51 @@ export class Attribute {
private setSubAttrRatio() {
return {
hit: this.hit / HERO_SUB_ATTR_RATIO,
cri: this.cri / HERO_SUB_ATTR_RATIO,
flee: this.flee / HERO_SUB_ATTR_RATIO,
antCri: this.antCri / HERO_SUB_ATTR_RATIO,
damageIncrease: this.damageIncrease / HERO_SUB_ATTR_RATIO,
damageDecrease: this.damageDecrease / HERO_SUB_ATTR_RATIO,
defIngnore: this.defIngnore / HERO_SUB_ATTR_RATIO,
damageCri: this.damageCri / HERO_SUB_ATTR_RATIO
hit: this.hit / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
cri: this.cri / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
flee: this.flee / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
antCri: this.antCri / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
damageIncrease: this.damageIncrease / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
damageDecrease: this.damageDecrease / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
defIngnore: this.defIngnore / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO,
damageCri: this.damageCri / HERO_SUB_ATTR_RATIO / HERO_CE_RATIO / HERO_CE_RATIO
}
}
public calCe() {
let { cri, flee, damageIncrease, damageDecrease, damageCri } = this.setSubAttrRatio();
private setMainAttrRatio() {
return {
hp: this.hp / HERO_CE_RATIO / HERO_CE_RATIO,
atk: this.atk / HERO_CE_RATIO / HERO_CE_RATIO,
def: this.def / HERO_CE_RATIO / HERO_CE_RATIO,
mdef: this.mdef / HERO_CE_RATIO / HERO_CE_RATIO
}
}
let hitRate = CE_CONST.HIT_RATE_BASE + CE_CONST.PUT_HIT/2 - flee; // 命中率
// 战力计算
public calCe() {
let { hp, atk, def, mdef } = this.setMainAttrRatio();
let { cri, flee, damageIncrease, damageDecrease, damageCri } = this.setSubAttrRatio();
let putHit = CE_CONST.PUT_HIT / HERO_SUB_ATTR_RATIO;
let putAntCri = CE_CONST.PUT_ANT_CRI / HERO_SUB_ATTR_RATIO;
let hitRate = CE_CONST.HIT_RATE_BASE + putHit/2 - flee; // 命中率
if(hitRate > CE_CONST.HIT_RATE_MAX) hitRate = CE_CONST.HIT_RATE_MAX;
if(hitRate < CE_CONST.HIT_RATE_MIN) hitRate = CE_CONST.HIT_RATE_MIN;
let fleeRate = 1 - hitRate; // 格挡率
let criRate = CE_CONST.CRI_RATE_BASE + cri - CE_CONST.PUT_ANT_CRI/2;
let criRate = CE_CONST.CRI_RATE_BASE + cri - putAntCri/2;
if(criRate > CE_CONST.CRI_RATE_MAX) criRate = CE_CONST.CRI_RATE_MAX;
if(criRate < CE_CONST.CRI_RATE_MIN) criRate = CE_CONST.CRI_RATE_MIN;
let criValue = CE_CONST.CRI_VALUE_BASE + damageCri;
let validHp = this.hp + (this.def + this.mdef) * 0.5 / ((1 - fleeRate * CE_CONST.FLEE_VALUE) * (1 - damageDecrease)); // 有效生命
let validAtk = this.atk * hitRate * ( 1 + criRate * criValue) * ( 1 + damageIncrease); // 有效输出
let ce = Math.floor(validHp * validAtk);
let validHp = hp + (def + mdef) * 0.5 / ((1 - fleeRate * CE_CONST.FLEE_VALUE) * (1 - damageDecrease)); // 有效生命
let validAtk = atk * hitRate * ( 1 + criRate * criValue) * ( 1 + damageIncrease); // 有效输出
let ce = Math.floor(validHp * validAtk * HERO_CE_RATIO * HERO_CE_RATIO);
return ce > 0? ce: 1;
}
public calCelAndReduce() {
return Math.floor(this.calCe() / HERO_CE_RATIO / HERO_CE_RATIO);
}
}