Files
ZYZ/shared/domain/activityField/novemberField.ts

96 lines
4.0 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 {
menuIds: number[]; // 菜谱id
buyCost: string; // 购买一次次数的消耗type&id&count
dailyBuyCnt: number; // 每天可以购买的次数
dailyFreeCnt: number; // 每天可以免费的次数
successRewards: string;// 每局的成功奖励 type&id&count
failRewards: string; // 每局的失败安慰奖励 type&id&count
};
// interface NovemberDataReturn {
// buyCost: string; // 购买一次次数的消耗type&id&count
// maxBuyCnt: number; // 累积到现在可以购买的次数
// buyCnt: number; // 累积到现在已经购买了的次数buyCnt < maxBuyCnt 的时候才能购买
// freeCnt: number; // 累计到现在可以免费玩的次数
// todayPlayCnt: number; // 今天的次数todayPlayCnt>0时才可以扫荡
// playCnt: number; // 总共的次数playCnt < freeCnt + buyCnt的时候才能玩新的
// menuIds: number[]; // 菜谱id
// successRewards: string;// 每局的成功奖励 type&id&count
// failRewards: string; // 每局的失败安慰奖励 type&id&count
// }
export class NovemberData extends ActivityBase {
buyCost: string; // 购买一次次数的消耗type&id&count
maxBuyCnt: number = 0; // 累积到现在可以购买的次数
buyCnt: number = 0; // 累积到现在已经购买了的次数buyCnt < maxBuyCnt 的时候才能购买
freeCnt: number = 0; // 累计到现在可以免费玩的次数
todayPlayCnt: number = 0; // 今天的次数todayPlayCnt>0时才可以扫荡
playCnt: number = 0; // 总共的次数playCnt < freeCnt + buyCnt的时候才能玩新的
menuIds: number[] = []; // 菜谱id
successRewards: string;// 每局的成功奖励 type&id&count
failRewards: string; // 每局的失败安慰奖励 type&id&count
records: NovemberRecord[] = [];
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) return;
this.buyCost = novemberData.buyCost || '&';
this.maxBuyCnt = (novemberData.dailyBuyCnt || 0) * this.todayIndex;
this.buyCnt = 0;
this.freeCnt = (novemberData.dailyFreeCnt) * this.todayIndex;
this.todayPlayCnt = 0;
this.playCnt = 0;
this.menuIds = novemberData.menuIds || [];
this.successRewards = novemberData.successRewards || '&';
this.failRewards = novemberData.failRewards || '&';
}
public setPlayerRecords(playerData: ActivityNovemberRecModelType) {
this.updatePlayerRecord(playerData);
}
public updatePlayerRecord(playerData: ActivityNovemberRecModelType) {
if (!playerData) return;
this.buyCnt = playerData?.buyCnt || 0
if (playerData.records) {
this.records = playerData?.records || [];
for (const data of playerData.records) {
let { todayIndex, isSuccess, hasPass } = data;
if (todayIndex == this.todayIndex && isSuccess) this.todayPlayCnt++;
if (isSuccess) this.playCnt++;
}
}
}
public getShowResult() {
return {
...this.getBaseKeys(),
buyCost: this.buyCost,
maxBuyCnt: this.maxBuyCnt,
buyCnt: this.buyCnt,
freeCnt: this.freeCnt,
todayPlayCnt: this.todayPlayCnt,
playCnt: this.playCnt,
menuIds: this.menuIds,
successRewards: this.successRewards,
failRewards: this.failRewards,
}
}
}