diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index 01b16af31..8e419cb6d 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -30,6 +30,7 @@ import { isArray, isNumber } from 'underscore'; import { RewardInter } from '../../../pubUtils/interface'; import { addItems } from '../../../services/role/rewardService'; import { treasureHuntChallengeConsume } from '../../../services/activity/treasureHuntService'; +import { combineItems } from '../../../services/role/util'; export default function (app: Application) { new HandlerService(app, {}); @@ -478,4 +479,33 @@ export class NormalBattleHandler { ...result, goods }); } + + // 关卡列表 + async receiveWarReward(msg: { chapter: number, warType: number }, session: BackendSession) { + const { chapter, warType } = msg; + + let roleId = session.get('roleId'); + let roleName = session.get('roleName'); + let sid = session.get('sid'); + + let role = await RoleModel.findByRoleId(roleId, 'receivedWarIds'); + let { receivedWarIds = [] } = role; + let warIds: number[] = []; + let rewards: RewardInter[] = []; + let mainWarRewards = gameData.mainWarReward.get(`${warType}_${chapter}`)??[]; + + for(let { warId, cityReward } of mainWarRewards) { + if(receivedWarIds.indexOf(warId) == -1) { + rewards.push(...cityReward); + warIds.push(warId); + } + } + if(warIds.length <= 0) return resResult(STATUS.BATTLE_NO_WAR_REWARD_CAN_RECEIVE); + role = await RoleModel.receiveWarRewards(roleId, warIds); + let goods = await addItems(roleId, roleName, sid, rewards, ITEM_CHANGE_REASON.RECEIVE_CHAPTER_BOX) + + return resResult(STATUS.SUCCESS, { + receivedWarIds: warIds, goods: combineItems(goods) + }); + } } diff --git a/game-server/app/services/normalBattleService.ts b/game-server/app/services/normalBattleService.ts index f8bce99c2..b18b074da 100644 --- a/game-server/app/services/normalBattleService.ts +++ b/game-server/app/services/normalBattleService.ts @@ -222,5 +222,6 @@ export function getMainChapter(role: RoleType) { return { star: chapterArr, receivedBox: role.receivedBox||[], + receivedWarIds: role.receivedWarIds||[], } } diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index b6406de51..ca4753398 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -534,6 +534,7 @@ export const FILENAME = { DIC_TOWER_GIFT: 'dic_zyz_towerGift', DIC_TOWER_PVP_SUB_ATTR: 'dic_tower_pvp_subattr', DIC_SYSTEM_OPEN_TIME: 'dic_zyz_systemOpenTime', + DIC_MAIN_WAR_REWARD: 'dic_zyz_mainCity_reward', } export const WAR_RELATE_TABLES = [ diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index 8f078f5b1..190e145a7 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -59,6 +59,7 @@ export const STATUS = { BATTLE_INFO_VALIDATE_ERR: { code: 20101, simStr: '关卡信息不同' }, BATTLE_SWEEP_CONDITION_STAR: { code: 20102, simStr: '需要3星通过关卡才可以扫荡' }, BATTLE_NO_BOX_CAN_RECEIVE: { code: 20103, simStr: '宝箱不可领取' }, + BATTLE_NO_WAR_REWARD_CAN_RECEIVE: { code: 20104, simStr: '没有可领取的关卡奖励' }, // 每日 20200 - 20299 DAILY_WAR_NOT_FOUND: { code: 20201, simStr: '未找到该关卡' }, DAILY_TYPE_NOT_FOUND: { code: 20202, simStr: '未找到该类型' }, diff --git a/shared/db/Role.ts b/shared/db/Role.ts index 31e01f1d5..e6e6ebb94 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -301,7 +301,9 @@ export default class Role extends BaseModel { @prop({ required: true, default: [], type: Number }) guide: number[]; // 引导 @prop({ required: true, default: [], type: Number }) - receivedBox: number[]; // 引导 + receivedBox: number[]; // 主线宝箱 + @prop({ required: true, default: [], type: Number }) + receivedWarIds: number[]; // 主线关卡奖励 @prop({ required: true, default: false }) gachaHasGuide: boolean; // 是否进行过引导特殊招募 @@ -768,6 +770,11 @@ export default class Role extends BaseModel { let rec: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $push: { receivedBox: { $each: ids } } }, { new: true }).lean(); return rec; } + + public static async receiveWarRewards(roleId: string, ids: number[]) { + let rec: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $push: { receivedWarIds: { $each: ids } } }, { new: true }).lean(); + return rec; + } } export const RoleModel = getModelForClass(Role); diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index f5b1f5f65..c8959eeba 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -106,6 +106,7 @@ import { dicTowerGift, loadTowerGift } from './dictionary/DicTowerGift'; import { dicTowerPvpSubAttr, loadTowerPvpSubAttr } from './dictionary/DicTowerPvpSubAttr'; import { dicSystemOpenTime, loadSystemOpenTime } from "./dictionary/DicSystemOpenTime"; import { dicRandomEffectPoolPlan, loadRandomEffectPoolPlan } from './dictionary/DicRandomEffectPoolPlan'; +import { dicMainWarRewardByChapter, loadMainWarReward } from './dictionary/DicMainWarReward'; export const gameData = { daily: dicDaily, @@ -259,6 +260,7 @@ export const gameData = { heroIdByWar: dicHeroIdByWar, mainBox: dicMainStarBox, mainBoxByChapter: dicMainStarBoxByChapter, + mainWarReward: dicMainWarRewardByChapter, heroTalent: dicHeroTalent, initTalents: initTalents, talentPointOfJob: talentPointOfJob, @@ -1140,6 +1142,7 @@ function loadDatas() { loadTowerPvpSubAttr(); loadSystemOpenTime(); loadRandomEffectPoolPlan(); + loadMainWarReward(); } // 重载dicParam diff --git a/shared/pubUtils/dictionary/DicMainWarReward.ts b/shared/pubUtils/dictionary/DicMainWarReward.ts new file mode 100644 index 000000000..104da3405 --- /dev/null +++ b/shared/pubUtils/dictionary/DicMainWarReward.ts @@ -0,0 +1,33 @@ +// 主线星级宝箱 +import {readFileAndParse, parseGoodStr} from '../util' +import { FILENAME } from '../../consts' +import { RewardInter } from '../interface'; + +export interface DicMainWarReward { + // id + readonly id: number; + // 章节id + readonly chapter: number; + // 主线类型 + readonly warType: number; + // 关卡id + readonly warId: number; + // 奖励 + readonly cityReward: RewardInter[]; +} + +export const dicMainWarRewardByChapter = new Map(); // chapter => ids; +export function loadMainWarReward() { + dicMainWarRewardByChapter.clear(); + + let arr = readFileAndParse(FILENAME.DIC_MAIN_WAR_REWARD); + + arr.forEach(o => { + o.cityReward = parseGoodStr(o.cityReward); + if(!dicMainWarRewardByChapter.has(`${o.warType}_${o.chapter}`)) { + dicMainWarRewardByChapter.set(`${o.warType}_${o.chapter}`, []); + } + dicMainWarRewardByChapter.get(`${o.warType}_${o.chapter}`)?.push(o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_mainCity_reward.json b/shared/resource/jsons/dic_zyz_mainCity_reward.json new file mode 100644 index 000000000..490b604da --- /dev/null +++ b/shared/resource/jsons/dic_zyz_mainCity_reward.json @@ -0,0 +1,632 @@ +[ + { + "id": 1, + "chapter": 1, + "warType": 1, + "warId": 107, + "cityReward": "22001&5" + }, + { + "id": 2, + "chapter": 1, + "warType": 1, + "warId": 112, + "cityReward": "22001&5" + }, + { + "id": 3, + "chapter": 1, + "warType": 1, + "warId": 116, + "cityReward": "22001&5" + }, + { + "id": 4, + "chapter": 1, + "warType": 1, + "warId": 120, + "cityReward": "22001&5" + }, + { + "id": 5, + "chapter": 1, + "warType": 1, + "warId": 124, + "cityReward": "22001&5" + }, + { + "id": 6, + "chapter": 1, + "warType": 1, + "warId": 128, + "cityReward": "22001&5" + }, + { + "id": 7, + "chapter": 2, + "warType": 1, + "warId": 204, + "cityReward": "22001&5" + }, + { + "id": 8, + "chapter": 2, + "warType": 1, + "warId": 208, + "cityReward": "22001&5" + }, + { + "id": 9, + "chapter": 2, + "warType": 1, + "warId": 212, + "cityReward": "22001&5" + }, + { + "id": 10, + "chapter": 2, + "warType": 1, + "warId": 216, + "cityReward": "22001&5" + }, + { + "id": 11, + "chapter": 2, + "warType": 1, + "warId": 220, + "cityReward": "22001&5" + }, + { + "id": 12, + "chapter": 2, + "warType": 1, + "warId": 224, + "cityReward": "22001&5" + }, + { + "id": 13, + "chapter": 3, + "warType": 1, + "warId": 304, + "cityReward": "22001&5" + }, + { + "id": 14, + "chapter": 3, + "warType": 1, + "warId": 308, + "cityReward": "22001&5" + }, + { + "id": 15, + "chapter": 3, + "warType": 1, + "warId": 312, + "cityReward": "22001&5" + }, + { + "id": 16, + "chapter": 3, + "warType": 1, + "warId": 316, + "cityReward": "22001&5" + }, + { + "id": 17, + "chapter": 3, + "warType": 1, + "warId": 320, + "cityReward": "22001&5" + }, + { + "id": 18, + "chapter": 3, + "warType": 1, + "warId": 324, + "cityReward": "22001&5" + }, + { + "id": 19, + "chapter": 4, + "warType": 1, + "warId": 404, + "cityReward": "22001&5" + }, + { + "id": 20, + "chapter": 4, + "warType": 1, + "warId": 408, + "cityReward": "22001&5" + }, + { + "id": 21, + "chapter": 4, + "warType": 1, + "warId": 412, + "cityReward": "22001&5" + }, + { + "id": 22, + "chapter": 4, + "warType": 1, + "warId": 416, + "cityReward": "22001&5" + }, + { + "id": 23, + "chapter": 4, + "warType": 1, + "warId": 420, + "cityReward": "22001&5" + }, + { + "id": 24, + "chapter": 4, + "warType": 1, + "warId": 424, + "cityReward": "22001&5" + }, + { + "id": 25, + "chapter": 5, + "warType": 1, + "warId": 504, + "cityReward": "22001&5" + }, + { + "id": 26, + "chapter": 5, + "warType": 1, + "warId": 508, + "cityReward": "22001&5" + }, + { + "id": 27, + "chapter": 5, + "warType": 1, + "warId": 512, + "cityReward": "22001&5" + }, + { + "id": 28, + "chapter": 5, + "warType": 1, + "warId": 516, + "cityReward": "22001&5" + }, + { + "id": 29, + "chapter": 5, + "warType": 1, + "warId": 520, + "cityReward": "22001&5" + }, + { + "id": 30, + "chapter": 5, + "warType": 1, + "warId": 524, + "cityReward": "22001&5" + }, + { + "id": 31, + "chapter": 5, + "warType": 1, + "warId": 528, + "cityReward": "22001&5" + }, + { + "id": 32, + "chapter": 6, + "warType": 1, + "warId": 604, + "cityReward": "22001&5" + }, + { + "id": 33, + "chapter": 6, + "warType": 1, + "warId": 608, + "cityReward": "22001&5" + }, + { + "id": 34, + "chapter": 6, + "warType": 1, + "warId": 612, + "cityReward": "22001&5" + }, + { + "id": 35, + "chapter": 6, + "warType": 1, + "warId": 616, + "cityReward": "22001&5" + }, + { + "id": 36, + "chapter": 6, + "warType": 1, + "warId": 620, + "cityReward": "22001&5" + }, + { + "id": 37, + "chapter": 6, + "warType": 1, + "warId": 624, + "cityReward": "22001&5" + }, + { + "id": 38, + "chapter": 6, + "warType": 1, + "warId": 628, + "cityReward": "22001&5" + }, + { + "id": 39, + "chapter": 7, + "warType": 1, + "warId": 704, + "cityReward": "22001&5" + }, + { + "id": 40, + "chapter": 7, + "warType": 1, + "warId": 708, + "cityReward": "22001&5" + }, + { + "id": 41, + "chapter": 7, + "warType": 1, + "warId": 712, + "cityReward": "22001&5" + }, + { + "id": 42, + "chapter": 7, + "warType": 1, + "warId": 716, + "cityReward": "22001&5" + }, + { + "id": 43, + "chapter": 7, + "warType": 1, + "warId": 720, + "cityReward": "22001&5" + }, + { + "id": 44, + "chapter": 7, + "warType": 1, + "warId": 724, + "cityReward": "22001&5" + }, + { + "id": 45, + "chapter": 7, + "warType": 1, + "warId": 728, + "cityReward": "22001&5" + }, + { + "id": 46, + "chapter": 1, + "warType": 12, + "warId": 1107, + "cityReward": "22001&5" + }, + { + "id": 47, + "chapter": 1, + "warType": 12, + "warId": 1112, + "cityReward": "22001&5" + }, + { + "id": 48, + "chapter": 1, + "warType": 12, + "warId": 1116, + "cityReward": "22001&5" + }, + { + "id": 49, + "chapter": 1, + "warType": 12, + "warId": 1120, + "cityReward": "22001&5" + }, + { + "id": 50, + "chapter": 1, + "warType": 12, + "warId": 1124, + "cityReward": "22001&5" + }, + { + "id": 51, + "chapter": 1, + "warType": 12, + "warId": 1128, + "cityReward": "22001&5" + }, + { + "id": 52, + "chapter": 2, + "warType": 12, + "warId": 1204, + "cityReward": "22001&5" + }, + { + "id": 53, + "chapter": 2, + "warType": 12, + "warId": 1208, + "cityReward": "22001&5" + }, + { + "id": 54, + "chapter": 2, + "warType": 12, + "warId": 1212, + "cityReward": "22001&5" + }, + { + "id": 55, + "chapter": 2, + "warType": 12, + "warId": 1216, + "cityReward": "22001&5" + }, + { + "id": 56, + "chapter": 2, + "warType": 12, + "warId": 1220, + "cityReward": "22001&5" + }, + { + "id": 57, + "chapter": 2, + "warType": 12, + "warId": 1224, + "cityReward": "22001&5" + }, + { + "id": 58, + "chapter": 3, + "warType": 12, + "warId": 1304, + "cityReward": "22001&5" + }, + { + "id": 59, + "chapter": 3, + "warType": 12, + "warId": 1308, + "cityReward": "22001&5" + }, + { + "id": 60, + "chapter": 3, + "warType": 12, + "warId": 1312, + "cityReward": "22001&5" + }, + { + "id": 61, + "chapter": 3, + "warType": 12, + "warId": 1316, + "cityReward": "22001&5" + }, + { + "id": 62, + "chapter": 3, + "warType": 12, + "warId": 1320, + "cityReward": "22001&5" + }, + { + "id": 63, + "chapter": 3, + "warType": 12, + "warId": 1324, + "cityReward": "22001&5" + }, + { + "id": 64, + "chapter": 4, + "warType": 12, + "warId": 1404, + "cityReward": "22001&5" + }, + { + "id": 65, + "chapter": 4, + "warType": 12, + "warId": 1408, + "cityReward": "22001&5" + }, + { + "id": 66, + "chapter": 4, + "warType": 12, + "warId": 1412, + "cityReward": "22001&5" + }, + { + "id": 67, + "chapter": 4, + "warType": 12, + "warId": 1416, + "cityReward": "22001&5" + }, + { + "id": 68, + "chapter": 4, + "warType": 12, + "warId": 1420, + "cityReward": "22001&5" + }, + { + "id": 69, + "chapter": 4, + "warType": 12, + "warId": 1424, + "cityReward": "22001&5" + }, + { + "id": 70, + "chapter": 5, + "warType": 12, + "warId": 1504, + "cityReward": "22001&5" + }, + { + "id": 71, + "chapter": 5, + "warType": 12, + "warId": 1508, + "cityReward": "22001&5" + }, + { + "id": 72, + "chapter": 5, + "warType": 12, + "warId": 1512, + "cityReward": "22001&5" + }, + { + "id": 73, + "chapter": 5, + "warType": 12, + "warId": 1516, + "cityReward": "22001&5" + }, + { + "id": 74, + "chapter": 5, + "warType": 12, + "warId": 1520, + "cityReward": "22001&5" + }, + { + "id": 75, + "chapter": 5, + "warType": 12, + "warId": 1524, + "cityReward": "22001&5" + }, + { + "id": 76, + "chapter": 5, + "warType": 12, + "warId": 1528, + "cityReward": "22001&5" + }, + { + "id": 77, + "chapter": 6, + "warType": 12, + "warId": 1604, + "cityReward": "22001&5" + }, + { + "id": 78, + "chapter": 6, + "warType": 12, + "warId": 1608, + "cityReward": "22001&5" + }, + { + "id": 79, + "chapter": 6, + "warType": 12, + "warId": 1612, + "cityReward": "22001&5" + }, + { + "id": 80, + "chapter": 6, + "warType": 12, + "warId": 1616, + "cityReward": "22001&5" + }, + { + "id": 81, + "chapter": 6, + "warType": 12, + "warId": 1620, + "cityReward": "22001&5" + }, + { + "id": 82, + "chapter": 6, + "warType": 12, + "warId": 1624, + "cityReward": "22001&5" + }, + { + "id": 83, + "chapter": 6, + "warType": 12, + "warId": 1628, + "cityReward": "22001&5" + }, + { + "id": 84, + "chapter": 7, + "warType": 12, + "warId": 1704, + "cityReward": "22001&5" + }, + { + "id": 85, + "chapter": 7, + "warType": 12, + "warId": 1708, + "cityReward": "22001&5" + }, + { + "id": 86, + "chapter": 7, + "warType": 12, + "warId": 1712, + "cityReward": "22001&5" + }, + { + "id": 87, + "chapter": 7, + "warType": 12, + "warId": 1716, + "cityReward": "22001&5" + }, + { + "id": 88, + "chapter": 7, + "warType": 12, + "warId": 1720, + "cityReward": "22001&5" + }, + { + "id": 89, + "chapter": 7, + "warType": 12, + "warId": 1724, + "cityReward": "22001&5" + }, + { + "id": 90, + "chapter": 7, + "warType": 12, + "warId": 1728, + "cityReward": "22001&5" + } +] \ No newline at end of file