Merge branch 'master' of gitlab.trgame.cn:zyztech/zyz_server

This commit is contained in:
mamengke01
2020-12-21 16:04:51 +08:00
3 changed files with 48 additions and 22 deletions

View File

@@ -3,7 +3,6 @@ import { index, getModelForClass, prop, DocumentType, modelOptions } from '@type
import { COUNTER } from '../consts';
import { CounterModel } from './Counter';
import { HeroModel } from './Hero';
import { CeAttrNumber } from './generalField';
export class RandSe {
@prop({ required: true })
@@ -70,9 +69,6 @@ export default class Equip extends BaseModel {
@prop({ required: true, type: Holes, default: [] })
holes: Holes[];
@prop({required: true, default: new CeAttrNumber() })
ceAttr: CeAttrNumber; // 影响战力的属性
public static async findbyRole(roleId: string, lean = true) {
const equips: EquipType[] = await EquipModel.find({ roleId }).lean(lean);
return equips;

View File

@@ -7,6 +7,8 @@ export class CeAttrData {
ratioUp: number = 0;
@prop({ required: true })
fixUp: number = 0;
@prop({ required: true })
equipUp: number = 0;
}
export class CeAttr {

View File

@@ -38,19 +38,19 @@ export function calPlayerCe(hero: HeroType, type: number, args: Array<number>) {
} else if (type == HERO_SYSTEM_TYPE.CONNECT) {
reIncAttr = calHeroConectIncAttr(hero, args);
} else if (type == HERO_SYSTEM_TYPE.EQUIP) {
reIncAttr = calHeroEquipIncAttr(hero, args);
reIncAttr = calHeroEquipIncAttr(hero);
}
addSeidEffect(reIncAttr, addSeidList, removeSeidList); // 处理加值
if(!hero.ceAttr) hero.ceAttr = new CeAttr();
for (let attrName in reIncAttr) {
let originalAttrData: CeAttrData = hero.ceAttr[attrName]||new CeAttrData();
let oldCe = originalAttrData.fixUp * HERO_CE_RATIO + originalAttrData.base *(HERO_CE_RATIO + originalAttrData.ratioUp)
let oldCe = (originalAttrData.fixUp + originalAttrData.equipUp||0) * HERO_CE_RATIO + originalAttrData.base *(HERO_CE_RATIO + originalAttrData.ratioUp);
if(!hero.ceAttr[attrName]) hero.ceAttr[attrName] = new CeAttrData();
for (let attrKey in reIncAttr[attrName]) {
hero.ceAttr[attrName][attrKey] = parseInt(reIncAttr[attrName][attrKey]);
hero.ceAttr[attrName][attrKey] = parseInt(reIncAttr[attrName][attrKey]||0);
}
incArr[attrName] = reIncAttr[attrName].fixUp * HERO_CE_RATIO + reIncAttr[attrName].base *(HERO_CE_RATIO + reIncAttr[attrName].ratioUp) - oldCe; //计算属性
incArr[attrName] = (reIncAttr[attrName].fixUp + reIncAttr[attrName].equipUp||0) * HERO_CE_RATIO + reIncAttr[attrName].base *(HERO_CE_RATIO + reIncAttr[attrName].ratioUp) - oldCe; //计算属性
incCe += incArr[attrName] * getAttrCeRatio(attrName);
}
hero.ce += incCe;
@@ -229,31 +229,59 @@ export function calHeroFavourUpIncAttr(hero: HeroType, args: Array<number>) {
return res;
}
export function calHeroEquipIncAttr(hero: HeroType, args: Array<number>) {
export function calHeroEquipIncAttr(hero: HeroType) {
let res: CeAttr = {};
let {ePlace} = hero;
for(let {equip, lv, refineLv} of ePlace) {
if(equip) {
let e = <EquipType>equip;
console.log(e.id, e._id);
let dicGoods = gameData.goods.get(e.id);
let {goodsAbility, goodsAbilityUp} = dicGoods;
let dicRefine = gameData.refine.get(refineLv);
let jewel = new Map<number, number>();
for(let {jewel: jewelId} of e.holes) {
if(jewelId > 0) {
let g = gameData.goods.get(jewelId);
if(g) {
let jGoods = g.goodsAbility;
jGoods.forEach((value, key) => {
if(jewel.has(key)) {
jewel.set(key, value);
} else {
jewel.set(key, jewel.get(key) + value);
}
})
}
}
}
for(let i = ABI_TYPE.ABI_HP; i < ABI_TYPE.ABI_MAX; i++) {
let jewel = 0;
for(let j = 0; j < e.holes.length; i++) {
if(i == ABI_TYPE.ABI_SPEED || i == ABI_TYPE.ABI_AP) continue;
let attrName = getAtrrNameById(i);
// console.log('***', i, attrName);
let value1 = goodsAbility.get(i)||0 * (HERO_CE_RATIO + e.randRange);
// console.log('基础值', value1);
let valueup = goodsAbilityUp.get(i)||0;
// console.log('成长', lv, valueup);
let valueRefine = dicRefine?dicRefine.upPercent:0;
// console.log('refine', dicRefine?dicRefine.upPercent:0 );
let valueJewel = jewel.get(i)||0;
// console.log('jewel', valueJewel);
let attr = (value1 + lv * valueup) * ( HERO_CE_RATIO + valueRefine) + valueJewel * HERO_CE_RATIO;
}
let attr = (goodsAbility.get(i) + lv * goodsAbilityUp.get(i)) * ( 1 + dicRefine.upPercent);
console.log(jewel, attr, args);
let originalCe = hero.ceAttr[attrName].equipUp||0;
if(attr != originalCe) {
console.log('装备战力:', attr, originalCe);
res[attrName] = {fixUp: hero.ceAttr[attrName].fixUp, base: hero.ceAttr[attrName].base, ratioUp: hero.ceAttr[attrName].ratioUp, equipUp: originalCe};
console.log(attr, originalCe)
res[attrName].equipUp += attr * HERO_CE_RATIO - originalCe;
}
}
// 基础属性
// 装备栏强化
// 精炼
// 宝石
}
}
return res;