feat(幸运转盘优化): 新增

This commit is contained in:
zhangxk
2023-10-18 19:03:12 +08:00
committed by luying
parent c70495cf59
commit fe55bf8da9
8 changed files with 489 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
import { Application, BackendSession, HandlerService, } from 'pinus';
import { resResult } from '../../../pubUtils/util';
import { ITEM_CHANGE_REASON, STATUS } from '../../../consts';
import { getPlayerLuckyDataShow, getPlayerLuckyData } from '../../../services/activity/luckyService';
import { addItems, handleCost } from '../../../services/role/rewardService';
import { pick } from 'underscore';
import { addReward, stringToRewardParam } from '../../../services/activity/giftPackageService';
import { ActivityLuckyModel } from '../../../db/ActivityLuckyRec';
export default function (app: Application) {
new HandlerService(app, {});
return new LuckyTurntableNewHandler(app);
}
export class LuckyTurntableNewHandler {
constructor(private app: Application) {
}
/************************幸运转盘****************************/
/**
* @description 幸运转盘活动
* @param {{ activityId: number, }} msg
* @param {BackendSession} session
* @memberof LuckyHandler
*/
async getTurntableData(msg: { activityId: number }, session: BackendSession) {
const { activityId } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
let playerData = await getPlayerLuckyDataShow(activityId, serverId, roleId);
if (!playerData) {
return resResult(STATUS.ACTIVITY_MISSING);
}
return resResult(STATUS.SUCCESS, { playerData });
}
/**
* @description 转转盘
* @param {{ activityId: number, }} msg
* @param {BackendSession} session
* @memberof LuckyHandler
*/
async pull(msg: { activityId: number, count: number }, session: BackendSession) {
const { activityId, count } = msg;
const roleId = session.get('roleId');
const roleName = session.get('roleName');
const sid = session.get('sid');
const serverId = session.get('serverId');
let playerData = await getPlayerLuckyData(activityId, serverId, roleId);
if (!playerData) {
return resResult(STATUS.ACTIVITY_MISSING);
}
let cost = playerData.getCost(count);
let costResult = await handleCost(roleId, sid, cost, ITEM_CHANGE_REASON.ACT_TURNTABLE_PULL);
if (!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
let { result, records, goodResult, pool, floorCount } = playerData.pull(roleName, count);
await ActivityLuckyModel.updateData(serverId, activityId, roleId, playerData.roundIndex, { ...pick(playerData, ['todayCount', 'count', 'records', 'greatRewardCount']), refTodayCount: new Date() });
await addItems(roleId, roleName, sid, goodResult, ITEM_CHANGE_REASON.ACT_TURNTABLE_PULL);
return resResult(STATUS.SUCCESS, { result, records, todayCount: playerData.todayCount, count: playerData.count, pool, floorCount });
}
/**
* @description 领宝箱
* @param {{ activityId: number, boxCount: number }} msg
* @param {BackendSession} session
* @memberof LuckyHandler
*/
async receiveBox(msg: { activityId: number, boxCount: number }, session: BackendSession) {
const { activityId, boxCount } = msg;
const roleId = session.get('roleId');
const roleName = session.get('roleName');
const sid = session.get('sid');
const serverId = session.get('serverId');
let playerData = await getPlayerLuckyData(activityId, serverId, roleId);
if (!playerData) {
return resResult(STATUS.ACTIVITY_MISSING);
}
let canReceive = playerData.canReceive(boxCount);
if (!canReceive) return resResult(STATUS.BOX_CAN_NOT_RECEIVE);
let box = playerData.findBox(boxCount);
let rewardArray = stringToRewardParam(box.rewards)
let result = await addReward(roleId, roleName, sid, serverId, rewardArray, ITEM_CHANGE_REASON.ACT_TURNTABLE_RECEIVE_BOX);
await ActivityLuckyModel.receiveBox(serverId, activityId, roleId, playerData.roundIndex, boxCount);
return resResult(STATUS.SUCCESS, { ...result, box: { ...box, isReceived: true } });
}
}

View File

@@ -54,6 +54,7 @@ import { getPlayerMidAutumnDataShow } from './midAutumnService';
import { getPlayerAuthorGachaDataShow } from './authorGachaService';
import { getPlayerChongYangDataShow } from './chongyangService';
import { getPlayerNovemberDataShow } from './novemberServices';
import { getPlayerLuckyDataShow } from './luckyService';
/**
* 获取活动数据
@@ -314,6 +315,11 @@ export async function getActivity(serverId: number, roleId: string, uid: number,
activityData = await getPlayerNovemberDataShow(activityId, serverId, roleId);
break;
}
case ACTIVITY_TYPE.LUCKY://幸运转盘新
{
activityData = await getPlayerLuckyDataShow(activityId, serverId, roleId);
break;
}
default: {
console.log('未知活动类型.........', activityType)
break;

View File

@@ -0,0 +1,35 @@
import { ActivityLuckyModel } from "../../db/ActivityLuckyRec";
import { LuckyData } from "../../domain/activityField/luckyField";
import { shouldRefresh } from "../../pubUtils/util";
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
import { getActivityById } from "./activityService";
/**
* 玩家活动数据
*
* @param {number} serverId 区Id
* @param {number} activityId 活动Id
* @param {string} roleId 角色Id
*
*/
export async function getPlayerLuckyData(activityId: number, serverId: number, roleId: string) {
let activityData = await getActivityById(activityId);
let createTime = await getRoleCreateTime(roleId);
let serverTime = await getServerCreateTime(serverId);
let playerData = new LuckyData(activityData, createTime, serverTime);
let playerRecord = await ActivityLuckyModel.findByActivityId(serverId, activityId, roleId, playerData.roundIndex);
if(playerRecord && shouldRefresh(playerRecord.refTodayCount, new Date())) {
playerRecord = await ActivityLuckyModel.refreshTodayCount(serverId, activityId, roleId, playerData.roundIndex);
}
playerData.setPlayerRecords(playerRecord);
return playerData;
}
export async function getPlayerLuckyDataShow(activityId: number, serverId: number, roleId: string) {
let playerData = await getPlayerLuckyData(activityId, serverId, roleId);
if(playerData && playerData.canShow && playerData.canShow()) {
return playerData.getShowResult();
}
return null
}

View File

@@ -101,6 +101,7 @@ export function checkRouteParam(route: string, msg: any) {
case 'activity.guildPayHandler.getGuildPayData':
case 'activity.limitPackageHandler.getNewPlayerLimitPackageActivity':
case 'activity.luckyTurntableHandler.getTurntableData':
case 'activity.luckyHandler.getTurntableData':
case 'activity.monthlyTicketHandler.getMonthlyTicketActivity':
case 'activity.newHeroGachaHandler.getNewHeroGachaActivity':
case 'activity.newHeroGiftsHandler.getNewHeroGiftsActivity':
@@ -283,6 +284,16 @@ export function checkRouteParam(route: string, msg: any) {
if (!checkNaturalNumbers(msg.activityId, msg.boxCount)) return false;
break;
}
case 'activity.luckyHandler.pull':
{
if (!checkNaturalNumbers(msg.activityId, msg.count)) return false;
break;
}
case 'activity.luckyHandler.receiveBox':
{
if (!checkNaturalNumbers(msg.activityId, msg.boxCount)) return false;
break;
}
case 'activity.monthlyTicketHandler.getMonthlyTicketReward':
{
if (!checkNaturalNumbers(msg.activityId)) return false;