Files
ZYZ/game-server/app/servers/activity/handler/authorGachaHandler.ts
2026-03-13 01:38:40 +00:00

67 lines
2.5 KiB
TypeScript

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 })
}
}