108 lines
3.6 KiB
TypeScript
108 lines
3.6 KiB
TypeScript
// 军团限时充值人数活动
|
||
|
||
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
|
||
}
|
||
} |