diff --git a/game-server/app/servers/activity/handler/popUpShopHandler.ts b/game-server/app/servers/activity/handler/popUpShopHandler.ts index c746ea175..2f40be650 100644 --- a/game-server/app/servers/activity/handler/popUpShopHandler.ts +++ b/game-server/app/servers/activity/handler/popUpShopHandler.ts @@ -76,8 +76,8 @@ export class PopUpShopHandler { if (!playerRecords) { return resResult(STATUS.ACTIVITY_POP_UP_SHOP_EXPIRE); } - if (playerRecords.isBuy) { - return resResult(STATUS.ACTIVITY_REWARDED); + if (playerRecords.buyCount >= playerData.count) { + return resResult(STATUS.ACTIVITY_MAX_COUNT); } if (playerData.condition > playerRecords.totalCount) { @@ -96,7 +96,9 @@ export class PopUpShopHandler { let rewardParamArr: Array = stringToRewardParam(playerData.reward); let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr) - playerData.isBuy = true; + await ActivityPopUpShopModel.addRecord(serverId, activityId, roleId, id, playerData.taskType, 1); + + playerData.buyCount += 1; return resResult(STATUS.SUCCESS, Object.assign(result, { param: { activityId, id }, item: playerData diff --git a/game-server/app/services/popUpShopService.ts b/game-server/app/services/popUpShopService.ts index 860bd1f06..a5744bb8b 100644 --- a/game-server/app/services/popUpShopService.ts +++ b/game-server/app/services/popUpShopService.ts @@ -42,13 +42,12 @@ export async function getPlayerPopUpShopData(activityId: number, serverId: numbe let allPlayerShop = []; let allTaskData = JSON.parse(activityData.data); for (let record of playerRecords) { - if (!record.isBuy) {//没有购买 + if (record.isPush) {//没有购买 let index = allTaskData.findIndex(obj => { return obj && obj.id === record.id && obj.taskType === record.type }) if (index != -1) { let playerData = new PopUpShopData(allTaskData[index], activityData.activityId); - playerData.isBuy == false; playerData.setPlayerRecords(record) - if (playerData.condition <= record.totalCount) { + if (playerData.buyCount < allTaskData[index].count) { allPlayerShop.push(playerData) } } @@ -92,16 +91,16 @@ export async function makePopUpShopReward(roleId: string, roleName: string, sid: if (playerRecord.totalCount < playerData.condition) { return STATUS.ACTIVITY_TASK_UNCOMPLETED; } - if (!playerRecord.isBuy) { + if (playerRecord.buyCount >= playerData.count) { return STATUS.ACTIVITY_REWARDED; } - playerRecord = await ActivityPopUpShopModel.addRecord(serverId, activityId, roleId, playerData.id, playerData.taskType); + playerRecord = await ActivityPopUpShopModel.addRecord(serverId, activityId, roleId, playerData.id, playerData.taskType, 1); playerData.setPlayerRecords(playerRecord); let rewardParamArr: Array = stringToRewardParam(playerData.reward); let result = await addReward(roleId, roleName, sid, serverId, funcs, rewardParamArr) - playerData.isBuy = true; + return { code: 0, data: Object.assign(result, { item: playerData, activityId: activityData.activityId }) diff --git a/shared/db/ActivityPopUpShop.ts b/shared/db/ActivityPopUpShop.ts index f67061c78..7207540f4 100644 --- a/shared/db/ActivityPopUpShop.ts +++ b/shared/db/ActivityPopUpShop.ts @@ -27,18 +27,18 @@ export default class Activity_Pop_Up_Shop extends BaseModel { @prop({ required: true }) data: string; // 数据信息 @prop({ required: true }) - isBuy: boolean; // 是否购买 + buyCount: number; // 购买次数 @prop({ required: true }) isPush: boolean; // 是否推送过 //购买记录 - public static async addRecord(serverId: number, activityId: number, roleId: string, id: number, type: number) { + public static async addRecord(serverId: number, activityId: number, roleId: string, id: number, type: number, buyCount: number) { let nowDate = new Date(); let result: ActivityPopUpShopModelType = await ActivityPopUpShopModel.findOneAndUpdate({ serverId, roleId, activityId, id, type, beginTime: { $lt: nowDate }, endTime: { $gt: nowDate } }, - { $set: { isBuy: true } }, { upsert: true, new: true }).lean(true); + { $inc: { buyCount: buyCount } }, { upsert: true, new: true }).lean(true); return result; } diff --git a/shared/domain/activityField/popUpShopField.ts b/shared/domain/activityField/popUpShopField.ts index 76df5ed98..0644b9d6b 100644 --- a/shared/domain/activityField/popUpShopField.ts +++ b/shared/domain/activityField/popUpShopField.ts @@ -18,8 +18,9 @@ export class PopUpShopData { taskParam: number; // 任务参数 condition: number; // 任务条件 totalCount: number; //一共完成次数 + count: number; //最大可购买次数 - isBuy: boolean = false; //购买过 + buyCount: number = 0; //已经购买过次数 beginTime: Date = null;//开始时间 endTime: Date = null;//结束时间 beginTimeStamp: number = 0;//开始时间 @@ -30,7 +31,7 @@ export class PopUpShopData { if (!data) { return; } - this.isBuy = data.isBuy ? data.isBuy : false; + this.buyCount = data.buyCount ? data.buyCount : 0; this.beginTime = data.beginTime; this.endTime = data.endTime; this.beginTimeStamp = moment(data.beginTime).valueOf(); @@ -52,10 +53,11 @@ export class PopUpShopData { this.taskType = data.taskType; this.taskParam = data.taskParam; this.condition = data.condition; - this.isBuy = false; + this.buyCount = 0; this.beginTime = null; this.endTime = null; this.totalCount = 0; + this.count = data.count; } constructor(activityData: any, activityId: number) { diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index 4e5da9cda..7f8877649 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -589,7 +589,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: let playerRecord = await ActivityPopUpShopModel.addTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount); //推送 if (task.condition <= playerRecord.totalCount) { - await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); + playerRecord = await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); popShopData.setPlayerRecords(playerRecord) pushMessage = pushMessage.concat(popShopData); } @@ -597,7 +597,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: let playerRecord = await ActivityPopUpShopModel.addTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount); //推送 if (task.condition <= playerRecord.totalCount) { - await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); + playerRecord = await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); popShopData.setPlayerRecords(playerRecord) pushMessage = pushMessage.concat(popShopData); }