// 节日活动 - 重阳集会 import { ActivityModelType } from '../../db/Activity'; import { ActivityChongYangRecModelType, ChongYangBuyRecord, ChongYangGameRecord } from '../../db/ActivityChongYangRec'; import { ActivityBase } from './activityField'; // 后台格式 interface ChongYangSceneDataInDb { dayIndex: number; // 第几天(层) buyCost: string; // 购买一次次数的消耗,type&id&count dailyBuyCnt: number; // 每天可以购买的次数 dailyFreeCnt: number; // 每天可以免费的次数 rewards: string; // 每局的奖励 type&id&count } interface ChongYangDataReturn extends ChongYangSceneDataInDb { // maxFreeCnt: number; // 累计到现在可以免费的次数 // freeCnt: number; // 累计到现在已经使用免费的次数 // maxBuyCnt: number; // 累积到现在可以购买的次数 buyCnt: number; // 累积到现在已经购买了的次数,buyCnt < maxBuyCnt 的时候才能购买 playCnt: number; // 累计到现在游戏的次数 maxPlayCnt: number; // 累计到现在可以游戏的最大次数 isPushBuyRecord?: boolean; // } export class ChongYangData extends ActivityBase { sceneMap = new Map(); gameRecords: ChongYangGameRecord[] = []; buyRecords: ChongYangBuyRecord[] = []; dayIndexUnlock: number = 1; //当前开启到了第几天 constructor(activityData: ActivityModelType, createTime: number, serverTime: number) { super(activityData, createTime, serverTime) this.initData(activityData.data) } public initData(data: string): void { let chongyangData: ChongYangSceneDataInDb[] = JSON.parse(data); if (!chongyangData || chongyangData.length == 0) return; for (const obj of chongyangData) { const { dayIndex, dailyFreeCnt } = obj; let maxFreeCnt = dailyFreeCnt; this.sceneMap.set(dayIndex, { ...obj, buyCnt: 0, playCnt: 0, maxPlayCnt: maxFreeCnt, isPushBuyRecord: true }); } } public setPlayerRecords(playerData: ActivityChongYangRecModelType) { this.updatePlayerRecord(playerData); } public updatePlayerRecord(playerData: ActivityChongYangRecModelType) { if (!playerData) return; let dayIndexUnlockAndSuccess = 0; if (playerData.gameRecords) { this.gameRecords = playerData.gameRecords; for (const { isSuccess, dayIndex } of playerData.gameRecords) { if (isSuccess) { dayIndexUnlockAndSuccess = Math.max(dayIndexUnlockAndSuccess, dayIndex); let scene = this.sceneMap.get(dayIndex); scene.playCnt += 1; this.sceneMap.set(dayIndex, scene); }; this.dayIndexUnlock = Math.max(this.dayIndexUnlock, dayIndex); } } if (playerData.buyRecords) { for (const { dayIndex, buyCnt = 0 } of playerData.buyRecords) { let scene = this.sceneMap.get(dayIndex); scene.isPushBuyRecord = false; scene.buyCnt = buyCnt; scene.maxPlayCnt = scene.buyCnt + scene.dailyFreeCnt; this.sceneMap.set(dayIndex, scene); } } if (this.todayIndex > this.dayIndexUnlock && this.dayIndexUnlock == dayIndexUnlockAndSuccess) { this.dayIndexUnlock += 1; } } public getShowResult() { return { ...this.getBaseKeys(), scenes: [...this.sceneMap.values()], dayIndexUnlock: this.dayIndexUnlock, } } }