import { ACTIVITY_TYPE, TASK_TYPE } from '../consts'; import { ActivityModel, ActivityModelType } from '../db/Activity'; import { ActivityGrowthFundModel, ActivityGrowthFundModelType } from '../db/ActivityGrowthFund'; import { RoleModel } from '../db/Role'; import { GrowthFundData, GrowthFundItem } from '../domain/activityField/growthFundField'; /** * 获取活动数据 * * @param {number} serverId 区Id * @param {number} type 活动类型 ACTIVITY_TYPE * @param {string} roleId 角色Id * */ export async function growthFundActivity(type: number, serverId: number, roleId: string) { let activityArray: ActivityModelType[] = await (await ActivityModel.findActivityByType(type, true)).sort((a, b) => { return a.acvitityId - b.acvitityId }); for (let i = 0; i < activityArray.length; i++) { let activityData = activityArray[i]; let playerData = await getPlayerGrowthFundData(activityData.acvitityId, serverId, roleId); if (!playerData.isComplete()) { return playerData; } } return null } /** * 玩家活动数据 * * @param {number} serverId 区Id * @param {number} activityId 活动Id * @param {string} roleId 角色Id * */ export async function getPlayerGrowthFundData(activityId: number, serverId: number, roleId: string) { let activityData: ActivityModelType = await ActivityModel.findActivity(activityId, true); let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activityId, roleId); let playerData = new GrowthFundData(activityData); playerData.setPlayerRecords(playerRecords); let activityType = activityData.type; switch (activityType) { case ACTIVITY_TYPE.GROWTH_FUND_MAIN: {//主线 let role = await RoleModel.findByRoleId(roleId); let { warStar = new Array<{ id: number, warType: number, star: number }>() } = role; let warIDs = warStar.map(cur => cur.id); for (let item of playerData.list) { if (item.taskType == TASK_TYPE.BATTLE_MAIN) { let index = warIDs.findIndex(id => { return id === item.taskParamArray[1] }) if (index != -1) { item.isComplete = true; } } } break; } case ACTIVITY_TYPE.GROWTH_FUND_TOWER: {//镇念塔 break; } case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE: {//精英 break; } default: break; } return playerData; }