import { ActivityModelType } from '../../db/Activity'; import { ActivityThirtyDaysModelType } from '../../db/ActivityThirtyDays'; import { ActivityThirtyDaysPointRewardModelType } from '../../db/ActivityThirtyDaysPointReward'; import { splitString } from '../../pubUtils/util'; import { ActivityBase } from './activityField'; // 30天目标每个点兑换奖励的数据 export class ThirtyDaysPointItem { cellIndex: number; // 第几个,从1开始 consumePoint: number; //消费点数 reward: string; //任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄,2.物品 expiredReward: string; //过期任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄,2.物品 isReceive: boolean = false; //是否领取过奖励 isExpired: boolean = false; //奖励是否已经过期 constructor(data: any) { this.cellIndex = data.cellIndex; this.consumePoint = data.consumePoint; this.reward = data.reward; this.expiredReward = data.expiredReward; } // public heroReward(): CreateHeroParam[] { // let data = this.reward; // if (this.isExpired && this.expiredReward && this.expiredReward != '') {//过期奖励 // data = this.expiredReward; // } // let rewardArray = []; // let rewardData = data.split('|').filter(obj => { return obj && obj != '' }); // for (let objStr of rewardData) { // let reward = parseHeroStrWithType(objStr); // rewardArray.push(reward); // } // return rewardArray.filter(obj => { return obj && obj.type == ACTIVITY_RESOURCES_TYPE.HERO }) // } // public goodReward(): RewardInter[] { // let data = this.reward; // if (this.isExpired && this.expiredReward && this.expiredReward != '') {//过期奖励 // data = this.expiredReward; // } // let rewardArray = []; // let rewardData = data.split('|').filter(obj => { return obj && obj != '' }); // for (let objStr of rewardData) { // let reward = parseGoodStrWithType(objStr); // rewardArray.push(reward); // } // return rewardArray.filter(obj => { return obj && obj.type == ACTIVITY_RESOURCES_TYPE.GOODS }) // } } // 30天目标每个奖励的数据 export class ThirtyDaysItem { tab: number; // id pageIndex: number; // 第几页,从1开始 cellIndex: number; // 第几个,从1开始 name: string; //名称 taskType: number; // 任务类型 dic_zyz_taskType.json taskParam: string; //任务数据 dic_zyz_taskType.json condition: number; //任务条件 taskParamArray: Array; //任务数据 dic_zyz_taskType.json reward: string; //任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄,2.物品 point: number; // 任务达成获得的奖励点,只在当前活动中有用,虚拟 totalCount: number = 0; //任务完成次数 isComplete: boolean = false; //是否完成任务 isReceive: boolean = false; //是否领取过奖励 constructor(data: any, pageIndex: number, cellIndex: number) { this.tab = data.tab; this.pageIndex = pageIndex; this.cellIndex = cellIndex; this.name = data.name; this.taskType = data.taskType; this.taskParam = data.taskParam; this.condition = data.condition; this.reward = data.reward; this.point = data.point; this.totalCount = 0; this.isComplete = false; this.isReceive = false; this.taskParamArray = splitString(data.taskParam, '&') } public canReceive(): boolean { return !this.isReceive; } } // 30天目标每个标签页的数据 export class ThirtyDaysPage { pageIndex: number; // 第几页,从1开始 name: string; //名称 item: Array; //ThirtyDaysItem每项奖励和任务内容 constructor(data: any) { this.pageIndex = data.pageIndex; this.name = data.name; this.item = []; for (let obj of data.item) { for (let cellData of obj.taskList) { this.item.push(new ThirtyDaysItem(cellData, data.pageIndex, obj.cellIndex)); } } } } // 30天任务活动数据 export class ThirtyDaysData extends ActivityBase { name: string = '';//活动名称 days: number = 0;//活动周期天数 list: Array = [];//任务完成奖励 pointRewardList: Array = [];//点数兑换奖励 totalPoint: number = 0;//总共点数 //未完成的任务 public findUncompleteTaskByType(type: number): ThirtyDaysItem[] { let task = []; for (let i = 0; i < this.list.length; i++) { let items = this.list[i].item; for (let itemData of items) { if (itemData.taskType == type && !itemData.isComplete) { task.push(itemData); } } } return task; } public findTaskByType(type: number) { let task = []; for (let i = 0; i < this.list.length; i++) { let items = this.list[i].item; for (let itemData of items) { if (itemData.taskType == type) { task.push(itemData); } } } return task; } //全部领取完成 public isComplete() { for (let i = 0; i < this.list.length; i++) { let items = this.list[i].item; for (let itemData of items) { if (!itemData.isReceive) { return false } } } return true; } //查询过期但未标记的点数奖励 public needMark(): Array { let data = this.pointRewardList.sort((a, b) => { return a.cellIndex - b.cellIndex }); let point = this.totalPoint; let expiredData = []; for (let item of data) { if (point < item.consumePoint) { if (!item.isExpired) expiredData.push(item); } else { point -= item.consumePoint; } } return expiredData } //查询过期的点数奖励 public expiredPointItem(): Array { let data = this.pointRewardList.sort((a, b) => { return a.cellIndex - b.cellIndex }); let point = this.totalPoint; let expiredData = []; for (let item of data) { if (point < item.consumePoint) { expiredData.push(item); } else { point -= item.consumePoint; } } return expiredData } //还未兑换的点数奖励 public notReceivedPointItem(): Array { return this.pointRewardList.filter(obj => { return obj && !obj.isReceive }) } //点数兑换的奖励内容 public findThirtyDaysPointItem(cellIndex: number): ThirtyDaysPointItem { let index = this.pointRewardList.findIndex(obj => { return obj && obj.cellIndex == cellIndex }) return (index != -1) ? this.pointRewardList[index] : null; } //完成的任务奖励内容 public findThirtyDaysItem(pageIndex: number, cellIndex: number, tab: number): ThirtyDaysItem { let listIndex = this.list.findIndex(obj => { return obj && obj.pageIndex == pageIndex }); if (listIndex != -1) { let itemIndex = this.list[listIndex].item.findIndex(obj => { return obj && obj.cellIndex == cellIndex && obj.tab == tab }); if (itemIndex != -1) { return this.list[listIndex].item[itemIndex]; } } return null; } //解析玩家点数兑换领取记录 public setPlayerPointRecords(data: ActivityThirtyDaysPointRewardModelType[]) { for (let obj of this.pointRewardList) { let index = data.findIndex(record => { return obj.cellIndex == record.cellIndex }) if (index != -1) { obj.isReceive = data[index].isReceive === true; obj.isExpired = data[index].isExpired === true; } } } //解析玩家任务领取记录 public setPlayerRecords(data: ActivityThirtyDaysModelType[]) { this.totalPoint = 0; for (let record of data) { let itemData = this.findThirtyDaysItem(record.pageIndex, record.cellIndex, record.tab) if (itemData) { itemData.isReceive = record.isReceive === true; itemData.totalCount = record.totalCount ? record.totalCount : 0; itemData.isComplete = record.totalCount >= itemData.condition; if (itemData.isReceive) { this.totalPoint += itemData.point; } } } } public initData(data: string) { let dataObj = JSON.parse(data); this.name = dataObj.name; this.days = dataObj.days; let pointRewardData = dataObj.pointRewardData; for (let obj of pointRewardData) { this.pointRewardList.push(new ThirtyDaysPointItem(obj)) } let arr = dataObj.data; for (let obj of arr) { this.list.push(new ThirtyDaysPage(obj)) } } constructor(activityData: ActivityModelType, createTime: number) { super(activityData, createTime) this.initData(activityData.data) } }