// 军团限时充值人数活动 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 = 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 } }