diff --git a/game-server/app/servers/activity/handler/selfServiceShopHandler.ts b/game-server/app/servers/activity/handler/selfServiceShopHandler.ts index c558524b9..6df87cd28 100644 --- a/game-server/app/servers/activity/handler/selfServiceShopHandler.ts +++ b/game-server/app/servers/activity/handler/selfServiceShopHandler.ts @@ -1,5 +1,5 @@ import { Application, BackendSession } from 'pinus'; -import { deltaDays, resResult } from '../../../pubUtils/util'; +import { decodeArrayListStr, deltaDays, resResult, splitString } from '../../../pubUtils/util'; import { STATUS, ACTIVITY_RESOURCES_TYPE, ACTIVITY_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE } from '../../../consts'; import { SelfServiceShopData, SelfServiceShopItem, SelfServiceShopItemInfo } from '../../../domain/activityField/selfServiceShopField'; import { addItems, handleCost } from '../../../services/rewardService'; @@ -8,8 +8,9 @@ import { ActivitySelfServiceModel, ActivitySelfServiceModelType } from '../../.. import { ActivitySelfServiceGoodsModel, ActivitySelfServiceGoodsModelType } from '../../../db/ActivitySelfServiceGoods'; import moment = require('moment'); import Activity, { ActivityModel, ActivityModelType } from '../../../db/Activity'; -import { addSelfServiceShopGiftReward, getActivityData, getPlayerActivityData } from '../../../services/selfServiceShopActivityService'; +import { addSelfServiceShopGiftReward, getSelfServiceShopActivityData, getPlayerActivityData } from '../../../services/selfServiceShopActivityService'; import { addReward, stringToConsumeParam, stringToRewardParam } from '../../../services/giftPackageService'; +import { random } from 'underscore'; export default function (app: Application) { return new SelfServiceShopHandler(app); @@ -32,7 +33,7 @@ export class SelfServiceShopHandler { const roleId = session.get('roleId'); const serverId = session.get('serverId'); - let playerData = await getActivityData(serverId, roleId) + let playerData = await getSelfServiceShopActivityData(serverId, roleId) if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); let playerGoods = await ActivitySelfServiceGoodsModel.findData(playerData.activityId, roleId, playerData.roundIndex, true); return resResult(STATUS.SUCCESS, { playerData, playerGoods }); @@ -131,4 +132,32 @@ export class SelfServiceShopHandler { return resResult(STATUS.SUCCESS, Object.assign(result, { unitBuyCount: buyCount + 1 })); } + + /** + * @description 获取关卡id + * @param {{ activityId: number}} msg + * @param {BackendSession} session + * @memberof SelfServiceShopHandler + */ + async getWarId(msg: { activityId: number, }, session: BackendSession) { + const { activityId, } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + const sid = session.get('sid'); + const roleName = session.get('roleName'); + const funcs: number[] = session.get('funcs'); + + let playerData = await getPlayerActivityData(activityId, serverId, roleId) + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + + if (playerData.challengeCount >= playerData.count) { + return resResult(STATUS.ACTIVITY_MAX_COUNT); + } + + let warIdArray = splitString(playerData.warid, '&') + let index = random(warIdArray.length - 1); + let warId = warIdArray[index]; + + return resResult(STATUS.SUCCESS, { warId }); + } } diff --git a/game-server/app/servers/battle/handler/guildTrainHandler.ts b/game-server/app/servers/battle/handler/guildTrainHandler.ts index edcc2f052..e18808979 100644 --- a/game-server/app/servers/battle/handler/guildTrainHandler.ts +++ b/game-server/app/servers/battle/handler/guildTrainHandler.ts @@ -145,8 +145,7 @@ export class GuildTrainHandler { * @param session */ async trainBattleEnd(msg: { battleCode: string, isSuccess: boolean }, session: BackendSession) { - const { battleCode, } = msg; - let isSuccess = true; + const { battleCode, isSuccess } = msg; const roleId: string = session.get('roleId'); const serverId: number = parseInt(session.get('serverId')); const roleName: string = session.get('roleName'); diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index f39c95a7a..150be17ad 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -20,6 +20,8 @@ import { pushMysteryFirstMsg, pushTowerMsg, pushVestigeFirstMsg } from '../../.. import { nowSeconds } from '../../../pubUtils/timeUtil'; import { Rank } from '../../../services/rankService'; import { checkTaskWithWar, checkTaskInBattleEnd, checkActivityTask } from '../../../services/taskService'; +import { ActivitySelfServiceModel } from '../../../db/ActivitySelfService'; +import { getSelfServiceShopActivityData } from '../../../services/selfServiceShopActivityService'; export default function (app: Application) { return new NormalBattleHandler(app); @@ -161,7 +163,7 @@ export class NormalBattleHandler { let dungeonNum = {}; if (warInfo.warType == WAR_TYPE.DAILY) { - let checkResult = await checkDailyAndIncrease(roleId, [{id: battleId, star, warType: warInfo.warType}, ...warStar], battleId, 1, false); + let checkResult = await checkDailyAndIncrease(roleId, [{ id: battleId, star, warType: warInfo.warType }, ...warStar], battleId, 1, false); if (checkResult.status == -1) { return checkResult.resResult; } @@ -205,6 +207,12 @@ export class NormalBattleHandler { await r.setRankWithRoleInfo(roleId, role.mainEliteWarId, role.mainEliteUpdatedAt, role); await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.BATTLE_MAIN_ELITE, 1, { mainEliteWarId: battleId }) } + } else if (warInfo.warType == WAR_TYPE.ACT_SELF_SHOP) { + //糜家商队挑战成功后记录挑战次数 + if (isSuccess) { + let playerData = await getSelfServiceShopActivityData(serverId, roleId) + await ActivitySelfServiceModel.addChallengeRecord(serverId, playerData.activityId, roleId, playerData.roundIndex, 1, new Date()) + } } if (isSuccess) { // 挑战胜利 diff --git a/game-server/app/services/selfServiceShopActivityService.ts b/game-server/app/services/selfServiceShopActivityService.ts index f59dba9a6..dadd1ad69 100644 --- a/game-server/app/services/selfServiceShopActivityService.ts +++ b/game-server/app/services/selfServiceShopActivityService.ts @@ -1,4 +1,4 @@ -import { ACTIVITY_RESOURCES_TYPE, ACTIVITY_TYPE, STATUS } from '../consts'; +import { ACTIVITY_RESOURCES_TYPE, ACTIVITY_TYPE, REFRESH_TIME, STATUS } from '../consts'; import { ActivityModel, ActivityModelType } from '../db/Activity'; import { ActivitySelfServiceGoodsModel, ActivitySelfServiceGoodsModelType } from '../db/ActivitySelfServiceGoods'; import { ActivitySelfServiceShopModel, ActivitySelfServiceShopModelType } from '../db/ActivitySelfServiceShop'; @@ -8,6 +8,7 @@ import { RewardParam } from '../domain/activityField/rewardField'; import { SelfServiceShopData, SelfServiceShopItem } from '../domain/activityField/selfServiceShopField'; import { gameData } from '../pubUtils/data'; import { addReward, getSelectedReward } from './giftPackageService'; +import moment = require('moment'); /** * 获取活动数据 @@ -17,7 +18,7 @@ import { addReward, getSelectedReward } from './giftPackageService'; * @param {string} roleId 角色Id * */ -export async function getActivityData(serverId: number, roleId: string) { +export async function getSelfServiceShopActivityData(serverId: number, roleId: string) { let { activityGroupId } = await ServerlistModel.findByServerId(serverId); let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.SELF_SERVICE_SHOP, new Date()) activityArray = activityArray.sort((a, b) => { @@ -49,6 +50,25 @@ export async function getPlayerActivityData(activityId: number, serverId: number let playerSelfServerData = await ActivitySelfServiceModel.findData(serverId, activityId, roleId, playerData.roundIndex); let buyCount = (playerSelfServerData && playerSelfServerData.unitBuyCount) ? playerSelfServerData.unitBuyCount : 0; playerData.unitBuyCount = buyCount; + let challengeBeginTime = null; + let challengeEndTime = null; + let curDate = moment(new Date()); + if (curDate.hour() < REFRESH_TIME) { + challengeBeginTime = moment(new Date()).startOf('d').add(-1, 'd').add(REFRESH_TIME, 'h').toDate(); + challengeEndTime = moment(challengeBeginTime).add(1, 'd').toDate() + } else { + console.log("dddddddddddddddd", curDate.hour(), curDate.hours()) + challengeBeginTime = moment(new Date()).startOf('d').add(REFRESH_TIME, 'h').toDate(); + challengeEndTime = moment(challengeBeginTime).add(1, 'd').toDate() + } + console.log("dddddddddddddddd", challengeBeginTime, challengeEndTime) + let records = (playerSelfServerData && playerSelfServerData.challengeRecords) ? playerSelfServerData.challengeRecords : []; + for (let record of records) { + console.log(challengeBeginTime, challengeEndTime, record.time) + if (record.time >= challengeBeginTime && record.time <= challengeEndTime) { + playerData.challengeCount++; + } + } return playerData; } diff --git a/shared/consts/constModules/activityConst.ts b/shared/consts/constModules/activityConst.ts index 663d6280e..860b37fa0 100644 --- a/shared/consts/constModules/activityConst.ts +++ b/shared/consts/constModules/activityConst.ts @@ -17,7 +17,7 @@ export enum ACTIVITY_TYPE { GROWTH_FUND_MAIN_ELITE = 10, // 精英成长基金 (注册后可见,永久存在) GROWTH_FUND_MAIN_ELITE_VIP = 11, // 精英成长基金(高阶)(注册后可见,永久存在) THIRTY_DAYS = 12, // 30日目标活动 - SELF_SERVICE_SHOP = 13, // 自选商店 + SELF_SERVICE_SHOP = 13, // 自选商店 糜家商队 FIRST_GIFT = 14, // 首充礼包 NEW_PLAYER_LIMIT_PACKAGE = 15, // 新手限定RMB购买礼包 LIMIT_PACKAGE_SHOP_DAILY = 16, // 每日限购礼包,RMB购买礼包 diff --git a/shared/db/ActivitySelfService.ts b/shared/db/ActivitySelfService.ts index 7ebc84e91..1b7b10e8c 100644 --- a/shared/db/ActivitySelfService.ts +++ b/shared/db/ActivitySelfService.ts @@ -39,8 +39,8 @@ export default class Activity_Self_Service extends BaseModel { //添加挑战记录 public static async addChallengeRecord(serverId: number, activityId: number, roleId: string, roundIndex: number, count: number, time: Date) { let result: ActivitySelfServiceModelType = await ActivitySelfServiceModel.findOneAndUpdate( - { serverId, roleId, activityId, roundIndex, challengeRecords: { $elemMatch: { time } } }, - { $inc: { "challengeRecords.$.count": count } }, { upsert: true, new: true }).lean(true); + { serverId, roleId, activityId, roundIndex, }, + { $push: { challengeRecords: { count, time: new Date() } } }, { upsert: true, new: true }).lean(true); return result; } diff --git a/shared/domain/activityField/selfServiceShopField.ts b/shared/domain/activityField/selfServiceShopField.ts index 997ed4329..12314dc4a 100644 --- a/shared/domain/activityField/selfServiceShopField.ts +++ b/shared/domain/activityField/selfServiceShopField.ts @@ -9,7 +9,7 @@ import { ActivityBase } from './activityField'; export class SelfServiceShopItemInfo { cellIndex: number; // 第几个坑位,从1开始 cellType: number; //坑位类型 SELF_SERVICE_SHOP_CELL_TYPE 1.特殊 2.普通 - gift: number; //礼包内容 + gift: string; //礼包内容 constructor(data: any) { this.cellIndex = data.cellIndex; @@ -56,6 +56,7 @@ export class SelfServiceShopData extends ActivityBase { unitCountMax: number = 0;//元宝购买代币最大次数 unitReward: string = '';//购买获得代币资源 + challengeCount: number = 0;//挑战次数 unitBuyCount: number = 0;//元宝购买代币次数 roundIndex: number = 0; //第几周期 从1开始 @@ -87,6 +88,7 @@ export class SelfServiceShopData extends ActivityBase { this.unitPrice = dataObj.unitPrice; this.unitCountMax = dataObj.unitCountMax; this.unitReward = dataObj.unitReward; + this.challengeCount = 0; let arr = dataObj.data; for (let obj of arr) {