import { UserGuildModel } from '../db/UserGuild'; import { getArmyTrainJuDian } from '../pubUtils/data'; import { getTodayZeroPoint, nowSeconds } from '../pubUtils/timeUtil'; import { GUILD_REPORT_NUM } from '../consts/constModules/guildConst'; import { GuildTrainType, GuildTrainModel, TrainInstance } from '../db/GuildTrain'; import { GuildModel } from '../db/Guild'; import { findWhere } from 'underscore'; export async function getUserGuild(roleId: string) { let userGuild = await UserGuildModel.getMyGuild(roleId,'trainCount trainTime trainRewards'); if (!userGuild) return; let { trainCount, trainTime} = userGuild; if (trainTime < getTodayZeroPoint()) { trainCount = 2; } userGuild = await UserGuildModel.updateInfo(roleId, {trainCount, trainTime: nowSeconds()}); return userGuild; } export async function recordUserGuild(roleId: string, code: string) { let userGuild = await UserGuildModel.getMyGuild(roleId,'trainCount trainTime trainRewards'); if (!userGuild||userGuild.guildCode != code) return; let { trainCount, trainTime} = userGuild; if (trainTime < getTodayZeroPoint()) { trainCount = 0; } userGuild = await UserGuildModel.updateInfo(roleId, {trainCount, trainTime: nowSeconds()}); return userGuild; } export function getGuildTrain (guildTrains, trainCount:number, trainRewards: Array) { let list = []; list = guildTrains.map(({trainId, isComplete})=>{ return ({trainId, isComplete, }); }); return { list, trainCount, trainRewards}; } export function getGuildTrainRewards (guildTrain) { let { trainInstances: instances } = getArmyTrainJuDian(guildTrain.trainId); let trainBoxs = guildTrain.trainInstances.map(({hid, trainBoxs, endTime})=>{ let instance = findWhere(instances, { hid }); let isComplete = false; if ( guildTrain.progress >= instance.progress) isComplete = true; return {hid, recordBoxs: trainBoxs, trainId: guildTrain.trainId, endTime, isComplete}; }) return { trainBoxs}; } export function getGuildTrainInfo (guildTrains: Array, roleId: string, trainCount:number, trainRewards: Array, trainIds:Array) { let guildTrain; guildTrains.map(({trainId, isComplete, trainInstances, ranks, reports})=>{ if (trainIds.indexOf(trainId) == -1) { return; } ranks.sort(function(a, b) { return b.score - a.score; }); let myRank = {}; let resRanks = ranks.map(({roleId: rankRoleId, score}, index)=>{ if (roleId == rankRoleId) myRank = {roleId: rankRoleId, score, rankLv: index+1}; return {roleId: rankRoleId, score, rankLv: index+1}; }); let { trainInstances: instances } = getArmyTrainJuDian(trainId); let resTrainBoxs = []; let resTrainInstances = trainInstances.map(({hid, progress, endTime, trainBoxs})=>{ let instance = findWhere(instances, { hid }); let isComplete = false; if ( progress >= instance.progress) isComplete = true; resTrainBoxs.push({hid, recordBoxs: trainBoxs, trainId, endTime, isComplete}); return {hid, progress, endTime, isComplete}; }) let lastGuildTrain = findWhere(guildTrains, { trainId: trainId - 1}); if (!!lastGuildTrain) { let lenNum = lastGuildTrain.reports.length; if (lenNum < GUILD_REPORT_NUM) reports = [...lastGuildTrain.reports, ...reports]; else { let trainReports = lastGuildTrain.reports.splice(lenNum - GUILD_REPORT_NUM - 1, GUILD_REPORT_NUM); reports = [...trainReports, ...reports]; } let flag = false; let lastTrainBoxs = lastGuildTrain.trainInstances.map(({hid, endTime, trainBoxs}) => { if (endTime < nowSeconds()) { flag = true; } return {hid, recordBoxs: trainBoxs, trainId: lastGuildTrain.trainId, endTime, isComplete: true}; }); if (flag) { resTrainBoxs.push(...lastTrainBoxs); } } guildTrain = {trainId, isComplete, trainInstances: resTrainInstances, trainBoxs: resTrainBoxs, reports, myRank, ranks: resRanks}; }); return { guildTrain, trainCount, trainRewards}; } export async function lockTrain(code: string, trainId: number) { let guildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId); if (!!guildTrain) { return; } let { trainInstances } = getArmyTrainJuDian(trainId); // 初始化 let instances:Array = trainInstances.map(trainInstance => { let t = new TrainInstance(); t.hid = trainInstance.hid; t.progress = 0; t.endTime = 0; t.trainBoxs = []; return t; }); guildTrain = await GuildTrainModel.openGuildTrain(code, trainId, instances); await GuildModel.updateInfo(code, {trainId}, {}); return guildTrain; }