活动:活动开关添加成长基金的数据

This commit is contained in:
qiaoxin
2021-05-24 20:29:20 +08:00
parent e716501347
commit 7a747eb025
7 changed files with 141 additions and 34 deletions

View File

@@ -5,7 +5,8 @@ import { firstGiftActivity, getPlayerFirstGiftData } from '../../../services/fir
import { RoleModel } from '../../../db/Role';
import { addReward, stringToRewardParam, useGiftPackage } from '../../../services/giftPackageService';
import { ActivityFirstGiftModel } from '../../../db/ActivityFirstGift';
import { signInActivity } from '../../../services/signInService';
import { signInActivity, signInVIPActivity } from '../../../services/signInService';
import { growthFundActivity } from '../../../services/growthFundService';
export default function (app: Application) {
return new ActivityHandler(app);
@@ -51,6 +52,83 @@ export class ActivityHandler {
});
}
}
//高级签到
{
let data = await signInVIPActivity(serverId, roleId);
if (data) {
playerActivityArray.push({
type: ACTIVITY_TYPE.SIGN_IN,
activityId: data.activityId,
data,
});
}
}
//成长基金
{
let data = await growthFundActivity(ACTIVITY_TYPE.GROWTH_FUND_MAIN, serverId, roleId);
if (data) {
playerActivityArray.push({
type: ACTIVITY_TYPE.GROWTH_FUND_MAIN,
activityId: data.activityId,
data,
});
}
}
//高阶成长基金
{
let data = await growthFundActivity(ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP, serverId, roleId);
if (data) {
playerActivityArray.push({
type: ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP,
activityId: data.activityId,
data,
});
}
}
//镇念塔成长基金
{
let data = await growthFundActivity(ACTIVITY_TYPE.GROWTH_FUND_TOWER, serverId, roleId);
if (data) {
playerActivityArray.push({
type: ACTIVITY_TYPE.GROWTH_FUND_TOWER,
activityId: data.activityId,
data,
});
}
}
//高阶镇念塔成长基金
{
let data = await growthFundActivity(ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP, serverId, roleId);
if (data) {
playerActivityArray.push({
type: ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP,
activityId: data.activityId,
data,
});
}
}
//精英成长基金
{
let data = await growthFundActivity(ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE, serverId, roleId);
if (data) {
playerActivityArray.push({
type: ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE,
activityId: data.activityId,
data,
});
}
}
//高阶精英成长基金
{
let data = await growthFundActivity(ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP, serverId, roleId);
if (data) {
playerActivityArray.push({
type: ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP,
activityId: data.activityId,
data,
});
}
}
return resResult(STATUS.SUCCESS, { playerActivityArray });
}

View File

@@ -5,6 +5,8 @@ import { getPlayerGrowthFundData, growthFundActivity } from '../../../services/g
import { GrowthFundItem } from '../../../domain/activityField/growthFundField';
import { addItems, createHeroes } from '../../../services/rewardService';
import { ActivityGrowthFundModel } from '../../../db/ActivityGrowthFund';
import { addReward, stringToRewardParam } from '../../../services/giftPackageService';
import { RewardParam } from '../../../domain/activityField/rewardField';
export default function (app: Application) {
@@ -19,16 +21,16 @@ export class GrowthFundHandler {
/**
* @description 获取成长基金活动数据
* @param {{ type: number}} msg
* @param {{ activityId: number}} msg
* @param {BackendSession} session
* @memberof GrowthFundHandler
*/
async getGrowthFundActivity(msg: { type: number }, session: BackendSession) {
const { type } = msg;
async getGrowthFundActivity(msg: { activityId: number }, session: BackendSession) {
const { activityId } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
let playerData = await growthFundActivity(type, serverId, roleId);
let playerData = await getPlayerGrowthFundData(activityId, serverId, roleId);
if (!playerData) return resResult(STATUS.ACTIVITY_GROWTH_FUND_END);
@@ -67,18 +69,17 @@ export class GrowthFundHandler {
return resResult(STATUS.ACTIVITY_REWARDED);
}
await ActivityGrowthFundModel.addRecord(activityId, roleId, pageIndex, cellIndex);
let reward = growthFundItemData.goodReward();
let goods = await addItems(roleId, roleName, sid, reward);
let heroReward = growthFundItemData.heroReward();
let addHeros = [];
if (heroReward.length > 0) {
let heroResult = await createHeroes(roleId, roleName, sid, serverId, funcs, heroReward);
goods = goods.concat(heroResult.goods)
addHeros = addHeros.concat(heroResult.heroes);
}
growthFundItemData.isReceive = true;
return resResult(STATUS.SUCCESS, { goods, addHeros });
await ActivityGrowthFundModel.addRecord(activityId, roleId, pageIndex, cellIndex);
let rewardParamArr: Array<RewardParam> = stringToRewardParam(growthFundItemData.reward);
let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr)
return resResult(STATUS.SUCCESS, Object.assign(result, {
param: { activityId, pageIndex, cellIndex },
item: growthFundItemData
}));
}
}

View File

@@ -20,7 +20,7 @@ export async function firstGiftActivity(serverId: number, roleId: string) {
}
let activityData = activityArray[0];
let playerRecord: ActivityFirstGiftModelType = await ActivityFirstGiftModel.findData(activityData.activityId, roleId);
if (playerRecord.isOver) {
if (!playerRecord || playerRecord.isOver) {
return null;
}

View File

@@ -22,16 +22,16 @@ import { GrowthFundData, GrowthFundItem } from '../domain/activityField/growthFu
GROWTH_FUND_MAIN_ELITE_VIP = 11, // 精英成长基金(高阶)
*/
export async function growthFundActivity(type: number, serverId: number, roleId: string) {
let activityArray: ActivityModelType[] = await ActivityModel.findActivityByType(serverId, type, 1)
for (let i = 0; i < activityArray.length; i++) {
let activityData = activityArray[i];
let playerData = await getPlayerGrowthFundData(activityData.activityId, serverId, roleId);
if (!playerData.isComplete()) {
return playerData;
}
let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(serverId, type, new Date())
if (activityArray.length == 0) {
return null;
}
return null
let activityData = activityArray[0]
let playerData = await getPlayerGrowthFundData(activityData.activityId, serverId, roleId);
if (playerData.isComplete()) {
return null;
}
return playerData;
}
/**

View File

@@ -20,14 +20,40 @@ export async function signInActivity(serverId: number, roleId: string) {
}
let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(serverId, ACTIVITY_TYPE.SIGN_IN, new Date());
if (activityArray.length > 0) {
let activityData = activityArray[0];
let playerData = new SignInData(activityData);
let playerRecords: ActivitySignInModelType[] = await ActivitySignInModel.findData(activityData.activityId, roleId, playerData.roundIndex);
playerData.setPlayerRecords(playerRecords);
return playerData;
if (activityArray.length == 0) {
return null;
}
return null
let activityData = activityArray[0];
let playerData = new SignInData(activityData);
let playerRecords: ActivitySignInModelType[] = await ActivitySignInModel.findData(activityData.activityId, roleId, playerData.roundIndex);
playerData.setPlayerRecords(playerRecords);
return playerData;
}
/**
* 获取活动数据
*
* @param {number} type 普通、高级 ACTIVITY_TYPE
* @param {number} serverId 区Id
* @param {number} activityId 活动Id
* @param {string} roleId 角色Id
*
*/
export async function signInVIPActivity(serverId: number, roleId: string) {
let todayIndex = moment(new Date()).date();
if (todayIndex < SIGNIN_OPEN || todayIndex > SIGNIN_CLOSE) {//未开启
return null;
}
let activityArray: ActivityModelType[] = await ActivityModel.findOpenActivityByType(serverId, ACTIVITY_TYPE.SIGN_IN_VIP, new Date());
if (activityArray.length == 0) {
return null;
}
let activityData = activityArray[0];
let playerData = new SignInData(activityData);
let playerRecords: ActivitySignInModelType[] = await ActivitySignInModel.findData(activityData.activityId, roleId, playerData.roundIndex);
playerData.setPlayerRecords(playerRecords);
return playerData;
}
/**

View File

@@ -24,7 +24,7 @@ export default class Activity extends BaseModel {
//根据活动类型查询开启的活动数据
public static async findOpenActivityByType(serverId: number, type: number, date: Date, lean = true) {
let result: ActivityModelType[] = await ActivityModel.find({ serverId, type, beginTime: { $lte: date }, endTime: { $gte: date } }).lean(lean);
let result: ActivityModelType[] = await ActivityModel.find({ serverId, type, beginTime: { $lte: date }, endTime: { $gte: date } }).sort({ activityId: -1 }).lean(lean);
return result;
}

View File

@@ -30,6 +30,8 @@ export class GrowthFundItem {
this.taskType = data.taskType;
this.taskParam = data.taskParam;
this.reward = data.reward;
this.isComplete = false;
this.isReceive = false;
this.taskParamArray = splitString(data.taskParam, '&')
}