Files
ZYZ/shared/domain/activityField/novemberField.ts
2023-09-20 13:38:45 +08:00

91 lines
3.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 节日活动 - 重阳集会
import { ActivityModelType } from '../../db/Activity';
import { ActivityNovemberRecModelType, NovemberRecord, } from '../../db/ActivityNovemberRec';
import { ActivityBase } from './activityField';
// 后台格式
interface NovemberDataInDb {
dayIndex: number; // 天数
menuId: number; // 菜谱id
buyCost: string; // 对应菜谱购买一次次数的消耗type&id&count
dailyBuyCnt: number; // 对应菜谱每天可以购买的次数
dailyFreeCnt: number; // 对应菜谱每天可以免费的次数
successRewards: string;// 对应菜谱每局的成功奖励 type&id&count
failRewards: string; // 对应菜谱每局的失败安慰奖励 type&id&count
};
interface NovemberDataReturn {
dayIndex: number; // 第几天
menuId: number; // 菜谱id
buyCost: string; // 对应菜谱购买一次的消耗type&id&count
buyCnt: number; // 对应菜谱累积到现在已经购买了的次数
maxBuyCnt: number; // 对应菜谱累积到现在可购买的次数buyCnt<maxBuyCnt的时候才能购买
playCnt: number; // 对应菜谱累计到现在游戏的次数
maxPlayCnt: number; // 对应菜谱累计到现在可游戏的最大次数(免费+购买 playCnt<maxPlayCnt可游戏)
successRewards: string; // 对应菜谱每局的成功奖励 type&id&count
failRewards: string; // 对应菜谱每局的失败安慰奖励 type&id&count
isPushBuyRec?: boolean; //
}
export class NovemberData extends ActivityBase {
records: NovemberRecord[] = [];
menuMap = new Map<number, NovemberDataReturn>();
constructor(activityData: ActivityModelType, createTime: number, serverTime: number) {
super(activityData, createTime, serverTime)
this.initData(activityData.data)
}
public initData(data: string): void {
let novemberData: NovemberDataInDb[] = JSON.parse(data);
if (!novemberData || novemberData.length == 0) return;
for (const obj of novemberData) {
let buyCost = obj?.buyCost || '&';
let buyCnt = 0;
let maxBuyCnt = this.todayIndex * (obj?.dailyBuyCnt || 0);
let playCnt = 0;
let maxPlayCnt = this.todayIndex * (obj?.dailyFreeCnt || 0);
let successRewards = obj?.successRewards || '&';
let failRewards = obj?.failRewards || '&'
this.menuMap.set(obj.menuId, { dayIndex: obj.dayIndex, menuId: obj.menuId, buyCost, buyCnt, maxBuyCnt, playCnt, maxPlayCnt, successRewards, failRewards, isPushBuyRec: true })
}
}
public setPlayerRecords(playerData: ActivityNovemberRecModelType) {
this.updatePlayerRecord(playerData);
}
public updatePlayerRecord(playerData: ActivityNovemberRecModelType) {
if (!playerData) return;
if (playerData.records) {
this.records = playerData.records;
for (const { menuId, isPass } of playerData.records) {
if (!isPass) continue;
let menu = this.menuMap.get(menuId);
menu.playCnt += 1;
this.menuMap.set(menuId, menu);
}
}
if (playerData.buyRec) {
for (const { menuId, buyCnt } of playerData.buyRec) {
let menu = this.menuMap.get(menuId);
menu.buyCnt += buyCnt;
menu.maxPlayCnt += buyCnt;
menu.isPushBuyRec = false;
this.menuMap.set(menuId, menu);
}
}
}
public getShowResult() {
return {
...this.getBaseKeys(),
menus: [...this.menuMap.values()]
}
}
}