diff --git a/game-server/app/servers/battle/handler/towerBattleHandler.ts b/game-server/app/servers/battle/handler/towerBattleHandler.ts index bc049c3d4..5902c8122 100644 --- a/game-server/app/servers/battle/handler/towerBattleHandler.ts +++ b/game-server/app/servers/battle/handler/towerBattleHandler.ts @@ -7,14 +7,14 @@ import { RoleModel } from './../../../db/Role'; import { TowerRecordModel } from './../../../db/TowerRecord'; import { Application, BackendSession } from 'pinus'; import { resResult, shouldRefresh, calculateNum, genCode } from '../../../pubUtils/util'; -import { calcuHangUpReward, checkTaskConditions, checkHangUpSpdUpCnt, refreshTasks, treatTask, getRemainTime, getDoingOrWaitingTasks, getTowerStatus, getHungupRewards, getTasks, checkTaskRewards, getTowerTaskCostGold, getTowerTaskSpdUpCostGold } from '../../../services/battleService'; +import { calcuHangUpReward, checkTaskConditions, checkHangUpSpdUpCnt, refreshTasks, treatTask, getRemainTime, getDoingOrWaitingTasks, getTowerStatus, getHungupRewards, getTasks, checkTaskRewards, getTowerTaskCostGold, getHangSpdUpCostGold, getManyHangSpdUpCostGold } from '../../../services/battleService'; import { addItems, handleCost } from '../../../services/rewardService'; import { checkBattleHeroes } from '../../../services/normalBattleService'; import { getGoldObject } from '../../../pubUtils/itemUtils'; import { Rank } from '../../../services/rankService'; import { gameData } from '../../../pubUtils/data'; import { ItemInter } from '../../../pubUtils/interface'; -import { TOWER_SEARCH } from '../../../pubUtils/dicParam'; +import * as dicParam from '../../../pubUtils/dicParam'; export default function(app: Application) { return new TowerBattleHandler(app); @@ -98,7 +98,7 @@ export class TowerBattleHandler { if(result.status == -1) return result.resResult; let {data: {hangUpSpdUpCnt, gold}} = result; - const costGold = this.getHangUpCost(hangUpSpdUpCnt, msg.speedUpCnt); + const costGold = getManyHangSpdUpCostGold(hangUpSpdUpCnt, msg.speedUpCnt); if(costGold > gold) { return resResult(STATUS.TOWER_GOLD_NOT_ENOUGH); } @@ -111,23 +111,12 @@ export class TowerBattleHandler { } const spdUpRec = await HangUpSpdUpRecModel.updateRec(roleId, roleName, msg.speedUpCnt, endLv, needReceiveGoods); const goods = await addItems(roleId, roleName, sid, timeReward); - hangUpSpdUpCnt -= msg.speedUpCnt; - let num = HANG_UP_CONSTS.MAX_SPD_UP_CNT - hangUpSpdUpCnt + 1; - let nextCostGold = getTowerTaskSpdUpCostGold(num); + let num = getManyHangSpdUpCostGold(spdUpResult.hangUpSpdUpCnt, 1); + let nextCostGold = getHangSpdUpCostGold(num); return resResult(STATUS.SUCCESS, { goods, hangUpSpdUpCnt, nextCostGold, hangUpPassTime: Math.floor(deltaTime/1000), rewardLv: endLv, costGold }); } - getHangUpCost(originCnt: number, count: number) { - let gold = 0; - for(let i = 1; i <= count; i++) { - let num = HANG_UP_CONSTS.MAX_SPD_UP_CNT - originCnt + i; - if(num < 0) num = i; - gold += getTowerTaskSpdUpCostGold(num); - } - return gold - } - async getTasks(msg: {}, session: BackendSession) { let roleId = session.get('roleId'); let roleName = session.get('roleName'); @@ -142,11 +131,11 @@ export class TowerBattleHandler { let roleId = session.get('roleId'); let roleName = session.get('roleName'); let curTime = new Date(); - let { towerLv, towerTaskCnt = 0, towerTaskReCnt=0 } = await RoleModel.findByRoleId(roleId); - if(TOWER_SEARCH.TOWER_SEARCH_REFRESHRULE <= towerTaskCnt) { // 付费刷新次数 + let { towerLv, towerTaskRefTime, towerTaskReCnt=0 } = await RoleModel.findByRoleId(roleId); + if(towerTaskReCnt >= dicParam.TOWER_SEARCH.TOWER_SEARCH_REFRESHRULE) { // 付费刷新次数 return resResult(STATUS.TOWER_REF_CNT_NOT_ENOUGH); } - let costGold = getTowerTaskCostGold(towerTaskCnt + 1); + let costGold = getTowerTaskCostGold(towerTaskReCnt, towerTaskRefTime); let {gold} = await RoleModel.findByRoleId(roleId); if(costGold > gold) { return resResult(STATUS.TOWER_GOLD_NOT_ENOUGH); @@ -159,10 +148,10 @@ export class TowerBattleHandler { if(task) batchCode = task.batchCode; } curTasks = await refreshTasks(towerLv, batchCode, roleId, roleName, curTasks); - await RoleModel.increaseTowerRefCnt(roleId, 1); + let newRole = await RoleModel.increaseTowerRefCnt(roleId, 1); let refRemainTime = getRemainTime(curTime); - let nextCostGold = getTowerTaskCostGold(towerTaskReCnt + 1); + let nextCostGold = getTowerTaskCostGold(newRole.towerTaskReCnt, newRole.towerTaskRefTime); return resResult(STATUS.SUCCESS, { curTasks: treatTask(curTasks, curTime), costGold, nextCostGold, refRemainTime}); } @@ -213,7 +202,7 @@ export class TowerBattleHandler { let refRemainTime = getRemainTime(curTime); curTasks = await TowerTaskRecModel.getCurTasks(roleId); // 当前显示中的任务 - let costGold = getTowerTaskCostGold(role.towerTaskCnt + 1); + let costGold = getTowerTaskCostGold(role.towerTaskReCnt, role.towerTaskRefTime); return resResult(STATUS.SUCCESS, { curTasks: treatTask(curTasks, curTime), refRemainTime, nextCostGold: costGold }); } @@ -247,7 +236,7 @@ export class TowerBattleHandler { let curTasks = await TowerTaskRecModel.getCurTasks(roleId); // 当前显示中的任务 let role = await RoleModel.findByRoleId(roleId); - let costGold = getTowerTaskCostGold(role.towerTaskCnt + 1); + let costGold = getTowerTaskCostGold(role.towerTaskReCnt, role.towerTaskRefTime); return resResult(STATUS.SUCCESS, { curTasks: treatTask(curTasks, curTime), goods, refRemainTime, nextCostGold: costGold }); } } diff --git a/game-server/app/services/battleService.ts b/game-server/app/services/battleService.ts index f92d2a251..260c246e1 100644 --- a/game-server/app/services/battleService.ts +++ b/game-server/app/services/battleService.ts @@ -18,7 +18,7 @@ import { getTimeFunM } from '../pubUtils/timeUtil'; import { ComRoleStatusHero } from '../db/ComBattleTeam'; import { sendMailByContent } from './mailService'; import { DicTowerTask } from '../pubUtils/dictionary/DicTowerTask'; -import { TOWER_SEARCH } from '../pubUtils/dicParam'; +import * as dicParam from '../pubUtils/dicParam'; /** * 获取当前镇念塔状态 @@ -41,9 +41,10 @@ export async function getTowerStatus(role: RoleType) { // return { code: 201, data: '天梯记录异常' }; } return { - canHungUp: towerLv >= HANG_UP_CONSTS.ENABLE_LV, - hungUpEnableLv: HANG_UP_CONSTS.ENABLE_LV, - canSendTask: true, + canHungUp: towerLv - 1 >= dicParam.TOWER_HANG_UP.TOWER_HANG_UP_ENABLE_LV, + hungUpEnableLv: dicParam.TOWER_HANG_UP.TOWER_HANG_UP_ENABLE_LV, + canSendTask: towerLv - 1 >= dicParam.TOWER_SEARCH.TOWER_SEARCH_STARTLIMITED, + sendTaskEnableLv: dicParam.TOWER_SEARCH.TOWER_SEARCH_STARTLIMITED, curLv: towerLv, usedHeroes: towerRec.heroes, progress: towerRec.warStatus @@ -60,13 +61,12 @@ export async function getHungupRewards(roleId: string) { return result; } let {timeReward, startTime, deltaTime} = result.data; - let {hangUpSpdUpCnt, lastSpdUpTime} = await RoleModel.findByRoleId(roleId); + let {hangUpSpdUpCnt = 0, lastSpdUpTime} = await RoleModel.findByRoleId(roleId); let curTime = new Date(); - if (!lastSpdUpTime || (shouldRefresh(lastSpdUpTime, curTime) && hangUpSpdUpCnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT)) { - hangUpSpdUpCnt = HANG_UP_CONSTS.MAX_SPD_UP_CNT; + if (shouldRefresh(lastSpdUpTime, curTime)) { + hangUpSpdUpCnt = 0; } - let num = HANG_UP_CONSTS.MAX_SPD_UP_CNT - hangUpSpdUpCnt + 1; - let nextCostGold = getTowerTaskSpdUpCostGold(num); + let nextCostGold = getManyHangSpdUpCostGold(hangUpSpdUpCnt, 1); return { status: 0, @@ -83,6 +83,12 @@ export async function getHungupRewards(roleId: string) { */ export async function getTasks(role: RoleType) { let { roleId, roleName, towerLv, towerTaskRefTime, towerTaskReCnt = 0 } = role; + + // towerLv:从1开始,下次打得层数,dicParam内的:从0开始,打过的层数 + if(towerLv - 1 <= dicParam.TOWER_SEARCH.TOWER_SEARCH_STARTLIMITED) { + return {curTasks: [], refRemainTime: 0, nextCostGold: 0} + } + let curTime = new Date(); let curTasks = await TowerTaskRecModel.getCurTasks(roleId); // 当前显示中的任务 @@ -101,12 +107,12 @@ export async function getTasks(role: RoleType) { curTasks = await refreshTasks(towerLv, batchCode, roleId, roleName, []); // 新建任务 // 重置派遣次数 - const role = await RoleModel.resetTowerCnt(roleId, curTime); + role = await RoleModel.resetTowerCnt(roleId, curTime); towerTaskReCnt = role.towerTaskReCnt; } let refRemainTime = getRemainTime(curTime); - let nextCostGold = getTowerTaskCostGold(towerTaskReCnt + 1); + let nextCostGold = getTowerTaskCostGold(role.towerTaskReCnt, role.towerTaskRefTime); return {curTasks: treatTask(curTasks, curTime), refRemainTime, nextCostGold} } @@ -209,9 +215,8 @@ export async function towerBattleEnd(sid: string, funcs: number[], roleId: strin } const { reward } = gameData.tower.get(role.towerLv - 1); if (reward) towerReward = reward; - if (role.towerLv == HANG_UP_CONSTS.ENABLE_LV) { + if (role.towerLv == dicParam.TOWER_HANG_UP.TOWER_HANG_UP_ENABLE_LV + 1) { await startHangUp(roleId, roleName); - pinus.app.get('channelService').pushMessageByUids('hangUpEnable', resResult(STATUS.SUCCESS, { enable: true }), [{ uid: roleId, sid }]); } // 任务 await checkTask(roleId, sid, funcs, TASK_TYPE.BATTLE_TOWER_LV, role.towerLv, false, {}); @@ -235,10 +240,10 @@ async function startHangUp(roleId: string, roleName: string) { export async function checkHangUpSpdUpCnt(roleId: string, cnt: number, curTime: Date) { const role = await RoleModel.findByRoleId(roleId); let { hangUpSpdUpCnt, gold, lastSpdUpTime } = role; - if (!lastSpdUpTime || (shouldRefresh(lastSpdUpTime, curTime) && hangUpSpdUpCnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT)) { - hangUpSpdUpCnt = HANG_UP_CONSTS.MAX_SPD_UP_CNT; + if (shouldRefresh(lastSpdUpTime, curTime)) { + hangUpSpdUpCnt = 0; } - if (cnt > hangUpSpdUpCnt) { + if (cnt + hangUpSpdUpCnt > dicParam.TOWER_BOOST.TOWER_BOOSTTIME) { return { status: -1, resResult: resResult(STATUS.TOWER_NOT_ENOUGH_HANG_UP_TIME) } } return { status: 0, data: { hangUpSpdUpCnt, gold, lastSpdUpTime } } @@ -246,7 +251,7 @@ export async function checkHangUpSpdUpCnt(roleId: string, cnt: number, curTime: export async function calcuHangUpReward(roleId: string, speedUp = false, speedUpCnt = 1, curTime = new Date()) { let { towerLv = 1, hangUpSpdUpCnt = 0, lastSpdUpTime } = await RoleModel.findByRoleId(roleId); - if (towerLv < HANG_UP_CONSTS.ENABLE_LV) { + if (towerLv - 1 < dicParam.TOWER_HANG_UP.TOWER_HANG_UP_ENABLE_LV) { return { status: -1, resResult: resResult(STATUS.TOWER_HANG_UP_NOT_START) } } @@ -267,7 +272,7 @@ export async function calcuHangUpReward(roleId: string, speedUp = false, speedUp } if (speedUp) { // 加速,直接收取6小时收益,小数的累积和普通收取独立 - if (hangUpSpdUpCnt >= speedUpCnt || !lastSpdUpTime || shouldRefresh(lastSpdUpTime, new Date)) { // 可加速 + if (hangUpSpdUpCnt < speedUpCnt || !lastSpdUpTime || shouldRefresh(lastSpdUpTime, new Date)) { // 可加速 let multi = Math.floor(HANG_UP_CONSTS.SPD_UP_REC_TIME / HANG_UP_CONSTS.UNIT_TIME); let spdUpRec = await HangUpSpdUpRecModel.getSpdUpRec(roleId, towerLv - 1); let goods = []; @@ -380,7 +385,7 @@ export async function refreshTasks(towerLv: number, batchCode: string, roleId: s let ridTaskIds: number[] = []; let positions = new Map (); // 需要创建或更新 - for(let i = 1; i <= TOWER_SEARCH.TOWER_SEARCH_LIMITED; i++) { + for(let i = 1; i <= dicParam.TOWER_SEARCH.TOWER_SEARCH_LIMITED; i++) { positions.set(i, null); } for(let task of oldTasks) { @@ -575,14 +580,47 @@ export function transBossHpArr(source: Array<{ dataId: number, hp: number, actor return cloneDeep(desArr); } -export function getTowerTaskCostGold(times: number) { - let cost = times * TOWER_SEARCH.TOWER_SEARCH_REFRESHRULE_FEE; - if(cost > TOWER_SEARCH.TOWER_SEARCH_REFRESHRULE_MAX) cost = TOWER_SEARCH.TOWER_SEARCH_REFRESHRULE_MAX; +/** + * 获得下一次刷新派遣的花费 + * @param times 玩家表上的次数 + * @param refTime 玩家表上的刷新时间 + * @returns + */ +export function getTowerTaskCostGold(times: number, refTime: Date) { + if(shouldRefresh(refTime, new Date())) { + times = 0; + } + let cost = (times + 1) * dicParam.TOWER_SEARCH.TOWER_SEARCH_REFRESHRULE_FEE; + if(cost > dicParam.TOWER_SEARCH.TOWER_SEARCH_REFRESHRULE_MAX) cost = dicParam.TOWER_SEARCH.TOWER_SEARCH_REFRESHRULE_MAX; return cost; } -export function getTowerTaskSpdUpCostGold(times:number) { - let cost = times * TOWER_SEARCH.TOWER_SEARCH_REFRESHRULE_FEE; // TODO 改成系统参数表 - if(cost > TOWER_SEARCH.TOWER_SEARCH_REFRESHRULE_MAX) cost = TOWER_SEARCH.TOWER_SEARCH_REFRESHRULE_MAX; - return cost; +/** + * 多次加速挂机消耗的元宝 + * @param originCnt 玩家表里原来的次数 + * @param count 这次加速几次 + * @returns + */ +export function getManyHangSpdUpCostGold(originCnt: number, count: number) { + let gold = 0; + for(let i = 1; i <= count; i++) { + let num = originCnt + i; + gold += getHangSpdUpCostGold(num); + } + return gold +} + +/** + * 计算加速挂机消耗的元宝 + * @param times 第几次,如果你没有加速过,这里给1 + * @returns + */ +export function getHangSpdUpCostGold(times:number) { + if(times <= dicParam.TOWER_BOOST.TOWER_BOOSTFREETIME) { + return 0 + } else { + let cost = (times - dicParam.TOWER_BOOST.TOWER_BOOSTFREETIME) * dicParam.TOWER_BOOST.TOWER_BOOSTCAST; // TODO 改成系统参数表 + if(cost > dicParam.TOWER_BOOST.TOWER_BOOSTCASTMAX) cost = dicParam.TOWER_BOOST.TOWER_BOOSTCASTMAX; + return cost; + } } \ No newline at end of file diff --git a/shared/consts/constModules/battleConst.ts b/shared/consts/constModules/battleConst.ts index a3da17fbd..b43ba9df1 100644 --- a/shared/consts/constModules/battleConst.ts +++ b/shared/consts/constModules/battleConst.ts @@ -1,3 +1,5 @@ +import * as dicParam from '../../pubUtils/dicParam'; + export const ACTION_POIN = { MAX: 100000, PER: 6 * 60 * 1000 @@ -83,11 +85,9 @@ export const EXPEDITION_WAR_RECORD_STATUS = { export const EVENT_START_BATTLE = 101; export const HANG_UP_CONSTS = { - ENABLE_LV: 2, // 第几层开始可以挂机 - UNIT_TIME: 10 * 60 * 1000, // 每几分钟能有一次收益 - MAX_TIME: 24 * 60 * 60 * 1000, // 最多可储存24小时收益 - MAX_SPD_UP_CNT: 2, // 每天可以收取多少次 - SPD_UP_REC_TIME: 6 * 60 * 60 * 1000 // 加速直接获得6小时收益 + UNIT_TIME: dicParam.TOWER_HANG_UP.TOWER_HANG_UP_UNIT_TIME * 60 * 1000, // 每几分钟能有一次收益 + MAX_TIME: dicParam.TOWER_HANG_UP.TOWER_HANG_UP_MAX_TIME * 60 * 60 * 1000, // 最多可储存24小时收益 + SPD_UP_REC_TIME: dicParam.TOWER_HANG_UP.TOWE_HANG_UP_SPD_UP_REC_TIME * 60 * 60 * 1000 // 加速直接获得6小时收益 } export const DAILY_CONST = { diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index a0c874a17..30a4849af 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -88,7 +88,7 @@ export const STATUS = { TOWER_GOLD_NOT_ENOUGH: { code: 20516, simStr: '元宝不足' }, TOWER_TASK_MISSING: { code: 20517, simStr: '未找到该任务' }, TOWER_HANG_UP_NOT_START: { code: 20518, simStr: '挂机尚未开启' }, - TOWER_REF_CNT_NOT_ENOUGH: { code: 20519, simStr: '派遣次数不足' }, + TOWER_REF_CNT_NOT_ENOUGH: { code: 20519, simStr: '派遣刷新次数不足' }, // 寻宝(共斗) 20600 - 20699 COM_BATTLE_DUP_ENTER: { code: 20601, simStr: '不能重复加入' }, COM_BATTLE_BLUEPRT_NOT_FOUND: { code: 20602, simStr: '藏宝图不足' }, diff --git a/shared/db/HangUpRecord.ts b/shared/db/HangUpRecord.ts index d62686424..1749b13f0 100644 --- a/shared/db/HangUpRecord.ts +++ b/shared/db/HangUpRecord.ts @@ -1,6 +1,7 @@ import { HANG_UP_CONSTS } from './../consts'; import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; +import * as dicParam from '../pubUtils/dicParam'; class Goods { @prop({ required: true }) @@ -41,8 +42,8 @@ export default class HangUpRecord extends BaseModel { public static async initRecord(roleId: string, roleName: string, lean = true) { const curTime = new Date(); const recDoc = new HangUpRecordModel(); - const update = Object.assign(recDoc.toJSON(), {roleId, roleName, startTime: curTime, startLv: HANG_UP_CONSTS.ENABLE_LV}); - const rec: HangUpRecordType = await HangUpRecordModel.findOneAndUpdate({roleId, startLv: HANG_UP_CONSTS.ENABLE_LV}, update, {upsert: true, new: true}).lean(lean); + const update = Object.assign(recDoc.toJSON(), {roleId, roleName, startTime: curTime, startLv: dicParam.TOWER_HANG_UP.TOWER_HANG_UP_ENABLE_LV + 1}); + const rec: HangUpRecordType = await HangUpRecordModel.findOneAndUpdate({roleId, startLv: dicParam.TOWER_HANG_UP.TOWER_HANG_UP_ENABLE_LV + 1}, update, {upsert: true, new: true}).lean(lean); return rec; } diff --git a/shared/db/Role.ts b/shared/db/Role.ts index 6a1f8f7ff..412c46b31 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -1,11 +1,11 @@ -import { HANG_UP_CONSTS, ROLE_TERAPH, ROLE_SELECT, ABI_TYPE } from './../consts'; +import { ROLE_TERAPH, ROLE_SELECT, ABI_TYPE } from './../consts'; import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose'; import User from './User'; import { shouldRefresh, reduceCe } from '../pubUtils/util'; import { nowSeconds, getTimeFunD } from '../pubUtils/timeUtil'; import { Figure } from '../domain/dbGeneral'; -import { BAG, EXTERIOR } from '../pubUtils/dicParam'; +import * as dicParam from '../pubUtils/dicParam'; import Hero from './Hero'; // role表属性格式 @@ -135,17 +135,17 @@ export default class Role extends BaseModel { public get head() { // 虚拟字段head 当前头像 let curHead = this.heads?.find(cur => cur.enable && (!cur.time || cur.time > nowSeconds())); - return curHead ? curHead.id : EXTERIOR.EXTERIOR_FACE; + return curHead ? curHead.id : dicParam.EXTERIOR.EXTERIOR_FACE; } public get frame() { // 虚拟字段frame 当前相框 let curFrame = this.frames?.find(cur => cur.enable && (!cur.time || cur.time > nowSeconds())); - return curFrame ? curFrame.id : EXTERIOR.EXTERIOR_FACECASE; + return curFrame ? curFrame.id : dicParam.EXTERIOR.EXTERIOR_FACECASE; } public get spine() { // 虚拟字段spine 当前形象 let curSpine = this.spines?.find(cur => cur.enable && (!cur.time || cur.time > nowSeconds())); - return curSpine ? curSpine.id : EXTERIOR.EXTERIOR_APPEARANCE; + return curSpine ? curSpine.id : dicParam.EXTERIOR.EXTERIOR_APPEARANCE; } @prop({ required: true, default: 0 }) @@ -210,7 +210,7 @@ export default class Role extends BaseModel { @prop({ required: true, default: new Date() }) towerUpTime: Date; // 天梯爬到这一层的时间 - @prop({ required: true, default: HANG_UP_CONSTS.MAX_SPD_UP_CNT }) + @prop({ required: true, default: 0 }) hangUpSpdUpCnt: number; // 挂机加速次数 @prop({ required: true, default: new Date() }) lastSpdUpTime: Date; // 最后一次挂机加速时间 @@ -355,20 +355,6 @@ export default class Role extends BaseModel { return role; } - public static async hangUpSpdUp(roleId: string, cnt: number, curTime: Date, lean = true) { - if (cnt < 0) return null; - - const result = await RoleModel.findOne({ roleId }).lean(lean); - const lastSpdUpTime = result?.lastSpdUpTime; - let role: RoleType; - if (!lastSpdUpTime || (shouldRefresh(lastSpdUpTime, curTime) && cnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT)) { - role = await RoleModel.findOneAndUpdate({ roleId }, { hangUpSpdUpCnt: HANG_UP_CONSTS.MAX_SPD_UP_CNT - cnt, lastSpdUpTime: curTime }, { new: true }).lean(lean); - } else { - role = await RoleModel.findOneAndUpdate({ roleId, hangUpSpdUpCnt: { $gte: cnt } }, { $inc: { hangUpSpdUpCnt: -cnt }, lastSpdUpTime: curTime }, { new: true }).lean(lean); - } - return role; - } - public static async increaseExpeditionPoint(roleId: string, point: number, lean = true) { let role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { expeditionPoint: point } }, { new: true }).lean(lean); return role; @@ -415,11 +401,11 @@ export default class Role extends BaseModel { } } let result: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { gold: addGold, paidGold, giftGold, coin } }, { new: true }).lean(); - if(result.gold > BAG.BAG_GOODS_UPLIMITED) { - result = await RoleModel.findOneAndUpdate({ roleId, gold: { $gte: BAG.BAG_GOODS_UPLIMITED } }, { $set: { gold: BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean(); + if(result.gold > dicParam.BAG.BAG_GOODS_UPLIMITED) { + result = await RoleModel.findOneAndUpdate({ roleId, gold: { $gte: dicParam.BAG.BAG_GOODS_UPLIMITED } }, { $set: { gold: dicParam.BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean(); } - if(result.coin > BAG.BAG_GOODS_UPLIMITED) { - result = await RoleModel.findOneAndUpdate({ roleId, coin: { $gte: BAG.BAG_GOODS_UPLIMITED } }, { $set: { coin: BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean(); + if(result.coin > dicParam.BAG.BAG_GOODS_UPLIMITED) { + result = await RoleModel.findOneAndUpdate({ roleId, coin: { $gte: dicParam.BAG.BAG_GOODS_UPLIMITED } }, { $set: { coin: dicParam.BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean(); } return result; } @@ -435,11 +421,11 @@ export default class Role extends BaseModel { } } let result: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { gold: -1 * addGold, paidGold: -1 * paidGold, giftGold: -1 * giftGold, totalCost: addGold, coin: -1 * coin } }, { new: true }).lean(); - if(result.gold > BAG.BAG_GOODS_UPLIMITED) { - result = await RoleModel.findOneAndUpdate({ roleId, gold: { $gte: BAG.BAG_GOODS_UPLIMITED } }, { $set: { gold: BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean(); + if(result.gold > dicParam.BAG.BAG_GOODS_UPLIMITED) { + result = await RoleModel.findOneAndUpdate({ roleId, gold: { $gte: dicParam.BAG.BAG_GOODS_UPLIMITED } }, { $set: { gold: dicParam.BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean(); } - if(result.coin > BAG.BAG_GOODS_UPLIMITED) { - result = await RoleModel.findOneAndUpdate({ roleId, coin: { $gte: BAG.BAG_GOODS_UPLIMITED } }, { $set: { coin: BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean(); + if(result.coin > dicParam.BAG.BAG_GOODS_UPLIMITED) { + result = await RoleModel.findOneAndUpdate({ roleId, coin: { $gte: dicParam.BAG.BAG_GOODS_UPLIMITED } }, { $set: { coin: dicParam.BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean(); } return result; } @@ -458,6 +444,22 @@ export default class Role extends BaseModel { return result; } + + public static async hangUpSpdUp(roleId: string, cnt: number, curTime: Date) { + if (cnt < 0) return null; + + const result = await RoleModel.findOne({ roleId }).lean(); + const lastSpdUpTime = result?.lastSpdUpTime; + let role: RoleType; + if(shouldRefresh(lastSpdUpTime, curTime)) { + role = await RoleModel.findOneAndUpdate({ roleId }, { hangUpSpdUpCnt: 0, lastSpdUpTime: curTime }, { new: true }).lean(); + } else { + role = await RoleModel.findOneAndUpdate({ roleId, hangUpSpdUpCnt: { $lte: dicParam.TOWER_BOOST.TOWER_BOOSTTIME - cnt } }, { $inc: { hangUpSpdUpCnt: cnt }, lastSpdUpTime: curTime }, { new: true }).lean(); + } + return role; + } + + // 重置派遣次数 public static async resetTowerCnt(roleId: string, curTime: Date, lean = true) { const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { towerTaskCnt: 0, towerTaskRefTime: curTime, towerTaskReCnt: 0 }, { new: true }).lean(lean); @@ -713,13 +715,13 @@ function getInitialTeraph() { function getDefualtFigure(type: string) { let figures = new Array
(); if (type == 'head') { - let figure = new Figure(EXTERIOR.EXTERIOR_FACE, true, null, true); + let figure = new Figure(dicParam.EXTERIOR.EXTERIOR_FACE, true, null, true); figures.push(figure); } else if (type == 'frame') { - let figure = new Figure(EXTERIOR.EXTERIOR_FACECASE, true, null, true); + let figure = new Figure(dicParam.EXTERIOR.EXTERIOR_FACECASE, true, null, true); figures.push(figure); } else if (type == 'spine') { - let figure = new Figure(EXTERIOR.EXTERIOR_APPEARANCE, true, null, true); + let figure = new Figure(dicParam.EXTERIOR.EXTERIOR_APPEARANCE, true, null, true); figures.push(figure); } return figures; diff --git a/shared/pubUtils/dictionary/DicTowerTask.ts b/shared/pubUtils/dictionary/DicTowerTask.ts index c10e50a34..61d9ae6f8 100644 --- a/shared/pubUtils/dictionary/DicTowerTask.ts +++ b/shared/pubUtils/dictionary/DicTowerTask.ts @@ -25,7 +25,7 @@ export interface DicTowerTask { readonly actorNeeded: number; // 完成时间(秒) readonly completeTime: number; - // 适用层数 + // 适用层数,此处层数是指通过了的层数 readonly suitFloor: SuitFloor; // 权重 readonly weight: number;