import { GachaData, Floor } from "../domain/activityField/gachaField";; import { ActivityModelType, ActivityModel } from "../db/Activity"; import { DicGacha } from "../pubUtils/dictionary/DicGacha"; import { UserGachaType, UserGachaModel } from "../db/UserGacha"; import { shouldRefresh } from "../pubUtils/util"; import { REFRESH_HOUR, GACHA_ID, GACHA_TO_FLOOR } from "../consts"; import { getNextDayByGap } from "../pubUtils/timeUtil"; /** * 获取活动页签里的限时卡池 * * @param aid 活动id */ export async function getLimitGacha(activityId: number) { let activityData: ActivityModelType = await ActivityModel.findActivity(activityId, true); if(!activityData) return false; let gachaData = new GachaData(activityData); let { heroes, gachaId } = gachaData; return { gachaId, heroes, pickHero: 0, freeCount: 0, refFreeTime: 0, count: 0, floor: [{ id: 3, count: 0 }] } } /** * 刷新免费次数 * @param dicGacha * @param userGacha */ export async function refreshFreeCount(dicGacha: DicGacha, userGacha: UserGachaType) { let { day, count } = dicGacha.free; if(count > 0) { return userGacha; } let { roleId, gachaId, refFreeTime } = userGacha; if(shouldRefresh(refFreeTime, new Date(), REFRESH_HOUR, day)) { let ref = getNextDayByGap(refFreeTime, new Date(), day); userGacha = await UserGachaModel.refreshFreeCount(roleId, gachaId, 0, ref); } return userGacha } /** * @description 获取保底状态 * @param type 招募类型 * @param floor 玩家保底 */ export function getFloorStatus(type: number, floor: Floor[]) { let floorMap = new Map(); for(let { id, count } of floor) { floorMap.set(id, count); } let dicFloorType = GACHA_TO_FLOOR.get(type); return dicFloorType.map(id => { return { id, count: floorMap.get(id)||0 } }); }