✨ feat(任务): 添加稷下学宫任务
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { Application, BackendSession, pinus, HandlerService, } from 'pinus';
|
||||
import { RougelikeRecordModel } from '../../../db/RougelikeRecord';
|
||||
import { genCode, getRandEelmWithWeight, resResult } from '../../../pubUtils/util';
|
||||
import { COLLECTION_TYPE, ITEM_CHANGE_REASON, REST_POINT_TYPE, ROUGE_LIKE_CARD_TYPE, ROUGE_LIKE_CHOOSE_REWARD, ROUGE_LIKE_NODE_TYPE, ROUGE_LIKE_STATUS, TASK_TYPE } from '../../../consts';
|
||||
import { COLLECTION_TYPE, ITEM_CHANGE_REASON, REST_POINT_TYPE, ROUGE_LIKE_CARD_TYPE, ROUGE_LIKE_CHOOSE_REWARD, ROUGE_LIKE_NODE_TYPE, ROUGE_LIKE_STATUS, TASK_ROUGE_CARD_TYPE, TASK_TYPE } from '../../../consts';
|
||||
import { Quest, RestPoint, RougelikeRecordDetailModel } from '../../../db/RougelikeRecordDetail';
|
||||
import { STATUS } from '../../../consts/statusCode';
|
||||
import { RougelikeCardModel, RougelikeCardPara, RougelikeCardType } from '../../../db/RougelikeCard';
|
||||
@@ -95,7 +95,7 @@ export class RougeHandler {
|
||||
|
||||
const charaCards = getInitCharaCard() || [];
|
||||
|
||||
let handleAddFun = new HandleAddCard(roleId, sid, gameCode);
|
||||
let handleAddFun = new HandleAddCard(session, gameCode);
|
||||
for (let ele of charaCards) {
|
||||
handleAddFun.pushChara(ele.id, await getMaxHp(roleId, gameCode, ele.id, type, grade), []);
|
||||
}
|
||||
@@ -120,6 +120,7 @@ export class RougeHandler {
|
||||
async startGame(msg: { gameCode: string, authorType: number }, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let sid = session.get('sid');
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
const { gameCode, authorType } = msg;
|
||||
|
||||
@@ -150,10 +151,16 @@ export class RougeHandler {
|
||||
|
||||
let { addCoin, cardIds } = await getEffectWhenGameStart(roleId, gameCode, authorType);
|
||||
dbRecord = await RougelikeRecordModel.updateByGameCode(gameCode, { $inc: { coin: addCoin, coinTotal: addCoin } });
|
||||
//任务
|
||||
if (addCoin > 0) {
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_GET_COIN, { addCoin });
|
||||
}
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_GAME_COUNT, { count: 1 });
|
||||
|
||||
|
||||
|
||||
const charas: CommonChara[] = formateCharasOrCards(await RougelikeCharaModel.findByGameCode(gameCode), ROUGE_LIKE_CARD_TYPE.CHARA)?.charas || [];
|
||||
let handleAddFun = new HandleAddCard(roleId, sid, gameCode);
|
||||
let handleAddFun = new HandleAddCard(session, gameCode);
|
||||
handleAddFun.pushHolyCards(cardIds);
|
||||
let result = await handleAddFun.save();
|
||||
result = await handleAddFun.getHolyEffect();
|
||||
@@ -187,7 +194,7 @@ export class RougeHandler {
|
||||
|
||||
let takeoutRewardMap = takeoutReward.reduce((map, cur) => { map.set(cur.id, cur.count); return map; }, new Map<number, number>());
|
||||
let spiritIds: number[] = [];
|
||||
let addCoin = 0, addScore = 0, addTech = 0, isPass = true;
|
||||
let addScore = 0, addTech = 0, isPass = true;
|
||||
if (dbLayers.length == 0) isPass = false;
|
||||
for (const { layer, hasPass = false, layerNodes } of dbLayers) {
|
||||
if (layer > dbRecord.curLayer) {
|
||||
@@ -208,8 +215,8 @@ export class RougeHandler {
|
||||
nodeType = dbDetail?.questType || 0;
|
||||
}
|
||||
const layerReward = getLayerRewardOneData(type, grade, layer, nodeType);
|
||||
const { takeoutReward = [], coin = 0, score = 0, tech = 0, spiritPlan } = clone(layerReward);
|
||||
addCoin += coin, addScore += score, addTech += tech;
|
||||
const { takeoutReward = [], score = 0, tech = 0, spiritPlan } = clone(layerReward);
|
||||
addScore += score, addTech += tech;
|
||||
for (const { id, count } of takeoutReward) takeoutRewardMap.set(id, takeoutRewardMap.get(id) || 0 + count);
|
||||
spiritIds.push(...getRandomSpirit(spiritPlan));
|
||||
}
|
||||
@@ -222,9 +229,9 @@ export class RougeHandler {
|
||||
|
||||
|
||||
if (!dbRecord) return resResult(STATUS.NO_ROUGELIKE_GAME);
|
||||
dbRecord = await RougelikeRecordModel.updateByGameCode(gameCode, { $set: { status, takeoutReward }, $inc: { score: addScore, coin: addCoin, techScore: addTech } });
|
||||
dbRecord = await RougelikeRecordModel.updateByGameCode(gameCode, { $set: { status, takeoutReward }, $inc: { score: addScore, techScore: addTech } });
|
||||
|
||||
let { score = 0, coin = 0, techScore = 0 } = dbRecord;
|
||||
let { score = 0, techScore = 0 } = dbRecord;
|
||||
let dbScore = await RougelikeScoreModel.incScore(roleId, score);
|
||||
let goods = await addItems(roleId, roleName, sid, [getRougeTechScoreObject(techScore)], ITEM_CHANGE_REASON.ROUGE_TECH_SCORE);
|
||||
|
||||
@@ -237,12 +244,11 @@ export class RougeHandler {
|
||||
firstReward = await addItems(roleId, roleName, sid, typeGradeData?.firstReward || [], ITEM_CHANGE_REASON.ROUGE_FIRST_REWARD);
|
||||
await RougelikeExtendModel.update(roleId, typeGradeData.id, firstReward, gameCode);
|
||||
}
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.FUND_ROUGE, { rougeId: typeGradeData.id });
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.FUND_ROUGE, { rougeId: typeGradeData.id, count: 1 });
|
||||
}
|
||||
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
gameCode, goods, score, techScore, coin, hasReceivedTakeout, firstReward,
|
||||
gameCode, goods, score, techScore, hasReceivedTakeout, firstReward,
|
||||
takeoutReward, weeklyScore: dbScore?.score || 0, takeoutRewardCnt: dbScore?.takeoutRewardCnt || 0
|
||||
});
|
||||
|
||||
@@ -366,7 +372,7 @@ export class RougeHandler {
|
||||
let roleId = session.get('roleId');
|
||||
let roleName = session.get('roleName');
|
||||
let sid = session.get('sid');
|
||||
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
let { gameCode, detailCode, battleCode, warId, status, round, rougeDamage } = msg;
|
||||
let dbDetail = await RougelikeRecordDetailModel.findByCode(gameCode, detailCode);
|
||||
@@ -386,13 +392,19 @@ export class RougeHandler {
|
||||
|
||||
const dbCharaMap = dbCharas.reduce((result, cur) => { result.set(cur.charaCode, { ...cur }); return result; }, new Map<string, RougelikeCharaType>());
|
||||
|
||||
let isAp: boolean = false, isRound: boolean = false;
|
||||
let isAp: boolean = false, isRound: boolean = false, arrAuthorType: number[] = [];
|
||||
for (let obj of rougeDamage) {
|
||||
if (obj.isAp) isAp = true;
|
||||
if (obj.isRound) isRound = true;
|
||||
const chara = dbCharaMap.get(obj.charaCode);
|
||||
if (!chara) return resResult(STATUS.BATTLE_ABNORMAL)
|
||||
obj.maxHp = (chara.maxHp || 0);
|
||||
|
||||
if (!chara.cards || chara.cards.length == 0) console;
|
||||
for (const { cardId } of chara.cards) {
|
||||
const passiveCardData = gameData.rougePassiveCard.get(cardId);
|
||||
if (nodeType == ROUGE_LIKE_NODE_TYPE.BOSS && passiveCardData && passiveCardData.authorType) arrAuthorType.push(passiveCardData.authorType);
|
||||
}
|
||||
}
|
||||
await updateChalleng(dbRecord, roleId, sid, gameCode, layer, rougeDamage, isAp, isRound);
|
||||
|
||||
@@ -450,10 +462,18 @@ export class RougeHandler {
|
||||
|
||||
if (incCoin > 0) {
|
||||
charas = await updateMaxHp(roleId, gameCode, dbRecord.type, dbRecord.grade, updateCharasMap)
|
||||
|
||||
//任务
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_GET_COIN, { addCoin: incCoin });
|
||||
|
||||
} else {
|
||||
await RougelikeCharaModel.bulkWriteUpdate(updateCharas);
|
||||
}
|
||||
|
||||
if (status == 1 && arrAuthorType.length > 0 && arrAuthorType.every(cur => cur == arrAuthorType[0])) {
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_BOSS_PASS, { authorType: arrAuthorType[0], count: 1 });
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, { status, gameCode, detailCode, charas, incCoin });
|
||||
}
|
||||
|
||||
@@ -522,7 +542,7 @@ export class RougeHandler {
|
||||
|
||||
// if (groupStatus == ROUGE_LIKE_CHOOSE_REWARD.CHOOSE) return resResult(STATUS.REWARD_NO_CHOOSE);
|
||||
|
||||
let handleAddFun = new HandleAddCard(roleId, sid, gameCode, dbDetail);
|
||||
let handleAddFun = new HandleAddCard(session, gameCode, dbDetail);
|
||||
let incCoin = 0, redCoin = 0;
|
||||
// //处理下试炼币
|
||||
// if (rewardType == 0) {
|
||||
@@ -638,7 +658,7 @@ export class RougeHandler {
|
||||
await RougelikeRecordDetailModel.updateShopByCode(gameCode, detailCode, optionIndex, shop.optionStatus);
|
||||
await RougelikeRecordModel.updateByGameCode(gameCode, { $set: { coin: (dbRecord.coin || 0) - shop.price } });
|
||||
|
||||
let handleAddFun = new HandleAddCard(roleId, sid, gameCode, dbDetail);
|
||||
let handleAddFun = new HandleAddCard(session, gameCode, dbDetail);
|
||||
handleAddFun.pushCard(shop.rewardId, shop.rewardType);
|
||||
let result = await handleAddFun.save();
|
||||
result = await handleAddFun.getHolyEffect();
|
||||
@@ -682,6 +702,8 @@ export class RougeHandler {
|
||||
async chooseOption(msg: { gameCode: string, detailCode: string, eventOptions: number[] }, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let sid = session.get('sid');
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
const { gameCode, detailCode, eventOptions } = msg;
|
||||
|
||||
let dbDetail = await RougelikeRecordDetailModel.findByCode(gameCode, detailCode);
|
||||
@@ -690,7 +712,7 @@ export class RougeHandler {
|
||||
if (status == 1) return resResult(STATUS.NODE_NO_CHOOSE);
|
||||
|
||||
let checkAfterGroup = 0, optionGroupIds: number[] = [];
|
||||
let handleAddFun = new HandleAddCard(roleId, sid, gameCode, dbDetail);
|
||||
let handleAddFun = new HandleAddCard(session, gameCode, dbDetail);
|
||||
for (let [index, id] of eventOptions.entries()) {
|
||||
const rougeEventOptionData = gameData.rougeEventOption.get(id);
|
||||
if (!rougeEventOptionData) return resResult(STATUS.NODE_NO_CHOOSE);
|
||||
@@ -723,6 +745,8 @@ export class RougeHandler {
|
||||
result = await handleAddFun.getHolyEffect();
|
||||
|
||||
await addSameTypeCollect(roleId, sid, gameCode, COLLECTION_TYPE.EVENT, optionGroupIds);
|
||||
//任务
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_EVENT_COLLECT, { eventGroups: optionGroupIds });
|
||||
|
||||
return resResult(STATUS.SUCCESS, { ...result })
|
||||
}
|
||||
@@ -843,6 +867,7 @@ export class RougeHandler {
|
||||
async chooseSkillCard(msg: { gameCode: string, charaCode: string, skillType: number, id: number }, session: BackendSession) {
|
||||
let roleId: string = session.get('roleId');
|
||||
let sid: string = session.get('sid');
|
||||
let serverId: number = session.get('serverId');
|
||||
|
||||
const { gameCode, charaCode, skillType, id } = msg;
|
||||
|
||||
@@ -864,6 +889,10 @@ export class RougeHandler {
|
||||
// 更新图鉴
|
||||
await addSingleCollect(roleId, sid, gameCode, COLLECTION_TYPE.SKILL_CARD, id);
|
||||
|
||||
// 任务
|
||||
let dicSkillCard = gameData.rougeSkillCard.get(id);
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_AUTHOR_CARD_COLLECT, { authorType: dicSkillCard.authorType, cardType: TASK_ROUGE_CARD_TYPE.SKILL, cardIds: [id] });
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
curChara: new CommonChara(chara)
|
||||
})
|
||||
@@ -990,6 +1019,8 @@ export class RougeHandler {
|
||||
async unlockTech(msg: { techId: number }, session: BackendSession) {
|
||||
let roleId: string = session.get('roleId');
|
||||
let sid: string = session.get('sid');
|
||||
let serverId: number = session.get('serverId');
|
||||
|
||||
const { techId } = msg;
|
||||
|
||||
let dicTech = gameData.rougeTech.get(techId);
|
||||
@@ -1009,6 +1040,9 @@ export class RougeHandler {
|
||||
await updateEffectId(techRecord);
|
||||
|
||||
let resultData = getCurTechData(techRecord, techId);
|
||||
//任务
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_TECH_OPEN, { count: 1 });
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
...resultData
|
||||
});
|
||||
@@ -1141,7 +1175,7 @@ export class RougeHandler {
|
||||
return resResult(STATUS.NO_ROUGELIKE_GAME);
|
||||
}
|
||||
|
||||
let handleAddFun = new HandleAddCard(roleId, sid, dbRecord.gameCode);
|
||||
let handleAddFun = new HandleAddCard(session, dbRecord.gameCode);
|
||||
if (type == ROUGE_LIKE_CARD_TYPE.CHARA) {
|
||||
handleAddFun.pushChara(id, await getMaxHp(roleId, dbRecord?.gameCode || '', id, dbRecord.type, dbRecord.grade), []);
|
||||
} else if (type == ROUGE_LIKE_CARD_TYPE.HOLY) {
|
||||
|
||||
Reference in New Issue
Block a user