From 7fa9fe99ee194abe19e40ad283c4563449eacfe1 Mon Sep 17 00:00:00 2001 From: luying Date: Mon, 9 Nov 2020 17:41:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BF=9C=E5=BE=81=E6=AF=8F?= =?UTF-8?q?=E6=97=A5=E9=87=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../battle/handler/expeditionBattleHandler.ts | 80 ++++++++++++++----- .../battle/handler/normalBattleHandler.ts | 4 +- .../battle/handler/towerBattleHandler.ts | 13 ++- game-server/app/services/battleService.ts | 26 ++++-- game-server/app/services/expeditionService.ts | 31 +++++-- .../app/services/normalBattleService.ts | 4 +- shared/consts/consts.ts | 7 +- shared/consts/statusCode.ts | 1 + shared/db/ExpeditionRecord.ts | 40 ++++++---- shared/db/Hero.ts | 4 + shared/db/Role.ts | 24 +++++- shared/pubUtils/gamedata.ts | 10 --- shared/resource/jsons/dic_zyz_search.json | 30 +++---- 13 files changed, 187 insertions(+), 87 deletions(-) diff --git a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts index 180f5cdbd..c01b8c593 100644 --- a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts +++ b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts @@ -5,9 +5,9 @@ import { ExpeditionRecordModel } from '../../../db/ExpeditionRecord'; import { ExpeditionWarRecordModel } from '../../../db/ExpeditionWarRecord'; import { ExpeditionPointModel } from '../../../db/ExpeditionPoint'; import { RoleModel } from '../../../db/Role'; -import { calculateSumCE, genCode, setLocalHours } from '../../../pubUtils/util'; -import { matchPlayers, matchRobots, getPointRewardStatus, getCEScaleAndRange } from '../../../services/expeditionService'; -import { EXPEDITION_INCREASE_POINT } from '../../../consts/consts'; +import { calculateSumCE, genCode } from '../../../pubUtils/util'; +import { matchPlayers, matchRobots, getPointRewardStatus, getCEScaleAndRange, getResetRemainCnt } from '../../../services/expeditionService'; +import { EXPEDITION_CONST } from '../../../consts/consts'; import { WarReward } from '../../../services/warRewardService'; import { handleFixedReward } from '../../../services/rewardService'; import { getAp, setAp } from '../../../services/actionPointService'; @@ -31,14 +31,13 @@ export class ExpeditionBattleHandler { let roleId = session.get('roleId'); let roleName = session.get('roleName'); - // 每日刷新,刷新关卡进度,宝箱进度,武将状态 - let now = new Date(); - let today = setLocalHours(0, now); - let expeditionRecord = await ExpeditionRecordModel.getTodayRecord(roleId, today); - if(!expeditionRecord) { // 每天新建一条记录 - let code = genCode(8); - expeditionRecord = await ExpeditionRecordModel.createTodayRecord(code, { - roleId, roleName, time: today, heroes: [] + // 获取远征关卡状态 + let expeditionRecord = await ExpeditionRecordModel.getCurRecord(roleId); + if(!expeditionRecord) { // 首次新建一条记录 + // 我方战力(暂定) + let myCe = await calculateSumCE(roleId, 1, { num: 5 }); + expeditionRecord = await ExpeditionRecordModel.createRecord({ + roleId, roleName, heroes: [], myCe }); } @@ -50,15 +49,54 @@ export class ExpeditionBattleHandler { curLv = expeditionWarRecord[expeditionWarRecord.length - 1].expeditionId; } + // 重置次数 + let role = await RoleModel.findByRoleId(roleId); + let curTime = new Date(); + let {resetCnt} = await getResetRemainCnt(curTime, roleId, role); + // 点数,和宝箱领取状态 - let pointRewards = await getPointRewardStatus(roleId); + let pointRewards = await getPointRewardStatus(roleId, role); return resResult(STATUS.SUCCESS, { expeditionCode, curLv, expeditionWarRecord, pointRewards, - heroes + heroes, + resetCnt + }); + } + + /** + * 重置远征本 + * 每天5点可以重置远征本 */ + async resetStatus(msg: { }, session: BackendSession) { + + let roleId = session.get('roleId'); + let roleName = session.get('roleName'); + + let curTime = new Date(); + let {needRefresh, resetCnt} = await getResetRemainCnt(curTime, roleId); + if(resetCnt <= 0) { + return resResult(STATUS.EXPEDITION_RESET_NUM_NOT_ENOUGH) + } + + await ExpeditionRecordModel.hideRecord(roleId); // 刷掉旧关卡 + + // 我方战力(暂定) + let myCe = await calculateSumCE(roleId, 1, { num: 5 }); + // 每一关的挑战状态 + let { expeditionCode, heroes } = await ExpeditionRecordModel.createRecord({ + roleId, roleName, heroes: [], myCe + }); + await RoleModel.increaseExpeditionResetCnt(roleId, needRefresh, curTime); + + return resResult(STATUS.SUCCESS, { + expeditionCode, + curLv: 0, + expeditionWarRecord: [], + heroes, + resetCnt: resetCnt - 1 }); } @@ -72,12 +110,10 @@ export class ExpeditionBattleHandler { // const roleName = session.get('roleName'); const { expeditionCode, expeditionId } = msg; + let { myCe } = await ExpeditionRecordModel.getExpeditionRecordByCode(expeditionCode); + let expeditionWarRecord = await ExpeditionWarRecordModel.getRecordByCodeAndId(expeditionCode, expeditionId); if(!expeditionWarRecord) { // 如果没有信息 - - // 计算我方战斗力(最高五人) - let myCe = await calculateSumCE(roleId, 1, { num: 5 }); - console.log(myCe); let enemyObj = { enemyFrom: 0, enemyId: '', @@ -139,7 +175,7 @@ export class ExpeditionBattleHandler { if(!preBattle) return resResult(STATUS.BATTLE_NEED_PREVIOUS_GK); } - let checkHeroes = checkBattleHeroes(roleId, heroes); + let checkHeroes = await checkBattleHeroes(roleId, heroes); if(!checkHeroes) return resResult(STATUS.BATTLE_HERO_NOT_FOUND); let expeditionWarRecord = await ExpeditionWarRecordModel.getRecordByCodeAndId(expeditionCode, expeditionId); @@ -177,7 +213,7 @@ export class ExpeditionBattleHandler { * 战斗结算 * 结算战斗奖励,更新远征状态 */ - async battleEnd(msg: { expeditionCode: string, expeditionId: number, battleCode: string, battleId: number, isSuccess: boolean, heroes: Array<{actorId: number, hp: number, ap: number}>, enemies: Array<{dataId: number, hp: number, ap: number}>, star: number }, session: BackendSession) { + async battleEnd(msg: { expeditionCode: string, expeditionId: number, battleCode: string, battleId: number, isSuccess: boolean, heroes: Array<{dataId: number, hp: number, ap: number}>, enemies: Array<{dataId: number, hp: number, ap: number}>, star: number }, session: BackendSession) { const { expeditionCode, battleCode, battleId, expeditionId, isSuccess, heroes, star, enemies } = msg; let roleId = session.get('roleId'); @@ -198,8 +234,8 @@ export class ExpeditionBattleHandler { let flag = 1; // 对比hero信息 let { record: { heroes: dbHeroes } } = BattleRecord; - for(let {actorId} of heroes) { - if(dbHeroes.indexOf(actorId) == -1) flag = 0; + for(let {dataId} of heroes) { + if(dbHeroes.indexOf(dataId) == -1) flag = 0; } if(!flag) { return resResult(STATUS.BATTLE_INFO_VALIDATE_ERR); @@ -226,7 +262,7 @@ export class ExpeditionBattleHandler { $set: { status: isSuccess?1: 2, star } }, true); // 更新点数 - let role = await RoleModel.increaseExpeditionPoint(roleId, isSuccess?EXPEDITION_INCREASE_POINT:0); + let role = await RoleModel.increaseExpeditionPoint(roleId, isSuccess?EXPEDITION_CONST.INCREASE_POINT:0); let { expeditionPoint = 0 } = role; // 关卡奖励 diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index a63fa0b1a..72814b2ee 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -25,7 +25,7 @@ export class NormalBattleHandler { } // 获取关卡列表 - async checkBattle(msg: {battleId: number, heroes: Array }, session: BackendSession) { + async checkBattle(msg: {battleId: number, heroes: Array }, session: BackendSession) { const { battleId, heroes } = msg; let roleId = session.get('roleId'); let roleName = session.get('roleName'); @@ -50,7 +50,7 @@ export class NormalBattleHandler { if(!preBattle) return resResult(STATUS.BATTLE_NEED_PREVIOUS_GK); } - let checkHeroes = checkBattleHeroes(roleId, heroes); + let checkHeroes = await checkBattleHeroes(roleId, heroes); if(!checkHeroes) return resResult(STATUS.BATTLE_HERO_NOT_FOUND); const battleCode = genCode(8); // 关卡唯一值 diff --git a/game-server/app/servers/battle/handler/towerBattleHandler.ts b/game-server/app/servers/battle/handler/towerBattleHandler.ts index 9c7c1d561..929cd4798 100644 --- a/game-server/app/servers/battle/handler/towerBattleHandler.ts +++ b/game-server/app/servers/battle/handler/towerBattleHandler.ts @@ -177,7 +177,8 @@ export class TowerBattleHandler { let curTasks = await createCurTasks(towerLv, roleId, roleName); // 刷出新的任务 let nextCostGold = calculateNum(GOLD_COST_RATIO.TPWER_TASK_REF, {num: towerTaskReCnt + 1}, 200); - return resResult(STATUS.SUCCESS, { curTasks: treatTask(curTasks, curTime), costGold, nextCostGold}); + let refRemainTime = getRemainTime(curTime); + return resResult(STATUS.SUCCESS, { curTasks: treatTask(curTasks, curTime), costGold, nextCostGold, refRemainTime}); } async sendTaskHero(msg: {batchCode: string, tasks: Array<{taskCode: string, heroes: Array}>}, session: BackendSession) { @@ -209,7 +210,7 @@ export class TowerBattleHandler { return resResult(STATUS.TOWER_TASK_CODE_NOT_FOUND); } if (usedHeroes.length > 0) { // 是否在其他任务重使用了武将 - let used = !!task.heroes.find(hid => usedHeroes.indexOf(hid) !== -1); + let used = !!task.heroes.find(seqId => usedHeroes.indexOf(seqId) !== -1); if (used) { return resResult(STATUS.TOWER_TASK_HERO_HAS_USED); } @@ -221,7 +222,9 @@ export class TowerBattleHandler { if (!recs || recs.length === 0) { return resResult(STATUS.TOWER_TASK_SEND_ERR); } - return resResult(STATUS.SUCCESS, { tasks: treatTask(recs, curTime) }); + let refRemainTime = getRemainTime(curTime); + + return resResult(STATUS.SUCCESS, { tasks: treatTask(recs, curTime), refRemainTime }); } async settleTask(msg: {batchCode: string, taskCode: string}, session: BackendSession) { @@ -256,7 +259,9 @@ export class TowerBattleHandler { } } const rec = await TowerTaskRecModel.finishTask(msg.batchCode, compTasks); - return resResult(STATUS.SUCCESS, { compTasks: treatTask(rec, curTime), goods }); + let refRemainTime = getRemainTime(curTime); + + return resResult(STATUS.SUCCESS, { compTasks: treatTask(rec, curTime), goods, refRemainTime }); } diff --git a/game-server/app/services/battleService.ts b/game-server/app/services/battleService.ts index bc1ebd2e4..a193d7d02 100644 --- a/game-server/app/services/battleService.ts +++ b/game-server/app/services/battleService.ts @@ -5,8 +5,8 @@ import { HANG_UP_CONSTS, TOWER_TASK_CONST } from './../consts/consts'; import { BattleRecordModel } from './../db/BattleRecord'; import { TowerRecordModel } from './../db/TowerRecord'; import { RoleModel } from './../db/Role'; -import { getHeroInfoById, getJobInfoById, getTowerDataByLv, getTaskById, getTaskIdByFloor } from "../pubUtils/gamedata" -import { decodeArrayStr, shouldRefresh, resResult, decodeStr, cal, getRandomWithWeight, getRefTime } from '../pubUtils/util'; +import { getHeroInfoById, getJobInfoById, getTowerDataByLv, getTaskById, getGamedata } from "../pubUtils/gamedata" +import { decodeArrayStr, shouldRefresh, resResult, decodeStr, cal, getRandomWithWeight, getRefTime, decodeStrSingle } from '../pubUtils/util'; import { handleFixedReward } from './rewardService'; import { STATUS } from '../consts/statusCode'; import { HangUpSpdUpRecModel } from '../db/HangUpSpdUpRec'; @@ -197,15 +197,16 @@ async function checkCond(roleId: string, heroes, type: number, param: number, cn switch (type) { case 1: - for(let hid of heroes) { - const rec = await HeroModel.findByHidAndRole(hid, roleId); + for(let seqId of heroes) { + const rec = await HeroModel.findBySeqIdAndRole(seqId, roleId); if (rec.star >= param) { heroCnt++; } } break; case 2: - for(let hid of heroes) { + for(let seqId of heroes) { + let {hid} = await HeroModel.findBySeqIdAndRole(seqId, roleId); const hInfo = getHeroInfoById(hid); if (hInfo.camp === param) { heroCnt++; @@ -213,7 +214,8 @@ async function checkCond(roleId: string, heroes, type: number, param: number, cn } break; case 3: - for(let hid of heroes) { + for(let seqId of heroes) { + let {hid} = await HeroModel.findBySeqIdAndRole(seqId, roleId); const hInfo = getHeroInfoById(hid); if (getJobInfoById(hInfo.jobid) === param) { heroCnt++; @@ -252,8 +254,16 @@ export async function checkTaskConditions(roleId: string, heroes: Array, export async function createCurTasks(towerLv: number, roleId: string, roleName: string) { let taskIds = []; - const taskList = getTaskIdByFloor(towerLv)||[]; - const randomList = taskList.map(taskId => getTaskById(taskId)); + let randomList = []; + let dicTask = getGamedata('dic_zyz_search'); + for(let task of dicTask) { + let {suitFloor} = task; + let {min, max} = decodeStrSingle('suitLevel', suitFloor); + let flag = max?(towerLv >= min && towerLv <= max): (towerLv >= min); + if(flag) { + randomList.push(task); + } + } for(let i = 0; i < TOWER_TASK_CONST.RAND_CNT; i++) { let list = randomList.filter(cur => !taskIds.includes(cur.taskId)); let {dic: tmp} = getRandomWithWeight(list); diff --git a/game-server/app/services/expeditionService.ts b/game-server/app/services/expeditionService.ts index 3740da7b1..fb759a2ee 100644 --- a/game-server/app/services/expeditionService.ts +++ b/game-server/app/services/expeditionService.ts @@ -1,11 +1,11 @@ import { ExpeditionPointModel } from '../db/ExpeditionPoint'; -import { RoleModel } from '../db/Role'; +import Role, { RoleModel } from '../db/Role'; import { PvpDefenseModel } from '../db/PvpDefense'; import { getWarJsons, getGamedata } from '../pubUtils/gamedata'; -import { decodeStr, resResult, setLocalHours } from '../pubUtils/util'; -import { WAR_JSON_ATTRIBUTE_TYPE } from '../consts/consts'; +import { decodeStr, resResult, setLocalHours, shouldRefresh } from '../pubUtils/util'; +import { WAR_JSON_ATTRIBUTE_TYPE, EXPEDITION_CONST } from '../consts/consts'; // 匹配玩家 @@ -95,8 +95,10 @@ export function decodeWarJsonAttribute(attribute) { } // 远征累计点数获取 -export async function getPointRewardStatus(roleId: string) { - let role = await RoleModel.findByRoleId(roleId); +export async function getPointRewardStatus(roleId: string, role?: Role) { + if(!role) { + role = await RoleModel.findByRoleId(roleId); + } let {expeditionPoint = 0} = role; let dicExpeditionPoint = getGamedata('dic_expedition_point'); let pointRewards = { @@ -115,3 +117,22 @@ export async function getPointRewardStatus(roleId: string) { } return pointRewards } + +export async function getResetRemainCnt(curTime: Date, roleId: string, role?: Role, ) { + if(!role) { + role = await RoleModel.findByRoleId(roleId); + } + + let { expeditionResetCnt, expeditionResetRefTime } = role; + let needRefresh = !expeditionResetRefTime || shouldRefresh(expeditionResetRefTime, curTime, EXPEDITION_CONST.REFRESH_TIME); + if(needRefresh) { + expeditionResetCnt = 0; expeditionResetRefTime = curTime; + } + + let maxCnt = EXPEDITION_CONST.RESET_CNT; + + return { + resetCnt: maxCnt - expeditionResetCnt, + needRefresh + }; +} \ No newline at end of file diff --git a/game-server/app/services/normalBattleService.ts b/game-server/app/services/normalBattleService.ts index 2c3930b5b..3cb295f5a 100644 --- a/game-server/app/services/normalBattleService.ts +++ b/game-server/app/services/normalBattleService.ts @@ -30,8 +30,8 @@ export async function roleLevelup(roleId: string, kingExp: number) { export async function checkBattleHeroes(roleId: string, heroes: Array) { let flag = true; - for(let hid of heroes) { - let hero = await HeroModel.findByHidAndRole(hid, roleId); + for(let seqId of heroes) { + let hero = await HeroModel.findBySeqIdAndRole(seqId, roleId); if(!hero) flag = false; } return flag; diff --git a/shared/consts/consts.ts b/shared/consts/consts.ts index 80c12eb36..3887fe233 100644 --- a/shared/consts/consts.ts +++ b/shared/consts/consts.ts @@ -133,7 +133,6 @@ export const EVENT_ANSWER_STATUS = { }; export const EVENT_START_BATTLE = 101; -export const EXPEDITION_INCREASE_POINT = 2; // 远征每成功一次累计的点数 export const HANG_UP_CONSTS = { ENABLE_LV: 2, // 第几层开始可以挂机 @@ -154,6 +153,12 @@ export const DAILY_CONST = { REFRESH_TIME: 5 } +export const EXPEDITION_CONST = { + REFRESH_TIME: 5, // 重置次数刷新时间 + INCREASE_POINT: 2, // 远征每成功一次累计的点数 + RESET_CNT: 1 // 可以免费重置的次数 +} + export const WAR_JSON_ATTRIBUTE_TYPE = { "1": "hp", // 生命 "2": "atk", // 物攻 diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index 618580dad..4af1b5cbe 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -48,6 +48,7 @@ export const STATUS = { EXPEDITION_POINT_NOT_ENOUGH: { code: 20408, simStr: '点数不足' }, EXPEDITION_POINT_RECORD_NOT_FOUND: { code: 20409, simStr: '点数宝箱已刷新' }, EXPEDITION_POINT_NEED_ALL_RECEIVED: { code: 20410, simStr: '宝箱需要领取完才可以刷新' }, + EXPEDITION_RESET_NUM_NOT_ENOUGH: { code: 20411, simStr: '重置次数不足'}, // 天梯 20500 - 20599 TOWER_RESET_ERR: { code: 20501, simStr: '只能重置当前层' }, TOWER_INFO_NOT_FOUND: { code: 20502, simStr: '镇念塔层数异常' }, diff --git a/shared/db/ExpeditionRecord.ts b/shared/db/ExpeditionRecord.ts index dbdd50991..cf7b16b2d 100644 --- a/shared/db/ExpeditionRecord.ts +++ b/shared/db/ExpeditionRecord.ts @@ -1,9 +1,10 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop } from '@typegoose/typegoose'; +import { genCode } from '../pubUtils/util'; class Heroes { @prop({ required: true }) - hid: number; // 敌人id + seqId: number; // 唯一id @prop({ required: true }) hp: number; // 血量 @prop({ required: true }) @@ -13,7 +14,7 @@ class Heroes { /** * 远征记录 */ -@index({ roleId: 1 }) +@index({ roleId: 1, status: 1 }) @index({ expeditionCode: 1 }) export default class ExpeditionRecord extends BaseModel { @@ -24,18 +25,27 @@ export default class ExpeditionRecord extends BaseModel { @prop({ required: true, default: '' }) expeditionCode: string; // 远征的唯一标识 @prop({ required: true, default: 0 }) - time: number; // 时间 + myCe: number; // 我方在重置时的战力 @prop({ required: true, type: Heroes, default: [] }) heroes: Array; // 我方已出场武将 + @prop({ required: true, default: 1 }) + status: number; // 状态 1-显示 0-不显示 - public static async getTodayRecord(roleId: string, time: number, lean = true) { - const result = await ExpeditionRecordModel.findOne({ roleId, time }).lean(lean); + public static async getCurRecord(roleId: string, lean = true) { + const result = await ExpeditionRecordModel.findOne({ roleId, status: 1 }).lean(lean); return result; } - public static async createTodayRecord(expeditionCode: string, params: { roleId: string, roleName: string, time: number, heroes: Array }, lean = true) { - const result = await ExpeditionRecordModel.findOneAndUpdate({ expeditionCode }, params, { new: true, upsert: true }).lean(lean); + public static async createRecord(params: { roleId: string, roleName: string, heroes: Array<{seqId: number, hp: number, ap: number}>, myCe: number }, lean = true) { + const code = genCode(8); + + const result = await ExpeditionRecordModel.findOneAndUpdate({ expeditionCode: code }, {...params, status: 1}, { new: true, upsert: true }).lean(lean); + return result; + } + + public static async hideRecord(roleId: string, lean = true) { + const result = await ExpeditionRecordModel.findOneAndUpdate({ roleId, status: 1 }, { status: 0 }, { new: true }).lean(lean); return result; } @@ -44,22 +54,22 @@ export default class ExpeditionRecord extends BaseModel { return result } - public static async updateHeroStatus(expeditionCode: string, oldHeroes: Array, heroes: Array<{actorId: number, hp: number, ap: number}>, lean=true) { + public static async updateHeroStatus(expeditionCode: string, oldHeroes: Array, heroes: Array<{dataId: number, hp: number, ap: number}>, lean=true) { let pushArr = new Array(), updateArr = new Array(); for(let hero of heroes) { - let {actorId, hp, ap} = hero; - let obj = oldHeroes.find(cur => cur.hid == actorId); + let {dataId, hp, ap} = hero; + let obj = oldHeroes.find(cur => cur.seqId == dataId); if(!!obj) { - updateArr.push({hid: actorId, hp, ap}); + updateArr.push({seqId: dataId, hp, ap}); } else { - pushArr.push({hid: actorId, hp, ap}) + pushArr.push({seqId: dataId, hp, ap}) } } - for(let {hid, hp, ap} of updateArr) { + for(let {seqId, hp, ap} of updateArr) { await ExpeditionRecordModel.findOneAndUpdate( - {expeditionCode, 'heroes.hid': hid }, - {$set: {'heroes.$.hid': hid, 'heroes.$.hp': hp, 'heroes.$.ap': ap}} + {expeditionCode, 'heroes.seqId': seqId }, + {$set: {'heroes.$.seqId': seqId, 'heroes.$.hp': hp, 'heroes.$.ap': ap}} ) } const result = await ExpeditionRecordModel.findOneAndUpdate( diff --git a/shared/db/Hero.ts b/shared/db/Hero.ts index 90b4974e4..b2de6cd0e 100644 --- a/shared/db/Hero.ts +++ b/shared/db/Hero.ts @@ -57,6 +57,10 @@ export default class Hero extends BaseModel { return heros || []; } + public static async findBySeqIdAndRole(seqId: number, roleId: string, lean = true) { + const hero = await HeroModel.findOne({ seqId, roleId }).lean(lean); + return hero; + } public static async findByHidAndRole(hid: number, roleId: string, lean = true) { const hero = await HeroModel.findOne({ hid, roleId }).lean(lean); return hero; diff --git a/shared/db/Role.ts b/shared/db/Role.ts index 93e22f01c..c8f406593 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -114,11 +114,17 @@ export default class Role extends BaseModel { @prop({ required: true, default: new Date()}) towerTaskRefTime: Date; // 刷新派遣任务的时间 - @prop({ required: true }) + // 奇遇事件相关 + @prop({ required: true, default: 0 }) eventStatus: number; // 奇遇开启状态, 0-未开启 1-开启了第一场事件 2-完全开启 - @prop({ required: true }) + // 远征相关 + @prop({ required: true, default: 0 }) expeditionPoint: number; // 远征点数 + @prop({ required: true, default: 0 }) + expeditionResetCnt: number; // 远征重置次数 + @prop({ required: true, default: new Date() }) + expeditionResetRefTime: Date; // 远征重置次数刷新时间 public static async findByUid(uid: number, serverId: number, lean = true) { @@ -250,13 +256,25 @@ export default class Role extends BaseModel { let role = null; if (needRefresh) { - role = await RoleModel.findOneAndUpdate({roleId}, {towerTaskReCnt: 0, towerTaskRefTime: curTime}, {new: true}).lean(lean); + role = await RoleModel.findOneAndUpdate({roleId}, {towerTaskReCnt: 1, towerTaskRefTime: curTime}, {new: true}).lean(lean); } else { role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerTaskReCnt: 1}}, {new: true}).lean(lean); } return role; } + // 刷新远征重置次数 + public static async increaseExpeditionResetCnt(roleId: string, needRefresh: boolean, curTime: Date, lean = true) { + + let role = null; + if (needRefresh) { + role = await RoleModel.findOneAndUpdate({roleId}, {expeditionResetCnt: 1, expeditionResetRefTime: curTime}, {new: true}).lean(lean); + } else { + role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {expeditionResetCnt: 1}}, {new: true}).lean(lean); + } + return role; + } + // 获取排行榜 public static async getRank(type: string, fields: Array, page = 1, limit = 100, lean = true) { let sortBy = {}; diff --git a/shared/pubUtils/gamedata.ts b/shared/pubUtils/gamedata.ts index 7b585befd..9a1626135 100644 --- a/shared/pubUtils/gamedata.ts +++ b/shared/pubUtils/gamedata.ts @@ -1,13 +1,11 @@ import fs = require('fs'); import path = require('path'); -import { decodeStr, decodeStrSingle } from './util'; let gamedata = {}; const wars = ['dic_zyz_gk_main', 'dic_zyz_gk_mainElite', 'dic_zyz_gk_daily', 'dic_zyz_gk_event', 'dic_zyz_gk_tower', 'dic_zyz_gk_expedition']; // 关卡相关的表 const allWarInfos = new Map(); const towerInfos = new Map(); const towerTaskInfos = new Map(); -const towerTasksByFloor = new Map>(); const heroInfos = new Map(); const jobInfos = new Map(); const levelInfos = new Map(); @@ -41,9 +39,6 @@ function parseTowerTaskData() { towerTaskData.forEach(elem => { if (elem && elem.taskId) { towerTaskInfos.set(elem.taskId, elem); - let tasks = towerTasksByFloor.get(elem.suitFloor) || []; - tasks.push(elem.taskId); - towerTasksByFloor.set(elem.suitFloor, tasks); } }); } @@ -154,11 +149,6 @@ export function getTaskById(tid: number) { return taskInfo; } -export function getTaskIdByFloor(floor: number) { - const taskIds = towerTasksByFloor.get(floor); - return taskIds; -} - export function getHeroInfoById(hid: number) { const heroInfo = heroInfos.get(hid); return heroInfo; diff --git a/shared/resource/jsons/dic_zyz_search.json b/shared/resource/jsons/dic_zyz_search.json index 2ca105184..51c38b65d 100644 --- a/shared/resource/jsons/dic_zyz_search.json +++ b/shared/resource/jsons/dic_zyz_search.json @@ -8,7 +8,7 @@ "termsForAdd": "1&2&2|2&2&1|3&1&1", "actorNeeded": 2, "completeTime": 60, - "suitFloor": 1, + "suitFloor": "1&", "weight": 1 }, { @@ -20,7 +20,7 @@ "termsForAdd": "2&1&1|3&2&1", "actorNeeded": 2, "completeTime": 60, - "suitFloor": 1, + "suitFloor": "1&", "weight": 1 }, { @@ -32,7 +32,7 @@ "termsForAdd": "2&3&1|3&3&1", "actorNeeded": 2, "completeTime": 60, - "suitFloor": 1, + "suitFloor": "1&", "weight": 1 }, { @@ -44,7 +44,7 @@ "termsForAdd": "2&4&1|3&4&1", "actorNeeded": 2, "completeTime": 60, - "suitFloor": 1, + "suitFloor": "1&", "weight": 1 }, { @@ -56,7 +56,7 @@ "termsForAdd": "1&1&1|2&4&1|3&5&1", "actorNeeded": 2, "completeTime": 60, - "suitFloor": 1, + "suitFloor": "1&", "weight": 1 }, { @@ -68,7 +68,7 @@ "termsForAdd": "3&6&1", "actorNeeded": 2, "completeTime": 60, - "suitFloor": 1, + "suitFloor": "1&", "weight": 1 }, { @@ -80,7 +80,7 @@ "termsForAdd": "3&7&1", "actorNeeded": 2, "completeTime": 60, - "suitFloor": 1, + "suitFloor": "1&", "weight": 1 }, { @@ -92,7 +92,7 @@ "termsForAdd": "3&8&2", "actorNeeded": 3, "completeTime": 60, - "suitFloor": 1, + "suitFloor": "10&", "weight": 1 }, { @@ -104,7 +104,7 @@ "termsForAdd": "1&1&1|2&1&1|3&1&1", "actorNeeded": 3, "completeTime": 60, - "suitFloor": 1, + "suitFloor": "10&", "weight": 1 }, { @@ -116,7 +116,7 @@ "termsForAdd": "1&2&1|2&2&1|3&2&1", "actorNeeded": 3, "completeTime": 120, - "suitFloor": 1, + "suitFloor": "10&", "weight": 1 }, { @@ -128,7 +128,7 @@ "termsForAdd": "1&1&1|2&3&1|3&3&1", "actorNeeded": 3, "completeTime": 120, - "suitFloor": 1, + "suitFloor": "10&", "weight": 1 }, { @@ -140,7 +140,7 @@ "termsForAdd": "1&2&1|2&4&1|3&4&1", "actorNeeded": 3, "completeTime": 120, - "suitFloor": 1, + "suitFloor": "10&", "weight": 1 }, { @@ -152,7 +152,7 @@ "termsForAdd": "1&1&1|2&1&1|3&5&1", "actorNeeded": 3, "completeTime": 120, - "suitFloor": 1, + "suitFloor": "10&", "weight": 1 }, { @@ -164,7 +164,7 @@ "termsForAdd": "1&2&1|2&2&1|3&6&1", "actorNeeded": 3, "completeTime": 120, - "suitFloor": 1, + "suitFloor": "10&", "weight": 1 }, { @@ -176,7 +176,7 @@ "termsForAdd": "1&1&1|2&3&1|3&7&1", "actorNeeded": 3, "completeTime": 120, - "suitFloor": 1, + "suitFloor": "10&", "weight": 1 } ] \ No newline at end of file