Files
ZYZ/shared/domain/activityField/thirtyDaysField.ts
2021-05-31 14:40:09 +08:00

258 lines
9.3 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 { ACTIVITY_RESOURCES_TYPE } from '../../consts';
import { ActivityModelType } from '../../db/Activity';
import { ActivityThirtyDaysModelType } from '../../db/ActivityThirtyDays';
import { ActivityThirtyDaysPointRewardModelType } from '../../db/ActivityThirtyDaysPointReward';
import { RewardInter } from '../../pubUtils/interface';
import { parseGoodStrWithType, parseHeroStrWithType, splitString } from '../../pubUtils/util';
import { CreateHeroParam } from '../roleField/hero';
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 {
pageIndex: number; // 第几页,从1开始
cellIndex: number; // 第几个从1开始
name: string; //名称
taskType: number; // 任务类型 dic_zyz_taskType.json
taskParam: string; //任务数据 dic_zyz_taskType.json
taskParamArray: Array<number>; //任务数据 dic_zyz_taskType.json
reward: string; //任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄2.物品
point: number; // 任务达成获得的奖励点,只在当前活动中有用,虚拟
isComplete: boolean = false; //是否完成任务
isReceive: boolean = false; //是否领取过奖励
constructor(data: any, pageIndex: number) {
this.pageIndex = pageIndex;
this.cellIndex = data.cellIndex;
this.name = data.name;
this.taskType = data.taskType;
this.taskParam = data.taskParam;
this.reward = data.reward;
this.point = data.point;
this.taskParamArray = splitString(data.taskParam, '&')
}
public canReceive(): boolean {
return !this.isReceive;
}
}
// 30天目标每个标签页的数据
export class ThirtyDaysPage {
pageIndex: number; // 第几页,从1开始
name: string; //名称
item: Array<ThirtyDaysItem>; //ThirtyDaysItem每项奖励和任务内容
constructor(data: any) {
this.pageIndex = data.pageIndex;
this.name = data.name;
this.item = [];
for (let obj of data.item) {
this.item.push(new ThirtyDaysItem(obj, data.pageIndex));
}
}
}
// 30天任务活动数据
export class ThirtyDaysData extends ActivityBase {
name: string = '';//活动名称
days: number = 0;//活动周期天数
list: Array<ThirtyDaysPage> = [];//任务完成奖励
pointRewardList: Array<ThirtyDaysPointItem> = [];//点数兑换奖励
totalPoint: number = 0;//总共点数
consumePoint: number = 0;//消耗掉的点数
//未完成的任务
public findUncompleteTaskByType(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 && !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<ThirtyDaysPointItem> {
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<ThirtyDaysPointItem> {
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<ThirtyDaysPointItem> {
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): 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 });
if (itemIndex != -1) {
return this.list[listIndex].item[itemIndex];
}
}
return null;
}
//解析玩家点数兑换领取记录
public setPlayerPointRecords(data: ActivityThirtyDaysPointRewardModelType[]) {
this.consumePoint = 0;
for (let obj of this.pointRewardList) {
let index = data.findIndex(record => { return obj.cellIndex == record.cellIndex })
if (index != -1) {
this.consumePoint += obj.consumePoint;
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)
if (itemData) {
itemData.isReceive = record.isReceive === true;
itemData.isComplete = record.totalCount >= itemData.taskParamArray[0];
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) {
super(activityData)
this.initData(activityData.data)
}
}