diff --git a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts index ae52159ee..8c529afbd 100644 --- a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts +++ b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts @@ -4,7 +4,7 @@ import { ExpeditionRecordModel } from '../../../db/ExpeditionRecord'; import { ExpeditionWarRecordModel } from '../../../db/ExpeditionWarRecord'; import { ExpeditionPointModel } from '../../../db/ExpeditionPoint'; import { RoleModel } from '../../../db/Role'; -import { calculateSumCE, genCode, getWarTypeName } from '../../../pubUtils/util'; +import { genCode, getWarTypeName } from '../../../pubUtils/util'; import { getPointRewardStatus, getResetRemainCnt, findOrCreateEnemies, getExpeditionStatus } from '../../../services/expeditionService'; import { DEBUG_MAGIC_WORD, EXPEDITION_WAR_RECORD_STATUS, ITEM_CHANGE_REASON, KING_EXP_RATIO_TYPE, LINEUP_NUM, TASK_TYPE, TA_EVENT } from '../../../consts'; import { WarReward } from '../../../services/warRewardService'; @@ -18,6 +18,7 @@ import { gameData } from '../../../pubUtils/data'; import * as dicParam from '../../../pubUtils/dicParam'; import { getSeconds, nowSeconds } from '../../../pubUtils/timeUtil'; import { reportTAEvent } from '../../../services/sdkService'; +import { getSumCe } from '../../../services/playerCeService'; export default function (app: Application) { new HandlerService(app, {}); @@ -58,8 +59,8 @@ export class ExpeditionBattleHandler { await ExpeditionRecordModel.hideRecord(roleId); // 刷掉旧关卡 - // 我方战力(暂定) - let myCe = await calculateSumCE(roleId, 1, { num: LINEUP_NUM }); + // 我方战力 + let myCe = await getSumCe(roleId, LINEUP_NUM); // 每一关的挑战状态 let { expeditionCode, heroes } = await ExpeditionRecordModel.createRecord({ roleId, roleName, heroes: [], myCe diff --git a/game-server/app/servers/gm/handler/gmRoleHandler.ts b/game-server/app/servers/gm/handler/gmRoleHandler.ts index cccf9f17a..d5633081d 100644 --- a/game-server/app/servers/gm/handler/gmRoleHandler.ts +++ b/game-server/app/servers/gm/handler/gmRoleHandler.ts @@ -18,11 +18,11 @@ import { reportTAEvent } from '../../../services/sdkService'; import { sendMailByContent } from '../../../services/mailService'; import { GuildLeader } from '../../../domain/rank'; import { HeroModel } from '../../../db/Hero'; -import { calAllHeroCe, calPlayerCeAndSave } from '../../../services/playerCeService'; import { SkinModel } from '../../../db/Skin'; import { PvpDefenseModel } from '../../../db/PvpDefense'; import { calculatetopLineup } from '../../../pubUtils/util'; import { createHeroes } from '../../../services/role/createHero'; +import { calculateCe } from '../../../services/playerCeService'; let timer: NodeJS.Timer; export default function (app: Application) { @@ -95,14 +95,16 @@ export class GmRoleHandler { param.lv = newLv; param['exp'] = exp; } - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAR, sid, roleId, hero, param); - if(param.job > 0) { - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAGEUP, sid, roleId, hero, { job: param.job, jobStage: 0 }); - } + await calculateCe(HERO_SYSTEM_TYPE.INIT, roleId, hero.serverId, sid, param, {}, { hid }); + // if(param.job > 0) { + // await calculateCe(HERO_SYSTEM_TYPE.STAGEUP, roleId, hero.serverId, sid, param, {}, { hid }); - if (hero.star != param.star) { - await calAllHeroCe(HERO_SYSTEM_TYPE.STAR, sid, roleId, {}, [hid, 1]); // 升星可能影响到百家学院全局加成 - } + // hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAGEUP, sid, roleId, hero, { job: param.job, jobStage: 0 }); + // } + + // if (hero.star != param.star) { + // await calAllHeroCe(HERO_SYSTEM_TYPE.STAR, sid, roleId, {}, [hid, 1]); // 升星可能影响到百家学院全局加成 + // } return resResult(STATUS.SUCCESS); } diff --git a/game-server/app/servers/role/handler/equipHandler.ts b/game-server/app/servers/role/handler/equipHandler.ts index a9265758c..9ac687b38 100644 --- a/game-server/app/servers/role/handler/equipHandler.ts +++ b/game-server/app/servers/role/handler/equipHandler.ts @@ -5,7 +5,6 @@ import { ItemInter, RewardInter } from "../../../pubUtils/interface"; import { resResult, parseGoodStr } from "../../../pubUtils/util"; import { addItems, getJewelRandSe, handleCost } from "../../../services/role/rewardService"; import { HeroModel, EPlace } from "../../../db/Hero"; -import { calPlayerCeAndSave } from "../../../services/playerCeService"; import { gameData, getEquipByJobClassAndEPlace, getNextEquipQuality, getEquipStarIdByEquipId, getNextEquipStar } from "../../../pubUtils/data"; import { BAG, EQUIP } from "../../../pubUtils/dicParam"; import { getRandSeResult, updateEplace, updateEplaces, checkJewelCanPutOnEquip, updateStone, checkStoneCanPutOnEquip, isLocked } from "../../../services/equipService"; @@ -17,6 +16,7 @@ import { pushEquipQualityMax, pushEquipStarMax } from "../../../services/sysChat import { addConsumeToHero } from "../../../services/roleService"; import { CheckMeterial } from "../../../services/role/checkMaterial"; import { combineItems } from "../../../services/role/util"; +import { calculateCe } from "../../../services/playerCeService"; export default function (app: Application) { new HandlerService(app, {}); @@ -57,15 +57,15 @@ export class EquipHandler { ePlace: newEplace, consumes: addConsumeToHero(hero.consumes, dicEquip.composeMaterial), } - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.COMPOSE_EQUIP, sid, roleId, hero, update, [ePlaceId]); + + await calculateCe(HERO_SYSTEM_TYPE.COMPOSE_EQUIP, roleId, serverId, sid, update, {}, { hid, ePlaceId }); await checkTaskInComposeEquip(serverId, roleId, sid, oldEplace, newEplace); - return resResult(STATUS.SUCCESS, { - curHero: { - hid: hero.hid, - ePlace: [newEquip] - } - }) + let curHero = { + hid, + ePlace: [newEquip] + } + return resResult(STATUS.SUCCESS, { curHero }); } // 装备栏强化 @@ -105,7 +105,7 @@ export class EquipHandler { ePlace: newEplace, consumes: addConsumeToHero(hero.consumes, consumes) } - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, sid, roleId, hero, update, [ePlaceId]); + await calculateCe(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, roleId, serverId, sid, update, {}, { hid, ePlaceId }); await checkTaskInEquipLvUp(serverId, roleId, sid, oldEplace, newEplace, [ePlaceId]); const curHero = { @@ -156,7 +156,7 @@ export class EquipHandler { ePlace: newEplace, consumes: addConsumeToHero(hero.consumes, consumes), } - await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, sid, roleId, hero, update, [...eplaceIds.keys()]); + await calculateCe(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, roleId, serverId, sid, update, {}, { hid, ePlaceIds: [...eplaceIds.keys()] }); await checkTaskInEquipLvUp(serverId, roleId, sid, ePlace, newEplace, [...eplaceIds.keys()]); const curHero = { @@ -223,7 +223,7 @@ export class EquipHandler { ePlace: newEplace, consumes: addConsumeToHero(hero.consumes, consumes), } - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_QUALITY, sid, roleId, hero, update, [ePlaceId]); + await calculateCe(HERO_SYSTEM_TYPE.EQUIP_QUALITY, roleId, serverId, sid, update, {}, { hid, ePlaceId }); await checkTaskInEquipQualityUp(serverId, roleId, sid, oldEplace, newEplace, ePlaceId, hid, isUpQuality); pushEquipQualityMax(roleId, roleName, serverId, hid, newEquip, isUpQuality); @@ -298,7 +298,7 @@ export class EquipHandler { ePlace: newEplace, consumes: addConsumeToHero(hero.consumes, consumes) } - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STAR, sid, roleId, hero, update, [ePlaceId]); + await calculateCe(HERO_SYSTEM_TYPE.EQUIP_STAR, roleId, serverId, sid, update, {}, { hid, ePlaceId }); await checkTaskInEquipStarUp(serverId, roleId, sid, oldEplace, newEplace, ePlaceId, hid, isUpStar); pushEquipStarMax(roleId, roleName, serverId, hid, newEquip, isUpStar); @@ -343,7 +343,7 @@ export class EquipHandler { let canChange = originJewel && checkJewelCanPutOnEquip(originEquip, originJewel); if(canChange) canSentMineToOrigin = true; let { newEplace, updatedEplace } = updateEplace(originEplace, ePlaceId, { jewel: canChange? originJewel.seqId: 0 }); - await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_JEWEL, sid, roleId, originHero, { ePlace: newEplace }, [ePlaceId], { oldJewel: jewel, newJewel: canChange? originJewel:null }); + await calculateCe(HERO_SYSTEM_TYPE.EQUIP_JEWEL, roleId, serverId, sid, { ePlace: newEplace }, {}, { hid, ePlaceId, oldJewel: jewel, newJewel: canChange? originJewel:null }); await checkTaskInPutJewel(serverId, roleId, sid, originEplace, newEplace, ePlaceId, jewel, canChange? originJewel:null); originHeroResult = { hid: originHero.hid, ePlace: updatedEplace }; @@ -356,7 +356,7 @@ export class EquipHandler { // 目标镶嵌上 let curJewel = await JewelModel.putOnOrOff(seqId, hid, ePlaceId); let { newEplace, updatedEplace } = updateEplace(oldEplace, ePlaceId, { jewel: seqId }); - await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_JEWEL, sid, roleId, hero, { ePlace: newEplace }, [ePlaceId], { oldJewel: originJewel, newJewel: curJewel }); + await calculateCe(HERO_SYSTEM_TYPE.EQUIP_JEWEL, roleId, serverId, sid, { ePlace: newEplace }, {}, { hid, ePlaceId, oldJewel: originJewel, newJewel: curJewel }); await checkTaskInPutJewel(serverId, roleId, sid, oldEplace, newEplace, ePlaceId, originJewel, curJewel); let curHero = { @@ -384,7 +384,7 @@ export class EquipHandler { let curJewel = await JewelModel.putOnOrOff(curEquip.jewel, 0, 0); let { newEplace, updatedEplace } = updateEplace(oldEplace, ePlaceId, { jewel: 0 }); - await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_JEWEL, sid, roleId, hero, { ePlace: newEplace }, [ePlaceId], { oldJewel: curJewel }); + await calculateCe(HERO_SYSTEM_TYPE.EQUIP_JEWEL, roleId, serverId, sid, { ePlace: newEplace }, {}, { hid, ePlaceId, oldJewel: curJewel }); await checkTaskInPutJewel(serverId, roleId, sid, oldEplace, newEplace, ePlaceId, null, curJewel); let curHero = { @@ -437,7 +437,7 @@ export class EquipHandler { ePlace: newEplace, consumes: updateConsumes, } - await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STONE, sid, roleId, hero, update, [ePlaceId], { jewel }); + await calculateCe(HERO_SYSTEM_TYPE.EQUIP_STONE, roleId, serverId, sid, update, {}, { hid, ePlaceId, jewel }); await checkTaskInPutStone(serverId, roleId, sid, oldEplace, newEplace, ePlaceId, jewel); let curHero = { @@ -557,7 +557,7 @@ export class EquipHandler { // 更新战力 if(hid > 0) { const hero = await HeroModel.findByHidAndRole(hid, roleId); - await calPlayerCeAndSave(HERO_SYSTEM_TYPE.JEWEL_RESET_RANDSE, sid, roleId, hero, {}, [ePlaceId], { oldJewel: jewel, newJewel }); + await calculateCe(HERO_SYSTEM_TYPE.JEWEL_RESET_RANDSE, roleId, serverId, sid, {}, {}, { hid, ePlaceId, oldJewel: jewel, newJewel, hero }); } await checkTaskInEquipReset(serverId, roleId, sid); @@ -639,7 +639,7 @@ export class EquipHandler { // 更新战力 if(isSuccess && hid > 0) { const hero = await HeroModel.findByHidAndRole(hid, roleId); - await calPlayerCeAndSave(HERO_SYSTEM_TYPE.JEWEL_QUENCH, sid, roleId, hero, {}, [ePlaceId], { oldJewel: jewel, newJewel }); + await calculateCe(HERO_SYSTEM_TYPE.JEWEL_QUENCH, roleId, serverId, sid, {}, {}, { hid, ePlaceId, oldJewel: jewel, newJewel, hero }); } await checkTaskInEquipQuench(serverId, roleId, sid, isSuccess); @@ -759,7 +759,8 @@ export class EquipHandler { // 更新战力 if(targetJewel.hid > 0) { const hero = await HeroModel.findByHidAndRole(targetJewel.hid, roleId); - await calPlayerCeAndSave(HERO_SYSTEM_TYPE.JEWEL_RESET_RANDSE, sid, roleId, hero, {}, [targetJewel.ePlaceId], { oldJewel: originJewel, newJewel }); + await calculateCe(HERO_SYSTEM_TYPE.JEWEL_RESET_RANDSE, roleId, serverId, sid, {}, {}, { hid: targetJewel.ePlaceId, ePlaceId: targetJewel.ePlaceId, oldJewel: originJewel, newJewel, hero }); + } await checkTaskInEquipReset(serverId, roleId, sid); diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index 01fa865fb..c34958b06 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -1,7 +1,6 @@ import { Application, BackendSession, ChannelService, HandlerService, } from 'pinus'; import { handleCost, addItems, unlockFigure, getCoinObject, getGoldObject } from '../../../services/role/rewardService'; -import { calPlayerCeAndSave, calAllHeroCe } from '../../../services/playerCeService'; -import { resResult, deepCopy, reduceCe, parseGoodStr } from '../../../pubUtils/util'; +import { resResult, deepCopy, parseGoodStr } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; import { HeroModel, Connect, HeroSkin, HeroUpdate, EPlace, Talent } from '../../../db/Hero'; import { CURRENCY_BY_TYPE, CURRENCY_TYPE, CONSUME_TYPE, HERO_GROW_MAX, HERO_SYSTEM_TYPE, ABI_STAGE, DEBUG_MAGIC_WORD, HERO_INITIAL_QUALITY, REDIS_KEY, TASK_TYPE, ITEM_CHANGE_REASON } from '../../../consts'; @@ -23,6 +22,7 @@ import { HERO, REBORN } from '../../../pubUtils/dicParam'; import { createHero, createHeroes } from '../../../services/role/createHero'; import { CheckMeterial } from '../../../services/role/checkMaterial'; import { HeroParam } from '../../../domain/roleField/hero'; +import { calculateCe } from '../../../services/playerCeService'; export default function (app: Application) { new HandlerService(app, {}); @@ -127,15 +127,11 @@ export class HeroHandler { consumes: addConsumeToHero(hero.consumes, material) } - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.LVUP, sid, roleId, hero, update); + let { curHero } = await calculateCe(HERO_SYSTEM_TYPE.LVUP, roleId, serverId, sid, update, {}, { hid }); // 任务 - await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_LV, { oldLv, hero }); - - const curHero = { - hid, lv: hero.lv, exp: hero.exp - } - return resResult(STATUS.SUCCESS, { curHero, cost: material }); + await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_LV, { oldLv, hero: curHero }); + return resResult(STATUS.SUCCESS, { curHero: pick(curHero, ['hid', 'lv', 'exp']), cost: material }); } @@ -191,21 +187,12 @@ export class HeroHandler { consumes: addConsumeToHero(hero.consumes, consumes) } - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAR, sid, roleId, hero, update); - if (isUpStar) { - await calAllHeroCe(HERO_SYSTEM_TYPE.STAR, sid, roleId, {}, [hid, isUpStar ? 1 : 0]); // 升星可能影响到百家学院全局加成 - // 任务 - await checkTaskInHeroStarUp(serverId, roleId, sid, hero, oldStar); - } - const curHero = { - hid, - star: hero.star, - starStage: hero.starStage, - colorStar: hero.colorStar, - colorStarStage: hero.colorStarStage + let { curHero } = await calculateCe(HERO_SYSTEM_TYPE.STAR, roleId, serverId, sid, update, {}, { hid, hero, isUpStar }); + if (isUpStar) { + await checkTaskInHeroStarUp(serverId, roleId, sid, curHero, oldStar); // 任务 } - return resResult(STATUS.SUCCESS, { isUpStar, curHero }); + return resResult(STATUS.SUCCESS, { isUpStar, curHero: pick(curHero, ['hid', 'star', 'starStage', 'colorStar', 'colorStarStage']) }); } // 武将升品 @@ -248,16 +235,11 @@ export class HeroHandler { quality: hero.quality + 1, consumes: addConsumeToHero(hero.consumes, material) } - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, hero, update); - await calAllHeroCe(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, {}, [hid, 0]); // 升品可能影响到百家学院全局加成 - await checkTaskInHeroQUalityUp(serverId, roleId, sid, hero); - const curHero = { - hid, - quality: hero.quality - } - pushHeroQualityUpMsg(roleId, roleName, serverId, hero); - return resResult(STATUS.SUCCESS, { curHero }); + let { curHero } = await calculateCe(HERO_SYSTEM_TYPE.QUALITY, roleId, serverId, sid, update, {}, { hid, hero }); + await checkTaskInHeroQUalityUp(serverId, roleId, sid, curHero); + pushHeroQualityUpMsg(roleId, roleName, serverId, curHero); + return resResult(STATUS.SUCCESS, { curHero: pick(curHero, ['hid', 'quality']) }); } // 武将觉醒 @@ -319,25 +301,13 @@ export class HeroHandler { consumes: addConsumeToHero(hero.consumes, consumes) } - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, hero, update); + let { curHero } = await calculateCe(HERO_SYSTEM_TYPE.COLORSTAR, roleId, serverId, sid, update, {}, { hid, hero, isUpStar }); if (isUpStar) { - await calAllHeroCe(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, {}, [hid, isUpStar ? 1 : 0]); // 升星可能影响到百家学院全局加成 - - // 任务 - await checkTaskInHeroWakeUp(serverId, roleId, sid, hero, oldColorStar); - + await checkTaskInHeroWakeUp(serverId, roleId, sid, curHero, oldColorStar); // 任务 } - const curHero = { - hid, - quality: hero.quality, - star: hero.star, - starStage: hero.starStage, - colorStar: hero.colorStar, - colorStarStage: hero.colorStarStage - } - if (isWakeUp) pushHeroWakeUp(roleId, roleName, serverId, hero); // 第一次觉醒 - pushHeroStarMax(roleId, roleName, serverId, hero); - return resResult(STATUS.SUCCESS, { isUpStar, curHero }); + if (isWakeUp) pushHeroWakeUp(roleId, roleName, serverId, curHero); // 第一次觉醒 + pushHeroStarMax(roleId, roleName, serverId, curHero); + return resResult(STATUS.SUCCESS, { isUpStar, curHero: pick(curHero, ['hid', 'quality', 'star', 'starStage', 'colorStar', 'colorStarStage']) }); } //训练 @@ -383,11 +353,9 @@ export class HeroHandler { jobStage: newJobStage, consumes: addConsumeToHero(hero.consumes, consumes) } - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.TRAIN, sid, roleId, hero, update); - // 任务 - await checkTaskInHeroTrain(serverId, roleId, sid, hero, trainCount); - - return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, job: hero.job, jobStage: hero.jobStage } }); + let { curHero } = await calculateCe(HERO_SYSTEM_TYPE.TRAIN, roleId, serverId, sid, update, {}, { hid, hero }); + await checkTaskInHeroTrain(serverId, roleId, sid, curHero, trainCount); // 任务 + return resResult(STATUS.SUCCESS, { curHero: pick(curHero, ['hid', 'job', 'jobStage'])}); } //进阶 @@ -420,11 +388,10 @@ export class HeroHandler { jobStage: 0, consumes: addConsumeToHero(hero.consumes, consumes) } - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAGEUP, sid, roleId, hero, update); - // 任务 - await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_STAGE_UP, { hero, stageUpCnt: 1 }) - const heroResult = new HeroParam(hero); + let { curHero } = await calculateCe(HERO_SYSTEM_TYPE.STAGEUP, roleId, serverId, sid, update, {}, { hid, hero }); + await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_STAGE_UP, { hero: curHero, stageUpCnt: 1 }); // 任务 + const heroResult = new HeroParam(curHero); return resResult(STATUS.SUCCESS, { curHero: {...pick(heroResult, ['hid', 'job', 'jobStage', 'totalTalentPoint']) }}); } @@ -477,11 +444,10 @@ export class HeroHandler { consumes: addConsumeToHero(hero.consumes, consumes) } //重算战力并下发 - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.CONNECT, sid, roleId, hero, update, [shipId]); - + let { curHero } = await calculateCe(HERO_SYSTEM_TYPE.CONNECT, roleId, serverId, sid, update, {}, { hid: hero.hid, shipId }); // 任务 await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_CONNECT, { connectLv: level }) - return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, connections: hero.connections } }); + return resResult(STATUS.SUCCESS, { curHero: pick(curHero, ['hid', 'connections']) }); } //赠送(包括一键赠送) @@ -554,17 +520,23 @@ export class HeroHandler { consumes: updateConsume } - //重算战力并下发 - if (oldLv != newLv) { - await unlockFigure(sid, roleId, [{ type: FIGURE_UNLOCK_CONDITION.HERO_FAVOR, paramHid: hero.hid, paramFavourLv: hero.favourLv }]); - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.FAVOUR, sid, roleId, hero, update, [oldLv]); + let isFavourLvUp = oldLv == newLv; + // //重算战力并下发 + // if (oldLv != newLv) { + // await unlockFigure(sid, roleId, [{ type: FIGURE_UNLOCK_CONDITION.HERO_FAVOR, paramHid: hero.hid, paramFavourLv: hero.favourLv }]); + // hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.FAVOUR, sid, roleId, hero, update, [oldLv]); - // 任务 - await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_FAVOUR_LV, { hero, oldFavourLv: oldLv }); - } else { - hero = await HeroModel.updateHeroInfo(roleId, hero.hid, update); + // // 任务 + // await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_FAVOUR_LV, { hero, oldFavourLv: oldLv }); + // } else { + // hero = await HeroModel.updateHeroInfo(roleId, hero.hid, update); + // } + let { curHero } = await calculateCe(HERO_SYSTEM_TYPE.FAVOUR, roleId, serverId, sid, update, {}, { hid: hero.hid, isFavourLvUp }); + if(isFavourLvUp) { + await unlockFigure(sid, roleId, [{ type: FIGURE_UNLOCK_CONDITION.HERO_FAVOR, paramHid: curHero.hid, paramFavourLv: curHero.favourLv }]); + await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_FAVOUR_LV, { hero: curHero, oldFavourLv: oldLv }); // 任务 } - return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, favour: hero.favour, favourLv: hero.favourLv, cost: material } }); + return resResult(STATUS.SUCCESS, { curHero: { ...pick(curHero, ['hid', 'favour', 'favourLv']), cost: material } }); } //穿带时装 @@ -613,9 +585,14 @@ export class HeroHandler { } let { newEplace } = updateEplaces(oldEplace, eplaceIds); - - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.SKIN, sid, roleId, hero, { skins: newHeroSkins, skinId: dicSkin.heroId, job: dicNewJob.jobid, ePlace: newEplace }); - let resultHero = new HeroParam(hero); + let update = { + skins: newHeroSkins, + skinId: dicSkin.heroId, + job: dicNewJob.jobid, + ePlace: newEplace + } + let { curHero } = await calculateCe(HERO_SYSTEM_TYPE.SKIN, roleId, serverId, sid, update, {}, { hid: hero.hid }); + let resultHero = new HeroParam(curHero); return resResult(STATUS.SUCCESS, { curHero: {...pick(resultHero, ['hid', 'skins', 'skinId', 'job', 'talent', 'usedTalentPoint']), ePlace: newEplace }}); } @@ -634,6 +611,7 @@ export class HeroHandler { let roleId: string = session.get('roleId'); let roleName: string = session.get('roleName'); let sid: string = session.get('sid'); + let serverId: number = session.get('serverId'); let { hid } = msg; if(!isNumber(hid) && !hid) return resResult(STATUS.WRONG_PARMS); @@ -665,7 +643,7 @@ export class HeroHandler { let calHeroCe = new CalHeroCe(hid, initInfo); let heroAttr = calHeroCe.cal(HERO_SYSTEM_TYPE.REBIRTH); - await HeroModel.updateHeroInfo(roleId, hid, { ...initInfo, attr: heroAttr }); + // await HeroModel.updateHeroInfo(roleId, hid, { ...initInfo, attr: heroAttr }); // 天晶石 let curJewels: jewelUpdate[] = []; @@ -680,9 +658,7 @@ export class HeroHandler { } } - let { heros } = await calAllHeroCe(HERO_SYSTEM_TYPE.REBIRTH, sid, roleId, {}, [hid], { originHero: hero, heroUpdate: initInfo }); - let curHero = heros.find(cur => cur.hid == hid); - + let { curHero } = await calculateCe(HERO_SYSTEM_TYPE.REBIRTH, roleId, serverId, sid, {...initInfo, attr: heroAttr}, {}, { hid }); let goods = await addItems(roleId, roleName, sid, consumes, ITEM_CHANGE_REASON.REBIRTH); const heroResult = new HeroParam(curHero); @@ -693,6 +669,7 @@ export class HeroHandler { public async unlockTalent(msg: { hid: number, id: number }, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); + let serverId = session.get('serverId'); let { hid, id } = msg; let hero = await HeroModel.findByHidAndRole(hid, roleId); @@ -721,9 +698,8 @@ export class HeroHandler { let { newSkins } = updateSkinTalent(skins, new Talent(id), usedTalentPoint + needTalentPoint); - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.TALENT, sid, roleId, hero, { skins: newSkins }); - - const heroResult = new HeroParam(hero); + let { curHero } = await calculateCe(HERO_SYSTEM_TYPE.TALENT, roleId, serverId, sid, { skins: newSkins }, {}, { hid }); + const heroResult = new HeroParam(curHero); return resResult(STATUS.SUCCESS, { curHero: {...pick(heroResult, ['hid', 'talent', 'usedTalentPoint', 'totalTalentPoint']) }}); } @@ -732,6 +708,7 @@ export class HeroHandler { public async upgradeTalent(msg: { hid: number, id: number }, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); + let serverId = session.get('serverId'); let { hid, id } = msg; let hero = await HeroModel.findByHidAndRole(hid, roleId); @@ -758,9 +735,8 @@ export class HeroHandler { let { newSkins } = updateSkinTalent(skins, new Talent(id, talent.level + 1), usedTalentPoint + needTalentPoint); - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.TALENT, sid, roleId, hero, { skins: newSkins }); - - const heroResult = new HeroParam(hero); + let { curHero } = await calculateCe(HERO_SYSTEM_TYPE.TALENT, roleId, serverId, sid, { skins: newSkins }, {}, { hid }); + const heroResult = new HeroParam(curHero); return resResult(STATUS.SUCCESS, { curHero: {...pick(heroResult, ['hid', 'talent', 'usedTalentPoint', 'totalTalentPoint']) }}); } @@ -768,6 +744,7 @@ export class HeroHandler { public async resetTalent(msg: { hid: number }, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); + let serverId = session.get('serverId'); let { hid } = msg; let hero = await HeroModel.findByHidAndRole(hid, roleId); @@ -783,9 +760,9 @@ export class HeroHandler { let newSkins = initSkinTalent(skins); - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.TALENT, sid, roleId, hero, { skins: newSkins }); + let { curHero } = await calculateCe(HERO_SYSTEM_TYPE.TALENT, roleId, serverId, sid, { skins: newSkins }, {}, { hid }); - const heroResult = new HeroParam(hero); + const heroResult = new HeroParam(curHero); return resResult(STATUS.SUCCESS, { curHero: {...pick(heroResult, ['hid', 'talent', 'usedTalentPoint', 'totalTalentPoint']) }}); } diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 02584462b..97b7c3ac1 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -11,7 +11,6 @@ import { findIndex } from 'underscore'; import { SclResultInter, SclPosInter } from '../../../pubUtils/interface'; import { SchoolModel } from '../../../db/School'; import { getTeraphStrengthenResult, getSchoolList } from '../../../services/roleService' -import { calPlayerCeAndSave, calAllHeroCe } from '../../../services/playerCeService'; import { HERO_SYSTEM_TYPE, LINEUP_NUM, ROLE_SELECT, REDIS_KEY, TASK_TYPE, DEFAULT_HEROES, DEFAULT_HERO_LV, DEFAULT_ITEMS, DEFAULT_EQUIPS, DEFAULT_GOLD, DEFAULT_COIN, DEBUG_MAGIC_WORD, COUNTER, DEFAULT_LV, ITEM_CHANGE_REASON } from '../../../consts'; import { checkBattleHeroesByHid, roleLevelup } from '../../../services/normalBattleService'; import { Rank } from '../../../services/rankService'; @@ -26,6 +25,7 @@ import Counter from '../../../db/Counter'; import { UserModel } from '../../../db/User'; import { checkFilterWords, reportTAEvent, treatRoleName } from '../../../services/sdkService'; import { createHeroes, CreateHeroes } from '../../../services/role/createHero'; +import { calculateCe } from '../../../services/playerCeService'; export default function (app: Application) { new HandlerService(app, {}); @@ -95,11 +95,11 @@ export class RoleHandler { return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); let update = { title: title + 1 } - let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TITLE, sid, roleId, update); + let { curRole } = await calculateCe(HERO_SYSTEM_TYPE.TITLE, roleId, serverId, sid, {}, update, {}); // 任务 await checkTask(serverId, roleId, sid, TASK_TYPE.ROLE_TITLE, { oldTitle: title, title: update.title }); - return resResult(STATUS.SUCCESS, { roleId: calResult.role, title: role.title }); + return resResult(STATUS.SUCCESS, { roleId, title: curRole.title }); } //神像强化 @@ -128,12 +128,12 @@ export class RoleHandler { if (!result) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); - let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH, sid, roleId, { teraphs }, [id]); + let { curRole } = await calculateCe(HERO_SYSTEM_TYPE.TERAPH, roleId, serverId, sid, {}, { teraphs }, { teraphId: id }); // 任务 await checkTask(serverId, roleId, sid, TASK_TYPE.ROLE_TERAPH_STRENGTHEN, { count }); - return resResult(STATUS.SUCCESS, { roleId, teraphs: calResult.role.teraphs, criAttr }); + return resResult(STATUS.SUCCESS, { roleId, teraphs: curRole.teraphs, criAttr }); } //神像进阶 @@ -171,13 +171,12 @@ export class RoleHandler { let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.TERAPH_QUALITY_UP); if (!result) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); - - let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH_UP, sid, roleId, { teraphs }, [id]); + let { curRole } = await calculateCe(HERO_SYSTEM_TYPE.TERAPH_UP, roleId, serverId, sid, {}, { teraphs }, { teraphId: id }); // 神像进阶,进阶一次就触发一次礼包弹框 await checkTask(serverId, roleId, sid, TASK_TYPE.ROLE_TERAPH_STAGE_UP); - return resResult(STATUS.SUCCESS, { roleId, teraphs: calResult.role.teraphs }); + return resResult(STATUS.SUCCESS, { roleId, teraphs: curRole.teraphs }); } // 获得百家学宫 @@ -229,7 +228,7 @@ export class RoleHandler { } await SchoolModel.updateBySclAndPos(roleId, schoolId, positionId, { hid, isOpen }) - await calAllHeroCe(HERO_SYSTEM_TYPE.SCHOOL, sid, roleId, {}, [schoolId, hid, preHid]); + await calculateCe(HERO_SYSTEM_TYPE.SCHOOL, roleId, serverId, sid, {}, {}, { schoolId, schoolHid: hid, preSchoolHid: preHid }); // 任务 await checkTask(serverId, roleId, sid, TASK_TYPE.ROLE_SCHOOL_PUT_HERO, { hid, preHid }); @@ -320,7 +319,7 @@ export class RoleHandler { update.scrollId = dicHeroScroll ? dicHeroScroll.id : 0; let hero = await HeroModel.updateHeroInfo(roleId, hid, update); - await calAllHeroCe(HERO_SYSTEM_TYPE.SCROLL, sid, roleId, {}, [hid]); // 全局增加战力 + await calculateCe(HERO_SYSTEM_TYPE.SCROLL, roleId, serverId, sid, update, {}, { hid }); // 任务 await checkTaskInActiveScroll(serverId, roleId, sid, scrollActive, hero); diff --git a/game-server/app/services/expeditionService.ts b/game-server/app/services/expeditionService.ts index b047aa4cd..923dce455 100644 --- a/game-server/app/services/expeditionService.ts +++ b/game-server/app/services/expeditionService.ts @@ -1,7 +1,7 @@ import { ExpeditionPointModel } from '../db/ExpeditionPoint'; import Role, { CeAttrDataRole, RoleModel } from '../db/Role'; -import { shouldRefresh, calculateSumCE, getRandSingleEelm } from '../pubUtils/util'; +import { shouldRefresh, getRandSingleEelm } from '../pubUtils/util'; import { LINEUP_NUM, EXPEDITION_WAR_RECORD_STATUS } from '../consts'; import { ExpeditionWarRecordModel } from '../db/ExpeditionWarRecord'; import { CeAttrData, HeroType } from '../db/Hero'; @@ -10,6 +10,7 @@ import { getTimeFunD } from '../pubUtils/timeUtil'; import { ExpeditionRecordModel } from '../db/ExpeditionRecord'; import { Attribute, AttributeCal } from '../domain/roleField/attribute'; import * as dicParam from '../pubUtils/dicParam'; +import { getSumCe } from './playerCeService'; /** * 获取远征关卡列表 @@ -24,7 +25,7 @@ export async function getExpeditionStatus(roleId: string, roleName: string) { let expeditionRecord = await ExpeditionRecordModel.getCurRecord(roleId); if (!expeditionRecord) { // 首次新建一条记录 // 我方战力 - let myCe = await calculateSumCE(roleId, 1, { num: LINEUP_NUM }); + let myCe = await getSumCe(roleId, LINEUP_NUM); expeditionRecord = await ExpeditionRecordModel.createRecord({ roleId, roleName, heroes: [], myCe }); diff --git a/game-server/app/services/playerCeService.ts b/game-server/app/services/playerCeService.ts index 7e934c156..5b9b775c2 100644 --- a/game-server/app/services/playerCeService.ts +++ b/game-server/app/services/playerCeService.ts @@ -5,74 +5,92 @@ import { pinus } from 'pinus'; import { STATUS } from '../consts/statusCode'; -import { resResult, reduceCe } from '../pubUtils/util'; -import { calPlayerCeAndSave as pubCalPlayerCeAndSave, reCalAllHeroCe } from '../pubUtils/playerCe'; -import { HeroType, HeroUpdate } from '../db/Hero'; +import { resResult, reduceCe, calculatetopLineup } from '../pubUtils/util'; +import { HeroModel, HeroType, HeroUpdate } from '../db/Hero'; -import { RoleUpdate, RoleType } from '../db/Role'; +import { RoleUpdate, RoleType, RoleModel } from '../db/Role'; import { Rank } from './rankService'; -import { REDIS_KEY } from '../consts'; +import { HERO_SYSTEM_TYPE, REDIS_KEY } from '../consts'; import { updateUserInfo } from './redisService'; -import { GuildType } from '../db/Guild'; +import { GuildModel, GuildType } from '../db/Guild'; +import { CalCe } from './role/calCe'; +import { RoleCeModel } from '../db/RoleCe'; +import { PvpDefenseModel } from '../db/PvpDefense'; +import { saveCeChangeLog } from '../pubUtils/logUtil'; +import { JewelType } from '../db/Jewel'; -interface calPlayerReturn { - serverId: number; - role: RoleType; - guild?: GuildType; - hero?: HeroType; - pushHeros: {hid: number, ce: number, incHeroCe: number}[]; - topLineupCe: number; - heros?: HeroType[] +interface Param { + hid?: number, + hero?: HeroType, + isUpStar?: boolean, + shipId?: number, + isFavourLvUp?: boolean, + ePlaceId?: number, + ePlaceIds?: number[], + oldJewel?: JewelType, + newJewel?: JewelType, + jewel?: JewelType, + teraphId?: number, + schoolId?: number, + schoolHid?: number, + preSchoolHid?: number, + skinId?: number, } -//修改并下发战力 -export async function calPlayerCeAndSave(type: number, sid: string, roleId: string, originHero: HeroType, update: HeroUpdate, args?: Array, params?: any) { - let result = await pubCalPlayerCeAndSave(type, roleId, originHero, update, args, params); - return await pushCalPlayerCe(roleId, sid, result); -} +export async function calculateCe(type: HERO_SYSTEM_TYPE, roleId: string, serverId: number, sid: string, heroUpdate: HeroUpdate, roleUpdate: RoleUpdate, param: Param) { + let calCe = new CalCe(); + let roleCe = await RoleCeModel.findByRoleId(roleId); + calCe.setRoleCe(roleCe); + switch (type) { + case HERO_SYSTEM_TYPE.LVUP: // 升级 + { + calCe.setHeroLv(param.hid, heroUpdate.lv); + break; + } + case HERO_SYSTEM_TYPE.STAR: // 升星 + { + let { star, starStage, colorStar, colorStarStage } = heroUpdate; + let { hid, hero: { quality, job } } = param; + calCe.setHeroStar(hid, job, quality, star, starStage, colorStar, colorStarStage); + break; + } + } + let { heroCe, roleInc } = calCe.getCeInc(); // 计算战力,获得有变化的武将战力 + let pushHeros = new Array<{ hid: number, ce: number, incHeroCe: number }>(); + let heroes: HeroType[] = [], curHero: HeroType; + for(let [ hid, { ce, inc } ] of heroCe) { + let hero: HeroType; + if(hid == param.hid) { // 更新的那一个武将 + hero = await HeroModel.updateHeroInfo(roleId, hid, { ...heroUpdate, ce }); + curHero = hero; + } else { // 由于百家学宫等问题牵扯到的其他武将 + hero = await HeroModel.updateHeroInfo(roleId, hid, { ce }); + } + calCe.setResultHero(hero); + heroes.push(hero); + await PvpDefenseModel.updateCe(roleId, hid, inc); // 更新pvp防守阵战力 + pushHeros.push({ hid, ce, incHeroCe: inc }) + } + if(!heroCe.has(param.hid)) { + curHero = await HeroModel.updateHeroInfo(roleId, param.hid, heroUpdate); + } + let { topLineup, topLineupCe } = calCe.getTopLineup(); + let role = await RoleModel.incRoleInfo(roleId, { ce: roleInc }, { ...roleUpdate, topLineup, topLineupCe }); + let guild = await GuildModel.updateCe(roleId, roleInc); // 公会更新战力 + + saveCeChangeLog(role, roleInc, role.ce, type, [...heroCe.keys()]); + updateRank(roleId, serverId, topLineupCe, role, pushHeros, guild); -// 修改后战力的推送 -export async function pushCalPlayerCe(roleId: string, sid: string, calResult: calPlayerReturn) { - let {role, pushHeros, topLineupCe, hero, guild, serverId} = calResult; - // console.log(JSON.stringify(pushHeros)) - //下发战力 let uids = [{ uid: roleId, sid }]; - pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(role.ce) , heros: pushHeros, topLineupCe: reduceCe(topLineupCe) }), uids); + pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: role.ce, heros: pushHeros, topLineupCe }), uids); if(guild) { await updateUserInfo(REDIS_KEY.GUILD_INFO, guild.code, [{ field: 'guildCe', value: guild.guildCe }]); } - updateRank(roleId, serverId, topLineupCe, role, pushHeros); - - return hero; + return { heroes, curHero, curRole: role } } -// 修改全局战力并下发 -export async function calAllHeroCe(type:number, sid: string, roleId: string, update: RoleUpdate, args?:Array, params?: any) { - let result = await reCalAllHeroCe(type, roleId, update, args, params); - if(result.pushHeros.length > 0) { - return await pushCalAllHeroCe(roleId, sid, result); - } else { - return result; - } -} - -// 修改全局战力的推送 -export async function pushCalAllHeroCe(roleId: string, sid: string, calResult: calPlayerReturn) { - let {role, pushHeros, topLineupCe, guild, serverId } = calResult; - let uids = [{ uid: roleId, sid }]; - pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(role.ce), heros: pushHeros, topLineupCe: reduceCe(topLineupCe) }), uids); - - if(guild) { - await updateUserInfo(REDIS_KEY.GUILD_INFO, guild.code, [{ field: 'guildCe', value: guild.guildCe }]); - } - updateRank(roleId, serverId, topLineupCe, role, pushHeros); - - return calResult; -} - - // 更新排行榜数据 -async function updateRank(roleId: string, serverId: number, topLineupCe: number, role: RoleType, pushHeros: {hid: number, ce: number}[]) { +async function updateRank(roleId: string, serverId: number, topLineupCe: number, role: RoleType, pushHeros: {hid: number, ce: number}[], guild?: GuildType) { // 最强阵容 let r = new Rank(REDIS_KEY.TOP_LINEUP_RANK, { serverId }); @@ -94,4 +112,22 @@ async function updateRank(roleId: string, serverId: number, topLineupCe: number, // 更新最强五人阵容信息 let r5 = new Rank(REDIS_KEY.TOP_LINEUP_INFO, { serverId }); await r5.generParamAndSet(REDIS_KEY.TOP_LINEUP_INFO, { roleId }, { role }); + + if(guild) { + await updateUserInfo(REDIS_KEY.GUILD_INFO, guild.code, [{ field: 'guildCe', value: guild.guildCe }]); + } +} + +export async function getSumCe(roleId: string, num: number) { + let roleCe = await RoleCeModel.findByRoleId(roleId); + let calCe = new CalCe(); + calCe.setRoleCe(roleCe); + let arr = calCe.getResultCeArr(); + let ce = 0; + for(let i = 0; i < num; i++) { + if(arr[i]) { + ce += arr[i].ce; + } + } + return ce; } \ No newline at end of file diff --git a/game-server/app/services/role/calCe.ts b/game-server/app/services/role/calCe.ts index de2c9ff53..826f85d18 100644 --- a/game-server/app/services/role/calCe.ts +++ b/game-server/app/services/role/calCe.ts @@ -1,14 +1,15 @@ -import { ABI_STAGE, ABI_STAGE_TO_TYPE, ABI_TYPE_MAIN, SEID_TYPE } from "../../consts"; -import { HeroUpdate } from "../../db/Hero"; +import { ABI_STAGE, ABI_STAGE_TO_TYPE, ABI_TYPE_MAIN, LINEUP_NUM, SEID_TYPE } from "../../consts"; +import { HeroType, HeroUpdate } from "../../db/Hero"; import { RoleUpdate, Teraph } from "../../db/Role"; import { AttrCell, EquipAttr, HeroAttr, RoleCeType } from "../../db/RoleCe"; +import { TopHero } from "../../domain/dbGeneral"; import { AttributeCal } from "../../domain/roleField/attribute"; import { gameData, getHeroStarByQuality, getHeroWakeByQuality, getTeraph } from "../../pubUtils/data"; import { DicRandomEffectPool } from "../../pubUtils/dictionary/DicRandomEffectPool"; import { DicSe } from "../../pubUtils/dictionary/DicSe"; import { addToMap, deepCopy } from "../../pubUtils/util"; -class RoleCe { +export class CalCe { roleId: string; globalAttrs: Map = new Map(); // attrId => GlobalAttr heroAttrs: Map = new Map(); // hid+attrId => HeroAttr @@ -17,31 +18,13 @@ class RoleCe { equipAttrsByHid: Map = new Map(); // hid => [hid+eplaceId+attrId] equipAttrsByHidAndEplace: Map = new Map(); // hid+eplaceId =>+eplaceId+attrId] heroLv: Map = new Map(); + heroHistoryCe: Map = new Map(); + heroObjectId: Map = new Map(); equipLv: Map = new Map(); // hid+eplaceId => lv - - setRoleCe(roleCe: RoleCeType) { - this.roleId = roleCe.roleId; - for(let globalAttr of roleCe.globalAttrs) { - let obj = this.getGlobalAttrById(globalAttr.attrId); - obj.setByRoleCe(globalAttr); - } - for(let {hid, lv, attrs} of roleCe.heroAttrs) { - this.heroLv.set(hid, lv); - for(let cell of attrs) { - let obj = this.getHeroAttrByHidAndId(hid, cell.attrId); - obj.setByRoleCe(cell); - } - } - for(let { hid, eplaceId, lv, attrs } of roleCe.equipAttrs) { - this.equipLv.set(`${hid}_${eplaceId}`, lv); - for(let cell of attrs) { - let obj = this.getEquipAttrByHidAndId(hid, eplaceId, cell.attrId); - obj.setByRoleCe(cell); - } - } - } + originCes: Map = new Map(); // hid => ce + resultCes: Map = new Map(); // hid => ce - public getGlobalAttrById(attrId: number) { + private getGlobalAttrById(attrId: number) { if(!this.globalAttrs.has(attrId)) { if(ABI_TYPE_MAIN.indexOf(attrId) != -1) { let obj = new GlobalMainAttr(attrId); @@ -54,7 +37,7 @@ class RoleCe { return this.globalAttrs.get(attrId); } - public getHeroAttrByHidAndId(hid: number, attrId: number) { + private getHeroAttrByHidAndId(hid: number, attrId: number) { let key = `${hid}_${attrId}`; if(!this.heroAttrs.has(key)) { if(ABI_TYPE_MAIN.indexOf(attrId) != -1) { @@ -73,7 +56,7 @@ class RoleCe { return this.heroAttrs.get(key); } - public getEquipAttrByHidAndId(hid: number, eplaceId: number, attrId: number) { + private getEquipAttrByHidAndId(hid: number, eplaceId: number, attrId: number) { let key = `${hid}_${eplaceId}_${attrId}`; if(!this.equipAttrs.has(key)) { if(ABI_TYPE_MAIN.indexOf(attrId) != -1) { @@ -115,13 +98,35 @@ class RoleCe { ces.get(hid).push({ id: attrId, val }); } } - let result = new Map(); for(let [hid, arr] of ces) { let obj = new AttributeCal(); obj.setByWarJson(arr); - result.set(hid, obj.calCe()); + let ce = obj.calCe(); + this.resultCes.set(hid, ce); + } + return this.resultCes; + } + + public getCeInc() { + let ceResult = this.calHeroCe(); + let heroCe = new Map(); + let roleInc = 0; + for(let [hid, ce] of ceResult) { + let originCe = this.originCes.get(hid)||0; + if(ce != originCe) { + heroCe.set(hid, { inc: ce - originCe, origin: originCe, ce }); + roleInc += ce - originCe; + this.setHistoryCe(hid, ce); + } + } + return { heroCe, roleInc } + } + + private setHistoryCe(hid: number, ce: number) { + let historyCe = this.heroHistoryCe.get(hid)||0; + if(ce > historyCe) { + this.heroHistoryCe.set(hid, ce); } - return result; } public getRoleCeTable() { @@ -132,13 +137,15 @@ class RoleCe { let heroAttrs: HeroAttr[] = []; for(let [hid, keys] of this.heroAttrsByHid) { let lv = this.heroLv.get(hid); + let historyCe = this.heroHistoryCe.get(hid); + let objectId = this.heroObjectId.get(hid); let attrs: AttrCell[] = []; for(let key of keys) { let heroAttr = this.heroAttrs.get(key); attrs.push(heroAttr.getHeroAttrCell()); } heroAttrs.push({ - hid, lv, attrs + hid, lv, attrs, historyCe, objectId }); } let equipAttrs: EquipAttr[] = []; @@ -157,10 +164,34 @@ class RoleCe { roleId: this.roleId, globalAttrs, heroAttrs, equipAttrs } } -} -// 计算函数 -export class CalCe extends RoleCe { + public setRoleCe(roleCe: RoleCeType) { + this.roleId = roleCe.roleId; + if(roleCe) { + for(let globalAttr of roleCe.globalAttrs) { + let obj = this.getGlobalAttrById(globalAttr.attrId); + obj.setByRoleCe(globalAttr); + } + for(let {hid, lv, attrs, historyCe, objectId } of roleCe.heroAttrs) { + this.heroLv.set(hid, lv); + this.heroHistoryCe.set(hid, historyCe); + this.heroObjectId.set(hid, objectId); + for(let cell of attrs) { + let obj = this.getHeroAttrByHidAndId(hid, cell.attrId); + obj.setByRoleCe(cell); + } + } + for(let { hid, eplaceId, lv, attrs } of roleCe.equipAttrs) { + this.equipLv.set(`${hid}_${eplaceId}`, lv); + for(let cell of attrs) { + let obj = this.getEquipAttrByHidAndId(hid, eplaceId, cell.attrId); + obj.setByRoleCe(cell); + } + } + } + this.originCes = this.calHeroCe(); + } + public setInitHero(role: RoleUpdate, heroes: HeroUpdate[]) { this.roleId = role.roleId; for(let { hid, skinId, lv, quality, star, starStage, colorStar, colorStarStage, job, jobStage, } of heroes) { @@ -173,6 +204,35 @@ export class CalCe extends RoleCe { this.setTeraph(role.teraphs); } + + public setResultHero(hero: HeroType) { + this.heroObjectId.set(hero.hid, hero._id); + } + + public getResultCeArr() { + let arr: { hid: number, ce: number }[] = []; + for(let [ hid, ce ] of this.resultCes) { + arr.push({ hid, ce }); + } + arr.sort((a, b) => b.ce - a.ce); + return arr; + } + + public getTopLineup() { + let topLineup: TopHero[] = [], topLineupCe = 0; + let arr = this.getResultCeArr(); + for(let i = 0; i < LINEUP_NUM; i++) { + if(arr[i]) { + let { hid, ce } = arr[i]; + topLineup.push({ + hid, ce, hero: this.heroObjectId.get(hid) + }); + topLineupCe += ce; + } + } + return { topLineup, topLineupCe }; + } + // 武将基础&成长 public setHeroBase(hid: number, skinId: number) { let dicHero = gameData.hero.get(skinId); diff --git a/game-server/app/services/role/createHero.ts b/game-server/app/services/role/createHero.ts index fae782b4b..1fef3f2af 100644 --- a/game-server/app/services/role/createHero.ts +++ b/game-server/app/services/role/createHero.ts @@ -83,7 +83,6 @@ export class CreateHeroes { let ces = calCe.calHeroCe(); // 战力 for(let hero of this.heroes) { hero.ce = ces.get(hero.hid)||0; - hero.historyCe = hero.ce; this.incRoleCe += hero.ce; } this.roleCe = calCe.getRoleCeTable(); diff --git a/game-server/app/services/role/rewardService.ts b/game-server/app/services/role/rewardService.ts index 88baa19ee..adfaab0d6 100644 --- a/game-server/app/services/role/rewardService.ts +++ b/game-server/app/services/role/rewardService.ts @@ -2,7 +2,6 @@ import { ITID, CONSUME_TYPE, ITEM_TABLE, CURRENCY, CURRENCY_TYPE, MAIL_TYPE, HAN import { getDecimalCnt, getRandEelm, getRandEelmWithWeight, getRandSingleEelm, getRandValueByMinMax, resResult } from '../../pubUtils/util'; import { RoleModel, RoleType } from '../../db/Role'; import { setAp } from '../actionPointService'; -import { pushCalAllHeroCe, calPlayerCeAndSave, calAllHeroCe } from '../playerCeService'; import { ItemModel, ItemType } from '../../db/Item'; import { STATUS } from '../../consts/statusCode'; import { pinus } from 'pinus'; @@ -27,6 +26,7 @@ import { checkPopUpConditionInCreateHero } from '../activity/popUpShopService'; import { CreateHeroes } from './createHero'; import { combineItems, getCoinEventProperties, getGoldEventProperties, sortItems } from './util'; import { nowSeconds } from '../../pubUtils/timeUtil'; +import { calculateCe } from '../playerCeService'; @@ -82,7 +82,7 @@ export async function handleCost(roleId: string, sid: string, goods: Array cur.id == skinId); diff --git a/game-server/test/CheckPatten.ts b/game-server/test/CheckPatten.ts index 19b6c361b..e2f52a30c 100644 --- a/game-server/test/CheckPatten.ts +++ b/game-server/test/CheckPatten.ts @@ -177,7 +177,6 @@ function checkRoleHero(heros) { expect(hero.exp).to.be.a('number'); expect(hero.lv).to.be.a('number'); expect(hero.ce).to.be.a('number'); - expect(hero.historyCe).to.be.a('number'); expect(hero.star).to.be.a('number'); expect(hero.starStage).to.be.a('number'); expect(hero.colorStar).to.be.a('number'); diff --git a/shared/consts/constModules/heroConst.ts b/shared/consts/constModules/heroConst.ts index eafc4a2b4..866d86a9f 100644 --- a/shared/consts/constModules/heroConst.ts +++ b/shared/consts/constModules/heroConst.ts @@ -1,8 +1,8 @@ //武将养成系统分类 export enum HERO_SYSTEM_TYPE { INIT = 0, // 初始武将 - STAR = 1, // 升星 - LVUP = 2, // 升级 + LVUP = 1, // 升级 + STAR = 2, // 升星 COLORSTAR = 3, // 觉醒 QUALITY = 4, // 升品 TRAIN = 5, // (职业)训练 diff --git a/shared/db/Hero.ts b/shared/db/Hero.ts index a41a73341..b3a4ba1ad 100644 --- a/shared/db/Hero.ts +++ b/shared/db/Hero.ts @@ -166,8 +166,6 @@ export default class Hero extends BaseModel { ce: number; // 武将战力 @prop({ required: false, set: (val: boolean) => val, get: () => true }) isReducedCe: boolean; // 如果战力没有缩过就会返回false,缩过了就会返回true - @prop({ required: true, default: 0 }) - historyCe: number; // 武将历史最高战力 @prop({ required: true, type: CeAttrData, default: [], _id: false }) attr: CeAttrData[]; // 影响战力的属性 @@ -300,16 +298,6 @@ export default class Hero extends BaseModel { return insertInfos; } - public static async sumTopHeroCe(roleId: string, num: number) { - let ce: Array<{ historyCe: number }> = await HeroModel.aggregate([ - { $match: { roleId } }, - { $sort: { historyCe: -1 } }, - { $limit: num }, - { $group: { _id: null, historyCe: { $sum: '$historyCe' } } } - ]); - return ce.length > 0 ? ce[0].historyCe : 0; - } - public static async sumHeroCe(roleId: string) { let ce: Array<{ ce: number }> = await HeroModel.aggregate([ { $match: { roleId } }, @@ -323,13 +311,6 @@ export default class Hero extends BaseModel { return heroes; } - public static async updateCe(roleId: string, hid: number, ce: number, oldCe: number, historyCe: number, lean = true) { - let distance = ce - oldCe; - let historyDistance = ce > historyCe ? ce - historyCe : 0; - let result: HeroType = await HeroModel.findOneAndUpdate({ roleId, hid }, { $inc: { ce: distance, historyCe: historyDistance } }).lean(lean); - return result; - } - public static async deleteAccount(roleId: string) { let result = await HeroModel.deleteMany({ roleId }); return result; diff --git a/shared/db/RoleCe.ts b/shared/db/RoleCe.ts index 792ce74b2..c137bcd57 100644 --- a/shared/db/RoleCe.ts +++ b/shared/db/RoleCe.ts @@ -17,6 +17,10 @@ export class HeroAttr { lv: number; @prop({ required: true, type: () => AttrCell, _id: false }) attrs: AttrCell[]; + @prop({ required: true }) + historyCe: number; + @prop({ required: true }) + objectId: string; } export class EquipAttr { @@ -78,7 +82,7 @@ export default class RoleCe extends BaseModel { scrollAttrs: ScrollAttr[]; public static async findByRoleId(roleId: string) { - let result: RoleCeType = await RoleCeModel.findOne({ roleId }).lean(); + let result: RoleCeType = await RoleCeModel.findOneAndUpdate({ roleId }).lean(); return result; } diff --git a/shared/domain/roleField/hero.ts b/shared/domain/roleField/hero.ts index cf82ac277..c083e6640 100644 --- a/shared/domain/roleField/hero.ts +++ b/shared/domain/roleField/hero.ts @@ -41,7 +41,6 @@ export class HeroParam { exp: number; // 经验值 lv: number; // 武将等级 ce: number; // 武将战力 - historyCe: number; // 武将历史最高战力 star: number; // 星级 starStage: number; // 星级六维阶段 colorStar: number; // 觉醒, 彩星 @@ -76,10 +75,8 @@ export class HeroParam { this.lv = hero.lv; if(hero.isReducedCe) { this.ce = hero.ce; - this.historyCe = hero.historyCe; } else { this.ce = reduceCe(hero.ce); - this.historyCe = reduceCe(hero.historyCe); } this.star = hero.star; this.starStage = hero.starStage; diff --git a/shared/pubUtils/playerCe.ts b/shared/pubUtils/playerCe.ts index 53732b10a..cf605f469 100644 --- a/shared/pubUtils/playerCe.ts +++ b/shared/pubUtils/playerCe.ts @@ -1,6 +1,6 @@ -/** - * 体力系统 - */ +// /** +// * 体力系统 +// */ import { HERO_SYSTEM_TYPE, ABI_TYPE, HERO_CE_RATIO, LINEUP_NUM, TALENT_RELATION_TYPE } from '../consts'; @@ -20,694 +20,694 @@ import { GuildModel } from '../db/Guild'; import { DicJob } from './dictionary/DicJob'; import { saveCeChangeLog } from './logUtil'; import { JewelType } from '../db/Jewel'; -import { type } from 'os'; +// import { type } from 'os'; -// 修改并下发战力 -export async function calPlayerCeAndSave(type: number, roleId: string, originHero: HeroType, update: HeroUpdate, args?: Array, params?: any) { - let role = await RoleModel.findByRoleId(roleId); +// // 修改并下发战力 +// export async function calPlayerCeAndSave(type: number, roleId: string, originHero: HeroType, update: HeroUpdate, args?: Array, params?: any) { +// let role = await RoleModel.findByRoleId(roleId); - let { attr: roleAttrs = [], serverId } = role; +// let { attr: roleAttrs = [], serverId } = role; - let heroAttrs = await calPlayerCe(originHero, update, type, args, params); // 根据操作计算attr的增加 +// let heroAttrs = await calPlayerCe(originHero, update, type, args, params); // 根据操作计算attr的增加 - let newAttr = new AttributeCal(); - newAttr.setLv(update.lv||originHero.lv); - newAttr.setByDbData(roleAttrs, heroAttrs); - let heroCe = newAttr.calCe(); // 计算最终战力 - let incCe = heroCe - originHero.ce; +// let newAttr = new AttributeCal(); +// newAttr.setLv(update.lv||originHero.lv); +// newAttr.setByDbData(roleAttrs, heroAttrs); +// let heroCe = newAttr.calCe(); // 计算最终战力 +// let incCe = heroCe - originHero.ce; - // 更新到武将 - update.attr = heroAttrs; - update.ce = heroCe; - if (originHero.historyCe < heroCe) update.historyCe = heroCe; - let hero = await HeroModel.updateHeroInfo(roleId, originHero.hid, update, null, true); // 更新武将 返回是战力缩过的 +// // 更新到武将 +// update.attr = heroAttrs; +// update.ce = heroCe; +// if (originHero.historyCe < heroCe) update.historyCe = heroCe; +// let hero = await HeroModel.updateHeroInfo(roleId, originHero.hid, update, null, true); // 更新武将 返回是战力缩过的 - // 更新到角色 - let { topLineup, topLineupCe } = await calculatetopLineup(role, originHero.hid, heroCe, originHero._id); // 计算更新最强五人战力 - role = await RoleModel.updateRoleInfo(roleId, { ce: role.ce + incCe, topLineup, topLineupCe }); +// // 更新到角色 +// let { topLineup, topLineupCe } = await calculatetopLineup(role, originHero.hid, heroCe, originHero._id); // 计算更新最强五人战力 +// role = await RoleModel.updateRoleInfo(roleId, { ce: role.ce + incCe, topLineup, topLineupCe }); - await PvpDefenseModel.updateCe(roleId, originHero.hid, reduceCe(incCe)); // 更新pvp防守阵战力 - let guild = await GuildModel.updateCe(roleId, incCe); // 公会更新战力 +// await PvpDefenseModel.updateCe(roleId, originHero.hid, reduceCe(incCe)); // 更新pvp防守阵战力 +// let guild = await GuildModel.updateCe(roleId, incCe); // 公会更新战力 - let pushHeros = new Array<{ hid: number, ce: number, incHeroCe: number }>(); - pushHeros.push({ - hid: originHero.hid, - ce: reduceCe(heroCe), - incHeroCe: reduceCe(incCe), - }); +// let pushHeros = new Array<{ hid: number, ce: number, incHeroCe: number }>(); +// pushHeros.push({ +// hid: originHero.hid, +// ce: reduceCe(heroCe), +// incHeroCe: reduceCe(incCe), +// }); - saveCeChangeLog(role, incCe, role.ce, type, [originHero.hid]); +// saveCeChangeLog(role, incCe, role.ce, type, [originHero.hid]); - return { pushHeros, role, topLineupCe, hero, guild, serverId } -} +// return { pushHeros, role, topLineupCe, hero, guild, serverId } +// } -//全局属性加成 -export async function reCalAllHeroCe(type: number, roleId: string, update: RoleUpdate, args?: Array, params?: any) { - let role = await RoleModel.findByRoleId(roleId); - let heros = await HeroModel.findByRole(roleId); +// //全局属性加成 +// export async function reCalAllHeroCe(type: number, roleId: string, update: RoleUpdate, args?: Array, params?: any) { +// let role = await RoleModel.findByRoleId(roleId); +// let heros = await HeroModel.findByRole(roleId); - let roleAttrs = await reCalRoleAttr(type, heros, role, update, args, params); - if(!roleAttrs) return {role, pushHeros: [], ce: role.ce, topLineupCe: role.topLineupCe, serverId: role.serverId, heros }; // 无加成 +// let roleAttrs = await reCalRoleAttr(type, heros, role, update, args, params); +// if(!roleAttrs) return {role, pushHeros: [], ce: role.ce, topLineupCe: role.topLineupCe, serverId: role.serverId, heros }; // 无加成 - let pushHeros = new Array<{ hid: number, ce: number, incHeroCe: number }>(); +// let pushHeros = new Array<{ hid: number, ce: number, incHeroCe: number }>(); - let allIncCe = 0; - let resultHeroes = []; - for (let hero of heros) { - let { attr: heroAttrs, lv } = hero; - let newAttr = new AttributeCal(); - newAttr.setLv(lv); - newAttr.setByDbData(roleAttrs, heroAttrs); - let heroCe = newAttr.calCe(); // 计算最终战力 - if(heroCe != hero.ce) { - let incHeroCe = heroCe - hero.ce; - allIncCe += incHeroCe; - pushHeros.push({ hid: hero.hid, ce: reduceCe(heroCe), incHeroCe: reduceCe(incHeroCe) }); - let resultHero = await HeroModel.updateHeroInfo(roleId, hero.hid, { ce: heroCe }); - resultHeroes.push(resultHero); - await PvpDefenseModel.updateCe(roleId, hero.hid, reduceCe(incHeroCe)); // 更新pvp防守阵战力 - } else { - resultHeroes.push(hero); - } +// let allIncCe = 0; +// let resultHeroes = []; +// for (let hero of heros) { +// let { attr: heroAttrs, lv } = hero; +// let newAttr = new AttributeCal(); +// newAttr.setLv(lv); +// newAttr.setByDbData(roleAttrs, heroAttrs); +// let heroCe = newAttr.calCe(); // 计算最终战力 +// if(heroCe != hero.ce) { +// let incHeroCe = heroCe - hero.ce; +// allIncCe += incHeroCe; +// pushHeros.push({ hid: hero.hid, ce: reduceCe(heroCe), incHeroCe: reduceCe(incHeroCe) }); +// let resultHero = await HeroModel.updateHeroInfo(roleId, hero.hid, { ce: heroCe }); +// resultHeroes.push(resultHero); +// await PvpDefenseModel.updateCe(roleId, hero.hid, reduceCe(incHeroCe)); // 更新pvp防守阵战力 +// } else { +// resultHeroes.push(hero); +// } - } - let { topLineup, topLineupCe } = await calculatetopLineup(role); // 计算更新最强五人战力 +// } +// let { topLineup, topLineupCe } = await calculatetopLineup(role); // 计算更新最强五人战力 - if(allIncCe != 0) { - update.attr = roleAttrs; - update.topLineup = topLineup; - update.topLineupCe = topLineupCe; - } +// if(allIncCe != 0) { +// update.attr = roleAttrs; +// update.topLineup = topLineup; +// update.topLineupCe = topLineupCe; +// } - // console.log('************ roleAttr', update.attr) - role = await RoleModel.incRoleInfo(roleId, { ce: allIncCe },update); +// // console.log('************ roleAttr', update.attr) +// role = await RoleModel.incRoleInfo(roleId, { ce: allIncCe },update); - let guild = await GuildModel.updateCe(roleId, allIncCe); // 公会更新战力 +// let guild = await GuildModel.updateCe(roleId, allIncCe); // 公会更新战力 - saveCeChangeLog(role, allIncCe, role.ce, type, args); - return { role, pushHeros, ce: role.ce, topLineupCe: role.topLineupCe, guild, serverId: role.serverId, heros: resultHeroes } +// saveCeChangeLog(role, allIncCe, role.ce, type, args); +// return { role, pushHeros, ce: role.ce, topLineupCe: role.topLineupCe, guild, serverId: role.serverId, heros: resultHeroes } -} +// } -// 计算武将全局战力 -async function reCalRoleAttr(type: number, heros: Array, role: RoleType, update: RoleUpdate, args: Array, params: any) { - let { attr: roleAttrs } = role; - switch (type) { - case HERO_SYSTEM_TYPE.ADD_SKIN: - roleAttrs = calHeroAddSkin(role, args); - break; - case HERO_SYSTEM_TYPE.SCHOOL: - roleAttrs = calSchoolAddAttr(role, heros, args[0], args[1], args[2]); - break; - case HERO_SYSTEM_TYPE.SCROLL: - roleAttrs = calScrollAddAttr(role, heros, args[0]); - break; - case HERO_SYSTEM_TYPE.STAR: - case HERO_SYSTEM_TYPE.COLORSTAR: - case HERO_SYSTEM_TYPE.QUALITY: - roleAttrs = await calSchoolStarIncAttr(role, heros, type, args[0], args[1]); - break; - case HERO_SYSTEM_TYPE.TITLE: - roleAttrs = calTitle(role, update); - break; - case HERO_SYSTEM_TYPE.TERAPH: - roleAttrs = calTeraphMainAttr(role, update, args[0]); - break; - case HERO_SYSTEM_TYPE.TERAPH_UP: - roleAttrs = calTeraphAssistAttr(role, update, args[0]); - break; - case HERO_SYSTEM_TYPE.REBIRTH: - roleAttrs = await calHeroRebirth(role, params.originHero, params.heroUpdate); - break; - } +// // 计算武将全局战力 +// async function reCalRoleAttr(type: number, heros: Array, role: RoleType, update: RoleUpdate, args: Array, params: any) { +// let { attr: roleAttrs } = role; +// switch (type) { +// case HERO_SYSTEM_TYPE.ADD_SKIN: +// roleAttrs = calHeroAddSkin(role, args); +// break; +// case HERO_SYSTEM_TYPE.SCHOOL: +// roleAttrs = calSchoolAddAttr(role, heros, args[0], args[1], args[2]); +// break; +// case HERO_SYSTEM_TYPE.SCROLL: +// roleAttrs = calScrollAddAttr(role, heros, args[0]); +// break; +// case HERO_SYSTEM_TYPE.STAR: +// case HERO_SYSTEM_TYPE.COLORSTAR: +// case HERO_SYSTEM_TYPE.QUALITY: +// roleAttrs = await calSchoolStarIncAttr(role, heros, type, args[0], args[1]); +// break; +// case HERO_SYSTEM_TYPE.TITLE: +// roleAttrs = calTitle(role, update); +// break; +// case HERO_SYSTEM_TYPE.TERAPH: +// roleAttrs = calTeraphMainAttr(role, update, args[0]); +// break; +// case HERO_SYSTEM_TYPE.TERAPH_UP: +// roleAttrs = calTeraphAssistAttr(role, update, args[0]); +// break; +// case HERO_SYSTEM_TYPE.REBIRTH: +// roleAttrs = await calHeroRebirth(role, params.originHero, params.heroUpdate); +// break; +// } - return roleAttrs; -} +// return roleAttrs; +// } -// 计算单个武将战力 -export async function calPlayerCe(hero: HeroType, update: HeroUpdate, type: number, args: Array = [], params) { - let heroAttrs: CeAttrData[] = []; // {"hp": {"base": number, "fixUp": number, "ratioUp": number}} +// // 计算单个武将战力 +// export async function calPlayerCe(hero: HeroType, update: HeroUpdate, type: number, args: Array = [], params) { +// let heroAttrs: CeAttrData[] = []; // {"hp": {"base": number, "fixUp": number, "ratioUp": number}} - let addSeidList = new Array(); - let removeSeidList = new Array(); +// let addSeidList = new Array(); +// let removeSeidList = new Array(); - switch (type) { - case HERO_SYSTEM_TYPE.STAR: - case HERO_SYSTEM_TYPE.LVUP: - case HERO_SYSTEM_TYPE.COLORSTAR: - case HERO_SYSTEM_TYPE.QUALITY: - heroAttrs = calHeroStarIncAttr(hero, update, type, addSeidList, removeSeidList); // args: 升的星盘 - break; - case HERO_SYSTEM_TYPE.TRAIN: - heroAttrs = calHeroTrainIncAttr(hero, update); - break; - case HERO_SYSTEM_TYPE.STAGEUP: - // heroAttrs = calHeroJobStageUpIncAttr(hero, update, addSeidList, removeSeidList); - break; - case HERO_SYSTEM_TYPE.SKIN: - heroAttrs = calHeroWearSkinIncAttr(hero, update, addSeidList, removeSeidList); - break; - case HERO_SYSTEM_TYPE.FAVOUR: - heroAttrs = calHeroFavourUpIncAttr(hero, update); - break; - case HERO_SYSTEM_TYPE.CONNECT: - heroAttrs = calHeroConectIncAttr(hero, update, args[0]); - break; - case HERO_SYSTEM_TYPE.COMPOSE_EQUIP: - heroAttrs = calComposeEquipIncAttr(hero, update, args[0]); - break; - case HERO_SYSTEM_TYPE.EQUIP_STRENGTH: - heroAttrs = calEquipStrengthIncAttr(hero, update, args); - break; - case HERO_SYSTEM_TYPE.EQUIP_QUALITY: - heroAttrs = calEquipQualityIncAttr(hero, update, args); - break; - case HERO_SYSTEM_TYPE.EQUIP_STAR: - heroAttrs = calEquipStarIncAttr(hero, update, args, addSeidList, removeSeidList); - break; - case HERO_SYSTEM_TYPE.EQUIP_JEWEL: - heroAttrs = calEquipPutOnOrOffJewelIncAttr(hero, update, args, params, addSeidList, removeSeidList); - break; - case HERO_SYSTEM_TYPE.EQUIP_STONE: - heroAttrs = calEquipPutOnOrOffStoneIncAttr(hero, update, args, params, addSeidList, removeSeidList); - break; - case HERO_SYSTEM_TYPE.JEWEL_RESET_RANDSE: - case HERO_SYSTEM_TYPE.JEWEL_QUENCH: - heroAttrs = calJewelResetRandSeIncAttr(hero, args, params, addSeidList, removeSeidList); - break; - case HERO_SYSTEM_TYPE.SCROLL: - heroAttrs = calHeroCeScrollIncAttr(hero, update); - break; - case HERO_SYSTEM_TYPE.TALENT: - heroAttrs = calHeroTalent(hero, update, addSeidList, removeSeidList); - break; - default: - break; - } - addSeidEffect(heroAttrs, addSeidList, removeSeidList); // 处理加值 +// switch (type) { +// case HERO_SYSTEM_TYPE.STAR: +// case HERO_SYSTEM_TYPE.LVUP: +// case HERO_SYSTEM_TYPE.COLORSTAR: +// case HERO_SYSTEM_TYPE.QUALITY: +// heroAttrs = calHeroStarIncAttr(hero, update, type, addSeidList, removeSeidList); // args: 升的星盘 +// break; +// case HERO_SYSTEM_TYPE.TRAIN: +// heroAttrs = calHeroTrainIncAttr(hero, update); +// break; +// case HERO_SYSTEM_TYPE.STAGEUP: +// // heroAttrs = calHeroJobStageUpIncAttr(hero, update, addSeidList, removeSeidList); +// break; +// case HERO_SYSTEM_TYPE.SKIN: +// heroAttrs = calHeroWearSkinIncAttr(hero, update, addSeidList, removeSeidList); +// break; +// case HERO_SYSTEM_TYPE.FAVOUR: +// heroAttrs = calHeroFavourUpIncAttr(hero, update); +// break; +// case HERO_SYSTEM_TYPE.CONNECT: +// heroAttrs = calHeroConectIncAttr(hero, update, args[0]); +// break; +// case HERO_SYSTEM_TYPE.COMPOSE_EQUIP: +// heroAttrs = calComposeEquipIncAttr(hero, update, args[0]); +// break; +// case HERO_SYSTEM_TYPE.EQUIP_STRENGTH: +// heroAttrs = calEquipStrengthIncAttr(hero, update, args); +// break; +// case HERO_SYSTEM_TYPE.EQUIP_QUALITY: +// heroAttrs = calEquipQualityIncAttr(hero, update, args); +// break; +// case HERO_SYSTEM_TYPE.EQUIP_STAR: +// heroAttrs = calEquipStarIncAttr(hero, update, args, addSeidList, removeSeidList); +// break; +// case HERO_SYSTEM_TYPE.EQUIP_JEWEL: +// heroAttrs = calEquipPutOnOrOffJewelIncAttr(hero, update, args, params, addSeidList, removeSeidList); +// break; +// case HERO_SYSTEM_TYPE.EQUIP_STONE: +// heroAttrs = calEquipPutOnOrOffStoneIncAttr(hero, update, args, params, addSeidList, removeSeidList); +// break; +// case HERO_SYSTEM_TYPE.JEWEL_RESET_RANDSE: +// case HERO_SYSTEM_TYPE.JEWEL_QUENCH: +// heroAttrs = calJewelResetRandSeIncAttr(hero, args, params, addSeidList, removeSeidList); +// break; +// case HERO_SYSTEM_TYPE.SCROLL: +// heroAttrs = calHeroCeScrollIncAttr(hero, update); +// break; +// case HERO_SYSTEM_TYPE.TALENT: +// heroAttrs = calHeroTalent(hero, update, addSeidList, removeSeidList); +// break; +// default: +// break; +// } +// addSeidEffect(heroAttrs, addSeidList, removeSeidList); // 处理加值 - return heroAttrs; -} +// return heroAttrs; +// } -/** - * 添加皮肤全局加成 - * @param args - * @param ceAttr - */ -function calHeroAddSkin(role: RoleType, skinIds: Array) { - let { attr: roleAttrs } = role; +// /** +// * 添加皮肤全局加成 +// * @param args +// * @param ceAttr +// */ +// function calHeroAddSkin(role: RoleType, skinIds: Array) { +// let { attr: roleAttrs } = role; - for (let id of skinIds) { - let addSkin = gameData.fashion.get(id); - for (let attr of addSkin.globalAttr) { - let fixUp = attr.number * HERO_CE_RATIO; - updateRoleAttr(roleAttrs, attr.id, { inc: { fixUp } }); - } - } - role.attr = roleAttrs; - return roleAttrs; -} - -/** - * 升星觉醒升品等 - * @param {HeroType} hero 武将更新前的值 - * @param {HeroUpdate} update 更新的值 - * @param {number} type 养成类型 - * @param {number[]} addSeidList 用于更新被动 - * @param {number[]} removeSeidList 用于更新被动 - */ -export function calHeroStarIncAttr(originHero: HeroType, update: HeroUpdate, type: number, addSeidList: Array, removeSeidList: Array) { - let { star: originStar, starStage: originStarStage, quality: originQuality, colorStar: originColorStar, colorStarStage: originColorStarStage, attr: heroAttrs, skinId: originSkinId, lv: oldLv } = originHero; - let { star = originStar, starStage = originStarStage, quality = originQuality, colorStar = originColorStar, colorStarStage = originColorStarStage, skinId = originSkinId, lv = oldLv } = update; - - const dicHero = gameData.hero.get(skinId); - - const isWake = colorStar > 0; // 是否觉醒,只要激活了觉醒,彩星就会 > 1 - const isFirstWake = colorStar > 0 && originColorStar <= 0; // 是否是初次觉醒 - const isUpStar = originStar != star || originColorStar != colorStar; // 是否有升星 - // console.log('*isUpstar', isUpStar, originStar, star, originColorStar, colorStar) - if(starStage == ABI_STAGE.START) star--; - if(colorStarStage == ABI_STAGE.START) colorStar--; - - const dicStar = isWake ? getHeroWakeByQuality(dicHero.jobClass, dicHero.quality, colorStar) : getHeroStarByQuality(dicHero.jobClass, quality, star); // 星级表 - - - let stages = new Array(); // 需要升级的阶 - if (type == HERO_SYSTEM_TYPE.LVUP) { - stages = getAllAttrStage(); - } else if (type == HERO_SYSTEM_TYPE.STAR) { - let end = isUpStar? ABI_STAGE.END: starStage; - if(end < originStarStage) { - stages = getAllAttrStage(); - } else { - for(let i = originStarStage; i < end; i++) { - stages.push(i + 1); - } - } - } else if (type == HERO_SYSTEM_TYPE.QUALITY) { - stages = getAllAttrStage(); - } else if (type = HERO_SYSTEM_TYPE.COLORSTAR) { - if (isFirstWake) { // 首次觉醒 - stages = getAllAttrStage(); - } else { - let end = isUpStar? ABI_STAGE.END: colorStarStage; - if(end < originColorStarStage) { - stages = getAllAttrStage(); - } else { - for(let i = originColorStarStage; i < end; i++) { - stages.push(i + 1); - } - } - } - } else if (type == HERO_SYSTEM_TYPE.SKIN) { - stages = getAllAttrStage(); - } - for (let stage of stages) { - - let targetAttrId = ABI_STAGE_TO_TYPE.get(stage); // 转换为18维的属性id - let heroAttr = dicHero.baseAbilityArr.get(targetAttrId); // 武将表hp等 - let heroUpAttr = dicHero.baseAbilityUpArr.get(targetAttrId); // 武将表hp_up等 - let starUp = 0; // 星级成长 - if (!!dicStar && !!dicStar.ceAttr) { - starUp = dicStar.ceAttr.get(stage); - } - let newBase = (heroAttr + lv * (heroUpAttr + starUp)) * HERO_CE_RATIO; - updateHeroAttr(heroAttrs, targetAttrId, { set: { base: newBase } }); - } - - let curSeidList = getSeidListOfFashion(skinId, star, colorStar); - let preSeidList = getSeidListOfFashion(originSkinId, originStar, originColorStar); - - curSeidList.forEach((seid, type) => { - if (!preSeidList.has(type)) { - addSeidList.push(seid, 0); - } - }); - preSeidList.forEach((seid, type) => { - if (!curSeidList.has(type)) { - removeSeidList.push(seid, 0); - } - }); - - originHero.attr = heroAttrs; - return heroAttrs;//属性增量可以是多个 -} - -type updateCeAttr = Partial; -function updateHeroAttr(heroAttrs: CeAttrData[], id: number, update: { inc?: updateCeAttr, set?: updateCeAttr }) { - let index = heroAttrs.findIndex(cur => cur.id == id); - let curAttr = heroAttrs[index]; - if(!curAttr) { - curAttr = new CeAttrData(id); - heroAttrs.push(curAttr); - index = heroAttrs.length - 1; - } - if(update.inc) { - let { base, equipUp, fixUp, ratioUp } = update.inc; - if(base != undefined) curAttr.base += base; - if(equipUp != undefined) curAttr.equipUp += equipUp; - if(fixUp != undefined) curAttr.fixUp += fixUp; - if(ratioUp != undefined) curAttr.ratioUp += ratioUp; - } - if(update.set) { - let { base, equipUp, fixUp, ratioUp } = update.set; - if(base != undefined) curAttr.base = base; - if(equipUp != undefined) curAttr.equipUp = equipUp; - if(fixUp != undefined) curAttr.fixUp = fixUp; - if(ratioUp != undefined) curAttr.ratioUp = ratioUp; - } - if(curAttr.base <= 0 && curAttr.equipUp <=0 && curAttr.fixUp <=0 && curAttr.ratioUp <= 0) { - heroAttrs.splice(index, 1); - } -} - -type updateCeAttrRole = Partial; -function updateRoleAttr(roleAttrs: CeAttrDataRole[], id: number, update: { inc?: updateCeAttrRole, set?: updateCeAttrRole }) { - let curAttr = roleAttrs.find(cur => cur.id == id); - if(!curAttr) { - curAttr = new CeAttrDataRole(id); - roleAttrs.push(curAttr); - } - if(update.inc) { - let { fixUp, ratioUp } = update.inc; - if(fixUp) curAttr.fixUp = cal.add(curAttr.fixUp, fixUp); - if(ratioUp) curAttr.ratioUp = cal.add(curAttr.ratioUp, ratioUp); - } - if(update.set) { - let { fixUp, ratioUp } = update.set; - if(fixUp) curAttr.fixUp = fixUp; - if(ratioUp) curAttr.ratioUp = ratioUp; - } -} -/** - * 获取皮肤上的seid - * @param skinId - * @param originStar - * @param originColorStar - */ -function getSeidListOfFashion(skinId: number, originStar: number, originColorStar: number) { - let seidList = new Map(); // type => seid - let dicHero = gameData.hero.get(skinId); - - let { starSeidArr, colorStarSeidArr } = gameData.heroSkill.get(dicHero.skill); - for (let { star, value, type } of starSeidArr) { - if (originStar >= star) { - seidList.set(type, value); - } - } - for (let { star, value, type } of colorStarSeidArr) { - if (originColorStar >= star) { - seidList.set(type, value); - } - } - return seidList -} - -/** - * 兵种训练 - * @param {HeroType} originHero 原始武将 - * @param {HeroUpdate} update 更新的数据 - */ -export function calHeroTrainIncAttr(originHero: HeroType, update: HeroUpdate) { - let { attr: heroAttrs, job: oldJob, jobStage: oldJobStage } = originHero; - let { job = oldJob, jobStage = oldJobStage } = update; - - let dicJob = gameData.job.get(job); - let lastJob = getJobByGradeAndClass(dicJob.job_class, dicJob.grade - 1); - let dicLastJob = lastJob? gameData.job.get(lastJob.jobid): null; - - for(let i = 1; i <= dicJob.maxStage; i++) { - if(oldJobStage < i && jobStage >= i) { - let lastAttr = dicLastJob? dicLastJob.ceAttr.get(i).attr: 0; - let targetAttrId = dicJob.ceAttr.get(i).id; - let targetAttrValue = dicJob.ceAttr.get(i).attr; - let inc = (targetAttrValue - lastAttr) * HERO_CE_RATIO; - // console.log('*******', targetAttrId, targetAttrValue, lastAttr, inc ) - updateHeroAttr(heroAttrs, targetAttrId, { inc: { fixUp: inc } }); - } - } - return heroAttrs; -} - -/** - * 兵种进阶 - * @param {HeroType} originHero 原始武将 - * @param {HeroUpdate} update 更新内容 - * @param {number[]} addSeidList 用于更新被动 - * @param {number[]} removeSeidList 用于更新被动 - */ -// export function calHeroJobStageUpIncAttr(originHero: HeroType, update: HeroUpdate, addSeidList: Array, removeSeidList: Array) { -// let { job: oldJob, attr: heroAttrs } = originHero; -// let { job = oldJob } = update; - -// let lastJob = gameData.job.get(oldJob); -// let currentJob = gameData.job.get(job); -// let lastSeids = lastJob?.seid||new Array(); -// let curSeids = currentJob?.seid||new Array(); - -// for (let seid of curSeids) { -// let index = findIndex(lastSeids, seid); -// if (index < 0) { -// addSeidList.push(seid, 0); +// for (let id of skinIds) { +// let addSkin = gameData.fashion.get(id); +// for (let attr of addSkin.globalAttr) { +// let fixUp = attr.number * HERO_CE_RATIO; +// updateRoleAttr(roleAttrs, attr.id, { inc: { fixUp } }); // } // } -// for (let seid of lastSeids) { -// let index = findIndex(curSeids, seid); -// if (index < 0) { +// role.attr = roleAttrs; +// return roleAttrs; +// } + +// /** +// * 升星觉醒升品等 +// * @param {HeroType} hero 武将更新前的值 +// * @param {HeroUpdate} update 更新的值 +// * @param {number} type 养成类型 +// * @param {number[]} addSeidList 用于更新被动 +// * @param {number[]} removeSeidList 用于更新被动 +// */ +// export function calHeroStarIncAttr(originHero: HeroType, update: HeroUpdate, type: number, addSeidList: Array, removeSeidList: Array) { +// let { star: originStar, starStage: originStarStage, quality: originQuality, colorStar: originColorStar, colorStarStage: originColorStarStage, attr: heroAttrs, skinId: originSkinId, lv: oldLv } = originHero; +// let { star = originStar, starStage = originStarStage, quality = originQuality, colorStar = originColorStar, colorStarStage = originColorStarStage, skinId = originSkinId, lv = oldLv } = update; + +// const dicHero = gameData.hero.get(skinId); + +// const isWake = colorStar > 0; // 是否觉醒,只要激活了觉醒,彩星就会 > 1 +// const isFirstWake = colorStar > 0 && originColorStar <= 0; // 是否是初次觉醒 +// const isUpStar = originStar != star || originColorStar != colorStar; // 是否有升星 +// // console.log('*isUpstar', isUpStar, originStar, star, originColorStar, colorStar) +// if(starStage == ABI_STAGE.START) star--; +// if(colorStarStage == ABI_STAGE.START) colorStar--; + +// const dicStar = isWake ? getHeroWakeByQuality(dicHero.jobClass, dicHero.quality, colorStar) : getHeroStarByQuality(dicHero.jobClass, quality, star); // 星级表 + + +// let stages = new Array(); // 需要升级的阶 +// if (type == HERO_SYSTEM_TYPE.LVUP) { +// stages = getAllAttrStage(); +// } else if (type == HERO_SYSTEM_TYPE.STAR) { +// let end = isUpStar? ABI_STAGE.END: starStage; +// if(end < originStarStage) { +// stages = getAllAttrStage(); +// } else { +// for(let i = originStarStage; i < end; i++) { +// stages.push(i + 1); +// } +// } +// } else if (type == HERO_SYSTEM_TYPE.QUALITY) { +// stages = getAllAttrStage(); +// } else if (type = HERO_SYSTEM_TYPE.COLORSTAR) { +// if (isFirstWake) { // 首次觉醒 +// stages = getAllAttrStage(); +// } else { +// let end = isUpStar? ABI_STAGE.END: colorStarStage; +// if(end < originColorStarStage) { +// stages = getAllAttrStage(); +// } else { +// for(let i = originColorStarStage; i < end; i++) { +// stages.push(i + 1); +// } +// } +// } +// } else if (type == HERO_SYSTEM_TYPE.SKIN) { +// stages = getAllAttrStage(); +// } +// for (let stage of stages) { + +// let targetAttrId = ABI_STAGE_TO_TYPE.get(stage); // 转换为18维的属性id +// let heroAttr = dicHero.baseAbilityArr.get(targetAttrId); // 武将表hp等 +// let heroUpAttr = dicHero.baseAbilityUpArr.get(targetAttrId); // 武将表hp_up等 +// let starUp = 0; // 星级成长 +// if (!!dicStar && !!dicStar.ceAttr) { +// starUp = dicStar.ceAttr.get(stage); +// } +// let newBase = (heroAttr + lv * (heroUpAttr + starUp)) * HERO_CE_RATIO; +// updateHeroAttr(heroAttrs, targetAttrId, { set: { base: newBase } }); +// } + +// let curSeidList = getSeidListOfFashion(skinId, star, colorStar); +// let preSeidList = getSeidListOfFashion(originSkinId, originStar, originColorStar); + +// curSeidList.forEach((seid, type) => { +// if (!preSeidList.has(type)) { +// addSeidList.push(seid, 0); +// } +// }); +// preSeidList.forEach((seid, type) => { +// if (!curSeidList.has(type)) { // removeSeidList.push(seid, 0); // } +// }); + +// originHero.attr = heroAttrs; +// return heroAttrs;//属性增量可以是多个 +// } + +// type updateCeAttr = Partial; +// function updateHeroAttr(heroAttrs: CeAttrData[], id: number, update: { inc?: updateCeAttr, set?: updateCeAttr }) { +// let index = heroAttrs.findIndex(cur => cur.id == id); +// let curAttr = heroAttrs[index]; +// if(!curAttr) { +// curAttr = new CeAttrData(id); +// heroAttrs.push(curAttr); +// index = heroAttrs.length - 1; +// } +// if(update.inc) { +// let { base, equipUp, fixUp, ratioUp } = update.inc; +// if(base != undefined) curAttr.base += base; +// if(equipUp != undefined) curAttr.equipUp += equipUp; +// if(fixUp != undefined) curAttr.fixUp += fixUp; +// if(ratioUp != undefined) curAttr.ratioUp += ratioUp; +// } +// if(update.set) { +// let { base, equipUp, fixUp, ratioUp } = update.set; +// if(base != undefined) curAttr.base = base; +// if(equipUp != undefined) curAttr.equipUp = equipUp; +// if(fixUp != undefined) curAttr.fixUp = fixUp; +// if(ratioUp != undefined) curAttr.ratioUp = ratioUp; +// } +// if(curAttr.base <= 0 && curAttr.equipUp <=0 && curAttr.fixUp <=0 && curAttr.ratioUp <= 0) { +// heroAttrs.splice(index, 1); +// } +// } + +// type updateCeAttrRole = Partial; +// function updateRoleAttr(roleAttrs: CeAttrDataRole[], id: number, update: { inc?: updateCeAttrRole, set?: updateCeAttrRole }) { +// let curAttr = roleAttrs.find(cur => cur.id == id); +// if(!curAttr) { +// curAttr = new CeAttrDataRole(id); +// roleAttrs.push(curAttr); +// } +// if(update.inc) { +// let { fixUp, ratioUp } = update.inc; +// if(fixUp) curAttr.fixUp = cal.add(curAttr.fixUp, fixUp); +// if(ratioUp) curAttr.ratioUp = cal.add(curAttr.ratioUp, ratioUp); +// } +// if(update.set) { +// let { fixUp, ratioUp } = update.set; +// if(fixUp) curAttr.fixUp = fixUp; +// if(ratioUp) curAttr.ratioUp = ratioUp; +// } +// } +// /** +// * 获取皮肤上的seid +// * @param skinId +// * @param originStar +// * @param originColorStar +// */ +// function getSeidListOfFashion(skinId: number, originStar: number, originColorStar: number) { +// let seidList = new Map(); // type => seid +// let dicHero = gameData.hero.get(skinId); + +// let { starSeidArr, colorStarSeidArr } = gameData.heroSkill.get(dicHero.skill); +// for (let { star, value, type } of starSeidArr) { +// if (originStar >= star) { +// seidList.set(type, value); +// } +// } +// for (let { star, value, type } of colorStarSeidArr) { +// if (originColorStar >= star) { +// seidList.set(type, value); +// } +// } +// return seidList +// } + +// /** +// * 兵种训练 +// * @param {HeroType} originHero 原始武将 +// * @param {HeroUpdate} update 更新的数据 +// */ +// export function calHeroTrainIncAttr(originHero: HeroType, update: HeroUpdate) { +// let { attr: heroAttrs, job: oldJob, jobStage: oldJobStage } = originHero; +// let { job = oldJob, jobStage = oldJobStage } = update; + +// let dicJob = gameData.job.get(job); +// let lastJob = getJobByGradeAndClass(dicJob.job_class, dicJob.grade - 1); +// let dicLastJob = lastJob? gameData.job.get(lastJob.jobid): null; + +// for(let i = 1; i <= dicJob.maxStage; i++) { +// if(oldJobStage < i && jobStage >= i) { +// let lastAttr = dicLastJob? dicLastJob.ceAttr.get(i).attr: 0; +// let targetAttrId = dicJob.ceAttr.get(i).id; +// let targetAttrValue = dicJob.ceAttr.get(i).attr; +// let inc = (targetAttrValue - lastAttr) * HERO_CE_RATIO; +// // console.log('*******', targetAttrId, targetAttrValue, lastAttr, inc ) +// updateHeroAttr(heroAttrs, targetAttrId, { inc: { fixUp: inc } }); +// } // } // return heroAttrs; // } -/** - * 初始计算兵种属性 - * @param {HeroType} originHero 原始武将 - * @param {HeroUpdate} hero 更新后的武将 - * @param {number[]} addSeidList 用于更新被动 - * @param {number[]} removeSeidList 用于更新被动 - */ -export function calHeroJobAttr(originHero: HeroType, hero: HeroUpdate, addSeidList: Array, removeSeidList: Array) { - let { attr: heroAttrs } = originHero; - let currentJob = gameData.job.get(hero.job); - let jobGradeAndClass = getJobByGradeAndClass(currentJob.job_class, currentJob.grade - 1); - let lastJob: DicJob; - if (!!jobGradeAndClass) { - lastJob = gameData.job.get(jobGradeAndClass.jobid); - } +// /** +// * 兵种进阶 +// * @param {HeroType} originHero 原始武将 +// * @param {HeroUpdate} update 更新内容 +// * @param {number[]} addSeidList 用于更新被动 +// * @param {number[]} removeSeidList 用于更新被动 +// */ +// // export function calHeroJobStageUpIncAttr(originHero: HeroType, update: HeroUpdate, addSeidList: Array, removeSeidList: Array) { +// // let { job: oldJob, attr: heroAttrs } = originHero; +// // let { job = oldJob } = update; - for (let stage = ABI_JOB_STAGE.START; stage <= ABI_JOB_STAGE.END; stage++) { - if(hero.jobStage >= stage) { - let targetAttrId = currentJob.ceAttr.get(stage).id; - let fixUp = currentJob.ceAttr.get(stage).attr * HERO_CE_RATIO; - updateHeroAttr(heroAttrs, targetAttrId, { inc: { fixUp }}) - } else { - if(lastJob) { - let targetAttrId = lastJob.ceAttr.get(stage).id; - let fixUp = lastJob.ceAttr.get(stage).attr * HERO_CE_RATIO; - updateHeroAttr(heroAttrs, targetAttrId, { inc: { fixUp } }); - } - } - }; +// // let lastJob = gameData.job.get(oldJob); +// // let currentJob = gameData.job.get(job); +// // let lastSeids = lastJob?.seid||new Array(); +// // let curSeids = currentJob?.seid||new Array(); - originHero.attr = heroAttrs; - // heroAttrs = calHeroJobStageUpIncAttr(originHero, hero, addSeidList, removeSeidList); - return heroAttrs; -} +// // for (let seid of curSeids) { +// // let index = findIndex(lastSeids, seid); +// // if (index < 0) { +// // addSeidList.push(seid, 0); +// // } +// // } +// // for (let seid of lastSeids) { +// // let index = findIndex(curSeids, seid); +// // if (index < 0) { +// // removeSeidList.push(seid, 0); +// // } +// // } +// // return heroAttrs; +// // } -/** - * 穿戴时装的单武将加成 - * @param {HeroType} originHero 原始武将 - * @param {number} wearSkinId 穿戴的皮肤 - * @param {number} pullSkinId 脱下的皮肤 - * @param {number[]} addSeidList 用于更新被动 - * @param {number[]} removeSeidList 用于更新被动 - * @param {boolean} isInit 是否是计算初始战力 - */ -export function calHeroWearSkinIncAttr(originHero: HeroType, update: HeroUpdate, addSeidList: number[], removeSeidList: number[]) { - let { attr: heroAttrs, skinId: originSkinId } = originHero; - let { skinId = originSkinId, ePlace: newEplace } = update; - calHeroStarIncAttr(originHero, update, HERO_SYSTEM_TYPE.SKIN, addSeidList, removeSeidList); +// /** +// * 初始计算兵种属性 +// * @param {HeroType} originHero 原始武将 +// * @param {HeroUpdate} hero 更新后的武将 +// * @param {number[]} addSeidList 用于更新被动 +// * @param {number[]} removeSeidList 用于更新被动 +// */ +// export function calHeroJobAttr(originHero: HeroType, hero: HeroUpdate, addSeidList: Array, removeSeidList: Array) { +// let { attr: heroAttrs } = originHero; +// let currentJob = gameData.job.get(hero.job); +// let jobGradeAndClass = getJobByGradeAndClass(currentJob.job_class, currentJob.grade - 1); +// let lastJob: DicJob; +// if (!!jobGradeAndClass) { +// lastJob = gameData.job.get(jobGradeAndClass.jobid); +// } - let addSkin = gameData.fashionBySkinId.get(skinId); - let delSkin = gameData.fashionBySkinId.get(originSkinId); +// for (let stage = ABI_JOB_STAGE.START; stage <= ABI_JOB_STAGE.END; stage++) { +// if(hero.jobStage >= stage) { +// let targetAttrId = currentJob.ceAttr.get(stage).id; +// let fixUp = currentJob.ceAttr.get(stage).attr * HERO_CE_RATIO; +// updateHeroAttr(heroAttrs, targetAttrId, { inc: { fixUp }}) +// } else { +// if(lastJob) { +// let targetAttrId = lastJob.ceAttr.get(stage).id; +// let fixUp = lastJob.ceAttr.get(stage).attr * HERO_CE_RATIO; +// updateHeroAttr(heroAttrs, targetAttrId, { inc: { fixUp } }); +// } +// } +// }; - if (delSkin) { - for (let attr of delSkin.actorAttr) { - let fixUp = -1 * attr.number * HERO_CE_RATIO; - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } }); - } - } - for (let attr of addSkin.actorAttr) { - let fixUp = attr.number * HERO_CE_RATIO; - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } }); - } - originHero.attr = heroAttrs; +// originHero.attr = heroAttrs; +// // heroAttrs = calHeroJobStageUpIncAttr(originHero, hero, addSeidList, removeSeidList); +// return heroAttrs; +// } - let eplaceIds = newEplace.map(cur => cur.id); - calEquipStrengthIncAttr(originHero, update, eplaceIds); - calEquipQualityIncAttr(originHero, update, eplaceIds); - calEquipStarIncAttr(originHero, update, eplaceIds, addSeidList, removeSeidList); - // 天赋点 - calHeroTalent(originHero, update, addSeidList, removeSeidList); +// /** +// * 穿戴时装的单武将加成 +// * @param {HeroType} originHero 原始武将 +// * @param {number} wearSkinId 穿戴的皮肤 +// * @param {number} pullSkinId 脱下的皮肤 +// * @param {number[]} addSeidList 用于更新被动 +// * @param {number[]} removeSeidList 用于更新被动 +// * @param {boolean} isInit 是否是计算初始战力 +// */ +// export function calHeroWearSkinIncAttr(originHero: HeroType, update: HeroUpdate, addSeidList: number[], removeSeidList: number[]) { +// let { attr: heroAttrs, skinId: originSkinId } = originHero; +// let { skinId = originSkinId, ePlace: newEplace } = update; +// calHeroStarIncAttr(originHero, update, HERO_SYSTEM_TYPE.SKIN, addSeidList, removeSeidList); - return heroAttrs; -} +// let addSkin = gameData.fashionBySkinId.get(skinId); +// let delSkin = gameData.fashionBySkinId.get(originSkinId); -/** - * 羁绊解锁 - * @param {HeroType} originHero 原始武将 - * @param {HeroUpdate} update 更新数据 - * @param {number} shipId 解锁的那个id - */ -export function calHeroConectIncAttr(originHero: HeroType, update: HeroUpdate, shipId: number) { - let { connections: oldConnections = [], favourLv, attr: heroAttrs } = originHero; - let { connections = oldConnections } = update; +// if (delSkin) { +// for (let attr of delSkin.actorAttr) { +// let fixUp = -1 * attr.number * HERO_CE_RATIO; +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } }); +// } +// } +// for (let attr of addSkin.actorAttr) { +// let fixUp = attr.number * HERO_CE_RATIO; +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } }); +// } +// originHero.attr = heroAttrs; - let oldConnect = oldConnections.find(cur => cur.shipId == shipId); - let connect = connections.find(cur => cur.shipId == shipId); +// let eplaceIds = newEplace.map(cur => cur.id); +// calEquipStrengthIncAttr(originHero, update, eplaceIds); +// calEquipQualityIncAttr(originHero, update, eplaceIds); +// calEquipStarIncAttr(originHero, update, eplaceIds, addSeidList, removeSeidList); +// // 天赋点 +// calHeroTalent(originHero, update, addSeidList, removeSeidList); - let oldLevel = oldConnect?.level||0; - let level = connect?.level||0; +// return heroAttrs; +// } - let fiendShipLevel = gameData.friendShipLevelMap.get(favourLv); - let currentShip = getFriendShipById(shipId, level); - if (currentShip) { - for (let attr of currentShip.attributes) { - let fixUp = attr.number * (HERO_CE_RATIO + fiendShipLevel.add); - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } }); - } - } - if (level > 1) { - let lastShip = getFriendShipById(shipId, oldLevel); - if (lastShip) { - for (let attr of lastShip.attributes) { - let fixUp = -1 * attr.number * (HERO_CE_RATIO + fiendShipLevel.add); - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } }) - } - } - } - originHero.attr = heroAttrs; - return heroAttrs; -} +// /** +// * 羁绊解锁 +// * @param {HeroType} originHero 原始武将 +// * @param {HeroUpdate} update 更新数据 +// * @param {number} shipId 解锁的那个id +// */ +// export function calHeroConectIncAttr(originHero: HeroType, update: HeroUpdate, shipId: number) { +// let { connections: oldConnections = [], favourLv, attr: heroAttrs } = originHero; +// let { connections = oldConnections } = update; -/** - * 好感度升级,影响羁绊加成 - * - * @param {HeroType} originHero 原始武将数据 - * @param {HeroUpdate} update 更新的数据 - */ -export function calHeroFavourUpIncAttr(originHero: HeroType, update: HeroUpdate) { - let { favourLv: oldFavourLv, attr: heroAttrs } = originHero; - let { favourLv = oldFavourLv } = update; +// let oldConnect = oldConnections.find(cur => cur.shipId == shipId); +// let connect = connections.find(cur => cur.shipId == shipId); + +// let oldLevel = oldConnect?.level||0; +// let level = connect?.level||0; + +// let fiendShipLevel = gameData.friendShipLevelMap.get(favourLv); +// let currentShip = getFriendShipById(shipId, level); +// if (currentShip) { +// for (let attr of currentShip.attributes) { +// let fixUp = attr.number * (HERO_CE_RATIO + fiendShipLevel.add); +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } }); +// } +// } +// if (level > 1) { +// let lastShip = getFriendShipById(shipId, oldLevel); +// if (lastShip) { +// for (let attr of lastShip.attributes) { +// let fixUp = -1 * attr.number * (HERO_CE_RATIO + fiendShipLevel.add); +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } }) +// } +// } +// } +// originHero.attr = heroAttrs; +// return heroAttrs; +// } + +// /** +// * 好感度升级,影响羁绊加成 +// * +// * @param {HeroType} originHero 原始武将数据 +// * @param {HeroUpdate} update 更新的数据 +// */ +// export function calHeroFavourUpIncAttr(originHero: HeroType, update: HeroUpdate) { +// let { favourLv: oldFavourLv, attr: heroAttrs } = originHero; +// let { favourLv = oldFavourLv } = update; - let currentFiendShipLevel = gameData.friendShipLevelMap.get(favourLv); - let difAdd = currentFiendShipLevel.add; - if (oldFavourLv && oldFavourLv > 0) { // 减上一级好感 - let lastFiendShipLevel = gameData.friendShipLevelMap.get(oldFavourLv); - difAdd -= lastFiendShipLevel.add; - } +// let currentFiendShipLevel = gameData.friendShipLevelMap.get(favourLv); +// let difAdd = currentFiendShipLevel.add; +// if (oldFavourLv && oldFavourLv > 0) { // 减上一级好感 +// let lastFiendShipLevel = gameData.friendShipLevelMap.get(oldFavourLv); +// difAdd -= lastFiendShipLevel.add; +// } - for (let {shipId, level} of originHero.connections) { - let dicHeroFriendShip = getFriendShipById(shipId, level); - for (let attr of dicHeroFriendShip.attributes) { - let fixUp = (attr.number + difAdd ) * HERO_CE_RATIO; - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } }); - } - } - originHero.attr = heroAttrs; - return heroAttrs; -} +// for (let {shipId, level} of originHero.connections) { +// let dicHeroFriendShip = getFriendShipById(shipId, level); +// for (let attr of dicHeroFriendShip.attributes) { +// let fixUp = (attr.number + difAdd ) * HERO_CE_RATIO; +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } }); +// } +// } +// originHero.attr = heroAttrs; +// return heroAttrs; +// } -export function calComposeEquipIncAttr(hero: HeroType, update: HeroUpdate, eplaceId: number) { - let { attr: heroAttrs } = hero; - let newEquip = update.ePlace.find(cur => cur.id == eplaceId); - if(newEquip) { - let dicEquip = gameData.equipById.get(newEquip.equipId); - for(let attr of dicEquip.attribute) { - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } }); - } - } - return heroAttrs; -} +// export function calComposeEquipIncAttr(hero: HeroType, update: HeroUpdate, eplaceId: number) { +// let { attr: heroAttrs } = hero; +// let newEquip = update.ePlace.find(cur => cur.id == eplaceId); +// if(newEquip) { +// let dicEquip = gameData.equipById.get(newEquip.equipId); +// for(let attr of dicEquip.attribute) { +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } }); +// } +// } +// return heroAttrs; +// } -export function calEquipStrengthIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[]) { - let { attr: heroAttrs, ePlace: oldEplace } = hero; - let { ePlace: newEplace } = update; - for(let eplaceId of eplaceIds) { - let oldEquip = oldEplace.find(cur => cur.id == eplaceId); - let newEquip = newEplace.find(cur => cur.id == eplaceId); - if(newEquip && oldEquip) { - let dicOldEquip = gameData.equipById.get(oldEquip.equipId); - let dicNewEquip = gameData.equipById.get(newEquip.equipId); - for(let attr of dicOldEquip.attributeUp) { - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * oldEquip.lv * HERO_CE_RATIO } }); - } - for(let attr of dicNewEquip.attributeUp) { - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * newEquip.lv * HERO_CE_RATIO } }); - } - } - } - hero.attr = heroAttrs; - return heroAttrs -} +// export function calEquipStrengthIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[]) { +// let { attr: heroAttrs, ePlace: oldEplace } = hero; +// let { ePlace: newEplace } = update; +// for(let eplaceId of eplaceIds) { +// let oldEquip = oldEplace.find(cur => cur.id == eplaceId); +// let newEquip = newEplace.find(cur => cur.id == eplaceId); +// if(newEquip && oldEquip) { +// let dicOldEquip = gameData.equipById.get(oldEquip.equipId); +// let dicNewEquip = gameData.equipById.get(newEquip.equipId); +// for(let attr of dicOldEquip.attributeUp) { +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * oldEquip.lv * HERO_CE_RATIO } }); +// } +// for(let attr of dicNewEquip.attributeUp) { +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * newEquip.lv * HERO_CE_RATIO } }); +// } +// } +// } +// hero.attr = heroAttrs; +// return heroAttrs +// } -export function calEquipQualityIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[]) { - let { attr: heroAttrs, ePlace: oldEplace } = hero; - let { ePlace: newEplace } = update; - for(let eplaceId of eplaceIds) { - let oldEquip = oldEplace.find(cur => cur.id == eplaceId); - let newEquip = newEplace.find(cur => cur.id == eplaceId); - if(newEquip && oldEquip) { - let dicOldEquipQuality = getEquipQualityIdByEquipIdAndPoint(oldEquip.equipId, oldEquip.quality, oldEquip.qualityStage); - let dicNewEquipQuality = getEquipQualityIdByEquipIdAndPoint(newEquip.equipId, newEquip.quality, newEquip.qualityStage); - for(let attr of dicOldEquipQuality.attribute) { - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * HERO_CE_RATIO } }); - } - for(let attr of dicNewEquipQuality.attribute) { - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } }); - } - } - } - hero.attr = heroAttrs; - return heroAttrs -} +// export function calEquipQualityIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[]) { +// let { attr: heroAttrs, ePlace: oldEplace } = hero; +// let { ePlace: newEplace } = update; +// for(let eplaceId of eplaceIds) { +// let oldEquip = oldEplace.find(cur => cur.id == eplaceId); +// let newEquip = newEplace.find(cur => cur.id == eplaceId); +// if(newEquip && oldEquip) { +// let dicOldEquipQuality = getEquipQualityIdByEquipIdAndPoint(oldEquip.equipId, oldEquip.quality, oldEquip.qualityStage); +// let dicNewEquipQuality = getEquipQualityIdByEquipIdAndPoint(newEquip.equipId, newEquip.quality, newEquip.qualityStage); +// for(let attr of dicOldEquipQuality.attribute) { +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * HERO_CE_RATIO } }); +// } +// for(let attr of dicNewEquipQuality.attribute) { +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } }); +// } +// } +// } +// hero.attr = heroAttrs; +// return heroAttrs +// } -export function calEquipStarIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[], addSeidList: number[], removeSeidList: number[]) { - // 升星本身的属性加成 - let { hid, attr: heroAttrs, ePlace: oldEplace } = hero; - let { ePlace: newEplace } = update; - for(let eplaceId of eplaceIds) { - let oldEquip = oldEplace.find(cur => cur.id == eplaceId); - let newEquip = newEplace.find(cur => cur.id == eplaceId); - if(newEquip && oldEquip) { - let { mainAttr: oldMainAttr, subAttr: oldSubAttr } = getEquipStarAttrByStage(oldEquip.equipId, oldEquip.star, oldEquip.starStage); - let { mainAttr: newMainAttr, subAttr: newSubAttr } = getEquipStarAttrByStage(newEquip.equipId, newEquip.star, newEquip.starStage); - // 主属性 - for(let attr of oldMainAttr) { - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * HERO_CE_RATIO } }); - } - for(let attr of newMainAttr) { - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } }); - } - for(let attr of oldSubAttr) { - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * HERO_CE_RATIO } }); - } - for(let attr of newSubAttr) { - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } }); - } - } - } +// export function calEquipStarIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[], addSeidList: number[], removeSeidList: number[]) { +// // 升星本身的属性加成 +// let { hid, attr: heroAttrs, ePlace: oldEplace } = hero; +// let { ePlace: newEplace } = update; +// for(let eplaceId of eplaceIds) { +// let oldEquip = oldEplace.find(cur => cur.id == eplaceId); +// let newEquip = newEplace.find(cur => cur.id == eplaceId); +// if(newEquip && oldEquip) { +// let { mainAttr: oldMainAttr, subAttr: oldSubAttr } = getEquipStarAttrByStage(oldEquip.equipId, oldEquip.star, oldEquip.starStage); +// let { mainAttr: newMainAttr, subAttr: newSubAttr } = getEquipStarAttrByStage(newEquip.equipId, newEquip.star, newEquip.starStage); +// // 主属性 +// for(let attr of oldMainAttr) { +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * HERO_CE_RATIO } }); +// } +// for(let attr of newMainAttr) { +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } }); +// } +// for(let attr of oldSubAttr) { +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * HERO_CE_RATIO } }); +// } +// for(let attr of newSubAttr) { +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } }); +// } +// } +// } - // 套装属性 - calEquipSuitIncAttr(hid, oldEplace, newEplace, addSeidList, removeSeidList); - hero.attr = heroAttrs; - return heroAttrs; -} +// // 套装属性 +// calEquipSuitIncAttr(hid, oldEplace, newEplace, addSeidList, removeSeidList); +// hero.attr = heroAttrs; +// return heroAttrs; +// } -function calEquipSuitIncAttr(hid: number, oldEplace: EPlace[], newEplace: EPlace[], addSeidList: number[], removeSeidList: number[]) { - let dicEquipSuit = getEquipSuitByHero(hid); - let oldSuitStars: number[] = [], newSuitStars: number[] = []; - for(let equipId of dicEquipSuit.equips) { - let oldEquip = oldEplace.find(cur => cur.equipId == equipId); - oldSuitStars.push(oldEquip? oldEquip.star: 0); - let newEquip = newEplace.find(cur => cur.equipId == equipId); - newSuitStars.push(newEquip? newEquip.star: 0); - } - let oldStar = Math.min(...oldSuitStars); - let newStar = Math.min(...newSuitStars); +// function calEquipSuitIncAttr(hid: number, oldEplace: EPlace[], newEplace: EPlace[], addSeidList: number[], removeSeidList: number[]) { +// let dicEquipSuit = getEquipSuitByHero(hid); +// let oldSuitStars: number[] = [], newSuitStars: number[] = []; +// for(let equipId of dicEquipSuit.equips) { +// let oldEquip = oldEplace.find(cur => cur.equipId == equipId); +// oldSuitStars.push(oldEquip? oldEquip.star: 0); +// let newEquip = newEplace.find(cur => cur.equipId == equipId); +// newSuitStars.push(newEquip? newEquip.star: 0); +// } +// let oldStar = Math.min(...oldSuitStars); +// let newStar = Math.min(...newSuitStars); - for(let { star, seid } of dicEquipSuit.effect) { - if(oldStar >= star) removeSeidList.push(seid); - if(newStar >= star) addSeidList.push(seid, 0); - } -} +// for(let { star, seid } of dicEquipSuit.effect) { +// if(oldStar >= star) removeSeidList.push(seid); +// if(newStar >= star) addSeidList.push(seid, 0); +// } +// } -export function calEquipPutOnOrOffJewelIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[], params: { oldJewel: JewelType, newJewel: JewelType }, addSeidList: number[], removeSeidList: number[]) { - let { attr: heroAttrs, ePlace: oldEplace } = hero; - let { ePlace: newEplace } = update; - for(let eplaceId of eplaceIds) { - let oldEquip = oldEplace.find(cur => cur.id == eplaceId); - setRandSeToSeidList(params.oldJewel, oldEquip, removeSeidList); - let newEquip = newEplace.find(cur => cur.id == eplaceId); - setRandSeToSeidList(params.newJewel, newEquip, addSeidList); - } +// export function calEquipPutOnOrOffJewelIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[], params: { oldJewel: JewelType, newJewel: JewelType }, addSeidList: number[], removeSeidList: number[]) { +// let { attr: heroAttrs, ePlace: oldEplace } = hero; +// let { ePlace: newEplace } = update; +// for(let eplaceId of eplaceIds) { +// let oldEquip = oldEplace.find(cur => cur.id == eplaceId); +// setRandSeToSeidList(params.oldJewel, oldEquip, removeSeidList); +// let newEquip = newEplace.find(cur => cur.id == eplaceId); +// setRandSeToSeidList(params.newJewel, newEquip, addSeidList); +// } - return heroAttrs; -} +// return heroAttrs; +// } -function setRandSeToSeidList(jewel: JewelType, equip: EPlace, list: number[]) { - if(equip && jewel) { - for(let { id, seid, rand } of jewel.randSe) { - if(isRandSeUnLock(jewel.id, id, equip.stones)) { - list.push(seid, rand); - } - } - } -} +// function setRandSeToSeidList(jewel: JewelType, equip: EPlace, list: number[]) { +// if(equip && jewel) { +// for(let { id, seid, rand } of jewel.randSe) { +// if(isRandSeUnLock(jewel.id, id, equip.stones)) { +// list.push(seid, rand); +// } +// } +// } +// } export function isRandSeUnLock(jewelId: number, randSeId: number, stones: Stone[]) { let dicJewel = gameData.jewel.get(jewelId); @@ -723,387 +723,387 @@ export function isRandSeUnLock(jewelId: number, randSeId: number, stones: Stone[ return stoneCnt >= dicJewelCondition.stoneCnt && stoneLv >= dicJewelCondition.stoneLv; } -export function calEquipPutOnOrOffStoneIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[], params: { jewel: JewelType }, addSeidList: number[], removeSeidList: number[]) { - let { attr: heroAttrs, ePlace: oldEplace } = hero; - let { ePlace: newEplace } = update; - for(let eplaceId of eplaceIds) { - let oldEquip = oldEplace.find(cur => cur.id == eplaceId); - updateHeroAttrOfStone(heroAttrs, oldEquip, -1); - setRandSeToSeidList(params.jewel, oldEquip, removeSeidList); - let newEquip = newEplace.find(cur => cur.id == eplaceId); - updateHeroAttrOfStone(heroAttrs, newEquip, 1); - setRandSeToSeidList(params.jewel, newEquip, addSeidList); // 地玉石阶数变化可能导致属性词条解锁变化 - } - return heroAttrs; -} +// export function calEquipPutOnOrOffStoneIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[], params: { jewel: JewelType }, addSeidList: number[], removeSeidList: number[]) { +// let { attr: heroAttrs, ePlace: oldEplace } = hero; +// let { ePlace: newEplace } = update; +// for(let eplaceId of eplaceIds) { +// let oldEquip = oldEplace.find(cur => cur.id == eplaceId); +// updateHeroAttrOfStone(heroAttrs, oldEquip, -1); +// setRandSeToSeidList(params.jewel, oldEquip, removeSeidList); +// let newEquip = newEplace.find(cur => cur.id == eplaceId); +// updateHeroAttrOfStone(heroAttrs, newEquip, 1); +// setRandSeToSeidList(params.jewel, newEquip, addSeidList); // 地玉石阶数变化可能导致属性词条解锁变化 +// } +// return heroAttrs; +// } -function updateHeroAttrOfStone(heroAttrs: CeAttrData[], equip: EPlace, ratio: number) { - for(let { stone } of equip.stones) { - let dicStone = gameData.stone.get(stone); - if(dicStone) { - for(let attr of dicStone.attribute) { - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: ratio * attr.num * HERO_CE_RATIO } }); - } - } - } +// function updateHeroAttrOfStone(heroAttrs: CeAttrData[], equip: EPlace, ratio: number) { +// for(let { stone } of equip.stones) { +// let dicStone = gameData.stone.get(stone); +// if(dicStone) { +// for(let attr of dicStone.attribute) { +// updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: ratio * attr.num * HERO_CE_RATIO } }); +// } +// } +// } -} +// } -export function calJewelResetRandSeIncAttr(hero: HeroType, eplaceIds: number[], params: { oldJewel: JewelType, newJewel: JewelType }, addSeidList: number[], removeSeidList: number[]) { - let { attr: heroAttrs, ePlace } = hero; - for(let eplaceId of eplaceIds) { - let equip = ePlace.find(cur => cur.id == eplaceId); - setRandSeToSeidList(params.oldJewel, equip, removeSeidList); - setRandSeToSeidList(params.newJewel, equip, addSeidList); - } - return heroAttrs; -} +// export function calJewelResetRandSeIncAttr(hero: HeroType, eplaceIds: number[], params: { oldJewel: JewelType, newJewel: JewelType }, addSeidList: number[], removeSeidList: number[]) { +// let { attr: heroAttrs, ePlace } = hero; +// for(let eplaceId of eplaceIds) { +// let equip = ePlace.find(cur => cur.id == eplaceId); +// setRandSeToSeidList(params.oldJewel, equip, removeSeidList); +// setRandSeToSeidList(params.newJewel, equip, addSeidList); +// } +// return heroAttrs; +// } -// 添加技能增加的被动属性 -function addSeidEffect(heroAttrs: CeAttrData[], addSeidList: Array, removeSeidList: Array) { +// // 添加技能增加的被动属性 +// function addSeidEffect(heroAttrs: CeAttrData[], addSeidList: Array, removeSeidList: Array) { - // console.log('addSeidList', addSeidList.join()) - // console.log('removeSeidList', removeSeidList.join()) - let otiginalSeidList = [ - { list: addSeidList, multi: 1 }, - { list: removeSeidList, multi: -1 } - ]; - for (let { list, multi } of otiginalSeidList) { - let effectList = new Array(); // any: dic_zyz_se表内容 +// // console.log('addSeidList', addSeidList.join()) +// // console.log('removeSeidList', removeSeidList.join()) +// let otiginalSeidList = [ +// { list: addSeidList, multi: 1 }, +// { list: removeSeidList, multi: -1 } +// ]; +// for (let { list, multi } of otiginalSeidList) { +// let effectList = new Array(); // any: dic_zyz_se表内容 - for (let ii = 0; ii < list.length; ii += 2) { - let seid = list[ii]; - let rand = list[ii + 1] || 0; - let dicSeid: DicSe | DicRandomEffectPool = gameData.se.get(seid); - if (!dicSeid) dicSeid = gameData.randomEffectPool.get(seid); - if (dicSeid && dicSeid.id > 0) { - addSeid(effectList, dicSeid.id, rand, dicSeid.gainValueArr) - } - } +// for (let ii = 0; ii < list.length; ii += 2) { +// let seid = list[ii]; +// let rand = list[ii + 1] || 0; +// let dicSeid: DicSe | DicRandomEffectPool = gameData.se.get(seid); +// if (!dicSeid) dicSeid = gameData.randomEffectPool.get(seid); +// if (dicSeid && dicSeid.id > 0) { +// addSeid(effectList, dicSeid.id, rand, dicSeid.gainValueArr) +// } +// } - // console.log('effectList', JSON.stringify(effectList)); - for (let { type, gainValueArr: [ability, value] } of effectList) { - if (type == SEID_TYPE.TYPE101) { // 加值 - updateHeroAttr(heroAttrs, ability, { inc: {fixUp: value * multi * HERO_CE_RATIO} }); - } else if (type == SEID_TYPE.TYPE103) { // 主属性加百分比 - if(ABI_TYPE_MAIN.includes(ability)) { - updateHeroAttr(heroAttrs, ability, { inc: {ratioUp: value / 1000 * multi} }); - } - } else if (type == SEID_TYPE.TYPE104) { // 次级属性加百分比 - if(!ABI_TYPE_MAIN.includes(ability)) { - updateHeroAttr(heroAttrs, ability, { inc: {fixUp: value * 100 * multi * HERO_CE_RATIO } }); - } - } - } - } +// // console.log('effectList', JSON.stringify(effectList)); +// for (let { type, gainValueArr: [ability, value] } of effectList) { +// if (type == SEID_TYPE.TYPE101) { // 加值 +// updateHeroAttr(heroAttrs, ability, { inc: {fixUp: value * multi * HERO_CE_RATIO} }); +// } else if (type == SEID_TYPE.TYPE103) { // 主属性加百分比 +// if(ABI_TYPE_MAIN.includes(ability)) { +// updateHeroAttr(heroAttrs, ability, { inc: {ratioUp: value / 1000 * multi} }); +// } +// } else if (type == SEID_TYPE.TYPE104) { // 次级属性加百分比 +// if(!ABI_TYPE_MAIN.includes(ability)) { +// updateHeroAttr(heroAttrs, ability, { inc: {fixUp: value * 100 * multi * HERO_CE_RATIO } }); +// } +// } +// } +// } -} +// } -// 获取dic_zyz_se内容 -function addSeid(effectList: Array, seidId: number, rand: number, seidValue = new Array()) { - let curSeid: DicSe | DicRandomEffectPool = gameData.se.get(seidId); - if (!curSeid) curSeid = gameData.randomEffectPool.get(seidId); - if (!curSeid) { console.log("seidId not found:" + seidId); return; } - if (!seidValue) seidValue = curSeid.gainValueArr; +// // 获取dic_zyz_se内容 +// function addSeid(effectList: Array, seidId: number, rand: number, seidValue = new Array()) { +// let curSeid: DicSe | DicRandomEffectPool = gameData.se.get(seidId); +// if (!curSeid) curSeid = gameData.randomEffectPool.get(seidId); +// if (!curSeid) { console.log("seidId not found:" + seidId); return; } +// if (!seidValue) seidValue = curSeid.gainValueArr; - if (curSeid.type === SEID_TYPE.TYPE999) { - for (let i = 0; i < seidValue.length; i++) { - addSeid(effectList, seidValue[i], rand); - } - return; - } - let seid: DicSe | DicRandomEffectPool = deepCopy(curSeid); - if (curSeid.index > 0) { - seid.gainValueArr[curSeid.index - 1] = rand; - } - effectList.push(seid); -} +// if (curSeid.type === SEID_TYPE.TYPE999) { +// for (let i = 0; i < seidValue.length; i++) { +// addSeid(effectList, seidValue[i], rand); +// } +// return; +// } +// let seid: DicSe | DicRandomEffectPool = deepCopy(curSeid); +// if (curSeid.index > 0) { +// seid.gainValueArr[curSeid.index - 1] = rand; +// } +// effectList.push(seid); +// } -/** - * 全局加成,百家学宫 - * @param role 角色 - * @param heros 所有武将 - * @param schoolId 学宫学派 - * @param hid 换上的武将 - * @param preHid 撤下的武将 - */ -function calSchoolAddAttr(role: RoleType, heros: HeroType[], schoolId: number, hid: number, preHid: number) { - let { attr: roleAttrs } = role; - let school = gameData.school.get(schoolId); - if (!school) return null; +// /** +// * 全局加成,百家学宫 +// * @param role 角色 +// * @param heros 所有武将 +// * @param schoolId 学宫学派 +// * @param hid 换上的武将 +// * @param preHid 撤下的武将 +// */ +// function calSchoolAddAttr(role: RoleType, heros: HeroType[], schoolId: number, hid: number, preHid: number) { +// let { attr: roleAttrs } = role; +// let school = gameData.school.get(schoolId); +// if (!school) return null; - let preHero = heros.find(cur => cur.hid == preHid); - let curHero = heros.find(cur => cur.hid == hid); +// let preHero = heros.find(cur => cur.hid == preHid); +// let curHero = heros.find(cur => cur.hid == hid); - let defaultPercent = { mainAttrAPerent: 0, assiAttrAddValue: 0 }; - let preRate = preHero ? getSchoolRateByStar(preHero.star, preHero.colorStar, preHero.quality) : defaultPercent; - let curRate = curHero ? getSchoolRateByStar(curHero.star, curHero.colorStar, curHero.quality) : defaultPercent; +// let defaultPercent = { mainAttrAPerent: 0, assiAttrAddValue: 0 }; +// let preRate = preHero ? getSchoolRateByStar(preHero.star, preHero.colorStar, preHero.quality) : defaultPercent; +// let curRate = curHero ? getSchoolRateByStar(curHero.star, curHero.colorStar, curHero.quality) : defaultPercent; - for (let attrId of school.upAttribute) { - if(ABI_TYPE_MAIN.includes(attrId)) { // 主属性 - let ratioUp = curRate.mainAttrAPerent - preRate.mainAttrAPerent; - updateRoleAttr(roleAttrs, attrId, { inc: { ratioUp } }); - } else { - let fixUp = (curRate.assiAttrAddValue - preRate.assiAttrAddValue) * HERO_CE_RATIO; - updateRoleAttr(roleAttrs, attrId, { inc: { fixUp } }); - } - } +// for (let attrId of school.upAttribute) { +// if(ABI_TYPE_MAIN.includes(attrId)) { // 主属性 +// let ratioUp = curRate.mainAttrAPerent - preRate.mainAttrAPerent; +// updateRoleAttr(roleAttrs, attrId, { inc: { ratioUp } }); +// } else { +// let fixUp = (curRate.assiAttrAddValue - preRate.assiAttrAddValue) * HERO_CE_RATIO; +// updateRoleAttr(roleAttrs, attrId, { inc: { fixUp } }); +// } +// } - return roleAttrs; -} +// return roleAttrs; +// } -/** - * 升星,觉醒,升品时,百家学宫配置武将会相应修改全局战力 - * @param {HeroType[]} heros 全部武将 - * @param {number} type 类型 HERO_SYSTEM_TYPE - * @param {number} hid 更新的那个武将 - * @param {number} isStarUp 是否升星 - */ -async function calSchoolStarIncAttr(role: RoleType, heros: HeroType[], type: number, hid: number, isStarUp: number) { - let { roleId, attr: roleAttrs } = role; +// /** +// * 升星,觉醒,升品时,百家学宫配置武将会相应修改全局战力 +// * @param {HeroType[]} heros 全部武将 +// * @param {number} type 类型 HERO_SYSTEM_TYPE +// * @param {number} hid 更新的那个武将 +// * @param {number} isStarUp 是否升星 +// */ +// async function calSchoolStarIncAttr(role: RoleType, heros: HeroType[], type: number, hid: number, isStarUp: number) { +// let { roleId, attr: roleAttrs } = role; - if ((type == HERO_SYSTEM_TYPE.STAR || type == HERO_SYSTEM_TYPE.COLORSTAR) && !isStarUp) { - return null; - } +// if ((type == HERO_SYSTEM_TYPE.STAR || type == HERO_SYSTEM_TYPE.COLORSTAR) && !isStarUp) { +// return null; +// } - let hero = heros.find(cur => cur.hid == hid); - if(!hero) return null; +// let hero = heros.find(cur => cur.hid == hid); +// if(!hero) return null; - let curHeroInSchool = await SchoolModel.findByHid(roleId, hid); - if (!curHeroInSchool) return null; +// let curHeroInSchool = await SchoolModel.findByHid(roleId, hid); +// if (!curHeroInSchool) return null; - let preStar = hero.star, preColorStar = hero.colorStar, preQuality = hero.quality; - if (type == HERO_SYSTEM_TYPE.STAR && isStarUp) { - preStar--; - } else if (type == HERO_SYSTEM_TYPE.QUALITY) { - preQuality--; - } else if (type == HERO_SYSTEM_TYPE.COLORSTAR) { - preColorStar--; - if(preColorStar <= 0) preQuality--; - } else { - return null; - } - let school = gameData.school.get(curHeroInSchool.schoolId); - let preRate = getSchoolRateByStar(preStar, preColorStar, preQuality); - let curRate = getSchoolRateByStar(hero.star, hero.colorStar, hero.quality); +// let preStar = hero.star, preColorStar = hero.colorStar, preQuality = hero.quality; +// if (type == HERO_SYSTEM_TYPE.STAR && isStarUp) { +// preStar--; +// } else if (type == HERO_SYSTEM_TYPE.QUALITY) { +// preQuality--; +// } else if (type == HERO_SYSTEM_TYPE.COLORSTAR) { +// preColorStar--; +// if(preColorStar <= 0) preQuality--; +// } else { +// return null; +// } +// let school = gameData.school.get(curHeroInSchool.schoolId); +// let preRate = getSchoolRateByStar(preStar, preColorStar, preQuality); +// let curRate = getSchoolRateByStar(hero.star, hero.colorStar, hero.quality); - for (let attrId of school.upAttribute) { - if(ABI_TYPE_MAIN.includes(attrId)) { // 主属性 - let ratioUp = curRate.mainAttrAPerent - preRate.mainAttrAPerent; - updateRoleAttr(roleAttrs, attrId, { inc: { ratioUp } }); - } else { - let fixUp = (curRate.assiAttrAddValue - preRate.assiAttrAddValue) * HERO_CE_RATIO; - updateRoleAttr(roleAttrs, attrId, { inc: { fixUp } }); - } - } +// for (let attrId of school.upAttribute) { +// if(ABI_TYPE_MAIN.includes(attrId)) { // 主属性 +// let ratioUp = curRate.mainAttrAPerent - preRate.mainAttrAPerent; +// updateRoleAttr(roleAttrs, attrId, { inc: { ratioUp } }); +// } else { +// let fixUp = (curRate.assiAttrAddValue - preRate.assiAttrAddValue) * HERO_CE_RATIO; +// updateRoleAttr(roleAttrs, attrId, { inc: { fixUp } }); +// } +// } - return roleAttrs; -} +// return roleAttrs; +// } -/** - * 全局加成, 名将谱 - * @param heros 所有武将 - * @param hid 激活的武将 - * @param ceAttr - */ -function calScrollAddAttr(role: RoleType,heros: HeroType[], hid: number) { - let { attr: roleAttrs } = role; - // console.log('********** calScrollAddAttr', hid) +// /** +// * 全局加成, 名将谱 +// * @param heros 所有武将 +// * @param hid 激活的武将 +// * @param ceAttr +// */ +// function calScrollAddAttr(role: RoleType,heros: HeroType[], hid: number) { +// let { attr: roleAttrs } = role; +// // console.log('********** calScrollAddAttr', hid) - let curHero = heros.find(cur => cur.hid == hid); - let dicHero = gameData.hero.get(hid); - if (!curHero || !dicHero) return roleAttrs; - let { quality } = dicHero; - let { star, quality: curQuality, colorStar } = curHero; - // console.log('********** calScrollAddAttr curHero', star, curQuality, colorStar); - let heroScroll = getScollByStar(quality, star, curQuality, colorStar); - if (!heroScroll) return roleAttrs; - // console.log('********** heroScroll', heroScroll); +// let curHero = heros.find(cur => cur.hid == hid); +// let dicHero = gameData.hero.get(hid); +// if (!curHero || !dicHero) return roleAttrs; +// let { quality } = dicHero; +// let { star, quality: curQuality, colorStar } = curHero; +// // console.log('********** calScrollAddAttr curHero', star, curQuality, colorStar); +// let heroScroll = getScollByStar(quality, star, curQuality, colorStar); +// if (!heroScroll) return roleAttrs; +// // console.log('********** heroScroll', heroScroll); - let isInit = star == dicHero.initialStars && curQuality == dicHero.quality && colorStar == 0; - let preScroll = isInit? null: gameData.preHeroScroll.get(heroScroll.id); - // console.log('********** preScroll', preScroll); +// let isInit = star == dicHero.initialStars && curQuality == dicHero.quality && colorStar == 0; +// let preScroll = isInit? null: gameData.preHeroScroll.get(heroScroll.id); +// // console.log('********** preScroll', preScroll); - heroScroll.ceAttr.forEach((add, attrId) => { +// heroScroll.ceAttr.forEach((add, attrId) => { - let preAdd = preScroll ? preScroll.ceAttr.get(attrId) : 0; - let fixUp = (add - preAdd) * HERO_CE_RATIO; - // console.log('********** preAdd', attrId, preAdd, fixUp); - updateRoleAttr(roleAttrs, attrId, { inc: { fixUp } }); - }); - return roleAttrs; -} +// let preAdd = preScroll ? preScroll.ceAttr.get(attrId) : 0; +// let fixUp = (add - preAdd) * HERO_CE_RATIO; +// // console.log('********** preAdd', attrId, preAdd, fixUp); +// updateRoleAttr(roleAttrs, attrId, { inc: { fixUp } }); +// }); +// return roleAttrs; +// } -/** - * 名将谱激活增加单个武将好感 - * @param originHero 原始武将 - * @param update 更新数据 - */ -function calHeroCeScrollIncAttr(originHero: HeroType, update: HeroUpdate) { - let { attr: heroAttrs, favourLv: oldFavourLv } = originHero; - let { favourLv = oldFavourLv } = update; - if (favourLv != oldFavourLv) { - heroAttrs = calHeroFavourUpIncAttr(originHero, update); - } - return heroAttrs; -} +// /** +// * 名将谱激活增加单个武将好感 +// * @param originHero 原始武将 +// * @param update 更新数据 +// */ +// function calHeroCeScrollIncAttr(originHero: HeroType, update: HeroUpdate) { +// let { attr: heroAttrs, favourLv: oldFavourLv } = originHero; +// let { favourLv = oldFavourLv } = update; +// if (favourLv != oldFavourLv) { +// heroAttrs = calHeroFavourUpIncAttr(originHero, update); +// } +// return heroAttrs; +// } -function calHeroTalent(originHero: HeroType, update: HeroUpdate, addSeidList: number[], removeSeidList: number[]) { - let { attr: heroAttrs, skins: oldSkins } = originHero; - let { skins } = update; - let oldSkin = oldSkins.find(cur => cur.enable); - let newSkin = skins.find(cur => cur.enable); - let oldSeids = getTalentSeid(oldSkin.talent); - let newSeids = getTalentSeid(newSkin.talent); - for(let seid of newSeids) addSeidList.push(seid); - for(let seid of oldSeids) removeSeidList.push(seid); - return heroAttrs -} +// function calHeroTalent(originHero: HeroType, update: HeroUpdate, addSeidList: number[], removeSeidList: number[]) { +// let { attr: heroAttrs, skins: oldSkins } = originHero; +// let { skins } = update; +// let oldSkin = oldSkins.find(cur => cur.enable); +// let newSkin = skins.find(cur => cur.enable); +// let oldSeids = getTalentSeid(oldSkin.talent); +// let newSeids = getTalentSeid(newSkin.talent); +// for(let seid of newSeids) addSeidList.push(seid); +// for(let seid of oldSeids) removeSeidList.push(seid); +// return heroAttrs +// } -function getTalentSeid(talent: Talent[]) { - let seids = new Map(); // id, seids - for(let { id, level } of talent) { - let dicHeroTalent = gameData.heroTalent.get(id); - for(let { type, ids} of dicHeroTalent.relation) { - if(type == TALENT_RELATION_TYPE.REPLACE) { - for(let id of ids) { - seids.delete(id); - } - } - } - for(let { lv, seid } of dicHeroTalent.level) { - if(level >= lv) { - if(!seids.has(id)) seids.set(id, []); - seids.get(id).push(seid); - } - } - } - let result: number[] = []; - for(let [_, ids] of seids) { - result.push(...ids); - } - return result; -} +// function getTalentSeid(talent: Talent[]) { +// let seids = new Map(); // id, seids +// for(let { id, level } of talent) { +// let dicHeroTalent = gameData.heroTalent.get(id); +// for(let { type, ids} of dicHeroTalent.relation) { +// if(type == TALENT_RELATION_TYPE.REPLACE) { +// for(let id of ids) { +// seids.delete(id); +// } +// } +// } +// for(let { lv, seid } of dicHeroTalent.level) { +// if(level >= lv) { +// if(!seids.has(id)) seids.set(id, []); +// seids.get(id).push(seid); +// } +// } +// } +// let result: number[] = []; +// for(let [_, ids] of seids) { +// result.push(...ids); +// } +// return result; +// } -/** - * 升爵位 - * @param role 角色数据 - * @param titleId 升到哪个爵位 - */ -function calTitle(role: RoleType, update: RoleUpdate) { - let { title: oldTitle, attr: roleAttrs } = role; - let { title: newTitle = oldTitle } = update; +// /** +// * 升爵位 +// * @param role 角色数据 +// * @param titleId 升到哪个爵位 +// */ +// function calTitle(role: RoleType, update: RoleUpdate) { +// let { title: oldTitle, attr: roleAttrs } = role; +// let { title: newTitle = oldTitle } = update; - let dicOldTitle = gameData.title.get(oldTitle)||{ mainAttrValue: new Map(), assiAttrValue: new Map() }; - let dicNewTitle = gameData.title.get(newTitle); +// let dicOldTitle = gameData.title.get(oldTitle)||{ mainAttrValue: new Map(), assiAttrValue: new Map() }; +// let dicNewTitle = gameData.title.get(newTitle); - for (let i = ABI_TYPE.ABI_HP; i < ABI_TYPE.ABI_MAX; i++) { - if (dicNewTitle.mainAttrValue.has(i) || dicOldTitle.mainAttrValue.has(i)) { - let fixUp = ((dicNewTitle.mainAttrValue.get(i) || 0) - (dicOldTitle.mainAttrValue.get(i) || 0)) * HERO_CE_RATIO; - updateRoleAttr(roleAttrs, i, { inc: { fixUp } }); - } - if (dicNewTitle.assiAttrValue.has(i) || dicOldTitle.mainAttrValue.has(i)) { - let fixUp = ((dicNewTitle.assiAttrValue.get(i) || 0) - (dicOldTitle.assiAttrValue.get(i) || 0)) * HERO_CE_RATIO; - updateRoleAttr(roleAttrs, i, { inc: { fixUp } }); - } - } - return roleAttrs; -} +// for (let i = ABI_TYPE.ABI_HP; i < ABI_TYPE.ABI_MAX; i++) { +// if (dicNewTitle.mainAttrValue.has(i) || dicOldTitle.mainAttrValue.has(i)) { +// let fixUp = ((dicNewTitle.mainAttrValue.get(i) || 0) - (dicOldTitle.mainAttrValue.get(i) || 0)) * HERO_CE_RATIO; +// updateRoleAttr(roleAttrs, i, { inc: { fixUp } }); +// } +// if (dicNewTitle.assiAttrValue.has(i) || dicOldTitle.mainAttrValue.has(i)) { +// let fixUp = ((dicNewTitle.assiAttrValue.get(i) || 0) - (dicOldTitle.assiAttrValue.get(i) || 0)) * HERO_CE_RATIO; +// updateRoleAttr(roleAttrs, i, { inc: { fixUp } }); +// } +// } +// return roleAttrs; +// } -/** - * 神像强化,更新主属性加成 - * @param role 角色数据 - * @param update 更新数据 - * @param id 更新哪座神像 - */ -function calTeraphMainAttr(role: RoleType, update: RoleUpdate, id: number) { - let { attr: roleAttrs, teraphs: oldTeraphs = [] } = role; - let { teraphs = oldTeraphs } = update; +// /** +// * 神像强化,更新主属性加成 +// * @param role 角色数据 +// * @param update 更新数据 +// * @param id 更新哪座神像 +// */ +// function calTeraphMainAttr(role: RoleType, update: RoleUpdate, id: number) { +// let { attr: roleAttrs, teraphs: oldTeraphs = [] } = role; +// let { teraphs = oldTeraphs } = update; - let oldTeraph = oldTeraphs.find(cur => cur.id == id); - let teraph = teraphs.find(cur => cur.id == id); - if(teraph && teraph.attr) { - for(let [attrId, val] of teraph.attr) { - let oldVal = 0; - if(oldTeraph && oldTeraph.attr && oldTeraph.attr.has(attrId)) { - oldVal = oldTeraph.attr.get(attrId); - } +// let oldTeraph = oldTeraphs.find(cur => cur.id == id); +// let teraph = teraphs.find(cur => cur.id == id); +// if(teraph && teraph.attr) { +// for(let [attrId, val] of teraph.attr) { +// let oldVal = 0; +// if(oldTeraph && oldTeraph.attr && oldTeraph.attr.has(attrId)) { +// oldVal = oldTeraph.attr.get(attrId); +// } - let fixUp = (val - oldVal) * HERO_CE_RATIO; - updateRoleAttr(roleAttrs, attrId, { inc: {fixUp} }) - } - } - return roleAttrs; -} +// let fixUp = (val - oldVal) * HERO_CE_RATIO; +// updateRoleAttr(roleAttrs, attrId, { inc: {fixUp} }) +// } +// } +// return roleAttrs; +// } -/** - * 神像进阶,更新次级属性加成 - * @param role 角色数据 - * @param update 更新数据 - * @param id 更新哪座神像 - */ -function calTeraphAssistAttr(role: RoleType, update: RoleUpdate, id: number) { - let { attr: roleAttrs, teraphs: oldTeraphs = [] } = role; - let { teraphs = oldTeraphs } = update; +// /** +// * 神像进阶,更新次级属性加成 +// * @param role 角色数据 +// * @param update 更新数据 +// * @param id 更新哪座神像 +// */ +// function calTeraphAssistAttr(role: RoleType, update: RoleUpdate, id: number) { +// let { attr: roleAttrs, teraphs: oldTeraphs = [] } = role; +// let { teraphs = oldTeraphs } = update; - let oldTeraph = oldTeraphs.find(cur => cur.id == id); - let teraph = teraphs.find(cur => cur.id == id); +// let oldTeraph = oldTeraphs.find(cur => cur.id == id); +// let teraph = teraphs.find(cur => cur.id == id); - let dicOldTeraph = getTeraph(id, oldTeraph?.grade); - let dicTeraph = getTeraph(id, teraph?.grade); - if(!dicTeraph) return null; +// let dicOldTeraph = getTeraph(id, oldTeraph?.grade); +// let dicTeraph = getTeraph(id, teraph?.grade); +// if(!dicTeraph) return null; - dicTeraph.assiAttrValue.forEach((val, attrId) => { - let oldVal = 0; - if(dicOldTeraph && dicOldTeraph.assiAttrValue && dicOldTeraph.assiAttrValue.has(attrId)) { - oldVal = dicOldTeraph.assiAttrValue.get(attrId); - } +// dicTeraph.assiAttrValue.forEach((val, attrId) => { +// let oldVal = 0; +// if(dicOldTeraph && dicOldTeraph.assiAttrValue && dicOldTeraph.assiAttrValue.has(attrId)) { +// oldVal = dicOldTeraph.assiAttrValue.get(attrId); +// } - let fixUp = (val - oldVal) * HERO_CE_RATIO; - updateRoleAttr(roleAttrs, attrId, { inc: { fixUp } }); - }); - return roleAttrs; -} +// let fixUp = (val - oldVal) * HERO_CE_RATIO; +// updateRoleAttr(roleAttrs, attrId, { inc: { fixUp } }); +// }); +// return roleAttrs; +// } -async function calHeroRebirth(role: RoleType, originHero: HeroType, updateHero: HeroUpdate) { - let { roleId, attr: roleAttrs } = role; - // 1. 名将谱 - let dicHero = gameData.hero.get(originHero.hid); - let dicHeroScroll = getScollByStar(dicHero.quality, updateHero.star, updateHero.quality, updateHero.colorStar); - let dicPreScroll = getScollByStar(dicHero.quality, originHero.star, originHero.quality, originHero.colorStar); +// async function calHeroRebirth(role: RoleType, originHero: HeroType, updateHero: HeroUpdate) { +// let { roleId, attr: roleAttrs } = role; +// // 1. 名将谱 +// let dicHero = gameData.hero.get(originHero.hid); +// let dicHeroScroll = getScollByStar(dicHero.quality, updateHero.star, updateHero.quality, updateHero.colorStar); +// let dicPreScroll = getScollByStar(dicHero.quality, originHero.star, originHero.quality, originHero.colorStar); - if(dicHeroScroll) { - for(let [attrId, value] of dicHeroScroll.ceAttr) { - updateRoleAttr(roleAttrs, attrId, { inc: { fixUp: value * HERO_CE_RATIO } }); - } - } - if(dicPreScroll) { - for(let [attrId, value] of dicPreScroll.ceAttr) { - updateRoleAttr(roleAttrs, attrId, { inc: { fixUp: -value * HERO_CE_RATIO } }); - } - } +// if(dicHeroScroll) { +// for(let [attrId, value] of dicHeroScroll.ceAttr) { +// updateRoleAttr(roleAttrs, attrId, { inc: { fixUp: value * HERO_CE_RATIO } }); +// } +// } +// if(dicPreScroll) { +// for(let [attrId, value] of dicPreScroll.ceAttr) { +// updateRoleAttr(roleAttrs, attrId, { inc: { fixUp: -value * HERO_CE_RATIO } }); +// } +// } - // 2. 百家学宫 - let school = await SchoolModel.findByHid(roleId, originHero.hid); - if(school) { - let dicSchool = gameData.school.get(school.schoolId); - let preRate = getSchoolRateByStar(originHero.star, originHero.colorStar, originHero.quality); - let curRate = getSchoolRateByStar(updateHero.star, updateHero.colorStar, updateHero.quality); - console.log('####', updateHero.star, updateHero.colorStar, updateHero.quality) +// // 2. 百家学宫 +// let school = await SchoolModel.findByHid(roleId, originHero.hid); +// if(school) { +// let dicSchool = gameData.school.get(school.schoolId); +// let preRate = getSchoolRateByStar(originHero.star, originHero.colorStar, originHero.quality); +// let curRate = getSchoolRateByStar(updateHero.star, updateHero.colorStar, updateHero.quality); +// console.log('####', updateHero.star, updateHero.colorStar, updateHero.quality) - for (let attrId of dicSchool.upAttribute) { - if(ABI_TYPE_MAIN.includes(attrId)) { // 主属性 - let ratioUp = (curRate?.mainAttrAPerent||0) - (preRate?.mainAttrAPerent||0); - updateRoleAttr(roleAttrs, attrId, { inc: { ratioUp } }); - } else { - let fixUp = ((curRate?.assiAttrAddValue||0) - (preRate?.assiAttrAddValue||0)) * HERO_CE_RATIO; - updateRoleAttr(roleAttrs, attrId, { inc: { fixUp } }); - } - } - } +// for (let attrId of dicSchool.upAttribute) { +// if(ABI_TYPE_MAIN.includes(attrId)) { // 主属性 +// let ratioUp = (curRate?.mainAttrAPerent||0) - (preRate?.mainAttrAPerent||0); +// updateRoleAttr(roleAttrs, attrId, { inc: { ratioUp } }); +// } else { +// let fixUp = ((curRate?.assiAttrAddValue||0) - (preRate?.assiAttrAddValue||0)) * HERO_CE_RATIO; +// updateRoleAttr(roleAttrs, attrId, { inc: { fixUp } }); +// } +// } +// } - return roleAttrs; -} \ No newline at end of file +// return roleAttrs; +// } \ No newline at end of file diff --git a/shared/pubUtils/util.ts b/shared/pubUtils/util.ts index ee094136f..88746426b 100644 --- a/shared/pubUtils/util.ts +++ b/shared/pubUtils/util.ts @@ -14,6 +14,8 @@ import { Floor } from '../domain/activityField/gachaField'; import { WhiteListModel } from '../db/RegionWhiteList'; import { RewardInter } from './interface'; import { RoleType } from '../db/Role'; +import { RoleCeModel } from '../db/RoleCe'; +import { CalCe } from '../services/role/calCe'; const randomName = require("chinese-random-name"); const moment = require('moment'); const crypto = require('crypto'); @@ -115,18 +117,6 @@ export function decodeIdCntArrayStr(str: string, multi: number) { return strMap; } -// 计算当前武将战力 -export async function calculateSumCE(roleId: string, type: number, param: { num?: number, heroes?: Array }) { - let sum: number; - if (type == 1) { // 最高num人历史最高战力和 - sum = await HeroModel.sumTopHeroCe(roleId, param.num || 0); - } else if (type == 2) { // 所有人战力和 - sum = await HeroModel.sumHeroCe(roleId); - } - sum = reduceCe(sum); - return sum; -} - /** * 传入两个时间,返回按照时间差计算,第二个时间比第一个晚几天 * @param preTime 之前的时间 diff --git a/shared/resource/jsons/dic_zyz_gk_branch.json b/shared/resource/jsons/dic_zyz_gk_branch.json index e03c67187..ee31ab34e 100644 --- a/shared/resource/jsons/dic_zyz_gk_branch.json +++ b/shared/resource/jsons/dic_zyz_gk_branch.json @@ -15,8 +15,8 @@ "turnLimted": 20, "forcedCharactor": "&", "fobiddenCharactor": "&", - "victoryInfoInUI": "1.消灭所有敌军\r\n2.死亡的村民数量≤2\r\n3.剩下的村民都到达洞口", - "loseInfoInUI": "1.我方全部阵亡\r\n2.死亡的村民数量≥3\r\n3.20回合内未能胜利", + "victoryInfoInUI": "1.消灭所有敌军\n2.死亡的村民数量≤2\n3.剩下的村民都到达洞口", + "loseInfoInUI": "1.我方全部阵亡\n2.死亡的村民数量≥3\n3.20回合内未能胜利", "starInfoInUI": "1.在20回合内获得胜利", "cost": 10, "iconInMap": "spine&qingnian", @@ -30,7 +30,7 @@ "needPrepare": 1, "spineInBigMap": "&", "HeroNum": "6&6", - "gkInfo": " 循着不详的气息,赵云一行人来到了一座神秘的小村庄。老人们说,他们是为了躲避连年战乱才来此地。\r\n 想不到即使是在这里,也藏着不为人知的阴谋……\r\n 这些阴兵,究竟由谁招来?山林里还有恶兽蠢蠢欲动……\r\n", + "gkInfo": " 循着不详的气息,赵云一行人来到了一座神秘的小村庄。老人们说,他们是为了躲避连年战乱才来此地。\n 想不到即使是在这里,也藏着不为人知的阴谋……\n 这些阴兵,究竟由谁招来?山林里还有恶兽蠢蠢欲动……\n", "HeroNum_1": "1&6", "progress": "1&0|2&0", "progressDesc": "已逃走的百姓数量&被击杀的百姓数量", @@ -52,8 +52,8 @@ "turnLimted": 20, "forcedCharactor": "&", "fobiddenCharactor": "&", - "victoryInfoInUI": "1.消灭所有敌军\r\n2.解救所有被绑架的村民\r\n", - "loseInfoInUI": "1.我方全部阵亡\r\n2.20回合内未能胜利", + "victoryInfoInUI": "1.消灭所有敌军\n2.解救所有被绑架的村民\n", + "loseInfoInUI": "1.我方全部阵亡\n2.20回合内未能胜利", "starInfoInUI": "1.在20回合内获得胜利", "cost": 10, "iconInMap": "spine&yinbingdao&1", @@ -67,7 +67,7 @@ "needPrepare": 1, "spineInBigMap": "&", "HeroNum": "6&6", - "gkInfo": " 赵云一行人刚将村中的百姓带入山洞避难,一位急急忙忙寻找妻子的青年便找上门来。\r\n 洞内仍有不少以往百姓为了躲避战乱设下的陷阱,可务必要当心!\r\n 也许在这昏暗的洞穴里,点燃火炬一路小心前行,才是上策。", + "gkInfo": " 赵云一行人刚将村中的百姓带入山洞避难,一位急急忙忙寻找妻子的青年便找上门来。\n 洞内仍有不少以往百姓为了躲避战乱设下的陷阱,可务必要当心!\n 也许在这昏暗的洞穴里,点燃火炬一路小心前行,才是上策。", "HeroNum_1": "1&6", "progress": "1&0|6&0", "progressDesc": "已解救的百姓数量&待解救的百姓数量", @@ -104,7 +104,7 @@ "needPrepare": 1, "spineInBigMap": "&", "HeroNum": "6&6", - "gkInfo": " 诡异的阴兵,神秘的阴珠,残忍的血法……从巨鹿废墟到山林小村,一个巨大的阴谋似乎一直笼罩在冀州的上空。\r\n 现在赵云一行人终于来到了最后的祭坛,即将揭开这一切的始作俑者……", + "gkInfo": " 诡异的阴兵,神秘的阴珠,残忍的血法……从巨鹿废墟到山林小村,一个巨大的阴谋似乎一直笼罩在冀州的上空。\n 现在赵云一行人终于来到了最后的祭坛,即将揭开这一切的始作俑者……", "HeroNum_1": "1&6", "progress": "&", "progressDesc": "&", @@ -128,7 +128,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "\r\n1.在20回合内获得胜利", + "starInfoInUI": "\n1.在20回合内获得胜利", "cost": 10, "iconInMap": "spine&qingnian", "iconName": "井底世界", @@ -141,7 +141,7 @@ "needPrepare": 1, "spineInBigMap": "&", "HeroNum": "6&6", - "gkInfo": " 在枯井的周围,一群宫女装扮的幽鬼盘亘。\r\n 原来,这些是洛阳被焚毁时,惨死于皇宫中的宫女,因为长久以来的怨气而化为幽鬼,她们憎恨一切活着的人类。\r\n 小心!她们来了!", + "gkInfo": " 在枯井的周围,一群宫女装扮的幽鬼盘亘。\n 原来,这些是洛阳被焚毁时,惨死于皇宫中的宫女,因为长久以来的怨气而化为幽鬼,她们憎恨一切活着的人类。\n 小心!她们来了!", "HeroNum_1": "1&6", "progress": "&", "progressDesc": "&", @@ -178,7 +178,7 @@ "needPrepare": 1, "spineInBigMap": "&", "HeroNum": "6&6", - "gkInfo": " 枯井的尽头是一条大门,出于好奇,赵云一行人穿越幽暗的隧道,来到大门前。\r\n 吱呀——推开大门,原来这里是一片墓室。\r\n 在昏黄的烛火中,他们看到了一群没有意识的侍卫,还有一个没有头颅的巨大身影……", + "gkInfo": " 枯井的尽头是一条大门,出于好奇,赵云一行人穿越幽暗的隧道,来到大门前。\n 吱呀——推开大门,原来这里是一片墓室。\n 在昏黄的烛火中,他们看到了一群没有意识的侍卫,还有一个没有头颅的巨大身影……", "HeroNum_1": "1&6", "progress": "&", "progressDesc": "&", @@ -202,7 +202,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在30回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在30回合内获得胜利", "cost": 30, "iconInMap": "spine&zhangjiao", "iconName": "何后废陵", @@ -215,7 +215,7 @@ "needPrepare": 1, "spineInBigMap": "&", "HeroNum": "6&6", - "gkInfo": " 何太后身材窈窕,风流妩媚,进宫之后更是凭借自身的心计一步步征服了汉灵帝的心。然其天性善妒,刘协出生后,感到自身地位动摇的何太后用鸩酒毒杀了王美人。\r\n 天道有轮回,外戚与宦官相争,何进身死,董卓进京,何太后也被逼饮下毒酒。\r\n 陵墓尽头,彼岸花开,何太后已超脱生死,可千万别停留在这里!", + "gkInfo": " 何太后身材窈窕,风流妩媚,进宫之后更是凭借自身的心计一步步征服了汉灵帝的心。然其天性善妒,刘协出生后,感到自身地位动摇的何太后用鸩酒毒杀了王美人。\n 天道有轮回,外戚与宦官相争,何进身死,董卓进京,何太后也被逼饮下毒酒。\n 陵墓尽头,彼岸花开,何太后已超脱生死,可千万别停留在这里!", "HeroNum_1": "1&6", "progress": "&", "progressDesc": "&", @@ -239,7 +239,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 10, "iconInMap": "spine&guanhai", "iconName": 0, @@ -276,7 +276,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 10, "iconInMap": "spine&caosong", "iconName": 0, @@ -313,7 +313,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 30, "iconInMap": "spine&zhangrang", "iconName": 0, @@ -350,7 +350,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 10, "iconInMap": "spine&qingnian", "iconName": 0, @@ -387,7 +387,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 10, "iconInMap": "spine&yinbingdao", "iconName": 0, @@ -424,7 +424,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 30, "iconInMap": "spine&zhangjiao", "iconName": 0, @@ -461,7 +461,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 10, "iconInMap": "spine&qingnian", "iconName": 0, @@ -498,7 +498,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 10, "iconInMap": "spine&yinbingdao", "iconName": 0, @@ -535,7 +535,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 30, "iconInMap": "spine&zhangjiao", "iconName": 0, @@ -572,7 +572,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 10, "iconInMap": "spine&wangcan", "iconName": 0, @@ -609,7 +609,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 10, "iconInMap": "spine&yanshi", "iconName": 0, @@ -646,7 +646,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 30, "iconInMap": "spine&sengren", "iconName": 0, @@ -683,7 +683,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 10, "iconInMap": "spine&qingnian", "iconName": "武陵顽猴", @@ -720,7 +720,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 10, "iconInMap": "spine&yinbingdao", "iconName": "桃源疫民", @@ -757,7 +757,7 @@ "fobiddenCharactor": "&", "victoryInfoInUI": "消灭所有敌军", "loseInfoInUI": "我方全部阵亡", - "starInfoInUI": "1.我方无人阵亡;\r\n2.在5回合内获得胜利", + "starInfoInUI": "1.我方无人阵亡;\n2.在5回合内获得胜利", "cost": 30, "iconInMap": "spine&zhangjiao", "iconName": "西夷疫魔",