diff --git a/game-server/app/servers/activity/handler/treasureHuntHandler.ts b/game-server/app/servers/activity/handler/treasureHuntHandler.ts index 31e4983b4..e062d97a9 100644 --- a/game-server/app/servers/activity/handler/treasureHuntHandler.ts +++ b/game-server/app/servers/activity/handler/treasureHuntHandler.ts @@ -1,7 +1,7 @@ import { Application, BackendSession, HandlerService, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { ITEM_CHANGE_REASON, STATUS, } from '../../../consts'; -import { getPlayerTreasureHuntData, getTreasureHuntData, getPlayerTreasureHuntShopData, getPlayerTreasureHuntTaskData, getPlayerTreasureHuntTreasureShopData, getPlayerTreasureHuntChallengeData, getPlayerTreasureHuntFirstPageData } from '../../../services/activity/treasureHuntService'; +import { getPlayerTreasureHuntData, getPlayerTreasureHuntShopData, getPlayerTreasureHuntTaskData, getPlayerTreasureHuntTreasureShopData, getPlayerTreasureHuntChallengeData, getPlayerTreasureHuntFirstPageData } from '../../../services/activity/treasureHuntService'; import { ActivityTreasureHuntShopModel } from '../../../db/ActivityTreasureHuntShop'; import { ActivityTreasureHuntTaskModel } from '../../../db/ActivityTreasureHuntTask'; import { handleCost } from '../../../services/role/rewardService'; @@ -37,11 +37,7 @@ export class TreasureHuntHandler { const { activityId } = msg; const roleId = session.get('roleId'); const serverId = session.get('serverId'); - let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } = await getTreasureHuntData(serverId, roleId); - if (!activityData) { - return resResult(STATUS.ACTIVITY_MISSING, {}); - } - let playerData = await getPlayerTreasureHuntData(activityId, serverId, roleId, huntRoundIndex, huntBeginTime, huntEndTime); + let playerData = await getPlayerTreasureHuntData(activityId, serverId, roleId); if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); return resResult(STATUS.SUCCESS, playerData); @@ -58,17 +54,8 @@ export class TreasureHuntHandler { const serverId = session.get('serverId'); const sid = session.get('sid'); const roleName = session.get('roleName'); - - let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } = await getTreasureHuntData(serverId, roleId); - if (!activityData) { - return resResult(STATUS.ACTIVITY_MISSING, {}); - } - if (activityId !== huntActivityId) { - return resResult(STATUS.ACTIVITY_MISSING, {}); - } - - let playerData = await getPlayerTreasureHuntFirstPageData(activityId, serverId, roleId, huntRoundIndex, huntBeginTime, huntEndTime,); + let playerData = await getPlayerTreasureHuntFirstPageData(activityId, serverId, roleId); if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); if (playerData.firstPage.isReceive) { @@ -76,7 +63,7 @@ export class TreasureHuntHandler { } //添加领取记录 - await ActivityTreasureHuntFirstPageModel.receiveReward(serverId, activityId, roleId, huntRoundIndex); + await ActivityTreasureHuntFirstPageModel.receiveReward(serverId, activityId, roleId, playerData.roundIndex); let rewardParamArr: Array = stringToRewardParam(playerData.firstPage.reward); let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.TREASURE_HUNT_FIRST_PAGE_REWARD) @@ -100,16 +87,7 @@ export class TreasureHuntHandler { const sid = session.get('sid'); const roleName = session.get('roleName'); - - let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } = await getTreasureHuntData(serverId, roleId); - if (!activityData) { - return resResult(STATUS.ACTIVITY_MISSING, {}); - } - if (activityId !== huntActivityId) { - return resResult(STATUS.ACTIVITY_MISSING, {}); - } - - let playerData = await getPlayerTreasureHuntShopData(activityId, serverId, roleId, huntRoundIndex, huntBeginTime, huntEndTime,); + let playerData = await getPlayerTreasureHuntShopData(activityId, serverId, roleId,); if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); let item = playerData.shop.getItem(cellIndex); if (!item) { @@ -128,7 +106,7 @@ export class TreasureHuntHandler { if (!resourceResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); //添加购买记录 - await ActivityTreasureHuntShopModel.buyShopRecord(activityId, roleId, huntRoundIndex, playerData.todayIndex, cellIndex); + await ActivityTreasureHuntShopModel.buyShopRecord(activityId, roleId, playerData.roundIndex, playerData.todayIndex, cellIndex); let rewardParamArr: Array = stringToRewardParam(item.reward); let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.TREASURE_HUNT_SHOP_BUY) @@ -151,17 +129,8 @@ export class TreasureHuntHandler { const serverId = session.get('serverId'); const sid = session.get('sid'); const roleName = session.get('roleName'); - - let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } = await getTreasureHuntData(serverId, roleId); - if (!activityData) { - return resResult(STATUS.ACTIVITY_MISSING, {}); - } - if (activityId !== huntActivityId) { - return resResult(STATUS.ACTIVITY_MISSING, {}); - } - - let playerData = await getPlayerTreasureHuntTaskData(activityId, serverId, roleId, huntRoundIndex, huntBeginTime, huntEndTime,); + let playerData = await getPlayerTreasureHuntTaskData(activityId, serverId, roleId); if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); let item = playerData.tasks.getItem(cellIndex); if (!item) { @@ -175,7 +144,7 @@ export class TreasureHuntHandler { } //添加购买记录 - await ActivityTreasureHuntTaskModel.receiveReward(serverId, activityId, roleId, huntRoundIndex, cellIndex, 1); + await ActivityTreasureHuntTaskModel.receiveReward(serverId, activityId, roleId, playerData.roundIndex, cellIndex, 1); let rewardParamArr: Array = stringToRewardParam(item.reward); let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.TREASURE_HUNT_TASK_REWARD) @@ -198,17 +167,8 @@ export class TreasureHuntHandler { const serverId = session.get('serverId'); const sid = session.get('sid'); const roleName = session.get('roleName'); - - let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } = await getTreasureHuntData(serverId, roleId); - if (!activityData) { - return resResult(STATUS.ACTIVITY_MISSING, {}); - } - if (activityId !== huntActivityId) { - return resResult(STATUS.ACTIVITY_MISSING, {}); - } - - let playerData = await getPlayerTreasureHuntChallengeData(activityId, serverId, roleId, huntRoundIndex, huntBeginTime, huntEndTime,); + let playerData = await getPlayerTreasureHuntChallengeData(activityId, serverId, roleId,); if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); let challengeData = playerData.challenge; //消耗资源 @@ -222,7 +182,7 @@ export class TreasureHuntHandler { let warId = playerData.challenge.resultWarId; if(!warId) { warId = playerData.challenge.randomGK(); - await ActivityTreasureHuntChallengeModel.setWarId(serverId, activityId, roleId, huntRoundIndex, warId); + await ActivityTreasureHuntChallengeModel.setWarId(serverId, activityId, roleId, playerData.roundIndex, warId); } return resResult(STATUS.SUCCESS, Object.assign({ warId }, { @@ -241,17 +201,8 @@ export class TreasureHuntHandler { const serverId = session.get('serverId'); const sid = session.get('sid'); const roleName = session.get('roleName'); - - let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } = await getTreasureHuntData(serverId, roleId); - if (!activityData) { - return resResult(STATUS.ACTIVITY_MISSING, {}); - } - if (activityId !== huntActivityId) { - return resResult(STATUS.ACTIVITY_MISSING, {}); - } - - let playerData = await getPlayerTreasureHuntTreasureShopData(activityId, serverId, roleId, huntRoundIndex, huntBeginTime, huntEndTime,); + let playerData = await getPlayerTreasureHuntTreasureShopData(activityId, serverId, roleId,); if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); let item = playerData.treasureShop.getItem(cellIndex); if (!item) { @@ -267,7 +218,7 @@ export class TreasureHuntHandler { if (!resourceResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); //添加购买记录 - await ActivityTreasureHuntTreasureShopModel.addRecord(activityId, roleId, huntRoundIndex, cellIndex); + await ActivityTreasureHuntTreasureShopModel.addRecord(activityId, roleId, playerData.roundIndex, cellIndex); let rewardParamArr: Array = stringToRewardParam(item.reward); let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.TREASURE_HUNT_SP_SHOP_BUY) diff --git a/game-server/app/services/activity/activityService.ts b/game-server/app/services/activity/activityService.ts index 1236cc118..4ff89d331 100644 --- a/game-server/app/services/activity/activityService.ts +++ b/game-server/app/services/activity/activityService.ts @@ -11,7 +11,7 @@ import { getPlayerVipRechargeMoneyData, } from './vipRechargeMoneyService'; import { getPlayerActivityData, } from './selfServiceShopActivityService'; import { ActivitySelfServiceGoodsModel } from '../../db/ActivitySelfServiceGoods'; import moment = require('moment'); -import { getPlayerTreasureHuntData, getTreasureHuntData } from './treasureHuntService'; +import { getPlayerTreasureHuntDataShow } from './treasureHuntService'; import { getPopUpShopDataShow } from './popUpShopService'; import { getPlayerSevenDaysData } from './sevenDaysService'; import { getPlayerDailyMealData } from './dailyMealService'; @@ -123,8 +123,7 @@ export async function getActivity(serverId: number, roleId: string, guildCode: s } case ACTIVITY_TYPE.TREASURE_HUNT://寻宝骑兵活动 23 { - let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex } = await getTreasureHuntData(serverId, roleId); - activityData = await getPlayerTreasureHuntData(activityId, serverId, roleId, huntRoundIndex, huntBeginTime, huntEndTime); + activityData = await getPlayerTreasureHuntDataShow(activityId, serverId, roleId); break; } case ACTIVITY_TYPE.POP_UP_SHOP://弹出商店 24 diff --git a/game-server/app/services/activity/treasureHuntService.ts b/game-server/app/services/activity/treasureHuntService.ts index c0ab97d41..70f5c1f26 100644 --- a/game-server/app/services/activity/treasureHuntService.ts +++ b/game-server/app/services/activity/treasureHuntService.ts @@ -1,86 +1,23 @@ -import moment = require('moment'); -import { ACTIVITY_TYPE, ITEM_CHANGE_REASON, SERVER_OPEN_TIME, STATUS } from '../../consts'; -import { ActivityModel, ActivityModelType } from '../../db/Activity'; -import { ActivityTreasureHuntShopModel, ActivityTreasureHuntShopModelType } from '../../db/ActivityTreasureHuntShop'; -import { ActivityTreasureHuntTaskModel, ActivityTreasureHuntTaskModelType } from '../../db/ActivityTreasureHuntTask'; -import { ActivityTreasureHuntTreasureShopModel, ActivityTreasureHuntTreasureShopModelType } from '../../db/ActivityTreasureHuntTreasureShop'; -import { ActivityTreasureHuntFirstPageModel, ActivityTreasureHuntFirstPageModelType } from '../../db/ActivityTreasureHuntFirstPage'; -import { ServerlistModel } from '../../db/Serverlist'; -import { ServerTempModel, ServerTempModelType } from '../../db/ServerTemp'; +import { ITEM_CHANGE_REASON, STATUS, TREASURE_HUNT_DATA_TYPE } from '../../consts'; +import { ActivityTreasureHuntShopModel } from '../../db/ActivityTreasureHuntShop'; +import { ActivityTreasureHuntTaskModel } from '../../db/ActivityTreasureHuntTask'; +import { ActivityTreasureHuntTreasureShopModel } from '../../db/ActivityTreasureHuntTreasureShop'; +import { ActivityTreasureHuntFirstPageModel } from '../../db/ActivityTreasureHuntFirstPage'; import { TreasureHuntData } from '../../domain/activityField/treasureHuntField'; -import { deltaDays } from '../../pubUtils/util'; import { addReward, stringToConsumeParam, stringToRewardParam } from './giftPackageService'; import { RewardParam } from '../../domain/activityField/rewardField'; -import { RoleModel } from '../../db/Role'; -import { getActivitiesByType, getActivityById } from './activityService'; +import { getActivityById, getActivityByServerId } from './activityService'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; import { handleCost } from '../role/rewardService'; import { ActivityTreasureHuntChallengeModel } from '../../db/ActivityTreasureHuntChallenge'; -/** - * 获取活动数据 - * - * @param {number} serverId 区Id - * @param {number} type 活动类型 ACTIVITY_TYPE - * @param {string} roleId 角色Id - * - */ - -export async function treasureHuntActivity(serverId: number, roleId: string) { - let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } = await getTreasureHuntData(serverId, roleId); - if (!activityData) { - return null; +export async function getPlayerTreasureHuntDataShow(activityId: number, serverId: number, roleId: string) { + let playerData = await getPlayerTreasureHuntData(activityId, serverId, roleId); + if(playerData && playerData.canShow && playerData.canShow()) { + return playerData.getShowResult(); } - - let createTime = await getRoleCreateTime(roleId); - let serverTime = await getServerCreateTime(serverId); - let playerData = new TreasureHuntData(activityData, createTime, serverTime); - playerData.beginTime = moment(huntBeginTime).valueOf(); - playerData.endTime = moment(huntEndTime).valueOf(); - playerData.todayIndex = deltaDays(moment(huntBeginTime).startOf('d').toDate(), new Date) + 1;; - playerData.roundIndex = huntRoundIndex; - - let playerTreasureFirstPageecord: ActivityTreasureHuntFirstPageModelType = await ActivityTreasureHuntFirstPageModel.findData(serverId, activityData.activityId, roleId, huntRoundIndex); - playerData.firstPage.setPlayerFirstPageRecord(playerTreasureFirstPageecord); - let playerShopRecord: ActivityTreasureHuntShopModelType = await ActivityTreasureHuntShopModel.findTreasureData(activityData.activityId, roleId, huntRoundIndex, playerData.todayIndex); - playerData.shop.setPlayerShopRecords(playerShopRecord); - let playerTaskRecord: ActivityTreasureHuntTaskModelType[] = await ActivityTreasureHuntTaskModel.findDataByRoundIndex(serverId, activityData.activityId, roleId, huntRoundIndex); - playerData.tasks.setPlayerTaskRecords(playerTaskRecord); - let playerTreasureShopRecord: ActivityTreasureHuntTreasureShopModelType = await ActivityTreasureHuntTreasureShopModel.findData(activityData.activityId, roleId, huntRoundIndex); - playerData.treasureShop.setPlayerTreasureShopRecords(playerTreasureShopRecord); - - return playerData; + return null } - - -/** - * 获取活动数据 - * - * @param {number} serverId 区Id - * @param {number} type 活动类型 ACTIVITY_TYPE - * @param {string} roleId 角色Id - * - */ - -export async function treasureHuntTaskActivity(serverId: number, roleId: string) { - let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } = await getTreasureHuntData(serverId, roleId); - if (!activityData) { - return null; - } - - let createTime = await getRoleCreateTime(roleId); - let serverTime = await getServerCreateTime(serverId); - let playerData = new TreasureHuntData(activityData, createTime, serverTime); - playerData.beginTime = moment(huntBeginTime).valueOf(); - playerData.endTime = moment(huntEndTime).valueOf(); - playerData.todayIndex = deltaDays(moment(huntBeginTime).startOf('d').toDate(), new Date) + 1;; - playerData.roundIndex = huntRoundIndex; - - let playerTaskRecord: ActivityTreasureHuntTaskModelType[] = await ActivityTreasureHuntTaskModel.findDataByRoundIndex(serverId, activityData.activityId, roleId, huntRoundIndex); - playerData.tasks.setPlayerTaskRecords(playerTaskRecord); - return playerData; -} - /** * 玩家活动数据 * @@ -89,234 +26,56 @@ export async function treasureHuntTaskActivity(serverId: number, roleId: string) * @param {string} roleId 角色Id * */ -export async function getPlayerTreasureHuntData(activityId: number, serverId: number, roleId: string, huntRoundIndex: number, huntBeginTime: Date, huntEndTime: Date) { +export async function getPlayerTreasureHuntData(activityId: number, serverId: number, roleId: string, dataType: TREASURE_HUNT_DATA_TYPE = TREASURE_HUNT_DATA_TYPE.ALL) { let activityData = await getActivityById(activityId); let createTime = await getRoleCreateTime(roleId); let serverTime = await getServerCreateTime(serverId); let playerData = new TreasureHuntData(activityData, createTime, serverTime); - playerData.beginTime = moment(huntBeginTime).valueOf(); - playerData.endTime = moment(huntEndTime).valueOf(); - playerData.todayIndex = deltaDays(moment(huntBeginTime).startOf('d').toDate(), new Date) + 1;; - playerData.roundIndex = huntRoundIndex; - - let playerTreasureFirstPageecord: ActivityTreasureHuntFirstPageModelType = await ActivityTreasureHuntFirstPageModel.findData(serverId, activityId, roleId, huntRoundIndex); - playerData.firstPage.setPlayerFirstPageRecord(playerTreasureFirstPageecord); - let playerShopRecord: ActivityTreasureHuntShopModelType = await ActivityTreasureHuntShopModel.findTreasureData(activityId, roleId, huntRoundIndex, playerData.todayIndex); - playerData.shop.setPlayerShopRecords(playerShopRecord); - let playerTaskRecord: ActivityTreasureHuntTaskModelType[] = await ActivityTreasureHuntTaskModel.findDataByRoundIndex(serverId, activityId, roleId, huntRoundIndex); - playerData.tasks.setPlayerTaskRecords(playerTaskRecord); - let playerTreasureShopRecord: ActivityTreasureHuntTreasureShopModelType = await ActivityTreasureHuntTreasureShopModel.findData(activityId, roleId, huntRoundIndex); - playerData.treasureShop.setPlayerTreasureShopRecords(playerTreasureShopRecord); + if(dataType == TREASURE_HUNT_DATA_TYPE.FIRST_PAGE || dataType == TREASURE_HUNT_DATA_TYPE.ALL) { + let playerTreasureFirstPageRecord = await ActivityTreasureHuntFirstPageModel.findData(serverId, activityId, roleId, playerData.roundIndex); + playerData.firstPage.setPlayerFirstPageRecord(playerTreasureFirstPageRecord); + } + if (dataType == TREASURE_HUNT_DATA_TYPE.SHOP || dataType == TREASURE_HUNT_DATA_TYPE.ALL) { + let playerShopRecord = await ActivityTreasureHuntShopModel.findTreasureData(activityId, roleId, playerData.roundIndex, playerData.todayIndex); + playerData.shop.setPlayerShopRecords(playerShopRecord); + } + if (dataType == TREASURE_HUNT_DATA_TYPE.TASK || dataType == TREASURE_HUNT_DATA_TYPE.ALL) { + let playerTaskRecord = await ActivityTreasureHuntTaskModel.findDataByRoundIndex(serverId, activityId, roleId, playerData.roundIndex); + playerData.tasks.setPlayerTaskRecords(playerTaskRecord); + } + if(dataType == TREASURE_HUNT_DATA_TYPE.TREASURE_SHOP || dataType == TREASURE_HUNT_DATA_TYPE.ALL) { + let playerTreasureShopRecord = await ActivityTreasureHuntTreasureShopModel.findData(activityId, roleId, playerData.roundIndex); + playerData.treasureShop.setPlayerTreasureShopRecords(playerTreasureShopRecord); + } + if(dataType == TREASURE_HUNT_DATA_TYPE.CHALLENGE || dataType == TREASURE_HUNT_DATA_TYPE.ALL) { + let playerRecord = await ActivityTreasureHuntChallengeModel.findData(serverId, activityId, roleId, playerData.roundIndex); + playerData.challenge.setChallengeRecord(playerRecord) + } return playerData; } -export async function getPlayerTreasureHuntFirstPageData(activityId: number, serverId: number, roleId: string, huntRoundIndex: number, huntBeginTime: Date, huntEndTime: Date) { - let activityData: ActivityModelType = await getActivityById(activityId); - - let createTime = await getRoleCreateTime(roleId); - let serverTime = await getServerCreateTime(serverId); - let playerData = new TreasureHuntData(activityData, createTime, serverTime); - playerData.beginTime = moment(huntBeginTime).valueOf(); - playerData.endTime = moment(huntEndTime).valueOf(); - playerData.todayIndex = deltaDays(moment(huntBeginTime).startOf('d').toDate(), new Date) + 1;; - playerData.roundIndex = huntRoundIndex; - - let playerTreasureFirstPageecord: ActivityTreasureHuntFirstPageModelType = await ActivityTreasureHuntFirstPageModel.findData(serverId, activityId, roleId, huntRoundIndex); - playerData.firstPage.setPlayerFirstPageRecord(playerTreasureFirstPageecord); - return playerData; +export async function getPlayerTreasureHuntFirstPageData(activityId: number, serverId: number, roleId: string) { + return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.FIRST_PAGE); } -export async function getPlayerTreasureHuntShopData(activityId: number, serverId: number, roleId: string, huntRoundIndex: number, huntBeginTime: Date, huntEndTime: Date) { - let activityData: ActivityModelType = await getActivityById(activityId); - - let createTime = await getRoleCreateTime(roleId); - let serverTime = await getServerCreateTime(serverId); - let playerData = new TreasureHuntData(activityData, createTime, serverTime); - playerData.beginTime = moment(huntBeginTime).valueOf(); - playerData.endTime = moment(huntEndTime).valueOf(); - playerData.todayIndex = deltaDays(moment(huntBeginTime).startOf('d').toDate(), new Date) + 1;; - playerData.roundIndex = huntRoundIndex; - - let playerShopRecord: ActivityTreasureHuntShopModelType = await ActivityTreasureHuntShopModel.findTreasureData(activityId, roleId, huntRoundIndex, playerData.todayIndex); - playerData.shop.setPlayerShopRecords(playerShopRecord); - return playerData; +export async function getPlayerTreasureHuntShopData(activityId: number, serverId: number, roleId: string) { + return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.SHOP); } -export async function getPlayerTreasureHuntTaskData(activityId: number, serverId: number, roleId: string, huntRoundIndex: number, huntBeginTime: Date, huntEndTime: Date) { - let activityData: ActivityModelType = await getActivityById(activityId); - - let createTime = await getRoleCreateTime(roleId); - let serverTime = await getServerCreateTime(serverId); - let playerData = new TreasureHuntData(activityData, createTime, serverTime); - playerData.beginTime = moment(huntBeginTime).valueOf(); - playerData.endTime = moment(huntEndTime).valueOf(); - playerData.todayIndex = deltaDays(moment(huntBeginTime).startOf('d').toDate(), new Date) + 1;; - playerData.roundIndex = huntRoundIndex; - - let playerTaskRecord: ActivityTreasureHuntTaskModelType[] = await ActivityTreasureHuntTaskModel.findDataByRoundIndex(serverId, activityId, roleId, huntRoundIndex); - playerData.tasks.setPlayerTaskRecords(playerTaskRecord); - return playerData; +export async function getPlayerTreasureHuntTaskData(activityId: number, serverId: number, roleId: string) { + return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.TREASURE_SHOP); } -export async function getPlayerTreasureHuntChallengeData(activityId: number, serverId: number, roleId: string, huntRoundIndex: number, huntBeginTime: Date, huntEndTime: Date) { - let activityData: ActivityModelType = await getActivityById(activityId); - - let createTime = await getRoleCreateTime(roleId); - let serverTime = await getServerCreateTime(serverId); - let playerData = new TreasureHuntData(activityData, createTime, serverTime); - playerData.beginTime = moment(huntBeginTime).valueOf(); - playerData.endTime = moment(huntEndTime).valueOf(); - playerData.todayIndex = deltaDays(moment(huntBeginTime).startOf('d').toDate(), new Date) + 1;; - playerData.roundIndex = huntRoundIndex; - - let playerRecord = await ActivityTreasureHuntChallengeModel.findData(serverId, activityId, roleId, huntRoundIndex); - playerData.challenge.setChallengeRecord(playerRecord) - - return playerData; +export async function getPlayerTreasureHuntChallengeData(activityId: number, serverId: number, roleId: string) { + return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.CHALLENGE); } -export async function getPlayerTreasureHuntTreasureShopData(activityId: number, serverId: number, roleId: string, huntRoundIndex: number, huntBeginTime: Date, huntEndTime: Date) { - let activityData: ActivityModelType = await getActivityById(activityId); - - let createTime = await getRoleCreateTime(roleId); - let serverTime = await getServerCreateTime(serverId); - let playerData = new TreasureHuntData(activityData, createTime, serverTime); - playerData.beginTime = moment(huntBeginTime).valueOf(); - playerData.endTime = moment(huntEndTime).valueOf(); - playerData.todayIndex = deltaDays(moment(huntBeginTime).startOf('d').toDate(), new Date) + 1;; - playerData.roundIndex = huntRoundIndex; - - let playerTreasureShopRecord: ActivityTreasureHuntTreasureShopModelType = await ActivityTreasureHuntTreasureShopModel.findData(activityId, roleId, huntRoundIndex); - playerData.treasureShop.setPlayerTreasureShopRecords(playerTreasureShopRecord); - return playerData; +export async function getPlayerTreasureHuntTreasureShopData(activityId: number, serverId: number, roleId: string) { + return await getPlayerTreasureHuntData(activityId, serverId, roleId, TREASURE_HUNT_DATA_TYPE.TREASURE_SHOP); } -//获取当前活动的周期等数据 -export async function getTreasureHuntData(serverId: number, roleId: string) { - let tempData: ServerTempModelType = await ServerTempModel.findData(serverId); - let now = moment(new Date()).toDate(); - let activityData: ActivityModelType = null; //当前活动数据 - - if (!tempData) {//开始新周期 - let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex } = await getNewActivityData(serverId, roleId); - if (huntActivityId === 0) { - return { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } - } - tempData = await ServerTempModel.updateTreasureHuntData(serverId, huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex); - activityData = await getActivityById(huntActivityId); - return { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } - } - if (now > tempData.huntEndTime) {//活动过期 - let data = await getNextActivityData(serverId, roleId, tempData.huntActivityId, tempData.huntEndTime, tempData.huntRoundIndex); - if(!data) { - return { activityData: null } - } - let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex } = data; - if (huntActivityId === 0) { - return { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } - } - tempData = await ServerTempModel.updateTreasureHuntData(serverId, huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex); - activityData = await getActivityById(huntActivityId); - return { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } - } - if (!activityData) { - activityData = await getActivityById(tempData.huntActivityId); - } - return { - huntActivityId: tempData.huntActivityId, - huntBeginTime: tempData.huntBeginTime, - huntEndTime: tempData.huntEndTime, - huntRoundIndex: tempData.huntRoundIndex, - activityData - } -} - -async function getNewActivityData(serverId: number, roleId: string) { - let huntActivityId: number = 0; // 寻宝骑兵-活动Id - let huntEndTime: Date = null; // 寻宝骑兵-结束时间 - let huntRoundIndex: number = 0; // 寻宝骑兵-周期数 - let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.TREASURE_HUNT); - let treasureHuntDataArray: TreasureHuntData[] = []; - let createTime = await getRoleCreateTime(roleId); - let serverTime = await getServerCreateTime(serverId); - for (let obj of activityArray) { - treasureHuntDataArray.push(new TreasureHuntData(obj, createTime, serverTime)); - } - let isOver = false; - let huntBeginTime = moment(SERVER_OPEN_TIME).startOf('d').add(1, 'd').toDate(); - let curDate = moment(new Date()).toDate() - while (!isOver) { - huntRoundIndex++; - for (let data of treasureHuntDataArray) { - let endTime = moment(huntBeginTime).add(data.day, 'd').toDate(); - if (huntBeginTime < curDate && curDate < endTime) { - huntEndTime = moment(endTime).add(-1, 'm').toDate() - huntActivityId = data.activityId; - isOver = true; - } else { - huntBeginTime = endTime; - } - } - if (huntRoundIndex >= 365) {//max - isOver = true; - } - } - return { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex } -} - -async function getNextActivityData(serverId: number, roleId: string, oldHuntActivityId: number, oldHuntEndTime: Date, oldHuntRoundIndex: number) { - let huntActivityId: number = 0; // 寻宝骑兵-活动Id - let huntEndTime: Date = null; // 寻宝骑兵-结束时间 - let huntRoundIndex: number = oldHuntRoundIndex; // 寻宝骑兵-周期数 - let activityArray = await getActivitiesByType(serverId, ACTIVITY_TYPE.TREASURE_HUNT); - let treasureHuntDataArray: TreasureHuntData[] = []; - let createTime = await getRoleCreateTime(roleId); - let serverTime = await getServerCreateTime(serverId); - for (let obj of activityArray) { - treasureHuntDataArray.push(new TreasureHuntData(obj, createTime, serverTime)); - } - let isOver = false; - let huntBeginTime = moment(oldHuntEndTime).add(1, 'd').startOf('d').toDate(); - let curDate = moment(new Date()).toDate() - - let index = treasureHuntDataArray.findIndex(obj => { return obj && obj.activityId === oldHuntActivityId }); - if(index == -1) { - return null - } - for (; index < treasureHuntDataArray.length; index++) { - let data = treasureHuntDataArray[index]; - let endTime = moment(huntBeginTime).add(data.day, 'd').toDate(); - if (huntBeginTime < curDate && curDate < endTime) { - huntEndTime = moment(endTime).add(-1, 'm').toDate() - huntActivityId = data.activityId; - isOver = true; - } else { - huntBeginTime = endTime; - } - } - - while (!isOver) { - huntRoundIndex++; - for (let data of treasureHuntDataArray) { - let endTime = moment(huntBeginTime).add(data.day, 'd').toDate(); - if (huntBeginTime < curDate && curDate < endTime) { - huntEndTime = moment(endTime).add(-1, 'm').toDate() - huntActivityId = data.activityId; - isOver = true; - } else { - huntBeginTime = endTime; - } - } - if (huntRoundIndex >= 365) {//max - isOver = true; - } - } - return { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex } -} - - /** * 购买每日物资 * @@ -329,14 +88,7 @@ async function getNextActivityData(serverId: number, roleId: string, oldHuntActi export async function makeShop(roleId: string, roleName: string, sid: string, serverId: number, activityId: number, productID: string) { // let activityData: ActivityModelType = await ActivityModel.findActivity(activityId); - let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } = await getTreasureHuntData(serverId, roleId); - if (!activityData) { - return { - code: STATUS.ACTIVITY_MISSING, - } - } - - let playerData = await getPlayerTreasureHuntShopData(activityId, serverId, roleId, huntRoundIndex, huntBeginTime, huntEndTime,); + let playerData = await getPlayerTreasureHuntShopData(activityId, serverId, roleId,); if (!playerData) { return { code: STATUS.ACTIVITY_MISSING, @@ -358,7 +110,7 @@ export async function makeShop(roleId: string, roleName: string, sid: string, se let cellIndex = item.cellIndex; //添加购买记录 - await ActivityTreasureHuntShopModel.buyShopRecord(activityId, roleId, huntRoundIndex, playerData.todayIndex, cellIndex); + await ActivityTreasureHuntShopModel.buyShopRecord(activityId, roleId, playerData.roundIndex, playerData.todayIndex, cellIndex); let rewardParamArr: Array = stringToRewardParam(item.reward); let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.TREASURE_HUNT_SHOP_BUY) @@ -371,22 +123,22 @@ export async function makeShop(roleId: string, roleName: string, sid: string, se } export async function treasureHuntChallengeConsume(serverId: number, roleId: string, sid: string) { - let { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex, activityData } = await getTreasureHuntData(serverId, roleId); - if (!activityData) { - return false; + let activities = await getActivityByServerId(serverId); + for(let { activityId } of activities) { + let playerData = await getPlayerTreasureHuntChallengeData(activityId, serverId, roleId,); + if (!playerData) return false; + + if(playerData.canShow()) { + let challengeData = playerData.challenge; + //消耗资源 + let consumeStr = challengeData.consume; + let consume = stringToConsumeParam(consumeStr) + let resourceResult = await handleCost(roleId, sid, consume, ITEM_CHANGE_REASON.TREASURE_HUNT_CHALLENGE); + if (!resourceResult) return false; + + let warId = playerData.challenge.randomGK(); + await ActivityTreasureHuntChallengeModel.setWarId(serverId, activityId, roleId, playerData.roundIndex, warId); + } } - let playerData = await getPlayerTreasureHuntChallengeData(huntActivityId, serverId, roleId, huntRoundIndex, huntBeginTime, huntEndTime,); - if (!playerData) return false; - - let challengeData = playerData.challenge; - //消耗资源 - let consumeStr = challengeData.consume; - let consume = stringToConsumeParam(consumeStr) - let resourceResult = await handleCost(roleId, sid, consume, ITEM_CHANGE_REASON.TREASURE_HUNT_CHALLENGE); - if (!resourceResult) return false; - - let warId = playerData.challenge.randomGK(); - await ActivityTreasureHuntChallengeModel.setWarId(serverId, huntActivityId, roleId, huntRoundIndex, warId); - return true } \ No newline at end of file diff --git a/game-server/app/services/task/taskObj.ts b/game-server/app/services/task/taskObj.ts index 9cbf6b5d8..ee4ee09d9 100644 --- a/game-server/app/services/task/taskObj.ts +++ b/game-server/app/services/task/taskObj.ts @@ -9,7 +9,6 @@ import { ActivityRefreshTaskModel } from "../../db/ActivityRefreshTask"; import { ActivityThirtyDaysModel } from "../../db/ActivityThirtyDays"; import { ActivityTreasureHuntTaskModel } from "../../db/ActivityTreasureHuntTask"; import { RoleModel, RoleType } from "../../db/Role"; -import { ServerTempModel, ServerTempModelType } from "../../db/ServerTemp"; import { UserTaskRecModel } from "../../db/UserTaskRec"; import { GrowthFundData } from "../../domain/activityField/growthFundField"; import { RefreshTaskData } from "../../domain/activityField/refreshTaskField"; @@ -36,7 +35,6 @@ export class CheckTask { taskPushMessages: TaskListReturn[] = []; activityTaskPushMessages = []; - treasureHuntTemp: ServerTempModelType; tasks: CheckSingleTask[] = []; constructor(serverId: number, roleId: string) { @@ -86,19 +84,6 @@ export class CheckTask { return this.roleCreateTime; } - // 神州探秘活动 - async getTreasureHuntTemp() { - if(this.treasureHuntTemp) return this.treasureHuntTemp; - - let tempData: ServerTempModelType = await ServerTempModel.findData(this.serverId); - if (tempData) { - this.treasureHuntTemp = tempData; - return tempData - } else { - return null - } - } - // 推送 public async pushMessage(sid?: string) { let roleId = this.roleId; @@ -259,20 +244,17 @@ export class CheckSingleTask { case ACTIVITY_TYPE.TREASURE_HUNT: { // 寻宝奇兵任务 - let tempData = await this.parent.getTreasureHuntTemp(); - if(tempData && tempData.huntActivityId == activityId) { - let playerData = new TreasureHuntData(activity, roleCreateTime, serverCreateTime); - let taskArray = playerData.tasks.findItemByTaskType(taskType); - for (let task of taskArray) { - let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => { - let data = await ActivityTreasureHuntTaskModel.findDataByCellIndex(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex); - return data?.records ?? []; - }); - if(taskUpdateParam) { - let rec = await ActivityTreasureHuntTaskModel.setOrIncTask(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex, taskType, taskUpdateParam); - if(!rec) continue; - this.addActivityTaskPushMessage({ ...task, totalCount: rec.totalCount, activityId }); - } + let playerData = new TreasureHuntData(activity, roleCreateTime, serverCreateTime); + let taskArray = playerData.tasks.findItemByTaskType(taskType); + for (let task of taskArray) { + let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => { + let data = await ActivityTreasureHuntTaskModel.findDataByCellIndex(serverId, activityId, roleId, playerData.roundIndex, task.cellIndex); + return data?.records ?? []; + }); + if(taskUpdateParam) { + let rec = await ActivityTreasureHuntTaskModel.setOrIncTask(serverId, activityId, roleId, playerData.roundIndex, task.cellIndex, taskType, taskUpdateParam); + if(!rec) continue; + this.addActivityTaskPushMessage({ ...task, totalCount: rec.totalCount, activityId }); } } break; diff --git a/shared/consts/constModules/activityConst.ts b/shared/consts/constModules/activityConst.ts index c6a128a99..f1313deaf 100644 --- a/shared/consts/constModules/activityConst.ts +++ b/shared/consts/constModules/activityConst.ts @@ -191,4 +191,13 @@ export enum POP_UP_SHOP_REFRESH_TIME_TYPE { NATURAL_WEEK = 2, // 自然周 NATURAL_MONTH = 3, // 自然月 DAYS = 4, // 从beginTime开始固定日 +} + +export enum TREASURE_HUNT_DATA_TYPE { + ALL = 0, // 所有 + FIRST_PAGE = 1, + SHOP = 2, + TASK = 3, + CHALLENGE = 4, + TREASURE_SHOP = 5, } \ No newline at end of file diff --git a/shared/db/ServerTemp.ts b/shared/db/ServerTemp.ts index 2589416a3..527fc8d8d 100644 --- a/shared/db/ServerTemp.ts +++ b/shared/db/ServerTemp.ts @@ -10,40 +10,17 @@ export default class ServerTemp extends BaseModel { @prop({ required: true }) serverId: number; // 服Id - @prop({ required: true }) - huntActivityId: number; // 寻宝骑兵-活动Id - @prop({ required: true }) - huntBeginTime: Date; // 寻宝骑兵-开启时间 - @prop({ required: true }) - huntEndTime: Date; // 寻宝骑兵-结束时间 - @prop({ required: true }) - huntRoundIndex: number; // 寻宝骑兵-周期数 - - @prop({ required: true }) getuiToken: string; // 个推token @prop({ required: true }) getuiTokenExpireTime: number; // 个推token过期时间 - //更新寻宝猎人活动数据 - public static async updateTreasureHuntData(serverId: number, huntActivityId: number, huntBeginTime: Date, huntEndTime: Date, huntRoundIndex: number) { - let result: ServerTempModelType = await ServerTempModel.findOneAndUpdate({ serverId }, - { $set: { huntActivityId, huntBeginTime, huntEndTime, huntRoundIndex } }, { upsert: true, new: true }).lean(true); - return result; - } - //查询当前服务器的数据 public static async findData(serverId: number) { let result: ServerTempModelType = await ServerTempModel.findOne({ serverId }).lean(true); return result; } - //删除活动 - public static async deleteActivity(serverId: number) { - let result = await ServerTempModel.deleteMany({ serverId }); - return result; - } - //更新个推token数据 public static async updateGetuiData(getuiToken: string, getuiTokenExpireTime: number) { let result: ServerTempModelType = await ServerTempModel.findOneAndUpdate({ serverId: 0 }, diff --git a/shared/domain/activityField/treasureHuntField.ts b/shared/domain/activityField/treasureHuntField.ts index 2da1a962a..caf0367fe 100644 --- a/shared/domain/activityField/treasureHuntField.ts +++ b/shared/domain/activityField/treasureHuntField.ts @@ -1,4 +1,4 @@ -import { random } from 'underscore'; +import { pick, random } from 'underscore'; import { ActivityModelType } from '../../db/Activity'; import { ActivityTreasureHuntShopModelType } from '../../db/ActivityTreasureHuntShop'; import { ActivityTreasureHuntTaskModelType } from '../../db/ActivityTreasureHuntTask'; @@ -7,46 +7,125 @@ import { ActivityTreasureHuntFirstPageModelType } from '../../db/ActivityTreasur import { parseNumberList, splitString } from '../../pubUtils/util'; import { ActivityBase } from './activityField'; import { ActivityTreasureHuntChallengeModelTypeParam } from '../../db/ActivityTreasureHuntChallenge'; +import { TREASURE_HUNT_DATA_TYPE } from '../../consts'; + +// 首页 +interface TreasureHuntFirstPageInDb { + index: TREASURE_HUNT_DATA_TYPE.FIRST_PAGE; + name: string; // 页签名 + reward: string; // 奖励 + imageName: string; // 图片 +} + +// 商店 +interface TreasureHuntShopItemConsumeInDb { + count: number, // 第几次 + consume: string, // 消耗 type&id&count + discount: number, // 折扣 +} + +interface TreasureHuntShopItemInDb { + cellIndex: number; // 第几项 + name: string; // 礼包名 + productID: string; // 商品id + price: number; // 价格 + countMax: number; // 限购数量 + discount: number; // 折扣 + reward: string; // 奖励 + imageName: string; // 图片 + data: TreasureHuntShopItemConsumeInDb[]; // 消耗 +} + +interface TreasureHuntShopInDb { + index: TREASURE_HUNT_DATA_TYPE.SHOP; // 2. 每日物资,即商店 + name: string; // 页签名 + data: TreasureHuntShopItemInDb[]; +} + +// 任务 +interface TreasureHuntTaskItemInDb { + cellIndex: number; // 第几项 + name: string; // 任务名 + taskType: number; // 任务类型 + taskParam: string; // 任务参数 + condition: number; // 条件 + reward: string; // 奖励 type&id&count + fragment: number; // 前端显示 碎片数量 + skip: string; // 前端用 跳转 +} + +interface TreasureHuntTaskInDb { + index: TREASURE_HUNT_DATA_TYPE.TASK; // 3. 任务 + name: string; // 页签名 + reward: string; // 奖励 type&id&count + data: TreasureHuntTaskItemInDb[]; // 任务 +} + +// 关卡 +interface TreasureHuntChallengeInDb { + index: TREASURE_HUNT_DATA_TYPE.CHALLENGE; // 4. 关卡 + name: string; // 页签名 + consume: string; // 消耗 + warid: string; // 关卡 + fixReward: string; // 奖励 type&id&count + jackpotReward: string; // 随机奖励 + imageName: string; // 图标 +} + +// 高级商店 +interface TreasureHuntTreasureShopItemInDb { + cellIndex: number; // 第几项 + name: string; // 礼包名 + reward: string; // 奖励 + countMax: number; // 限购数量 + imageName: string; // 图片 + consume: string; // 消耗 +} +interface TreasureHuntTreasureShopInDb { + index: TREASURE_HUNT_DATA_TYPE.TREASURE_SHOP; // 4. 关卡 + name: string; // 页签名 + data: TreasureHuntTreasureShopItemInDb[]; // 消耗 +} +interface TreasureHuntInDb { + data: (TreasureHuntFirstPageInDb|TreasureHuntShopInDb|TreasureHuntTaskInDb|TreasureHuntChallengeInDb|TreasureHuntTreasureShopInDb)[]; +} +/************************************************************/ +// 操作数据 // 进入活动首页的数据 export class TreasureHuntFirstPageData { - name: string = '';//页签名字 - index: number = 0;//下标 - reward: string = '';//奖励 - imageName: string = ''; + index: number; //下标 + name: string; //页签名字 + reward: string; //奖励 + imageName: string; isReceive: boolean = false;//是否领取 - public setPlayerFirstPageRecord(record: ActivityTreasureHuntFirstPageModelType) { - this.isReceive = false; - if (!record) { - return; - } - this.isReceive = record.isReceive ? record.isReceive : false; + constructor(data: TreasureHuntFirstPageInDb) { + this.initData(data) } - public initData(data: any) { + public initData(data: TreasureHuntFirstPageInDb) { this.name = data.name; this.index = data.index; this.reward = data.reward; this.imageName = data.imageName; - this.isReceive = false; } - constructor(data: any) { - this.initData(data) + public setPlayerFirstPageRecord(record: ActivityTreasureHuntFirstPageModelType) { + if (!record) return; + this.isReceive = !!record.isReceive; } } -/************************************************************/ //购买价格 export class ConsumeData { count: number; // 第几次购买,1开始 consume: string; //消耗资源 "2&31002&400" discount: number; // 折扣 - constructor(data: any) { + constructor(data: TreasureHuntShopItemConsumeInDb) { this.count = data.count; this.consume = data.consume; this.discount = data.discount; @@ -63,11 +142,11 @@ export class TreasureHuntShopItem { countMax: number; //最大购买次数 discount: number; //折扣 imageName: string; - consume: ConsumeData[]; //每次购买价格不同 + consume: ConsumeData[] = []; //每次购买价格不同 buyCount: number = 0; //购买过的次数 - constructor(data: any) { + constructor(data: TreasureHuntShopItemInDb) { this.cellIndex = data.cellIndex; this.name = data.name; this.price = data.price; @@ -76,24 +155,41 @@ export class TreasureHuntShopItem { this.countMax = data.countMax; this.discount = data.discount; this.imageName = data.imageName; - this.consume = []; for (let obj of data.data) { this.consume.push(new ConsumeData(obj)) } - this.buyCount = 0; } public getConsume() { let index = this.consume.findIndex(obj => { return obj && obj.count === this.buyCount + 1 }); return (index != -1) ? this.consume[index].consume : ''; } + + public setBuyCount(record: ActivityTreasureHuntShopModelType) { + if (!record) return; + let buyRecords = record.records.filter(obj => { return obj.id === this.cellIndex }); + this.buyCount = buyRecords.length; + } } // 商店数据 export class TreasureHuntShopData { - index: number = 0;//下标 - name: string = '';//页签名字 - list: Array = [];//商品 + index: number; //下标 + name: string; //页签名字 + list: TreasureHuntShopItem[] = [];//商品 + + constructor(data: TreasureHuntShopInDb) { + this.initData(data) + } + + public initData(data: TreasureHuntShopInDb) { + this.index = data.index; + this.name = data.name; + let arr = data.data; + for (let obj of arr) { + this.list.push(new TreasureHuntShopItem(obj)) + } + } public findProductID(productID: string): TreasureHuntShopItem { let index = this.list.findIndex(obj => { return obj && obj.productID === productID }) @@ -110,24 +206,9 @@ export class TreasureHuntShopData { return; } for (let item of this.list) { - let buyRecords = record.records.filter(obj => { return obj.id === item.cellIndex }); - item.buyCount = buyRecords.length; + item.setBuyCount(record); } } - - - public initData(data: any) { - this.index = data.index; - this.name = data.name; - let arr = data.data; - for (let obj of arr) { - this.list.push(new TreasureHuntShopItem(obj)) - } - } - - constructor(data: any) { - this.initData(data) - } } /************************************************************/ @@ -143,45 +224,63 @@ export class TreasureHuntTaskItem { fragment: number; //碎片 skip: string; - taskParamArray: number[]; // 任务参数 + taskParamArray: number[] = []; // 任务参数 totalCount: number = 0; //任务统计 isReceive: boolean = false; //是否领取奖励 - constructor(data: any) { + constructor(data: TreasureHuntTaskItemInDb) { this.cellIndex = data.cellIndex; this.name = data.name; this.taskType = data.taskType; this.taskParam = data.taskParam; - this.taskParamArray = parseNumberList(data.taskParamArray); + this.taskParamArray = parseNumberList(data.taskParam); this.condition = data.condition; this.reward = data.reward; this.fragment = data.fragment; this.skip = data.skip; - this.totalCount = 0; - this.isReceive = false; + } + + setPlayerRecord(record: ActivityTreasureHuntTaskModelType) { + if(!record) return; + this.totalCount = record.totalCount||0; + this.isReceive = record.receiveRewardCount ? true : false; + } + + public getShowResult() { + return pick(this, ['cellIndex', 'name', 'taskType', 'condition', 'reward', 'fragment', 'skip', 'totalCount', 'isReceive']) } } // 寻宝备战数据 export class TreasureHuntTaskData { - name: string = '';//页签名字 - index: number = 0;//下标 - reward: string = '';//奖励 - fragment: number = 0;//碎片需求量 - list: Array = [];//任务 + name: string; //页签名字 + index: number; //下标 + reward: string; //奖励 + list: TreasureHuntTaskItem[] = [];//任务 + + constructor(data: TreasureHuntTaskInDb) { + this.initData(data) + } + + public initData(data: TreasureHuntTaskInDb) { + this.name = data.name; + this.index = data.index; + this.reward = data.reward; + let arr = data.data||[]; + for (let obj of arr) { + this.list.push(new TreasureHuntTaskItem(obj)) + } + } public getItem(cellIndex: number): TreasureHuntTaskItem { let index = this.list.findIndex(obj => { return obj && obj.cellIndex === cellIndex }); return (index != -1) ? this.list[index] : null } - public setPlayerTaskRecords(record: ActivityTreasureHuntTaskModelType[]) { - for (let item of this.list) { - let index = record.findIndex(obj => { return obj.cellIndex === item.cellIndex }); - if (index != -1) { - item.totalCount = record[index].totalCount ? record[index].totalCount : 0; - item.isReceive = record[index].receiveRewardCount ? true : false; - } + public setPlayerTaskRecords(records: ActivityTreasureHuntTaskModelType[]) { + for(let record of records) { + let item = this.getItem(record.cellIndex); + if(item) item.setPlayerRecord(record); } } @@ -189,43 +288,32 @@ export class TreasureHuntTaskData { return this.list.filter(obj => { return obj && obj.taskType === type }); } - public initData(data: any) { - this.name = data.name; - this.index = data.index; - this.reward = data.reward; - this.fragment = data.fragment; - let arr = data.data; - for (let obj of arr) { - this.list.push(new TreasureHuntTaskItem(obj)) + public getShowResult() { + return { + ...this, list: this.list.map(item => item.getShowResult()) } } - - constructor(data: any) { - this.initData(data) - } } /************************************************************/ // 寻宝大冒险的数据 export class TreasureHuntChallengeData { - name: string = '';//页签名字 - index: number = 0;//下标 - consume: string = '';//消耗 - warid: string = '';//随机的关卡号 - fixReward: string = '';//客户端显示奖励 - jackpotReward: string = '';//客户端显示奖励 - imageName: string = ''; + name: string; // 页签名字 + index: number; // 下标 + consume: string; // 消耗 + warid: string; // 随机的关卡号 + fixReward: string; // 客户端显示奖励 + jackpotReward: string;// 客户端显示奖励 + imageName: string; resultWarId: number = 0; // 玩家随机出的关卡id - public randomGK() { - let gkArray = splitString(this.warid, '&'); - let index = random(gkArray.length - 1); - return gkArray[index]; + constructor(data: TreasureHuntChallengeInDb) { + this.initData(data) } - public initData(data: any) { + public initData(data: TreasureHuntChallengeInDb) { this.name = data.name; this.index = data.index; this.consume = data.consume; @@ -235,15 +323,17 @@ export class TreasureHuntChallengeData { this.imageName = data.imageName; } + public randomGK() { + let gkArray = splitString(this.warid, '&'); + let index = random(gkArray.length - 1); + return gkArray[index]; + } + public setChallengeRecord(record: ActivityTreasureHuntChallengeModelTypeParam) { if(record) { this.resultWarId = record.warId; } } - - constructor(data: any) { - this.initData(data) - } } @@ -252,31 +342,48 @@ export class TreasureHuntChallengeData { //天子宝库 // 商品的数据 export class TreasureHuntTreasureShopItem { - cellIndex: number; // 第几个,从1开始 - name: string; //名称 - reward: string; //奖励 - countMax: number; //最大购买次数 + cellIndex: number; // 第几个,从1开始 + name: string; //名称 + reward: string; //奖励 + countMax: number; //最大购买次数 imageName: string; - consume: ""; //购买价格 + consume: string; //购买价格 buyCount: number = 0; //购买过的次数 - constructor(data: any) { + constructor(data: TreasureHuntTreasureShopItemInDb) { this.cellIndex = data.cellIndex; this.name = data.name; this.reward = data.reward; this.countMax = data.countMax; this.imageName = data.imageName; this.consume = data.consume; - this.buyCount = 0; + } + + setPlayerRecord(record: ActivityTreasureHuntTreasureShopModelType) { + let buyRecords = record.records.filter(obj => { return obj.id === this.cellIndex }); + this.buyCount = buyRecords.length; } } // 天子宝库商店数据 export class TreasureHuntTreasureShopData { - index: number = 0;//下标 - name: string = '';//页签名字 - list: Array = [];//商品 + index: number;//下标 + name: string;//页签名字 + list: TreasureHuntTreasureShopItem[] = [];//商品 + + constructor(data: TreasureHuntTreasureShopInDb) { + this.initData(data) + } + + public initData(data: TreasureHuntTreasureShopInDb) { + this.index = data.index; + this.name = data.name; + let arr = data.data||[]; + for (let obj of arr) { + this.list.push(new TreasureHuntTreasureShopItem(obj)) + } + } public getItem(cellIndex: number): TreasureHuntTreasureShopItem { let index = this.list.findIndex(obj => { return obj && obj.cellIndex === cellIndex }) @@ -288,70 +395,51 @@ export class TreasureHuntTreasureShopData { return; } for (let item of this.list) { - let buyRecords = record.records.filter(obj => { return obj.id === item.cellIndex }); - item.buyCount = buyRecords.length; + item.setPlayerRecord(record); } } - - public initData(data: any) { - this.index = data.index; - this.name = data.name; - let arr = data.data; - for (let obj of arr) { - this.list.push(new TreasureHuntTreasureShopItem(obj)) - } - } - - constructor(data: any) { - this.initData(data) - } } /************************************************************/ // 寻宝骑兵活动数据 export class TreasureHuntData extends ActivityBase { - name: string = '';//活动名字 - day: string = '';//活动持续时间 - // roundIndex = 0;//周期数 firstPage: TreasureHuntFirstPageData = null;//首页奖励 shop: TreasureHuntShopData = null; //每日物资 tasks: TreasureHuntTaskData = null; //寻宝备战 challenge: TreasureHuntChallengeData = null;//寻宝大冒险 treasureShop: TreasureHuntTreasureShopData = null; //天子宝库(商店) - - public initData(data: any) { - let dataObj = JSON.parse(data); - this.name = dataObj.name; - this.day = dataObj.day; - - let arr = dataObj.data; - { - let index = arr.findIndex(obj => { return obj.index === 1 }); - this.firstPage = new TreasureHuntFirstPageData(arr[index]); - } - { - let index = arr.findIndex(obj => { return obj.index === 2 }); - this.shop = new TreasureHuntShopData(arr[index]); - } - { - let index = arr.findIndex(obj => { return obj.index === 3 }); - this.tasks = new TreasureHuntTaskData(arr[index]); - } - { - let index = arr.findIndex(obj => { return obj.index === 4 }); - this.challenge = new TreasureHuntChallengeData(arr[index]); - } - { - let index = arr.findIndex(obj => { return obj.index === 5 }); - this.treasureShop = new TreasureHuntTreasureShopData(arr[index]); - } - } - constructor(activityData: ActivityModelType, createTime: number, sererTime: number) { super(activityData, createTime, sererTime); this.initData(activityData.data) } + + public initData(data: string) { + let dataObj: TreasureHuntInDb = JSON.parse(data); + + let arr = dataObj.data||[]; + arr.forEach(data => { + switch(data.index) { + case 1: + this.firstPage = new TreasureHuntFirstPageData(data); break; + case 2: + this.shop = new TreasureHuntShopData(data); break; + case 3: + this.tasks = new TreasureHuntTaskData(data); break; + case 4: + this.challenge = new TreasureHuntChallengeData(data); break; + case 5: + this.treasureShop = new TreasureHuntTreasureShopData(data); break; + } + }); + } + + public getShowResult() { + return { + ...this, + tasks: this.tasks.getShowResult() + } + } } \ No newline at end of file diff --git a/web-server/app/service/Sdk.ts b/web-server/app/service/Sdk.ts index 8f345de11..9168da9a3 100644 --- a/web-server/app/service/Sdk.ts +++ b/web-server/app/service/Sdk.ts @@ -63,7 +63,7 @@ export default class Sdk extends Service { return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.ROLE_NOT_FOUND, ''); } ctx.service.utils.log('DEBUG', `[${ctx.request.url}] [${ctx.logcode}] pay37Callback check role ok`); - if(role.serverId != params.sid) { + if(role.serverId != parseInt(`${params.sid}`)) { return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.SERVER_NOT_FOUND, ''); } ctx.service.utils.log('DEBUG', `[${ctx.request.url}] [${ctx.logcode}] pay37Callback check server ok`);