战力:替换新方法
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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']) }});
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
});
|
||||
|
||||
@@ -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<number>, 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<number>, 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;
|
||||
}
|
||||
@@ -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<number, GlobalMainAttr|GlobalSubAttr> = new Map(); // attrId => GlobalAttr
|
||||
heroAttrs: Map<string, HeroMainAttr|HeroSubAttr> = new Map(); // hid+attrId => HeroAttr
|
||||
@@ -17,31 +18,13 @@ class RoleCe {
|
||||
equipAttrsByHid: Map<number, string[]> = new Map(); // hid => [hid+eplaceId+attrId]
|
||||
equipAttrsByHidAndEplace: Map<string, { hid: number, eplaceId: number, keys: string[]}> = new Map(); // hid+eplaceId =>+eplaceId+attrId]
|
||||
heroLv: Map<number, number> = new Map();
|
||||
heroHistoryCe: Map<number, number> = new Map();
|
||||
heroObjectId: Map<number, string> = new Map();
|
||||
equipLv: Map<string, number> = 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<number, number> = new Map(); // hid => ce
|
||||
resultCes: Map<number, number> = 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<number, number>();
|
||||
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<number, { inc: number, origin: number, ce: number }>();
|
||||
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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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<ItemI
|
||||
}
|
||||
}
|
||||
let { newEplace } = updateEplaces(hero.ePlace, update);
|
||||
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, sid, roleId, hero, { ePlace: newEplace }, [...update.keys()]);
|
||||
await calculateCe(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, roleId, role.serverId, sid, { ePlace: newEplace }, {}, { ePlaceIds: [...update.keys()] });
|
||||
}
|
||||
|
||||
|
||||
@@ -216,8 +216,6 @@ export async function addItems(roleId: string, roleName: string, sid: string, go
|
||||
pushHeroSkinMsg(heroskins, skinInfos, uids); // 推送onHeroSkinChange
|
||||
saveItemChangeLog(roleId, skinInfos, reason);
|
||||
}
|
||||
// 推送全局加成信息
|
||||
if(calAllHeroResult) await pushCalAllHeroCe(roleId, sid, calAllHeroResult);
|
||||
}
|
||||
|
||||
// 5. 获得头像和相框等
|
||||
@@ -362,7 +360,7 @@ export async function addSkin(roleId: string, roleName: string, sid: string, ski
|
||||
if(skin.hid && !hero) hero = await HeroModel.findByHidAndRole(skin.hid, roleId);
|
||||
let condition = { type: FIGURE_UNLOCK_CONDITION.GET_SKIN, paramSkinId: skinId };
|
||||
await unlockFigure(sid, roleId, [condition]); // 解锁头像
|
||||
await calAllHeroCe(HERO_SYSTEM_TYPE.ADD_SKIN, sid, roleId, {}, [skinId]); // 全局加成
|
||||
await calculateCe(HERO_SYSTEM_TYPE.ADD_SKIN, roleId, hero.serverId, sid, {}, {}, { skinId }); // 全局加成
|
||||
|
||||
if (hero) { // 有武将的,将皮肤链接到武将上
|
||||
let curSkin = hero.skins.find(cur => cur.id == skinId);
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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, // (职业)训练
|
||||
|
||||
@@ -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 <HeroType[]>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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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<number> }) {
|
||||
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 之前的时间
|
||||
|
||||
@@ -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": "西夷疫魔",
|
||||
|
||||
Reference in New Issue
Block a user