活动:添加节日活动-刷新商店、刷新任务

This commit is contained in:
qiaoxin
2021-06-17 16:49:55 +08:00
parent 045ce1bf77
commit c04c363dec
14 changed files with 749 additions and 5 deletions

View File

@@ -0,0 +1,113 @@
import moment = require('moment');
import { REFRESH_TIME, TASK_TYPE } from '../../consts';
import { ActivityModelType } from '../../db/Activity';
import { ActivityRefreshTaskModelType } from '../../db/ActivityRefreshTask';
import { ActivityBase } from './activityField';
// 任务配置数据
export class RefreshTaskItem {
pageIndex: number; // 第几页
id: number; // id
name: string; // 任务名称
taskType: number; // 任务类型 dic_zyz_taskType.json
taskParam: string; //任务数据 dic_zyz_taskType.json
condition: number; //任务数据条件 dic_zyz_taskType.jsonT
reward: string; // 任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄2.物品
totalCount: number = 0; //完成任务累计次数
receiveRewardCount: number = 0; //领取奖励次数
constructor(data: any, pageIndex: number) {
this.pageIndex = pageIndex;
this.id = data.id;
this.name = data.name;
this.taskType = data.taskType;
this.taskParam = data.taskParam;
this.condition = data.condition;
this.reward = data.reward;
this.totalCount = 0;
this.receiveRewardCount = 0;
}
}
// 任务配置数据
export class RefreshTaskPage {
pageIndex: number; // 第几页
name: string; // 任务名称
items: Array<RefreshTaskItem> = [];
constructor(data: any) {
this.pageIndex = data.pageIndex;
this.name = data.name;
this.items = [];
for (let obj of data.items) {
this.items.push(new RefreshTaskItem(obj, data.pageIndex))
}
}
}
// 任务活动数据
export class RefreshTaskData extends ActivityBase {
name: string = '';//活动名称
interval: number = 0;//周期间隔(秒)
list: Array<RefreshTaskPage> = [];
nextRefreshTime: number;//下次刷新时间
roundIndex: number = 1;//周期数从1开始
public findItem(pageIndex: number, id: number, type: TASK_TYPE) {
let index = this.list.findIndex(obj => { return obj && obj.pageIndex === pageIndex });
if (index != -1) {
let itemIndex = this.list[index].items.findIndex(obj => { return obj && obj.id == id && obj.taskType == type });
if (itemIndex != -1) {
return this.list[index].items[itemIndex];
}
}
return null
}
public findTaskByType(type: TASK_TYPE) {
let arr = [];
for (let pageData of this.list) {
let items = pageData.items.filter(item => { return item.taskType == type });
arr = arr.concat(items)
}
return arr;
}
//解析玩家领取记录
public setPlayerRecords(data: ActivityRefreshTaskModelType[]) {
for (let pageData of this.list) {
for (let item of pageData.items) {
let index = data.findIndex(record => { return item.id == record.id && item.pageIndex == record.pageIndex && item.taskType == record.type })
if (index != -1) {
item.totalCount = data[index].totalCount ? data[index].totalCount : 0;
item.receiveRewardCount = data[index].receiveRewardCount ? data[index].receiveRewardCount : 0;
}
}
}
}
public initData(data: string) {
this.nextRefreshTime = this.endTime;
let dataObj = JSON.parse(data);
this.name = dataObj.name;
this.interval = dataObj.interval;
this.beginTime = moment(this.beginTime).startOf('d').add(REFRESH_TIME, 'hour').valueOf();
if (this.interval > 0) {
this.roundIndex = Math.ceil((moment(new Date).valueOf() - this.beginTime) / (this.interval * 1000));
this.nextRefreshTime = moment(this.beginTime).add(this.interval * this.roundIndex, 'second').valueOf();
}
console.log(moment(new Date).valueOf(), moment(this.beginTime).valueOf(), this.roundIndex,)
let arr = dataObj.data;
for (let obj of arr) {
this.list.push(new RefreshTaskPage(obj))
}
}
constructor(activityData: ActivityModelType) {
super(activityData)
this.initData(activityData.data)
}
}