diff --git a/game-server/app/servers/battle/handler/rougeHandler.ts b/game-server/app/servers/battle/handler/rougeHandler.ts index 01c5f238b..2224f191b 100644 --- a/game-server/app/servers/battle/handler/rougeHandler.ts +++ b/game-server/app/servers/battle/handler/rougeHandler.ts @@ -1203,6 +1203,32 @@ export class RougeHandler { }); } + async challengeRandom(msg: { detailCode: string }, session: BackendSession) { + let roleId: string = session.get('roleId'); + const { detailCode } = msg; + let dbDetail = await RougelikeRecordDetailModel.findByDetailCode(detailCode); + if (!dbDetail) return resResult(STATUS.ROUGE_CHALLENGE_RANDOM_FAIL); + let { gameCode, layer, nodeId, nodeType, rewards = [], challenge } = dbDetail; + if (rewards.length > 0 || nodeType != ROUGE_LIKE_NODE_TYPE.CHALLENGE || (challenge?.status || 0) < 2) return resResult(STATUS.ROUGE_CHALLENGE_RANDOM_FAIL); + + const dbRecord = await RougelikeRecordModel.findByGameCode(gameCode); + if (!dbRecord) return resResult(STATUS.ROUGE_CHALLENGE_RANDOM_FAIL); + const { authorType, type, grade } = dbRecord; + + const typeGradeData = gameData.rougeTypeGrade.get(type + '_' + grade); + if (!typeGradeData) return resResult(STATUS.ROUGE_CHALLENGE_RANDOM_FAIL); + const layerPlanData = gameData.rougeLayerPlan.get(typeGradeData.layerPlan + '_' + layer); + if (!layerPlanData) return resResult(STATUS.ROUGE_CHALLENGE_RANDOM_FAIL); + let result = await getLayerNodeReward(roleId, gameCode, authorType, nodeId, layerPlanData.rewardPlan, layer); + if (!result || !result.rewards) return resResult(STATUS.ROUGE_CHALLENGE_RANDOM_FAIL); + rewards = result.rewards; + + dbDetail = await RougelikeRecordDetailModel.updateByCode(gameCode, detailCode, { $set: { rewards } }); + if (!dbDetail || !dbDetail.rewards) resResult(STATUS.ROUGE_CHALLENGE_RANDOM_FAIL); + + return resResult(STATUS.SUCCESS, { gameCode, detailCode, rewards: dbDetail.rewards }) + } + /** * debug接口,清空科技树 * @param msg diff --git a/game-server/app/services/battle/rougeService.ts b/game-server/app/services/battle/rougeService.ts index d4ea9d4e8..8bca35cb9 100644 --- a/game-server/app/services/battle/rougeService.ts +++ b/game-server/app/services/battle/rougeService.ts @@ -859,12 +859,12 @@ export async function updateChalleng(dbRecord: RougelikeRecordType, roleId: stri challenge.status = 2; //处理在挑战进度完成时再随机奖励 - const typeGradeData = gameData.rougeTypeGrade.get(type + '_' + grade); - if (!typeGradeData) continue; - const layerPlanData = gameData.rougeLayerPlan.get(typeGradeData.layerPlan + '_' + layer); - if (!layerPlanData) continue; - let result = await getLayerNodeReward(roleId, gameCode, authorType, nodeId, layerPlanData.rewardPlan, layer); - rewards = result.rewards; + // const typeGradeData = gameData.rougeTypeGrade.get(type + '_' + grade); + // if (!typeGradeData) continue; + // const layerPlanData = gameData.rougeLayerPlan.get(typeGradeData.layerPlan + '_' + layer); + // if (!layerPlanData) continue; + // let result = await getLayerNodeReward(roleId, gameCode, authorType, nodeId, layerPlanData.rewardPlan, layer); + // rewards = result.rewards; }; } diff --git a/game-server/app/services/checkParam.ts b/game-server/app/services/checkParam.ts index 6217e2292..a54f9debb 100644 --- a/game-server/app/services/checkParam.ts +++ b/game-server/app/services/checkParam.ts @@ -1004,7 +1004,12 @@ export function checkRouteParam(route: string, msg: any) { if (!checkNaturalStrings(gameCode, oldCharaCode, newCharaCode)) return false; break; } - + case "battle.rougeHandler.challengeRandom": + { + let { detailCode } = msg; + if (!checkNaturalStrings(detailCode)) return false; + break; + } case "battle.rougeHandler.unlockTech": { if (!checkNaturalNumbers(msg.techId)) return false; diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index e0b91cdff..b9799833a 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -805,6 +805,7 @@ export const STATUS = { BATTLE_ABNORMAL_CHARA: { code: 80023, simStr: '上阵学员数量异常' }, ROUGE_RE_RANDOM_CNT_OVER: { code: 80024, simStr: '已重新随机过' }, ROUGE_NO_CAN_PUT_SAME_ID: { code: 80025, simStr: '不能安装相同特性卡' }, + ROUGE_CHALLENGE_RANDOM_FAIL: { code: 80026, simStr: '挑战关不可随机随机奖励' }, ROUGE_TECH_SCORE_NOT_ENOUGH: { code: 80101, simStr: '科技点不足' }, ROUGE_TECH_HAS_UNLOCKED: { code: 80102, simStr: '科技点已解锁' }, diff --git a/shared/db/RougelikeRecordDetail.ts b/shared/db/RougelikeRecordDetail.ts index 919ab1f4c..f9311744c 100644 --- a/shared/db/RougelikeRecordDetail.ts +++ b/shared/db/RougelikeRecordDetail.ts @@ -245,6 +245,11 @@ export default class RougelikeRecordDetail extends BaseModel { return result; } + public static async findByDetailCode(detailCode: string, lean = true) { + const result: RougelikeRecordDetailType = await RougelikeRecordDetailModel.findOne({ detailCode }).lean(lean); + return result; + } + public static async findByGameCodeAndLtLayer(gameCode: string, layer: number, lean = true) { const result: RougelikeRecordDetailType[] = await RougelikeRecordDetailModel.find({ gameCode, layer: { $lt: layer } }).lean(lean); return result;