diff --git a/shared/db/Equip.ts b/shared/db/Equip.ts index 5d2479042..9076349ea 100644 --- a/shared/db/Equip.ts +++ b/shared/db/Equip.ts @@ -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; diff --git a/shared/db/generalField.ts b/shared/db/generalField.ts index 00abff79c..3b7d88f89 100644 --- a/shared/db/generalField.ts +++ b/shared/db/generalField.ts @@ -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 { diff --git a/shared/pubUtils/playerCe.ts b/shared/pubUtils/playerCe.ts index 33e5a301e..2e1758a32 100644 --- a/shared/pubUtils/playerCe.ts +++ b/shared/pubUtils/playerCe.ts @@ -38,19 +38,19 @@ export function calPlayerCe(hero: HeroType, type: number, args: Array) { } 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) { return res; } -export function calHeroEquipIncAttr(hero: HeroType, args: Array) { +export function calHeroEquipIncAttr(hero: HeroType) { let res: CeAttr = {}; let {ePlace} = hero; for(let {equip, lv, refineLv} of ePlace) { if(equip) { let e = equip; - console.log(e.id, e._id); let dicGoods = gameData.goods.get(e.id); let {goodsAbility, goodsAbilityUp} = dicGoods; let dicRefine = gameData.refine.get(refineLv); - - 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++) { - + + let jewel = new Map(); + 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++) { + 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 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; } - let attr = (goodsAbility.get(i) + lv * goodsAbilityUp.get(i)) * ( 1 + dicRefine.upPercent); - - console.log(jewel, attr, args); } - // 基础属性 - // 装备栏强化 - // 精炼 - // 宝石 } } return res;