diff --git a/game-server/app/servers/guild/handler/gvgProduceHandler.ts b/game-server/app/servers/guild/handler/gvgProduceHandler.ts index 3b0f66ef7..0ab4aa0c6 100644 --- a/game-server/app/servers/guild/handler/gvgProduceHandler.ts +++ b/game-server/app/servers/guild/handler/gvgProduceHandler.ts @@ -262,28 +262,27 @@ export class GVGProduceHandler { } // 帮收 - async helpHarvest(msg: { farmId: number, fieldId: number }, session: BackendSession) { + async helpHarvest(msg: { farmId: number, roleId: string }, session: BackendSession) { const roleId = session.get('roleId'); const roleName = session.get('roleName'); const guildCode = session.get('guildCode'); - const { farmId, fieldId } = msg; + const { farmId, roleId: targetRoleId } = msg; let { configId, period } = getGVGPeriodData(); if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD); let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); - const resultField = await GVGLeagueFarmModel.helpHarvest(configId, myLeague.leagueCode, farmId, fieldId); // 解锁 - if(!resultField) return resResult(STATUS.GVG_CANNOT_HARVEST); + const resultField = await GVGLeagueFarmModel.helpHarvest(configId, myLeague.leagueCode, farmId, targetRoleId); // 解锁 + if(!resultField || resultField.length == 0) return resResult(STATUS.GVG_CANNOT_HARVEST); - let targetRoleId = resultField.lockRoleId; let targetOnlineInfo = await getRoleOnlineInfo(targetRoleId); // 计算产量 - const { foodSum, rewardSum, leagueRewardSum, activeSum } = await sumOutputByResults([resultField]); + const { foodSum, rewardSum, leagueRewardSum, activeSum } = await sumOutputByResults(resultField); // 资源 - await addResource(myLeague.leagueCode, targetRoleId, resultField.lockRoleName, GVG_RESOURCE_TYPE.FOOD, foodSum)||{}; + await addResource(myLeague.leagueCode, targetRoleId, resultField[0].lockRoleName, GVG_RESOURCE_TYPE.FOOD, foodSum)||{}; await sendMailByContent(MAIL_TYPE.HELP_HARVEST, targetRoleId, { sendName: roleName, goods: rewardSum }); // 相关物品 await addGVGReward(targetRoleId, roleName, myLeague.leagueCode, targetOnlineInfo.sid, leagueRewardSum, [], ITEM_CHANGE_REASON.HARVEST) diff --git a/game-server/app/services/checkParam.ts b/game-server/app/services/checkParam.ts index 35859a726..26a87494d 100644 --- a/game-server/app/services/checkParam.ts +++ b/game-server/app/services/checkParam.ts @@ -1375,7 +1375,8 @@ export function checkRouteParam(route: string, msg: any) { } case "guild.gvgProduceHandler.helpHarvest": { - if(!checkNaturalNumbers(msg.farmId, msg.fieldId)) return false; + if(!checkNaturalNumbers(msg.farmId)) return false; + if(!checkNaturalStrings(msg.roleId)) return false; break; } case "guild.gvgProduceHandler.mineStart": diff --git a/shared/db/GVGLeagueFarm.ts b/shared/db/GVGLeagueFarm.ts index 57703da86..d33552c1b 100644 --- a/shared/db/GVGLeagueFarm.ts +++ b/shared/db/GVGLeagueFarm.ts @@ -139,15 +139,18 @@ export default class GVGLeagueFarm extends BaseModel { })); if(result.modifiedCount == 0) return []; const fieldResult: GVGLeagueFarmType[] = await GVGLeagueFarmModel.find({ batchCode }).sort({ fieldId: 1 }).select('-_id -createdAt -updatedAt -__v -configId -leagueCode').lean(); - await GVGLeagueFarmModel.updateMany({ batchCode }, { $set: { seedType: 0 } }) + await GVGLeagueFarmModel.updateMany({ batchCode }, { $set: { seedType: 0 } }); return fieldResult; } - public static async helpHarvest(configId: number, leagueCode: string, farmId: number, fieldId: number) { - const result: GVGLeagueFarmType = await GVGLeagueFarmModel.findOneAndUpdate( - { configId, leagueCode, farmId, fieldId, harvestTime: { $lt: nowSeconds() }, unlockTime: { $gt: nowSeconds() } }, - { $set: { unlockTime: 0, harvestTime: 0, lockRoleId: '', lockRoleName: '' }}, { new: true }).lean(); - return result + public static async helpHarvest(configId: number, leagueCode: string, farmId: number, roleId: string) { + const batchCode = genCode(10); + const result = await GVGLeagueFarmModel.updateMany({ configId, leagueCode, farmId, lockRoleId: roleId, harvestTime: { $lt: nowSeconds() } }, + { $set: { unlockTime: 0, harvestTime: 0, lockRoleId: '', lockRoleName: '', batchCode }}, { new: true }); + if(result.modifiedCount == 0) return []; + const fieldResult: GVGLeagueFarmType[] = await GVGLeagueFarmModel.find({ batchCode }).lean(); + await GVGLeagueFarmModel.updateMany({ batchCode }, { $set: { seedType: 0 } }); + return fieldResult } public static async releaseLock(configId: number, leagueCode: string, farmId: number, roleId: string) { diff --git a/shared/domain/gvgField/returnData.ts b/shared/domain/gvgField/returnData.ts index 8cfad112a..da6c17e86 100644 --- a/shared/domain/gvgField/returnData.ts +++ b/shared/domain/gvgField/returnData.ts @@ -329,6 +329,7 @@ export class LeagueField { harvestTime: number; // 收获时间, 10位时间戳 unlockTime: number; // 锁定时间,会按照内政令的数量给玩家预锁定一批填,超过时间限制就不锁给他了也会分给其他人了 index: number = 0; // 位置 + output: number = 0; // 产量 constructor(leagueFarm: GVGLeagueFarmType) { if(!leagueFarm) return; @@ -338,6 +339,7 @@ export class LeagueField { this.harvestTime = leagueFarm.harvestTime; this.unlockTime = leagueFarm.unlockTime; this.index = leagueFarm.index||0; + this.output = leagueFarm.output; } }