import { Application, BackendSession, HandlerService, } from "pinus"; import { getPlayerAuthorGachaDataShow } from "../../../services/activity/authorGachaService"; import { parseGoodStrWithType, resResult } from "../../../pubUtils/util"; import { ITEM_CHANGE_REASON, STATUS } from "../../../consts"; import { AuthorGachaData } from "../../../domain/activityField/authorGachaField"; import { addReward } from "../../../services/activity/giftPackageService"; import { ActivityAuthorGachaRecModel } from "../../../db/AuthorGachaRec"; export default function (app: Application) { new HandlerService(app, {}); return new AuthorGachaHandler(app); } export class AuthorGachaHandler { constructor(private app: Application) { } /** * 祈灵获取数据 * @param msg * @param session * @returns */ async getData(msg: { activityId: number }, session: BackendSession) { const roleId: string = session.get('roleId'); const serverId: number = session.get('serverId'); const { activityId } = msg; let playerData = await getPlayerAuthorGachaDataShow(activityId, serverId, roleId); if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); return resResult(STATUS.SUCCESS, { ...playerData }); } /** * 祈灵获取奖励 * @param msg * @param session * @returns */ async receiveBox(msg: { activityId: number, count: number }, session: BackendSession) { const roleId: string = session.get('roleId'); const roleName: string = session.get('roleName'); const serverId: number = session.get('serverId'); const sid: string = session.get('sid'); const { activityId, count } = msg; let playerData = await getPlayerAuthorGachaDataShow(activityId, serverId, roleId); if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); let box = playerData.box.find(cur => cur.count == count); if (box == undefined || box.hasReceived) return resResult(STATUS.ACTIVITY_REWARDED); box.hasReceived = true; let rewards = parseGoodStrWithType(box.rewards); let result = await addReward(roleId, roleName, sid, serverId, rewards, ITEM_CHANGE_REASON.AUTHOR_GACHA_REWARD); await ActivityAuthorGachaRecModel.record(serverId, activityId, playerData.roundIndex, roleId, count); return resResult(STATUS.SUCCESS, { goods: result.goods, curBox: playerData.box }) } }