✨ feat(稷下学宫): 添加挑战关主动触发随机奖励接口
This commit is contained in:
@@ -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接口,清空科技树
|
* debug接口,清空科技树
|
||||||
* @param msg
|
* @param msg
|
||||||
|
|||||||
@@ -859,12 +859,12 @@ export async function updateChalleng(dbRecord: RougelikeRecordType, roleId: stri
|
|||||||
challenge.status = 2;
|
challenge.status = 2;
|
||||||
|
|
||||||
//处理在挑战进度完成时再随机奖励
|
//处理在挑战进度完成时再随机奖励
|
||||||
const typeGradeData = gameData.rougeTypeGrade.get(type + '_' + grade);
|
// const typeGradeData = gameData.rougeTypeGrade.get(type + '_' + grade);
|
||||||
if (!typeGradeData) continue;
|
// if (!typeGradeData) continue;
|
||||||
const layerPlanData = gameData.rougeLayerPlan.get(typeGradeData.layerPlan + '_' + layer);
|
// const layerPlanData = gameData.rougeLayerPlan.get(typeGradeData.layerPlan + '_' + layer);
|
||||||
if (!layerPlanData) continue;
|
// if (!layerPlanData) continue;
|
||||||
let result = await getLayerNodeReward(roleId, gameCode, authorType, nodeId, layerPlanData.rewardPlan, layer);
|
// let result = await getLayerNodeReward(roleId, gameCode, authorType, nodeId, layerPlanData.rewardPlan, layer);
|
||||||
rewards = result.rewards;
|
// rewards = result.rewards;
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1004,7 +1004,12 @@ export function checkRouteParam(route: string, msg: any) {
|
|||||||
if (!checkNaturalStrings(gameCode, oldCharaCode, newCharaCode)) return false;
|
if (!checkNaturalStrings(gameCode, oldCharaCode, newCharaCode)) return false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "battle.rougeHandler.challengeRandom":
|
||||||
|
{
|
||||||
|
let { detailCode } = msg;
|
||||||
|
if (!checkNaturalStrings(detailCode)) return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case "battle.rougeHandler.unlockTech":
|
case "battle.rougeHandler.unlockTech":
|
||||||
{
|
{
|
||||||
if (!checkNaturalNumbers(msg.techId)) return false;
|
if (!checkNaturalNumbers(msg.techId)) return false;
|
||||||
|
|||||||
@@ -805,6 +805,7 @@ export const STATUS = {
|
|||||||
BATTLE_ABNORMAL_CHARA: { code: 80023, simStr: '上阵学员数量异常' },
|
BATTLE_ABNORMAL_CHARA: { code: 80023, simStr: '上阵学员数量异常' },
|
||||||
ROUGE_RE_RANDOM_CNT_OVER: { code: 80024, simStr: '已重新随机过' },
|
ROUGE_RE_RANDOM_CNT_OVER: { code: 80024, simStr: '已重新随机过' },
|
||||||
ROUGE_NO_CAN_PUT_SAME_ID: { code: 80025, 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_SCORE_NOT_ENOUGH: { code: 80101, simStr: '科技点不足' },
|
||||||
ROUGE_TECH_HAS_UNLOCKED: { code: 80102, simStr: '科技点已解锁' },
|
ROUGE_TECH_HAS_UNLOCKED: { code: 80102, simStr: '科技点已解锁' },
|
||||||
|
|||||||
@@ -245,6 +245,11 @@ export default class RougelikeRecordDetail extends BaseModel {
|
|||||||
return result;
|
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) {
|
public static async findByGameCodeAndLtLayer(gameCode: string, layer: number, lean = true) {
|
||||||
const result: RougelikeRecordDetailType[] = await RougelikeRecordDetailModel.find({ gameCode, layer: { $lt: layer } }).lean(lean);
|
const result: RougelikeRecordDetailType[] = await RougelikeRecordDetailModel.find({ gameCode, layer: { $lt: layer } }).lean(lean);
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
Reference in New Issue
Block a user