Files
ZYZ/shared/domain/activityField/guildPay.ts
2022-03-23 13:54:04 +08:00

108 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 { ActivityGuildPayModelType } from "../../db/ActivityGuildPay";
import { ActivityGuildPayRecordModelType } from "../../db/ActivityGuildPayRecord";
import { ActivityBase } from "./activityField";
interface GuildPayRewardInDb {
cellIndex: number; // 第几条
memberCnt: number; // 充值金额达到目标金额的玩家人数
reward: string; // 奖励 type&id&count
}
interface GuildPayDataInDb {
rewards: GuildPayRewardInDb[];
payDays: number; // 充值计入的天数这之后到活动endTime为公示期充值不会计入活动
}
export class GuildPayReward {
cellIndex: number; // 第几条
memberCnt: number; // 充值金额达到目标金额的玩家人数
reward: string; // 奖励 type&id&count
hasReceived: boolean = false; // 玩家是否已领取
constructor(data: GuildPayRewardInDb) {
this.cellIndex = data.cellIndex;
this.memberCnt = data.memberCnt;
this.reward = data.reward;
}
public setHasReceived(hasReceived: boolean) {
this.hasReceived = hasReceived;
}
}
export class GuildPayData extends ActivityBase {
payEndTime: number;
rewards: GuildPayReward[] = [];
map: Map<number, number> = new Map();
payMemberCnt: number = 0;
payRecord: string[] = [];
constructor(activityData: ActivityModelType, createTime: number, serverTime: number) {
super(activityData, createTime, serverTime)
this.initData(activityData.data)
}
public initData(data: string) {
let dataObj: GuildPayDataInDb = JSON.parse(data);
this.payEndTime = this.beginTime + dataObj.payDays * 24 * 60 * 60 * 1000;
for(let reward of dataObj.rewards) {
let obj = new GuildPayReward(reward);
this.rewards.push(obj);
this.map.set(obj.cellIndex, this.rewards.length - 1);
}
}
public findRewardItemByCellIndex(cellIndex: number) {
let index = this.map.get(cellIndex);
return this.rewards[index];
}
public setReceiveRecord(receiveRecord: ActivityGuildPayRecordModelType) {
if(!receiveRecord) return;
for(let cellIndex of receiveRecord.receiveRecord) {
let reward = this.findRewardItemByCellIndex(cellIndex);
reward.setHasReceived(true);
}
}
public setGuildRecord(guildRecord: ActivityGuildPayModelType) {
if(!guildRecord) return;
this.payMemberCnt = guildRecord.memberRecord.length;
this.payRecord = guildRecord.memberRecord.map(cur => cur.roleName);
}
public getShowResult() {
return {
...this.getBaseKeys(),
payEndTime: this.payEndTime,
rewards: this.rewards,
payMemberCnt: this.payMemberCnt,
payRecord: this.payRecord
}
}
public receiveItems(cellIndex: number) {
let items: GuildPayReward[] = [];
if(cellIndex == 0) {
for(let reward of this.rewards) {
if(reward.memberCnt <= this.payMemberCnt && !reward.hasReceived) {
reward.setHasReceived(true);
items.push(reward);
}
}
} else {
let reward = this.findRewardItemByCellIndex(cellIndex);
if(reward && !reward.hasReceived && reward.memberCnt <= this.payMemberCnt) {
reward.setHasReceived(true);
items.push(reward);
}
}
if(items.length <= 0) return false;
return items
}
}