From 7c3a98bb9d6d289675d5fe70e93a4887ac4a1573 Mon Sep 17 00:00:00 2001 From: luying Date: Tue, 15 Aug 2023 17:52:11 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(=E8=8A=82=E6=97=A5=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8):=20=E4=B8=AD=E7=A7=8B=E6=B4=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activity/handler/midAutumnHandler.ts | 183 ++++++++++++++++++ .../servers/activity/handler/qixiHandler.ts | 14 +- .../app/services/activity/activityService.ts | 6 + .../app/services/activity/midAutumnService.ts | 38 ++++ game-server/app/services/checkParam.ts | 23 +++ shared/consts/constModules/activityConst.ts | 1 + shared/consts/constModules/sysConst.ts | 1 + shared/consts/statusCode.ts | 2 +- shared/db/ActivityMidAutumnRec.ts | 70 +++++++ shared/domain/activityField/midAutumnField.ts | 106 ++++++++++ .../resource/jsons/dic_zyz_activityType.json | 6 + 11 files changed, 442 insertions(+), 8 deletions(-) create mode 100644 game-server/app/servers/activity/handler/midAutumnHandler.ts create mode 100644 game-server/app/services/activity/midAutumnService.ts create mode 100644 shared/db/ActivityMidAutumnRec.ts create mode 100644 shared/domain/activityField/midAutumnField.ts diff --git a/game-server/app/servers/activity/handler/midAutumnHandler.ts b/game-server/app/servers/activity/handler/midAutumnHandler.ts new file mode 100644 index 000000000..2b16d9131 --- /dev/null +++ b/game-server/app/servers/activity/handler/midAutumnHandler.ts @@ -0,0 +1,183 @@ +import { Application, BackendSession, HandlerService, } from 'pinus'; +import { genCode, getRandSingleEelm, parseNumberList, resResult } from '../../../pubUtils/util'; +import { ITEM_CHANGE_REASON, STATUS } from '../../../consts'; +import { addReward, stringToConsumeParam, stringToRewardParam } from '../../../services/activity/giftPackageService'; +import { addItems, handleCost } from '../../../services/role/rewardService'; +import { ActivityMidAutumnRecModel } from '../../../db/ActivityMidAutumnRec'; +import { RewardInter } from '../../../pubUtils/interface'; +import { getPlayerMidAutumnData, getPlayerMidAutumnDataShow } from '../../../services/activity/midAutumnService'; +import { combineItems } from '../../../services/role/util'; + +export default function (app: Application) { + new HandlerService(app, {}); + return new MidAutumnHandler(app); +} + +export class MidAutumnHandler { + constructor(private app: Application) { + } + + /** + * @description 获取火神祭祀活动数据 + * @param {{ activityId: number}} msg + * @param {BackendSession} session + * @memberof MidAutumnHandler + */ + async getData(msg: { activityId: number }, session: BackendSession) { + const { activityId } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + + let playerData = await getPlayerMidAutumnDataShow(activityId, serverId, roleId); + + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + + return resResult(STATUS.SUCCESS, playerData); + } + + /** + * @description 游戏开始 + * @param {{ activityId: number }} msg + * @param {BackendSession} session + * @memberof MidAutumnHandler + */ + async gameStart(msg: { activityId: number }, session: BackendSession) { + const { activityId } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + + let playerData = await getPlayerMidAutumnData(activityId, serverId, roleId); + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + // 挑战次数 + if(playerData.playCnt >= playerData.freeCnt + playerData.buyCnt) return resResult(STATUS.ACTIVITY_MID_AUTUMN_NO_NUM); + + const gameCode = genCode(10); + let playerRecord = await ActivityMidAutumnRecModel.record(serverId, activityId, playerData.roundIndex, roleId, { + todayIndex: playerData.recordTodayIndex, gameCode, time: new Date(), rewards: '', isSuccess: false, hasPass: false, isSkip: false + }); + playerData.updatePlayerRecord(playerRecord); + + return resResult(STATUS.SUCCESS, { + activityId, + todayPlayCnt: playerData.todayPlayCnt, + playCnt: playerData.playCnt, + freeCnt: playerData.freeCnt, + gameCode + }); + } + + + /** + * @description 游戏结束 + * @param {{ activityId: number }} msg + * @param {BackendSession} session + * @memberof MidAutumnHandler + */ + async gameEnd(msg: { activityId: number, gameCode: string, isSuccess: boolean }, session: BackendSession) { + const { activityId, gameCode, isSuccess } = msg; + const roleId: string = session.get('roleId'); + const roleName: string = session.get('roleName'); + const serverId: number = session.get('serverId'); + const sid: string = session.get('sid'); + + let playerData = await getPlayerMidAutumnData(activityId, serverId, roleId); + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + // 挑战次数 + if(playerData.playCnt >= playerData.freeCnt + playerData.buyCnt) return resResult(STATUS.ACTIVITY_MID_AUTUMN_NO_NUM); + + let curRecord = playerData.records.find(cur => cur.gameCode == gameCode); + if(!curRecord) return resResult(STATUS.ACTIVITY_QIXI_GAMECODE_NOT_FOUND); + if(curRecord.hasPass) return resResult(STATUS.ACTIVITY_QIXI_GAMECODE_HAS_PLAY); + + let playerRecord = await ActivityMidAutumnRecModel.gameEnd(serverId, activityId, playerData.roundIndex, roleId, gameCode, isSuccess, new Date(), playerData.rewards); + if(!playerRecord) return resResult(STATUS.ACTIVITY_QIXI_GAMECODE_NOT_FOUND); + playerData.updatePlayerRecord(playerRecord); + let goods: RewardInter[] = []; + if(isSuccess) { + let rewards = stringToRewardParam(playerData.rewards); + goods = await addItems(roleId, roleName, sid, rewards, ITEM_CHANGE_REASON.MID_AUTUMN_REWARD) + } + + return resResult(STATUS.SUCCESS, { + activityId, + todayPlayCnt: playerData.todayPlayCnt, + playCnt: playerData.playCnt, + freeCnt: playerData.freeCnt, + gameCode, + goods + }); + } + + /** + * @description 扫荡 + * @param {{ activityId: number, count: number }} msg + * @param {BackendSession} session + * @memberof MidAutumnHandler + */ + async gameSweep(msg: { activityId: number, count: number }, session: BackendSession) { + const { activityId, count } = msg; + const roleId: string = session.get('roleId'); + const roleName: string = session.get('roleName'); + const serverId: number = session.get('serverId'); + const sid: string = session.get('sid'); + + let playerData = await getPlayerMidAutumnData(activityId, serverId, roleId); + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + // 挑战次数 + if(playerData.playCnt + count > playerData.freeCnt + playerData.buyCnt) return resResult(STATUS.ACTIVITY_MID_AUTUMN_NO_NUM); + if(playerData.todayPlayCnt <= 0) return resResult(STATUS.ACTIVITY_QIXI_CANNOT_SWEEP); + + let rewards: RewardInter[] = []; + for(let i = 0; i < count; i++) { + let playerRecord = await ActivityMidAutumnRecModel.record(serverId, activityId, playerData.roundIndex, roleId, { + todayIndex: playerData.recordTodayIndex, gameCode: 'sweep', time: new Date(), rewards: playerData.rewards, isSuccess: true, hasPass: true, isSkip: true + }); + if(!playerRecord) return resResult(STATUS.ACTIVITY_QIXI_GAMECODE_NOT_FOUND); + playerData.updatePlayerRecord(playerRecord); + rewards.push(...stringToRewardParam(playerData.rewards)); + } + + let goods = await addItems(roleId, roleName, sid, combineItems(rewards), ITEM_CHANGE_REASON.MID_AUTUMN_REWARD); + + return resResult(STATUS.SUCCESS, { + activityId, + todayPlayCnt: playerData.todayPlayCnt, + playCnt: playerData.playCnt, + freeCnt: playerData.freeCnt, + goods + }); + } + + /** + * @description 购买次数 + * @param {{ activityId: number, id: number, count: number}} msg + * @param {BackendSession} session + * @memberof MidAutumnHandler + */ + async buyCnt(msg: { activityId: number, count: number }, session: BackendSession) { + const { activityId, count } = msg; + const roleId = session.get('roleId'); + const sid = session.get('sid'); + const serverId = session.get('serverId'); + + let playerData = await getPlayerMidAutumnData(activityId, serverId, roleId); + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + + // 可购买次数 + if(playerData.buyCnt + count > playerData.maxBuyCnt) return resResult(STATUS.ACTIVITY_QIXI_BUY_COUNT_OVER); + // 扣材料 + let costResult = await handleCost(roleId, sid, stringToConsumeParam(playerData.buyCost), ITEM_CHANGE_REASON.ACT_ENTERTAIN_BUY_COST); + if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); + + // 保存数据 + let buildResult = await ActivityMidAutumnRecModel.buyCnt(serverId, activityId, playerData.roundIndex, roleId, count); + // // 更新数据 + playerData.updatePlayerRecord(buildResult); + + return resResult(STATUS.SUCCESS, { + activityId, + maxBuyCnt: playerData.maxBuyCnt, + buyCnt: playerData.buyCnt + }); + } +} diff --git a/game-server/app/servers/activity/handler/qixiHandler.ts b/game-server/app/servers/activity/handler/qixiHandler.ts index 84f4a453e..7d9384804 100644 --- a/game-server/app/servers/activity/handler/qixiHandler.ts +++ b/game-server/app/servers/activity/handler/qixiHandler.ts @@ -9,10 +9,10 @@ import { RewardInter } from '../../../pubUtils/interface'; export default function (app: Application) { new HandlerService(app, {}); - return new EntertainHandler(app); + return new QiXiHandler(app); } -export class EntertainHandler { +export class QiXiHandler { constructor(private app: Application) { } @@ -20,7 +20,7 @@ export class EntertainHandler { * @description 获取火神祭祀活动数据 * @param {{ activityId: number}} msg * @param {BackendSession} session - * @memberof EntertainHandler + * @memberof QiXiHandler */ async getData(msg: { activityId: number }, session: BackendSession) { const { activityId } = msg; @@ -38,7 +38,7 @@ export class EntertainHandler { * @description 召唤鹊桥游戏 * @param {{ activityId: number }} msg * @param {BackendSession} session - * @memberof EntertainHandler + * @memberof QiXiHandler */ async gameStart(msg: { activityId: number, progress: number }, session: BackendSession) { const { activityId, progress } = msg; @@ -72,7 +72,7 @@ export class EntertainHandler { * @description 召唤鹊桥游戏 * @param {{ activityId: number }} msg * @param {BackendSession} session - * @memberof EntertainHandler + * @memberof QiXiHandler */ async gameEnd(msg: { activityId: number, gameCode: string, progress: number, addProgress: number }, session: BackendSession) { const { activityId, gameCode, progress, addProgress } = msg; @@ -116,7 +116,7 @@ export class EntertainHandler { * @description 扫荡 * @param {{ activityId: number }} msg * @param {BackendSession} session - * @memberof EntertainHandler + * @memberof QiXiHandler */ async gameSweep(msg: { activityId: number }, session: BackendSession) { const { activityId } = msg; @@ -154,7 +154,7 @@ export class EntertainHandler { * @description 购买次数 * @param {{ activityId: number, id: number, count: number}} msg * @param {BackendSession} session - * @memberof EntertainHandler + * @memberof QiXiHandler */ async buyCnt(msg: { activityId: number, count: number }, session: BackendSession) { const { activityId, count } = msg; diff --git a/game-server/app/services/activity/activityService.ts b/game-server/app/services/activity/activityService.ts index d958e95f9..057473cac 100644 --- a/game-server/app/services/activity/activityService.ts +++ b/game-server/app/services/activity/activityService.ts @@ -50,6 +50,7 @@ import { getWebviewDataShow } from './webviewService'; import { getPlayerDragonBoatDataShow } from './dragonBoatService'; import { getPlayerEntertainDataShow } from './entertainService'; import { getPlayerQixiDataShow } from './qixiService'; +import { getPlayerMidAutumnDataShow } from './midAutumnService'; /** * 获取活动数据 @@ -286,6 +287,11 @@ export async function getActivity(serverId: number, roleId: string, uid: number, activityData = await getPlayerQixiDataShow(activityId, serverId, roleId); break; } + case ACTIVITY_TYPE.MID_AUTUMN: + { + activityData = await getPlayerMidAutumnDataShow(activityId, serverId, roleId); + break; + } default: { console.log('未知活动类型.........', activityType) break; diff --git a/game-server/app/services/activity/midAutumnService.ts b/game-server/app/services/activity/midAutumnService.ts new file mode 100644 index 000000000..9de906635 --- /dev/null +++ b/game-server/app/services/activity/midAutumnService.ts @@ -0,0 +1,38 @@ +import { ActivityMidAutumnRecModel } from "../../db/ActivityMidAutumnRec"; +import { MidAutumnData } from "../../domain/activityField/midAutumnField"; +import { getRoleCreateTime, getServerCreateTime } from "../redisService"; +import { getActivityById } from "./activityService"; + +/** + * 玩家活动数据 + * + * @param {number} serverId 区Id + * @param {number} activityId 活动Id + * @param {string} roleId 角色Id + * + */ +export async function getPlayerMidAutumnData(activityId: number, serverId: number, roleId: string) { + let activityData = await getActivityById(activityId); + let createTime = await getRoleCreateTime(roleId); + let serverTime = await getServerCreateTime(serverId); + let playerData = new MidAutumnData(activityData, createTime, serverTime); + let playerRecord = await ActivityMidAutumnRecModel.findData(serverId, activityId, playerData.roundIndex, roleId); + playerData.setPlayerRecords(playerRecord); + return playerData; +} + +/** + * 玩家活动数据 + * + * @param {number} serverId 区Id + * @param {number} activityId 活动Id + * @param {string} roleId 角色Id + * + */ +export async function getPlayerMidAutumnDataShow(activityId: number, serverId: number, roleId: string) { + let playerData = await getPlayerMidAutumnData(activityId, serverId, roleId); + if(playerData && playerData.canShow && playerData.canShow()) { + return playerData.getShowResult(); + } + return null +} \ No newline at end of file diff --git a/game-server/app/services/checkParam.ts b/game-server/app/services/checkParam.ts index fa1fad589..55bba2b03 100644 --- a/game-server/app/services/checkParam.ts +++ b/game-server/app/services/checkParam.ts @@ -130,6 +130,7 @@ export function checkRouteParam(route: string, msg: any) { case 'activity.bindPhoneHandler.skipOutSide': case 'activity.dragonBoatHandler.getData': case 'activity.qixiHandler.getData': + case 'activity.midAutumnHandler.getData': { if (!checkNaturalNumbers(msg.activityId)) return false; break; @@ -2087,6 +2088,28 @@ export function checkRouteParam(route: string, msg: any) { if (!checkNaturalNumbers(msg.activityId, msg.count)) return false; break; } + case 'activity.midAutumnHandler.gameStart': + { + if (!checkNaturalNumbers(msg.activityId)) return false; + break; + } + case 'activity.midAutumnHandler.gameEnd': + { + if (!checkNaturalNumbers(msg.activityId)) return false; + if (!checkNaturalStrings(msg.gameCode)) return false; + if (!checkBoolean(msg.isSuccess)) return false; + break; + } + case 'activity.midAutumnHandler.buyCnt': + { + if (!checkNaturalNumbers(msg.activityId, msg.count)) return false; + break; + } + case 'activity.midAutumnHandler.gameSweep': + { + if (!checkNaturalNumbers(msg.activityId, msg.count)) return false; + break; + } case 'activity.activityHandler.debugActivityMemory': case 'activity.popUpShopHandler.debugPushPopUpShop': case 'activity.popUpShopHandler.debugPushPopUpInterval': diff --git a/shared/consts/constModules/activityConst.ts b/shared/consts/constModules/activityConst.ts index 6c826ab09..8d2122fbf 100644 --- a/shared/consts/constModules/activityConst.ts +++ b/shared/consts/constModules/activityConst.ts @@ -70,6 +70,7 @@ export enum ACTIVITY_TYPE { DRAGON_BOAT = 55, // 龙舟 ENTERTAIN = 56, // 宴请百家 QIXI = 57, // 七夕活动 + MID_AUTUMN = 58, // 中秋活动 } /** diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index 199acd523..07baa9527 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -1208,6 +1208,7 @@ export enum ITEM_CHANGE_REASON { DECOMPOSE_SPIRIT = 193, // 分解英灵 BUY_SPIRIT = 194, // 购买英灵 QIXI_REWARD = 195, // 七夕活动奖励 + MID_AUTUMN_REWARD = 196, // 中秋活动奖励 } export enum TA_EVENT { diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index 90635228e..245b97481 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -706,7 +706,7 @@ export const STATUS = { ACTIVITY_QIXI_BUY_COUNT_OVER: { code: 50080, simStr: '购买挑战次数不足' }, ACTIVITY_QIXI_CANNOT_BUY: { code: 50081, simStr: '不可在免费次数未用完的时候购买次数' }, ACTIVITY_QIXI_CANNOT_SWEEP: { code: 50082, simStr: '必须在当天手动玩一次后才可以碾压' }, - + ACTIVITY_MID_AUTUMN_NO_NUM: { code: 50083, simStr: '游戏次数不足' }, // GM后台相关状态 60000 - 69999 GM_ERR_PASSWORD: { code: 60001, simStr: '账号或密码错误' }, diff --git a/shared/db/ActivityMidAutumnRec.ts b/shared/db/ActivityMidAutumnRec.ts new file mode 100644 index 000000000..efacac6db --- /dev/null +++ b/shared/db/ActivityMidAutumnRec.ts @@ -0,0 +1,70 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; + +/** + * 中秋找茬 +*/ + +export class MidAutumnRecord { + @prop({ required: true }) + todayIndex: number; // 今天index + @prop({ required: true }) + gameCode: string; // 唯一挑战id + @prop({ required: true }) + time: Date; // 时间 + @prop({ required: true }) + rewards: string; // 奖励 + @prop({ required: true }) + isSuccess: boolean; // 是否通过 + @prop({ required: true }) + hasPass: boolean; // 是否通过 + @prop({ required: true }) + isSkip: boolean; // 是否跳过 +} + +@index({ roleId: 1, activityId: 1 }) + +export default class Activity_MidAutumn_Rec extends BaseModel { + @prop({ required: true }) + serverId: number; // 服Id + + @prop({ required: true }) + activityId: number; // 活动Id + + @prop({ required: true }) + roundIndex: number; // 第几轮 + + @prop({ required: true }) + roleId: string; // 用户Id + + @prop({ required: true }) + buyCnt: number; // 购买次数 + + @prop({ required: true, type: MidAutumnRecord, _id: false }) + record: MidAutumnRecord[]; // 记录 + + public static async findData(serverId: number, activityId: number, roundIndex: number, roleId: string) { + let result: ActivityMidAutumnRecModelType = await ActivityMidAutumnRecModel.findOne({ serverId, roleId, activityId, roundIndex }).lean(); + return result; + } + + public static async record(serverId: number, activityId: number, roundIndex: number, roleId: string, record: MidAutumnRecord) { + let result: ActivityMidAutumnRecModelType = await ActivityMidAutumnRecModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex }, { $push: { record }, $setOnInsert: { buyCnt: 0 } }, { new: true, upsert: true }).lean(); + return result; + } + + public static async buyCnt(serverId: number, activityId: number, roundIndex: number, roleId: string, count: number) { + let result: ActivityMidAutumnRecModelType = await ActivityMidAutumnRecModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex }, { $inc: { buyCnt: count }, $setOnInsert: { record: [] } }, { new: true, upsert: true }).lean(); + return result; + } + + public static async gameEnd(serverId: number, activityId: number, roundIndex: number, roleId: string, gameCode: string, isSuccess: boolean, time: Date, rewards: string) { + let result: ActivityMidAutumnRecModelType = await ActivityMidAutumnRecModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, 'record.gameCode': gameCode }, { $set: { 'record.$.time': time, 'record.$.hasPass': true, 'record.$.isSuccess': isSuccess, 'record.$.rewards': rewards } }, { new: true }).lean(); + return result; + } +} + +export const ActivityMidAutumnRecModel = getModelForClass(Activity_MidAutumn_Rec); + +export interface ActivityMidAutumnRecModelType extends Pick, keyof Activity_MidAutumn_Rec> { } +export type ActivityMidAutumnRecModelTypeParam = Partial; // 将所有字段变成可选项 \ No newline at end of file diff --git a/shared/domain/activityField/midAutumnField.ts b/shared/domain/activityField/midAutumnField.ts new file mode 100644 index 000000000..f641aeec0 --- /dev/null +++ b/shared/domain/activityField/midAutumnField.ts @@ -0,0 +1,106 @@ +// 节日活动 - 七夕鹊桥 +import { ActivityModelType } from '../../db/Activity'; +import { ActivityMidAutumnRecModelType, MidAutumnRecord } from '../../db/ActivityMidAutumnRec'; +import { ActivityBase } from './activityField'; + +// 后台格式 +interface MidAutumnSceneDataInDb { + dayIndex: number; // 第几天 + id: number; // 场景 + img: string; // 图片 +} + +interface MidAutumnDataInDb { + buyCost: string; // 购买一次次数的消耗,type&id&count + dailyBuyCnt: number; // 每天可以购买的次数 + freeCnt: number; // 每天可以免费的次数 + scenes: MidAutumnSceneDataInDb[]; + rewards: string; // 单局奖励 +} + +export class MidAutumnData extends ActivityBase { + buyCost: string; // 购买一次次数的消耗,type&id&count + dailyBuyCnt: number; // 每天可以购买的次数 + freeCntDaily: number; // 每天可以免费的次数 + rewards: string; // 奖励 + + freeCnt: number = 0; // 累积到现在可以免费的次数 + maxBuyCnt: number = 0; // 累积到现在可以购买的次数 + buyCnt: number = 0; // 累积到现在已经购买了的次数 + todayPlayCnt: number = 0; // 今天玩的次数 + playCnt: number = 0; // 总玩的次数 + sceneId: number = 0; // 今天玩的场景id + img: string = '&'; // 场景的图片 + + recordTodayIndex: number = 0; + records: MidAutumnRecord[] = []; + + constructor(activityData: ActivityModelType, createTime: number, serverTime: number) { + super(activityData, createTime, serverTime) + this.initData(activityData.data) + } + + public initData(data: string): void { + let dataObj: MidAutumnDataInDb = JSON.parse(data); + if (!dataObj) return; + + this.buyCost = dataObj.buyCost || '&'; + this.dailyBuyCnt = dataObj.dailyBuyCnt || 0; + this.freeCntDaily = dataObj.freeCnt || 0; + this.rewards = dataObj.rewards || '&'; + this.freeCnt = this.freeCntDaily * this.todayIndex; + this.maxBuyCnt = this.todayIndex * this.dailyBuyCnt; + this.recordTodayIndex = this.todayIndex; + + let curScene = dataObj.scenes.find(cur => cur.dayIndex == this.todayIndex); + if(curScene) { + this.sceneId = curScene.id; + this.img = curScene.img; + } + } + + public setPlayerRecords(playerData: ActivityMidAutumnRecModelType) { + this.updatePlayerRecord(playerData); + } + + public updatePlayerRecord(playerData: ActivityMidAutumnRecModelType) { + if (!playerData) return; + this.buyCnt = playerData.buyCnt || 0; + this.todayPlayCnt = 0; + this.playCnt = 0; + this.recordTodayIndex = this.todayIndex; + if(playerData.record) { + playerData.record.sort((a, b) => a.time.getTime() - b.time.getTime()); + for(let data of playerData.record) { + let { todayIndex, isSuccess } = data; + if(todayIndex == this.todayIndex && isSuccess) this.todayPlayCnt ++; + if(isSuccess) this.playCnt ++; + this.records.push(data); + } + if(this.todayPlayCnt >= this.freeCntDaily && this.playCnt < this.freeCnt) { + for(let i = 1; i <= this.todayIndex; i++) { + let times = playerData.record.filter(cur => cur.todayIndex == i && cur.isSuccess).length; + if(times < this.freeCntDaily) { + this.recordTodayIndex = i; break; + } + } + } + } + } + + public getShowResult() { + return { + ...this.getBaseKeys(), + buyCost: this.buyCost, + dailyBuyCnt: this.dailyBuyCnt, + freeCnt: this.freeCnt, + maxBuyCnt: this.maxBuyCnt, + buyCnt: this.buyCnt, + todayPlayCnt: this.todayPlayCnt, + playCnt: this.playCnt, + sceneId: this.sceneId, + img: this.img, + rewards: this.rewards, + } + } +} \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_activityType.json b/shared/resource/jsons/dic_zyz_activityType.json index 2c6c879f5..7cb553e1c 100644 --- a/shared/resource/jsons/dic_zyz_activityType.json +++ b/shared/resource/jsons/dic_zyz_activityType.json @@ -316,5 +316,11 @@ "activityType": 57, "name": "QIXI", "string": "七夕活动" + }, + { + "id": 58, + "activityType": 58, + "name": "MID_AUTUMN", + "string": "中秋活动" } ] \ No newline at end of file