import { ACTIVITY_TYPE } from '../../consts'; import { ActivityNewHeroGiftModel, ActivityNewHeroGiftModelType } from '../../db/ActivityNewHeroGift'; import { ActivityNewHeroGKModel, ActivityNewHeroGKModelType } from '../../db/ActivityNewHeroGK'; import { UserGachaModel, UserGachaType } from '../../db/UserGacha'; import { NewHeroGachaData } from '../../domain/activityField/newHeroGachaField'; import { NewHeroGiftData } from '../../domain/activityField/newHeroGiftField'; import { NewHeroGKData } from '../../domain/activityField/newHeroGKField'; import { gameData } from '../../pubUtils/data'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; import { getActivitiesByType, getActivityById, pushActivityInter } from './activityService'; import { refreshGacha } from './gachaService'; /** * 玩家玩家活动数据 * * @param {number} serverId 区Id * @param {number} activityId 活动Id * @param {string} roleId 角色Id * */ export async function getPlayerNewHeroGachaData(activityId: number, serverId: number, roleId: string) { let activityData = await getActivityById(activityId); let createTime = await getRoleCreateTime(roleId); let serverTime = await getServerCreateTime(serverId); let playerData = new NewHeroGachaData(activityData, createTime, serverTime); let userGacha: UserGachaType = await UserGachaModel.findByRole(roleId, playerData.gachaId, activityId); let dicGacha = gameData.gacha.get(playerData.gachaId); userGacha = await refreshGacha(dicGacha, userGacha); if(!userGacha.pickHero) { userGacha = await UserGachaModel.updateInfo(roleId, playerData.gachaId, activityId, { pickHero: playerData.getDefaultHero() }) } playerData.setPlayerRecords(userGacha, dicGacha); return playerData; } /** * 玩家玩家活动数据 * * @param {number} serverId 区Id * @param {number} activityId 活动Id * @param {string} roleId 角色Id * */ export async function getPlayerNewHeroGKData(activityId: number, serverId: number, roleId: string) { let activityData = await getActivityById(activityId); let playerRecord: ActivityNewHeroGKModelType = await ActivityNewHeroGKModel.findData(serverId, activityId, roleId); let createTime = await getRoleCreateTime(roleId); let serverTime = await getServerCreateTime(serverId); let playerData = new NewHeroGKData(activityData, createTime, serverTime); playerData.setPlayerRecords(playerRecord); return playerData; } /** * 挑战每日关卡成功 * * @param {number} activityId 活动id * @param {number} warId 关卡id * */ export async function challengeNewHeroGK(serverId: number, roleId: string, activityId: number, warId: number) { let data = await ActivityNewHeroGKModel.addRecord(serverId, activityId, roleId, warId); let isFirst = data.records.filter(cur => cur.warId == warId).length <= 1; return isFirst; } /** * 玩家活动数据 * * @param {number} serverId 区Id * @param {number} activityId 活动Id * @param {string} roleId 角色Id * */ export async function getPlayerNewHeroGiftsData(activityId: number, serverId: number, roleId: string) { let activityData = await getActivityById(activityId); let createTime = await getRoleCreateTime(roleId); let serverTime = await getServerCreateTime(serverId); let playerData = new NewHeroGiftData(activityData, createTime, serverTime); let playerRecord: ActivityNewHeroGiftModelType = await ActivityNewHeroGiftModel.findData(serverId, activityId, roleId); playerData.setPlayerRecords(playerRecord); return playerData; } /** * 任务活动完成后会获得点数 * * @param {number} serverId 区Id * @param {number} activityId 活动Id * @param {string} roleId 角色Id * */ export async function newHeroGiftPoint(serverId: number, roleId: string, addPoint: number) { try { let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.NEW_HERO_GIFTS); let createTime = await getRoleCreateTime(roleId); let serverTime = await getServerCreateTime(serverId); let pushResult: pushActivityInter[] = []; for(let activityData of activities) { let playerData = new NewHeroGiftData(activityData, createTime, serverTime); if(playerData.canRecordTaskPoint()) { let result = await ActivityNewHeroGiftModel.addPoint(serverId, activityData.activityId, roleId, addPoint); if(result) pushResult.push({ activityId: activityData.activityId, activityType: activityData.type, param: { totalPoint: result.totalPoint } }); } } return pushResult } catch(e) { console.error(e); return [] } }