import { ACTIVITY_TYPE, TASK_TYPE } from '../consts'; import { ActivityModel, ActivityModelType } from '../db/Activity'; import { ActivityGrowthFundModel, ActivityGrowthFundModelType } from '../db/ActivityGrowthFund'; import { ActivityBuyRecordsModel, ActivityBuyRecordsModelType } from '../db/ActivityBuyRecords'; 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 * */ /*ACTIVITY_TYPE类型 GROWTH_FUND_MAIN = 6, // 主线成长基金 GROWTH_FUND_MAIN_VIP = 7, // 主线成长基金(高阶) GROWTH_FUND_TOWER = 8, // 镇念塔成长基金 GROWTH_FUND_TOWER_VIP = 9, // 镇念塔成长基金(高阶) GROWTH_FUND_MAIN_ELITE = 10, // 精英成长基金 GROWTH_FUND_MAIN_ELITE_VIP = 11, // 精英成长基金(高阶) */ export async function growthFundActivity(type: number, serverId: number, roleId: string) { let activityArray: ActivityModelType[] = await ActivityModel.findActivityByType(type, true) activityArray = activityArray.sort((a, b) => { return a.activityId - b.activityId }); for (let i = 0; i < activityArray.length; i++) { let activityData = activityArray[i]; let playerData = await getPlayerGrowthFundData(activityData.activityId, 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); if (playerData.isVipActivity()) {//vip高阶需要购买 let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activityData.activityId, roleId); playerData.initBuyRecords(buyRecords); } let activityType = activityData.type; switch (activityType) { case ACTIVITY_TYPE.GROWTH_FUND_MAIN://主线 case ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP://主线vip { 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://镇念塔 case ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP:////镇念塔vip { let { towerLv } = await RoleModel.findByRoleId(roleId); for (let item of playerData.list) { if (item.taskType == TASK_TYPE.BATTLE_TOWER_LV) { if (towerLv < item.taskParamArray[0]) { item.isComplete = true; } } } break; } case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE: //精英 case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP: //精英VIP { let { mainEliteWarId } = await RoleModel.findByRoleId(roleId); for (let item of playerData.list) { if (item.taskType == TASK_TYPE.BATTLE_MAIN_ELITE) { if (mainEliteWarId <= item.taskParamArray[0]) { item.isComplete = true; } } } break; } default: break; } return playerData; }