镇念塔:系统参数表
This commit is contained in:
@@ -7,14 +7,14 @@ import { RoleModel } from './../../../db/Role';
|
|||||||
import { TowerRecordModel } from './../../../db/TowerRecord';
|
import { TowerRecordModel } from './../../../db/TowerRecord';
|
||||||
import { Application, BackendSession } from 'pinus';
|
import { Application, BackendSession } from 'pinus';
|
||||||
import { resResult, shouldRefresh, calculateNum, genCode } from '../../../pubUtils/util';
|
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 { addItems, handleCost } from '../../../services/rewardService';
|
||||||
import { checkBattleHeroes } from '../../../services/normalBattleService';
|
import { checkBattleHeroes } from '../../../services/normalBattleService';
|
||||||
import { getGoldObject } from '../../../pubUtils/itemUtils';
|
import { getGoldObject } from '../../../pubUtils/itemUtils';
|
||||||
import { Rank } from '../../../services/rankService';
|
import { Rank } from '../../../services/rankService';
|
||||||
import { gameData } from '../../../pubUtils/data';
|
import { gameData } from '../../../pubUtils/data';
|
||||||
import { ItemInter } from '../../../pubUtils/interface';
|
import { ItemInter } from '../../../pubUtils/interface';
|
||||||
import { TOWER_SEARCH } from '../../../pubUtils/dicParam';
|
import * as dicParam from '../../../pubUtils/dicParam';
|
||||||
|
|
||||||
export default function(app: Application) {
|
export default function(app: Application) {
|
||||||
return new TowerBattleHandler(app);
|
return new TowerBattleHandler(app);
|
||||||
@@ -98,7 +98,7 @@ export class TowerBattleHandler {
|
|||||||
if(result.status == -1) return result.resResult;
|
if(result.status == -1) return result.resResult;
|
||||||
let {data: {hangUpSpdUpCnt, gold}} = result;
|
let {data: {hangUpSpdUpCnt, gold}} = result;
|
||||||
|
|
||||||
const costGold = this.getHangUpCost(hangUpSpdUpCnt, msg.speedUpCnt);
|
const costGold = getManyHangSpdUpCostGold(hangUpSpdUpCnt, msg.speedUpCnt);
|
||||||
if(costGold > gold) {
|
if(costGold > gold) {
|
||||||
return resResult(STATUS.TOWER_GOLD_NOT_ENOUGH);
|
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 spdUpRec = await HangUpSpdUpRecModel.updateRec(roleId, roleName, msg.speedUpCnt, endLv, needReceiveGoods);
|
||||||
const goods = await addItems(roleId, roleName, sid, timeReward);
|
const goods = await addItems(roleId, roleName, sid, timeReward);
|
||||||
hangUpSpdUpCnt -= msg.speedUpCnt;
|
let num = getManyHangSpdUpCostGold(spdUpResult.hangUpSpdUpCnt, 1);
|
||||||
let num = HANG_UP_CONSTS.MAX_SPD_UP_CNT - hangUpSpdUpCnt + 1;
|
let nextCostGold = getHangSpdUpCostGold(num);
|
||||||
let nextCostGold = getTowerTaskSpdUpCostGold(num);
|
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { goods, hangUpSpdUpCnt, nextCostGold, hangUpPassTime: Math.floor(deltaTime/1000), rewardLv: endLv, costGold });
|
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) {
|
async getTasks(msg: {}, session: BackendSession) {
|
||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let roleName = session.get('roleName');
|
let roleName = session.get('roleName');
|
||||||
@@ -142,11 +131,11 @@ export class TowerBattleHandler {
|
|||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let roleName = session.get('roleName');
|
let roleName = session.get('roleName');
|
||||||
let curTime = new Date();
|
let curTime = new Date();
|
||||||
let { towerLv, towerTaskCnt = 0, towerTaskReCnt=0 } = await RoleModel.findByRoleId(roleId);
|
let { towerLv, towerTaskRefTime, towerTaskReCnt=0 } = await RoleModel.findByRoleId(roleId);
|
||||||
if(TOWER_SEARCH.TOWER_SEARCH_REFRESHRULE <= towerTaskCnt) { // 付费刷新次数
|
if(towerTaskReCnt >= dicParam.TOWER_SEARCH.TOWER_SEARCH_REFRESHRULE) { // 付费刷新次数
|
||||||
return resResult(STATUS.TOWER_REF_CNT_NOT_ENOUGH);
|
return resResult(STATUS.TOWER_REF_CNT_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
let costGold = getTowerTaskCostGold(towerTaskCnt + 1);
|
let costGold = getTowerTaskCostGold(towerTaskReCnt, towerTaskRefTime);
|
||||||
let {gold} = await RoleModel.findByRoleId(roleId);
|
let {gold} = await RoleModel.findByRoleId(roleId);
|
||||||
if(costGold > gold) {
|
if(costGold > gold) {
|
||||||
return resResult(STATUS.TOWER_GOLD_NOT_ENOUGH);
|
return resResult(STATUS.TOWER_GOLD_NOT_ENOUGH);
|
||||||
@@ -159,10 +148,10 @@ export class TowerBattleHandler {
|
|||||||
if(task) batchCode = task.batchCode;
|
if(task) batchCode = task.batchCode;
|
||||||
}
|
}
|
||||||
curTasks = await refreshTasks(towerLv, batchCode, roleId, roleName, curTasks);
|
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 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});
|
return resResult(STATUS.SUCCESS, { curTasks: treatTask(curTasks, curTime), costGold, nextCostGold, refRemainTime});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,7 +202,7 @@ export class TowerBattleHandler {
|
|||||||
let refRemainTime = getRemainTime(curTime);
|
let refRemainTime = getRemainTime(curTime);
|
||||||
|
|
||||||
curTasks = await TowerTaskRecModel.getCurTasks(roleId); // 当前显示中的任务
|
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 });
|
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 curTasks = await TowerTaskRecModel.getCurTasks(roleId); // 当前显示中的任务
|
||||||
let role = await RoleModel.findByRoleId(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 });
|
return resResult(STATUS.SUCCESS, { curTasks: treatTask(curTasks, curTime), goods, refRemainTime, nextCostGold: costGold });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import { getTimeFunM } from '../pubUtils/timeUtil';
|
|||||||
import { ComRoleStatusHero } from '../db/ComBattleTeam';
|
import { ComRoleStatusHero } from '../db/ComBattleTeam';
|
||||||
import { sendMailByContent } from './mailService';
|
import { sendMailByContent } from './mailService';
|
||||||
import { DicTowerTask } from '../pubUtils/dictionary/DicTowerTask';
|
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 { code: 201, data: '天梯记录异常' };
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
canHungUp: towerLv >= HANG_UP_CONSTS.ENABLE_LV,
|
canHungUp: towerLv - 1 >= dicParam.TOWER_HANG_UP.TOWER_HANG_UP_ENABLE_LV,
|
||||||
hungUpEnableLv: HANG_UP_CONSTS.ENABLE_LV,
|
hungUpEnableLv: dicParam.TOWER_HANG_UP.TOWER_HANG_UP_ENABLE_LV,
|
||||||
canSendTask: true,
|
canSendTask: towerLv - 1 >= dicParam.TOWER_SEARCH.TOWER_SEARCH_STARTLIMITED,
|
||||||
|
sendTaskEnableLv: dicParam.TOWER_SEARCH.TOWER_SEARCH_STARTLIMITED,
|
||||||
curLv: towerLv,
|
curLv: towerLv,
|
||||||
usedHeroes: towerRec.heroes,
|
usedHeroes: towerRec.heroes,
|
||||||
progress: towerRec.warStatus
|
progress: towerRec.warStatus
|
||||||
@@ -60,13 +61,12 @@ export async function getHungupRewards(roleId: string) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
let {timeReward, startTime, deltaTime} = result.data;
|
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();
|
let curTime = new Date();
|
||||||
if (!lastSpdUpTime || (shouldRefresh(lastSpdUpTime, curTime) && hangUpSpdUpCnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT)) {
|
if (shouldRefresh(lastSpdUpTime, curTime)) {
|
||||||
hangUpSpdUpCnt = HANG_UP_CONSTS.MAX_SPD_UP_CNT;
|
hangUpSpdUpCnt = 0;
|
||||||
}
|
}
|
||||||
let num = HANG_UP_CONSTS.MAX_SPD_UP_CNT - hangUpSpdUpCnt + 1;
|
let nextCostGold = getManyHangSpdUpCostGold(hangUpSpdUpCnt, 1);
|
||||||
let nextCostGold = getTowerTaskSpdUpCostGold(num);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
status: 0,
|
status: 0,
|
||||||
@@ -83,6 +83,12 @@ export async function getHungupRewards(roleId: string) {
|
|||||||
*/
|
*/
|
||||||
export async function getTasks(role: RoleType) {
|
export async function getTasks(role: RoleType) {
|
||||||
let { roleId, roleName, towerLv, towerTaskRefTime, towerTaskReCnt = 0 } = role;
|
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 curTime = new Date();
|
||||||
let curTasks = await TowerTaskRecModel.getCurTasks(roleId); // 当前显示中的任务
|
let curTasks = await TowerTaskRecModel.getCurTasks(roleId); // 当前显示中的任务
|
||||||
|
|
||||||
@@ -101,12 +107,12 @@ export async function getTasks(role: RoleType) {
|
|||||||
curTasks = await refreshTasks(towerLv, batchCode, roleId, roleName, []); // 新建任务
|
curTasks = await refreshTasks(towerLv, batchCode, roleId, roleName, []); // 新建任务
|
||||||
|
|
||||||
// 重置派遣次数
|
// 重置派遣次数
|
||||||
const role = await RoleModel.resetTowerCnt(roleId, curTime);
|
role = await RoleModel.resetTowerCnt(roleId, curTime);
|
||||||
towerTaskReCnt = role.towerTaskReCnt;
|
towerTaskReCnt = role.towerTaskReCnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
let refRemainTime = getRemainTime(curTime);
|
let refRemainTime = getRemainTime(curTime);
|
||||||
let nextCostGold = getTowerTaskCostGold(towerTaskReCnt + 1);
|
let nextCostGold = getTowerTaskCostGold(role.towerTaskReCnt, role.towerTaskRefTime);
|
||||||
|
|
||||||
return {curTasks: treatTask(curTasks, curTime), refRemainTime, nextCostGold}
|
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);
|
const { reward } = gameData.tower.get(role.towerLv - 1);
|
||||||
if (reward) towerReward = reward;
|
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);
|
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, {});
|
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) {
|
export async function checkHangUpSpdUpCnt(roleId: string, cnt: number, curTime: Date) {
|
||||||
const role = await RoleModel.findByRoleId(roleId);
|
const role = await RoleModel.findByRoleId(roleId);
|
||||||
let { hangUpSpdUpCnt, gold, lastSpdUpTime } = role;
|
let { hangUpSpdUpCnt, gold, lastSpdUpTime } = role;
|
||||||
if (!lastSpdUpTime || (shouldRefresh(lastSpdUpTime, curTime) && hangUpSpdUpCnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT)) {
|
if (shouldRefresh(lastSpdUpTime, curTime)) {
|
||||||
hangUpSpdUpCnt = HANG_UP_CONSTS.MAX_SPD_UP_CNT;
|
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: -1, resResult: resResult(STATUS.TOWER_NOT_ENOUGH_HANG_UP_TIME) }
|
||||||
}
|
}
|
||||||
return { status: 0, data: { hangUpSpdUpCnt, gold, lastSpdUpTime } }
|
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()) {
|
export async function calcuHangUpReward(roleId: string, speedUp = false, speedUpCnt = 1, curTime = new Date()) {
|
||||||
let { towerLv = 1, hangUpSpdUpCnt = 0, lastSpdUpTime } = await RoleModel.findByRoleId(roleId);
|
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) }
|
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 (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 multi = Math.floor(HANG_UP_CONSTS.SPD_UP_REC_TIME / HANG_UP_CONSTS.UNIT_TIME);
|
||||||
let spdUpRec = await HangUpSpdUpRecModel.getSpdUpRec(roleId, towerLv - 1);
|
let spdUpRec = await HangUpSpdUpRecModel.getSpdUpRec(roleId, towerLv - 1);
|
||||||
let goods = [];
|
let goods = [];
|
||||||
@@ -380,7 +385,7 @@ export async function refreshTasks(towerLv: number, batchCode: string, roleId: s
|
|||||||
|
|
||||||
let ridTaskIds: number[] = [];
|
let ridTaskIds: number[] = [];
|
||||||
let positions = new Map<number, TowerTaskRecType> (); // 需要创建或更新
|
let positions = new Map<number, TowerTaskRecType> (); // 需要创建或更新
|
||||||
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);
|
positions.set(i, null);
|
||||||
}
|
}
|
||||||
for(let task of oldTasks) {
|
for(let task of oldTasks) {
|
||||||
@@ -575,14 +580,47 @@ export function transBossHpArr(source: Array<{ dataId: number, hp: number, actor
|
|||||||
return cloneDeep(desArr);
|
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;
|
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;
|
* @param originCnt 玩家表里原来的次数
|
||||||
return cost;
|
* @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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import * as dicParam from '../../pubUtils/dicParam';
|
||||||
|
|
||||||
export const ACTION_POIN = {
|
export const ACTION_POIN = {
|
||||||
MAX: 100000,
|
MAX: 100000,
|
||||||
PER: 6 * 60 * 1000
|
PER: 6 * 60 * 1000
|
||||||
@@ -83,11 +85,9 @@ export const EXPEDITION_WAR_RECORD_STATUS = {
|
|||||||
export const EVENT_START_BATTLE = 101;
|
export const EVENT_START_BATTLE = 101;
|
||||||
|
|
||||||
export const HANG_UP_CONSTS = {
|
export const HANG_UP_CONSTS = {
|
||||||
ENABLE_LV: 2, // 第几层开始可以挂机
|
UNIT_TIME: dicParam.TOWER_HANG_UP.TOWER_HANG_UP_UNIT_TIME * 60 * 1000, // 每几分钟能有一次收益
|
||||||
UNIT_TIME: 10 * 60 * 1000, // 每几分钟能有一次收益
|
MAX_TIME: dicParam.TOWER_HANG_UP.TOWER_HANG_UP_MAX_TIME * 60 * 60 * 1000, // 最多可储存24小时收益
|
||||||
MAX_TIME: 24 * 60 * 60 * 1000, // 最多可储存24小时收益
|
SPD_UP_REC_TIME: dicParam.TOWER_HANG_UP.TOWE_HANG_UP_SPD_UP_REC_TIME * 60 * 60 * 1000 // 加速直接获得6小时收益
|
||||||
MAX_SPD_UP_CNT: 2, // 每天可以收取多少次
|
|
||||||
SPD_UP_REC_TIME: 6 * 60 * 60 * 1000 // 加速直接获得6小时收益
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const DAILY_CONST = {
|
export const DAILY_CONST = {
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ export const STATUS = {
|
|||||||
TOWER_GOLD_NOT_ENOUGH: { code: 20516, simStr: '元宝不足' },
|
TOWER_GOLD_NOT_ENOUGH: { code: 20516, simStr: '元宝不足' },
|
||||||
TOWER_TASK_MISSING: { code: 20517, simStr: '未找到该任务' },
|
TOWER_TASK_MISSING: { code: 20517, simStr: '未找到该任务' },
|
||||||
TOWER_HANG_UP_NOT_START: { code: 20518, 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
|
// 寻宝(共斗) 20600 - 20699
|
||||||
COM_BATTLE_DUP_ENTER: { code: 20601, simStr: '不能重复加入' },
|
COM_BATTLE_DUP_ENTER: { code: 20601, simStr: '不能重复加入' },
|
||||||
COM_BATTLE_BLUEPRT_NOT_FOUND: { code: 20602, simStr: '藏宝图不足' },
|
COM_BATTLE_BLUEPRT_NOT_FOUND: { code: 20602, simStr: '藏宝图不足' },
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { HANG_UP_CONSTS } from './../consts';
|
import { HANG_UP_CONSTS } from './../consts';
|
||||||
import BaseModel from './BaseModel';
|
import BaseModel from './BaseModel';
|
||||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||||
|
import * as dicParam from '../pubUtils/dicParam';
|
||||||
|
|
||||||
class Goods {
|
class Goods {
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
@@ -41,8 +42,8 @@ export default class HangUpRecord extends BaseModel {
|
|||||||
public static async initRecord(roleId: string, roleName: string, lean = true) {
|
public static async initRecord(roleId: string, roleName: string, lean = true) {
|
||||||
const curTime = new Date();
|
const curTime = new Date();
|
||||||
const recDoc = new HangUpRecordModel();
|
const recDoc = new HangUpRecordModel();
|
||||||
const update = Object.assign(recDoc.toJSON(), {roleId, roleName, startTime: curTime, startLv: HANG_UP_CONSTS.ENABLE_LV});
|
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: HANG_UP_CONSTS.ENABLE_LV}, update, {upsert: true, new: true}).lean(lean);
|
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;
|
return rec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+33
-31
@@ -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 BaseModel from './BaseModel';
|
||||||
import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose';
|
||||||
import User from './User';
|
import User from './User';
|
||||||
import { shouldRefresh, reduceCe } from '../pubUtils/util';
|
import { shouldRefresh, reduceCe } from '../pubUtils/util';
|
||||||
import { nowSeconds, getTimeFunD } from '../pubUtils/timeUtil';
|
import { nowSeconds, getTimeFunD } from '../pubUtils/timeUtil';
|
||||||
import { Figure } from '../domain/dbGeneral';
|
import { Figure } from '../domain/dbGeneral';
|
||||||
import { BAG, EXTERIOR } from '../pubUtils/dicParam';
|
import * as dicParam from '../pubUtils/dicParam';
|
||||||
import Hero from './Hero';
|
import Hero from './Hero';
|
||||||
|
|
||||||
// role表属性格式
|
// role表属性格式
|
||||||
@@ -135,17 +135,17 @@ export default class Role extends BaseModel {
|
|||||||
|
|
||||||
public get head() { // 虚拟字段head 当前头像
|
public get head() { // 虚拟字段head 当前头像
|
||||||
let curHead = this.heads?.find(cur => cur.enable && (!cur.time || cur.time > nowSeconds()));
|
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 当前相框
|
public get frame() { // 虚拟字段frame 当前相框
|
||||||
let curFrame = this.frames?.find(cur => cur.enable && (!cur.time || cur.time > nowSeconds()));
|
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 当前形象
|
public get spine() { // 虚拟字段spine 当前形象
|
||||||
let curSpine = this.spines?.find(cur => cur.enable && (!cur.time || cur.time > nowSeconds()));
|
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 })
|
@prop({ required: true, default: 0 })
|
||||||
@@ -210,7 +210,7 @@ export default class Role extends BaseModel {
|
|||||||
@prop({ required: true, default: new Date() })
|
@prop({ required: true, default: new Date() })
|
||||||
towerUpTime: Date; // 天梯爬到这一层的时间
|
towerUpTime: Date; // 天梯爬到这一层的时间
|
||||||
|
|
||||||
@prop({ required: true, default: HANG_UP_CONSTS.MAX_SPD_UP_CNT })
|
@prop({ required: true, default: 0 })
|
||||||
hangUpSpdUpCnt: number; // 挂机加速次数
|
hangUpSpdUpCnt: number; // 挂机加速次数
|
||||||
@prop({ required: true, default: new Date() })
|
@prop({ required: true, default: new Date() })
|
||||||
lastSpdUpTime: Date; // 最后一次挂机加速时间
|
lastSpdUpTime: Date; // 最后一次挂机加速时间
|
||||||
@@ -355,20 +355,6 @@ export default class Role extends BaseModel {
|
|||||||
return role;
|
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) {
|
public static async increaseExpeditionPoint(roleId: string, point: number, lean = true) {
|
||||||
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { expeditionPoint: point } }, { new: true }).lean(lean);
|
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { expeditionPoint: point } }, { new: true }).lean(lean);
|
||||||
return role;
|
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();
|
let result: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { gold: addGold, paidGold, giftGold, coin } }, { new: true }).lean();
|
||||||
if(result.gold > BAG.BAG_GOODS_UPLIMITED) {
|
if(result.gold > dicParam.BAG.BAG_GOODS_UPLIMITED) {
|
||||||
result = await RoleModel.findOneAndUpdate({ roleId, gold: { $gte: BAG.BAG_GOODS_UPLIMITED } }, { $set: { gold: BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean();
|
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) {
|
if(result.coin > dicParam.BAG.BAG_GOODS_UPLIMITED) {
|
||||||
result = await RoleModel.findOneAndUpdate({ roleId, coin: { $gte: BAG.BAG_GOODS_UPLIMITED } }, { $set: { coin: BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean();
|
result = await RoleModel.findOneAndUpdate({ roleId, coin: { $gte: dicParam.BAG.BAG_GOODS_UPLIMITED } }, { $set: { coin: dicParam.BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean();
|
||||||
}
|
}
|
||||||
return result;
|
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();
|
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) {
|
if(result.gold > dicParam.BAG.BAG_GOODS_UPLIMITED) {
|
||||||
result = await RoleModel.findOneAndUpdate({ roleId, gold: { $gte: BAG.BAG_GOODS_UPLIMITED } }, { $set: { gold: BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean();
|
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) {
|
if(result.coin > dicParam.BAG.BAG_GOODS_UPLIMITED) {
|
||||||
result = await RoleModel.findOneAndUpdate({ roleId, coin: { $gte: BAG.BAG_GOODS_UPLIMITED } }, { $set: { coin: BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean();
|
result = await RoleModel.findOneAndUpdate({ roleId, coin: { $gte: dicParam.BAG.BAG_GOODS_UPLIMITED } }, { $set: { coin: dicParam.BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean();
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -458,6 +444,22 @@ export default class Role extends BaseModel {
|
|||||||
return result;
|
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) {
|
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);
|
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) {
|
function getDefualtFigure(type: string) {
|
||||||
let figures = new Array<Figure>();
|
let figures = new Array<Figure>();
|
||||||
if (type == 'head') {
|
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);
|
figures.push(figure);
|
||||||
} else if (type == 'frame') {
|
} 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);
|
figures.push(figure);
|
||||||
} else if (type == 'spine') {
|
} 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);
|
figures.push(figure);
|
||||||
}
|
}
|
||||||
return figures;
|
return figures;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ export interface DicTowerTask {
|
|||||||
readonly actorNeeded: number;
|
readonly actorNeeded: number;
|
||||||
// 完成时间(秒)
|
// 完成时间(秒)
|
||||||
readonly completeTime: number;
|
readonly completeTime: number;
|
||||||
// 适用层数
|
// 适用层数,此处层数是指通过了的层数
|
||||||
readonly suitFloor: SuitFloor;
|
readonly suitFloor: SuitFloor;
|
||||||
// 权重
|
// 权重
|
||||||
readonly weight: number;
|
readonly weight: number;
|
||||||
|
|||||||
Reference in New Issue
Block a user