Files
ZYZ/game-server/app/servers/activity/handler/sevenDaysHandler.ts
2021-05-29 16:26:46 +08:00

260 lines
11 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Application, BackendSession } from 'pinus';
import { resResult } from '../../../pubUtils/util';
import { STATUS, ACTIVITY_RESOURCES_TYPE } from '../../../consts';
import { getPlayerGrowthData } from '../../../services/growthService';
import { getPlayerDailyChallengesData } from '../../../services/dailyChallengesService';
import { GrowthItem, PointRewardItem } from '../../../domain/activityField/growthField';
import { addItems, createHeroes, handleCost } from '../../../services/rewardService';
import { ActivityGrowthModel } from '../../../db/ActivityGrowth';
import { DailyItem } from '../../../domain/activityField/dailyChallengesField';
import { getPlayerDailyGiftsData } from '../../../services/dailyGiftsService';
import { DailyGiftItem } from '../../../domain/activityField/dailyGiftsField';
import { ActivityDailyGiftsModel } from '../../../db/ActivityDailyGifts';
import { addReward, stringToRewardParam } from '../../../services/giftPackageService';
import { RewardParam } from '../../../domain/activityField/rewardField';
import { ActivityDailyChallengesModel } from '../../../db/ActivityDailyChallenges';
import { ActivityGrowthPointModel } from '../../../db/ActivityGrowthPoint';
export default function (app: Application) {
return new SevenDaysHandler(app);
}
export class SevenDaysHandler {
constructor(private app: Application) {
}
/************************成长任务****************************/
/**第一个七天乐(人物注册时间-人物注册时间第7天结束开启第二个七天乐(人物注册时间第8天-人物注册时间第14天结束;之后会有七天乐
* @description 获取七天乐活动数据
* @param {{ activityId: number}} msg
* @param {BackendSession} session
* @memberof SevenDaysHandler
*/
async getSevenDaysGrowthActivity(msg: { activityId: number }, session: BackendSession) {
const { activityId } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
let playerData = await getPlayerGrowthData(activityId, serverId, roleId)
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
return resResult(STATUS.SUCCESS, playerData);
}
/**
* @description 获取成长任务每天完成的单个奖励
* @param {{ activityId: number, dayIndex: number, cellIndex: number, type: number}} msg
* @param {BackendSession} session
* @memberof SevenDaysHandler
*/
async getGrowthCellReward(msg: { activityId: number, dayIndex: number, cellIndex: number, type: number }, session: BackendSession) {
const { activityId, dayIndex, cellIndex, type } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
const sid = session.get('sid');
const roleName = session.get('roleName');
const funcs: number[] = session.get('funcs');
let playerData = await getPlayerGrowthData(activityId, serverId, roleId)
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
let growthItemData: GrowthItem = playerData.findGrowthItem(dayIndex, cellIndex, type);
if (!growthItemData) {
return resResult(STATUS.ACTIVITY_DATA_ERROR);
}
if (!growthItemData.isComplete()) {//未完成任务
return resResult(STATUS.ACTIVITY_TASK_UNCOMPLETED);
}
if (!growthItemData.canReceive()) {//已经领取过
return resResult(STATUS.ACTIVITY_REWARDED);
}
await ActivityGrowthModel.addCellRecord(serverId, activityId, roleId, dayIndex, cellIndex, type, 1);
let rewardParamArr: Array<RewardParam> = stringToRewardParam(growthItemData.reward);
let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr)
growthItemData.receiveRewardCount = 1;
return resResult(STATUS.SUCCESS, Object.assign(result, {
param: { activityId, dayIndex, cellIndex, type },
item: growthItemData,
}));
}
/**
* @description 成长任务每天奖章兑换奖励
* @param {{ activityId: number, id: number}} msg
* @param {BackendSession} session
* @memberof SevenDaysHandler
*/
async getGrowthDayReward(msg: { activityId: number, id: number }, session: BackendSession) {
const { activityId, id } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
const sid = session.get('sid');
const roleName = session.get('roleName');
const funcs = session.get('funcs');
let playerData = await getPlayerGrowthData(activityId, serverId, roleId)
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
let pointItemData: PointRewardItem = playerData.findPointItem(id);
if (!pointItemData) {
return resResult(STATUS.ACTIVITY_DATA_ERROR);
}
if (playerData.getTotalPoint() < pointItemData.progress) {
return resResult(STATUS.ACTIVITY_NO_POINT);
}
if (pointItemData.getPointReward) {//已经领取过
return resResult(STATUS.ACTIVITY_REWARDED);
}
await ActivityGrowthPointModel.addRecord(serverId, activityId, roleId, id);
let rewardParamArr: Array<RewardParam> = stringToRewardParam(pointItemData.reward);
let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr)
pointItemData.getPointReward = true;
return resResult(STATUS.SUCCESS, Object.assign(result, {
param: { activityId, id },
item: pointItemData,
}));
}
/************************今日挑战****************************/
/**
* @description 获取今日挑战活动数据
* @param {{ activityId: number}} msg
* @param {BackendSession} session
* @memberof SevenDaysHandler
*/
async getSevenDayDailyChallengesActivity(msg: { activityId: number }, session: BackendSession) {
const { activityId } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
let playerData = await getPlayerDailyChallengesData(activityId, serverId, roleId)
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
return resResult(STATUS.SUCCESS, playerData);
}
/**
* @description 获取今日挑战的单个奖励
* @param {{ activityId: number, dayIndex: number, cellIndex: number, type: number}} msg
* @param {BackendSession} session
* @memberof SevenDaysHandler
*/
async getDailyChallengeReward(msg: { activityId: number, dayIndex: number, cellIndex: number, type: number }, session: BackendSession) {
const { activityId, dayIndex, cellIndex, type } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
const sid = session.get('sid');
const roleName = session.get('roleName');
const funcs = session.get('funcs');
let playerData = await getPlayerDailyChallengesData(activityId, serverId, roleId)
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
let dailyItemData: DailyItem = playerData.findDailyChallengesItem(dayIndex, cellIndex, type);
if (!dailyItemData) {
return resResult(STATUS.ACTIVITY_DATA_ERROR);
}
if (!dailyItemData.isComplete()) {//未完成任务
return resResult(STATUS.ACTIVITY_TASK_UNCOMPLETED);
}
if (!dailyItemData.canReceive()) {//已经领取过
return resResult(STATUS.ACTIVITY_REWARDED);
}
await ActivityDailyChallengesModel.addCellRecord(serverId, activityId, roleId, dayIndex, cellIndex, type, 1);
let rewardParamArr: Array<RewardParam> = stringToRewardParam(dailyItemData.reward);
let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr)
dailyItemData.receiveRewardCount = 1;
return resResult(STATUS.SUCCESS, Object.assign(result, {
param: { activityId, dayIndex, cellIndex, type },
item: dailyItemData,
}));
}
/************************每日特惠礼包****************************/
/**
* @description 获取每日特惠礼包活动数据
* @param {{ activityId: number}} msg
* @param {BackendSession} session
* @memberof SevenDaysHandler
*/
async getSevenDayDailyGiftsActivity(msg: { activityId: number }, session: BackendSession) {
const { activityId } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
let playerData = await getPlayerDailyGiftsData(activityId, serverId, roleId)
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
return resResult(STATUS.SUCCESS, playerData);
}
/**
* @description 购买每日特惠礼包
* @param {{ activityId: number, dayIndex: number, cellIndex: number}} msg
* @param {BackendSession} session
* @memberof SevenDaysHandler
*/
async buyDailyGiftsCell(msg: { activityId: number, dayIndex: number, cellIndex: number }, session: BackendSession) {
const { activityId, dayIndex, cellIndex } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
const sid = session.get('sid');
const roleName = session.get('roleName');
const funcs = session.get('funcs');
let playerData = await getPlayerDailyGiftsData(activityId, serverId, roleId)
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
let dailyItemData: DailyGiftItem = playerData.findDailyGiftsItem(dayIndex, cellIndex);
if (!dailyItemData) {
return resResult(STATUS.ACTIVITY_DATA_ERROR);
}
if (!dailyItemData.canBuy()) {//最大次数
return resResult(STATUS.ACTIVITY_MAX_COUNT);
}
if (dayIndex > playerData.today()) {//还未开启
return resResult(STATUS.ACTIVITY_UNOPENED);
}
//货币是否足够
let consumeData = dailyItemData.consumeRes();
let consumeType = consumeData.type;//购买类型
if (consumeType == ACTIVITY_RESOURCES_TYPE.GOODS) {//物品表,元宝、金币、体力
let result = await handleCost(roleId, sid, [{ id: consumeData.id, count: consumeData.count }]);
if (!result) return resResult(STATUS.ACTIVITY_RES_NOT_ENOUGH);
} else if (consumeType == ACTIVITY_RESOURCES_TYPE.RMB) {//RMB购买
return resResult(STATUS.ACTIVITY_NEED_PAY);
}
await ActivityDailyGiftsModel.buyRecord(serverId, activityId, roleId, dayIndex, cellIndex, 1);
let rewardParamArr: Array<RewardParam> = stringToRewardParam(dailyItemData.reward);
let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr)
dailyItemData.buyCount += 1;
return resResult(STATUS.SUCCESS, Object.assign(result, {
param: { activityId, dayIndex, cellIndex },
item: dailyItemData,
}));
}
}